Fork me on GitHub
#clojure-russia
<
2016-04-14
>
abtv06:04:32

Ребят, у меня к вам небольшая просьба. Я готовлю доклад Full stack Clojure в production на митап в своем городе (целевая аудитория - в основном JavaScript разработчики) и специально для него я написал небольшое веб-приложение. Поддержите, пожалуйста, звездочками на гитхабе. https://github.com/abtv/tech-radar . В описании на гитхабе (в readme) вы найдете ссылку на работающее приложение. Он еще сыроват (особенно фронтенд), но в целом работает.

abtv06:04:55

Если кто-нибудь отпишется - будет вообще круто. интересно все: замечания по коду, функционалу и т.п. Единственное, фронтенд совсем сырой, планирую мигрировать на Om.next с queries и т.п., но времени пока не хватило. Я написал его по сути за 4 выходных.

artemyarulin07:04:13

@abtv: А точно ом-некст хочешь показать ко всему в добавок? Даже в этом чатике (тем кто CLJS уже знает) ом показался сложным, может чо попроще?

shinych07:04:09

Всём привет. Есть вопрос странный) если использовать реакт as is, без кложаскрипта и оберток, что там есть на подобие re-frame? Ну или что-нибудь другое, повыше уровнем, чем сам реакт

abtv07:04:16

да, я пока без ом.некста покажу. планировал и его, но не успел еще. я om.next как либу подключил в project.clj, а написал все примерно как в реагенте. не очень красиво, зато получил минимально работающее приложение. я кучу времени угрохал на работу с этой либой для твиттер апи: https://github.com/adamwynne/twitter-api - на моей машине все ок, а после деплоя часто не работало. в итоге бросил ее и переехал на https://github.com/twitter/hbc за полчаса . вот кто ж знал, что clojure либа хуже java либы (правда официальной)? @artemyarulin

artemyarulin07:04:28

@shinych: Там куча же - есть всякие flow, мне нравиться redux

rmuslimov07:04:44

https://www.youtube.com/watch?v=gsffg5xxFQI вот этот доклад пример хороший презентации для js

artemyarulin07:04:54

@abtv: Понял, ага. Надо тебе rum тоже позырить simple_smile

rmuslimov07:04:03

собственно, главное опасение с кложей, если показывать код - то примерно через 5 мин перестанут понимать о чем речь

abtv07:04:00

я поэтому пример и сделал, чтобы было нескучно. а еще можно вживую демонстрировать simple_smile

abtv07:04:38

@artemyarulin: да, я смотрел на Rum: простой, маленький. Дело в другом: мне доклад Дэвида понравился про ом.некст, вот и хочу что-нибудь на нем написать.

abtv07:04:41

и второй момент, правда не имеющий отношения к ом.некст: для начинающих разработчиков в clojure/clojurescript (особенно тех, кто не в команде из опытных программистов), очень большая проблема с тем, чтобы найти примеры кода. я вот хочу написать open source проект, в котором можно было бы посмотреть как пишутся те или иные вещи. просто у меня пока опыта не много, а желание это сделать есть simple_smile

artemyarulin07:04:45

понял, доклад у него классный и идеи очень стоящие да 👍

Roman Liutikov07:04:30

@abtv: как сделаешь что-нибудь, дай знать. Опубликую ссылку на http://clojurescript.ru :)

Roman Liutikov07:04:18

@abtv: я когда делал доклад по cljs для js разработчиков, то код показывал совсем мало и всегда сопоставлял его аналогам на js. Так хотя бы понятно, что происходит.

abtv07:04:59

@roman01la: ok и спасибо за совет simple_smile

abtv07:04:40

@roman01la: ты не против, если я у тебя в качестве преамбулы вот это стащу https://clojurescript.ru/comparison/ ? simple_smile

Roman Liutikov07:04:27

@abtv: да, конечно :)

abtv07:04:34

спасибо)

shinych07:04:03

@artemyarulin: спс! Про кучу понятно, просто практического опыта никакого, а вот понадобилось

andre07:04:46

мне вот этот доклад понравился, доходчиво для js, но можно слышать по комментариям из зала, что народ не понимаем зачем им это нужно

andre07:04:53

их доклада мне нравится слайд "нереально крутой репл" , прям в точку simple_smile

andre08:04:09

я общаюсь в московском js сообществе, много друзей в js, и для них это что-то чужеродное, из вне, когда показываешь им они смотрят как на китайскую грамоту и думают ну это чето парень там экспериментирует, зачем нам надо это, js сообщество идет своим путем - редукс, силус, вебпак, так что cljs больше для бэкенда идущего во фронтентд

andre08:04:17

кстати я это написал не посмотрев ссылку на дропбокс, но да именно так смотрят js разработчики , когда показываешь им cljs

Kira Sotnikov08:04:58

а я наркоман и тащу cljs в системные скрипты ._.

Kira Sotnikov08:04:04

вместо питона

Kira Sotnikov08:04:12

точнее пытаюсь

rmuslimov08:04:35

@lowl4tency: ну как то критике надо противостоять, на мой взгляд питон рожден для системных скриптов

rmuslimov08:04:03

и тем более cljs его вряд ли чем возьмет

Kira Sotnikov08:04:15

тут есть один хороший бонус от cljs

Kira Sotnikov08:04:31

если в команде его умеют все, то все способны взять и поправить

Kira Sotnikov08:04:39

или сделать свое новое

Kira Sotnikov08:04:54

а не ждать когда чувак со знанием питона проснется, освободится

Kira Sotnikov08:04:59

и не надо учить питон

rmuslimov08:04:25

эээ, ты уверен что это уникальный бонус от cljs?

rmuslimov08:04:51

если разделить колво людей знающих питон

Kira Sotnikov08:04:59

на ноль делить нельзя

rmuslimov08:04:03

на колво людей знающих cljs

rmuslimov08:04:14

будет exception

Kira Sotnikov08:04:03

основной язык кложа просто, ну питон простой да, но я уверен что многие предпочтут подождать и не лезть

Kira Sotnikov08:04:18

плюс мне кажется что node побыстрее

Kira Sotnikov08:04:48

я же экспериментирую, если не получится то напишу

Kira Sotnikov08:04:54

если получится то тоже напишу )

Kira Sotnikov08:04:10

зато какой классный доклад можно сделать потом

rmuslimov08:04:25

я бы наверное начал с какого нибудь римана если хочется clojure dev-ops

rmuslimov08:04:09

кажется все, жизнь безжалостная штука simple_smile

Kira Sotnikov08:04:54

у нас был риман )

Kira Sotnikov08:04:41

кстати, надо запилить чтоли для сайд проджекта

niquola08:04:14

Отказались?

niquola08:04:23

Пачему?

Kira Sotnikov08:04:01

а мы его использовали как форвардер в датадог

Kira Sotnikov08:04:17

запилили напрямую с приложухи в агент слать метрики

abtv08:04:54

@andre: я был при записи этого видео) я почему и решил сделать доклад про clj и cljs вместе со следующими утверждениями: 1. писать можно и бэк и фронт на одном языке. 2. релоадить можно как фронт, так и бэкэнд и так приложения пишутся очень быстро 3. если юзать core.async для асинхронщины, то код получается читаемее 4. на clj удобно писать обработку данных (хорошая производительность и читаемость/поддержка кода) 5. код = данные 6. хоть ES2015 и улучшил js, все равно clojure более цельный язык и код покороче и попроще

abtv08:04:25

7. можно юзать либы из java и js: я в этот проект включил twitter/hbc и dimplejs, даже и без врапперов

dottedmag09:04:50

@abtv: Ну вот надо сказать, что асинхронщина на ES6 уже хорошо пишется, с function* и yield.

dottedmag09:04:36

Там, где я работаю, есть своя библиотека на джаваскрипте для асинхронных операций. На ES5 это было неприятно: кучи функций, не в виде "лесенки", но код разбивался на части, а в ES6 стало приемлемо: yield из цикла можно сделать, try/catch использовать etc.

abtv09:04:41

@dottedmag: это да. наверное, у cljs есть преимущество в том, что в асинхронных процессах ходят неизменяемые данные (ну если сам не положил туда мутабельные данные). или это не проблема?

abtv09:04:29

парни, а как правильно именовать namespaces? например, взгляните, вот тут https://github.com/abtv/tech-radar/tree/master/src/clj/tech_radar/services есть loader, processor, saver - это pipeline такой. мне резонно сказали, что это не есть гуд. я тут вижу, что из названия не понятно, что там грузится, как обрабатывается и как сохраняется.

abtv09:04:56

но совсем специфично же не очень хорошо тоже будет? как бы вы назвали это? как вы называете свои компоненты? выносите ли отдельно сервисные функции в другие пространства имен? может у вас есть примеры в открытом доступе?

a.espolov10:04:14

@abtv: быть может имели ввиду get-texts-query -> texts-query ?

abtv10:04:54

это можно, я просто вот этого начитался https://stuartsierra.com/2016/01/09/how-to-name-clojure-functions @a.espolov

abtv10:04:22

Local name clashes ^

a.espolov10:04:03

пока ты над проектом один работаешь

a.espolov10:04:34

какая разница какие наименования имеют части приложения?

a.espolov10:04:59

ребята в сколково жируют

a.espolov10:04:46

заказывали у чувака фронт-енд он им его не сделал, так они решили на следующем этапе заказать у 3-их и выбрать из них одного)

abtv10:04:20

ну во-первых, я хотел бы и сам лучше писать, а во-вторых, совсем уж начинающим кложуристам помочь - дать небольшой проект, а потом к нему доку/пару статеек написать ) @a.espolov

a.espolov10:04:19

работало бы)

artemyarulin10:04:11

Вот эталонный доклад про ClojureScript https://www.youtube.com/watch?v=bR-sJAI2Mts 😄

artemyarulin10:04:43

“Новому человеку не нужно говорить что будет ClojureScript, когда он придет надо ему сказать что мы пишем на таком фрейморке жаваскрипта, у него чуть другой синтаксис”(с) 😄 😄

andre10:04:32

Это из этого доклада Александра?

artemyarulin10:04:29

Интересно что я видел этот ролик 2 (3?) года назад, когда еще не думал ни о какой кложуре и лиспах и вот на тебе - в этом чатике simple_smile

artemyarulin10:04:39

т.е. своей цели он добился simple_smile

andmed10:04:00

@asolovyov: вообще респект за стиль

a.espolov11:04:16

@abtc: Андрей, а ты разбирался с клиентским приложением tech-radar? смотрю там om-next используется, но в упор в исходниках парсера не вижу

abtv12:04:47

@a.espolov: не, там все очень примитивно пока, от ом.некста только название, к сожалению, руки не дошли еще, делал минимально рабочую версию. планирую доработать с запросами, парсером, убрать рест с сервера.

a.espolov12:04:07

я так понял ты тупо state свапаешь в обход парсера?

abtv12:04:41

да, от ома там просто рендер

abtv12:04:58

@a.espolov: кстати, а ты разобрался с ом.некст?

a.espolov12:04:57

@abtv: смотря что подразумевать под разобрался)

a.espolov12:04:22

уже середина апреля , а беты даже еще и не пахнет

a.espolov12:04:43

но приложения строить вполне даже можно

abtv12:04:17

разобрался - это значит написал небольшое приложение

a.espolov12:04:37

создал тут из темплейта приложение luminus и на lein run

a.espolov12:04:43

кидает ошибку Caused by: java.io.FileNotFoundException: Could not locate clojure/tools/analyzer/passes__init.class or clojure/tools/analyzer/passes.clj on classpath., compiling:(clojure/core/async/impl/ioc_macros.clj:1:1)

a.espolov12:04:03

целых два)

a.espolov12:04:11

вот 3-ей на подходе

abtv12:04:16

ты untangled использовал или "чистый" ом? @a.espolov

a.espolov12:04:45

чистый ом, у untagled темлейт не рабочий

a.espolov12:04:54

последний раз 2-го марта обновлялся

abtv12:04:57

todo работает

a.espolov12:04:13

да если новый апп хочешь, собирай из todo

a.espolov12:04:28

мне не нравится, что он на http-kit завязан

a.espolov12:04:46

хотелось бы immutant или выбор между серверами

andmed13:04:48

а почему так:

user=> (filter #(complement (nil? %)) '(1 nil 2))
(1 nil 2)
по отдельности все работает, вместе -- нет. я способ убрать nil нашел лучше конечно, но в чем здесь проблема, не понять...

prepor13:04:51

@andmed: complement принимает функцию, какую фунцию ты тут ему скармливаешь?

prepor13:04:42

а если говорить про то как решить, то в данном случае тебе, видимо, нужно (keep identity [1 nil 2])

artemyarulin13:04:34

(filter (complement nil?) [1 nil 2])

artemyarulin13:04:42

хотя keep красивше да

fxposter13:04:47

так (remove nil?) же

prepor13:04:44

remove => (filter (complement pred) coll), ага 😉

artemyarulin13:04:05

@fxposter: респект, я не догадался до этого

andmed13:04:58

я и сделал через remove, а про вопрос: елкимоталкисеменсеменыч спасибо, с вызовом напутал

artemyarulin13:04:15

@andmed: Любопытно - почему у тебя лист? `(1 nil 2) а не вектор?

andmed13:04:48

ээээммм... да вроде не суть важно. равенство меж ними нестрогое. это я сюда так вбил

artemyarulin13:04:32

нене, не важно

a.espolov14:04:08

я чет не пойму sablono не поддерживает эвент onTouchMove?