This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-12-15
Channels
- # admin-announcements (60)
- # adventofcode (37)
- # beginners (53)
- # boot (94)
- # bristol-clojurians (1)
- # cider (21)
- # clara (19)
- # cljsrn (1)
- # clojure (222)
- # clojure-chicago (1)
- # clojure-dev (2)
- # clojure-nl (11)
- # clojure-russia (301)
- # clojure-turkiye (1)
- # clojurecup (6)
- # clojurescript (30)
- # core-async (3)
- # cursive (64)
- # datascript (2)
- # datomic (55)
- # devops (16)
- # editors (1)
- # emacs (16)
- # ldnclj (6)
- # off-topic (18)
- # om (113)
- # onyx (3)
- # parinfer (1)
- # proton (48)
- # re-frame (20)
- # reagent (7)
Просто пытаюсь сделать все это максимально средствами реагента (компоненты и атомы) и декларативно.
Ну это в основном бизнес логика. Есть список, в него можно добавлять сложные элементы, нужно чтобы по завершению редактирования элемента (у него есть кнопка save) фокус переходил на кнопку add
А сам? @a.espolov
увидел счас проект который уже clojure-1.8.0-RC3 использует. Кто пробовал? Есть там какие фишки интересные?
как то не впечатляет
ааа, лол
хм, может кто подскажет - я пишу кросс платформенный компонент для ом.
Проблема заключается в том что у меня у компонента есть :require [om.dom :as dom]
который внутри уже содержит require на реакт и тащит его, именно то что я хочу для браузера.
Но когда я собираю под мобайл я не хочу тащить с собой 100кб реакта, я думал что запилю отдельный профайл для лейна по типу: [org.omcljs/om "1.0.0-alpha25" :exclusions [cljsjs/react cljsjs/react-dom]]
, но компиляция не проходит ибо om.dom все равно загружается и пытается подгрузить реакт которого нету
Клоужра не умеет dynamic namespaces и я хз как это можно решить. Может кто сталкивался?
вопрос про require снимается - сделал exclusions
и добавил пару пустых файлов с неймспейсами реакта чтоб компилятор не ругался
всем привет, может кто подскажет куда копать, запилил я тут на работе небольшой прототипчик, для демонстрации коллегам (сервис который слушает сообщения из реббита, и потом в отдельных потоках обрабатывает их и шлет письма), юзаю несколько местных java библиотек, вцелом довольно много java interopa, отладил все в репле, все работает, решил попробовать собрать uberjar, а он зависает и все (не удалось дождаться успешной компиляции), если в том же проекте делаю другой неймспейс главным (считай пустой с одной фунцией -main), то все собирается норм
а нет такого, чтобы я просто добавил пару файлов, сунул туда (ns a defn ...) и все стало хорошо?
rm: почему нет? Эвалишь в нужном неймспейсе и у тебя подменяется функция. Патчить, правда, атомарными объектами функциями.
https://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md#checkout-dependencies
@prepor: о, спасибо, не знал о такой штуке
@artemyarulin: ты вчера сказал, что в Ом Некст уже не так нужна core async . Я так понимаю, что единственное место, где она пригодится -это взаимодействие с native js, или есть ещё что-то?
там когникаст с ноленом вышел
а как элегантно сгруппировать например такой вот вектор [[:x1 :y1 :z1][:x1 :y2 :z2][:x2 :y3 :z3]], чтобы получилась мапа {:x1 {:y1 z1, y2 z2} :x2 {:y3 :z3}} ? есть что-нить готовое типа (group-by [first second] coll) ?
@abtv: Взаимодействие с нейтив все асинхронное, поэтому да - там core.async еще может пригодится
@shinych: я понаркоманил:
=> (reduce (fn [r, k] (let [f (first k)] (merge r {f (merge (f r) {(nth k 1) (nth k 2)})}))) {} x)
{:x1 {:y1 :z1, :y2 :z2}, :x2 {:y3 :z3}}
@rm: ага, спс. подобное тоже нанаркоманилось думал может чего стандартное есть. страшно подумать, во что это выродится, если вдруг приспичит на n уровней агрегировать
@shinych представь что есть функция put-in аля assoc-in только создающая ветку если её нет - тогда (reduce put-in {} your-coll)
я не уверен, что тут кто-нибудь, кроме @dottedmag, помнит, чем меня раздражает re-frame и подобные: тем, что теряется минимальная типизация - неправильно указал кол-во аргументов в ивенте или его keyword неправильно написал? Узнаешь в продакшене %) Так вот чувак решил этот вопрос, не знаю, почему раньше в голову это никому не пришло, он тут все события отправляет рекордами: https://github.com/krisajenkins/petrol
ага, завтра осмыслю уже мозг не того, завтра демку показывать, ещё не совсем готово, а моск уже закипает
идеально было бы чтонить с кореасинком, чтобы возвращало ченел, куда прогрессом пукало бы
asolovyov: не понимать как рекорды добавляют "типизации". ну и кложа таки совсем не про это
ну вот в питоне, когда надо было не наёбываться, вместо диктов с ключами я использовал класс с полями. любой линтер после этого ловил опечатки в "ключах". defrecord в кложе создаёт класс, как я понимаю, и статический анализ на жвм помощнее, но я хз, можно ли его применить к кложе?
@prepor: да какая разница, что там внутри, проблема в том, что (send :soem-crap payload) норм скомпилится, а (send (->SoemCrap payload)) - нет, потому что ->SomeCrap надо писать.
как показывает практика, это снижает количество головняка мне в разы, от того что кто-то херово где-то напечатал
ну напиши (defn soem-crap [payload] {:soem-crap payload}) если очень хочется, рекорды то тут при чем
@nicola: ну вот у меня сейчас и нет пабсаба, но я хочу, чтоб хранить историю происходящего
@prepor: я могу, но тогда из-за простоты люди начинают писать это руками и всë вырождается в то же самое
да я себя то не могу. я вообще тупой слишком для кложки, постоянно забываю куда какой тип ходит, что откуда вызвать надо
так оно ж локально? если тебя минимальное локальное усилие спасает от опечаток — по-моему охуенная цена
@asolovyov а зачем тебе история, интересно ;)
@nicola: чтоб когда что-то подыхает, я эту историю зашлю на сервак и смогу потом подебажить
весело тут у вас
> так нехер было рекорды создавать тогда, все вопросы к ричу 😃 он рекорды не для этого совсем впилил
мне казалось репл как раз спасает от опечаток. 100% тест коверейдж - утопия
live reload полезен, минимальная проверка на компиляции полезна, если думать только об идеологии, то можно долго заниматься ментальным дрочерством вместо решения задач.
нет никакой утопии, это простая механическая работа, пройти просто по пути кода, проверяя таким образом опечатки и типы
я пару месяцев назад их дискуссию по поводу создавать/не создавать рекорды читал, из ирки где-то
"минимальная" проверка при компиляции она такая, какая есть в кложе. т.е. та, что не портит язык и которую можно при этом легко релизовать. типа функиця объявлена, переменная в скоупе существует. а не выдумывания конструкторов мап и филдов, что б с количеством аргументов не ошибиться
зафега вам вообще этот live reload, он жеш убог? Это все от фигвила началось что народ счас репл не включает и тока по лайв релоад все смотрит? Реально не понимаю, прояснит может кто, ведь репл...
> reify это интеграция с джавой > а рекорды это способ динамического диспатча на кложуре ты все перепутал
@prepor: твоë предложение с (defn soem-crap [payload] {:soem-crap payload})
это ровно тот же конструктор мапы
@prepor: http://clojure.org/datatypes вот тут согласны с пираньей
ну я заэвалю рендер кнопки если надо. Но просто при наличии репла опечаток не должно ж быть вообще - заэвалил, проверил. Всяко лучше чем тест на любой чих писать который может и до прода не дойдет
ну дак а что ты там рекодры применяешь - для того чтоб опечатки ловить
> In this respect it is use case similar to proxy, or anonymous inner classes in Java. ты вот это прочитал как "интеграция с джавой"? )
@artemyarulin: это абсолютно ортогональные вещи
аааааааа
не согласен что оно нужно - но усек причины
>в репле у меня есть дополнение рекордов по табу
@nicola: я этот флоучарт привел не в подтверждение своей мысли про petrol, а в подтверждение слов про то, что рейфай - это для интеграции с джавой
dnolen, известный относительно перец, вроде, протоколы и рекорды любит нежной любовью, и хики на него не матерится
@prepor: короче, блин, я читал их чат, где обсуждали, что мультиметоды тормозят и нужно просто поверх джавного диспатчера сделать что-то быстрое для кложуры. Если быстрое, то это только диспатч по типу первого аргумента. Вот и сделали рекорды.
dnolen: и что случилось с последним детищем этого перца? ) а сколько обвязок пришлось написать вокруг его интерфейсов на рекордах и протоколах? )
asolovyov: как скоростные характеристики reify в релизации протоколов отличаются от defrecord?
> НЕТ это более функциональный способ реализовывать protocol-based полиморфизм с замыканиями и всем таким
> НЕТ это более функциональный способ реализовывать protocol-based полиморфизм ты тут "функциональный" используешь как "мне больше нравится"/"пиздатый"?
(defn Foo [m] (reify Protocol (bar [] :zoo)) значительно гибче, чем (defrecord Foo [m] (reify Protocol (bar [] :zoo))
> ты тут "функциональный" используешь как "мне больше нравится"/"пиздатый"? нет, как нечто что любит оперировать firstclass сущностями
> (defrecord Foo [m] Protocol (bar [] :zoo))` только, но ок ну скопипастил быстро слишком, да )
> так reify и функции ортогональны с чего вдруг? функция это просто reify реализующая только один протокол Invoke
дада - закончите, все ждут вывода!)
и когда у меня возникнут траблы - я приду и скажу "ну бля @prepor был прав, пипец мне теперь"
> мой поинт про то что функиця это частный случай reify должен был всех победить, имха ну этот пойнт ни о чём, хотя и правильный :)
но так как вместо "когда" надо использовать "если", и скорей всего всë будет ок, и я достигну, чего хочу, то я просто буду себе молчать и быть довольным )
наследовать интерфейс == создать интерфейс-наследник, нас это в теории не интересует
вот теперь поняли - что разницы между ними как между анонимным классом и классом почти нет
(defmethod honeyfmt/fn-handler "contains" [_ left right]
(str (honeyfmt/to-sql left) " @> " (honeyfmt/to-sql right)))
(defmethod honeyfmt/fn-handler "overlaps" [_ left right]
(str (honeyfmt/to-sql left) " && " (honeyfmt/to-sql right)))
(defmethod honeyhelpers/build-clause :returning [ _ m cols]
(assoc m :returning (honeyhelpers/collify cols)))
(defmethod honeyfmt/format-clause :returning [[_ cols] _]
(str "RETURNING " (honeyfmt/comma-join (map honeyfmt/to-sql cols))))
(extend-protocol jdbc/ISQLValue
org.joda.time.DateTime
(sql-value [v]
(timec/to-sql-time v)))