This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-12-10
Channels
- # adventofcode (9)
- # bangalore-clj (1)
- # beginners (130)
- # boot (6)
- # cljs-dev (8)
- # cljsjs (12)
- # cljsrn (3)
- # clojure (33)
- # clojure-brasil (3)
- # clojure-korea (4)
- # clojure-russia (150)
- # clojure-sanfrancisco (4)
- # clojure-spec (159)
- # clojure-uk (3)
- # clojurescript (100)
- # code-reviews (9)
- # core-async (1)
- # datascript (3)
- # dirac (58)
- # hoplon (8)
- # jobs-discuss (10)
- # luminus (18)
- # om (2)
- # onyx (14)
- # protorepl (19)
- # re-frame (34)
- # reagent (28)
так сикп был всю жизнь на лиспе
схемка
Начинать наверно все равно с чего - так или иначе придется прикоснуться ко всему. Начать с хорошей экосистемы мне кажется хорошо. @goplon учи java, JavaScript и clojure одновременно ;)
оффтоп: https://meebleforp.com/blog/36/angular-2-is-terrible Чо там реально так все ужасно? Никто тут не юзал второй? Я первый ангуляр юзал года 3 наверно назад и было говно да, но вроде как же переписали
Первый позволяет быстро делать работающие мордочки минимальным количеством кода - как рельса для ui, легок в освоении в user space, сложен внутри. А вот распухшие приложения на редуксе с реактом это действительно гавно от жопоруких фронтендеров
первый ангуляр хорош когда нужно по быстрому наклепать интерфейсик и забыть про него. для долгоподдерживаемого SPA будет ад
Заабузить можно любой инструмент, но в среднем на ангулярчике кода обычно в раза два-три меньше чем на реактике
при стихийном развитии SPA и безудержной фантазии UI дизайнеров. приходится часто шарить различного рода данные из одного компонента в другой. в ангуляре у меня были с этим проблемы уже на довольно небольшом приложении. деталей уже не помню давно ангуляр в руках не держал.
>А вот распухшие приложения на редуксе с реактом это действительно гавно @nicola А чо кста плохого? Я просто без single application state уже как-то слабо себе представляю разработку и думал что редукс для ЖСников это очень даже годно не?
Ну и один стэйт не всегда актуально, зачастую часть стэйта имеет самостоятельный lifecycle. По мне один стэйт хорошо если он в более-менее полноценной базе лежит и ты можешь богатые запросы - джойны всякие - без этого это просто большая мутабельная глобальная переменная
@nicola а что ты конкретно понимаешь под lifecycle? я просто видимо не очень понимаю какой может быть у стэйта lifecycle
Ну представь например админку и управление пользователями и например управление очередью рассылок. Зачем тебе пользователи когда ты на странице очередей и наоборот.
ну скажем если это SPA то оно тебе так или иначе понадобится, потому что ты в любой момент можешь перейти из одного экрана в другой
в таком случае это те же яйца только в профиль, все равно где то придется это хранить 🙂
Ну дак будешь в отдельной веточке хранить которая синкаетя по своим правилам - я и говорю это отдельный стэйт
просто если мы например говорим про ангуляр то там эти все данные где то размазаны по всему приложения, в каких то скоупах (я если честно далеко не мастер ангуляра), а в данном случае (в редаксе) у тебя все в одном месте (и лично я это воспринимаю как некую базу данных и даже согласен с тобой что было бы капец как круто иметь некий интерфейс для этого, типа запросов)
у нас вот например даже баги бывают такие когда стэйт проектируется не как бд и данные в некольких местах дублируются
вообще в какой то степени те же subscriptions из re-frame это и есть запрос, как select в sql
Зря вы так на ангуляр, вполне себе ок. Жаль нужно думать где данные хранить - про < 2 версии
Почему Вам не нравиться om?) Там всего то осталось прикрутить интерфейс к омовским компонентам для реализации не оптимистичных адептов + второй интерфейс для того чтобы транслировать ключи запросов ома в урлы, а параметры запросов ома в параметра реквеста
я могу понять ом (который om now) и курсоры - это вроде мне близко. есть один атом. мы на него подписываемся. в атоме огромное дерево. мы меняем часть дерева и смотрим на часть дерева в каждом компоненте по какому-то пути. это типа "курсор" или там "линза". если эта модель (дерево) не соответствует UI - ну не повезло. не работает.
т.е. если передать в реагент вью в которой будет дереф ратома, реагент будет следить за дерефом этого ратома и если произойдет дереф, он перевыполнит эту функцию в которой этот ратом был
дереф это чо?
>реагент будет следить за дерефом этого ратома и если произойдет дереф
не оч понял кто за кем следит
дак дереф это же просто чтение значения? Если я в другом месте сделаю атому дереф то у меня ререндер произодйдет чтоль?
все жисть делал swap! text
а тьфу ты, там же свои атомы (ратомы точнее)
дак все же - если я в другом месте сделаю (println “LOG:” @text) то у меня произойдет ре-рендер? Или именно тока изменения атома мониторятся а не дерефы все?
А я могу как со всякими омами подписаться на часть ратома тока?
аля курсоры
сори что я тут а не ртфм, лень 🙂
аа, все я понял реагент, спасиб:)
т.е. у тебя есть app-db ратом, а ты хочешь :my-value из app-db, делаешь def rct (make-reaction (:my-value @app-db))
а в чём идейная разница по сравнению с омом классик? по сравнению с курсорами и линзами?
@artemyarulin может подскажет, к счастью только реагент знаю
Когда компонент рендерится реагент запоминает какие атомы или курсоры дерефились и подписывает этот компонент на изменения атомов - те как в ангуляре watch.
омг, дак реагент это ангуляр?
Глобальный скоуп с реактивными вотчерами на изменения - получается ангулярчик, только рендерится в виртуальный дом и можно pure component как функции писать
Во втором ангуляре вроде тоже подобие virtual dom. Ангуляроподобный vui тоже на vd переписали
распространение событий все же разное у ангуляра двусторонний data binding , а у реагента обычная реактовская схема
и кста как понимаю моднявый https://github.com/mobxjs/mobx это тоже пачка обезваблс (=атомов) которые сами дергают компоненты которые поменялись?
можешь его не использовать, сделай глобальную функцию диспатч и порождай событие, которое потом применешь к скоупу 🙂
а тут хз - много тормозных реакт приложений, плюс говорю на virtual dom уже почти все пересели
когда директив становится много - в ангуларе сложно код читать, сложно компоненты связывать, да и директивы на ходу строить - тоже не самое приятное занятие - в реакте с этим проще.
нам первого ангуляра хватило ) переходим на реакт . реагент, конечно, лучше - но у нас разработчики с опаской на clojurescript смотрят
кстати да - в мире cljs врапперов над ангуляркой нету вовсе
@artemyarulin был один - загнулся
пробую написать первый пример под настоящий датомик. ЧУВСТВУЮ СЕБЯ ЗНАТНЫМ ВЕЛОСИПЕДИСТОМ. просить советовать нормальную библиотеку утилит под него СТЕСНЯЮСЬ.
среди почтенных господ кто-нибудь использовал датомик в продуктиве или хотя бы в скромном проекте?
ну и кста ты спрашивал про ом-некст - он няшный, особенно если датомик на беке
если что угодно другое - ох, тяжко ом-некст юзать
он немаленький и к нему есть вопросы пока что в плане планировщика-оптимизатора и в плане удобства
и в плане планирования схемы. народ на канале как-то вяло отвечает на глупые вопросы, ну и вообще на вопросы)
у меня часто дебильные вопросы, пока спрашиваю они сами отвечают. текущие пока такие: 1. (не уверен до конца) если rules туда подаются после обычных правил where - то как я буду указывать most selective clause первой?
2. (глупый) нет ли какого-нибудь q в котором скомбинирован ещё и map параметров - то есть можно будет ещё и преобразовывать параметры
3. какая библиотека самая хорошая в плане более удобного накатывания схемы? видел две, и годовой давности нашего человека лучше. https://github.com/Yuppiechef/datomic-schema
4. почему нет композитных ключей? почему на гитхабе есть заброшенная библиотека, в описании которой сказано "так оказывается сделать физически нельзя"? https://github.com/arohner/datomic-compound-index
5. как моделировать "процесс линукса" - "его энв переменные"? очевидно, что большой взрослый датомик имеет статическую схему, и использовать модель [1 :process/name "ls"] [1 :process.env-var/LOCALE ".."] [1 :process.env-var/HOME "/home/.."]
это стрелять в ногу?
есть ли эффективные range queries для названий атрибутов? можно ли в этом случае скверить все ключи переменных какого-либо процесса?
6. правильно ли я понимаю что транзактить энтити в форме мапов = сначала пользоваться встроенной функцией ретракт-энтити а потом встроенной функцией адд-энтити?
7. (надо проверять) правильно ли я понимаю, что транзакшн-репорт не содержит утверждений [1 2 3 4 false] [1 2 3 4 true]
(типа вычитания-добавления он автоматически взаимоуничтожает)?
@nicola спасибо за советы, и всем кто отвечал, а на Java что можно делать? Андроид приложения? на JS вроде даже можно писать под все платформы. Почему-то к Java негатив из-за страшных отзывов пользователей, с другой стороны вроде Java на гитхабе на первом месте, потом JS
дак на беке жавы полно
десктоп клиенты тоже жавы много, хотя сами такие клиенты не так популярны. В общем если ты @goplon придешь в любой банк то там в 99% будет связка жабы и оракла 🙂
хотя мс еще живой, ладно 80% тада)
Ребята из Тинькова скалу тащат старательно.
ну я почти уверен что началось все с жавы и типа раз уж JVM то пошли попробуем скалу. Или вон как тут некоторые герои кложуру протащили в сбер
Естественно с жабы, но скала более распространена нежели ,например, котлин.
ну он то вообще новенький. Хотя я тут общался с парой прогрессивных андроид девов дак они грят что котлин взлетел. Жава 8 там нету, кложура мимо из-за стартап тайм, скала тоже из-за тяжелого рантайма и прочей магии
остается либо старая жава коя всех достала либо котлин
@leov а ты в канале #datomic спроси лучше
3) ну миграции написать не проблема, была generic library от создателя ring - можно ее наверное прикрутить. Хотя может и проблема индемпотентности добиться - надо попробовать
5) а по всей коллекции так уже не получится - придётся выгружать все энтити этой коллекции 6) да, в плане upsert или update.
Рылся в интернете нашел курсы JavaRush, Технопарк от Майлру и ComputerScience https://compscicenter.ru/syllabus/ последний почему то мне показался бодрее, т.к. фидбек вроде есть, что думаете? вроде тянет на хорошие курсы, а JS вроде проще на Мозилле выучить, кложур с sicp думаю зайдет - просто сейчас куча информации голова кругом, я помню раньше все было проще, в библиотеке иди или книжный, книг на пальцах сосчитать можно было, от корки до корки читаешь, практикуешь и все)
@goplon энтерпрайз же. Люди из энтерпрайза рассказали бы как java незаменима. Но им некогда
@leov я тоже в самом начале datomic, да и в кложуре недавно, без боевого опыта (в смысле толкового не скажу). Вот эта первая либа по миграциям - это не Conformity? http://yellerapp.com/posts/2015-03-09-datomic-migrations.html
зырьте как няшно https://gist.github.com/swannodette/4fc9ccc13f62c66456daf19c47692799
(defn foo [^js/React.Component c]
(.render c))
магия-магия и файл с externs будет автоматически сгенерен@a.espolov откуда получается? ну вообще да, re-frame для этого есть