четверг, 26 августа 2010 г.

Почти как настоящий...

Думал я тут о разработке кросс-платформенных приложений.
Хотя, "думал" - громкое слово. Нужно сделать так, чтоб приложение работало на *NIX и Windows. Нужно - значит будет!
static_cast<Linix>(Windows)
и даже
static_cast<FreeBSD>(Windows)

Да и, собственно говоря, проблем особых нет. Те утилитки, которые я "программирую" - вещи специфические, и на 99% - консольные приложения. Но в пресловутом "мире современных информационных технологий" консольное приложение - и не приложение вовсе. Так, робот, тулза для гиков. В общем - сугубо для частного использования в узком кругу задач. А чуть в паблик выходишь - так уже без GUI  и никуда.

И что же нам предлагает "современный мир" в качестве решения задачи кросплатформенного GUI? Да не так и много...

.NET - ну есть, конечно, Mono. Но и к самому .NET'у я настороженно отношусь, а Mono'вские интерфейсы (графические) - это вообще что-то с чем-то. Прошлый век по сути. Моё эстетическоре восприятие действительности - протестует :-)
QT. O да! Признанные мэтры! Не поспоришь. И красиво отрисованных приложений я видел не мало. Но, каждая попытка поставить QT и на нем  что-нить наваять, не доходила даже до компиляции пресловутого "Hello, world". Тяжело, массивно, навороченно. И очень напоминает программирование под Windows времен середины 90х - сплошное WinAPI (в смысле стилистика программ очень похожа). Спорить не возьмусь, QT я не знаю - не осилил.
wxWidgets. Этим я даже пользовался. Не одно "приложение" написано. Но вот как-то визуальная часть меня напрягает. Выглядит это все - довольно уныло. Тоже попахивает прошлым веком. А попытка натянуть туда "скины" или хоть как-то раскрасить картинку приводит к пресловутому "ручному" рисованию с обработкой всех подряд сообщений графической подсистемы. Короче - опять "закат солнца вручную".
WEB-based GUI. Модно, современно, и вообще понтово. И красиво, однако. Взять, например, jQuery-UI - шикарнейшие интефейсы без особых проблем. И кастомизация на уровне. Даже проблемы совместимости браузеров практически решены. Одно плохо - непонятно что со смысловой нагрузкой делать? Таскать за собой web-сервер, на котором крутятся CGI - как-то не логично. А в контексте браузера много не наработаешь - доступ к локальной системе порезан из соображений безопасности. Не затачиваться же, в самом деле, под эксплуатапцию уязвимостей браузеров? :)
А  вот еще XUL есть. Ну почти как настоящий - всго-то надо xulrunner или firefox - и приложение с доступом к локальным ресурсам готово. Однако, опять грабли с внешним видом. Долго изучал документацию в разделе "Skins" но не впечатлился доступными возможностями. Цвет элементов - и тот не всегда поменять можно. Грустно...

Однако, как подсказал мне один официант - "Импровизируйте, и все получится". XUL содержит очень полезный элемент - browser (ну или iframe - что в данном случае одно и тоже). Делаем окно, в него browser развернутый на всю площадь - и voila! Рисуем там все что душе угодно с помощью того же jQuery. А доступ к локальным ресурсам обеспечивает код на JavaScript, который выполняется в контексте chrome://, предоставленном xulrunner'ом. Собственно, есть доступ к sqlite DB, локальным файлам и каталогам и, даже, запуск приложений.

Последнее - запросто решает большинство вопросов. Ведь если что-то нельзя сделать из JavaScript, то это можно сделать из нативного приложения. Которому-то, как раз, GUI уже не нужен и даже вреден.

Вот и получается - GUI на базе веб технологий для конфигурирования системы и отображения результатов, нативное приложение для выполнения осмысленных действий, и XUL со своим XPCOM'ом для связывания всего этого в единое целое. Простенько и со вкусом. Да и накладные расходы минимальны.

Комментариев нет:

Отправить комментарий