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
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. Мы не можем изменить дислокацию фигуры (интерфейса), потому что она связана.

См. также.
4👍4🔥2😁2🤔2
Физические 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/
👍85🔥1
Forwarded from AIDEA | ИИ для менеджмента (Alexey Evdokimov)
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥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 УК РФ.

Я думаю, что это результат злоупотребления Яндексом своего доминирующего положения на рынке. Как Яндекс расправился с подающими надежды конкурентами, все хорошо знают.

В общем, будьте внимательны при использовании услуг Яндекса.
💯22😁12🤣322🤔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. Такой метод не блокирует, а поощряет дивергентность технических решений с целью отбора наиболее соответствующего. Потому что в нем есть механизм обеспечения конвергентности технических решений, который копирует модель паспорта породы в собаководстве (которая, в свою очередь, копирует модель хищничества в условиях дикой природы). Такие компании не боятся сотрудников с новыми знаниями, не похожими на знания их старожилов, обеспечивая себе стратегическое превосходство в условиях скоротечно меняющейся рыночной обстановки.

Представьте себе зайчика, который очень хорошо научился линять, чем обеспечил свою выживаемость в условиях снежной зимы. Но вот зимы стали теплыми, снег перестал выпадать, и для выживаемости стали требоваться уже другие навыки. То, что обеспечивало конкурентное превосходство, теперь стало угрозой для существования. То же самое происходит и при развитии систем.
👍17🔥5😁21👎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.)

Изначально был написан фрилансером для себя, но неожиданно стал слишком популярным. По богатству функционала превосходит многие проприетарные коммерческие приложения.
16👍11🔥1🤔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" атрибута "с"?

Ничего не получится, если напишем нечто подобное:
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, если обладать достаточным опытом и квалификацией. Реализация занимает всего несколько сотен строк кода.

Сложно найти/подготовить такого специалиста в команду.
👍83👏3🔥1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Бомбовый инструмент управления проектами на простых текстовых файлах. Попробовал - остался в восторге. И уже начал использовать его. - https://github.com/taskjuggler/TaskJuggler Не хватает только работы со среднеквадратичным отклонением оценки (но этим вообще…
TaskJuggler может создавать множество версий плана, что позволяет его использовать для 3 point estimates technique PERT:
https://github.com/taskjuggler/TaskJuggler/issues/127

См. по слову "scenario":
https://taskjuggler.org/manual/Tutorial.html

Docs:
https://taskjuggler.org/tj3/manual/scenario.html

Я использую такой макрос:
macro pert [
optimistic:effort ${1}d
nominal:effort ${2}d
pessimistic:effort ${3}d
]


В отчете можно указать какие сценарии выводить:
https://taskjuggler.org/tj3/manual/scenarios.html

Это работает, хотя и не совсем так, как должно работать по PERT estimation.

Как вариант, можно сделать кастомное поле для StandardDeviation:
https://taskjuggler.org/tj3/manual/extend.html

И вносить в него данные из PERT-калькулятора:
https://news.1rj.ru/str/emacsway_log/1543

Для подсчета крайнего срока можно сделать csv-выгрузку и подсчитать в excel:
https://taskjuggler.org/tj3/manual/formats.html

Ну или добавить в страницу jQuery и подсчитать с помощью JavaScript:
https://taskjuggler.org/tj3/manual/rawhtmlhead.html

Потому что marco, к сожалению, математику не умеет делать.

Тем не менее, инструмент очень крутой, с высоким порогом вхождения. Наверное, лучшее из того, что я пробовал. Был разработан by Chris Schlaeger, Managing Director at Amazon Development Center Germany GmbH.

[UPDATE]: Как я уже говорил ранее, TaskJuggler можно интегрировать с различными системами управления задачами.
👍31🔥1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Это работает, хотя и не совсем так, как должно работать по PERT estimation.
В предыдущем посте говорилось, что pessimistic scenario не совсем корректен в Taskjuggler. Картинка демонстрирует, как должны быть сложены две оценки. Мы видим, что оценки пересекаются. Вот почему мы должны сложить отдельно вероятностную оценку и среднеквадратичное отклонение. Но TaskJuggrer в пессимистическом сценарии сложил оценки так, что они не пересекаются. Т.е. степень его пессимизма превышает расчетную. Это та причина, по которой лучше учитывать раздельно вероятностную оценку и её среднеквадратичное отклонение, как я описал во второй части предыдущего поста.

На одном из реальных проектов прямое сложение пессимистических оценок дало превышение вероятностного срока на полтора месяца, в то время как 3-sigma составил не более 9 дней. Так что здесь нужно с осторожностью.

Кстати, это та же самая причина, по которой Story Points можно сложить только на краткосрочном горизонте (спринт-два).
👍21🔥1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Вдруг кому пригодится. На главной странице сайта org-mode https://orgmode.org/ перечислены решения, с помощью которых можно использовать org-mode на мобильных устройствах: Android : Orgzly Revived, Orgro, Org Note iOS : MobileOrg, Orgro Web : Organice (progressive…
Увидел в Авито объявление: "сдам в аренду собаку, гадит где попало, обои рвет, мебель грызет, на всех бросается, идеальный вариант чтоб отбить желание у родственников обзавестись питомцем, дорого".

Это... я что подумал... есть на примете программист, очень умный (реально), гений, победитель олимпиад, в совершенстве знает алгортмы (легко пройдет собес в любой бигтех), ненавидит DDD (даже этот персонаж нервно покуривает в сторонке), в одиночку решает сложнейшие задачи, замыкает все задачи на себя (Рик и близко не валялся), руководствуется принципом "вы никогда не сможете понять ничего из того, что я создал", "ФП - херня", "абстракции - вредны", "сеттеры удобны", "ООП - оверинжиниринг", "анемичные модели понятны", "монолиты распределенными не бывают", "люди вообще писали на ассемблере и ничего, выжили"...

Готов заключить с ним агентское соглашение и сдавать его в аренду. Дорого. Если кому нужно укрепить переговорную позицию перед бизнесом - обращайтесь. На руках носить потом будут.
😁18🔥21🍾1
Книга "Cloud Native Data Security with OAuth: A Scalable Zero Trust Architecture"

Совсем недавно, вот буквально в марте, вышла новая книга на тему Identity & Access Management. Я уже писал, что интересных книг про IAM знаю совсем немного, поэтому, конечно, обрадовался такому событию.

Книга аффилирована с компанией Curity, ее авторы как раз там и работают. Поскольку ранее я уже отмечал свое положительное впечатление о качестве публикуемых компанией материалов, к книге изначально тоже подходил с определенными надеждами =)
Также у Gary Archer, одного из авторов, очень достойные ответы на Stack Overflow, не раз их встречал.

В посте традиционно для книги указал ссылку на Амазон, однако сразу хочу сказать, что в электронном виде книгу авторы сами раздают бесплатно (подсказка: данные в форме можно указать любые).

В книге четыре принципиальных части:
📚 Part I. Introducing Cloud Native OAuth
📚 Part II. Securing APIs with Tokens
📚Part III. Operating Cloud Native OAuth
📚Part IV. Securing API Clients

Собственно, их и намереваюсь рассмотреть, начав с первой.

#book #iam_general #oauth
🔥2👍1