- PVSM.RU - https://www.pvsm.ru -
Тут недавно был такой пост Правила разработки сложных систем. История одного проекта [1], где автор описывает как он удачно «копался» в одном проекте, а потом все выкинул и переписал с нуля.
Я попробую рассказать обратную историю. Тут около месяца назад я не удачно попытался представить демо версию одной своей разработки (см. Часть №7. RNAInSpace — программное обеспечение для полуавтоматического конструирования РНК в пространстве [2]).
Оказалось, что у скачивающих не работает один модуль, ответственный за показ графики. В двух словах проект RNAInSpace — это программное обеспечение для полуавтоматического конструирования РНК в пространстве. Обеспечивает 3D визуализацию структуры РНК, позволяет её изменять и с помощью связи с модулем RNAWorld позволяет автоматизировать некоторые этапы сворачивания РНК.
Чтобы войти в тему — я тут написал некоторое множество статей:
От белков к РНК [3], Мат. критерии [4], Как уменьшить число поворотов цепи? [5], Как оценить ход сворачивания односпиральной РНК? [6], Ограничение оптимизирующих методов в играх с противником и без [7], Одна фундаментальная проблема [8], Введение в сворачивание многоспиральных РНК [9]
Но эту статью можно обсуждать и не зная предметной области, кстати заодно проверим можно ли судить о качестве ПО не зная семантики предметной области (я утверждаю, что можно).
Так вот эта 3D визуализация (модуль RNAInSpaceDisplay) и не работала на некоторых компьютерах. Для реализации графики я использовал существующий проект VMD 1.8.7 [10].
Ниже история о том как я адаптировал VMD 1.8.7 под свои нужды.
Вначале давайте проверим работает ли у вас этот проект, скачать его можно тут [11]. Комментарии как его использовать описаны в статье Часть №7. RNAInSpace — программное обеспечение для полуавтоматического конструирования РНК в пространстве [2]. Единственно, добавилась директория RNAInSpaceDisplay, где находится .exe. Если графика у вас не запустилась, то запустите этот .exe — мне важно знать или дело в связи C# с С++, или дело в графике. Только предупреждаю RNAInSpaceDisplay.exe не имеет выхода (снимаем задачу через диспетчер задач).
Для интересующихся темой — давайте тут же и подискутируем о развитии этого ПО и проекта в целом.
А ниже я расскажу немного только о модуле графики.
Изначально VMD 1.8.7 написан на С++ и содержит порядка 85000 строк чистого кода (без пустых строк, комментариев и прочего). После моей адаптации код содержит 25000 строк (порядка 100 файлов) — в общем тоже не мало.
Адаптировал я во многом машинально — выкидывал весь пользовательский интерфейс от VMD (который достаточно убогий), кроме окна графики, убирал ветки для операционок кроме Windows (другие поддерживать не собираюсь), ну и все что тянуло. Надо сказать код там ужасный, с бородой, написан в общем в ООП, но все сильно переплетено, и завязано на пользовательский интерфейс от VMD.
В общем качество кода VMD, а писали его в University of Illinois, плохое. Но у него один жирный плюс — работает и компилится под Windows без особых проблем.
Конечно надо было при адаптации привести в «божеский вид» — засунуть в проект Microsoft Visual C++ 2010, написать класс-оболочку для вызова всего нужного, и сделать .dll, которую потом использую из C#.
Реинжиниринг занял где-то неделю в первой версии, и еще неделю недавно. Причем 50% времени я форматировал код (пробелы заменял на табы — это полуавтоматически делал сам редактор, мне же приходилось расставлять скобочки, т.к. не перевариваю стиль, когда скобки не находятся одна под другой).
Вообще-то я так и не понял, почему на ряде машин не работает. Я с тех времен пересел на Windows7 x64, с WindowsVista x32. Теперь протестировал на этих двух операционках — у меня все работает.
Но походу дела я составил UML диаграмму связей классов. Её то и предоставляю для обсуждения.
Здесь в большом разрешении, чтобы можно разглядеть детали [12]
Это то лучшие, что получилось после реинжиниринга :) было много хуже. Но как видим — и так достаточно ужасно. Почему и как это исправить? Давайте на эту тему и подискутируем. Но главное (!) все это не повод выкидывать и переписывать с нуля.
Автор: tac
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/bioinformatika/7623
Ссылки в тексте:
[1] Правила разработки сложных систем. История одного проекта: http://habrahabr.ru/post/143804/
[2] Часть №7. RNAInSpace — программное обеспечение для полуавтоматического конструирования РНК в пространстве: http://habrahabr.ru/post/141076/
[3] От белков к РНК: http://habrahabr.ru/post/140150/
[4] Мат. критерии: http://habrahabr.ru/post/140154/
[5] Как уменьшить число поворотов цепи?: http://habrahabr.ru/post/140158/
[6] Как оценить ход сворачивания односпиральной РНК?: http://habrahabr.ru/post/140211/
[7] Ограничение оптимизирующих методов в играх с противником и без: http://habrahabr.ru/post/140470/
[8] Одна фундаментальная проблема: http://habrahabr.ru/post/140641/
[9] Введение в сворачивание многоспиральных РНК: http://habrahabr.ru/post/140991/
[10] VMD 1.8.7: http://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD
[11] скачать его можно тут : http://code.google.com/p/vlabdownload/downloads/detail?name=DemoRNAInSpace.rar&can=2&q=#makechanges
[12] Здесь в большом разрешении, чтобы можно разглядеть детали: http://ru.vlab.wikia.com/wiki/Файл:RNAInSpaceDisplayUML.png
Нажмите здесь для печати.