This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-12-22
Channels
- # admin-announcements (25)
- # beginners (60)
- # boot (277)
- # cider (5)
- # cljs-dev (3)
- # cljsrn (2)
- # clojure (82)
- # clojure-art (15)
- # clojure-berlin (2)
- # clojure-boston (1)
- # clojure-italy (40)
- # clojure-russia (118)
- # clojurebridge (1)
- # clojurecup (1)
- # clojurescript (82)
- # component (3)
- # cursive (31)
- # datavis (9)
- # datomic (39)
- # editors (1)
- # editors-rus (9)
- # emacs (15)
- # hoplon (50)
- # ldnclj (2)
- # leiningen (4)
- # off-topic (9)
- # om (123)
- # re-frame (28)
- # reagent (7)
- # vim (1)
- # yada (3)
работал кто с tcp через aleph.tcp? какая то нездоровая ошибка возникает при отправке некоторых символов кирилицы через телнет https://gist.github.com/anonymous/52e00d2e9e7e9c183411
Просто телнеты они какие-то нездоровые в плане отправления нелатинских символов. Лучше свой клиент tcp написать для тестов.
@artemyarulin: зачем тебе асинхронный если ты можешь просто блокирующе прочитать из канала?
кложураскрипт
там вроде так низя
ага, думал мож можно какую магию придумать
да неа, почему зря - полезный опыт
вообще да, блокирующего рида из канала НЕ внутри го блока нету в CLJS
грусть печаль - ом-некст хелло ворлд вместе с реактом, даже в advanced compilation mode весит 300kb, пожатым гзипом 80кб
наверно ага, ванилла жс в этом хорош
хм, с другой стороны можно раскидать по модулям или грузить om-next и react с CDN.. наверно
это уже пожатое О_о
аа, там же нету Google Clousure и соответсвенно нету dead code elimination, у нас чутка получше с этим всеж.
но блин 1 метр, ппц
а как принято Exception обрабатывать в async go-loop? вот этот код уходит в рекурсию при throw Exception - https://gist.github.com/anonymous/750c341a3c4f808c472d и (recur) в блоке try вызвать нельзя
я бы посоветовал их не использовать вовсе. Асинхронный код и эксепшены вещь очень плохо стыкующаяся.
Я видел народ делает иногда возвращает 2 канала со значениями и с ошибками
хотя я лично передаю error объект просто и если надо прокидываю его дальше
return коды наше все да. Надо посмотреть как там чуваки на го эту проблему решают
а тьфу - у них никто throw не делает же, все возвращает [val, err] туплы
в твое гисте кста - разве recur не все время будет вызываться? даже если канал закрыт, все равно в рекур уходит же не?
или я туплю?
@prepor: Ну счас я подумав что в эти 80 кило входит CLJS + React + OM + Goog.Clousure - может даже и да
seryh: некоторые (мы) оборачиваем го-блоки в непольщие врапперы и возвращаем эксепшен (если он был) в качестве результата выполнения
@seryh: эм, ну а ты чего хотел? Ты может хотел отловить эксепшен, закрыть канал и НЕ пытаться больше go-loop продолжать или чо?
seryh: читаем результата тоже небольшим враппером, который в случае получения ошибки бросает ее дальше по "стеку"
а блин, не успел
seryh: таким образом получается дерево каналов / го-блоков в которых ты отрабатыаешь ошибку в нужном тебе месте
artemyarulin: да я понимаю причину рекурса, у меня просто этот канал биндится в либу aleph.tcp которая при ошибке закрывает канал, в гисте эмуляция этого поведения
seryh: конкретно в твоем случае: возвращай какое-то значение из блока с try. например ::stop в случае эксепшена. если значение = ::stop то не продолжай рекурсию, если нет — продолжай
вообщем вот такая модификация решила мою проблему https://gist.github.com/anonymous/e29755d17bafda438300
как-то так бы:
(defn channel-handler [ch]
(go-loop []
(when-let [ch-data (<! ch) ]
(let [res (try
(let [msg (m-dec ch-data)]
(println "->" msg)
(if (= msg "stop")
(throw (Exception. "my exception message"))))
(catch Exception e (prn "channel exception: " (.getMessage e))
(close! ch)
(prn "channel shutdown!")
::stop))]
(when-not (= ::stop res)
(recur))))))
но это не отменяет вопрос про продюссера )+ это же "упрощенный" пример? на самом деле ты не используешь эксепшены для ловли "stop"? и этот "stop" это что? часть протокола? ты посылаешь? почему бы не посылать что-то более осмысленное или просто не закрывать канал?
ищу библиотечку для filesystem watch, на http://www.clojure-toolbox.com/ их восемь штук аж, может кто чего посоветовать?
спросил уже в другом канале но спрошу еще тут - я пишу extern файл для react native и вот думаю как лучше его распространять? Тупо положить в npm например, оттуда сливать и потом при компиляции уже указать :externs [“node-modules/react-native-externs/react.native.externs.js”]
или есть может какой пральный каноничный путь? через лейн как-нить?
а ничего что у меня только экстерн файл будет?
без самой либы?
ну и мне cljsjs/packages нравится, что потом удобно использовать:
[cljsjs/llexus-form "0.7.1-1"]
и всё
хм, не понимаю как это работает - почему мой лейн подхватит extern файлы из этого пакета если я просто добавлю как зависимость? Есть какой механизм для этого?
ты пулреквестишь, они собирают жарочку, лейн жарочку ставит и
All packages provided by cljsjs provide deps.cljs files that will be automatically picked up by the Clojurescript compiler as of 0.0-2727. Versions of the Jar reflect the version of the packaged JS lib.
ну ок спасибо почитаю, вроде то что нужно
Помогите с reagent-ом, пожалуйста. Вот у меня есть вьюха, которая почему-то не обновляется, когда обновляется соответствующий стейт. Только этот стейт deref-ается не в самой вьюхе, а в функции, которую он вызывает. Как с этим бороться?
ха, Scala.js тоже юзает Google Closure, не знал
o\
WebSocket connection to 'ws://<my_site>/chsk?client-id=2970d62e-559e-49cc-9fc0-fa91a5aac4f4' failed: Error during WebSocket handshake: Unexpected response code: 200
app.js:1257 ERROR [taoensso.sente] - WebSocket error: [object Event](anonymous function) @ app.js:1257
кто-нибудь встречал такую хрень? На локалхосте даже в прод-режиме не воспроизводится, только на сервереа что такое state? проверь, что это reagent/atom, а не clojure.core/atom (стандартное попадалово)
и чего ты его параметром не кидаешь? session вот эта реагентная тоже сомнительная штука (но вопрос вкуса, наверное)
у нас выработался такой патерн - вся модель селится в один большой атом и везде прокидывается как параметр. так как-то проще жить, есть иллюзия pure functions ) но это вряд ли причина твоей проблемы
ты videos/index-view как функцию вызываешь (круглые скобки), а надо как реагент-компонент (квадратные)