Fork me on GitHub
#clojure-russia
<
2015-12-07
>
nicola06:12:30

Неэтичьненько

nicola06:12:29

Знаешь, как лучше - сделай. Не знаешь - используй reagent

niwinz06:12:21

With rum you can do the same thing that reagent, without ratom hack and more poweness.

nicola06:12:21

Никита молодец, но я компоненты и миксыны не люблю - привкус ООП - функции наше все ;)

niwinz06:12:30

It dependes on how them are done, the rum mixins are not OOP, in fact are fully functional, them are just function compositions..

niwinz06:12:07

and not using or not trying only because of name mixin was used...

niwinz06:12:22

I agree with you, I also don't like mixins...

niwinz06:12:39

but the rum mixins are not the same as oop mixins...

nicola06:12:13

U mean mixins in rum are traits? ;)

nicola06:12:04

@tonsky, hangout about rum? ;)

wwall07:12:17

Снова я с вопросом - не могу понять как добавить к своему проекту ссылку на библиотеку с гитхаба, которой нет в clojars

wwall07:12:45

подскажите в какую сторону копать?

nicola07:12:19

git submodule init git submodule add ... потом добавь в src path

wwall07:12:24

спасибо. буду читать

artemyarulin07:12:59

Про срач на ом:

I, and probably many here, do not have the fancy problem of data normalization and such.
дальше не читал

artemyarulin07:12:50

ладно, я прочитал. В общем стандартный срач тех кто не понял и кричит что сложно и тех кто разобрался и оценил идеи. Единственный уместный аргумент про ом-некст это learning curve. Но процитирую оттуда: The problem is NEVER about how to get started quickly.

shinych08:12:25

Там местами справедливо про минусы реагента и рефрейма (комент unknown4242), но в общем имхо пуризм - при должной дисциплине это все не проблема

shinych08:12:36

Хотя про ратомы он гонит. Enjoy with care ;)

andre09:12:39

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

(map #(if (= (:id %) 1) (assoc % :voteStatus 1) %) [{:id 0} {:id 1} {:id 2}])
=> ({:id 0} {:id 1, :voteStatus 1} {:id 2})

andre10:12:21

есть что-то для поиска в массиве мапов по условию и апдейта? все update-in и assoc-in работают по индексу

andre10:12:42

но индекс по условию я тоже не нашел как просто вычислить

artemyarulin10:12:15

ты не с ом-некст играешься? У меня та же проблема просто с тем-же решением simple_smile

artemyarulin10:12:57

думал вчера сюда написать, спросить тот же самый вопрос simple_smile

artemyarulin10:12:24

вот тут есть несколько примеров используя reduce например http://grokbase.com/t/gg/clojure/137ysxb6j5/changing-a-value-in-a-vector-of-maps

artemyarulin10:12:21

Может кто знает, есть какая функция стандартная которая делает вот это? А то часто приходиться такое делать:

(if (pred m)
  (f m)
  m)

wwall10:12:11

с instaparse ктонибудь работал? про meta можете рассказать?

andre10:12:45

еще вариант в мою тему

(assoc-in [{:id 0} {:id 1} {:id 2}]
          [(first (first (filter #(= 1 (:id (second %))) (map-indexed vector [{:id 0} {:id 1} {:id 2}])))) :voteStatus]
           1)
не знаю даже , есть подозрение что он еще и хуже simple_smile

artemyarulin10:12:07

эм, чутка похуже simple_smile

andre11:12:50

кто-нибудь работал с монго?

dottedmag11:12:37

@artemyarulin: Так сделай функцию apply-if, которая будет принимать предикат, аппликатор и значение.

artemyarulin11:12:04

дак сделать то не проблема, мож думал есть стандартная какая

dottedmag11:12:44

(nth (iterate f m) (if (pred m) 1 0)) trollface

dottedmag11:12:05

Не придумал, как булеаном проиндексировать последовательность

artemyarulin11:12:56

поживу пока с ифом наверно simple_smile

prepor12:12:02

ну напиши свою функию, чего

rm12:12:19

мне кажется, у каждого лиспера должна быть своя либа типа my-name.utils с такими функциями. И сводить с ума других лисперов этим ^_^

artemyarulin12:12:56

тебе не кажется simple_smile

prepor12:12:20

но я перестал туда писать в пользу flock-staff.utils

prepor12:12:26

(внутренней либки)

razum2um20:12:37

@rm: @prepor кстати, да тенденция есть и меня избалованного active_support это беспокоит. просто есть куча всего, что пишут все, но в стандарт не попадает - перепрокидывать исключения в каналах - что характерно, имена ф-й из разных либ бывают близки семантично, типа ?? но все равно смотришь например код ptaoussanis приходится заглядывать в его encore, что мне кажется как то сбивает фокус, не?

razum2um20:12:20

любопытно, можно ли вычислить общее кратное среди всего этого https://github.com/search?l=Clojure&amp;q=utils&amp;type=Repositories&amp;utf8=%E2%9C%93

prepor20:12:42

razum2um: "избалованного active_support"? бгг. в общем я тоже считаю что вокруг core.async должна появиться хорошо спроектированная библиотека более высокого уровня, core.async это только примитив. но пока нет, так что приходится выживать

razum2um20:12:12

@prepor: ты же тоже с руби бекграундом?

prepor20:12:33

было дело как-то, да )

razum2um20:12:46

приходилось писать хоть что нить типа utils там? обнаруживал, что истинно утиную типизацию для #blank? #present? #try #presence обеспечивает оно и без AS грустно?

rm20:12:44

в руби как-то нет такого, чтобы писать свои манкипатчи

razum2um20:12:49

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

prepor20:12:03

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

rm20:12:32

уже есть вроде

prepor20:12:34

а то что всякие 2.days.ago есть — ваще пофигу, это такая мелочь

rm20:12:14

@prepor: ты зажрался :) в руби у него stdlib нет

rm20:12:46

просто многопоточно на руби пишут 3.5 человека

razum2um20:12:24

@prepor: ну давайте не отбиваться от темы, я просто думаю, что это может и неправильно и все на патчах std, но удобно же. просто не видел, чтобы в экосистеме гемы делали свой -utils вместо AS

prepor20:12:48

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

prepor20:12:41

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

rm20:12:02

я вижу

rm20:12:29

AS почти каждый, кто юзает рельсу, знает, а твой noname-utils ты будешь знать один

prepor20:12:37

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

razum2um20:12:40

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

prepor20:12:01

> AS почти каждый, кто юзает рельсу, знает, а твой noname-utils ты будешь знать один ну давайте проверим. rm, razum2um вы знаете ЧТО именно делает AS::Dependencies

razum2um20:12:29

фактически оно сильно хачит автолоад

rm20:12:55

причем непонятно, зачем. Я как-то смотрел и не понял, чем их require_relative не устроило

razum2um20:12:25

автолоад рубишный не threadsafe, пришлось

razum2um20:12:40

из рубей его хотят вообще выкидывать

razum2um20:12:36

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

razum2um20:12:05

но да, это оффтоп ruby, concurency все дела simple_smile я с тобой

razum2um20:12:44

я вообще то про расширенную stdlib, которую я не успел застать, был же -contrib

prepor20:12:24

> автолоад рубишный не threadsafe, пришлось можно подумать AS до фига тредсейфный (был во всяком случае, не думаю, что что-то особо поменяло. AS::Dependencies нужен ровно для одного — сделать reloadable код, киллерфичу рельсы. для чего потребовалось похачить всю систему загрузки кода в руби. криво, работюще не всегда, но хоть как-то, это такой основной принцип AS вместе со всеми его коллбэками и AS::Concern

prepor21:12:18

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

prepor21:12:23

имха такая, гг )

rm21:12:32

ну Матц вроде активно хочет не загнуться. Готов аж акторы в руби притащить (или что угодно еще, лишь бы не писать многопоточность на мьютексах). Наверное, и релоад сделает, когда припечет

prepor21:12:54

> и да, prepor рельса с внимательно подобранными гемами запускается в тредовом вебсервере и работает в продакшене довольно давно как "в продакшене" работает мультитродовая рельса можно вывести из вот этой части вики sidekiq "https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#no-leak-issues-please"

artemyarulin21:12:19

>в общем я тоже считаю что вокруг core.async должна появиться хорошо спроектированная библиотека более высокого уровня ну вот реактивное программирование и всякие RxJava, Rx.JS это как раз более высокий уровень

razum2um21:12:46

ну поэтому я и написал про “подбор” simple_smile да, экосистема хромая в этом смысле, но еще раз, я тут целиком разделяю твое мнение про concurency, я сейчас о другом

artemyarulin21:12:55

а ну и коли мы тут про руби - язык гавно, что за исчадие ада в котором есть alias|alias_method

prepor21:12:13

> ну вот реактивное программирование и всякие RxJava, Rx.JS это как раз более высокий уровень я скорее про что-то вроде https://github.com/janestreet/async_kernel/blob/master/src/monitor.mli и все что рядом

artemyarulin21:12:44

сходу не понял в чем преимущество

artemyarulin21:12:07

точнее так - сходу не понял simple_smile

prepor21:12:57

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

prepor21:12:53

там и аналог канала имеет ряд полезный фундаментальных хелперов https://github.com/janestreet/async_kernel/blob/master/src/pipe.mli

prepor21:12:16

ну и вообще не плохо бы иметь one time канал как примитив тоже, но это вроде уже есть в мастере core.async

prepor21:12:31

promise вроде называется

artemyarulin21:12:53

дада, добавили в последнем релизе

artemyarulin21:12:33

как кстати окамл? стоит его посмотреть или это просто хаскел с видом сбоку?

prepor21:12:43

это совсем не хаскель

prepor21:12:25

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

razum2um21:12:39

@prepor: писал на практике? можешь короткое summary про боль-радость?

prepor21:12:32

razum2um: https://github.com/prepor/condo/, робит в проде. нет нормального хттп клиента/сервера (!!!), плохо обстоят дела с рендерингом документации / сорцов (при этом сама документация часто на хорошем уровне), нет нормального дебагера, профилятора, нет нормального средства изоляции зависимостей, нет нормального подходящего для всего средства управления проектом, наличие GIL для некоторых проектов (не для меня) может оказаться проблемой.

artemyarulin21:12:54

>нет нормального хттп клиента/сервера ну это чота прям вааще уже, как так

prepor21:12:28

да ваще бесит, все хочу сам написать

artemyarulin21:12:17

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

prepor21:12:36

ну у них там ситуация сложная. сообщество разделено на две части (кстати вот еще забыл написать), одни пишут на async, други на lwt + batteries например. https://github.com/mirage/ocaml-cohttp имеет интерфейсы и туда и туда. но основная их тема это unikernel

prepor21:12:09

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

artemyarulin21:12:11

>одни пишут на async, други на lwt + batteries бегло позырил, получается одна просто асинхронщина по типу горутин, а вторя читые треды?

prepor21:12:12

> ну это чота прям вааще уже, как так ну вообще это часто так ) в расте вон тоже нет нормального клиента, что б не блокировался и все такое

artemyarulin21:12:02

раст тоже боль, жду и надеюсь

prepor21:12:19

> бегло позырил, получается одна просто асинхронщина по типу горутин, а вторя читые треды? нет, это про одно и тоже. отложенные вычисления с монадическим интерфейсом

prepor21:12:49

ну в расте вообще про конкаренси ничего нет, а тут вроде база збс, а вот хттп нет )

prepor21:12:11

ну т.е. есть (у меня например полно хттп), но не кривоватый )

artemyarulin21:12:12

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

artemyarulin21:12:33

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

larhat22:12:40

> ну в расте вообще про конкаренси ничего нет треды + mio; удивлён, что чуваки из серво не запилили лучше, им же тоже надо, но их видимо прёт в асинстиле handle_a handle_b писать :( http клиент в расте неплохой, но да, блокирующий хттп в окамле есть, наверное не идеальное просто. но вот в го, например, нельзя 422 отправить нормально, и ничо, едят

larhat22:12:21

за condo — у нас (в другой компании и стране!) работает предыдущий билд на го, в скором времени перейдём на окамл-версию, потому что она лучше

larhat22:12:39

вообще если вы докеры запускаете, кондо это то, на что надо посмотреть :)