emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc. – Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
3.48K subscribers
119 photos
15 videos
22 files
1.14K links
Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, Extreme Programming, SDLC, Agile, etc.

Chat: https://news.1rj.ru/str/emacsway_chat

Persistence: https://dckms.github.io/system-architecture/
Download Telegram
Forwarded from Taras Protchenko
Есть интересный фреймворк https://logux.io/ реализующий принципы CRDT
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Весьма неплохое видео от Martin Kleppmann на тему CRDT с практическим кейсом. https://youtu.be/Exr0iY_D-vw В примере использована TypeScript библиотека "Compoventual" - https://github.com/composablesys/collabs #DistributedSystems #DDD #Microservices #CRDT
Хм... заметил, что Automerge от Martin Kleppmann в этом канале еще не было...
Automerge is a library of data structures for building collaborative applications in JavaScript.
- https://github.com/automerge/automerge

На Rust:
- https://github.com/automerge/automerge-rs

На Python:
- https://github.com/automerge/automerge-py

На Swift:
- https://github.com/automerge/automerge-swift

На .NET:
- https://github.com/automerge/automerge-net

Тут примеры и другие полезные утилиты по теме:
- https://github.com/automerge

Демонстрационный клон Trello:
- https://github.com/automerge/trellis
- https://github.com/automerge/pushpin

#DistributedSystems #DDD #Microservices #CRDT
Forwarded from V N
Немного по теме - довольно адекватное простыми словами объяснение и классификация: https://vas3k.ru/blog/machine_learning/
Это мой офис. Несколько неожиданно, но, не скрою, приятно читать о нем такое:

БЦ «Академик» по проекту группы компаний UNK стал победителем престижной международной архитектурной премии ABB Leaf Awards. Впервые эту награду получило российское бюро с проектом в РФ, сообщил главный архитектор Москвы Сергей Кузнецов.
https://stroi.mos.ru/news/proiekt-bts-akadiemik-poluchil-miezhdunarodnuiu-arkhitiekturnuiu-priemiiu

Если кто-то хочет тоже в нем работать, и создавать высоконагруженные приложения с применением Golang, DDD, Microservices, CQRS/ES, DSL, Clean Architecture, Causal Consistency, CRDT, то обращайтесь к Саше ( @kushalex ). Сейчас есть возможность попасть даже в команду разработчиков, с которой я тесно взаимодействую - есть несколько вакансий. То, о чем пишется в этом канале, возникает из реальной повседневной деятельности в нашей компании. Причем, сюда попадает лишь вершина айсберга - огромный массив информации остается внутри корпорации. Вдвойне рекомендую обратиться к Саше, если ищете возможность работать с высококачественным кодом, и хочется выполнять свою работу правильно, получая от нее удовольствие.

[UPDATE]: Тестировщики и фронтендеры тоже нужны.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Сервис для коллективной разработки Event Storming и Context Mapping от Vaughn Vernon: Domain Modeling, Robot! - https://domorobo.to/ - https://twitter.com/VaughnVernon/status/1443670501235167244?s=20 #DDD #EventStorming #SoftwareArchitecture
Vaughn Vernon подготовил ряд демонстрационных приложений с использованием VLINGO XOOM. Там же есть широко-известные примеры из Красной Книги "Implementing Domain-Driven Design".

xoom-examples
The VLINGO XOOM examples demonstrating features and functionality available in the reactive components.
- https://github.com/vlingo/xoom-examples

Если кто-то помнит, еще год назад активно обсуждалась тема, почему бы не генерировать автоматически код DDD-приложения по модели? Похоже, что Vaughn Vernon неплохо продвинулся в этом направлении:
- https://github.com/vlingo/xoom-designer/blob/master/README.md#project-generation

#DDD #SoftwareArchitecture #SoftwareDesign #Microservices #ActorModel #DistributedSystems #CQRS #EventSourcing
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Proto.Actor's Realtime-Map demo has been ported to Golang. Learn how to build real-time visualizations using the actor model with Proto.Actor https://twitter.com/ProtoActor/status/1452306575733964808?t=JYHHNKiQifzn2kFRrUuPCw&s=19 Real-time Map displays…
Нужно было, наверное, немного прокомментировать предыдущий пост, судя по недооцененной статистике.

Actor Model - чрезвычайно мощный механизм в DDD. Vaughn Vernon написал даже отдельную книгу "Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka", и создал несколько примеров:
- https://github.com/VaughnVernon/DDDwithActors

А сейчас Vaughn Vernon работает над xoom-actors:
- https://github.com/vlingo/xoom-actors

Proto.Actor разрабатывается автором Akka.NET. Здесь он пишет почему он начал новый проект:
- https://github.com/asynkron/protoactor-go#history

Причем, начал он писать его на Golang, хотя при этом поддерживаются языки Golang, C# and Java/Kotlin.

Для меня лично реализация на Golang имеет важное значение с точки зрения сертификации. Мы присматриваемся к Proto.Actor, и при удобном случае намерены попробовать его в действии.

Ребята так же создали демонстрационное приложение на Golang с использованием Proto.Actor, которое является аналогом real-time отображения общественного транспорта на Яндекс.Картах.

Кстати, это - клон. Оригинал написан на .NET.

В век, когда даже обычных DDD reference applications на Golang можно наскрести всего пару штук, reference application от создателей Proto.Actor с использованием Actor Model представляет собою определенный интерес.

Ну и еще это событие показывает, что Golang повзрослел, и практики проектирования вошли в Golang серьезно и надолго. Времена спагетти-кода и фраз “Don’t do Java in Golang!" остались в истории.

#DDD #SoftwareArchitecture #SoftwareDesign #Microservices #ActorModel #DistributedSystems #CQRS #EventSourcing
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Proto.Actor's Realtime-Map demo has been ported to Golang. Learn how to build real-time visualizations using the actor model with Proto.Actor https://twitter.com/ProtoActor/status/1452306575733964808?t=JYHHNKiQifzn2kFRrUuPCw&s=19 Real-time Map displays…
Интересные рассуждения на тему, должна ли гарантия доставки возлагаться на инфраструктуру, или же в этом должна быть заинтересована логика более высокого уровня политики? В последнем случае становится возможным существенно снизить накладные расходы на инфраструктуру и повысить performance.

"Nobody Needs Reliable Messaging" by Marc de Graauw
- https://www.infoq.com/articles/no-reliable-messaging/

Отдельный интерес вызвал описанный в статье кейс с нарушением согласованности (нарушением очередности доставки сообщений). Я встречал эту проблему в некоторых российских банках и брокерах, когда событие расходной операции успевает обработаться раньше, чем событие приходной операции, что вызывает превышение лимита технического овердрафта - все как в статье.

Конечно, тут речь идет уже о другой проблеме - выбор и достижение правильной модели согласованности:
- https://jepsen.io/consistency

В статье эта тема затронута, но не раскрыта.

Небольшую сложность в понимание статьи вносит тот факт, что в ней не делается четкого различия между Командой (когда отправитель осведомлен о получателе) и Событием. И не хватает взгляда с позиции достижения Low Coupling.

Но в целом, статья заслуживает внимания.

Кстати, по поводу моделей согласованности - одной из оптимальных и часто используемых моделей согласованности, которая позволяет достигнуть наибольшего уровня параллелизма при наименьших последствиях нарушения последовательности обработки, является Causal Consistency:
- https://news.1rj.ru/str/emacsway_log/562

Vaughn Vernon тоже не обошел эту проблему стороной:
- https://news.1rj.ru/str/emacsway_log/62

У меня по этой теме в свое время набралось материала на целую статью:
- https://emacsway.github.io/ru/message-ordering-in-competing-consumers/

#DDD #Microservices #DistributedSystems #SoftwareArchitecture
"if someone thinks refactoring belongs on the backlog, they probably don't understand refactoring, or backlogs, or both."
- Ron Jeffries
https://twitter.com/RonJeffries/status/1453102208887709700?t=fGEcCfNDt3hQSdVn6f7Ijg&s=19

Значение термина refactoring, действительно, зачастую понимают не все. И, возможно, именно поэтому, в треде появился термин rearchitect.

Еще Ward Cunningham говорил:

"Refactoring is not rewriting, although many people think they are the same."

"Refactoring is a kind of reorganization. Technically, it comes from mathematics when you factor an expression into an equivalence - the factors are cleaner ways of expressing the same statement."

- https://news.1rj.ru/str/emacsway_log/205
- https://news.1rj.ru/str/emacsway_log/206
- https://news.1rj.ru/str/emacsway_log/207

Refactoring - это способ управления сложностью, путем декомпозиции сложности до уровня, когда отдельно взятый её фрагмент сможет быть рассмотрен изолированно в пределах краткосрочной памяти человека.

Интересно, что Grady Booch возлагал обязанность по управлению сложностью на архитектуру, говоря, что архитектура - это многоуровневая система абстракций. Где назначение абстракций - управление сложностью. С той лишь разницей, что в refactiring мы должны соблюдать условие "equivalence":

"Refactoring implies equivalence; the beginning and end products must be functionally identical."

Иными словами, refactoring не должен изменять поведения системы:

"Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure."
- Martin Fowler in "Refactoring: Improving the Design of Existing Code"

Ну а о том, что такое Backlog, в этом канале уже было:
- https://news.1rj.ru/str/emacsway_log/499

PBI - это требование в условиях недостаточной полноты требований. Причем, требование может изменяться в процессе снижения неопределенности, а значит, как оно тогда может что-то "требовать"? Т.е. это требование-гипотеза, но его суть от этого не меняется - в текущем моменте это - требование.

Единственное требование, которое может быть достигнуто в результате refactoring - это Modifiability. Но и тут засада, ибо NFR должны достигаться совместно с FR.
- https://news.1rj.ru/str/emacsway_log/463
- https://news.1rj.ru/str/emacsway_log/464

К тому же в популярных Agile-моделях Quality уже давно стало константой:
- https://news.1rj.ru/str/emacsway_log/428

Можно ли завести Spike на refactoring? По сути - нет, так как refactoring не разделяет со Spike цели разрешения неопределенности. Хотя, поскольку в результате refactoring повышается точность оценки, то он может выполняться и в процессе Spike.

Интересно, что еще в книге "Planning Extreme Programming" Kent Beck цитировал автора твита:

"Ron Jeffries claims he can turn any technical task into a business-oriented story the customer can either schedule this iteration or not as she chooses. There's something to be said for not having any technical tasks. Once you start down the slippery slope of setting the priority for technical reasons, it's hard to stop."

#SoftwareDesign #Agile #Refactoring