DarkDemon | Дата: Пятница, 01.07.2016, 02:44 | Сообщение # 1 |
Полковник
Группа: Друзья
Сообщений: 196
Статус: Offline
| Хочу рассказать про свой опыт использования Window9. Пару месяцев тому назад попался один заказ(технические детали опущу, т.к. был договор), расскажу коротко суть: задача состояла в том, что нужно было получить доступ к сторонней консоли и прописать в определённое время в неё команду как в обычный CMD. Недолго подумав, что задачка плёвая, взялся.
Сначала речи о Window9 не шло, планомерно шло исследование целевого вопроса, писались тестовые образцы и передавались заказчику. После первых двух дней я понял: "будет непросто", программа отказывалась принимать символы. Сказать честно я не знаю работает ли даже сейчас эта программа нормально, дело в том, что один и тот же метод мог сработать и при следующем тесте - уже нет. Ситуацию осложняло дистанционное тестирование, программу заказчика нельзя было передавать третьим лицам, поэтому он лично тестировал мои потуги на ней.
За неделю было перепробовано 9 различных методов. После первых тестов понял, что нужно быстро написать эмуляцию его программы, т.е. что-то отличающееся от CMD методом ввода, т.к. то, что успешно заталкивалось в CMD его программа принимать отказывалась наотрез. Быренько в консольном режиме накатал эмуляцию через INKEY$ и в дальнейшем прогонял все образцы через 2 программы (свою и CMD). После затяжного ресерча, дела пошли в гору, 7 первых методов дали результат и нужно было уже писать GUI обёртку к программе в которую входил планировщик задач и редактор вводимого текста команд. Но в этот момент заказчик дал инфу о том, что "не пашет". На самом деле я постоянно искал новые методы т.к. знал, что тут случай очень сложный + не хотелось в итоге обосраться, да и был здравый интерес заставить это чудо работать, т.к. сам я специалист по автоматизации и хотел повысить свои навыки. Короче на скорую руку были найдены последние два метода, был написан дичайший быдлокодерский костыль в лучших традициях быдлокодинга. В то же самое время(параллельно) начата разработка GUI программы в виде консольного приложения. И когда мы начали тестить последние два метода, стало ясно - консоль отваливается вместе с программой. Нужно решение на окнах. И тут я вспомнил, что есть библиотека Стаса.
До этого использовал её только в мелких проектах, но таки представился шанс обкатать её и в достаточно массивном проекте. Т.к. времени было мало, а результат был нужен здесь и сейчас. Начал фигарить всё вручную. После первой формы понял, без виз. дизайнера будет жопа, поэтому вспомнив о том, что Стас пилил библиотеку как аналог функций из PureBasic, разыскал редактор PureFORM, с помощью которого всё и собиралось в итоге. К сожалению габариты некоторых контролов приходилось подправлять, но в целом всё соответствовало и было не критично.
Т.к. всё распределение шло вручную, то для контролов был заведён такой вот листик:
Да это было не совсем удобно, но т.к. всё делалось на скорую руку, такой вариант мне подошёл.
Но самое интересное ждало впереди, пришлось исшерстить справку по Window9 вдоль и поперёк, было очень много недокументированных косяков, порождающих костыли, например система сообщений Window9 построена достаточно странным образом в разных контролах иногда может прийти 1 событие, а иногда с десяток и соответственно наоборот, при необходимости события оно могло улавливаться другим контролом и не проходить в очередь сообщений библиотеки вообще. Когда формы были готовы, нужно было писать механизмы, сначала взялся за планировщик, задачка оказалась интересной, сначала долго думал какую систему отсчёта взять, нужна была унификация, т.к. люблю всё раализовывать самостоятельно - начал фигарить, ваял ваял и понял, что моя методика мягко говоря не очень, т.к. постоянно приходилось конвертировать время и проверять его. Посмотрел что может предоставить сам FB и изумился, время в формате SERIAL идеально подошло, работать с ним было легко и удобно, мозг перестроился быстро, для проверки режимов работы планировщика была написана тестовая утилита с визуальным отображением границ времени и эмуляцией хода времени, а также индивидуальные параметры задач.
На этот таск ушло прилично времени, но в итоге это было очень легко. Готовый чистый отрефакторенный кусок кода просто ушёл в основную программу. Внедрение в программу проходило достаточно трудоёмко, в первые два дня было написано ~2000 строк кода, в пике это значение доходило до 3.5к строк, но после финальной чистки кода от неиспользуемых кусков прога "похудела" до 2800. При таком кол-ве кода внимание очень рассеянно, мозг старается сохранить общую картину и концентрацию на текущей проблеме. Благо с этим сильных проблем не возникло, на этапе тестирования было найдено 12 недоработок, которые за 2 дня были сведены к одной. Достаточно сложным этапом было впилить в программу дополнительные диалоги и заставить их работать нормально, часть проблем решилась средствами встроенными в библиотеку, часть проблем пришлось долго копать в MSDN и на форумах. Например была проблема с тем, что на текстовый контрол(да и вообще в очередь) не поступало сообщение о движении колёсика, когда курсор был выставлен в поле ввода текста, пришлось подгонять DirectInput, который Стас расшерстил для FB пользователей. Так вот насколько это трудоёмко на словах объяснить достаточно сложно, но по итогу всё заработало очень даже хорошо: список приложений сканировался, программа привязывалась к целевой задаче автоматически, загружала все настройки из конфиг файла, а также сохраняла их при необходимости. Можно было добавлять задачи, удалять, изменять, был добавлен менеджер быстрой забивки команд для последующего вывода их в целевую консоль. Все механизмы работали, учитывая многопоточность(да да всё через защёлки Mutex-ы), была написана техническая документация и EULA, а также сделан значёк программы и компиляция проекта для его интеграции в программу.
Помню на второй день сборки программы(сборка программы - 3 дня) кодил 23 часа подряд(где-то после 16ти часов сознание стало ватным, часа 4-5 оно дико тупило, но слегка раздуплилось и в итоге очень медленно, но решало ключевые задачи), кстати очень советую всем кодерам попробовать такой экстремальный режим и проверить себя на прочность.
Что можно сказать в заключение. Первопроходцам небольших коммерческих решений рекомендовал бы использовать FB и Window9. Эта замечательная библиотека позволяет писать программы практически неограниченной сложности, особенно если вы хорошо освоитесь в её функциях и пройдёте кучу подводных камней. Имея готовые наброски писать становится легче. Поэтому хочется пожелать вам терпения и действительно хорошего кода. Используйте FB, используйте Window9, всем удачи!
|
|
| |
haav | Дата: Пятница, 01.07.2016, 06:28 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1370
Статус: Offline
| Я рад, что библиотека оказалась полезной, тем более помогла решить вопрос с коммерческой составляющей. Удачи!
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
DarkDemon | Дата: Пятница, 01.07.2016, 15:00 | Сообщение # 3 |
Полковник
Группа: Друзья
Сообщений: 196
Статус: Offline
| Цитата haav ( ) тем более помогла решить вопрос с коммерческой составляющей. Именно это и хотел отразить в данной мини статье, библиотека справилась на 5 баллов, т.к. в финальной версии проекта всё работает великолепно. Поэтому её можно(и нужно) применять для коммерческих решений.
|
|
| |