Pull to refresh

WF2M сеть. Формализм и математика workflow

Level of difficultyEasy
Reading time24 min
Views2.2K

Кому нужны книжки без картинок … или хоть стишков, не понимаю! – думала Алиса

Кому нужны регламенты бизнес-процессов без схемок … или хоть скриптов, не понимаю! –осенило бизнес-аналитика Алису

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

Существует широкий спектр workflow нотаций (стандартов): от классических ГОСТ 19.701-90 (ИСО 5807-85, flowchart), IDEF3, UML2-AD и XML-сериализованных BPMN\YAWL\XPDL\EPML до специфических, например, Дракон.

Ведутся споры «насколько хороша» та или иная нотация: насколько интуитивно понятно передает она в графическом представлении модели (в картинке) суть процесса (упрощенная нотация, понятная рядовому бизнес-пользователю), но не встречал обсуждения их математических представлений и вообще workflow-модели с простой и прозрачной математической абстракцией: математической интерпретацией объектов модели и механики процесса (метамодели алгоритма).

Ниже предложен математический формализм workflow-сетей: Модель WF2M (From workflow to mathematic), WF2M-сеть, как механизм формализации алгоритмов бизнес-процессов в части потока работ (workflow) путем задания аналитическими выражениями функций переходов между дискретными состояниями, маркировки состояний моделируемого объекта. Механизм (механика интерпретации алгоритма бизнес-процесса) заимствует от сетей Петри терминологию (маркировка сети, активация перехода, реализация перехода и т.п.) и частично концептуализм и классификацию. Предложенная WF2M сеть имеет иной механизм формализации (абстракцию) по сравнению с WF-nets.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments8

Визуализация связей процессов в Linux

Reading time2 min
Views26K


Приходилось ли вам отслеживать зависимости системных процессов, «кто чей папка», найти императора и убить его, чтобы рабы не респаунились? Можно ps'ать и grep'ать, можно lsof погонять, ведь это так увлекательно ;) Но любые связи, как мне кажется, всегда проще анализировать в визуальной форме, консольные утилиты рисуют хорошие таблички, но из них не всегда можно быстро понять, что с чем связано и в какой последовательности, а для диагностики это очень важно.
Читать дальше →
Total votes 53: ↑53 and ↓0+53
Comments22

Презентация как код, или Почему я больше не пользуюсь Powerpoint-ом

Reading time8 min
Views70K

Кажется, мне довелось сделать десятки презентаций для коллег, заказчиков и публичных выступлений за мою карьеру в IT. Многие годы Powerpoint как средство изготовления слайдов оставался для меня естественным и надёжным выбором. Но в этом году ситуация качественно изменилась. С февраля по май мне довелось выступить на пяти конференциях, и слайды к докладам надо было готовить в сжатые сроки, но качественно. Встал вопрос о делегировании той части работы, что касается визуального дизайна слайдов, другим людям. Как-то раз я попытался работать с дизайнером, пересылая файлы .pptx по почте, но работа превратилась в хаос: никто не знал, какая версия слайдов «самая новая», а вёрстка «ехала» по причине различия версий Powerpoint и шрифтов на наших машинах. И я решил попробовать что-то новое. Попробовал, и с тех пор не думаю возвращаться к Powerpoint.

Читать дальше →
Total votes 129: ↑122 and ↓7+115
Comments115

Визуализация модели данных

Reading time1 min
Views3.8K
Для django есть хорошая утилитка, которая анализирует описание модели данных и рисует её графическое представление в dot-формате graphviz.
Сегодня переписал эту утилитку под appengine.

image

Утилита распознаёт Expando (добавляет многоточие в список атрибутов),
наследование от PolyModel (рисует стрелки наследования),
а также ссылочные свойства (в том числе самодельные, типа ManyToManyProperty).

Как пользоваться:
  1. засунуть скрипт в каталог с sdk
  2. запустить её из корневого каталога приложения, указав аргументами список модулей для анализа (в формате имён дя import):
    python path/to/modelviz.py models.foo models.bar > models.dot
  3. сконвертить полученный dot-файл во что-нибудь более удобное, например, в png:
    dot models.dot -Tpng > models.png
  4. наслаждаться неземной красотой
Total votes 44: ↑40 and ↓4+36
Comments8

В помощь создания документации

Reading time1 min
Views2.1K
image Сначала эту заметку я хотел добавить только к себе, т.к. у меня перманентная проблема с документацией в проекте. Но решил поделиться со всеми.
Мой проект большой, включает много подсистем. Требования постоянно меняются, а стиль работы ближе к agile.
Как следствие, документация быстро теряет актуальность и я постоянно ищу методы для поддержания этой самой актуальности.
Читать дальше →
Total votes 23: ↑19 and ↓4+15
Comments7

Яндекс.Мастерская, или Ещё один шанс устроиться в современную IT-компанию

Reading time2 min
Views4.9K
В ноябре 2010 года появилась Яндекс.Мастерская. Этот возможность для студентов принять участие в проектах и задачах, которые в перспективе могут быть внедрены для внутренних или внешних пользователей Яндекса. В Яндексе давно практикуется набор стажёров, но обычно только на роль разработчиков или тестировщиков. В Мастерской же способные ребята могут проявить себя ещё и в области аналитики и управления проектами.
Читать дальше →
Total votes 47: ↑42 and ↓5+37
Comments12

Профилировка производительности и памяти с разных углов обзора

Reading time4 min
Views14K

Выбор инструмента


image

Проблема профилировки рано или поздно встает перед любым проектом, претендующим на роль лучшего в своей области. Какой инструмент выбрать — всегда большой вопрос. Одни инструменты показывают одну часть картины, другие другую. И рано или поздно начинаешь писать свой тул (англ. tool — орудие\инструмент), который отвечает на насущные проблемы именно данного конкретного проекта. Однако время на написание своего «орудия» всегда приходится вычитать из времени отведенного на сам проект.
Поэтому серьезный профайлер написать не получается…

Но как получить все и сразу? (Тут мне почему то вспоминается песня Queen «I want it all»)
Читать дальше →
Total votes 15: ↑11 and ↓4+7
Comments4

Как мы собрали 1500 звезд на Гитхабе, соединив проверенную временем технологию и новый интерфейс

Reading time4 min
Views12K


Недавно мы выпустили инструмент с открытым исходным кодом GraphQL Voyager. Удивительно, но он попал на первую страницу новостей Hacker News и GitHub, и в первые несколько дней получил 1000+ звезд. Сейчас у него уже более 1600 звезд.*


Людям понравился гладкий интерфейс, интерактивные функции и анимация. Мы использовали TypeScript, React, Redux, webpack и даже PostCSS, но это НЕ еще одна статья об этом. Давайте заглянем под капот...

Читать дальше →
Total votes 28: ↑22 and ↓6+16
Comments4

Граф ключевых слов

Reading time2 min
Views1.6K
В начале мая этого года в разговоре с коллегой по работе (в ходе обсуждения одной задачи на практическое применение множеств) вспыл вопрос о построении связей между объектами одного сайта. Этот сайт представлял собой каталог аналогов Windows и Linux программ, и одной из «фишек» этого каталога была выборка ПО по разделам а-ля фасет (визуально фасет, а внутри все на множествах реализовано насколько я понял из обсуждения (реализацию сайта делал другой человек – нужно будет еще и с ним обсудить этот вопрос)). В общем говоря я несколько удивился задаче и… заявил, что она довольно тривиальна, и если при проектировании базы данных связи между таблицами делать как многое-к-многому, то решается все одним запросом. Поговорили и разошлись, но идея сидела в подсознании и долбила «можно же и лучше сделать».
Читать дальше →
Total votes 18: ↑13 and ↓5+8
Comments7

Строим граф ключевых слов

Reading time2 min
Views2.5K
В прошлой заметке я поделился результатами своих экспериментов по построению графа ключевых слов. В ней я совершенно не касался «технических аспектов» построения графов. В комментариях меня попросили пролить свет и на техническую составляющую моих экспериментов. По здравому размышлению я решил вынести их в отдельную заметку, поскольку они могут сгодится для построения любого графа средствами набора утилит graphviz.
Читать дальше →
Total votes 15: ↑13.5 and ↓1.5+12
Comments7

WIKIзуализируй то, WIKIзуализируй это!

Reading time4 min
Views1.6K
Добрый вечер Дорогие друзья!

Недавно, прогуливаясь по просторам бескрайнего интернета, я наткнулся на изумительные работы Криса Харрисона, посидев немного в шоке, я подумал «А сложно ли визуализировать википедию или нет?» и решил попробовать!

image

Итак, приступим!
Читать дальше →
Total votes 54: ↑49 and ↓5+44
Comments36

Визуализация связей внутри класса с помощью GraphViz

Reading time2 min
Views7.2K
Прочитав книжку Р. Мартина «Чистый код», я исполнился решимостью и принялся за рефакторинг своего старого, большого и грязного проекта.

И захотелось мне посмотреть, как в одном из самых простых классов связаны между собой методы и поля. PhpCallGraph, быстро нагугленный, наладить не удалось (какие-то проблемы с xdebug), и к тому же, судя по примерам, он показывает связи во всём проекте, трассируя его, а мне нужно было исследовать один класс.

Я решил написать собственное решение, и вот что получилось.
Красивые картинки и не только
Total votes 41: ↑39 and ↓2+37
Comments19

Non-WYSIWYG диаграммы в вики

Reading time3 min
Views4.6K
Диаграммы постоянно используются в технической документации, чтобы проиллюстрировать какую-либо мысль — многие факты проще изложить графически, чем текстом.



Я хочу поговорить о том, как вставлять диаграммы на страницы вики (под словом вики в этой статье подразумевается исключительно MediaWiki). Стандартный подход — хранить диаграммы в файлах внутри самой вики — имеет свои недостатки; о них — под катом. Я попробовал использовать Graphviz — инструмент, который сам рисует графы по заданным данным. Вот исходник картинки, с которой началась эта статья:

digraph A {
Feedback -> New_Assigned [dir="both"];
New_Assigned [label="New / Assigned"];
New_Assigned -> Rejected [dir="both"];
Reopen -> Rejected;
Reopen -> New_Assigned;
New_Assigned -> Resolved -> Testing -> Approved -> Closed;
Testing -> Closed;

{ rank=same; Feedback; Reopen; }
{ rank=same; Resolved; Testing; Approved; }
}

Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments15

UNIX-way и генератор заданий по архитектуре компьютерных сетей

Reading time4 min
Views2.5K
Прошлой зимой на нашей любимой кафедре произошло одно замечательное событие — курс проектирования компьютерных сетей был переформирован, в результате чего вместо одного семестра практических занятий образовались два семестра занятий лабораторных. С одной стороны, оба изменения — и качественное, и количественное — означали, что студенты получат больше времени на освоение предмета, а также занятия будут индивидуальными, а не групповыми — думать, вполне вероятно, придётся всем, а не «ядру» группы в четыре-пять человек. С другой стороны, это означало, что придётся разрабатывать эти самые индивидуальные задания, да так, чтобы они были все отличались друг от друга.

Именно тогда-то и появилась мысль написать автоматический генератор заданий. Про генератор одного из заданий я и расскажу ниже.

Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments8

Профилирование Python — почему и где тормозит ваш код

Level of difficultyMedium
Reading time10 min
Views17K

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

Почему скрипт работает так медленно? Какая его часть тормозит? Дело в чтении данных, их обработке или сохранении? Как ускорить исполнение? Действительно ли скрипт вообще медленный?

Ответить на все эти вопросы поможет инструмент под названием «профилировщик» (profiler).
Читать дальше →
Total votes 68: ↑67 and ↓1+66
Comments10

Генерация зависимостей внутри программы

Level of difficultyEasy
Reading time7 min
Views3.7K

В программировании программы часто строятся иерархично. Один программный компонент вызывает функции из другого программного компонента. Как бы представить эту взаимосвязь в законченной программе?

Эту задачу можно решить прибегнув к языку Graphviz и утилитам cpp, dot, make, chrome.

Читать далее
Total votes 19: ↑15 and ↓4+11
Comments46

Симулятор Графического Монохромного Дисплея на Graphviz

Level of difficultyEasy
Reading time4 min
Views3.3K

В разработке электроники часто приходится делать отладку при помощи графических дисплеев. Есть и вовсе законченные устройства с точечными экранчиками.

Проблема в том что у языка Си нет встроенной библиотеки для отрисовки битовых матриц в отдельном окне подобно тому как это есть в Python или C#. Поэтому отлаживают такой код обычно на конечных устройствах.

В этом тексте я написал как можно отлаживать графические дисплеи на DeskTop PC без самого физического дисплея.

Читать далее
Total votes 11: ↑9 and ↓2+7
Comments22

Синергия Graphviz и препроцессора C/C++

Reading time4 min
Views5.2K

Это статья посвящена тому, как использовать популярный инструмент рисования графов Graphviz в кооперации с препроцессором C/C++ (далее просто препроцессор).


Ключевым моментом является то, что язык описания графов dot, который использует Graphviz, по своему синтаксису пригоден для обработки препроцессором. Так задумано разработчиками. Благодаря их прозорливости, мы при описании графов можем использовать следующие возможности (цитирую википедию по памяти):


  • замена соответствующих диграфов и триграфов на эквивалентные символы «#» и «\»;
  • удаление экранированных символов перевода строки;
  • замена строчных и блочных комментариев пустыми строками (с удалением окружающих пробелов и символов табуляции);
  • вставка (включение) содержимого произвольного файла (#include);
  • макроподстановки (#define);
  • условная компиляция (#if, #ifdef, #elif, #else, #endif);

Теперь продемонстрируем открывшиеся возможности на практике. В качестве примера возьмем граф из моей статьи о Медиастримере2, он на рисунке ниже.


Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments9

Как сгенерировать L3 network map

Reading time7 min
Views13K

Всем привет.

Многие из вас читали статью «Как создавать понятные логические (L3) схемы сети», после которой возникало непреодолимое желание задокументировать своё сетевое хозяйство. Два-три подхода, потом легко удавалось договориться с собой что изменения будут внесены в конце недели, месяца и т.д. По прошествии некоторого количества времени приходило понимание, что точечными изменениями уже не обойтись — надо так много двигать и компоновать, что проще всё сделать заново.

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments12

LJV: Чему нас может научить визуализация структур данных в Java

Reading time26 min
Views28K

Эта статья является пересказом моего доклада на Java-конференции SnowOne 2021 года. LJV — проект, созданный в 2004 году как инструмент для преподавания языка Java студентам. Он позволяет визуализировать внутреннее устройство структур данных. В этом докладе я запускаю LJV на разных структурах (от String до ConcurrentSkipListMap) в разных версиях Java и разбираю, что там внутри, как оно менялось от версии к версии, и как это всё работает.


image

Читать дальше →
Total votes 85: ↑85 and ↓0+85
Comments11
1