This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-06-11
Channels
- # aleph (5)
- # beginners (13)
- # boot (2)
- # cljs-dev (1)
- # clojure (12)
- # clojure-italy (1)
- # clojure-russia (67)
- # clojure-uk (2)
- # clojurescript (49)
- # datomic (1)
- # defnpodcast (3)
- # graphql (8)
- # jobs (1)
- # lein-figwheel (1)
- # leiningen (1)
- # lumo (9)
- # off-topic (5)
- # om (3)
- # parinfer (13)
- # pedestal (2)
- # re-frame (5)
- # reagent (4)
- # ring-swagger (2)
- # untangled (13)
- # yada (2)
clojureunderhood По аналогии с jsunderhood
господа, порекомендуйте что-нибудь чётенькое про ивент сорсинг почитать или там тупо "хранишь ивенты, а всё остальное пересчитываешь, и норм"?
Привет всем. Написал функцию, которая парсит ascii лабиринт в вектор векторов кейвордов
@misha доклады Greg Young
Входные данные вот такие
┌───────────┐
│ │
│ ╷ ╷ │
│ │ │ │
│ ╵ │ │
│ │ │
└───────┴───┘
Возвращает такое
[[:wall :wall :wall :wall :wall :wall :wall]
[:wall :empty :empty :empty :empty :empty :wall]
[:wall :empty :wall :empty :wall :empty :wall]
[:wall :empty :wall :empty :wall :empty :wall]
[:wall :empty :wall :empty :wall :empty :wall]
[:wall :empty :empty :empty :wall :empty :wall]
[:wall :wall :wall :wall :wall :wall :wall]]
Меня интересует, можно ли как-нибудь аккуртно переписать вложенный мап (9-я строка) на что-нибудь с трансдьюсерами чтобы избавиться от анонимной функции?
Поидее этот двойной мап можно заменить на postwalk/prewalk, но это не трансдьюсеры
@roman01la ага, хорошо рассказывает
Про ES в UI вроде бы ничего нету
Осилил такое. Теперь новый вопрос. try-replace-with-f
это не велосипед? Есть подобное в стандартных либах?
Наверное, это всё-таки велосипед..
try-replace-with-f я думаю можно проще как (map #(or (f %) %))
@roman01la думаю @misha имеет в виду es -> state -> ui
@fmnoise @roman01la хочется разобраться, что из ивент сорсинга покрывает, например, датаскрипт, а что надо "дописать"; чего не делать, чтобы непереинженирить, или чтобы не загнать себя в угол
если регистр завязан на документ-регистратор, то проведение\распроведение всегда меняет состояние системы
@roman01la Спасибо за наводку про Greg Young. Слушаю. Очень нравится. И конечно же Datomic ложится идеально в концепцию event sourcing.
когда только начинаешь работать с этим, то поначалу не понимаешь, чем плохо "проведение задним числом"
на одном из проектов, где нельзя было запретить перепроведение документов предлагал сделать отдельный документ "отмена проведения", чтобы подвести процедуру под ES
@nicola а вы уже пробовали на postgres сделать event sourcing?
это в 10ке про которую говорил, да?
@nicola я правильно понимаю, что logical replication может служить заменой CDC средств, таких как golden gate? то есть мы поток логических транзакций можем ловить из базы и укладывать в кафку например? нет ли там такой проблемы, как у golden gate'а, что поток транзакций из oracle db слишком низкоуровневый? (нужно делать склейку транзакций самому или покупать дорогущий адаптер от оракла)
прочитал еще статьи на хабре про event sourcing. в разделе, где приводятся минусы ES, чуваки на самом деле не замечают, что жалуются на свой язык разработки, т.е. проблема не event source. поймал себя на мысли, что clojure внутри весь из event source состоит и его data driven подход очень хорошо ложится под концепт ES. а у ООПщиков каждое изменение в типах событий приводит к смене классов, вот почему им так трудно бегать из начала в конец и собирать стейт
они это называют ад рефакторинга
о, Greg прямо говорит, что event sourcing это функциональная модель. ООП для нее не подходит.
@mike1452 все правильно - она как раз и называется логической - поскольку не низкоуровневая
ES - интересный концепт, на одном проекте попробовали (с подачи @prepor) - есть ощущение, что надо уметь готовить - поскольку воспринимать сложновато - вместо одной модели у тебя есть модель сообщений, модель снэпшотов - можно потерятся
мне пока симпатичен подход - мыслить es как transaction log - те оформлять события как транзакции к некоторой схеме
@nicola да, думаю в том же направлении, транзакшн лог. мышление надо говтоить к такому подходу, особенно программеров, кто будет заниматься имплементацией
@malch спасибо, буду сегодня тоже смотреть. завтра к утру буду "просветлен" новой идеей ))
es/crdt/transaction log дают возможность реплицировать события в базу, другой сервис, между клиентами
у меня походу просмотра, возникают первые мысли: на клиентах, короче там где посылаются команды или транзакции должны быть некие id команд, причем возрастающих по значению. на бакенде, когда транзакция или команда принимается от клиента, должна проставлятся метка времени, причем скорее всего это некий распределенный атомарный объект, который раздает на входе всем метку времени
вот нашел книжко по теме построения распределенных систем. http://books.ifmo.ru/file/pdf/1551.pdf
там и про часики лэмпорта и про векторные часы и про другое. короче я на неделю решил в теме зависнуть
@mike1452 вот пример, кстати https://github.com/onyx-platform/onyx-commander-example
Датомик-то хорошо ложится в концепцию ивент сорсинга, только вот если клиенты -оффлайн-фёрст - уже сложнее, даже когда там датаскрипт, и тем более, если дс в треде, и первоначальные ивенты не в него попадают, а в какой-то слой(кеш) до датаскрипта (оптимистичный юай, все дела). Надо курить короче недельку-две
@misha да, надо прокачаться. но есть ощущение, кто постигнет дзен этого и научится "готовить" такие архитектуры значительно выиграет в скорости и простоте создаваемых решений
то есть интуитивно тема выглядит перспективной
Конечно-конечно. Потому тему и поднял. Надо жеж кроме стека парадигмы пересмотреть, в то лабать всякие ресты и мвц (и что там еще стандартного) на новом стеке, на фп и тд может быть далеко не самым эффективным/адекватным
вообще, нужно дочитать http://dataintensive.net там по-любому про это должно быть хорошо написано