Умные люди придумали много разных формальных нотаций для моделирования процессов и систем (например, UML и IDEFx) . Другие умные люди написали гору софта, который призван облегчать работу по созданию этих самых моделей в выбранной нотации.
Казалось бы, выбирай нотацию, подбирай софт поудобнее - и вперед, рисовать схемы по захвату мирового господства. Да вот незадача - софт подобрать не так-то и легко. Он либо настолько простой и одноклеточный, что через 5 минут ты начинаешь упираться в его ограничения на каждом шагу и биться головой об стену, либо такой сложно-наворочено-всесторонний, что через полтора часа после запуска ты обнаруживаешь, что добраться до собственно моделирования процессов не так уж и легко. Сначала надо закончить создание оргструктуры организации (поскольку создавать актеров на ходу нельзя, а можно только выбирать уже описаных), заполнить базу глоссария (поскольку программа не допускает использования незнакомых аббревиатур), сложить в правильные места еще 65535 безумно ценных кусочков метаданных, и, опять-таки, постараться не убиться головой об стену.
Возьмем, к примеру, рисование sequence diagram. Если не злоупотреблять строгим следованием канонам UML - то замечательная нотация для описания бизнес- и технических процессов, позволяющая легко показывать временные зависимости и последовательности действий. Я люблю рисовать sequence diagram-ы на бумаги, но в скором времени мне предстоит нарисовать несколько десятков диаграмм в электронном виде.
"Ага!", - подумал я, - "самое время разжиться инструментом".
Несколько дней расслабленных поисков показали, что счастья нет. Либо приходится руками расставлять все элементы диаграммы (привет, Visio!), содрогаясь от одной только мысли о том, что "вот сюда надо будет вставить еще одно сообщение, сюда - объектик, а все остальное подвинуть вниз и вправо", либо же софт будет делать "все красиво", но при условии, что вы продадите душу и тело той методологии моделирования, которая реализована в софте, и будете использовать ее на всю катушку. То есть, например, вы должны будете строго следовать UML, а софт будет за этим следить. И на диаграмме у вас могут быть только объекты (вот в это диалоговое окошко впишите имя класса, тип наследования, предков, партийность и национальность), а посылаемые ими сообщения должны быть явно описаны в виде методов этих объектов (пожалуйста, вот сюда - сигнатурку метода, а сюда пишите код), т.д. и т.п.
Есть, конечно, редкие исключения, но они и стоят соответственно, и, опять-таки, не без изъяна.
И тут я решил вернуться к старой-старой идее сделать себе свойлунный модуль, с блэк-джеком и ш инструмент. И сделал. Теперь буду хвалиться :)
Что умеет инструмент? Инструмент умеет генерировать диаграмму из текстового описания. Слева - пример описания, справа - результат. Как видно, сущности/актеры были автоматически упорядочены так, чтобы уменьшить длину стрелочек и повысить читаемость.

Синтаксис, думаю, в формальном описании не нуждается - все должно быть понятно и так :)
На самом деле, генерацией картинки занимается сторонняя программа - "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, уж не обессудьте :)
Казалось бы, выбирай нотацию, подбирай софт поудобнее - и вперед, рисовать схемы по захвату мирового господства. Да вот незадача - софт подобрать не так-то и легко. Он либо настолько простой и одноклеточный, что через 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)(no subject)
Date: 2007-10-11 09:58 pm (UTC)(no subject)
Date: 2007-10-11 10:17 pm (UTC)(no subject)
From:(no subject)
Date: 2007-10-14 05:39 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
Date: 2007-10-11 10:17 pm (UTC)(no subject)
Date: 2007-10-11 10:21 pm (UTC)(no subject)
Date: 2007-10-12 01:13 pm (UTC)(no subject)
Date: 2007-10-11 10:30 pm (UTC)А если возможностей не хватает, то http://sdedit.sourceforge.net/index.html Quick Sequence Diagram Editor. Там уже и группировки, и мультитрединг и т.п.
(no subject)
Date: 2007-10-12 01:12 pm (UTC)А sdedit - уж больно "низкоуровневый". Мне все больше актеры и системы нужны, а не объекты, сообщения и треды. Лично мне тяжело писать "клиент:банк.оплатитьСчет" (кстати, как сюда тиснуть пробел?).
(no subject)
From:(no subject)
From:еще вариант
Date: 2007-10-11 11:11 pm (UTC)Re: еще вариант
Date: 2007-10-12 01:05 pm (UTC)(no subject)
Date: 2007-10-12 02:56 am (UTC)(no subject)
Date: 2007-10-12 01:04 pm (UTC)1)необходимость объявлять вручную все объекты и париться деталями презентации (вон, в примере на той же странице - нафига нужен step()?)
2)Плохо с поддержкой русского
3)В синтаксис явно вытащены понятия объекта и сообщения, что мешает сосредоточиться на описании, если у тебя не объекты, а, например, актеры и системы.
(no subject)
Date: 2007-10-12 03:49 am (UTC)Из последних травм вспоминается:
1) Необходимость откатиться на предыдущую относительно Debian Unstable версию Graphviz из-за желания последней версии использовать только встроенный шрифт Times (без кириллицы).
2) Необходимость использования цепочки dot > файл svg > Inkscape > файл PostScript для получения файла PostScript с правильными шрифтами и кириллицей.
(no subject)
Date: 2007-10-12 12:58 pm (UTC)2)А вот это не проверял, по причине, указаной выше :)
(no subject)
From:(no subject)
Date: 2007-10-12 04:15 am (UTC)(no subject)
Date: 2007-10-12 05:43 am (UTC)по-моему, если поменять местами a и d, или выстроить в порядке a c b d, то суммарная длина стрелочек уменьшится на две "единицы"
(no subject)
Date: 2007-10-12 10:04 am (UTC)(no subject)
From: (Anonymous) - Date: 2007-10-13 08:33 am (UTC) - Expand(no subject)
From:(no subject)
Date: 2007-10-12 06:48 am (UTC)а для БД там вообще немерянные возможности, к тому же он знает разные варианты БД, например Оракл, и пользователю дает только те возможности, которые поддерживаются выбранной версией - например, сегментирование и т.п.
(no subject)
Date: 2007-10-12 08:54 am (UTC)(no subject)
Date: 2007-10-12 12:50 pm (UTC):)
(no subject)
Date: 2007-10-12 09:51 am (UTC)да, поддерживаю идею про hackage.
(no subject)
Date: 2007-10-12 12:52 pm (UTC)На hackage - положил, вон выше в комментах ссылка.
(no subject)
Date: 2007-10-12 02:59 pm (UTC)(no subject)
Date: 2007-10-12 03:02 pm (UTC)Я даже уверен, что есть стандарт XML на описание Ваще Всего. Потом берешь нужный XLS - и вуаля! Готовый результат ...
(no subject)
From:(no subject)
From:(no subject)
Date: 2007-10-13 02:44 pm (UTC)Посмотрел твой код, а там всё в императивном стиле написано, хотя,
по-моему, задача 100% функциональная.
Почему был выбран такой подход? Или пойти лучше сначала доучиться?
(no subject)
Date: 2007-10-13 06:32 pm (UTC)PS
Если речь идет о том, что состояние можно было явно передавать аргументами во все нужные функции, там его изменять и передавать аругментом дальше и т.д и т.п., то монады (и в частности - State) как раз и предназначены для того, чтобы инкапсулировать подобные эффекты и не загромождать код и не усложнять его поддержку и изменение.
Вот хороший пост на эту тему:
http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html
императивный vs функциональный
From:Re: императивный vs функциональный
From:Re: императивный vs функциональный
From:(no subject)
Date: 2007-10-13 05:33 pm (UTC)(no subject)
Date: 2007-10-13 06:10 pm (UTC)PS
Собрать бинарничек под linux? :)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
Date: 2007-10-22 11:09 am (UTC)вот если бы тулзы для сбора информации умели бы как-то редуцировать диаграмму, находить только ключевые вызовы...
(no subject)
Date: 2007-10-24 09:12 pm (UTC)о как :)
Date: 2008-02-13 07:46 am (UTC)А вообще надо будет в альт запаковать, только с текущим местным 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)Re: о как :)
From:Re: о как :)
From:задумчиво так
From:Re: задумчиво так
From:фичреквест
From:Re: фичреквест
From:Re: фичреквест
From:Русский язык
Date: 2008-03-20 06:10 pm (UTC)Фраза как-то режет слух (глаз), вам не кажется?
По-моемому нет такого слова "бизнесовых", должно быть "бизнес процессов".
Или это уже "новый русского языка"?
Re: Русский язык
Date: 2008-03-27 11:29 pm (UTC)(no subject)
Date: 2008-05-01 10:22 am (UTC)AmaterasUML , ZGRViewer
Date: 2008-06-17 12:47 pm (UTC)(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 возможно тоже вариант.
Игорь К.