Блог — Волга34 на вынос или «База данных на компакт-диске»
07 июня 2007 в 13.58
Автор: Сергей Калаус
Недавно был выпущен второй тираж компакт-дисков (3000 дисков если не изменяет память) с базой данных Волга34. Программа, которой база просматривается, на мой взгляд, выгодно отличается от волгоградских аналогов...
Обычные программы распространяемая на CD и предназначенная для просмотра и поиска по бд у меня вызывают мягко говоря непонимание. Создается впечатление, что пишут их программисты, которые в жизни своей ничего красивее никсовой консоли не видели. Ужасные виндовые окна без поддержки икспишного манифеста (про висту вообще молчу), кнопки аномальных размеров, явно созданные прямым вызовом CreateWindow(), невесть откуда взятые шрифты (то что у пользователя есть свой профиль программистам конечно наплевать). Так в 2 словах можно описать, например, базу фолианта и еще пары местных производителей.
Прилично выглядят творения, сделанные в виде записанных на диск хтмл файлов (Вроде база называется Братья карповы или как-то так). При запуске они естественно лезут в мой любимый hosts и пытаются прописать там адрес с диска же поднимаемого сервера(что конечно вызывает приступ агрессии у касперского с соответствующими визгами типа он поймал вирус за глотку). в процессе работы происходит простой серф по хтмлкам на диске. Поиск реализован на перле. результат - тормоза. Вставил я диск - он раскрутился, я поговорил по телефону - он остановился. Начинаю просматривать базу и диск опять зажужжал. Может из-за того что у меня ноутбук, но меня ужасно бесит, когда программа для подгрузки какого-то файла начинает эксплуатировать мой сдром.
И вот насмотревшись на все это, в начале этого года я начал писать программу, которая должна была в весной выйти вместе с первым выпуском справочника Волга34. Пути реализации были следующие:
- Делать простую виндовую программу. с ее кнопками, листбоксами, датагридом, листвью, не знаю там что-нибудь можно подобрать. Не подходит. Ибо хочется чтоб было красиво это раз, в стиле сайта - это два и нужно крутить рекламу в виде картинок, флэш, видео, это три. Основная проблема конечно с рекламой. Делать солянку из разных технологий вообще не хотелось.
- Записываем на диск пхпшные скрипты волги34, базу в неком хитром формате что никто не спер. при загрузке диска нужно программкой поднимать апач, мускул и делать по сути локальную копию веб-сайта. вариант не понравился сразу из-за большой вероятности ошибки при поднятии сервера на разных машинах. антивирусы, админы, настройки безопасности системы - все это приходится брать в расчет.
- До записи на компакт диск генерировать кучу хтмл файлов. делать авторан стартовой страницы при запуске диска и получается статичный хтмл сайт + опять поднятие сервера для поиска. вообще не понравилось. на мой взгляд это решение временное и предназначено для лентяев. это если бы мы делали сайты, заранее генерируя все страницы.
- Использовать для интерфейса программы все тот же хтмл, работающий в COM объекте WebBrowser. Был выбран именно этот вариант всилу своей простоты создания такого вида приложения. вопрос со вставкой флэша отпадает, ибо хтмл. видео вставляем во флэш. программа ничего для работы не требует. Internet Explorer есть везде.
Язык программирования - C++, библиотеки - MFC в Visual Studio. Выбор очевиден. .NET в данном случае неуместна. еще фреймворк за собой таскать... можно конечно было и без mfc - но это уж совсем топориком на коленке, нравятся мне эти карты сообщений. Варианты типа делфи, или борландовский c++ - это вообще такой изврат, что мне даже жаль тех кто с ними привык работать. видимо в прошлом веке кто-то из членов политеховских кафедр не понял что паскаль помирать уж собрался, изучил делфи, туда же борланд c++ и обучил всему этому половину волгоградских программистов, да и по сей день это безобразие продолжается.
Принцип работы программы прост. это по свей сути веб-браузер, который при заходе на определенный урл выполняет некоторые функции. урлы внутри программы имеют вид about:xxx. отлавливаются они в событии OnBeforeNavigate2. Например, программа начинается со страницы about:splash, которая показывает сплэш-скрин при запуске, потом идет на about:index. выводится индексная страница (как на сайте). например, открытие рубрики каталога происходит при переходе на урл about:catalog?cid=x. полный аналог работы сайта. получаем урл - из него узнаем что сделать, делаем это, ждем следующего урла.

Поиск в программе работает через POST. баннеры показываются вставкой тэга <img> для картинок, <object> для флэш. Отдельная проблема - отображение видео. Первая версия программы была снабжена возможностью показа видео через MCI функции WinAPI. Оказалось, что поведение кодеков для роликов настолько непредсказуемо, что невозможно было понять почему на одном компьтере после установки Klite Codec Pack все работает, а на другом нет. Во втором выпуске диска видео проигрывается через флэш плейер. получилось красиво, работает везде и даже во весь экран разворачивается. если флэш плейера у пользователя нет - то ему предлагается установка.
Изначально в программу заложено несколько идей на будущее:
- поддерживает скины интерфейса. весь хтмл берет из файла с шаблонами (упрощенная версия тех что используются у нас на сайтах). картинки, цсс, джава скрипты лежат в каталоге скина. при желании можно даже переключать скины через реестр.
- в самых ранних версиях предусмотрена возможность существования поздних. в поздние версии будет переноситься информация из ранних (комментарии к организациям, избранное)
- используется дружественные для висты способы хранения данных. не использует ветку реестра HKEY_LOCAL_MACHINE. уж очень UAC вистовый негодует когда туда пишут. файлы программы хранятся в областях, куда пользователь может записывать без запроса UAC.
В общем, получилась симпатичная программа, работающая даже в Windows95 (если internet explorer 5.0 стоит). Полностью самодостаточная. никаких фреймворков, дополнительных COM. Следующий выпуск она скорее всего переживет без изменений, а вот к зиме, если будет время, все будет переписано на framework3.0 (WPF).