This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-11-16
Channels
- # beginners (103)
- # boot (48)
- # cider (2)
- # clara (12)
- # cljsrn (9)
- # clojure (133)
- # clojure-art (3)
- # clojure-dev (9)
- # clojure-korea (7)
- # clojure-russia (228)
- # clojure-spec (8)
- # clojure-uk (26)
- # clojurescript (131)
- # cursive (8)
- # datomic (30)
- # emacs (4)
- # events (2)
- # hoplon (47)
- # lein-figwheel (5)
- # off-topic (1)
- # om (12)
- # onyx (337)
- # perun (23)
- # planck (15)
- # proton (3)
- # re-frame (5)
- # spacemacs (20)
- # untangled (97)
- # utah-clojurians (1)
- # yada (13)
Подскажите простейший способ реализации такого. Мне нужно сходить на два сайта (параллельно), из тела ответа что-то вытащить и собрать из двух один результат. Если какой-то из сайтов обломался (таймаут / HTTP ошибка), то вернуть частичный результат. Если оба обломались, вернуть, например, nil
.
@be9 clj-http? клиентом стучись, чего сложного то? или какой друю либу с http клиентом. паралель тем же pmap
@be9 а в чем подвох? Берешь httpkit client делаешь два реквеста (он async) потом каждый из deref (берешь ответы) и делаешь regex
@potapenko так мой вариант разве не легче?
Красивая она кложа до упомоморачения, Так красива, что стал ненавидить все другое 🙂 Скалу, например. Налетело коршунов-макетологов-толкателей. Впаривают эту скалу, а прекрасная кложа стоит грустная в сторонке 🙂
но видимо с опытом приходит простота, первый код на кложе ужасно сложным получается
классно что на емаксе/cider еще быстренько красиво отформатировал, моя был довольна. отпустило.
но что у меня было в голове, когда я это писал - не понятно. новичок, да. Еще лисп синтаксис пугает народ. Дот нотация стала стандартом. А тут другое.
угу, меня тоже затрахали (изв. за выражение) что мол сложно. Там вообще нет синтаксиса
да, это тупо дизайн. в лиспе чистый AST. а там рюшечки. Дот нотация все равно в s-expreшены превратит компилятор.
все равно везде нужна заточка мозгов. вы путаете понятность синтаксиса с пониманием, как на данном конкретном языке решить задачу
все языки с фигурными скобочками (C/C++, Java, Scala) в основе своей похожи, и если хоть один знаешь, то научиться на другом гораздо проще
у меня в универе был тока паскаль, никаких лиспов даже не упоминали(
@be9 это я не понял, где вы меня пытаетесь подловить > все равно везде нужна заточка мозгов. вы путаете понятность синтаксиса с пониманием, как на данном конкретном языке решить задачу
Я никого не пытаюсь подловить, а выражаю своё мнение: сложность, про которую говорят люди, в Clojure и в лиспах существует, просто она не в синтаксисе. И learning curve совсем другой. На той же скале можно писать как на удобной жабе, а потом потихоньку переходить к неизменяемым структурам данных и прочей функциональщине. с clojure так не выйдет.
и хорошо что не выйдет. эта интуитивная идиоматичность в итоге приводит к простоте. открываешь исходники любой либы и понимаешь что там написано. все в одном стиле. мне после 5 лет джаваскрипта, где вообще никто не знает как на нем писать и выдумывает свой стиль от либы к либе, кложа кажется просто идеально спроектированным языком.
скалу кстате часто ругают за то что в ней можно перейти к функциональщине и этим кодом шокировать остальных членов команды )
Обычно прям функциональщины никто не боится. Самая жуть начинается, когда показываешь имплиситы и магию с типами.
да, кстати, в самой жабе так не наворотишь. а вот скала и свежие стандарты C++ прямо дают в руки возможности «удивить» коллег
насчёт джаваскрипта. у нас в конторе народ стал потихоньку с него на typescript и go мигрировать
ну Interop то повсюду есть. так что не обязательно все переписывать. в тех же рамках что и при миграции на очередной ES6-7 модный фреймворк
когда я вижу чей-то js код, у меня нет желания его мигрировать, только одна мысль - переписать полностью, совсем 🙂
беда с переписыванием на другой язык в том, что язык другой, а разработчик тот же (ну, с той же ментальностью)
и если TS = JS + типы (классы мы и так не используем), то Elm и CLJS — это совсем другая опера.
поэтому функциональщина у нас делается через http://ramdajs.com/, а не через Elm 🙂
а как же мега фичи Elm и CLJS? в виде более простого кода и интерактивной разработки? раздуплиться в необычный синтаксис на сегодня будет проще чем в какой нибуть react+redux+babel+webpack+lodash+можно бесконечно продолжать
так говоришь как будто не надо изучать lein+figwheel+reagent+re-frame+можно бесконечно продолжать
@savelichalex я сужу по опыту ) опыта с js - 6 лет, с clojure - меньше года. раздуплиться в lein+figwheel+reagent+re-frame оказалось проще чем react+redux+babel+webpack+lodash
тут даже дело в том что ты можешь войти в мир кложи не вдупляя как оно все вработает первое время, но будет работать надежно. само по себе 🙂
а захотеть войти, достаточно увидеть счастливое лицо человека использующего figwheel и devcards
пока не расскажешь что происходит видят только это - https://pbs.twimg.com/media/CukkQOkWgAA5C8G.jpg
@seryh ну дык и я по опыту) по моему одинаково, всегда что то учить приходится
@be9 с "него" имигрировать в смысле с плюсов?? странно, там такие ништяки, что думаю прям перепрыгнуть с жавы
еще частенько вижу, что решение плюсистов короче и алгоритмичнее, что ли чем у колег-жавистов
@savelichalex я не осилил в то что в случае react. нужно с ворохом пакетов индивидуально раздупляться. я так и не понял как мне просто собрать реактивное SPA из всего этого. в то время как на cljs я сразу в доках увидел простое lein new re-frame <project-name> +re-com
@seryh тут поддерживаю. сам я во фронте понимаю слабо, и re-frame — это практически единственная возможность что-то сделать, не умерев на полпути. одно SPA уже так написал 🙂
ну для открыть раз в месяц и если это не основной инструмент заработка то это очень дорого
я спрашиваю как раз в контексте cljs. ладно, JS весь переваривается closure компайлером. а CSS?
я правда глубоко не смотрел в него. но вот, извините, я программист, а не десигнер, и использую бутстрап. в SCSS можно импортировать бутстраповские классы и иметь семантическую верстку (ну почти)
я тоже программист, и с цсс вообще не хочу дружить, спасибо re-com, но вот мой друг верстальщик, сказал что он не хочет мой garden пришлось прикрутить stylus , установить npm не забыть запустить его чтобы он следил за изменениями и перекомпилил
про сложность/необычность fp: пару месяцев занимался другим, и мозги заржавели... например, как переложить алгоритм токенизации строки без пробелов, в слова. алгоритм выглядит так: посимвольно прибавляем, если находим в словаре, то если токенизируем остаток (рекурсия) то кладем в словарь и возвращаем true. если не находим возвращаем false. просто, но этот алгоритм требует стейта. как его переложить, чтобы красиво и без стейта
вроде даже без reduce можно... передавать/возвращать стэк с токенами, или пустой, если не токенезиреутся в конце. счас попробую...
про learning curve: следующие вопросы будут, как досрочно выйти из for цикла и #почемутаквсесложно, дада
Пацаны, а глупый вопрос
А есть какой-то синатксис для
(defn func [{:keys [all]}] <body>)
Чтобы мне не расписывать все ключи
@lowl4tency а как бы это могло работать вообще?
ну я вот спрашиваю есть такое или нет 🙂
да засада
а то мне вломы расписывать
ну хотя я смотрю, мне вроде все и не надо
но я на всякий случай спросил вдруг я зря расписываю
вот например, если ты все параметры будешь звать одинаково: p-foo, p-bar, p-blah и т.д. и напишешь макрос, который их все заменит на (:foo m)
и т.д., то оно вполне себе будет работать
не, за это меня потом четвертуют
мне обычно всегда хватало
[{:keys [a b] :as all}]
(println a)
(println b)
(println (keys all))
ух ты про :as не знал
@be9 потом надо сообразить как
(for [e (reductions str s)] e)
переделать на loop.. я это к тому что алгоритмические книги написаны с расчетом на встроенный функционал, отсутствие которого в кложе решает. и испытуемый закономерно идет дальше писать на понятном языке да еще плечами пожимает ✍️ну а что кнут. у него там всё на MIX, звиняйте, господа функциональщики (или MMIX теперь)
Парни, а кто у нас админ группы в вк?
позволяет писать тесты вот так:
(deftest parse-number-test
(are [s n]
(= (parse-number s) n)
"123" 123M
"123.45" 123.45M
"$123" 123M
"1 123.45" 1123.45M
"-123" -123M
"- 1 000 999.88" -1000999.88M))
@lowl4tency а что за группа в ВК?
10 декабря в Минске пройдёт конференция, посвященная функциональным языкам программирования – F(by). В этом году мы сосредоточимся на Scala, Clojure, а также функциональном подходе в Kotlin, реактивных программах в ClojueScript, PureScript, JavaScript, TypeScript. Среди спикеров – авторы фреймворков и активные контрибьюторы в технологии. Программа и билеты – на . #funcby
Она чото совсем мертвая
Это, если кто хочет на минскую конфу, мне обещали билет
41 usd
180 Belarusian Ruble equals 91.88 US Dollar
Билет на f(by) уходит к @andmed
А ни у кого больше билетов не завалялось? 👀 Тоже хочу поехать)
Внезапно
батсов будет на fby
rustam.gilaztdinov я буду иметь тебя в виду если появится
Пасиб 🙂
в кложе (и наверняка в других лиспах), общий синтаксис всякой джавы/жс (которого немного больше, но он нерасширяемый), заменяется супер простыми для понимания s-выражениями + сигнатурой ~топ50 самых распространенных функций/макросов. получается, что в сумме учить сильно больше, чем "первый элемент в скобочках - функция, остальные - аргументы" приходится, особенно, когда не знаешь, какие макросы/функции - самые частоупотребляемые, а какие - чисто библиотечный прикол какой-то
показать хотя бы новичку, который let еще не особо привык глазами парсить, супер простой rum компонент из доков:
(rum/defc label < rum/static [n text]
[:.label (repeat n text)])
но как только проходишь критическую точку - всё супер изи, и даже забываешь, сколько ушло времени на "словарный запас", и начинаешь всем про "первый элемент в скобочках - функция, остальные - аргументы" проповедовать
>что за <
? что вообще происходит?
говнокодить на жс всеж далеко не уйдешь, а вот с макросам в лиспах можно такое натворить огого!
я безумно влюблен в кложуру и все остальное для меня фе после нее, но в тоже время проповедовать ее новичкам я б не стал. Она хороша тем кто уже шарит
совсем не спорю, но для самых распространенных макросов это уже переходит из категории сигнатуры в категорию синтаксиса языка, потому что они в коде 90% библиотек
тру, но по началу я помню было тяжело, это счас уже кложура.кор на подкорке
я только к тому, что недооценивать кривую обучения кложе - вообще не стоит (даже не для написания, а для чтения сорсов)
ага, переходил бы я с питона - было бы проще, а то 4 года джавы мозги разжижили совершенно
о да - тяжелее всего было императивщину убрать из головы, я после 5 лет с C# пришел тож
писал питон в ненастроенном виме без автокомплитов - весь проект в голове, мозги - в тонусе
для emacs есть такая визуализация кривой обучения: http://farm4.staticflickr.com/3109/3251176498_c3485a55fb.jpg для кложы тоже подходит )
ну там maxflow в графе найти или тотже токенайзер реализовать, что выше писал, естественным выбором кложа не будет
ну а что хорошего когда 95% функций (точнее методов класса чтоб было еще хуже) возвращают void мутируя все что вокруг
когда будут проблемы с перформансом вот тогда их и решать, а с ФП очень хорошо растет maintainability
про ынтырпрайз, который через геттер получает объект чтобы его мутировать, я не говорю. но кмк мне проще реализовать ту же рекурсию, в том смысле что не нужно заботиться о протаскивании данных дополнительно, если стейт управляется функцией. и так вроде алгоритмы написаны. или почему нужно дополнительно ломать голову как реализовать break если в алгоритме передо мно (о чудо!) этот break есть, лучше на другое время тратить
да неа, тут я соглашусь - стандартные алгоритмы на кложуре (и вообще ФП языках) делать боль ибо были придуманы для императивных языков
но опять же - спуститься то вниз не сложно, что на ЖС, что на жаву если надо
@andmed какой % кода твоего последнего проекта составляет (не библиотечная) имплементация какого-нибудь алгоритма (в "классическом" смысле слова, когда важна супер скорость, и максимальная оптимизация памяти, и тд)?
ну да, сильно нишевой язык. с чего и оттолкнулись. алгоритмы? работа с железом? сложный api? кложа не для этого ну и ладно. @misha я просто щаз задачки решаю и вдруг осознал, что кложу применить могу только через боль (с учетом того, что я в ней небольшой спец да). а стандартные алгоритмы это фсе: от натаскивания в универе, до собеседования на работе. собственно вопрос был, откуда им кложуристам взяться
я вот не написал ни одной, и с надобностью супер производительного кода за 10 лет тестирования, питона, джавы и кложи столкнулся только сейчас, когда пишу ios app на кложе, которая компилится в жс, который каким-то раком пробрасывается в жс-машину внутри треда обжектив си, только что бы мне удобненько было
потому я очень хорошо представляю, сколько времени сэкономила бы мне кложа, если бы я лет на 5 раньше о ней узнал, даже с учетом "отсутствия инструментов"
вот вот, 95% ты реализуешь бизнес логику и UI натягиваешь, тут круче кложуры нет. Но кстати я счас по собеседованиям хожу дак задачи все всегда на JS пишу ибо чтоб 1) Не пугать народ 2) Императивно быстрее сделать. Правильно со всякими рекурсиями и immutable data structures у меня хз скок может времени уйти
(что опять же говорит о том как собеседования далеки от того что ты реально будешь делать на работе, эх…)
меня тут спросили один раз 3 признака ООП, я аж всплакнул - так давно это было, зубрил вопросы вида отличие абстрактного класса от интерфейса, гордился что знаю, о боже 😄
я тут просто смотрел в Таллине вакансии , у них строго java/javascript никаких отклонений