This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-12-18
Channels
- # admin-announcements (12)
- # adventofcode (2)
- # beginners (10)
- # boot (340)
- # cljs-dev (1)
- # cljsrn (30)
- # clojure (79)
- # clojure-germany (4)
- # clojure-japan (4)
- # clojure-nl (2)
- # clojure-russia (141)
- # clojurescript (125)
- # core-async (9)
- # datascript (2)
- # datavis (8)
- # datomic (9)
- # editors (5)
- # editors-rus (4)
- # hoplon (69)
- # ldnclj (63)
- # off-topic (1)
- # om (291)
- # parinfer (7)
- # portland-or (3)
- # proton (248)
- # rdf (3)
- # re-frame (14)
- # remote-jobs (4)
@ul: О, прикольная идея
надо обдумать
только надо помнить о том, что если выполнение кода откладывается (например, возвращается ленивая последовательность), то в момент выполнения биндинг будет не тот, что во время создания
Ага, но как понимаю если что-то можно сделать без них - то лучше без
да, мнение коммьюнити склоняется к этому. было в мэйл-группе длинное обсуждение, и многие библиотеки стали уходить от биндингов к явной передаче параметров
хм, ок - буду иметь ввиду, спасиб
у меня глупый вопрос. В проекте почему-то есть одновременно figwheel-sidecap и weasel. Я сейчас почитал доку и вижу, что есть figwheel-sidecap.repl-options, который дает мне репл (и много всего еще). Вопрос -- нужен ли мне после этого weasel?
не нужен
начиная вроде с версии 4
или пятой
всем привет. не могу сообразить как решить такое - дан вектор [:da :da :net .....] надо получить такое [[:da :da ] [:net ....]] Подскажите как такое решается
> (group-by identity x)
{:da [:da :da], :net [:net]}
> (partition-by identity x)
((:da :da) (:net))
> (partition 2 [:net :da :net])
((:net :da))
я наванговал, что нужно сгруппировать по значениюесть последовательность. в начале у нее может быть сволько угодно :da затем последовательность чего угодно из списка (:da :net :neznayu)
чтобы проще писать - на цифрах - [1 1 2 3 4 1 1 2] должно вернуть [[1 1] [2 3 4 1 1 2]]
прикольно видеть keywords с транслитом
ааа ок, сорян. /me задумался, умеет ли кложура utf и могу ли я написать (def переменная :мой-ключ)
крутяк, надо будет потролить коллег
а меня за то, что я отлаживал alert-ами, выводил какие-то матюки, а потом не убрал и отправил на прод ^_^
не меня но моего другана сильно выели за то что он по запарке хотел удалить тестового аккаунта на проде и написав DELETE FROM Users
осознал что забыл указать WHERE
блок
Тут недавно коллега миграции накатил на новый проект, но на старую базу. Дропнулось всё за три года. 😢
Админ из бэкапов восстанавливал, но там какие-то сложности были. То ли база большая-пребольша, то ли ещё что.
Когда чуть не забыл where в запросе
чет туплю, есть вот такой код
(ns blabla.main
(:require
[blabla.some-ns]
))
запускаю из emacs cider-jack-in, все ок, делаю cider-refresh и получаю ошибку в одном из тестов, где
(ns blabla.some-test
(:require
[blabla.some-ns]
))
error compiling some-test, no namespace blabla.some-nsвангую что проблема с _ <> -
tree
command for the rescue!
@andfadeev у тебя файл с тестом называется так же - blabla.clj
файл называется billing_mailer/core_test.clj в нем неймспейс (ns billing-mailer.core-test)
все нашел в чем дело, кто объяснит почему? в тесте было так (:require [blabla.some-ns :refer :all])
и сидер не эвалил этот неймспейс, убрал :refer :all
стало все ок
видишь ли первом твоем "упрощении" не было никаких ":refer :all", а теперь это стало источником проблемы. может ты и еще что-то упростил
Ребят, у меня вопрос про параллельные вычисления в ФП. Допустим, у меня есть ThreadPool, в котором крутятся воркеры и расфигачивают какой-то массив данных (простой pmap по вектору с урлами, например). + Есть отдельный воркер, который кидает запрос на авторизацию, например. В какой-то момент, когда мы получили 403 в воркере, мне нужно их всех заблокировать, получить новую сессию (общую для всех), передать ее в остановленные воркеры и продолжить работу. Как только опять нужен новый токен, провернуть то же самое.
Я сделал так: у меня есть (def session (agent nil))
, в котором хранится токен. И есть функция (defn get-session [] (locking lock @session))
. В каждом джобе мы делаем get-session
, и если дальше получили отказ авторизации, то делаем (send-off session (fn [_] (locking lock (fetch-new-session!))))
и ретраим джоб – он блокируется, пока agent не закончит работу.
Как это правильно сделать без mutable конструкций типа agent? И вообще, как такое обычно делается? Без core.async. Мне кажется, @prepor знает точно
ха-ха! мне просто кажется, что это классическая задача, и интересно, как в fp такое решается без csp, с простыми тредами или фьючурсами. монаду какую-нибудь сделать или еще что-то.
с другой стороны, без global стейта не представляю, как всем сказать, что вы мол подождите, пока я вам новую сессию достану.
ну смотри, у тебя должен быть некий "мастер ключей". у него всего из двух методов "дай ключ" (блокирующий) и "мой ключ сломан, наверно стоит обновить".
http://community.haskell.org/%7Esimonmar/papers/haxl-icfp14.pdf и видео соответствующее можно посмотреть ещё %)
вся логика (и стейт) о том что есть ключ, как их обновлять и параллельность этого дело (ее отсутствие точнее) сосредоточено в нем
а как ты уже реализуешь этот блокиурющий апи на get-key, кор асинк или мьютексы или еще что — другое дело
никакой прямой связи с фп-методологиями я тут не вижу, просто дизайн интерфейсов компонентов (я не про тот компонент!). в частности как тебе тут haxl поможет я не знаю )
haxl inspired кложа либа от нашего соотечественника если что тут https://github.com/kachayev/muse
haxl в презе затрагивает похожие темы — кэш, "схлопывание" реквестов в один и тд. про авторизацию они чот не говорили, да, хотя для них это тоже нужно. https://github.com/facebook/Haxl/blob/master/example/facebook/FB/DataSource.hs здесь протухания ключа, кажется, никак не хэндлят
> как в fp такое решается без csp, с простыми тредами или фьючурсами. в "FP" нету ни csp, ни тредов, ни фьючерсов, непонятно откуда кстати ограничение на коре.асинк — им бы было проще, думаю, с очередью задач, которая отдаёт (key, task) и умеет если чо перезапросить key
а ограничение на core.async оттуда, что мне интересен скорее подход, чем имплементация, вне рамок модели акторов или csp. буду разбираться с haxl и muse. там в muse есть еще ссылка на подобную либу от твиттера на scala (с finagle, видимо) – stitch – ее тоже надо посмотреть.
Книжицы и статьи - http://steshaw.org/plt/
Помощь группы: я хочу написать компонент где стиль на garden смешан с hiccup - а потом извлечь стиль с иерархией селекторов
(defcomponent [props]
[:div.class (style {attr: val} [:&:hover ...] )
[:div.child (style ...)]])
-> :style [:div.class {attr: val} [:&:hover ...]
[:div.child .....]]
-> :hiccup [:div.class [:div.child ...]]
С параллельным деревом стилей - хз. Может, просто за второй проход отдельной функцией дерево стилей сделать.
сложность с фазой в которой это делать, поскольку если есть [div1 (style1) (for [x xs] [div2 (style 2)])] - надо получить [div1 (style1) [div2 (style 2)]] и [div1 (for [x xs] [div2 ])]
nicola: бери вордпресс, там можно все в одном файле и цсс и пхп и джаваскрипт
пхп? )