tgoop.com »
United States »
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc. » Telegram Web
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Получил удовольствие от прочтения книги "Искусственный интеллект в стратегических играх" Илья Шпигорь https://leanpub.com/ai-in-strategy-games
Архитектура - это как игра в шахматы. Из огромного количества вариантов ходов мы оставляем лишь те, которые приводят нас к цели. Т.е. архитектура, как и шахматы, - это о том, как не надо делать. На эту тему уже были посты:
- https://www.tgoop.com/emacsway_log/1022
- https://www.tgoop.com/emacsway_log/1181
- https://www.tgoop.com/emacsway_log/1285
Как и архитектура, шахматы - это набор ограничений. Этими ограничениями архитектор, как и шахматист, отсекает все лишнее и, подобно скульптору, высвобождает образ системы из бесформенной глыбы бесконечности вариантов решений.
Шахматы - удивительная наука, которая стоит на стыке политики, воинского искусства (все-таки, это модель двух средневековых армий), моделирования, математики, теории игр (стратегические игры), алгоритмов, искусственного интеллекта, планирования, психологии и, кажется, список можно продолжать.
Они развивают стратегическое мышление, тактику, выдержку. Те качества, которые критически необходимы архитектору или управленцу.
А самое главное, они прививают любовь к постоянной борьбе. Делают борьбу постоянным состоянием. А ведь "software design is a constant battle with complexity" -- Eric Evans.
Практически все выдающиеся исторические деятели увлекались шахматами, от Ивана Грозного до современников.
Для меня наличие шахмат среди хобби соискателя - это огромный "зеленый флаг".
Время от времени сам люблю заходить в мобильное приложение chess.com . Ну и, конечно же, по шахматам у меня есть отдельный раздел моей электронной библиотеки.
- https://www.tgoop.com/emacsway_log/1022
- https://www.tgoop.com/emacsway_log/1181
- https://www.tgoop.com/emacsway_log/1285
Как и архитектура, шахматы - это набор ограничений. Этими ограничениями архитектор, как и шахматист, отсекает все лишнее и, подобно скульптору, высвобождает образ системы из бесформенной глыбы бесконечности вариантов решений.
Шахматы - удивительная наука, которая стоит на стыке политики, воинского искусства (все-таки, это модель двух средневековых армий), моделирования, математики, теории игр (стратегические игры), алгоритмов, искусственного интеллекта, планирования, психологии и, кажется, список можно продолжать.
Они развивают стратегическое мышление, тактику, выдержку. Те качества, которые критически необходимы архитектору или управленцу.
А самое главное, они прививают любовь к постоянной борьбе. Делают борьбу постоянным состоянием. А ведь "software design is a constant battle with complexity" -- Eric Evans.
Практически все выдающиеся исторические деятели увлекались шахматами, от Ивана Грозного до современников.
Для меня наличие шахмат среди хобби соискателя - это огромный "зеленый флаг".
Время от времени сам люблю заходить в мобильное приложение chess.com . Ну и, конечно же, по шахматам у меня есть отдельный раздел моей электронной библиотеки.
Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
🔷 "SAGA — эволюция и новые смыслы" / Геннадий Круглов @GKruglov:
- https://www.tgoop.com/ru_arc/165
Хочу оставить свою рецензию.
Что такое архитектурное решение? Его суть сводится к тому, чтобы бесконечно большое множество вариантов реализации сократить до одного…
- https://www.tgoop.com/ru_arc/165
Хочу оставить свою рецензию.
Что такое архитектурное решение? Его суть сводится к тому, чтобы бесконечно большое множество вариантов реализации сократить до одного…
👍11😁2❤1🔥1
Forwarded from Архитектура ИТ-решений
Я часто говорил, что известный текст Architectural Blueprints—The “4+1” View Model of Software Architecture, написанный Philippe Kruchten в 1995 году, никогда не переводился на русский язык.
Это не так. Недавно нашел в сети вот такой перевод Модель представлений программной архитектуры 4 + 1 в двух частях (продолжение здесь)
Есть мнение, что такие тексты не нуждаются в переводе на русский. Но мне представляется, что если наличие перевода хотя бы немного повысит долю людей этот текст прочитавших, то польза от него безусловно есть
Это не так. Недавно нашел в сети вот такой перевод Модель представлений программной архитектуры 4 + 1 в двух частях (продолжение здесь)
Есть мнение, что такие тексты не нуждаются в переводе на русский. Но мне представляется, что если наличие перевода хотя бы немного повысит долю людей этот текст прочитавших, то польза от него безусловно есть
Wikipedia
4+1 architectural view model
type of view model in software architecture
👍11🔥1😐1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Eric Evans про Functional Programming в DDD (разверните п.5): https://www.infoq.com/interviews/Technology-Influences-DDD/ А здесь (на 51:25) Eric Evans говорит о том, что в своей книге DDD он не рассматривал глубоко функциональную парадигму потому, что в…
Коротко о том, чем отличается Event Sourcing от Mutable State Storage. Ну и заодно о том, чем отличается Функциональная Парадигма от Императивной.
В первом варианте ничего не изменяется - есть только append-only event log.
Во втором варианте каждое шахматное поле представлено изменяемой переменной с текущим значением поля.
Второй вариант является математической свёрткой событий первого варианта. Соответственно, первый вариант позволяет восстановить состояние на любой момент времени.
Первый вариант (Event Sourcing) часто используется совместно со вторым (CQRS Read Model).
В первом варианте ничего не изменяется - есть только append-only event log.
Во втором варианте каждое шахматное поле представлено изменяемой переменной с текущим значением поля.
Второй вариант является математической свёрткой событий первого варианта. Соответственно, первый вариант позволяет восстановить состояние на любой момент времени.
Первый вариант (Event Sourcing) часто используется совместно со вторым (CQRS Read Model).
👍12🤯3❤1🤔1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Архитектура - это как игра в шахматы. Из огромного количества вариантов ходов мы оставляем лишь те, которые приводят нас к цели. Т.е. архитектура, как и шахматы, - это о том, как не надо делать. На эту тему уже были посты: - https://www.tgoop.com/emacsway_log/1022…
Архитектура отвечает за устранение напряжения между требованиями и конструкцией. А когда требования изначально неясны в полном объеме, то еще и за гибкость решения.
Иными словами, архитектура - это постоянная борьба, и шахматы в этом вопросе оказываются очень символичными, хорошо развивая необходимые качества архитектора. Представьте, что за белых играет архитектор, а за черных - Product Owner, который постоянно наровит изменить требования и поставить систему под удар новых требований.
Вилка - тактический прием шахмат, который позволяет взять одновременно две фигуры, т.е., говоря символично, позволяет достигнуть одновременно два "требования" Product Owner. Это то, что архитектор постоянно делает с системой.
Иными словами, одно решение (ADR) позволяет удовлетворить одно из двух требований, независимо от того, какое из них окажется верным в результате эмпирической проверяемости. Возможность адаптировать систему под новые требования. Точка расширения системы.
Другой тактический прием, характеризующий "количество взятий" (т.е. сколько фигур бьет одно и то же поле), символично выражает запас конструктивной устойчивости системы при изменении требования (например, рост performance требований).
С Product Owner, играющим в шахматы, намного легче развивать систему. Фактически он уже владеет основами системного мышления.
В статьях
https://habr.com/ru/company/cian/blog/569940/
и
https://less.works/ru/less/principles/systems-thinking
приводятся примеры радикальных последствий в тех случаях, когда лицо принимающее решение (ЛПР) плохо понимает основы системного мышления и попадает в ловушку ложной коммутативности.
Образно говоря, существуют ЛПР, которые думают, что при ремонте квартиры сперва можно сделать стены а потом выравнивать пол. Это равносильно тому, чтоб утверждать, будто не имеет значения какими фигурами и в какой последовательности ходить в шахматах. Шахматы хорошо приобщают к системному мышлению. А значит, приобщая ЛПР к шахматам, вы приобщаете его к системному мышлению и способствуете взаимному пониманию двух противоборствующих сторон разработки.
[UPDATE]: отдельного внимания заслуживает понятие "развитости фигур". Т.е. при взятии/жертвовании фигуры имеет значение не только вес фигуры, но и то, сколько ходов в эту фигуру уже вложено. Т.е. оценка превосходства по времени и трудоёмкости.
Иными словами, архитектура - это постоянная борьба, и шахматы в этом вопросе оказываются очень символичными, хорошо развивая необходимые качества архитектора. Представьте, что за белых играет архитектор, а за черных - Product Owner, который постоянно наровит изменить требования и поставить систему под удар новых требований.
Вилка - тактический прием шахмат, который позволяет взять одновременно две фигуры, т.е., говоря символично, позволяет достигнуть одновременно два "требования" Product Owner. Это то, что архитектор постоянно делает с системой.
Иными словами, одно решение (ADR) позволяет удовлетворить одно из двух требований, независимо от того, какое из них окажется верным в результате эмпирической проверяемости. Возможность адаптировать систему под новые требования. Точка расширения системы.
Другой тактический прием, характеризующий "количество взятий" (т.е. сколько фигур бьет одно и то же поле), символично выражает запас конструктивной устойчивости системы при изменении требования (например, рост performance требований).
С Product Owner, играющим в шахматы, намного легче развивать систему. Фактически он уже владеет основами системного мышления.
В статьях
https://habr.com/ru/company/cian/blog/569940/
и
https://less.works/ru/less/principles/systems-thinking
приводятся примеры радикальных последствий в тех случаях, когда лицо принимающее решение (ЛПР) плохо понимает основы системного мышления и попадает в ловушку ложной коммутативности.
Образно говоря, существуют ЛПР, которые думают, что при ремонте квартиры сперва можно сделать стены а потом выравнивать пол. Это равносильно тому, чтоб утверждать, будто не имеет значения какими фигурами и в какой последовательности ходить в шахматах. Шахматы хорошо приобщают к системному мышлению. А значит, приобщая ЛПР к шахматам, вы приобщаете его к системному мышлению и способствуете взаимному пониманию двух противоборствующих сторон разработки.
[UPDATE]: отдельного внимания заслуживает понятие "развитости фигур". Т.е. при взятии/жертвовании фигуры имеет значение не только вес фигуры, но и то, сколько ходов в эту фигуру уже вложено. Т.е. оценка превосходства по времени и трудоёмкости.
Хабр
Темные века разработки программного обеспечения
Пару лет назад я работал в SaaS-компании, которая страдала от всех возможных проблем, связанных с разработкой программного обеспечения . Код был настолько сложным, что внесение простых изменений...
❤10🔥7👍3
Forwarded from 401 Unauthorized: аутентификация и не только (Andrey Kuznetsov)
Запись моего доклада "Токены доступа и API gateway: как обеспечить безопасность запросов" с PHDays уже доступна. Посмотреть можно на:
📌 YouTube
📌 VK Видео
📌 Rutube
#api #iam_general #oauth #my_talk
#api #iam_general #oauth #my_talk
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Токены доступа и API gateway: как обеспечить безопасность запросов
Распределенные системы (микросервисы) набрали популярность и применяются все шире. Сервисов становится больше, привычные задачи для них решаются сложнее, усложнились и вопросы аутентификации и контроля доступа. В докладе рассмотрим подходы к работе с токенами…
👍6🔥2❤🔥1🙏1
Forwarded from 401 Unauthorized: аутентификация и не только (Andrey Kuznetsov)
401 Unauthorized: аутентификация и не только
Запись моего доклада "Токены доступа и API gateway: как обеспечить безопасность запросов" с PHDays уже доступна. Посмотреть можно на: 📌 YouTube 📌 VK Видео 📌 Rutube #api #iam_general #oauth #my_talk
Кузнецов_Токены_доступа_и_API_Gateway.pdf
5 MB
Также прикладываю презентацию с выступления.
❤2👍2🔥1
Если кто еще не подписан на канал Андрея Кузнецова - настоятельно рекомендую. Грамотный спец. Не раз обсуждал с ним сложнейшие вопросы по безопасности.
Telegram
401 Unauthorized: аутентификация и не только
Канал про IAM и все, что рядом:
- аутентификация
- session management
- access control
Возможны также посты про API и InfoSec
Чат: @unauthz401
Автор: @andreukuznetsov
- аутентификация
- session management
- access control
Возможны также посты про API и InfoSec
Чат: @unauthz401
Автор: @andreukuznetsov
❤5👍1🙏1👌1
Finding_software_boundaries_for_fast_flow_Team_Topologies_and_Domain.pdf
11.8 MB
FINDING SOFTWARE BOUNDARIES
FOR FAST FLOW
Team Topologies and Domain-Driven Design
FOR FAST FLOW
Team Topologies and Domain-Driven Design
👍8❤3
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Архитектура отвечает за устранение напряжения между требованиями и конструкцией. А когда требования изначально неясны в полном объеме, то еще и за гибкость решения. Иными словами, архитектура - это постоянная борьба, и шахматы в этом вопросе оказываются очень…
О дихотомии функции и конструкции на примере шахмат.
В шахматах существует такой тактический прием, как связывание:
https://chessrussian.ru/materialy/beginners/svyazka-primenenie-svyazki/
Он означает, что некая фигура (т.е. конструкция, кстати, в шахматах так и говорят - материал), называемая связываемой, принимает на себя функцию по защите иной, прикрываемой, фигуры. И до тех пор, пока свявающая (атакующая) фигура (потребитель) не изменит свой способ взаимодействия с конструкцией (провайдером), связанная фигура не может освободиться от своей функции (изменить своей дислокации) без ущерба для конструкции.
Обратите внимание, что в качестве функции защиты может быть использована и иная конструкция, т.е. фигура. А сама конструкция, т.е. фигура, может быть использована и в качестве иной функции, например, атаки. Это и есть дихотомия функции и конструкции.
Связанную фигуру можно так же рассматривать в качестве слоя трансляции - чтобы защитить свою доменную модель (самую дорогую часть ПО), мы создаем слой трансляции под названием Open Host Service:
this approach of inserting a translation layer for each external system avoids corruption of the models with a minimum of cost
http://ddd.fed.wiki.org/view/open-host-service
Т.е. чтобы предотвратить разрушение модели/конструкции. Все как и в шахматном связывании.
Этот тактический прием открывает также понимание еще и такого явления, как Coupling. Мы не можем изменить дислокацию фигуры (интерфейса), потому что она связана.
См. также.
В шахматах существует такой тактический прием, как связывание:
https://chessrussian.ru/materialy/beginners/svyazka-primenenie-svyazki/
Он означает, что некая фигура (т.е. конструкция, кстати, в шахматах так и говорят - материал), называемая связываемой, принимает на себя функцию по защите иной, прикрываемой, фигуры. И до тех пор, пока свявающая (атакующая) фигура (потребитель) не изменит свой способ взаимодействия с конструкцией (провайдером), связанная фигура не может освободиться от своей функции (изменить своей дислокации) без ущерба для конструкции.
Обратите внимание, что в качестве функции защиты может быть использована и иная конструкция, т.е. фигура. А сама конструкция, т.е. фигура, может быть использована и в качестве иной функции, например, атаки. Это и есть дихотомия функции и конструкции.
Связанную фигуру можно так же рассматривать в качестве слоя трансляции - чтобы защитить свою доменную модель (самую дорогую часть ПО), мы создаем слой трансляции под названием Open Host Service:
this approach of inserting a translation layer for each external system avoids corruption of the models with a minimum of cost
http://ddd.fed.wiki.org/view/open-host-service
Т.е. чтобы предотвратить разрушение модели/конструкции. Все как и в шахматном связывании.
Этот тактический прием открывает также понимание еще и такого явления, как Coupling. Мы не можем изменить дислокацию фигуры (интерфейса), потому что она связана.
См. также.
Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Чем отличается User Story от Task? Написать пост на эту тему меня потдолкнула недавно опубликованная ссылка на статью о техдолге в чате канала, а именно эти строки:
💬 "Doubtful developers may say, “But what if management deprioritizes or discards the technical…
💬 "Doubtful developers may say, “But what if management deprioritizes or discards the technical…
❤4👍4🔥2😁2🤔2
Может кому-нибудь пригодится для реализации критериев выборки (фильтрации) Public-API по Style Guide AIP-160 by Google:
- https://github.com/einride/aip-go
- https://github.com/aip-dev/google.aip.dev/issues/684
- https://github.com/aip-dev/google.aip.dev/issues/738
- https://google.aip.dev/160
- https://github.com/google/cel-spec
Другие варианты смотрите здесь:
- https://dckms.github.io/system-architecture/emacsway/it/self-education/self-education-for-software-engineer.html#api-design
- https://github.com/einride/aip-go
- https://github.com/aip-dev/google.aip.dev/issues/684
- https://github.com/aip-dev/google.aip.dev/issues/738
- https://google.aip.dev/160
- https://github.com/google/cel-spec
Другие варианты смотрите здесь:
- https://dckms.github.io/system-architecture/emacsway/it/self-education/self-education-for-software-engineer.html#api-design
GitHub
GitHub - einride/aip-go: Go SDK for implementing resource-oriented gRPC APIs.
Go SDK for implementing resource-oriented gRPC APIs. - einride/aip-go
❤3🔥2👌1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
О дихотомии функции и конструкции на примере шахмат. В шахматах существует такой тактический прием, как связывание: https://chessrussian.ru/materialy/beginners/svyazka-primenenie-svyazki/ Он означает, что некая фигура (т.е. конструкция, кстати, в шахматах…
Только что обнаружил, что Greg Young тоже опубликовал 16 ноября пост на шахматную тематику.
[UPDATE]: И, кажется, он это делает систематически. Видимо, не я один заинтересовался шахматами на почве ИТ-архитектуры.
[UPDATE]: И, кажется, он это делает систематически. Видимо, не я один заинтересовался шахматами на почве ИТ-архитектуры.
X (formerly Twitter)
Greg Young (@gregyoung) on X
LOL why are we still playing?!?!?! It is a daily game, there is no "time trouble"
👍3👎1🔥1
Физические Agile-доски до сих пор активно используются в крупных IT-компаниях, даже в таких, как Thoughtworks. Это никакой не исторический рудимент. Они используются даже для распределенных команд - в удаленном офисе на самом видном месте устанавливается большой монитор, на который проецируется изображение доски с главного офиса.
У меня в офисе такая доска была. Она состоит из поролоновых кубиков, количество которых пропорционально трудомощности команды разработки. Каждая сторя занимает площадь на столько кубиков, сколько составляет её трудоемкость. В Jira даже есть опция распечатать стори. Если в спринт нужно вставить другую сторю, то на доске сперва удаляется сторя эквивалентной площади.
Основное принцип - доска всегда должна быть перед глазами, на самом видном месте. Её функции больше психологические - она создает контекст погружения в обстановку. И помогает в борьбе с Первым Законом Паркинсона, но это уже отдельная тема для обсуждения, - для эффективного её решения нужны две доски на два спринта.
Так вот, к чему это я. Некоторые мои в т.ч. широко известные коллеги используют бумажный ежедневник, чем неоднократно вводили меня в замешательство. Я считал это рудиментарными привычками. Но недавно у меня появилась хорошая перьевая ручка и мне захотелось купить себе бумажный ежедневник. После непродолжительных поисков мой выбор пал на блокнот fineplan формата A6 на кольцах из натуральной кожи коньячного цвета с тиснением под крокодила. Он у меня всегда раскрыт возле монитора и выполняет те же функции, что и физическая Agile-доска, - постоянно визуализирует образное представление моего личного распорядка перед глазами. Эстетичность блокнота и ручки вызывает желание ими пользоваться. За несколько дней заметил существенное улучшение моей личной сконцентрированности и организованности. И понял, что это никакой не исторический рудимент. Теперь я понимаю своих коллег с бумажными ежедневниками.
Хотя от электронных ежедневников я не отказался, и продолжаю пользоваться Open Source приложениями:
https://github.com/orgzly-revived/orgzly-android-revived (как заядлый емаксоид в прошлом)
и
https://github.com/tasks/tasks
Оба приложения доступны на F-Droid.
[UPDATE]: Тут подвернулось под руку еще одно неплохое Open Source приложение:
https://github.com/johannesjo/super-productivity/
У меня в офисе такая доска была. Она состоит из поролоновых кубиков, количество которых пропорционально трудомощности команды разработки. Каждая сторя занимает площадь на столько кубиков, сколько составляет её трудоемкость. В Jira даже есть опция распечатать стори. Если в спринт нужно вставить другую сторю, то на доске сперва удаляется сторя эквивалентной площади.
Основное принцип - доска всегда должна быть перед глазами, на самом видном месте. Её функции больше психологические - она создает контекст погружения в обстановку. И помогает в борьбе с Первым Законом Паркинсона, но это уже отдельная тема для обсуждения, - для эффективного её решения нужны две доски на два спринта.
Так вот, к чему это я. Некоторые мои в т.ч. широко известные коллеги используют бумажный ежедневник, чем неоднократно вводили меня в замешательство. Я считал это рудиментарными привычками. Но недавно у меня появилась хорошая перьевая ручка и мне захотелось купить себе бумажный ежедневник. После непродолжительных поисков мой выбор пал на блокнот fineplan формата A6 на кольцах из натуральной кожи коньячного цвета с тиснением под крокодила. Он у меня всегда раскрыт возле монитора и выполняет те же функции, что и физическая Agile-доска, - постоянно визуализирует образное представление моего личного распорядка перед глазами. Эстетичность блокнота и ручки вызывает желание ими пользоваться. За несколько дней заметил существенное улучшение моей личной сконцентрированности и организованности. И понял, что это никакой не исторический рудимент. Теперь я понимаю своих коллег с бумажными ежедневниками.
Хотя от электронных ежедневников я не отказался, и продолжаю пользоваться Open Source приложениями:
https://github.com/orgzly-revived/orgzly-android-revived (как заядлый емаксоид в прошлом)
и
https://github.com/tasks/tasks
Оба приложения доступны на F-Droid.
[UPDATE]: Тут подвернулось под руку еще одно неплохое Open Source приложение:
https://github.com/johannesjo/super-productivity/
GitHub
GitHub - orgzly-revived/orgzly-android-revived: Outliner for taking notes and managing to-do lists
Outliner for taking notes and managing to-do lists - orgzly-revived/orgzly-android-revived
👍8❤4🔥1
Forwarded from AIDEA | ИИ для менеджмента (Alexey Evdokimov)
#дайджест постов в канале @aidea4work за 2 месяца
↗️ Внедрение ИИ в компаниях
🔵 Прирост качества работы при добавлении ИИ в команду и другие инсайты из исследования P&G
🔵 Выбор и внедрение транскрибатора
🔵 Локальные LLM для размещения внутри контура
🔵 Как внедрять ИИ так, чтобы люди им пользовались
👑 AI-агенты
🔵 MCP для быстрой интеграции инструментов в агентах
🔵 Deep Research: зачем нужен + сравнение спец. агентов
🔵 Кому нужны универсальные агенты
✏️ Картинки для презентаций
🔵 Обзор генераторов с точки зрения текста на картинках
🔵 Ideogram 3.0 и GPT-4o с точки зрения следования промпту
✔️ Инструменты личной эффективности
🔵 Бесплатные безлимитные альтернативы ChatGPT
🔵 Ассистент для генерации личного ИИ-ментора
🔵 Промпты для ИИ-ассистентов: как не писать их самим
Пишите в комментариях темы, которых вам здесь не хватает➡️
Пишите в комментариях темы, которых вам здесь не хватает
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1👎1🔥1
Forwarded from ScrumTrek
Запись ArchDays Meet Up доступна для просмотра
5 июня Сергей Баранов рассказывал о том, как принимать архитектурные решения быстрее, без потери качества и бесконечных обсуждений.
В записи:
▪️ разбор реального решения
▪️ ADR, Trade-off Analysis и шаблоны для оценки вариантов
▪️ фасилитация как инструмент согласования решений
📌 Кстати, если вам близка эта тема — загляните в Школу Архитектора ПО от Сергея. Это тренинг с глубокой проработкой архитектурных подходов, включая AI и автоматизацию.
Смотрите видео, делитесь мнением и следите за анонсами в канале, чтобы не пропустить следующие встречи.
📱 ВКонтакте
📱 YouTube
5 июня Сергей Баранов рассказывал о том, как принимать архитектурные решения быстрее, без потери качества и бесконечных обсуждений.
В записи:
▪️ разбор реального решения
▪️ ADR, Trade-off Analysis и шаблоны для оценки вариантов
▪️ фасилитация как инструмент согласования решений
Смотрите видео, делитесь мнением и следите за анонсами в канале, чтобы не пропустить следующие встречи.
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
MeetUp ArchDays`25: Как принимать архитектурные решения без бесконечных споров?
Практические методы выбора решений, которые устраивают всех. Разбор решения в реальном времени - Методики: ADR (Architecture Decision Records), Trade-off Analysis. - Как договариваться с командой и бизнесом (роль фасилитации) Практические методы выбора решений…
👍5❤4🔥1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
В 2022 году я думал, как хорошо, что в РФ есть такая компания как Яндекс, которая обеспечивает технологическую независимость страны. Как я тогда ошибался. Нет ничего хуже монополии в условиях безальтернативности, которая приводит к полной зависимости от прихоти…
Я, конечно, подозревал, что у Яндекса страдает морально-деловая сторона, но чтоб Яндекс.Такси было способно дважды чистосердечно признаться в том, что оно вытерает ноги о ст.10 ФЗ N 2300-1 о защите прав потребителей, я не предполагал. Не предполагал, потому что это происходит в стране, которая берет на себя смелость позиционировать себя как защитника правовых и высоконравственных ценностей на внешне-политической арене. Яндекс даже не пытается создать видимость уважения к Закону и к законным правам своих клиентов.
В чем суть. Саппорт Яндекса признал дважды, что Яндекс.Такси самовольно и беспричинно выставляет произвольную стоимость за уже фактически оказанную услугу, которая никак не коррелирует с той стоимостью, которая в соответствии со ст.10 ФЗ N 2300-1 была оглашена перед оказанием услуг, с целью обеспечения клиенту возможности правильного выбора. А чтобы окончательно запутать клиента, стоимость услуги отображается раздельно от стоимости ожидания лишь однократно при завершении заказа. В истории заказов стоимость услуги и ожидания раздельно уже не отображается, что усложняет клиенту возможность защиты своих прав. И именно этим пользуется саппорт, пытаясь ввести клиента в заблуждение о стоимости услуг ожидания.
По моему сугубо личному мнению, это даже не столько нарушение ст. 10 ФЗN 2300-1, сколько завладение чужими средствами обманным путем, что имеет признаки уголовного преступления, предусмотренного ст. 159 УК РФ.
Я думаю, что это результат злоупотребления Яндексом своего доминирующего положения на рынке. Как Яндекс расправился с подающими надежды конкурентами, все хорошо знают.
В общем, будьте внимательны при использовании услуг Яндекса.
В чем суть. Саппорт Яндекса признал дважды, что Яндекс.Такси самовольно и беспричинно выставляет произвольную стоимость за уже фактически оказанную услугу, которая никак не коррелирует с той стоимостью, которая в соответствии со ст.10 ФЗ N 2300-1 была оглашена перед оказанием услуг, с целью обеспечения клиенту возможности правильного выбора. А чтобы окончательно запутать клиента, стоимость услуги отображается раздельно от стоимости ожидания лишь однократно при завершении заказа. В истории заказов стоимость услуги и ожидания раздельно уже не отображается, что усложняет клиенту возможность защиты своих прав. И именно этим пользуется саппорт, пытаясь ввести клиента в заблуждение о стоимости услуг ожидания.
По моему сугубо личному мнению, это даже не столько нарушение ст. 10 ФЗN 2300-1, сколько завладение чужими средствами обманным путем, что имеет признаки уголовного преступления, предусмотренного ст. 159 УК РФ.
Я думаю, что это результат злоупотребления Яндексом своего доминирующего положения на рынке. Как Яндекс расправился с подающими надежды конкурентами, все хорошо знают.
В общем, будьте внимательны при использовании услуг Яндекса.
Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
В 2022 году я думал, как хорошо, что в РФ есть такая компания как Яндекс, которая обеспечивает технологическую независимость страны. Как я тогда ошибался. Нет ничего хуже монополии в условиях безальтернативности, которая приводит к полной зависимости от прихоти…
💯22😁12🤣3❤2⚡2🤔2🔥1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Как я делаю fitness-functions для микросервисов. Продолжение. Начало здесь. По хуку before_scenario() (или before_tag()) создается дамп изначального состояния БД (если он не был создан ранее) утилитой pg_dump в многопоточном режиме, с использованием аргументов:…
Многие думают, что конкуренция существет для достижения качества. Это не совсем так. Конкуренция существует для достижения разнообразия форм хозяйствования в условиях изменяемости рыночных условий. Где сейчас компания Кодак по производству фотоаппаратов на основе засветки серебра? А где был Гугл когда многие ходили с кнопочными телефонами Nokia?
Конкуренцию можно сравнить с разлётом дроби при стрельбе по утке из дробовика - какая-нибудь дробинка да попадет в цель. Но попадание определяется тем, где в текущий момент находится утка.
Многие компании, которые не понимают этого, допускают стратегическую ошибку в кадровой политике, нанимая сотрудников похожих на себя. Они так и говорят, что цель собеседования - выявить, насколько новый сотрудник подходит им. Рынок постоянно меняется, и такие компании блокируют собственное изменение и адаптацию к новым рыночным условиям.
В силу ряда когнитивных искажений, они боятся нанимать сотрудников непохожих на них, потому что неопределенность всегда пугает. См.
- "Эффект неоднозначности"
- "Предпочтение нулевого риска"
Я уже не говорю про целый клубок сопутствующих эффектов, таких как:
- "Эффект Даннинга — Крюгера"
- "Склонность к подтверждению своей точки зрения"
- "Психологическая защита"
- "Закон иррационального усиления"
- "Систематическая ошибка выжившего"
- "Кривая забывания"
- "Кривая обучаемости"
- "Эффект края (память)"
- "Эффект недавнего"
Страх возникает от непонимания того, как управлять неопределенностью. Но как управляет неопределенностью сама природа? В архитектуре существует подход управления развитием системы, копирующий метод биологической эволюции, под названием Evolutionary Architecture. Такой метод не блокирует, а поощряет дивергентность технических решений с целью отбора наиболее соответствующего. Потому что в нем есть механизм обеспечения конвергентности технических решений, который копирует модель паспорта породы в собаководстве (которая, в свою очередь, копирует модель хищничества в условиях дикой природы). Такие компании не боятся сотрудников с новыми знаниями, не похожими на знания их старожилов, обеспечивая себе стратегическое превосходство в условиях скоротечно меняющейся рыночной обстановки.
Представьте себе зайчика, который очень хорошо научился линять, чем обеспечил свою выживаемость в условиях снежной зимы. Но вот зимы стали теплыми, снег перестал выпадать, и для выживаемости стали требоваться уже другие навыки. То, что обеспечивало конкурентное превосходство, теперь стало угрозой для существования. То же самое происходит и при развитии систем.
Конкуренцию можно сравнить с разлётом дроби при стрельбе по утке из дробовика - какая-нибудь дробинка да попадет в цель. Но попадание определяется тем, где в текущий момент находится утка.
Многие компании, которые не понимают этого, допускают стратегическую ошибку в кадровой политике, нанимая сотрудников похожих на себя. Они так и говорят, что цель собеседования - выявить, насколько новый сотрудник подходит им. Рынок постоянно меняется, и такие компании блокируют собственное изменение и адаптацию к новым рыночным условиям.
В силу ряда когнитивных искажений, они боятся нанимать сотрудников непохожих на них, потому что неопределенность всегда пугает. См.
- "Эффект неоднозначности"
- "Предпочтение нулевого риска"
Я уже не говорю про целый клубок сопутствующих эффектов, таких как:
- "Эффект Даннинга — Крюгера"
- "Склонность к подтверждению своей точки зрения"
- "Психологическая защита"
- "Закон иррационального усиления"
- "Систематическая ошибка выжившего"
- "Кривая забывания"
- "Кривая обучаемости"
- "Эффект края (память)"
- "Эффект недавнего"
Страх возникает от непонимания того, как управлять неопределенностью. Но как управляет неопределенностью сама природа? В архитектуре существует подход управления развитием системы, копирующий метод биологической эволюции, под названием Evolutionary Architecture. Такой метод не блокирует, а поощряет дивергентность технических решений с целью отбора наиболее соответствующего. Потому что в нем есть механизм обеспечения конвергентности технических решений, который копирует модель паспорта породы в собаководстве (которая, в свою очередь, копирует модель хищничества в условиях дикой природы). Такие компании не боятся сотрудников с новыми знаниями, не похожими на знания их старожилов, обеспечивая себе стратегическое превосходство в условиях скоротечно меняющейся рыночной обстановки.
Представьте себе зайчика, который очень хорошо научился линять, чем обеспечил свою выживаемость в условиях снежной зимы. Но вот зимы стали теплыми, снег перестал выпадать, и для выживаемости стали требоваться уже другие навыки. То, что обеспечивало конкурентное превосходство, теперь стало угрозой для существования. То же самое происходит и при развитии систем.
👍16🔥5😁2❤1👎1🙏1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Физические Agile-доски до сих пор активно используются в крупных IT-компаниях, даже в таких, как Thoughtworks. Это никакой не исторический рудимент. Они используются даже для распределенных команд - в удаленном офисе на самом видном месте устанавливается большой…
Коллеги, хочу обратить внимание на приложение
https://github.com/johannesjo/super-productivity/ в качестве цифрового персонального ежедневника (если кому удобней цифровые).
1. Open Source
2. Работает и на Android (доступен в т.ч. на F-Droid), и на iPhone, и на Microsoft, и на Linux, и в брузере.
3. Можно использовать и как Task Manager, и как каледарь. Поддержка рекуррентных событий по RFC 5545.
4. Kanban board.
5. Матрица Эйзенхауэра.
6. Time Tracker.
7. Pomodoro
8. Интеграция с целой кучей систем управления проектами (Jira, Redmine, GitHub, GitLab, CalDAV, Open Project, Gitea etc.)
9. Интеграция с целой кучей календарей (Google Calendar, Outlook, iCal etc.)
Изначально был написан фрилансером для себя, но неожиданно стал слишком популярным. По богатству функционала превосходит многие проприетарные коммерческие приложения.
https://github.com/johannesjo/super-productivity/ в качестве цифрового персонального ежедневника (если кому удобней цифровые).
1. Open Source
2. Работает и на Android (доступен в т.ч. на F-Droid), и на iPhone, и на Microsoft, и на Linux, и в брузере.
3. Можно использовать и как Task Manager, и как каледарь. Поддержка рекуррентных событий по RFC 5545.
4. Kanban board.
5. Матрица Эйзенхауэра.
6. Time Tracker.
7. Pomodoro
8. Интеграция с целой кучей систем управления проектами (Jira, Redmine, GitHub, GitLab, CalDAV, Open Project, Gitea etc.)
9. Интеграция с целой кучей календарей (Google Calendar, Outlook, iCal etc.)
Изначально был написан фрилансером для себя, но неожиданно стал слишком популярным. По богатству функционала превосходит многие проприетарные коммерческие приложения.
GitHub
GitHub - johannesjo/super-productivity: Super Productivity is an advanced todo list app with integrated Timeboxing and time tracking…
Super Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project. - johannesjo/su...
❤14👍10🔥1🤔1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Про оценивание задач: - "Practice Standard for Scheduling" 3d edition by Project Management Institute "Practice Standard for Project Estimating" 2d edition Project Management Institute - "Software Estimation: Demystifying the Black Art (Developer Best Practices)"…
Browser plugin for PERT estimates in JIRA:
https://github.com/aligent/pert-with-wings
Хорош тем, что не нужно просить администратора Jira устанавливать Jira plugin вроде этого:
https://marketplace.atlassian.com/apps/1218473/pert-calculator
Может кому-нибудь пригодится еще и online калькулятор:
https://goodcalculators.com/pert-calculator/
См. также
- https://www.tgoop.com/emacsway_log/916
- https://www.tgoop.com/emacsway_log/1101
https://github.com/aligent/pert-with-wings
Хорош тем, что не нужно просить администратора Jira устанавливать Jira plugin вроде этого:
https://marketplace.atlassian.com/apps/1218473/pert-calculator
Может кому-нибудь пригодится еще и online калькулятор:
https://goodcalculators.com/pert-calculator/
См. также
- https://www.tgoop.com/emacsway_log/916
- https://www.tgoop.com/emacsway_log/1101
GitHub
GitHub - aligent/pert-with-wings: Helper to make PERT estimates in JIRA / Azure DevOps tickets
Helper to make PERT estimates in JIRA / Azure DevOps tickets - aligent/pert-with-wings
🔥2😱2👍1🙏1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Коллеги, хочу обратить внимание на приложение https://github.com/johannesjo/super-productivity/ в качестве цифрового персонального ежедневника (если кому удобней цифровые). 1. Open Source 2. Работает и на Android (доступен в т.ч. на F-Droid), и на iPhone…
Вдруг кому пригодится. На главной странице сайта org-mode https://orgmode.org/ перечислены решения, с помощью которых можно использовать org-mode на мобильных устройствах:
Android : Orgzly Revived, Orgro, Org Note
iOS : MobileOrg, Orgro
Web : Organice (progressive web app), Org Note
Android : Orgzly Revived, Orgro, Org Note
iOS : MobileOrg, Orgro
Web : Organice (progressive web app), Org Note
orgmode.org
Org Mode
Org: an Emacs Mode for Notes, Planning, Authoring and more!
❤4👍2🙏1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Pattern Specification можно реализовать парой строчек кода, в случае использования JSONB поля для хранения агрегата, путем применения jsonpath. Для реализации метода IsSatisfiedBy подойдет, например, - https://jsonpath2.readthedocs.io/en/latest/ А для компиляции…
С какими трудностями я обычно сталкивался в своей практике при реализации Specification Pattern?
1. Расслоение, если мы хотим применять его как для фильтрации объектов в оперативной памяти, так и в БД. Обычно эта проблема решается через Expression Tree, но в Golang такой опции нет, что, правда, легко обходится самодельным синтаксическим деревом.
При этом возникает вопрос о том, должна ли логика предиката реализовываться в виде интерпретатора на основе Expression Tree или дублироваться хардкодно?
2. Когда агрегаты храняться в JSONB колонке БД, обычно проблем не возникает, и мы можем применить коробочные реализации JSONPath.
Трудности возникают когда сущности агрегата хранятся в отдельных табличках без использования JSONB.
В частности, структура таблиц и структура агрегата нередко отличаются. Например, агрегат часто использует композитные первичные ключи и композитные ValueObjects. Это означает, что синтаксическое дерево для предиката агрегата будет отличаться от синтаксического дерева для запроса в БД. Т.е. просто так "коробку" прикрутить не получится. И мне известны только единичные специалисты, обладающие достаточной квалификацией, чтобы написать код трансформации одного дерева в другое.
3. Большинство коробочных интерпретаторов для Expression Tree, которые можно приспособить для реализации Specification Pattern, умеют оперировать только примитивными типами данных, и без существенной доработки не умеют совершать операции над ValueObjects, особенно, если язык программирования не поддерживает перегрузку операторов.
4. Инкапсуляция агрегата. Это отдельный большой вопрос, который часто обсуждается в отрасли и уже не раз обсуждался мной. Чаще всего для извлечения защищенного состояния агрегата используются:
1. Общие области видимости (как в Golang) или дружественные классы (C++).
2. Mediator Pattern (описан в красной книге Vaughn Vernon).
3. Рефлексия (нередко используется в коробочных решениях, особенно в ORM).
4. Memento Pattern, хотя и часто называют, но ошибочно, если внимательно разобраться.
5. Самая любимая моя проблема - это предикаты к атрибутам коллекции сущностей агрегата с использованием Expression Tree.
Как выразить в Expression Tree следующее условие:
хотя бы одна из сущностей коллекции агрегата имеет значение "x" атрибута "a" и значение "y" атрибута "b", или хотя бы одна из сущностей той же коллекции имеет значение "j" атрибута "с"?
Ничего не получится, если напишем нечто подобное:
Кажется, такое ни одна коробка не умеет, за исключением операторов wildcard "*" и локального елемента "@" в JSONPath. Собственно, оттуда я и перенял решение:
Если скомпилировать это выражение в SQL запрос к обычным реляционным табличкам (без JSONB), то получится два JOIN.
Не знаю, можно ли выразить нечто подобное с помощью LINQ в C# (если да, то сообщите, пожалуйста, в комментарии).
Когда должно вернуть true следующее выражение:
Когда совпадает хотя бы один элемент в обоих подмножествах, или когда оба подмножества эквиваленты?
Нет ничего сложного в реализации Specification Patrern on Expression Tree, если обладать достаточным опытом и квалификацией. Реализация занимает всего несколько сотен строк кода.
Сложно найти/подготовить такого специалиста в команду.
1. Расслоение, если мы хотим применять его как для фильтрации объектов в оперативной памяти, так и в БД. Обычно эта проблема решается через Expression Tree, но в Golang такой опции нет, что, правда, легко обходится самодельным синтаксическим деревом.
При этом возникает вопрос о том, должна ли логика предиката реализовываться в виде интерпретатора на основе Expression Tree или дублироваться хардкодно?
2. Когда агрегаты храняться в JSONB колонке БД, обычно проблем не возникает, и мы можем применить коробочные реализации JSONPath.
Трудности возникают когда сущности агрегата хранятся в отдельных табличках без использования JSONB.
В частности, структура таблиц и структура агрегата нередко отличаются. Например, агрегат часто использует композитные первичные ключи и композитные ValueObjects. Это означает, что синтаксическое дерево для предиката агрегата будет отличаться от синтаксического дерева для запроса в БД. Т.е. просто так "коробку" прикрутить не получится. И мне известны только единичные специалисты, обладающие достаточной квалификацией, чтобы написать код трансформации одного дерева в другое.
3. Большинство коробочных интерпретаторов для Expression Tree, которые можно приспособить для реализации Specification Pattern, умеют оперировать только примитивными типами данных, и без существенной доработки не умеют совершать операции над ValueObjects, особенно, если язык программирования не поддерживает перегрузку операторов.
4. Инкапсуляция агрегата. Это отдельный большой вопрос, который часто обсуждается в отрасли и уже не раз обсуждался мной. Чаще всего для извлечения защищенного состояния агрегата используются:
1. Общие области видимости (как в Golang) или дружественные классы (C++).
2. Mediator Pattern (описан в красной книге Vaughn Vernon).
3. Рефлексия (нередко используется в коробочных решениях, особенно в ORM).
4. Memento Pattern, хотя и часто называют, но ошибочно, если внимательно разобраться.
5. Самая любимая моя проблема - это предикаты к атрибутам коллекции сущностей агрегата с использованием Expression Tree.
Как выразить в Expression Tree следующее условие:
хотя бы одна из сущностей коллекции агрегата имеет значение "x" атрибута "a" и значение "y" атрибута "b", или хотя бы одна из сущностей той же коллекции имеет значение "j" атрибута "с"?
Ничего не получится, если напишем нечто подобное:
agg.ent[*].a == x && agg.ent[*].b == y && agg.ent[*].c == j
Кажется, такое ни одна коробка не умеет, за исключением операторов wildcard "*" и локального елемента "@" в JSONPath. Собственно, оттуда я и перенял решение:
agg.ent[*] ? (@.a == x && @.b == y) || agg.ent[*].c == j
Если скомпилировать это выражение в SQL запрос к обычным реляционным табличкам (без JSONB), то получится два JOIN.
Не знаю, можно ли выразить нечто подобное с помощью LINQ в C# (если да, то сообщите, пожалуйста, в комментарии).
Когда должно вернуть true следующее выражение:
agg.ent1[*].a == agg.ent2[*].a
?Когда совпадает хотя бы один элемент в обоих подмножествах, или когда оба подмножества эквиваленты?
Нет ничего сложного в реализации Specification Patrern on Expression Tree, если обладать достаточным опытом и квалификацией. Реализация занимает всего несколько сотен строк кода.
Сложно найти/подготовить такого специалиста в команду.
Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Pattern Specification можно реализовать парой строчек кода, в случае использования JSONB поля для хранения агрегата, путем применения jsonpath.
Для реализации метода IsSatisfiedBy подойдет, например,
- https://jsonpath2.readthedocs.io/en/latest/
А для компиляции…
Для реализации метода IsSatisfiedBy подойдет, например,
- https://jsonpath2.readthedocs.io/en/latest/
А для компиляции…
👍6👏2❤1🔥1