Fork me on GitHub
#clojure-russia
<
2017-06-11
>
niquola06:06:47

@duhovnie-skobki

fmnoise07:06:44

@skobki-ili-smert 😄

fmnoise07:06:10

даже дизайн футболок уже представил

roman01la09:06:37

clojureunderhood По аналогии с jsunderhood

misha11:06:11

господа, порекомендуйте что-нибудь чётенькое про ивент сорсинг почитать или там тупо "хранишь ивенты, а всё остальное пересчитываешь, и норм"?

kgofhedgehogs11:06:22

Привет всем. Написал функцию, которая парсит ascii лабиринт в вектор векторов кейвордов

roman01la11:06:31

@misha доклады Greg Young

kgofhedgehogs11:06:39

Входные данные вот такие

┌───────────┐ 
│           │ 
│   ╷   ╷   │ 
│   │   │   │ 
│   ╵   │   │ 
│       │   │ 
└───────┴───┘ 

kgofhedgehogs11:06:54

Возвращает такое

[[: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]]

kgofhedgehogs12:06:18

Меня интересует, можно ли как-нибудь аккуртно переписать вложенный мап (9-я строка) на что-нибудь с трансдьюсерами чтобы избавиться от анонимной функции?

kgofhedgehogs12:06:37

Поидее этот двойной мап можно заменить на postwalk/prewalk, но это не трансдьюсеры

fmnoise12:06:13

@misha в контексте кухни ддд или просто как паттерн?

misha12:06:58

@roman01la ага, хорошо рассказывает

misha12:06:24

@fmnoise в контексте "не склеить ласты, пока напишешь большое количество UI"

roman01la12:06:37

Про ES в UI вроде бы ничего нету

kgofhedgehogs12:06:05

Осилил такое. Теперь новый вопрос. try-replace-with-f это не велосипед? Есть подобное в стандартных либах?

kgofhedgehogs12:06:13

Наверное, это всё-таки велосипед..

artemyarulin14:06:35

try-replace-with-f я думаю можно проще как (map #(or (f %) %))

fmnoise15:06:18

@roman01la думаю @misha имеет в виду es -> state -> ui

fmnoise15:06:47

но сам es не про ui, да

fmnoise15:06:31

кстати в 1С ES из коробки, как и DDD 🙂

misha15:06:59

оно ж как раз бухгалтерия, а у бухгалтеров всю жизнь было append only

misha15:06:13

@fmnoise @roman01la хочется разобраться, что из ивент сорсинга покрывает, например, датаскрипт, а что надо "дописать"; чего не делать, чтобы непереинженирить, или чтобы не загнать себя в угол

fmnoise17:06:33

ну бухию сложно представить без ES хотя бы из-за двойной записи

fmnoise17:06:55

но там все регистры по ивент сорсингу

fmnoise17:06:38

есть например регистр сведений - для хранения курсов валют или прайсов

fmnoise17:06:12

данные из него получаются методом "срез последних"

fmnoise17:06:21

если регистр завязан на документ-регистратор, то проведение\распроведение всегда меняет состояние системы

mike_ananev17:06:31

@roman01la Спасибо за наводку про Greg Young. Слушаю. Очень нравится. И конечно же Datomic ложится идеально в концепцию event sourcing.

fmnoise17:06:33

когда только начинаешь работать с этим, то поначалу не понимаешь, чем плохо "проведение задним числом"

fmnoise17:06:45

на одном из проектов, где нельзя было запретить перепроведение документов предлагал сделать отдельный документ "отмена проведения", чтобы подвести процедуру под ES

mike_ananev17:06:38

@nicola а вы уже пробовали на postgres сделать event sourcing?

niquola17:06:37

вот собираюсь на logical replication сделать реактивщину

fmnoise17:06:54

грег еще про cqrs интересно рассказывает

mike_ananev17:06:10

это в 10ке про которую говорил, да?

mike_ananev17:06:27

@nicola я правильно понимаю, что logical replication может служить заменой CDC средств, таких как golden gate? то есть мы поток логических транзакций можем ловить из базы и укладывать в кафку например? нет ли там такой проблемы, как у golden gate'а, что поток транзакций из oracle db слишком низкоуровневый? (нужно делать склейку транзакций самому или покупать дорогущий адаптер от оракла)

fmnoise17:06:41

а в САП например вроде и нельзя отменять события, что есть правильно

mike_ananev17:06:52

прочитал еще статьи на хабре про event sourcing. в разделе, где приводятся минусы ES, чуваки на самом деле не замечают, что жалуются на свой язык разработки, т.е. проблема не event source. поймал себя на мысли, что clojure внутри весь из event source состоит и его data driven подход очень хорошо ложится под концепт ES. а у ООПщиков каждое изменение в типах событий приводит к смене классов, вот почему им так трудно бегать из начала в конец и собирать стейт

mike_ananev17:06:38

они это называют ад рефакторинга

mike_ananev17:06:05

о, Greg прямо говорит, что event sourcing это функциональная модель. ООП для нее не подходит.

malch18:06:35

@mike1452 Вот ещё по теме, я смотрел

malch18:06:50

Извините, если кто уже это кидал

niquola18:06:51

@mike1452 все правильно - она как раз и называется логической - поскольку не низкоуровневая

niquola18:06:02

ES - интересный концепт, на одном проекте попробовали (с подачи @prepor) - есть ощущение, что надо уметь готовить - поскольку воспринимать сложновато - вместо одной модели у тебя есть модель сообщений, модель снэпшотов - можно потерятся

niquola18:06:58

не совсем понятно как версионировать

niquola18:06:48

мне пока симпатичен подход - мыслить es как transaction log - те оформлять события как транзакции к некоторой схеме

mike_ananev18:06:09

@nicola да, думаю в том же направлении, транзакшн лог. мышление надо говтоить к такому подходу, особенно программеров, кто будет заниматься имплементацией

mike_ananev18:06:21

@malch спасибо, буду сегодня тоже смотреть. завтра к утру буду "просветлен" новой идеей ))

niquola18:06:53

es/crdt/transaction log дают возможность реплицировать события в базу, другой сервис, между клиентами

niquola18:06:12

но не освобождают от дизайна :0

niquola18:06:46

скорее даже ужесточают требования - из-за распределенной природы

mike_ananev18:06:26

у меня походу просмотра, возникают первые мысли: на клиентах, короче там где посылаются команды или транзакции должны быть некие id команд, причем возрастающих по значению. на бакенде, когда транзакция или команда принимается от клиента, должна проставлятся метка времени, причем скорее всего это некий распределенный атомарный объект, который раздает на входе всем метку времени

niquola18:06:51

ну это crdtшная ветка 🙂 - причинные часики лэмпорда

mike_ananev19:06:50

вот нашел книжко по теме построения распределенных систем. http://books.ifmo.ru/file/pdf/1551.pdf

mike_ananev19:06:37

там и про часики лэмпорта и про векторные часы и про другое. короче я на неделю решил в теме зависнуть

misha19:06:30

Датомик-то хорошо ложится в концепцию ивент сорсинга, только вот если клиенты -оффлайн-фёрст - уже сложнее, даже когда там датаскрипт, и тем более, если дс в треде, и первоначальные ивенты не в него попадают, а в какой-то слой(кеш) до датаскрипта (оптимистичный юай, все дела). Надо курить короче недельку-две

misha19:06:19

Чтоб велосипедов с квадратными колесами не наделать

mike_ananev19:06:12

@misha да, надо прокачаться. но есть ощущение, кто постигнет дзен этого и научится "готовить" такие архитектуры значительно выиграет в скорости и простоте создаваемых решений

mike_ananev19:06:26

то есть интуитивно тема выглядит перспективной

misha20:06:02

Конечно-конечно. Потому тему и поднял. Надо жеж кроме стека парадигмы пересмотреть, в то лабать всякие ресты и мвц (и что там еще стандартного) на новом стеке, на фп и тд может быть далеко не самым эффективным/адекватным

misha20:06:30

И тут вроде инкрементально не заменишь подход целый

misha21:06:15

вообще, нужно дочитать http://dataintensive.net там по-любому про это должно быть хорошо написано