Fork me on GitHub
#clojure-russia
<
2015-12-21
>
asolovyov06:12:00

@artemyarulin: на quasar/pulsar тогда лучше посмотри, чем на акку

asolovyov06:12:06

оно не такое тяжелое и страшное

asolovyov06:12:24

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

asolovyov06:12:30

и там, и там simple_smile

pacman06:12:35

Наверное лучше модель акторов начать изучать с ерланга и его приложений, также освоить OTP.

pacman06:12:49

Так сказать идеоматически проникнуться..

pacman06:12:45

а потом щупать что-то вроде https://github.com/puniverse/pulsar

asolovyov06:12:28

с эрланга начать - это длинный путь, который имеет смысл, если времени много есть simple_smile

artemyarulin07:12:59

дак а сама идея акторов как вообще? пульсар, акка как я понимаю это чисто имплементация?

artemyarulin07:12:15

ерланг ага - но как-то очень долгий путь да simple_smile

dottedmag07:12:33

Даже с эрлангом для "сегодня на одной, а завтра на десяти" приходится править код.

artemyarulin07:12:58

аа ок, я думал там магия какая simple_smile

turtle08:12:41

Нафлудили то на выхах. simple_smile

rm09:12:45

ща я вас заставлю делать фейспалм . Как в cljs заставить команды выполняться по очереди?

rm09:12:17

а то опыт показывает, что (do (update-tokens data) (helpers/navigate! "/videos")))) вот это вот делается одновременно

artemyarulin09:12:34

всмысле?

artemyarulin09:12:57

update-tokens асинхронный если то да

rm09:12:18

а я хочу по очереди

artemyarulin09:12:31

дак update-tokens асинхронный?

rm09:12:41

а надо сделать нет :)

artemyarulin09:12:42

кор.асинк, коллбеки

artemyarulin09:12:15

из асинхронной операции в CLJS сделать синхронную не получиться

andrewtropin09:12:39

ребята, возник вопрос. как превратить (1 2 3 4 5 6) -> ((1 2) (3 4) (5 6))?

artemyarulin09:12:25

partition 4 (range 20))
;;=> ((0 1 2 3) (4 5 6 7) (8 9 10 11) (12 13 14 15) (16 17 18 19))

artemyarulin09:12:21

partition-all чтоб не потерять последний айтем если их будет не четное количество

rm10:12:09

=> (def c (chan 10))
=> (go (>! c "hello"))
#object[cljs.core.async.impl.channels.ManyToManyChannel]
=> (go (<! c))
#object[cljs.core.async.impl.channels.ManyToManyChannel]
янифиганепонял. @artemyarulin помоги

artemyarulin10:12:05

ы, дак все понятно же:) в твоем случае

(go
     (<! (update-tokens data)) ;; update-tokens должен возвращать канал. Здесь мы из него читаем - он должен вернуть значение только когда он закончил все делать
     (helpers/navigate! "/videos"))))

artemyarulin10:12:22

если по быстрому то может просто на коллбеках?

artemyarulin10:12:54

(update-tokens data #((helpers/navigate! "/videos"))) 

artemyarulin10:12:19

добавь еще один параметр в update-tokens и дергай его когда закончил все

rm10:12:22

не, пджжы. Давай с простого примера, который в консоли

rm10:12:46

есть канал, я в него сначала положил, а потом достал

rm10:12:53

почему ничего не напечаталось?

artemyarulin10:12:46

дак напечаталось

artemyarulin10:12:51

#object[cljs.core.async.impl.channels.ManyToManyChannel] `

artemyarulin10:12:32

go блок возвращает канал, вот оно и вернуло. Внутри он уже прочитал из канала и благополучно его съел

artemyarulin10:12:44

тебе надо сделать (go (println (<! c))

rm10:12:34

=> (go (>! c "hello")) (go (println (<! c)))
#object[cljs.core.async.impl.channels.ManyToManyChannel]
#object[cljs.core.async.impl.channels.ManyToManyChannel]
неа

artemyarulin10:12:58

эм, а может у тебя не настроен print. Попробуй для верности (go (.log js/console (<! c)))

artemyarulin10:12:07

и посмотри консоль браузера

rm10:12:00

точно, в консоль браузера печатает

rm10:12:41

@artemyarulin: спасибо!

turtle11:12:59

Товарищи, у меня lein сломался.

turtle11:12:55

Короче, мне 403 отдаётся по этому урлу.

artemyarulin11:12:03

тож самое

artemyarulin11:12:08

тьфу, не понял что у тебя это внутри. Обновить лейн низя?

turtle11:12:11

Скачал заново установочник.

turtle11:12:18

Вот, обновил.

turtle11:12:02

Теперь нормально.

turtle11:12:14

В общем, я испугался было даже вначале. simple_smile

linuccio15:12:40

Кто-то ещё не настроил FiraCode после десятка твитов от @tonsky ?))

rm15:12:47

мне нравятся мои разные символы. не хочу их склеивать

ponimas15:12:01

а что в линуксах настраивается?

linuccio15:12:13

Не во всех редакторах, но да

ponimas15:12:27

в ЕДИНСТВЕННОМ ПРАВИЛЬНОМ - нет

linuccio15:12:40

Нет, в правильном нет

artemyarulin15:12:24

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

ponimas15:12:38

гиковей смотрится

ponimas15:12:47

конец списка

artemyarulin15:12:44

ну и да в Редакторе то нет

linuccio15:12:36

ИМХО, правильно, что, скажем, стрелочка отображается как один символ, но почему её нельзя удалить как один символ...

linuccio15:12:06

Т.е. при редактировании это так же несколько символов

linuccio15:12:25

Я понимаю что такое лигатуры, но как-то всё-таки это неправильно

konukhov16:12:55

@linuccio: я недавно как раз поставил в имакс себе вместо Source Code Pro – в целом, шрифт намного больше нравится. но на лигатуры я решил забить, использую без них – не понравилось. когда они где надо – круто, но чаще только мешают и появляются в самых неожиданных местах.

prepor16:12:13

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

larhat16:12:15

даж в аквамаксах всяких?

prepor16:12:11

ну да вроде. там же рендерилка та же

konukhov16:12:04

там есть сборка, где они нормально работают, emacs-for-mac, называется, но это форк => там другие косяки есть.

konukhov16:12:34

нормально после пары строк в конфиге, в смысле, а не того хакерского сниппета с регекспами simple_smile

konukhov16:12:44

(when (functionp 'mac-auto-operator-composition-mode)
  (setq mac-auto-operator-composition-characters "!\"#$%&'*+,-/:;<=>[email protected]^_`|~.")
  (mac-auto-operator-composition-mode))
должно быть тут #C0D2M7JEN, конечно, простите

Dosbol17:12:48

Привет всем, Вот я агитирую своего начальника посмотреть на кложе. Он хочеть почитать НА РУССКОМ. Чего бы ему рекомендовать? P.s: он джавист

Dosbol17:12:48

Отдал Программирование на clojure. Практика применения лисп в мире джава ДМК,2013, Правильно ли сделал?

Dosbol17:12:58

пугает только 800 страниц

a.espolov17:12:25

дык всю мощь лиспа не увидеть)

andfadeev17:12:42

народ, помогите с кор.асинком плз, вот начал я юзать mount вот так

(def my-chan (a/chan (a/buffer 10)))

(defn start-consumer []
  (a/thread
    (loop []
      (when-let [task (a/<!! my-chan)]
        (try
          (processing-task task)
          (catch RuntimeException re
            (log/error re)))
        (recur)))
    ))

(defstate consumers
  :start (start-consumer)
  :stop (a/close! my-chan)
  )
а из других место юзаю
(defn put-task! [task]
  (a/put! my-chan task))
но во время разарботки часто же приходится делать start stop компонентов и в текущем виде канал закрывается и на этом все, а как правильно сделать то?

a.espolov17:12:44

а что должно произойти с каналом после вызова стоп и старт?

andfadeev17:12:46

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

rm17:12:44

А чому датаскрипт не разрешает хранить nil-ы?

nicola18:12:40

@andfadeev канал на всегда закрывается, на этом строиться семантика остановки всей системы

andfadeev18:12:51

я понимаю

andfadeev18:12:00

а что если я из старта верну канал?

nicola18:12:35

Для чего?

andfadeev18:12:25

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

andfadeev18:12:48

я понимаю что канал закрывается один раз

nicola18:12:22

Ага, так и нужно

andfadeev18:12:13

отлично

artemyarulin19:12:37

Shem is a new compiled-to-JS, statically typed, pure-by-default functional programming language. The semantics are based on Haskell but the language evaluates strictly in a similar way to PureScript. The syntax is S-expressions-based, allowing for a full-blown LISP-like macro system. Shem's prelude includes a full-featured, highly-polymorphic collections library backed by ImmutableJS.

ul20:12:45

Shen, Shem... вангую следующий статически типизированный лисп будет Shel

dottedmag20:12:56

ой, какой забавный уродец

dottedmag20:12:09

haskell-like, strict, с s-exprs

a.espolov20:12:41

нет ли варианта поинтересней для реализации ветвлений в цепочки вызова?)

ul20:12:16

cond-> ?

a.espolov20:12:12

спасиб)

artemyarulin20:12:09

я чота не понял про 0.0.1-SNAPSHOT версии: лейн будет напрямую из репо сливать либу или все равно мейтейнеру либы нужно будет релизить в кложарс апдейты?

ul20:12:41

всё равно релизить

ul20:12:28

и вроде лейн снэпшоты раз в два дня проверяет

ul20:12:20

так что если релизить слишком часто, не у всех будет самое свежее всё равно

artemyarulin20:12:43

хм, а можно как-нить заставить лейн мастер сливать сразу? Или там локально из фолдера - пишу либу, хочу протестировать в другом проекте

ul20:12:08

checkouts у него есть

artemyarulin20:12:31

ага, но он работает тока когда хотяб один релиз был в кложары

artemyarulin20:12:17

а, оу - я ж могу в source-paths указать доп фолдер просто

artemyarulin20:12:38

тьфу, уже так сделано для другой либы, туплю

a.espolov20:12:45

ul: помню ты давал рекомендацию по релоадингу handler’a в immutant

ul20:12:47

ну можно ещё делать lein install

a.espolov20:12:57

не трудно напомнить, того чата уже нет(

ul21:12:25

@a.espolov: сейчас поищу, из головы не могу уже написать, давно с ним дела не имел

ul21:12:13

слушай, а он же вроде уже всё умеет сам http://immutant.org/documentation/2.1.1/apidoc/immutant.web.html#var-run-dmc

ul21:12:26

если запустить в development mode

a.espolov21:12:33

я то же так думал

a.espolov21:12:43

дергаю cider-refresh

a.espolov21:12:50

и ни чего

a.espolov21:12:59

либо перезапустить систему

a.espolov21:12:01

либо репл

ul21:12:53

у меня в одном проекте просто в миддлвары руками добавлен ring.middleware.reload, а во втором использовано что-то наподобие сиерровской системы и я её из репла перезапускаю

ul21:12:16

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

artemyarulin21:12:54

а как сделать дистрактинг по ключам мапы но с дефолт параметрами если нет? т.е. счас у меня

(defn start-repl [{:keys [app-name base-url root-ns]}]
   (let [app-name’ (or app-name “defaultAppName”)
             base-url’ (or base-url “localhost:3333”)]
что как-то совсем не красиво

artemyarulin21:12:00

айда кложура: let [{:keys [x y] :or {x 45 y 0}} {:y 2}] [y x])

artemyarulin21:12:31

о кстати - вопрос знатокам: Репл становиться почти бесполезен когда речь идет о go блоках, заэвалив любой го блок все что можно получить это #object[cljs.core.async.impl.channels.ManyToManyChannel]. И начинаются извраты с притлн и прочими. Внимание вопрос: Можно ли написать для сидера функцию которая будет возвращать значения канала? Типа асинхронный эвал такой, с коллбеком