dastapov: (Default)
[personal profile] dastapov
Умные люди придумали много разных формальных нотаций для моделирования процессов и систем (например, UML и IDEFx) . Другие умные люди написали гору софта, который призван облегчать работу по созданию этих самых моделей в выбранной нотации.

Казалось бы, выбирай нотацию, подбирай софт поудобнее - и вперед, рисовать схемы по захвату мирового господства. Да вот незадача - софт подобрать не так-то и легко. Он либо настолько простой и одноклеточный, что через 5 минут ты начинаешь упираться в его ограничения на каждом шагу и биться головой об стену, либо такой сложно-наворочено-всесторонний, что через полтора часа после запуска ты обнаруживаешь, что добраться до собственно моделирования процессов не так уж и легко. Сначала надо закончить создание оргструктуры организации (поскольку создавать актеров на ходу нельзя, а можно только выбирать уже описаных), заполнить базу глоссария (поскольку программа не допускает использования незнакомых аббревиатур), сложить в правильные места еще 65535 безумно ценных кусочков метаданных, и, опять-таки, постараться не убиться головой об стену.

Возьмем, к примеру, рисование sequence diagram. Если не злоупотреблять строгим следованием канонам UML - то замечательная нотация для описания бизнес- и технических процессов, позволяющая легко показывать временные зависимости и последовательности действий. Я люблю рисовать sequence diagram-ы на бумаги, но в скором времени мне предстоит нарисовать несколько десятков диаграмм в электронном виде.

"Ага!", - подумал я, - "самое время разжиться инструментом".

Несколько дней расслабленных поисков показали, что счастья нет. Либо приходится руками расставлять все элементы диаграммы (привет, Visio!), содрогаясь от одной только мысли о том, что "вот сюда надо будет вставить еще одно сообщение, сюда - объектик, а все остальное подвинуть вниз и вправо", либо же софт будет делать "все красиво", но при условии, что вы продадите душу и тело той методологии моделирования, которая реализована в софте, и будете использовать ее на всю катушку. То есть, например, вы должны будете строго следовать UML, а софт будет за этим следить. И на диаграмме у вас могут быть только объекты (вот в это диалоговое окошко впишите имя класса, тип наследования, предков, партийность и национальность), а посылаемые ими сообщения должны быть явно описаны в виде методов этих объектов (пожалуйста, вот сюда - сигнатурку метода, а сюда пишите код), т.д. и т.п.

Есть, конечно, редкие исключения, но они и стоят соответственно, и, опять-таки, не без изъяна.

И тут я решил вернуться к старой-старой идее сделать себе свой лунный модуль, с блэк-джеком и ш инструмент. И сделал. Теперь буду хвалиться :)

Что умеет инструмент? Инструмент умеет генерировать диаграмму из текстового описания. Слева - пример описания, справа - результат. Как видно, сущности/актеры были автоматически упорядочены так, чтобы уменьшить длину стрелочек и повысить читаемость.

a -> b: catch a ball!
b -> c: i'll pass it along
c: what to do next?
c -> a: lets throw it back again
a: not fair!
a -> c: find someone else!
c -> d: ok, here you go
d: zZzZzZzZzzz.....


Синтаксис, думаю, в формальном описании не нуждается - все должно быть понятно и так :)

На самом деле, генерацией картинки занимается сторонняя программа - "dot" из пакета утилит для рисования графов GraphViz, а моя утилита (названная "flow2dot") просто готовит для нее текстовое описание того, что надо нарисовать.

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

Во-вторых, можно пользоваться препроцессором (m4 или стандартным cpp) и выносить общие части диаграм во включаемые файлы.

В-третьих, можно использовать grep для поиска нужных диаграм и sed/perl для их массового редактирования (вы никогда не пробовали исправить опечатку в одну букву в десятке диаграмм, нарисованных в Visio?).

Короче говоря, мне нравится :)

Если вам тоже нравится - берите, пользуйтесь. Код лежит по адресу http://adept.linux.kiev.ua/repos/flow2dot/ , при наличии клиента darcs его можно вытянуть оттуда командой "darcs get http://adept.linux.kiev.ua/repos/flow2dot/".

Код на Haskell, уж не обессудьте :)

(no subject)

Date: 2007-10-11 09:40 pm (UTC)
From: [identity profile] adews.livejournal.com
Ничего не могу с собой поделать, нравятся мне тихие сумашедшие, думающие на языках типа хаскела, луа, или даже эрланга. На блаженных мир держится, чтобы всяким плюсанутым сишникам пусто не было. Если слишком заумно,- это я так длинно выразил своё "уважаю" ;-)

(no subject)

Date: 2007-10-11 09:58 pm (UTC)
From: [identity profile] angry-elf.livejournal.com
плюсадин

(no subject)

From: [identity profile] fenikso.livejournal.com - Date: 2007-10-11 10:19 pm (UTC) - Expand

(no subject)

Date: 2007-10-14 05:39 pm (UTC)
From: [identity profile] mr-aleph.livejournal.com
Lua в этом списке лишнее, мне кажется =)

(no subject)

From: [identity profile] adews.livejournal.com - Date: 2007-10-15 05:05 am (UTC) - Expand

(no subject)

From: [identity profile] mr-aleph.livejournal.com - Date: 2007-10-15 06:59 am (UTC) - Expand

(no subject)

From: [identity profile] adews.livejournal.com - Date: 2007-10-15 07:32 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-15 07:37 am (UTC) - Expand

(no subject)

From: [identity profile] adews.livejournal.com - Date: 2007-10-15 07:43 am (UTC) - Expand

(no subject)

From: [identity profile] mr-aleph.livejournal.com - Date: 2007-10-15 07:53 am (UTC) - Expand

(no subject)

From: [identity profile] adews.livejournal.com - Date: 2007-10-15 08:03 am (UTC) - Expand

(no subject)

From: [identity profile] earwin.livejournal.com - Date: 2008-02-06 09:58 pm (UTC) - Expand

(no subject)

From: [identity profile] stanislav.shramko.myopenid.com - Date: 2008-11-20 02:53 am (UTC) - Expand

(no subject)

From: [identity profile] earwin.livejournal.com - Date: 2008-11-20 04:36 am (UTC) - Expand

(no subject)

Date: 2007-10-11 10:17 pm (UTC)
From: [identity profile] fester-ua.livejournal.com
Зашибись штука.

(no subject)

Date: 2007-10-11 10:21 pm (UTC)
From: [identity profile] fenikso.livejournal.com
Прикольно :) Из юзабилити, я бы предложил ещё paging добавить, если нету - чтобы можно было делать нарезать частями 1-10, 11-20, etc.

(no subject)

Date: 2007-10-12 01:13 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
И то, и другое можно получить при помощи dot на этапе генерации картинки. Примера не приведу, но в доке по dot их есть достаточное кол-во.

(no subject)

Date: 2007-10-11 10:30 pm (UTC)
From: [identity profile] bacek.livejournal.com
Есть такая штука http://www.mcternan.me.uk/mscgen/. И у неё есть огромный плюс - интеграция с doxygen. Ну и он такой же простой, как 7 копеек.

А если возможностей не хватает, то http://sdedit.sourceforge.net/index.html Quick Sequence Diagram Editor. Там уже и группировки, и мультитрединг и т.п.

(no subject)

Date: 2007-10-12 01:12 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Угу, я на mscgen посматривал. Мне не понравилось: 1)малое кол-во ручек для настройки вывода; 2)не поддерживает русский ваааще.

А sdedit - уж больно "низкоуровневый". Мне все больше актеры и системы нужны, а не объекты, сообщения и треды. Лично мне тяжело писать "клиент:банк.оплатитьСчет" (кстати, как сюда тиснуть пробел?).


(no subject)

From: [identity profile] bacek.livejournal.com - Date: 2007-10-12 10:46 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-13 06:08 pm (UTC) - Expand

еще вариант

Date: 2007-10-11 11:11 pm (UTC)
From: [identity profile] nadezhniy.livejournal.com
http://www.spinellis.gr/sw/umlgraph/

Re: еще вариант

Date: 2007-10-12 01:05 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Вон, в следующем комментарии мои впечатления.

(no subject)

Date: 2007-10-12 02:56 am (UTC)
From: [identity profile] kmmbvnr.livejournal.com
http://www.spinellis.gr/sw/umlgraph/doc/indexw.html - крути ниже, где-то с с середины страницы описывается рисование sequence diagram с помощью gnu plotutils.

(no subject)

Date: 2007-10-12 01:04 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Мне не понравилось:
1)необходимость объявлять вручную все объекты и париться деталями презентации (вон, в примере на той же странице - нафига нужен step()?)
2)Плохо с поддержкой русского
3)В синтаксис явно вытащены понятия объекта и сообщения, что мешает сосредоточиться на описании, если у тебя не объекты, а, например, актеры и системы.

(no subject)

Date: 2007-10-12 03:49 am (UTC)
From: [identity profile] helge9210.livejournal.com
Ну и как всегда не забываем, что у пакета Graphviz периодически встречаются родовые травмы в области использования шрифтов для кириллического текста.

Из последних травм вспоминается:
1) Необходимость откатиться на предыдущую относительно Debian Unstable версию Graphviz из-за желания последней версии использовать только встроенный шрифт Times (без кириллицы).
2) Необходимость использования цепочки dot > файл svg > Inkscape > файл PostScript для получения файла PostScript с правильными шрифтами и кириллицей.

(no subject)

Date: 2007-10-12 12:58 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
1)У меня наираспоследний graphviz из unstable (2.12-4+b1), все замечательно - использует любые шрифты, какие скажешь (генерю PNG)

2)А вот это не проверял, по причине, указаной выше :)

(no subject)

From: [identity profile] helge9210.livejournal.com - Date: 2007-10-13 06:55 am (UTC) - Expand

(no subject)

Date: 2007-10-12 04:15 am (UTC)
From: [identity profile] sdfgh153.livejournal.com
Чудесная штука! Спасибо.

(no subject)

Date: 2007-10-12 05:43 am (UTC)
From: [identity profile] http://users.livejournal.com/_1313/
Как видно, сущности/актеры были автоматически упорядочены так, чтобы уменьшить длину стрелочек и повысить читаемость.

по-моему, если поменять местами a и d, или выстроить в порядке a c b d, то суммарная длина стрелочек уменьшится на две "единицы"

(no subject)

Date: 2007-10-12 10:04 am (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Ну, там не полный перебор, а эвристика, и как и любая эвристика, она не всегда находит самое оптимальное решение. Так, good enough. Все лучше, чем самому руками расставлять. Особенно, если шагов в процессе - штук 40, а актеров больше десятка.

(no subject)

From: (Anonymous) - Date: 2007-10-13 08:33 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-13 06:23 pm (UTC) - Expand

(no subject)

Date: 2007-10-12 06:48 am (UTC)
From: [identity profile] alexott.livejournal.com
кстати, если прижмет и надо будет пользоваться чем-то интерактивным - советую поиграться с sybase powerdesigner - я в свое время им активно пользовался почти 2 года для моделирования БД, проектирования софта и т.п. - у него богатые средства генерации выходных данных по диаграммам, так что можно писать свое, если понадобится.
а для БД там вообще немерянные возможности, к тому же он знает разные варианты БД, например Оракл, и пользователю дает только те возможности, которые поддерживаются выбранной версией - например, сегментирование и т.п.

(no subject)

Date: 2007-10-12 08:54 am (UTC)
From: [identity profile] dolyenyov.livejournal.com
Надо на hackage выложить...

(no subject)

Date: 2007-10-12 12:50 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/flow2dot-0.2

:)

(no subject)

Date: 2007-10-12 09:51 am (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
есть, кстати, ещё вариант: воспользоваться Functional MetaPost'ом, если тебе сами графы не особо нужны. Правда он корявый немного (устарел) и его надо чуть проапдейтить.

да, поддерживаю идею про hackage.

(no subject)

Date: 2007-10-12 12:52 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Мне нужны не столько графы, сколько алгоритмы автоматического layout-а + все остальные возможности по кастомизации результата, которые предлагает dot.

На hackage - положил, вон выше в комментах ссылка.

(no subject)

Date: 2007-10-12 02:59 pm (UTC)
From: [identity profile] dewfy.livejournal.com
А ведь где-то есть стандарт на XML описание Sequence диаграм. И к этому можно было бы применить XSL и получить, напр. SVG

(no subject)

Date: 2007-10-12 03:02 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Осталось только найти этот XSL ...


Я даже уверен, что есть стандарт XML на описание Ваще Всего. Потом берешь нужный XLS - и вуаля! Готовый результат ...

(no subject)

From: [identity profile] dewfy.livejournal.com - Date: 2007-10-12 03:10 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-13 07:28 pm (UTC) - Expand

(no subject)

Date: 2007-10-13 02:44 pm (UTC)
From: [identity profile] http://users.livejournal.com/_san/
Я совсем недавно начал изучать Хаскель (до монады State я еще не дошел).
Посмотрел твой код, а там всё в императивном стиле написано, хотя,
по-моему, задача 100% функциональная.
Почему был выбран такой подход? Или пойти лучше сначала доучиться?

(no subject)

Date: 2007-10-13 06:32 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
А как бы ты сам определил разницу между императивным и функциональным стилями?

PS
Если речь идет о том, что состояние можно было явно передавать аргументами во все нужные функции, там его изменять и передавать аругментом дальше и т.д и т.п., то монады (и в частности - State) как раз и предназначены для того, чтобы инкапсулировать подобные эффекты и не загромождать код и не усложнять его поддержку и изменение.

Вот хороший пост на эту тему:
http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html

(no subject)

Date: 2007-10-13 05:33 pm (UTC)
From: [identity profile] semenyaka.livejournal.com
Всё было хорошо. До последнего предложения :)

(no subject)

Date: 2007-10-13 06:10 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
А что так? :)

PS
Собрать бинарничек под linux? :)

(no subject)

From: [identity profile] semenyaka.livejournal.com - Date: 2007-10-13 06:26 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-13 06:42 pm (UTC) - Expand

(no subject)

From: [identity profile] semenyaka.livejournal.com - Date: 2007-10-13 07:54 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-15 10:48 am (UTC) - Expand

(no subject)

From: [identity profile] besunny.livejournal.com - Date: 2007-10-18 08:52 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2007-10-24 09:13 pm (UTC) - Expand

(no subject)

Date: 2007-10-22 11:09 am (UTC)
From: [identity profile] enox.livejournal.com
из клана микрософтовцев - я как-то пробовал генерить sequence diagram при помощи Rational XDE, на базе прогона юнит-теста - в принципе, получилось, но толку нет - диаграмма слишком детальная, а уменьшать ее - ручная работа

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

(no subject)

Date: 2007-10-24 09:12 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
EventHelix такое умеет, но не автоматически. Там можно, во-первых, задавать иерархию среди lifelines и скрывать какие-то ее уровни, и, во-вторых, автоматически генерировать collaboration diagrams по sequence. Опять-таки, используя эти уровни.

о как :)

Date: 2008-02-13 07:46 am (UTC)
ext_642892: (Default)
From: [identity profile] gvy.livejournal.com
Дим, на образовательной конференции в Переславле приезжали Непейводы :) и Непейвода-младшая делала доклад на тему "Автоматизированное построение сетевого графика проекта" (два ФП -- не помню точно, чем данные разбирали, а чем обрабатывали -- и C(++?) с OpenGL на выходе). Также сетовала, что не хватает прикладных задач на подсовывать студентам, чтоб наглядно видели, где функциональные языки хороши. Тезисов настрелять? (пока не вижу опубликованных, только бумажные с собой)

А вообще надо будет в альт запаковать, только с текущим местным ghc-6.4.2:
./Dot.hs:47:0:
    Illegal instance declaration for `UsesDotEnv (State DotEnv)'
        (The instance type must be of form (T a b c)
         where T is not a synonym, and a,b,c are distinct type variables)
    In the instance declaration for `UsesDotEnv (State DotEnv)'

6.x.2

Date: 2008-02-13 07:49 am (UTC)
ext_642892: (Default)
From: [identity profile] gvy.livejournal.com
А, ёлки-палки. Это в stable пакет осени 2006. В unstable -- 6.8.2. Пойду сбэкпорчу, что ли. :)

Re: о как :)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2008-02-13 01:44 pm (UTC) - Expand

Re: о как :)

From: [identity profile] gvy.livejournal.com - Date: 2008-02-13 11:46 pm (UTC) - Expand

задумчиво так

From: [identity profile] gvy.livejournal.com - Date: 2008-02-14 05:54 pm (UTC) - Expand

фичреквест

From: [identity profile] gvy.livejournal.com - Date: 2008-02-14 06:36 pm (UTC) - Expand

Re: фичреквест

From: [identity profile] gvy.livejournal.com - Date: 2008-02-16 09:11 pm (UTC) - Expand

Русский язык

Date: 2008-03-20 06:10 pm (UTC)
From: (Anonymous)
"описания бизнесовых и технических процессов"

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

Re: Русский язык

Date: 2008-03-27 11:29 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Да, безусловно. Это пережитки активного использования местного рабочего сленга.

(no subject)

Date: 2008-05-01 10:22 am (UTC)
From: [identity profile] dimrub.livejournal.com
Спасибо, попробую в следующий раз, как придется рисовать!

AmaterasUML , ZGRViewer

Date: 2008-06-17 12:47 pm (UTC)
From: (Anonymous)
Попробовал AmaterasUML (Eclipse plugin) - показался удобным для автоматической генерации sequence diagrams по трассе (какую длину трассы он может отрисовывать - не проверял, на одной из диаграмм, это часть трассы, у меня около 40 классов). Впрочем большую трассу сложно читать - нужно разбивать на части.
(http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=AmaterasUML)

Для просмотра больших диаграмм сгенерированных с участием graphviz можно попробовать:
http://zvtm.sourceforge.net/zgrviewer.html
( см. http://www.graphviz.org/Resources.php ссылки )
Хороший SVG/PDF viewer возможно тоже вариант.

Игорь К.

Profile

dastapov: (Default)
Dmitry Astapov

May 2022

M T W T F S S
       1
2345678
9101112131415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags