This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-07-29
Channels
- # admin-announcements (2)
- # beginners (10)
- # boot (253)
- # cider (11)
- # cljs-dev (26)
- # cljsjs (21)
- # cljsrn (7)
- # clojure (87)
- # clojure-berlin (13)
- # clojure-dusseldorf (5)
- # clojure-greece (7)
- # clojure-poland (11)
- # clojure-russia (189)
- # clojure-spec (31)
- # clojure-uk (86)
- # clojurescript (89)
- # cursive (15)
- # datavis (2)
- # datomic (57)
- # devcards (3)
- # dirac (92)
- # editors-rus (3)
- # emacs (4)
- # events (1)
- # funcool (30)
- # hoplon (3)
- # jobs-rus (6)
- # leiningen (1)
- # luminus (12)
- # mount (25)
- # off-topic (5)
- # om (43)
- # onyx (41)
- # perun (1)
- # proton (2)
- # protorepl (7)
- # re-frame (17)
- # reagent (34)
- # ring (13)
- # specter (1)
- # spirituality-ethics (1)
@andmed: Это было 2(3?) года назад, я кложуру по 4clojure начал изучать, потом плюнул и пошел сразу на продакшене учиться
очень рекомендую включить code golf (вроде так оно называется?) чтоб можно было сравнивать с самими короткими ответами других, прям очень полезно было по началу, хотя и сложно бывало понять однострочники
ОООО, ууу! Народ-народ, зацените - http://planck-repl.org/testing.html Planck умеет запускать юнит тесты с CLJS. Только-что проверил - реально lein + doo + phantomjs, cold start = 17s lein + doo + phantomjs, second run = 8s planck = 1.7s(!)
на продакшене и я б пошел. но гдеж его взять, этот продакшн, чтоб согласился на такое))
чем-то мне перл это напоминает
а чо там?
@artemyarulin: так фантом полноценный браузер, а планк всего лишь репл, не?
@rmuslimov: Ага, но юнит тесты (которые без IO и на логику) он проверит в самый раз. А для чего побольше уже можно фантом да. Т.е. не замена конечно, а как дополнение
оффтоп, в последнее время много пишут про 4clojure тут, а я вот реально хорошо продвинулся на clojure в бою тут https://www.codingame.com, очень классный онлайн редактор много интересных реальных задач, также можно посоревноваться в скорости в кодинг битвах
кстати по поводу краткости кода, там есть задачи где нужно макс кратко написать код, я всегда был на втором месте после питона, у питона сильны отрыв конечно
порядка на питоне 50 символов. на кложе 100, и дальше пошли java , с итд , 200 и больше
ну там еще конечно у кложи неймспейс много занимает и если работать со строками , у питона ничего подобного нет, так что питон в этом плане еще выигрывает по компактности кода
там есть чувак https://github.com/TerjeNorderhaug , вот у кого решения всегда реально крутые, ты вроде все сделал круто, а смотришь его решение , чувак просто мыслит на фп
@andre: можешь кинуть пример его кода?
(ns Player
(:gen-class))
(defn -main [& args]
(let [lightX (read) lightY (read) initialTX (read) initialTY (read)]
(loop [x initialTX y initialTY]
(let [remainingTurns (read)
dx (compare lightX x)
dy (compare lightY y)]
(println (str (case dy -1 "N" 0 "" 1 "S")
(case dx -1 "W" 0 "" 1 "E")))
(recur (+ x dx) (+ y dy)) ))))
@rmuslimov: я думаю что дело конкретно вот в таких мини задачках, clojure для этого не очень подходит
@rmuslimov: если брать реальные проекты то там будет наверное совсем по другому, но для меня задача была именно продвинуться в clojure , даже если она не очень подходит для этого формата задач
т.е. там всякая работа со строками, очень тяжко это все идет, в питоне все это быстрей и короче
@andre: kmk этот UI как то отвлекает. на сортировке листа девятый вал нарисован, ткнул кнопку -- самолетики появились за заднем фоне, анимации. приколькно
да и видимо эти тренажеры, кроме скорости набора на клавиатуре мало что другого помогают прокачать
@dbushenko: про http://clojure.by/articles/2016-07/clojure-vs-null
CoffeeScript: result = a?.b?.c or "sorry"
, Clojure: (-> a :b :c (or "sorry"))
или (get-in a [:b :c] "sorry")
. и нет проблемы 🙂
> Проблема NPE в коде – это не проблема неотловленных исключений или ошибок в коде. Это проблема читабельности кода.
@dbushenko: удалили мою копипасту с Хабра http://clojure.by/articles/2016-07/why-not-haskell
artemyarulin: perl golf for example
а еще тоже есть любители использовать непонятные символы )
@rmuslimov: у меня тут вчера случился приступ "А давайте закидаем Хабр заманушными статьями про Clojure!"
@rmuslimov: нужно дождаться перевода статьи на EN, чтобы сослаться на этот перевод. гы-гы.
я пару лет назад сильно популяризировал, проводил два раза курсы онлайн и в БГУ, много выступал с митапами
потом малость надоело, и я на пару лет ушел в Haskell. Может после меня какая-то популярность и осталась...
@dbushenko: в плане реальных проектов? ваши айтишники вообще сейчас огого, если загранпроектов много, то и кложа должна быть. у нас по пальцам пересчитать
ну программу курсов можешь глянуть на http://clojurecourse.by, там Никита Прокопов выложил все материалы
я сейчас пишу на кложе потому что заказчику надо jvm, но на конкретный язык -- пофиг
@dbushenko: А у тебя самого к чему душа лежит - хаскель или кложура?
@artemyarulin: смотря для каких проектов
PureScript|Elm не смотрел?
а у меня жизнь слишком короткая, чтобы делать проект на настолько сложной технологии, как Haskell. На нем получается красиво, но раза в два-три медленнее
я на Haskell/PureScript сделал два внутренних проекта на своей прошлой конторе, там до сих пор ими пользуются
тру( Я на PureScript решил уйти, разбрался со всеми профунктарами и прочими аппликатив наконец - но как начал писать понял что долго и вернулся
и не из-за того, что у меня рука не набита или я язык плохо знаю -- нифига, я долго перед этим тренировался на хобби-проектах
дада, я согласен. Т.е. может для медицины там, для финансов я бы взял хаскель/пуре заместо кложуры, т.е. для сфер где стоимость ошибки большая
любая интеграция с не-хаскелевой библиотекой почти наверняка содержит кучу ошибок, которые поправить самостоятельно очень сложно
а как тебе idris кста и вообще идея с dependent type system?
ну мне нравится 🙂 но на практике я не знаю, есть ли смысл использовать в ближайшее время...
в кложуре спека ближайшая аналогия как мне кажется
@potapenko: покажи на примере (-> a :b :c (or "sorry"))
, пажаласта. не втыкаюсь.
@dbushenko: еще для борьбы с NPE https://www.youtube.com/watch?v=L8Xe3qZfmDI&list=PLdSfLyn35ej8Q-wFP3Hjt3XPu_7DRmxZG&t=454
ребята, поругайте тут, это ведь нечитабельный код, да: https://github.com/rmuslimov/gdsconsole/blob/master/src/client/components/common.cljs#L21-L60
@rmuslimov: Может облегчить часть с разметкой хотябы? Вынести if повыше как let, onChange тоже функцию вынести и прочее. А то счас прям тяжело читается
http://www.parens-of-the-dead.com/ - A screencast series of zombie-themed games written with Clojure and ClojureScript.
@comerc: мне кажется, ты не понял основную мысль, которую я продвигал в статье. Сам nil - не настолько большая проблема, сколько проверки на nil там, где нельзя обойтись значением по умолчанию
Поэтому, если нельзя воспользоваться дефолтным значегием, выполнение фугкции нужно каким-то образом прекратить
@rmuslimov: у тебя получился спагетти-код, как у любителей PHP. Читай про способы борьбы со спагетти
@dbushenko: тоже можно изловчиться http://stackoverflow.com/questions/7491360/how-do-you-return-from-a-function-early-in-clojure
запостю сюда тоже https://clojurians.slack.com/archives/cljsrn/p1469816895000400
А то раньше надо было руками жаву ставить, не айс
@rmuslimov: компонент же у тебя мелкий:
div
div
input
ul
li
a
что бы "ниже" let'a осталось:
[:div {:class container-class}
[:.input-group__inline-control
[:input.borderless
{:type "text" :placeholder placeholder :value the-value
:onChange on-text-change
:onKeyDown on-key-down}]]
[:ul.dropdown-menu {:role "menu"}
(for [[idx [k v]] things]
[:li {:key k :role "presentation" :idx idx
:className li-class
:onClick on-li-click
[:a {:role "menuitem"}
[:span v]]])]]))
и странновато, что on-click - в li
, а не в а
, но то такое: "каждый @artemyarulin: вспомнил аргумент в пользу (:require-macros [foo.bar :as b])
vs. (:require [foo.bar :as b :include-macros true] )
:
мне так курсив не подчеркивает макросы как "cannot be resolved"
бггг, да выкинь его нафег
я на эмакс обязательно потрачусь, но в жаву спускаться из идеи - четенько, и нет пока времени и желания беситься из-за текстового редактора, и так хватает поводов
а спейсмакс это вроде просто емакс + кастомный конфиг или там чо еще есть?
мне нравилось в jsx что методы лежат в одном классе, какая явная связанность у этих методов возникала
ну в лет положи, там будет много, но зато в столбик, а не вразброс: 20-40 строк лета, 10 строк тагов
ну опять же, у меня в лете обычно куча флагов всяких, атомов. функций редко больше половины всех потрохов
с точки зрения читаемости - даже 1 лет лучше, чем то, что у тебя, потому что у миллиона хендлеров отступ будет консистентный, и сразу видно "сколько всего штук". + отделены мозги от разметки
а если летов больше - возможно есть смысл вынести компонент, как, например, из твоего (for)
> мне нравилось в jsx что методы лежат в одном классе, какая явная связанность "у этих методов возникала @rmuslimov: так они и останутся в одном классе?
вот так обновил https://github.com/rmuslimov/gdsconsole/blob/master/src/client/components/common.cljs#L21-L51
@comerc: ну как останутся в одном классе, с точки зрения чтения кода все равно будут разбросанные функции
юай не всегда становится лучше/быстрее, если его распотрошить на "кнопки" и скомпоновать потом много мелких осколков
@rmuslimov: норм - в продакшен! 🙂
тесты там же: https://github.com/JedWatson/react-select/blob/master/test/Select-test.js
@rmuslimov: нравится? )
@nicola: Ilshad & Artem про Om.Next рассказывали год назад, можно предположить, что поднабрались опыта https://youtu.be/u0hVc-wCYuE?t=4973 | еще @artemyarulin признался, что 3 месяца вкуривал, да бросил - отрицательный опыт тоже интересен | про re-natal тоже интересно, его можно запустить на Om.Next | @asolovyov тоже смотрит в эту сторону: https://www.youtube.com/watch?v=KxZGeD2ugOw&t=3820