Fork me on GitHub
#clojure-russia
<
2017-01-14
>
misha00:01:34

@mike1452 а тебе, прости, взрывной рост зачем? kappa

kishanov02:01:51

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

mike_ananev06:01:22

@misha пока программисты (с кем общаюсь) не хотят его учить по причине плохого трудоустройства в РФ. необходимо, чтобы он занял какой-то процент, который бы позволил без проблем зарабатывать на нем

mike_ananev06:01:34

@kishanov каких например? в языке или экосистеме?

seryh06:01:43

Есть вообще хоть один язык который можно назвать доделанным? ) перепробовал штук 7, Clojure пока самая продуманная

mike_ananev06:01:10

как по мне, тоже считаю что, Clojure самый продуманный и практичный.

seryh06:01:59

хорошим стартом для популяризации языка мог бы стать просто успешный проект который у всех на слуху

mike_ananev07:01:33

я про то и говорю

misha07:01:19

@mike1452 так то они не хотят, а тебе зачем? (будем сейчас в 5 "why"s играть kappa )

mike_ananev08:01:07

Затем, что некооторые больные ООП на голову создают подобные вещи в мои проектах

mike_ananev08:01:53

а мне нужно быстро выводить качественные системы. на java это долго, дорого и не офигенно

mike_ananev08:01:34

у меня нет претензий к языкам. у меня есть претензии к головам которые во всем видят и тащат ООП

mike_ananev08:01:55

я рисую на дашборде число 42 и спрашиваю это объект?

mike_ananev08:01:27

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

mike_ananev08:01:00

или еще пример: логи, если они структурироанные это как гугл аналитикс ( вот статья на эту тему https://juxt.pro/blog/posts/logging.html )

mike_ananev08:01:31

в Clojure я делаю структурированные логи, пишу их в Kafka и в кибане получаю почти автоматом нужные метрики и мониторинг

mike_ananev08:01:19

а эти ООП-щики мне говорят, у нас проблема прокинуть контекст логгирования (ессно в виде объекта) между разными классами и у нас это не получается поэтому мы пишем в логи в виде стрингов

artemyarulin08:01:50

ну это тогда не про кложуре, а про ФП вообще. И в этом кста уже лучше - гошечка, свифт, котлин, фреге, раст вроде все в сторону фп уже

artemyarulin08:01:31

да и скала кста

mike_ananev08:01:47

или еще пример: пишем ПО по работе с графами. Пользователь задает запрос к графовой базе через механизм каналов. Поиск кратчайших путей штука не мгновенная и поэтому кратчайшие связи показываются на web-ui постепенно, по мере отработки алгоритма. Мне нужна такая семантика. Пользователь отправляет запрос в канал. Далее по мере нахождения путей на Ui прорисовывается ответ. Если пользователю например достаточно 3 найденных ответа он жмет на кнопку и канал приема результатов закрывается. Сервер понимает, что канал закрыт значить пользователь больше не хочет получать результат и можно прервать поиск. Если сервер закрывает канал пользователь понимает, что сервер окончил работу и нашел все пути. На словах это понятно всем. Но они говорят, что у них нет таких примитивов. И на голом JavaScript + Java тааакой монструозный код выдают, который write=only и совершенно не поддерживаемый.

mike_ananev08:01:05

@artemyarulin скала сам по себе имеет парадигмы ФП. Только зараженный ООП мозг пишет код на скале в стиле ООП.

mike_ananev08:01:18

меня просто подбешивало, когда скалисты затащили ОРМ для работы с базой, в микросервисе, где это было совершенно не нужно. После связки Clojure + HugSQL переписанный код на Scala вместе с ОРМ выглядел в два раза больше, монструозней и еще постоянно ломалось у них при внесении изменний. Это не язык виноват а мозги с ООП.

dottedmag08:01:38

@mike1452 Так эта, выгнать ООП, нанять в два раза меньше кложуристов, заплатить им в два раза больше, оставить их по домам, не тащить в офис. Вон в #jobs каждый раз вопросы "удалёнка?"

mike_ananev08:01:22

вот я к тому и клоню руководство.

andre08:01:09

ждем, классная фича

andre08:01:21

@dragoncube да, вообще много чего просят и все в data-frisk менять, ну сейчас я допилю для electron и react native , remote версию, и возможно перепишу эту либу

artemyarulin08:01:30

>Только зараженный ООП мозг пишет код на скале в стиле ООП sad but true

andre08:01:58

мне кажется clojurescipt должен сыграть важную роль в популяризации clojure

andre08:01:36

7 581 просмотр

andre08:01:45

140 likes

andre08:01:01

т.е. народ понимает что это реально круто. надежно. быстро . удобно

andre08:01:50

по сюрвею посмотрим, скорее всего 2016 должен показать рост в clojurescript

mike_ananev08:01:57

@andre я думаю, что через рост clojurescript сам clojure потянется вверх.

andre08:01:03

плюс на спеку надежды

artemyarulin08:01:18

кста вот резон еще появился в этом году, считай что окамл. ФП шагает по планете (в узких кругах правда да)

andre08:01:14

все чаще вакансии стали появлятся на cljs

dottedmag08:01:07

@mike1452 Плохо, когда вы – не руководство. По возможности, старайтесь избегать этого troll

dottedmag08:01:47

@mike1452 А вы что используете для хранения логов? Меня ElasticSearch уже достал своей тупизной.

dottedmag08:01:31

Хотелось бы, конечно, чего-нибудь типа Datomic, но не ACID, чтобы не быть write-bottleneck.

mike_ananev08:01:08

пока сваливает народ локально и в Hadoop. Это связано с бюрократией по выбору системы логгирования. Пилотируем ELK,

mike_ananev08:01:15

какие проблемы с эластиком?

dottedmag08:01:36

Это fulltext-поиск, поэтому он очень плохо работает со структурированными данными.

mike_ananev08:01:13

имеется ввиду вложенные друг в друга структуры?

dottedmag08:01:49

Да. Например, если сваливать в него JSON и желать искать внутри JSON, то тогда каждое значение по определённому пути должно иметь один тип во всех лог-событиях, нельзя залогировать {"foo": 42} и {"foo": "bar"}.

dottedmag08:01:26

Потому что он JSON разворачивает в пары путь: значение. Теряя при этом индекс в массивах.

mike_ananev08:01:31

а что происходит с эластиком в выше приведенном случае?

dottedmag08:01:50

Он вываливает исключение в лог и игнорирует второе событие.

dottedmag08:01:06

Так что если тебе повезло и первое сообщение за день (когда создался новый индекс) имело числовое поле, то 1) все события со строками за день будут проигнорированы; 2) эластик упадёт, так как кончится место под логи на диске.

mike_ananev08:01:45

а если все есть string?

dottedmag08:01:06

Этого можно избегать, тщательно прописывая ему "все ключи по всем путям - строки, а не числа, не пытайся угадать", но тогда будет проблема с {"foo": "bar"} и {"foo": {"realbar": "bar"}}

dottedmag08:01:30

В общем, плохо у него со структурированными данными.

dottedmag08:01:40

Строки туда хорошо сваливать.

mike_ananev08:01:46

буду иметь ввиду

mike_ananev09:01:36

@dottedmag а у solr лучше в этом плане? не пробовали?

dottedmag09:01:05

@mike1452 Не пробовал

dottedmag09:01:34

@mike1452 У любой fulltext-based системы будут проблемы, если ты хочешь искать не по значениям, а по структуре. Это же просто инвертированный индекс.

dottedmag09:01:57

Хотя можно что-нибудь придумать, наверное.

mike_ananev09:01:28

мне нужно хранить json-подобный документ, в котором информация по клиенту (его профиль)

mike_ananev09:01:42

и нужно искать по части этого профиля.

mike_ananev09:01:05

про логи я понял

mike_ananev09:01:13

@andre спасибо за ссылку intoduction

andmed10:01:28

@mike1452 ты же вроде в сбере? если склонишь руководство, это будет действительно landslide shift

andmed10:01:28

ООП размножается почкованием -- ответил алгоритмы и структуры данных но завалил ооп patterns или не воспроизвел добуквенно SOLID none-sense то какой из тебя java программист?? стимулирует

mike_ananev11:01:13

@andmed проблема не склонить руководство. карт-бланш я уже получил. у меня есть возможность в некотором узком скоупе проектов вставить full-stack clojure. встала проблема в окружении. и я притормозил пока с решением смены парадигмы. Что делать с командой? Что делать с соседними командами, которые делают интеграцию с нами, а мы с ними? Им ООП-интерфейсы подавай или гребанный XML. Что делать с тестировщиками и инфраструктурой заточенной под java (ООП). остальное в личке, в публичном пространстве нам не рекомендуется высказываться

seryh11:01:03

легче всего на фронтенд протащить. можно с него начать

mike_ananev11:01:14

@seryh о том же подумал

leov11:01:22

народ а подскажите чем вы передаёте кложевские структуры данных из браузера на сервер? у меня не заводится ринг транзит миддлвер, уже второй пробую

leov11:01:34

хз чего я делаю не так, но не пашет и всё тут

misha12:01:57

@mike1452 и ты собрался решить наличие отбитых оопэшников в своём проекте популяризацией кложи? 1. это как-то издалека, 2. в итоге эти же люди будут код писать, думаешь на кложе сильно сложно гавна навалить оопэшного? еще потом начнут опенсорс отбитый релизить - отличай потом сиди годноту от мусора, как с js который год уже происходит Звучит так, что тебе в первую очередь команду менять надо, а не язык

andmed12:01:43

@mike1452 плюс, энтерпрайз это вроде как организационное понятие, не техническое. и если java хорошо на него ложится, то lisp энтерпрайз, это вроде как челлендж мягко говоря. ты наверняка это знаешь конечно, но имеет смысл наверное сразу смотреть на опыт энтерпрайза уже внедрившего у себя кложу. в штатах это вроде как wallmart, были видео. плюс такое ощущение, что в медицинском секторе кложа у них стартанула неплохо

leov12:01:50

не пашет у меня cljs-ajax в связке с мидлварью

leov12:01:58

мучаю канал clojurescript =/

leov12:01:10

4 часа на дебаггинг о_О

leov12:01:57

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

leov12:01:01

чтоб я сдох. ок, приеду придётся расчехлять курсив и ставить брейкпоинт. не дебажится нихрена. 😞

andre12:01:23

чтож там такое

andre12:01:37

у меня cljs-ajax завелся без проблем

andmed12:01:37

@leov тру джава вей

leov12:01:03

не если есть другой способ дебага то не скрывайте 🙂

mike_ananev12:01:35

@leov я обычно делаю repl в cljs и repl в jvm

mike_ananev12:01:40

два репла

leov12:01:24

пока не помогло. ладно, буду думать про подключение дебаггера что ли

artemyarulin16:01:01

кста дебаггер в цидере очень годен, прям по шагам, бряки, все такое

kishanov18:01:37

@leov там частенько бывает двойной энкодинг на сервере и cljs-ajax от этого тошнит

kishanov18:01:04

проверь, что сервер возвращает content-type: application/json и что данные которые приезжают не обернуты в строку

leov20:01:10

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

leov20:01:39

самое смешное, что похоже в компожуре в принципе невозможно сделать такой роутинг:

leov20:01:35

1. часть маршрутов незакрыта цсрф мидлварью, часть закрыта 2. цсрф мидлварь должна идти снаружи всего-всего (типа "безопасность") 3. должна ещё быть мидлварь, которая запускается ровно один раз за реквест. (пример: ринг-транзит-декодер, который по заголовкам расшифровывает боди в кложурную структуру данных)

leov20:01:25

@artemyarulin для дебаггера в цидере нужен обязательно емакс, так? вим не подойдёт?

dottedmag22:01:02

@leov: Теоретически подойдёт, а на практике vim-овый плагин ещё не умеет говорить с соответствующим кодом в nrepl-миддлвари.

dottedmag22:01:00

@leov А inputstream не обернуть в какую-нибудь кложурную sequence, чтобы его иммутабилизировать?