Russian Association of Software Architects
4.34K subscribers
84 photos
8 videos
15 files
293 links
Канал самоуправляется коллегией: @sergey486 и @emacsway . Бот для вступления в авторский коллектив: @ru_arc_bot

Предложить доклад для митапа: @ru_arc_meetup_bot

Группы:
@ru_arc_chat
@rasa_business
@archicases

Рекламу не размещаем.
Download Telegram
Russian Association of Software Architects
Немного определений к предыдущему сообщению: 🔷 Definition: correctness Correctness is the ability of software products to perform their exact tasks, as defined by their specification. 🔷 Definition: robustness Robustness is the ability of software systems…
Тут стоит заметить, что Bertrand Meyer выделяет два типа side-effect:

🔷 Definition: concrete side effect

A function produces a concrete side effect if its body contains any of the following:
- An assignment, assignment attempt or creation instruction whose target is an attribute.
- A procedure call.

🔷 Definition: abstract side effect

An abstract side effect is a concrete side effect that can change the value of a non-secret query.

-- "Object-Oriented Software Construction" 2nd edition by Bertrand Meyer

CQS накладывает ограничение только на abstract side effect (который часто называют observable), т.е. наблюдаемый клиентами класса.
Дело в том, что concrete side effect ("only affecting properties that are not visible to clients") может быть "easily detect", а потому - "some concrete side effects are not only harmless but necessary."

💬 "This is the notion used by the Command-Query Separation principle — the principle The principle that prohibits abstract side effects in functions."
-- "Object-Oriented Software Construction" 2nd edition by Bertrand Meyer

Конечно, эти краткие цитаты не передают всей глубины сути, так что цель этого поста не передать какое-то знание, а привлечь к нему внимание. В первоисточнике приводятся примеры. Чуть больше информации доступно в этой заметке.
👍2
Russian Association of Software Architects
Тут стоит заметить, что Bertrand Meyer выделяет два типа side-effect: 🔷 Definition: concrete side effect A function produces a concrete side effect if its body contains any of the following: - An assignment, assignment attempt or creation instruction whose…
💬 "I/O is inherently impure: input operations undermine referential transparency, and output operations create side effects. Nevertheless, there is a sense in which function can perform input or output and still be pure, if the sequence of operations on the relevant I/O devices is modeled explicitly as both an argument and a result, and I/O operations are taken to fail when the input sequence does not describe the operations actually taken since the program began execution.
The second point ensures that the only sequence usable as an argument must change with each I/O action; the first allows different calls to an I/O-performing function to return different results on account of the sequence arguments having changed.[5][6]
The I/O monad is a programming idiom typically used to perform I/O in pure functional languages."

5. Peyton Jones, Simon L. (2003). Haskell 98 Language and Libraries: The Revised Report (PDF). Cambridge, United Kingdom: Cambridge University Press. p. 95. ISBN 0-521 826144. Retrieved 17 July 2014.
6. Hanus, Michael. "Curry: An Integrated Functional Logic Language" (PDF). www-ps.informatik.uni-kiel.de. Institut für Informatik, Christian-Albrechts-Universität zu Kiel. p. 33. Archived from the original (PDF) on 25 July 2014. Retrieved 17 July 2014.

https://en.m.wikipedia.org/wiki/Pure_function
Russian Association of Software Architects
💬 "I/O is inherently impure: input operations undermine referential transparency, and output operations create side effects. Nevertheless, there is a sense in which function can perform input or output and still be pure, if the sequence of operations on the…
Наконец, подбираемся к Event Sourcing:

💬 "Что особенно важно, никакая информация не удаляется из такого хранилища и не изменяется. Как следствие, от набора CRUD-операций в приложениях остаются только CR. Также отсутствие операций изменения и/или удаления с хранилищем устраняет любые проблемы конкурирующих обновлений.

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

Если это все еще кажется вам абсурдным, вспомните, как работают системы управления версиями исходного кода.

More importantly, nothing ever gets deleted or updated from such a data store. As a consequence, our applications are not CRUD; they are just CR. Also, because neither updates nor deletions occur in the data store, there cannot be any concurrent update issues.

If we have enough storage and enough processor power, we can make our applications entirely immutable—and, therefore, entirely functional.

If this still sounds absurd, it might help if you remembered that this is precisely the way your source code control system works."
— "Clean Architecture: A Craftsman’s Guide to Software Structure and Design" by Robert C. Martin

💬 "Event Sourcing is naturally functional. It's an append only log of facts that have happened in the past. You can say that any projection any state is a left fold over your previous history."
— Greg Young, "A Decade of DDD, CQRS, Event Sourcing" at 16:44

💬 "It's actually functional."
— Greg Young, "Event Sourcing is actually just functional code" at 34:49

💬 "I have always said that Event Sourcing is "Functional Data Storage". In this talk we will try migrating to a idiomatic functional way of looking at Event Sourcing. Come and watch all the code disappear! By the time you leave you will never want an "Event Sourcing Framework (TM)" ever again!
— Greg Young, "Functional Data", NDC Conferences

Дело в том, что для одних и тех же входных параметров (критериев выборки), Event Sourced Storage возвращает всегда один и тот же результат, т.е. обладает признаками ссылочной прозрачности.
👍1🔥1
Russian Association of Software Architects
Наконец, подбираемся к Event Sourcing: 💬 "Что особенно важно, никакая информация не удаляется из такого хранилища и не изменяется. Как следствие, от набора CRUD-операций в приложениях остаются только CR. Также отсутствие операций изменения и/или удаления…
Рост спроса на FP обусловлен не только простотой доказательства корректности, но и ростом широты использования распределенных систем:

💬 "Все состояния гонки (race condition), взаимоблокировки (deadlocks) и проблемы параллельного обновления обусловлены изменяемостью переменных. Если в программе нет изменяемых переменных, она никогда не окажется в состоянии гонки и никогда не столкнется с проблемами одновременного изменения. В отсутствие изменяемых блокировок программа не может попасть в состояние взаимоблокировки.

All race conditions, deadlock conditions, and concurrent update problems are due to mutable variables. You cannot have a race condition or a concurrent update problem if no variable is ever updated. You cannot have deadlocks without mutable locks."
— "Clean Architecture: A Craftsman’s Guide to Software Structure and Design" by Robert C. Martin
Russian Association of Software Architects
Рост спроса на FP обусловлен не только простотой доказательства корректности, но и ростом широты использования распределенных систем: 💬 "Все состояния гонки (race condition), взаимоблокировки (deadlocks) и проблемы параллельного обновления обусловлены изменяемостью…
💬 "But doesn't lazy loading affect domain model purity?"

Vladimir Khorikov в статье "Domain model purity and lazy loading" приходит к следующему выводу:

💬 "A pure domain model has the following attributes:

- Its domain classes don’t explicitly refer to out-of-process dependencies or classes from the application services layer. In other words, domain classes should only depend on other domain classes or the framework’s built-in primitive types.

- All inputs to the domain model are referentially transparent, except for calls to the domain classes themselves. Referential transparency means that you can replace a method call or an expression with the output of that method call or expression, and it will not change the code’s behavior.

- All side effects are limited to the domain model — Domain classes should only modify themselves, not out-of-process dependencies or classes from the application services layer. This attribute flows from the first attribute but is still worth stating explicitly.

This attribute, along with the exception in the second attribute ("expect for calls to the domain classes themselves") is what differentiates a pure domain model from pure code in a functional programming sense. In functional programming, a pure code is always referentially transparent (which also means it works with immutable data only and doesn't incur side effects), while in DDD, the notion of purity isn't as strict."
— "Domain model purity and lazy loading" by Vladimir Khorikov
👍2
PostgresPro представил четыре книги для разных уровней подготовленности читателей, от совершенно неосведомленного человека до разработчика баз данных. Книги дают комплексные знания в лаконичной форме. Все книги доступны для скачивания в свободном доступе:

1) "Postgres: первое знакомство" / П.В. Лузанов, Е.В. Рогов, И.В. Лёвшин
2) "PostgreSQL изнутри" / Е.В. Рогов — М.: ДМК Пресс, 2022. — 660 с.
3) "PostgreSQL. Основы языка SQL: учеб. пособие" / Е.П. Моргунов; под ред. Е.В. Рогова, П.В. Лузанова.
4) "Основы технологий баз данных: учеб. пособие" / Б.А. Новиков, Е.А. Горшкова, Н.Г. Графеева; под ред. Е.В. Рогова.

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

Так же доступны учебные материалы курсов: слайды, видео, руководства. Скачать можно все материалы каждого курса одним архивом.

Видеозаписи курсов.

Превосходная подборка статей с фундаментальной информацией простым языком о внутреннем устройстве PostgreSQL, от разработчиков PostgresPro:

1) "MVCC-1. Изоляция"
2) "WAL в PostgreSQL: 1. Буферный кеш"

Ну и пара превосходных книг от разработчика PostgreSQL, но уже не в свободном доступе:

- "Mastering PostgreSQL In Application Development" by Dimitri Fontaine

- "The Art of PostgreSQL" 2nd edition by Dimitri Fontaine - is the new title of "Mastering PostgreSQL in Application Development"

#Database #PostgreSQL
👍23
Raft - Understandable Distributed Consensus
- https://thesecretlivesofdata.com/raft/

- простая и понятная интерактивная визуализация алгоритма.

[UPDATE]: еще одна (thanks to @AlexKirillov ):
- https://raft.github.io/

#DistributedSystems
Понадобилось разобраться с Dotted Version Vectors, попалась эта статья, описание принципа действия в которой для меня оказалось самым понятным из всего, что перекопал. Когда понятен принцип – в детали погружаться проще.
Возможно, кому-то еще поможет 👌

https://queue.acm.org/detail.cfm?id=2917756

#DistributedSystems
👍4
Antonio_Bucchiarone_et_al_Microservices_Science_And_Engineering.pdf
14.4 MB
Сборник статей «Microservices: Science and Engineering»

Part I Opening
- Microservices: The Evolution and Extinction of Web Services?
- Size Matters: Microservices Research and Applications

Part II Migration
- Migrating to Microservices
- Assessing Your Microservice Migration

Part III Modeling
- Microservices Anti-patterns: A Taxonomy
- Modeling Microservice Conversations with RESTalk
- Graphical and Textual Model-Driven Microservice Development

Part IV Development and Deployment
- A Formal Approach to Microservice Architecture Deployment
- Autonomic Decentralized Microservices: The Gru Approach and Its Evaluation
- A Hybrid Approach to Microservices Load Balancing

Part V Applications
- Towards the Digital Factory: A Microservices-Based Middleware for Real-to-Digital Synchronization
- Using Microservices to Customize Multi-tenant Software-as-a-Service
- You Are Not Netflix

Part VI Education
- DevOps and Its Philosophy: Education Matters!
👍4
Russian Association of Software Architects
Наконец, подбираемся к Event Sourcing: 💬 "Что особенно важно, никакая информация не удаляется из такого хранилища и не изменяется. Как следствие, от набора CRUD-операций в приложениях остаются только CR. Также отсутствие операций изменения и/или удаления…
Event Sourcing - где посмотреть примеры реализации?

1) "Simple CQRS example" by Greg Young

2) "Microsoft patterns & pratices CQRS Journey sample application" (CQRS, DDD, Event Sourcing, SAGA transactions)

3) "Sample Bounded Contexts from the book "Implementing Domain-Driven Design"" by Vaughn Vernon

4) "Sample Bounded Contexts for C#.NET from the book "Implementing Domain-Driven Design"" by Vaughn Vernon

5) "go-iddd - showcase project for implementing DDD in Go" by Anton Stöckl

6) Варианты реализации OO/Functional Aggregates by Chris Richardson:
- Traditional OO mutable Domain Objects
- Functional Scala witn immutable Domain Objects
- Hybrid OO/Functional Scala with immutable Domain Objects

7) "eventuate-examples" by Chris Richardson

8) "FTGO example application. Example code for the book Microservice patterns" by Chris Richardson

9) "Hands-On Domain-Driven Design with .NET Core, published by Packt" by Alexey Zimarev

10) "dotnet-sample" - Sample application using Eventuous .NET by Alexey Zimarev

11) "Sample code for the book Principles, Practices and Patterns of Domain-Driven Design" by Scott Millett, Nick Tune

12) "Elastic Event Store" by Vladik Khononov - A fully serverless storage for event sourcing-based systems.

Вариант Kamil Grzybek пропущен по его желанию.

Присылайте свои варианты 🙂))

#EventSourcing #DDD
🔥9👍3
Russian Association of Software Architects
Можно ли изменять несколько агрегатов одной транзакцией? В профессиональной среде существует популярное мнение что нельзя. Этот вопрос затрагивает Vladimir Khorikov в статье "Crossing aggregate boundaries", и говорит, что: > I hear this guideline a lot as…
Process Manager - где посмотреть?

В этом канале уже дважды упоминалось интервью "Modeling Uncertainty with Reactive DDD" by Vaughn Vernon reviewed by Thomas Betts, в котором V.Vernon предлагает использовать Process Manager Pattern для обработки процессов, охватывающих несколько агрегатов в условиях Eventual Consistency.

Посмотреть реализацию в исполнении V. Vernon, включая ProcessTimedOut (о чем часто спрашивают), можно здесь:
- Java
- .Net

В красной книге описание приводится в главах "Long-Running Processes, and Avoiding Responsibility" и "Long-Running Processes, aka Sagas".

#DistributedSystems
2👍1
Chat Digest

💬 Решение проблем путем их усугубления:
- https://t.me/ru_arc_chat/1689

💬 Когда делать рефакторинг?
- https://t.me/ru_arc_chat/1691

💬 А.Н. Туполев о технической красоте:
- https://t.me/ru_arc_chat/1692

💬 Красота формируется целесообразностью:
- https://t.me/ru_arc_chat/1708

💬 Первоисточник по SAGA:
- https://t.me/ru_arc_chat/1713

Перевод первоисточника по SAGA:
- https://t.me/ru_arc_chat/2396

💬 SOLID применительно к бизнесу:
- https://t.me/ru_arc_chat/1763

💬 Синдром секретаря:
- https://t.me/ru_arc_chat/1767

💬 Мы делаем Golang DDD Reference Application:
- https://t.me/ru_arc_chat/1792

💬 Снова Archi & DDD:
- https://t.me/ru_arc_chat/1813

💬 Превосходная метафора о техдолге:
- https://t.me/ru_arc_chat/1838
- https://t.me/ru_arc_chat/1839

💬 Основная причина образования техдолга - недальновидность и конфликт краткосрочных интересов с долгосрочными:
- https://t.me/ru_arc_chat/1847

💬 Избыток бюджета и техдолг:
- https://t.me/ru_arc_chat/1849
- https://t.me/ru_arc_chat/1851
- https://t.me/ru_arc_chat/1856
- https://t.me/ru_arc_chat/1857
- https://t.me/ru_arc_chat/1863

💬 Дефицит бюджета и техдолг:
- https://t.me/ru_arc_chat/1858

💬 Классификация компаний по Gregor Hohpe:
- https://t.me/ru_arc_chat/1861

💬 "неважно, насколько ты крут, - это не определяет твоей успешности, если носителем компетенции являешься только ты один, т.к. практически все продукты в индустрии - коллективные."
- https://t.me/ru_arc_chat/1899
- https://t.me/ru_arc_chat/1900
- https://t.me/ru_arc_chat/1903

Как это связано с распространением знаний:
- https://t.me/ru_arc_chat/1905
- https://t.me/ru_arc_chat/1909

💬 изменение модели разработки - дело деликатное, можно растерять коллектив:
- https://t.me/ru_arc_chat/1965

💬 Качество второго закона диалектики != качеству кода или процессов:
- https://t.me/ru_arc_chat/1984

💬 Что такое "архитектурный стиль":
- https://t.me/ru_arc_chat/1983
- https://t.me/ru_arc_chat/1985
- https://t.me/ru_arc_chat/1990
- https://t.me/ru_arc_chat/2007

💬 "экстенсиональный и интенсиональный"
- https://t.me/ru_arc_chat/2001

💬 Что отличает знание от мнения?
- https://t.me/ru_arc_chat/2005

💬 Архитектура и энтропия (второй з-н термодинамики):
- https://t.me/ru_arc_chat/2010
- https://t.me/ru_arc_chat/2011

💬 Архитектурная функция как распределенная роль или как выделенная орг.единица?
- https://t.me/ru_arc_chat/2012
- https://t.me/ru_arc_chat/2014
- https://t.me/ru_arc_chat/2026
- https://t.me/ru_arc_chat/2039

💬 Краткий и понятный ответ на вопрос про ссылку на авторитета и темные века:
- https://t.me/ru_arc_chat/2023

💬 Правила группы:
- https://t.me/ru_arc_chat/2036

💬 Первая публикация SOLID:
- https://t.me/ru_arc_chat/2050

💬 Как выделять ресурсы на техдолг:
- https://t.me/ru_arc_chat/2057

💬 Подкасты и видео:
- https://t.me/ru_arc_chat/2062
- https://t.me/ru_arc_chat/2067
- https://t.me/ru_arc_chat/2074
- https://t.me/ru_arc_chat/2076

💬 Про SRP:
- https://t.me/ru_arc_chat/2078
- https://t.me/ru_arc_chat/2079

💬 О способах реализации pagination:
с https://t.me/ru_arc_chat/2083
по https://t.me/ru_arc_chat/2131

💬 transaction model framework
- https://t.me/ru_arc_chat/2153

💬 Интервью с автором DCI:
- https://t.me/ru_arc_chat/2154

💬 Какой смысл от Event Sourcing?
- https://t.me/ru_arc_chat/2291

💬 @emacsway взял на себя риск прибегнуть не к правилам, а к прямому волеизъявлению участников группы, поставив на кон три месяца упорного труда и недосыпаний против флуда случайного прохожего в группе, дабы никто не ассоциировал коллегию с диктаторством, чтобы сохранить цели группы и пресечь информационную захламленность чата:
- https://t.me/ru_arc_chat/2336
- https://t.me/ru_arc_chat/2377

💬 У нас появилась флудилка для нерелевантных тем:
- https://t.me/ru_arc_chat/2386

💬 Calvin:
- https://t.me/ru_arc_chat/2389

💬 XA - это eventual consistent
- https://t.me/ru_arc_chat/2391
- https://t.me/ru_arc_chat/2392

💬 Про SAGA:
с https://t.me/ru_arc_chat/2395
по https://t.me/ru_arc_chat/2517

Спасибо, что развиваете отрасль с помощью нашего чата!

#ChatDigest
🔥11👍31
Russian Association of Software Architects
Если вы затрудняетесь объяснить менеджменту что такое технический долг и легаси, то вот неплохой пример от нетехнаря (и в этом заключается ценность статьи, т.к. она написана простым языком, понятным нетехнарю). https://vitalyfilatov.ru/all/techdebt-and-legacy/
This media is not supported in your browser
VIEW IN TELEGRAM
О техдолге - еще одна доходчивая метафора. Хорошо показано состояние среднего проекта на рынке. Опытный архитектор осуществляет decoupling of Big Ball of Mud.

Как обычно, основная причина заключается в недальновидности последствий принимаемых решений и в конфликте краткосрочных бизнес-интересов с долгосрочными техническими интересами.
😁9
Интервью(аудио) от Александра Лучкова на тему Поворот к продуктовой разработке - влияние на пространство выборов и стратегию разработки.

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

Тезисы и таймкоды доступны в блоге Александра Турханова.
👍5
Продолжается прием заявок на выступления на ArchDays.ru. Если вам есть чем поделиться, оставляйте заявку. Если сомневаетесь, можете написать мне напрямую и задать интересующие вопросы (@sergey486)

Формирование программы в самом разгаре!
SAGA - подборка ссылок из обсуждений чата канала:

🔷 Первоисточник по SAGA: "SAGAS" by Hector Garcia-Molina, Kenneth Salem

🔷 Перевод первоисточника по SAGA: "Гектор Гарсия-Молина и Кеннет Салем — «Саги»" / Михаил Ланкин

🔷 Applying the Saga Pattern • Caitie McCaffrey • GOTO 2015

🔷 Saga distributed transactions pattern

🔷 Process Manager Pattern

🔷 Compensating Transaction pattern

🔷 Пример реализации SAGA на Enterprise Integration Patterns (source code)

🔷 Пример реализации Process Manager от сообщества Microsoft (комментарий Greg Young). Альтернативы и обоснование.

🔷 Patterns and implementations for a banking cloud transformation

🔷 Несколько реализаций саг:
- https://axoniq.io
- https://eventuate.io/abouteventuatetram.html
- https://github.com/eclipse/microprofile-lra
- https://github.com/jbosstm/narayana/tree/master/rts/lra

🔷 Awesome workflow engines

🔷 "A long-running transaction model of workflow" by Quanzhou Hu; Jia Liu; Yi Zhuang; Yi Liu

🔷 "The CORBA Activity Service Framework for supporting extended transactions" by Iain Houston, M. C. Little, Ian Robinson, Santosh K. Shrivastava, Stuart M. Wheater

🔷 "What are long running processes?" by Bernd Rücker

🔷 Чем отличается SAGA от Process Manager:
- https://event-driven.io/en/saga_process_manager_distributed_transactions/

- https://stackoverflow.com/a/33652837

- https://blog.devarchive.net/2015/11/saga-vs-process-manager.html?m=1

🔷 "Eventually consistent" by Werner Vogels

🔷 "ACID properties of transactions"

🔷 "Atomicity :: Chapter 12. Berkeley DB Transactional Data Store Applications"

🔷 "Atomic - indivisible, not capable of being cut/divided into smaller pieces"

🔷 "Consistency Models"

🔷 интервью "Modeling Uncertainty with Reactive DDD" by Vaughn Vernon reviewed by Thomas Betts, в котором V.Vernon предлагает использовать Process Manager Pattern для обработки процессов, охватывающих несколько агрегатов в условиях Eventual Consistency.

Посмотреть реализацию в исполнении V. Vernon, включая ProcessTimedOut (о чем часто спрашивают), можно здесь:
- Java
- .Net

🔷 "Camunda Platform 8 Docs :: BPMN coverage"

🔷 Eclipse Microprofile стандарт имеет понятие LRA - Long Running Application. это есть их интерпретация саг

🔷 Microprofile-compatible фреймворки а-ля micronaut.io

🔷 RedHat развивает референс имплементацию Microprofile в виде своего фреймворка quarkus.io

🔷 Red Hut Summit "Saga: The new era of transactions in a
microservices architecture
" by Giovanni Marigi, Mauro Vocale. BOSTON, MA | MAY 7-9, 2019

🔷 Вот пример Camunda. их интерпретация и имплементация саг )). Там всё очень упрощено и декларативно.

🔷 Architecture standard определяет сагу в пункте 21.2.7. Ensuring Global Consistency with Saga Patterns

Спасибо, что развиваете отрасль с помощью нашего чата!

#DistributedSystems #Многоликий
👍4🔥42
Коллеги, напоминаю, если у кого есть желание пополнить состав авторов канала @ru_arc , не стесняйтесь обращаться к @sergey486 или к @emacsway .

Не обязательно эксперты - для деятельных новичков дело тоже найдется. Не так давно к нам вернулся @GKruglov , а вместе с ним и сложные, напряженные, но чрезвычайно продуктивные обсуждения. Информационная нагрузка чата возросла кратно, а значит, она стала нуждаться в систематизации и обобщении в виде дайджестов, компиляций, и полноценных структурированных статей.

Предполагается деятельность не только в tg-канале, но и в очных мероприятиях.
👍1
Всем привет!

В прошлом году на ArchDays @varkulevich рассказал о своем проекте, «Онто». Сейчас позиционируется как «Облачная платформа для совместной работы, позволяющая объединить команды и данные в реальном времени».

Когда мы начали ассоциацию, Артем предложил попробовать Онто для наших нужд. И я благополучно отложил это предложение в долгий ящик, пока недавно @GKruglov не упомянул, что расчехлил protege для построения онтологий.

Ну и мы предложили Артему показать, что умеет Онто, как его можно использовать для нужд ассоциации и для личных целей.
Сошлись на том, что это может быть интересным и еще кому-то, поэтому приходите все желающие, посмотрим на проект.

Пройдет в следующую пятницу, 2-го сентября в 19:00
Ссылка на регистрацию
: https://us02web.zoom.us/meeting/register/tZIsfuCupzsuGNK77B7qpBLC2AbDDJGswQN8

Кучка ссылок
Питч о проекте на ФРИИ https://sprint.iidf.ru/startups/onto/
Сайт проекта: https://ontonet.ru/
Инструкция пользователя https://ontonet.ru/startingtour
Пользовательские ситуации: https://ontonet.ru/case
Техническая документация по проекту: https://ontonet.ru/info
Платформа: https://ontonet.online/
Бэклог идей пользователей https://idmsykl.ducalis.io/rice-feature-priorities/summary
🔥4👍2🤔2