Поделиться

суббота, 20 июня 2009 г.

Детская непосредственность

Коллеги своими речами навели на одно занимательное воспоминание. В 2000-2001 году я разрабатывал довольно крупное приложение - графический конструктор для весьма сложной системы проектирования. Предыдущая его версия для той же системы была крайне неудобна для непрограммистов, а именно они и являлись ее основными потребителями. Мой конструктор должен был полностью избавить пользователей от необходимости вникать в синтаксис и логику языков программирования, которые были необходимы при работе с системой "вручную".

Конструктор на мой взгляд (и, к счастью, не только на мой) удался. На определенном этапе была выпущена рабочая версия, обладающая всем основным функционалом. Занимательно другое: архив с шаблоном (приложение было реализовано в виде шаблона MS Visio) включал файл под названием install.txt (даже не помню сейчас, как получилось, что он не назывался read_me.txt), в котором перечислялись все замечания к текущей на тот момент версии конструктора. Я много говорю об отношениях между разработчиками и пользователями, о преодолении непонимания, а потому решил честно поделиться содержимым этого файла, из которого ясно, что мои взгляды на данную проблему сформировались эволюционно, не сразу, и в 2000 они еще даже не начали формироваться. Тогда 9 лет назад я смотрел на происходящее с точки зрения молодого специалиста, живущего в несколько ином мире, чем мои пользователи. Сейчас Вы в этом убедитесь.

Заранее прошу прощения за ненормативную лексику и ошибки - я этим не горжусь (сейчас), но это - история, из песни слов не выкинешь.

Итак, install.txt:
1. Всем заинтересованным лицам напоминаю, что эта версия конструктора Arcitect является даже не бетой, а прототипом, поэтому за глюки я не, что не отвечаю, а даже их и не замечаю :). Тем не менее, даже эта версия, благодаря моим трехмесячным невъе###ным программистским усилиям показала стабильную работу без сбоев на как минимум 7 моделях, часть из которых насчитывала до 40-50 узлов. Всем спасибо!

2. Для инсталляции необходимо папку Imitational Modeling целиком переписать в поддиректорию Program Files\Microsoft Office\Visio10\1033\Solutions (если, конечно, Visio 2002 устанавливался в папку по умолчанию), иначе ищите, куда вы его запихнули (Визио 2002) и переписывайте папку соответственно в [Путь до папки Visio 2002]\1033\Solutions. После этой бесхитростной мега-инсталляции, запускайте Визио 2002 и в галерее шаблонов выберите Imitational Modeling\Pilgrim5 Arcitect. При загрузке шаблона 2 раза выскочит табличка с вопросами: "Включать ли макрос?" (один раз для самого шаблона, другой для набора фигурок). Следует, естественно, ответить ДА (Включать, On, Enable, Yoohoo, OOOOYes и т. д.) Вот и весь процесс установки.

3. То что я постоянно употребляю не Visio, а Visio 2002 --это не потому что меня клинит, а потому что все версии до 2002 безбожно глючат при программировании (точнее версия 2000 глючит, а все до нее вообще его не поддерживают). Вследствие этого шаблон реализован и работает только под (угадайте что? ...правильно) Visio 2002. Она тоже безбожно глючит, как и все остальные, но ведь версии новее еще нет? Вот то-то и оно. Как минимум в версии 2002 глюки были значительно обновлены, улучшены и запрятаны так глубоко, что натыкаешься на них уже тогда, когда разойдешься (то есть бросить уже нельзя), зато ищешь потом несколько дней в чем же дело... Ладно скажу еще, что поскольку программа работает под (еще раз) Visio 2002, этот (и последний раз) Visio 2002 должен быть предварительно установлен и не на соседней машине, а на вашей собственной. ОК.

4. Как основные преимущества данного конструктора отмечу следующие недостатки:

4.1 При трансляции модели в код на Си не проверяется наличие входов в генераторы (вообще говоря, если они есть -- модель работать не будет). Но только дурак будет рисовать вход в генератор.

4.2 Для узла Create следующий узел, в который идет родитель берется из окошка "Выходы В другие узлы", а следующий узел для порожденных выставляется в окошне настройни начальных параметров. Не очень логично. Но мы и не ищем легких путей.

4.3 Подслои декларируются как упрощающие процесс разработки: можно разбить модель по разным страницам и в основной модели вызывать блоки на разных страницах в нескольких местах. Только вот подслои в текущей версии не поддерживаются.

4.4 В Create нельзя выставить параметр копирования свойств транзактов, поскольку я о нем слишком поздно узнал.

4.5 Узлом с переходом по умолчанию конечно можно выставлять какой-нибудь узел из середины списка, но в этом случае условия перехода для узлов находящихся под ним из-за последовательной однопроходной трансляции работать никогда не будут: конструкция в файле на Си будет иметь вид вроде

if (a>b)
{
   NextTop=1;
}
else
{
   if (1)
   {
      NextTop=2; //Узел по умолчанию
   }
   else
   {
      if (c<d)
      {
         NextTop=3;
      }
   }
}

Понятно, что в этом случае до строки if (c<d) программа никогда не дойдет, если только 1 не станет 0. Так что настоятельно рекомендую делать узлом по умолчанию--последний. Наслаждайтесь.

4.6 Не сообщается о присутствии выхода из Терминатора. Но это тоже только дурень может нарисовать.

4.7 Возможности узла Delet по отбору транзактов не реализованы. кстати на практике они вообще никогда еще не использовались, если я правильно помню.

4.8 Отсутствует возможность менять размеры узлов. Это меня самого бесит. Потерпим вместе.

4.9 Нельзя группировать элементы. Не делайте этого -- трансляция не состоится...

4.10 Не поддерживается сложная работа с переменными, например, использование массивов с автоматическим сдвигом в качестве скажем матожидания в сервере. Но это уже для эстетов... Да о чем мы вообще говорим?

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

4.12 И ВООБЩЕ -- ЭТО ФРИВАРЕ. Не жалуйтесь!

5. Из фирменных глюков мною лично замечен следующий:

5.1 Неправильно транслируется значение true. На его место в файле на Си подставляется prty, отнако эти макросы в Simulate.h определены по-разному:

#define true 1
#define prty 3

Это создает проблемы, например, при проверке ключа на открытость генерируется строка:

if (addr[3]->op==prty)

Истинным выражение в скобках никогда не будет, как можно заметить, так как addr[3]->op может быть равно либо false (0), либо true (1), но уж точно не prty (3). Решение проблемы очевидно: проверяйте ключ не на открытость, а на закрытость или НЕзакрытость при этом будет сгенерировано что-нибудь типа:

if (addr[3]->op==none)
или
if (addr[3]->op!=none)

Как можно заметить, вместо false в этом случае генерируется none, но false и none определены в Simulate.h одинаково:

#define none 0
#define false 0

Вот так то.

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

В этом случае остается либо все переделать заново, либо вызвать процедуры инициализации всех модулей вручную и дописать исчезнувшее. Правда нумерацию это никак не восстановит -- придется вставлять фиктивные узлы до тех пор, пока не дойдете до следующего нужного вам номера. (Это нужно в том случае, если у вас нарисовано скажем 100 узлов и нужно вставить 101 и 102... А нумерация-то после сброса опять с 1 идет). В общем, если вы тки их как-нибудь вставите, обещаю, что
трансляция пройдет успешно. Кстати 102 узла на страницу все равно не влезут!!!

Ну вот и все... Желаю счастья!!! Ikshot AKA SoulHunter
"Улыбайтесь -- это всех раздражает", (С) Василий Стрельников

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

1 комментарий: