Вы находитесь на странице: 1из 15

электронное приложение к журналу «Системный администратор»

№68, 15 сентября 2010

Обзор простого видеоредактора


для Linux – OpenShot

Нестандартные GUI-тулкиты:
знакомство с Ultimate++

Право выбора, или Открытые форматы:


MNG и APNG

QLandKarte GT как замена OziExplorer


в GNU/Linux
№68, 15 сентября 2010 1

Колонка главного Новости мира Open Source


редактора WeTab и Samsung Galaxy Tab – планшеты на базе Android
2 сентября прошла совместная пресс-конференция компаний Intel и 4tiitoo, стоящей
Видные представите- за разработкой интернет-планшета WeTab. На ней было объявлено о том, что устрой-
ли корпоративного ми- ство работает под управлением мобильной Linux-системы MeeGo. WeTab – планшет
ра играют с проектами из Германии, о котором стало известно еще в апреле. Его продажи в Германии нач-
свободного программно- нутся в этом месяце.
го обеспечения исклю- Ранее сообщалось, что в качестве операционной системы используется некая
чительно по своим пра- WeTab OS, «основанная на Open Source-технологиях и ядре Linux», а также обладаю-
вилам. И несмотря на то, щая поддержкой запуска приложений для Android. Как выяснилось позже, в ее осно-
что эти правила навряд ли официально за- ве был дистрибутив Ubuntu Linux. Теперь же объявлено о том, что разработчики реши-
фиксированы в тоннах макулатуры, состав- ли отказаться от Ubuntu в пользу MeeGo, поскольку это позволит им увеличить время
лены они не менее профессионально и лов- работы от аккумулятора и общую производительность.
ко, чем договоры тех же компаний. Настоль- Основные технические характеристики WeTab: 11,6-дюймовый тачскрин с под-
ко ловко, что некоторым людям всерьез на- держкой multitouch и разрешения 1366x768; процессор Atom N450 Pineview-M с такто-
чинает казаться, что вон те бизнес-ребята вой частотой 1,66 ГГц; 16 или 32 Гб памяти для хранения данных; Wi-Fi 802.11a/b/g/n,
абсолютно искренне заинтересованы в про- Bluetooth 2.1 + EDR.
движении FLOSS-проектов, возвращении ко- Тем временем, Samsung представила общественности свой планшет, работающий
да в upstream и добровольных пожертвовани- под управлением Android, – Samsung Galaxy Tab. Он был впервые продемонстрирован
ях только потому, что это «правильно», «кра- на проходящей в Берлине выставке IFA 2010. Продукт позиционируется как достойная
сиво», «честно» и т.п. Благо, циничная совре- альтернатива Apple iPad с операционной системой Android 2.2 на борту, хотя пока точ-
менность научила искать в подобных прояв- но неизвестна ни дата начала его продаж, ни цена.
лениях и другие мотивы – куда более прак- Основные характеристики Samsung Galaxy Tab: 7-дюймовый емкостной тачскрин
тичные и, как ни крути, жизненные. Тогда всё с поддержкой разрешения 1024x600 (WSVGA); процессор ARM Cortex A8 с тактовой ча-
вроде бы встает на свои места… стотой 1 ГГц; 4 Гб оперативной памяти; 3,2-мегапиксельная камера с автофокусировкой,
Но не всё. Потому что далеко не каждый LED-вспышкой, возможностью записи видео в разрешении 720x480; поддержка мо-
в момент осознания реальных бизнес-задач бильной связи: 2.5G (GSM/GPRS/EDGE v12), 3G (HSUPA 5,76 мбит/с, HSDPA 7,2 мбит/с);
перестает кричать, что пресловутые «ребя- Wi-Fi 802.11 b/g/n, Bluetooth 3.0.
та» поступили «неправильно» и «некрасиво» Выход планшета Samsung Galaxy Tab на европейские рынки запланирован на се-
по отношению к сообществу. И вот тогда хо- редину сентября, а США и Азии – в конце года. Предполагаемая стоимость модели
чется предложить этим людям на мгновенье Samsung Galaxy Tab с 16 Гб на российском рынке – от 32 тысяч рублей (по оценке Эль-
представить себя в роли руководителя такой дара Муртазина).
компании. Руководителя, который действи-
тельно любит FLOSS и понимает его плюсы, Редактор Bespin переименовали в Mozilla Skywriter
но вынужден смотреть на спорную ситуацию Проект фреймворка для совместного редактирования программного кода Bespin,
честно. Фанатизм или результат? К сожале- создаваемый в недрах Mozilla, получил новое название: Mozilla Skywriter. Кроме того,
нию, компромиссы не всегда выгодны и не для его разработка была переведена на GitHub.
всех возможны. Вообще, авторы задаются целью передать в названии проекта идею «написания
Главный редактор кода в облаках». По их мнению, Skywriter отражает ее лучше, чем Bespin. Тем време-
Дмитрий Шурупов нем, сам проект приближается к релизу версии 1.0, и его серверную часть решено пе-
(osa@samag.ru) реписать на node.js – событийного фреймворка с открытым кодом, предназначенно-
го для запуска JavaScript-кода на стороне сервера. Таким образом, разработчики на-
«Open Source» мерены подготовить десктоп-версию Skywriter на базе XULRunner и новую серверную
электронное приложение к журналу версию, основанную на node.js.
«Системный администратор» Перевод официального репозитория Skywriter на GitHub связан с тем, что многие
№68, 15 сентября 2010 г. разработчики высказывали желание работать на этом сервисе и даже создавали его
неофициальные зеркала. Теперь все будут работать через централизованный репо-
РЕДАКЦИЯ зиторий кода на GitHub.
Исполнительный директор
Владимир Положевец Microsoft передала 25 тысяч долларов Mercurial
Главный редактор Проект CodePlex.com, созданный и поддерживаемый корпорацией Microsoft, пере-
Дмитрий Шурупов дал 25 тысяч USD на развитие популярной Open Source-системы управления верси-
Верстка и оформление ями Mercurial. Этот шаг стал ответом на опубликованный еще в апреле призыв лиде-
Владимир Лукин ра Open Source-проекта Мэтта Мэколла (Matt Mackall) помочь ему в финансировании
Иллюстрация на обложке полного рабочего дня для развития Mercurial. К спонсированию приглашались все ком-
Анна Гервова пании, которые считают себя «серьезным пользователем Mercurial». И вот Microsoft
Сайт электронного приложения: оказалась одним из таких серьезных пользователей, а причина тому – ее хостинг
http://osa.samag.ru для Open Source-проектов CodePlex.
Сообщается, что большинство проектов на CodePlex используют для управле-
За содержание статей ответственность несет автор. ния версиями своего программного обеспечения продукт Microsoft – Team Foundation
Все права на опубликованные материалы защищены. Server (TFS). Но несмотря на это, более 1500 проектов работают с Mercurial. Кроме то-

Электронное приложение «Open Source»


2 №68, 15 сентября 2010
го, это популярный выбор для тех, кто переходит на CodePlex На данный момент, в новом драйвере Broadcom обеспечена
с других хостинговых платформ. Все это делает Mercurial «важ- поддержка BCM4313, BCM43224 и BCM43225. Вероятно, в даль-
ной возможностью CodePlex». нейшем спектр поддерживаемого оборудования будет расши-
рен. По информации разработчика из Canonical, новый драй-
Вышла редакция дистрибутива Linux Mint вер Broadcom может быть включен в состав ближайшего рели-
на базе Debian за Ubuntu Linux – 10.10 «Maverick Meerkat».
7 сентября проект Linux-дистрибутива Mint, основанного
на Ubuntu, представил редакцию своей системы на базе Debian Apple перестала возвращать код
GNU/Linux – Linux Mint Debian (LMDE). Первый релиз LMDE полу- в проект GCC
чил версию 201009. Авторы называют выпуск нового дистрибу- Как стало известно из почтовой рассылки GCC (GNU Compiler
тива важным шагом для всего проекта. Заявляется, что благо- Collection), компания Apple изменила свою политику касатель-
даря использованию в качестве базы Debian GNU/Linux, новый но разработок для этого популярного проекта свободных ком-
дистрибутив (LMDE) будет работать быстрее, а интерфейс ста- пиляторов.
нет более отзывчивым (по сравнению с основными редакциями Разработкой GCC руководит некоммерческая организация
Linux Mint). В LMDE представлены все те же возможности, что и Free Software Foundation (FSF). Выяснилось, что Apple не на-
в обычном Linux Mint, – изменилась лишь база, где Debian при- мерена тратить усилия на включение в состав основной вет-
шел на смену Ubuntu. ки разработки GCC своих патчей, реализующих поддержку
Таким образом, в составе Linux Mint Debian помимо стан- Objective-C  2.0. Крис Лэттнер (Chris Lattner), старший архитек-
дартных пакетов из репозитория Debian (обеспечена совмести- тор группы специалистов по компиляторам в Apple, сообщил,
мость с «testing» и «squeeze») можно найти разработки проекта что в  компании «больше нет внутреннего процесса для пере-
Linux Mint, среди которых – новый инсталлятор и менеджер про- дачи кода организации FSF». Высказывается предположение,
граммного обеспечения (Software Manager). При сравнении LMDE что такая политика связана с нежеланием Apple принимать по-
с основными редакциями Linux Mint отмечается, что LMDE будет следнюю версию «главной» лицензии FSF на свободное прог-
менее стабильным и, возможно, иногда менее «дружелюбным», раммное обеспечение, под которой распространяется и GCC, –
зато обеспечит лучшую скорость работы и более оперативное GNU GPLv3.
обновление пакетов ПО.
Пока LMDE распространяется только в 32-битной версией Представлен NPF – новый межсетевой экран
с рабочей средой GNOME. Вопрос появления других редакций для NetBSD
LMDE еще пока открыт. Дистрибутив LMDE называется «экс- В почтовой рассылке NetBSD был представлен новый межсе-
периментом». тевой экран для этой операционной системы – NPF. Заявля-
ется, что  он ориентирован на высокую производительность
Oracle и NetApp урегулировали на  многопроцессорных системах и простую расширяемость.
разбирательство по ZFS NPF создан литовцем Миндаугасом Расюкевичюсом (Mindaugas
Три года назад компания NetApp (Network Appliance) подавала Rasiukevicius), а его разработку спонсирует организация NetBSD
иск на Sun Microsystems из-за нарушения ее патентов в файло- Foundation. Он стал третьим фильтром пакетов (packet filter)
вой системе ZFS. Новая владелица ZFS, корпорация Oracle, уре- для NetBSD после IP Filter и PF. Одна из его уникальных харак-
гулировала эти споры. теристик – использование интерпретатора байт-кода в движке
В том же 2007 году, уже в октябре, Sun ответила на дейст- разбора пакетов.
вия NetApp взаимным иском, утверждая, что претензии NetApp Ожидается, что к концу января 2011 года NPF оснастят всеми
не обоснованы, и обвинив NetApp в нарушении патентов Sun. возможностями, предоставляемыми другими фильтрами паке-
«До кучи», в апреле 2008 года, Sun подала еще один иск про- тов для NetBSD, а также документацией и примерами конфигу-
тив NetApp, утверждая, что в программном обеспечении Onaro рации. Единственное, чего будет не хватать, – поддержки IPv6.
SANscreen и NAS Insight используются запатентованные Sun Разработчик ищет помощников и готов предоставить им техни-
технологии. ческую поддержку по реализации IPv6 в NPF.
И вот теперь NetApp и Oracle пришли к компромиссу, отка-
завшись от взаимных претензий. Условия, по которым было про- Linux-дистрибутив sidux переродился
изведено урегулирование, не разглашаются. Так или иначе, все как aptosid
«сторонние» пользователи ZFS теперь могут не беспокоиться Проект дистрибутива sidux, основанного на нестабильной вет-
за свои продукты. ке Debian GNU/Linux, снова жив – теперь под названием aptosid.
Дистрибутиву sidux пришлось сменить название из-за кон-
Broadcom выпустила Open Source-драйвер фликта с организацией sidux e.V., обладающей правами на тор-
для ядра Linux говую марку «sidux» на территории Европы. Новый дистрибу-
Компания Broadcom представила первый релиз нового драйве- тив – aptosid – предоставит всем пользователям sidux возмож-
ра для поддержки своего беспроводного оборудования в Linux. ность простой миграции. Aptosid по-прежнему основан на ветке
Его исходный код открыт, и в нем используются «родные» сред- Debian GNU/Linux «sid».
ства ядра Linux. Первым релизом aptosid стала версия 2010-02 с кодовым наз-
Новый Linux-драйвер от Broadcom использует фреймворк ванием «Κηρες». В ней представлено ядро Linux 2.6.35 и рабочая
SoftMAC, он уже попал в ветку staging разработки ядра Linux. среда KDE 4.4.5. Подробности можно найти на новом сайте про-
И ожидается, что скоро этот драйвер войдет в состав ядра. Ак- екта: http://aptosid.com.
туальность этих событий сложно переоценить, поскольку под-
держка беспроводного сетевого оборудования Broadcom всег- Дмитрий Шурупов,
да была проблемой для пользователей Linux из-за наличия про- по материалам www.nixp.ru
приетарного блоба. (osa@samag.ru)

Электронное приложение «Open Source»


№68, 15 сентября 2010 3

Обзор простого видеоредактора


для Linux – OpenShot
В
августе 2008 года Джонатан Томас (Jonathan Thomas) основан Trisquel, носит экспериментальный характер. На стра-
начал работу над новым свободным и простым видео- нице https://launchpad.net/~jonoomph/+archive/openshot-edge в раз-
редактором. Проект получил название OpenShot (http:// деле Adding this PPA to your system я выбрал Karmic 9.10, пос-
www.openshotvideo.com). Как сказал сам разработчик в одном ле чего появились ссылки на соответствующий репозиторий
из интервью (http://www.gnomejournal.org/article/90/interview-with- с OpenShot. Перед обновлением менеджера пакетов необходи-
jonathan-thomas-creator-of-the-openshot-video-editor), OpenShot мо добавить специальный ключ, который удостоверяет пакеты
создается им в свободное от основной работы (разработка про- с данного репозитория PPA:
приетарного программного обеспечения в одной из компаний
в Техасе) время. sudo apt-key adv --keyserver keyserver.ubuntu.com ↵
--recv-keys EDFBD1F9
Openshot – это свободный редактор нелинейного видеомон-
тажа для операционной системы GNU/Linux. Программа разрабо- Теперь осталось добавить указанные выше ссылки на репо-
тана с использованием Python, GTK+ и фреймворка Media Lovin' зитории в «Источники приложений» Synaptic («Настройки → Ре-
Toolkit (MLT, http://www.mltframework.org), ориентированного на позитории → Другое ПО → Добавить»), а затем обновить менед-
телевизионное вещание. К слову, при изучении инструментов жер пакетов. Собственно, данный репозиторий включает два па-
разработки автор делал выбор между Mono и Python, но остано- кета: Openshot версии 1.1.3 и Python-MLT версии 1.0.3, а также
вился на последнем в силу его «впечатляющей поддержки бин- их исходные коды. Пользователям Ubuntu 10.04 «Lucid Lynx» со-
дингов мультимедийных библиотек, таких как GStreamer и MLT». вершать эти действия не потребуется – все нужные пакеты есть
В свою очередь, GTK+ был выбран, поскольку это стандартный в основном репозитории.
инструментарий GNOME – требовалось, чтобы OpenShot выгля- Установка программы осуществляется традиционно – напри-
дел как «родное» приложение этой среды. мер, через Synaptic или командную строку:

Основные возможности sudo apt-get install openshot


Благодаря встроенной поддержке FFmpeg видеоредактор мо-
жет работать с большим количеством форматов аудио, видео Общий объем загружаемых пакетов с зависимостями для
и графики. Среди них – ogg, avi, dv, flv, mov, matroska, mp2, mp3, только что установленной операционной системы Trisquel  3.5
mp4 и другие. С полным списком поддерживаемых форматов составил ~ 25,2 Мб. При этом пакет libsdl1.2debian-alsa был по-
и кодеков можно ознакомиться в меню: «Изменить → Парамет- мечен для удаления, а libsdl1.2.debian-pulseaudio – для установ-
ры → AV Форматы». В правой части окна будут показаны уста- ки. После инсталляции в разделе «Аудио и видео» главного ме-
новленные аудио-, видеокодеки и поддерживаемые форматы. ню появился пункт Open Shot Video Editor.
Для обновления информации о последних имеется специаль- Что касается других дистрибутивов, то  OpenShot досту-
ная кнопка вверху окна – «Перезагрузить кодеки». Дополни- пен по умолчанию в операционной системе AV Linux (http://
тельную информацию по поддерживаемым форматам и коде- www.bandshed.net/AVLinux.html), а также в виде RPM-пакета
кам можно получить из встроенной в программу справки в пун- для Fedora 11/12 и в виде архива с исходным кодом на официаль-
кте 23 – List of Formats & Codecs.
Представлены возможности для твор-
ческой работы с видео: более 40 видов
переходов и около 40 эффектов. Кроме
того, OpenShot интегрирован со средой
GNOME с поддержкой drag & drop (напри-
мер, перетаскивание рисунка или виде-
офайла из  каталога или рабочего стола
в окно программы на место эскизов, а так-
же для перемещения объектов как внутри
одной временной шкалы, так и с одной
на другую). Имеется поддержка измене-
ния размера и обрезки клипов на шкале
времени, работы с  несколькими трека-
ми одновременно, перекодирования ви-
део (с использованием кодеков FFmpeg).

Установка
Основная страница проекта на Launchpad
(я пользуюсь Trisquel GNU/Linux 3.5) нахо-
дится здесь: https://launchpad.net/openshot.
Но мне потребовалась эксперименталь-
ная ветка, потому что статус поддержки
OpenShot для Ubuntu 9.10, на котором Интерфейс OpenShot

Электронное приложение «Open Source»


4 №68, 15 сентября 2010
ной странице проекта. Кроме того, в репозитории SlackBuilds есть ект/Сохранить проект как...»). После того, как работа над про-
пакет (с версией 1.1.1) для Slackware 13. На момент написания ектом завершена, можно экспортировать подготовленное ви-
статьи мне больше неизвестны репозитории, включающие сбор- део: «Файл → Экспортировать видео» – и появится окно с од-
ку данного видеоредактора. (Впрочем, это не повод отчаиваться. ноименным названием. В нем выбираем имя файла и директо-
Например, и для Gentoo Linux в ряде «оверлеев» представлен рию для экспорта. Есть возможность выбора профиля (автома-
ebuild: http://gpo.zugaina.org/media-video/openshot. – Прим. ред.) тическая установка параметров, оптимизированная под устрой-
ство, сервис и т.д.):
Интерфейс  Blu-Ray/AVCHD (AVCHD-диски);
Интерфейс программы отличается продуманностью и эргоно-  DVD (DVD-NTSC/PAL);
микой. Окно видеоредактора разделено на три основные час-  веб (Flickr, Metacafe, Picasa, YouTube, Vimeo);
ти: слева – область с файлами проекта; справа – область пред-  все форматы (AVI, FLV, MOV, MP4, MPEG и OGG);
варительного просмотра подготовленного видео; внизу – вре-  устройство (AppleTV, Nokia nHD и Xbox 360).
менная линейка для размещения треков, снабженная кнопками
для таких инструментов, как «Добавить дорожку», «Указатель» Затем выбираем профиль видео (зависит от выбранного про-
(используется, например, для смещения файлов влево/вправо филя проекта) и качество (низкое/среднее/высокое). Указанные
относительно трека), «Бритва» (обрезает файл в указанном ме- параметры экспорта можно детализировать, получив более ши-
сте), «Изменение размера», «Прикрепление» и «Добавить мар- рокие возможности настройки. Для этого необходимо перейти
кер» (см. ниже), а правее – инструмент масштабирования «шка- на вкладку «Дополнительно» окна экспорта видео. Когда все на-
лы времени» на треках (по умолчанию задан шаг в 15 секунд). стройки экспорта заданы, для начала операции нажимаем кноп-
ку «Экспортировать видео».
Работаем с OpenShot
Рассмотрим ряд возможностей видеоредактора OpenShot Недостатки
на практике. Для этого понадобится хотя бы один видеофайл. При работе с эффектами (добавление эффекта для файла ogv,
Я загрузил sullivan-hungry.ogv, в котором Джон Салливан (John а затем воспроизведение видео) у меня периодически проис-
Sullivan) из Free Software Foundation рассказывает о свобод- ходили падения программы. После того, как впервые столкнул-
ном ПО, копилефте и т.п. – он доступен в специальном архиве ся с этой проблемой в Trisquel, решил проверить, будет ли воз-
по адресу http://www.artfiles.org/gnu.org/ftp/pub/video. После запу- никать подобная ситуация в Ubuntu 10.04 (где пакет не носит
ска OpenShot откройте в нем видеофайл – кстати, заодно мож- статус «экспериментального»). Проблема по-прежнему прояв-
но убедиться в работающем drag & drop. лялась и там. К слову, на странице проекта на Launchpad есть
Переместим видеофайл из области файлов проекта на Трек 1 раздел с известными ошибками. Если на странице https://bugs.
внизу окна и воспользуемся инструментом Бритва, чтобы «разре- launchpad.net/openshot/+filebug поискать по «effect», можно по-
зать» видео. Для этого нажмем кнопку «Бритва» (обратите вни- лучить список всех ошибок, так или иначе связанных с эффек-
мание на всплывающую подсказку), опустим курсор на Трек 1 – тами. Например, есть ошибка #526061 – падение при использо-
он принимает форму бритвы – и наведем на нужное место в ви- вании эффекта «Nervous». Итак, я хотел добавить информацию
деофайле. Щелчок левой кнопкой мыши разделит файл на две об  обнаруженной проблеме и для этого запустил видеоредак-
части. тор из консоли (с целью сохранить вывод о работе программы),
Работу со следующим инструментом – «Изменение разме- но  по  какой-то причине ошибка больше не повторялась. В об-
ра» – можно оптимизировать. Для этого нажмите кнопку «Изме- щем, на мой взгляд, это говорит о недостаточной стабильности
нение размера» и переместите курсор приблизительно к сере- приложения, что подтверждает и беглый просмотр всех ошибок,
дине видеофрагмента. Курсор примет форму стрелки, направ- о которых сообщили пользователи.
ленной влево или вправо (в зависимости от позиции курсора). К недостаткам отнесу и скромные возможности работы
Если стрелка направлена влево, то при клике левый край ви- с аудио. Все доступные опции – это импорт аудиофайлов в про-
деофрагмента будет перемещен в указанную (текущим курсо- ект, добавление на трек, возможность раздельного воспроизве-
ром) позицию. Аналогично можно и дальше перемещать кур- дение аудио и видео (например, во время работы с проектом –
сор по видеофайлу, изменяя размеры без перетаскивания кра- см. кнопки на каждом из треков), управление затуханием зву-
ев файла вручную. ка в начале/конце воспроизведения и временным интервалом,
Еще одним инструментом, повышающим удобство рабо- на протяжении которого оно будет происходить.
ты с OpenShot, являются маркеры. Кнопка «Добавить маркер»
(на ней изображен розовый овал, напоминающий лепесток), ак- Заключение
тивирующая этот инструмент, находится на панели инструмен- OpenShot порадовал интерфейсом и удобством работы. Кроме
тов «Линейки» внизу окна программы. Маркеры добавляются того, его отличает поддержка большого количества аудио-, ви-
путем перемещения текущей позиции по шкале времени и на- део- и графических форматов. Все это позволило включить его,
жатия на эту кнопку. На их месте появляются «розовые овалы». например, в репозиторий Ubuntu 10.04. К сожалению, приложе-
После установки маркеров можно осуществить воспроизведе- ние ещё недостаточно стабильно – на Launchpad на момент на-
ние видео, перемещаясь от одного маркера к другому. Это удоб- писания статьи можно было увидеть более 300 известных оши-
но, например, если планируется «обрезка» видео – можно про- бок. Кроме того, видеоредактор пока не в состоянии конкуриро-
работать разные варианты. Для перехода по маркерам во вре- вать по функциональности, например, с тем же Kdenlive (Его об-
мя воспроизведения нужно воспользоваться соответствующи- зор можно найти в «Open Source» №048 от 17.08.2009. – Прим.
ми кнопками в окне предпросмотра. ред.). В  то  же время продолжается работа над расширением
функциональности OpenShot и авторы обещают добавлять раз-
Сохранение проекта и экспорт видео нообразные улучшения.
Несколько слов о работе с проектами в OpenShot. Они сохра- Игорь Штомпель
няются в специальный формат .osp («Файл → Сохранить про- (keepercoder@gmail.com)

Электронное приложение «Open Source»


№68, 15 сентября 2010 5

Нестандартные GUI-тулкиты.
Часть 1: Знакомство с Ultimate++
П
ри создании GUI-приложений для Linux выбор тулкита ни сторонние библиотеки, ни даже STL и Boost – все, начиная
играет первоочередную роль. Именно от него будет за- от контейнеров и заканчивая работой с XML и SQL, делается си-
висеть не только трудоемкость разработки, но перено- лами самой U++. Этим «глобальным изобретением велосипе-
симость программы, ее внешний вид и возможность дальней- да» U++ напоминает Qt. U++ включает несколько компонентов:
шего развития. Для определенности предположим, что прог-  Набор стандартных библиотек:
рамма пишется на С++, т.к. рассмотрение привязок для различ-  Core – строки, даты и время, библиотека контейнеров NTL
ных языков – это отдельная обширная тема. По сути выбор сво- (аналог STL с несколько иным поведением и, как утверж-
дится к тройке наиболее известных и популярных тулкитов: Qt, дается, более быстрая), обратные вызовы, многопоточ-
GTK+ и wxWidgets. Для небольших «легких» программ иногда ность, работа с XML и т.д.
используется FLTK. К сожалению, каждый из этих «трех китов»  Draw – канва для растровой графики.
имеет свои специфические недостатки, поэтому альтернатив-  CtrlCore – ядро GUI-приложений, обеспечивающее ото-
ные нестандартные GUI-тулкиты продолжают вызывать интерес. бражение окон, передачу событий, обработку логических
Нестандартные решения могут заинтересовать разработчиков координат и т.п.
либо выдающимся внешним видом виджетов, либо оригиналь-  CtrlLib – библиотека виджетов.
ными приемами программирования, которые экономят время  RichText – сложный форматированный текст с импортом/
на разработку и поддержку программ. Чтобы быть конкуренто- экспортом в RTF и HTML.
способными, они должны быть кроссплатформенными, поддер-  SQL – функции для работы с SQL-запросами и интерфей-
живать Unicode и иметь интегрированную RAD-среду разработ- сы к СУБД SQLite3, MySQL, PostgreSQL, Microsoft SQL,
ки или хотя бы визуальный редактор форм. Oracle.
В этой статье рассмотрен тулкит Ultimate++. Внешний вид  Esc – встраиваемый интерпретатор специфического
его виджетов ничем не примечателен (используются «родные» скриптового языка.
виджеты для каждой платформы), однако используемые прие-  Web – работа с сетью и интернетом.
мы программирования кардинально отличаются от всех других  Система управления компиляцией BLITZ-build.
тулкитов. Все компоненты U++ очень специфичны и в букваль-  Полноценная интегрированная среда разработки TheIDE
ном смысле не похожи ни на что другое. Это относится и к син- с визуальным редактором компоновки виджетов.
таксису, в котором иногда трудно узнать С++ как таковой (хотя  Система документирования Topic++.
это абсолютно стандартный С++, без каких-либо дополнений,  Система анализа, автодополнения и  оптимизации кода
как в Qt), и к откровенно странной IDE. Не ждите от U++ интуи- Assist++.
тивной понятности – тривиальные вещи нужно, зачастую, долго
«раскапывать» в документации и на форумах. «Барьер вхожде- Все эти компоненты рассчитаны на совместное использо-
ния» в U++ высок, но вложенные усилия затем быстро окупаются. вание и по отдельности работать не будут. Кроме того, орга-

Обзор U++
Ultimate++ (http://www.ultimatepp.org), из-
вестный как U++ и UPP, позиционируется
не столько как GUI-тулкит, сколько как це-
лостная инфраструктура (framework) для
быстрой разработки кроссплатформен-
ных приложений на С++. U++ распростра-
няется по свободной лицензии BSD и яв-
ляется бесплатным как для открытых, так
и для коммерческих разработок. Код GUI-
приложений, написанный с использовани-
ем U++ чрезвычайно лаконичен, и напоми-
нает код «сверхвысокого уровня», харак-
терный для  скриптовых языков. Это до-
стигается повсеместным использованием
современных возможностей С++ во внут-
ренней структуре U++. На официальном
сайте имеется впечатляющее сравнение
идентичных программ написанных на U++,
Qt, wxWidgets и Java (http://www.ultimatepp.
org/www$uppweb$comparison$en-us.html).
Во всех случаях код на U++ намного коро-
че и понятнее, хотя и выглядит необычно.
Инфраструктура U++ спроектирована
так, что в идеале программисту не нужны Главное окно TheIDE

Электронное приложение «Open Source»


6 №68, 15 сентября 2010
низация кода в виде «пакетов» в U++ настолько специфична, После выбора главного пакета (или создания нового) мы
что разработка с помощью U++ автоматически подразумевает оказываемся в главном окне TheIDE. Интерфейс этой среды
использование исключительно «родной» IDE. Учитывая спец- достаточно необычен (см. рисунок). Слева расположена па-
ифичность TheIDE, это можно считать достаточно серьезным нель, где отображаются используемые в данном проекте паке-
недостатком. ты (вверху) и исходные файлы (внизу). Правее расположена па-
U++ работает в Linux и Windows и в настоящее время пор- нель навигации. В ее верхней части отображаются компонен-
тируется для MacOS X. Программы, написанные на одной плат- ты файла, пакета либо целого гнезда, а в нижней – функции,
форме, без изменений компилируются на другой. классы и определения. Еще правее расположено окно тексто-
вого редактора.
Установка Нажав <Ctrl> + <F5> можно скомпилировать проект и запу-
U++ не входит в состав основных дистрибутивов Linux, одна- стить программу. При первой компиляции будут собраны все
ко на официальном сайте есть DEB-пакеты для Ubuntu, RPM – подключенные к проекту стандартные пакеты U++, что занима-
для  Fedora, Mandriva и OpenSUSE, а также ebuild для Gentoo. ет некоторое время. Последующие компиляции происходят на-
Кроме того, U++ можно собрать из исходных кодов на любой много быстрее. Нужно сказать, что система сборки BLITZ-build
системе, но большое число зависимостей может сделать этот оправдывает свое название: компиляция и компоновка проис-
процесс довольно сложным. В Ubuntu последнюю версию U++ ходят на удивление быстро.
можно установить из ppa-репозитория следующими командами: Структура меню TheIDE, мягко говоря, непривычна. Пункт
Help напрочь отсутствует. Вместо него есть только кнопка на па-
$ sudo add-apt-repository ppa:dolik-rce/upp-nightly нели инструментов. В меню File нет пункта New – вместо этого
$ sudo apt-get update
$ sudo apt-get install upp для создания нового файла нужно выбрать Edit file и ввести не-
существующее имя. Зато в меню File есть пункты для разделе-
При этом будет установлено около 60 новых пакетов объе- ния окна редактора, закладок и скрытия панели уведомлений,
мом более 50 Мб. которые, казалось бы, должны находиться в отсутствующем
меню View. В интерфейсе имеются и другие странности. Напри-
Пакеты, гнезда, коллекции мер, добавить к проекту новый файл можно, исключительно вы-
Перед тем, как рассматривать специфическую для U++ среду брав Special → Insert any file(s) в контекстном меню списка фай-
разработки TheIDE, необходимо разобраться с понятиями паке- лов в  левой панели. Понять логику работы панели навигации
тов и коллекций. Обычно разработчики на С++ мыслят в катего- мне так и не удалось: что именно отображает верхняя часть па-
риях библиотек и их заголовочных файлов, однако в U++ исполь- нели и по какому принципу, осталось загадкой. Иными слова-
зуется идея пакетов, которая будет привычной для программи- ми, интуитивность – явно не главное для разработчиков TheIDE,
стов, работавших с Delphi или Lazarus. Если «подключить» пакет и с этим нужно смириться.
к проекту, то IDE автоматически установит необходимые пути При использовании темных системных тем GTK+ белый текст
и флаги для компилятора. Каждый проект в свою очередь явля- в меню TheIDE отображается на светлом фоне и не читается. Что-
ется пакетом, который можно при определенных условиях под- бы избавиться от этого неприятного явления, нужно открыть ди-
ключать к другим. Технически пакет – это просто отдельная ди- алог Setup → Environment → IDE и в поле GUI Theme установить
ректория, содержащая исходные коды и файл-описание с расши- любую понравившуюся тему вместо Host platform.
рением upp (это очень похоже на пакеты в Python или Tcl). Файлы
.upp обновляются автоматически самой IDE и по сути являются Первая программа
аналогами Make-файлов с описанием зависимостей и флагов Перейдем к реальному примеру. Напишем простую бесполез-
компиляции. Несколько пакетов объединяются в «гнездо» (nest), ную программу, которая выполняет выбранное арифметическое
а гнезда – в коллекции (assemblies), которые позволяют сорти- действие с двумя числами. Запустим TheIDE и создадим новый
ровать их по категориям. пакет demo1 в коллекции MyApps. В качестве шаблона выберем
Все программы, созданные пользователем, помещаются Basic CtrlLib Application. Будет создан единственный исходный
в  общее глобальное дерево пакетов, а все файлы располага- файл main.cpp с таким кодом:
ются в соответствующих поддиректориях. Эта особенность мо-
жет показаться неудобной, однако автоматическое поддержа- #include <CtrlLib/CtrlLib.h>
GUI _ APP _ MAIN{
ние порядка в дереве проектов, на мой взгляд, перевешивает }
непривычность такого подхода.
Корень дерева пакетов выбирается пользователем при пер- Это и есть минимальная программа на U++, которая пока
вом запуске TheIDE. По умолчанию это ~/upp. При первом запус- не  делает ничего. Макрос GUI_APP_MAIN заменяет функцию
ке TheIDE копирует файлы всего дерева пакетов U++ в эту ди- main и отвечает за инициализацию библиотеки. Первое, что нуж-
ректорию. В ее поддиректориях в дальнейшем будут распола- но сделать, – добавить главное окно:
гаться все создаваемые пользователем программы и переме-
стить их в какое-то другое место нельзя. #include <CtrlLib/CtrlLib.h>
using namespace Upp;

TheIDE class MyWindow: public TopWindow {


};
При каждом запуске TheIDE открывается окно выбора главного
пакета проекта. Если мы хотим создать новую программу, то вы- GUI _ APP _ MAIN {
MyWindow w;
бираем коллекцию MyApps (пока пустую) и щелкаем New Package. w.Run();
В диалоге создания пакета нужно задать его имя и выбрать ша- }
блон (пустой проект, консольная программа, программа с гра-
фическим интерфейсом и т.п.). При выборе шаблона справа ото- Все классы U++ находятся в пространстве имен Upp, поэто-
бражается содержимое генерируемых файлов. му лучше сразу же его задействовать.

Электронное приложение «Open Source»


№68, 15 сентября 2010 7
Мы наследуем класс MyWindow от класса окна TopWindow, статьи. Пока же укажем всю геометрию вручную. Делается это
создаем его экземпляр и входим в цикл обработки событий в конструкторе с помощью функции Add(widget), которая отобра-
методом Run. Скомпилировав программу, можно увидеть пу- жает переданный ей виджет согласно его логическим координа-
стое окно, которое умеет только закрываться. Добавим кноп- там. Полностью программа теперь выглядит так:
ки сворачивания-разворачивания, возможность менять размер
и установим начальные размеры окна, вызывая нужные мето- #include <CtrlLib/CtrlLib.h>
using namespace Upp;
ды в конструкторе класса:
class MyWindow: public TopWindow {
public:
class MyWindow: public TopWindow {
public:
EditDouble val1, val2; // Поля ввода для операндов
MyWindow(){
Label l1,l2; // Подписи для полей ввода
Title("Hello world!").MinimizeBox().MaximizeBox()
DropList operation; // Выпадающий список операций
.Sizeable().SetRect(0, 0, 300, 300);
Label l3; // Подпись для списка
}
Button compute; // Кнопка «вычислить»
};
Label result; // Надпись для результата

MyWindow(){
Такое «нанизывание» вызываемых методов характерно Title("Hello world!").MinimizeBox().MaximizeBox()
для U++ и делает код очень компактным. .Sizeable().SetRect(0, 0, 300, 230);
Добавим в окно нужные виджеты: два текстовых поля Add( l1.SetLabel("Первое число"). ↵
для операндов и подписи к ним, выпадающий список для ариф- LeftPosZ(10,STDSIZE).TopPosZ(10,30) );
Add( val1.HSizePosZ(90, 10).TopPosZ(15, 20) );
метических операций с подписью, кнопку «Вычислить» и над-
пись для вывода результата: Add( l2.SetLabel("Второе число"). ↵
LeftPosZ(10,STDSIZE).TopPosZ(40,30) );
Add( val2.HSizePosZ(90, 10).TopPosZ(45, 20) );
class MyWindow: public TopWindow {
public: Add( l3.SetLabel("Операция"). ↵
LeftPosZ(10,STDSIZE).TopPosZ(70,30) );
EditDouble val1, val2; // Поля ввода для операндов Add( operation.HSizePosZ(90, 10).TopPosZ(75, 20) );
Label l1,l2; // Подписи для полей ввода
DropList operation; // Выпадающий список операций Add( compute.SetLabel("Посчитать!"). ↵
Label l3; // Подпись для списка HSizePosZ(10, 10).TopPosZ(105, 20) );
Button compute; // Кнопка «вычислить»
Label result; // Надпись для результата Add( result.SetLabel("Результат:"). ↵
HSizePosZ(10, 10).TopPosZ(135, 20) );
}
Обращают на себя внимание несколько моментов. Во-первых, };
в U++ существуют особые типы полей ввода для вещественных
GUI _ APP _ MAIN {
и целых чисел. С использованием готового виджета EditDouble MyWindow w;
можно забыть о неправильном вводе числа пользователем. w.Run();
}
Во‑вторых, все виджеты создаются статически как обычные чле-
ны класса и нет нужды явно указывать их иерархию. Читабель- Легко заметить, что кириллица поддерживается без всяких
ность и простота кода от этого сильно выигрывают. Сравните: проблем. Выпадающий список пока пуст. Заполним его:

QLabel* l1 = new Qlabel(parent); //Qt operation.Add("+").Add("-").Add("*").Add("/").SetIndex(0);


Label l1; //U++

Следующий этап – разместить виджеты в окне. В U++ нет Функция SetIndex устанавливает выбранной первую опера-
«резиновой» компоновки, реализуемой в GTK+ или Qt с помо- цию «+», т.к. по умолчанию ни один элемент не выбран. Нужно
щью «сайзеров» (sizers). Вместо нее применяются так называ- сказать, что элементами выпадающего списка могут быть не
емые логические координаты, отсчитываемые от краев роди- только строки, а любые пары «ключ-значение». В данном слу-
тельского виджета. Для каждого виджета определена функция чае используется простейший вариант, когда задаются только
LeftPos(a,size), задающая расстояние от левого края родителя значения, а ключи генерируются автоматически.
до виджета и ширину виджета. Аналогично работают RightPos, На этом создание интерфейса можно считать законченным.
TopPos и BottomPos. Функция HSizePos(а,b) задает расстояния В следующей части статьи я опишу реализацию логики нашей
от левого и правого края родителя до виджета и дает виджету программы. Именно там в полной мере проявится «магия» U++.
менять ширину вместе с родителем. Так же работает VSizePos.
Забегая вперед, скажу, что в TheIDE есть удобный визуальный Семен Есилевский
редактор компоновок, который будет описан в следующей части (yesint4@yahoo.com)

Право выбора, или Открытые форматы.


Часть 1: MNG и APNG
М
ного можно говорить о том, что открытые форматы – нако в современном мире технологий корпорации навязыва-
альтернатива частным, коммерческим и так далее, но ют свои правила игры. Правила эти просты: никакого выбора
любая альтернатива «работает» лишь в случае, когда или ограниченный выбор (по вкусу производителя). Например,
люди о ней осведомлены. Вот был бы человеку предложен вы- программа-диктофон в вашем мобильном телефоне умеет за-
бор, а человек волен решать, что ему больше по вкусу… Од- писывать в MP3, однако не дает возможности выбрать битрейт,

Электронное приложение «Open Source»


8 №68, 15 сентября 2010
а по умолчанию пишет в низком. Более того, она могла бы давать жения – одни возражения! MNG оказался популярен на Востоке.
записывать в WAV, т.е. без сжатия, но в этом случае – о ужас! – Библиотеку MNG можно было использовать вместо библиоте-
телефон уже залез бы в коммерческую нишу тех «отдельных», ки поддержки PNG, т.к. первая фактически «держит» оба фор-
карманных диктофонов, которые обладают чудесной способно- мата, и удалось бы сэкономить пресловутую сотню-другую ки-
стью записывать в WAV. лобайтов. Разработчик MNG (Gerard Juyn), описав интересные
Посмотрите: развитие коммерческого ПО (да и железа) фак- возможности в новой, грядущей версии MNG, библиотеку под-
тически остановилось. Увеличиваются только размеры: растут держки которой он хотел выпустить в ближайшее время, напи-
гигабайты дополнительных клипартов, кистей, шаблонов, звуков. сал на той же странице обсуждения, что он чувствует себя так,
Пара броских, однако никому не нужных новых функций, да воз- будто три года его жизни спускают в унитаз, но если это пойдет
росшие системные требования. Зачастую выходит и так: новый на благо проекта (Mozilla), то он ничего не может сделать. Также
продукт выпускается изначально урезанным, а потом к  нему сообщил, что говорил с разработчиками IE и они вроде бы хоте-
в качестве «новинок» добавляют то, чего не было, однако давно ли включить поддержку MNG в свой продукт в ближайшем бу-
могло быть. Раньше, если выпускалась коммерческая програм- дущем. Что до W3C и их рекомендаций, то W3C в то время бы-
ма, то, как правило, был только один её вариант, сразу со всеми ла занята продвижением «своего» формата, SVG – в некотором
функциями. Сейчас рынок программ подобен рынку мобильных роде конкурента MNG.
телефонов: есть множество вариантов одной версии, функции Март 2003 года. Возражения против удаления MNG продол-
которой раскиданы по этим вариантам. Итак, функции при та- жаются. Но  создатель темы обсуждения отвечает: новая вер-
ком подходе стоят денег. Поддержка форматов – тоже. Разница сия libmng увеличивает декодер MNG в Mozilla на 33 424 байта
в цене от десятка до сотен долларов. под Linux и 25 056 байтов под Win32. Создается впечатление,
На первый взгляд картина может показаться черно-белой – что речь идет о тех достопамятных временах, когда «640 ки-
эдакое противостояние корпораций любым открытым форматам. лобайт должно быть достаточно для каждого». Однако разра-
Мол, корпорации просто не обращают на них внимание и стара- ботчик MNG соглашается на всё – лишь бы оставить поддерж-
ются выжать доллар из каждого байта своих закрытых и запа- ку MNG в Mozilla. Он может изменить API MNG нужным обра-
тентованных технологий. Но давайте попробуем разобраться, по- зом, если это поможет; готов серьезно поработать над умень-
чему открытые форматы, альтернативные существующим, столь шением размера кода библиотеки, но какой в этом смысл, ес-
медленно продвигаются в общество. На конкретных примерах. ли поддержка MNG будет выкинута? И далее он спрашивает:
«Как вообще будет принято это решение: демократическим го-
MNG – подрезанный на корню лосованием или просто решением одной личности (или неболь-
Хотел указать в заголовке «убитый в зародыше», но рука не под- шой группы)? Покамест я насчитал 7 голосов против удаления,
нялась. Ведь MNG жив, но кто о нем знает, кто использует?.. 2 – за, 1 – воздержавшийся». Ответом ему, в тот же день, слу-
Было светлое, революционное время, когда на каждом углу жит патч для удаления.
больших городов уличные проповедники кричали, что формат Май 2003 года. Всё еще обсуждают. Люди всё еще против
GIF – это зло, ибо там используется LZW-сжатие, защищенное удаления MNG. Один программист (Glenn Randers-Pehrson) со-
патентом. К тому времени уже существовала некоторая ему за- общает, что провел некоторую работу по уменьшению разме-
мена – PNG, который не поддерживал анимацию, но мог хра- ра libmng. Через несколько дней ответом будет жесткое: «Patch
нить данные как в формате индексированного цвета, с исполь- checked in. libmng removed from the tree». Итак, патч удаления
зованием палитр, так и полноцветные изображения. PNG был MNG из дерева исходников Mozilla был применен 3 июня 2003 го-
поднят как знамя и раскручен – во всяком случае на сайтах, от- да. Снова люди возмущаются, но их утешают: Ну что вы, еще
носящихся к свободному ПО и подобным, баннеры вы встрети- несколько версий у вас будет поддержка MNG, версии без MNG
те чаще всего именно в формате PNG. Повторюсь, PNG не под- появятся немного позже, не так всё страшно. И утихло, успоко-
держивал анимацию, однако у него был брат – MNG. MNG мог илось... Только почти 4 года спустя в той ветке обсуждений по-
содержать в себе кадры двух форматов: PNG и JNG. Более то- явилась умная запись: ведь во время удаления MNG из Mozilla,
го, MNG был оснащен функциями спрайтовой анимации, вклю- PNG и MNG были по сути на одном уровне популярности – ма-
чая в себя команды по копированию и перемещению встроен- лоизвестном. За четыре года PNG «вышел в свет», и то же мог-
ных объектов (с учетом альфа-канала), зацикливание и многие ло произойти с MNG.
другие полезные для анимации вещи. Какова же его судьба после 2003? Сначала – еще пара слов
Проповедники спросили у мира: «Вы хотите анимацию?». о Firefox/Mozilla. Вплоть до 2007 года энтузиастами выпускался
И сами же ответили: «Получите MNG!». В то время MNG поддер- патч Mngzilla с поддержкой MNG/JNG. Я искал дополнение под-
живался в таких браузерах, как Mozilla и, кажется, Konqueror. Ка- держки MNG для современного Firefox, однако не нашел. Из из-
залось бы, кто, как ни набирающая популярность Mozilla, может вестных мне браузеров MNG «из коробки» поддерживается толь-
послужить для раскрутки формата? Но вдруг происходит любо- ко в Konqueror. Вроде бы MNG поддерживается в каких-то вари-
пытная вещь. Вернее, не совсем вдруг, а незадолго до истече- антах мобильного браузера NetFront. Я проверил в своем теле-
ния в США срока действия патента на LZW – в 2003 году (в боль- фоне – увы (хорошая страничка для проверки находится на http://
шинстве других стран этот срок истек годом позже). pmt.sourceforge.net/opossum). Плагин поддержки MNG есть в биб-
В феврале 2003 года в недрах разработки Mozilla поднима- лиотеке Qt, а учитывая её растущий вес (читайте двояко: в ме-
ется вопрос об удалении поддержки MNG. Подробности изло- габайтах и в распространении), можно предположить, что MNG
жены в  историческом документе на https://bugzilla.mozilla.org/ в любой момент может стать востребованным по крайней ме-
show_bug.cgi?id=195280, а я опишу дело вкратце. Представи- ре на мобильных платформах, но... Сама библиотека libMNG
тель IBM (T.  Rowley) предложил удалить поддержку MNG, по- в 2007 году перешла к новому ведущему, и с тех пор нет никаких
скольку Mozilla с ней занимала на пару сотен килобайт больше, обновлений. MNG не имеет своего зарегистрированного MIME-
анимированные GIF и Flash покрывали возможности MNG, MNG типа, традиционно (для галочки) поддерживается многими про-
не входит в число форматов, рекомендуемых W3C, MNG вооб- смотрщиками изображений и используется в темах для телефо-
ще мало кто использует. Сразу в обсуждении возникли возра- нов Sony Ericcson.

Электронное приложение «Open Source»


№68, 15 сентября 2010 9
Вспомним еще раз одну из причин, по которой из Mozilla нием и MIME-типом. Задумывалось так: если браузер или дру-
убрали поддержку MNG. MNG своими возможностями «залезал» гая программа не поддерживает анимационные навороты APNG,
на территорию Flash и SVG, «дублировал» их – стало быть, яв- то отображает его как статичное изображение. Так собственно
лялся возможным конкурентом. А вот PNG ни с кем особо не кон- и происходит.
курировал – это не боевой, а «мирный» формат. PNG был нужен Поддержка APNG была встроена в Firefox в 2007 году. Груп-
тому же SVG для хранения растровых данных. PNG не покушался па разработчиков PNG не принимает APNG, поэтому основная
на вотчину GIF и Flash в плане анимации. Наконец, PNG не при- на сегодня библиотека поддержки PNG – libPNG – не поддержи-
рос корнями и 8-битной графике 80-х/начала 90-х. Тем не менее, вает APNG. Ведь PNG задумывался как формат статичных изо-
PNG не потеснил GIF в области баннеров, и уж тем более не пе- бражений и, по мнению разработчиков PNG, анимационные над-
ресекся с Flash. PNG развивается в своих нишах – кнопки, пол- стройки над этим форматом просто разрушают его и усложня-
ноцветные обои, изображения в свободных играх. ют жизнь программистам.
Поддержка APNG сейчас, однако, не столь велика, как у MNG,
APNG – пришедший на смену если считать разнообразные программы. Но браузеров, под-
Любопытно, что происходило в недрах разработки Mozilla спу- держивающих APNG, больше, чем в случае MNG. Я проверял
стя год после удаления поддержки MNG. Если почитать обсуж- APNG в Opera, Firefox, Chrome, Konqueror, Firefox – из них ани-
дение, относящееся к удалению, то мы увидим, что был нанесен мация была только в Opera и Firefox. Сейчас APNG – больше
удар по такой части интерфейса, как throbber'ы – анимированные «внутренний» формат Firefox, я не видел реального использо-
элементы с логотипами или разными отображениями хода вы- вания APNG на случайных сайтах. На страницах с искусствен-
полнения операции, т.е. всякие вращения в кружках и тому по- ными примерами – да, наблюдал, впечатляет. То же, что умеет
добное. Ведь оказалось, что в темах к Mozilla многие throbber'ы и MNG, но меньше. Можно сказать, что функционально APNG –
были сделаны именно на MNG. Итак, для нужд Mozilla в области это урезанный MNG.
поддержки throbber'ов (не подходил GIF, а MNG убрали) в 2004 го-
ду изобретают новый формат – APNG (http://animatedpng.com). Петр Семилетов
Новый, но на основе старого доброго PNG. С тем же расшире- (tea@list.ru)

QLandKarte GT как замена OziExplorer


в GNU/Linux
Н
и для кого не секрет, что, наверное, самой популярной сре- бенно если сравнивать с различными GIS). Популярность Ozi ста-
дой для работы с GPS-навигаторами и вообще картографи- ла причиной появления в интернете огромного количества геоин-
ческой информацией с целью навигации под Windows яв- формации в его формате, в частности: путевые точки (Waypoints),
ляется OziExplorer. Большой плюс программы – её простота (осо- треки (Tracks) и файлы привязок растровых карт (Map-файлы).

Рисунок 1. RouteConverter с загруженным треком

Электронное приложение «Open Source»


10 №68, 15 сентября 2010
Естественным желание становится использовать как-то всю она позволяет загружать геоданные (точки, треки) из файлов
эту прорву данных и в GNU/Linux. Но на пути становится первая на диске (набор форматов ограничен, но главное, что есть GPX
преграда: OziExplorer существует только в версии для Windows. (http://ru.wikipedia.org/wiki/GPX), подробнее – ниже). Эти же дан-
Выручить тут могут два фактора: ные она может экспортировать обратно в файлы, а также чи-
 Все версии Ozi прекрасно запускаются под Wine (но для ле- тать из GPS-устройства и загружать в него. Ещё одной важ-
гального и полноценного использования нужно купить ли- ной и нужной особенностью программы является возможность
цензию, которая стоит около 90 USD). создавать атласы, в которых указываются для разных масшта-
 Несмотря на закрытость самой программы, авторы сдела- бов различные растровые карты. Подробно на описании этой
ли свои форматы открытыми (простые текстовые файлы) программы останавливаться не буду, так как информация есть
и даже дали описание в справочном руководстве, за что им в интернете (хотя и не очень много). Основной список источни-
огромное спасибо (посмотреть описание можно, например, ков, которые следует прочитать перед началом работы, приве-
на http://www.realbiker.ru/OziExplorer/fileformats.shtml). дены в конце статьи.
Во многих дистрибутивах данную программу можно най-
Логично, что первый вариант, хоть и имеет право на жизнь, ти в  репозиториях. Например, в случае Arch Linux она есть
но не является достаточно изящным решением. Поэтому я пред- в AUR в виде двух пакетов: qlandkartegt и qlandkartegt-svn. Так-
принял попытку найти готовое программное обеспечение, ко- же стоит обратить внимание на комплект драйверов для рабо-
торое может работать с форматами OziExplorer. Сделаю одну ты QLandKarte с GPS Garmin (там же в AUR): garmindev. Установ-
оговорку: к сожалению, вопрос непосредственного сопряжения ка не должна занять много времени и сил. В общем, всё вроде
с  устройствами GPS рассматривать не буду ввиду отсутствия хорошо – вот только ни привязанные в OziExplorer карты, ни ге-
подобных устройств в зоне моей доступности. оинформацию в его формате QLandKarte читать не умеет. Ког-
да я это обнаружил, чуть было не расстроился, но, поискав в ин-
Работа с картами, атласами, геоданными тернете, нашел решения нужных мне вопросов.
и GPS
По совокупности характеристик, таких как простота и функцио- Карты
нальность, в данную категорию попадает, пожалуй, только одна На сайте разработчиков QLandKarte GT есть небольшая свод-
программа – QLandKarte GT (http://www.qlandkarte.org). Есть ещё ка о  том, где брать карты, у меня в блоге представлена крат-
версия «M», которая предназначена для различных карманных кая выборка [1]. Одним из пунктов идет конвертация карт
устройств. По сути эта программа – прямой аналог OziExplorer. OziExplorer в  формат GeoTiff при помощи скрипта на Python –
Она позволяет производить привязку растровых карт (напри- ozi2geotiff.py. Сам скрипт можно достать на http://sourceforge.
мер, сканированных атласов или других источников), в качест- net/projects/ozi2geotiff, но разработчики не выкладывают паке-
ве основного формата которых используется GeoTiff. Кроме того, ты и  доступ возможен только через SVN. Для пользователей
поддерживаются векторные карты Garmin в формате tdb (фор- Arch Linux я поместил в AUR правила для сборки пакета для это-
мат img требует дополнительных действий от пользователя, по- го скрипта, так что для них сложностей быть не должно (пакет
читать об этом на английском языке можно на http://sourceforge. называется ozi2geotiff-svn, там же лежит и скрипт ozi2gpx, речь
net/apps/mediawiki/qlandkartegt/index.php?title=FAQ). Вместе с тем, о котором пойдет ниже).

Рисунок 2. Загруженные векторные карты Garmin и трек

Электронное приложение «Open Source»


№68, 15 сентября 2010 11
После сборки и установки пакета, конвертер вызывается Справедливости ради стоит отметить, что существует ещё
командой: один скрипт для подобного преобразования, написанный на Ruby.
$ ozi2geotiff <params> Вот только работать у меня он отказался (и даже при всей сво-
ей нелюбви к Python, я не стал разбираться в причинах; для ме-
ня главное – конечный результат). Скачать этот скрипт мож-
Остальные могут скачать скрипт таким образом: но на странице http://sites.google.com/site/osmbelarus/Home/files.
Хочется отметить, что скрипт ozi2geotiff.py не является финаль-
$ wget -O ozi2geotiff.py http://ozi2geotiff.svn.sourceforge.net/ ↵ ным продуктом и может содержать ошибки, но автор – русско-
viewvc/ozi2geotiff/trunk/ozi2geotiff.py?revision=HEAD
говорящий, обо всех найденных недочетах можно смело писать
Перед запуском не забудьте проверить, что у вас установле- ему на почту.
ны все необходимые пакеты: Посмотрим, что можно сделать из карт для Garmin в форма-
 python; те img (для Приморского края, к примеру, они доступны на http://
 libgeotiff; john.bdk.com.ru/gpsmaps/pkmap2/main.htm). Напрямую эти файлы
 gdal; загрузить не получится – нужно собрать их в альбом (файл с рас-
 imagemagick. ширением .tdb). Для этого нам поможет программа mkgmap (http://
www.mkgmap.org.uk/page/main). В случае Arch Linux она имеется
Запуск осуществляется так: в AUR: mkgmap-svn (для работы нужна Java).
Единственный нюанс – файлы нужно будет переименовать
$ python ozi2geotiff.py <params> в вид ########.img, где ######## – 8 цифр, внутреннее представ-
ление имени файла. Как получить эту цифру правильно, я не по-
Если не указывать параметры – будет выведен экран справ- нял, поэтому сделал в лоб:
ки. Использовать скрипт достаточно просто:
$ strings karta.img | grep 'RGN'
$ ozi2geotiff -i karta.map --in-img=karta.gif -o karta.tiff
Записей будет несколько, но смысл понятен. Затем все эти
Можно ещё добавить параметр -v для более подробного вы- файлы собираем в одной директории и выполняем команду:
вода. Что же за параметры мы использовали?
 -i karta.map – задаем файл привязки, обязательный пара- $ mkgmap --input-file=00000001.img ... ↵
--input-file=0000000n.img --tdbfile
метр;
 --in-img=karta.gif – задаем растр, к которому применяется В результате у нас дополнительно появятся два фай-
привязка (формат GIF здесь только для примера), параметр ла osmmap.img и osmmap.tdb. Загружая карту, выбираем
не обязательный, если путь к растровой карте в map-файле osmmap.tdb, затем будет предложено выбрать .img-файл, выби-
задан корректно (в этом случае он берется оттуда); раем osmmap.img, все нужные загрузятся автоматически.
 -o karta.tiff – карта в формате GeoTiff, её мы уже сможем за- Естественно, всё это вручную делать утомительно, поэтому
гружать в QLandKarte GT и работать. я подготовил скрипт img2tdb:

Рисунок 3. Загруженные векторные карты Garmin и трек с деталями

Электронное приложение «Open Source»


12 №68, 15 сентября 2010
#!/bin/sh После сохранения скрипт надо сделать исполняемым:
$ chmod +x img2tdb
use()
{
cat << _ EOF _
Use: $0 <out-dir> <1.img> ... [n.img]
_ EOF _ Пользоваться им просто:
}
$ img2tdb <out dir> <file1.img> ... [filen.img]
if [ -z "$2" -o "$1" == "--help" ]; then
use
exit
fi Здесь первый параметр – директория, в которой будут сохра-
няться результаты работы, а дальше идут отдельные img-файлы,
OUT="$1"
IMG="" которые объединяются в альбом.
Можно указывать и маску:
shift
$ img2tdb /tmp/map-out *.img
cwd=`pwd`
mkdir -p "$OUT"
cd "$OUT"
В дальнейшем планирую добавить этот скрипт в пакет
echo "Work dir: `pwd`"
ozi2geotiff.
while [ -n "$1" ]
do
st=`echo "$1" | grep '^/'` Геоинформация: треки, точки, маршруты
if [ -z "$st" ]; then Настала очередь геоинформации. Выше я писал, что QLandKarte
in _ name="$cwd/$1"
else GT поддерживает не так много форматов, среди которых нет
in _ name="$1" форматов OziExplorer, но есть GPX, поэтому задачу ставим так:
fi
преобразовать форматы Ozi в GPX. В отличие от карт, набор ин-
int _ name=`strings "$in _ name" | grep 'RGN' | ↵ струментов тут побогаче – начнем с программы GPSBabel (http://
grep -v 'GARMIN' | head -1 | awk -F'RGN' '{print $1}'`
out _ name="$int _ name.img" www.gpsbabel.org), которая имеется в community-репозитории
# Arch Linux (похоже, единственная из этого обзора, которую
echo "Copy '$in _ name' -> '$out _ name'" не нужно собирать). Итак, GPSBabel – программа для закачки
cp "$in _ name" "$out _ name" треков, путевых точек и т.п. на GPS-устройства, а также для по-
IMG="$IMG --input-file=$out _ name" лучения этой информации с устройства и конвертации данных
в различных форматах. Для нас же главное, что программа под-
shift
done держивает форматы файлов OziExplorer и GPX. Синтаксис ко-
манды вновь тривиален:
echo "Run 'mkgmap' and prepare TDB map album"
mkgmap $IMG --tdbfile
$ gpsbabel -i ozi -f track.plt -o gpx -F track.gpx
echo "Done" $ gpsbabel -i ozi -f dots.wpt -o gpx -F dots.gpx

Рисунок 4. Загруженная растровая привязанная карта (GeoTiff) этого же района и трек

Электронное приложение «Open Source»


№68, 15 сентября 2010 13
Небольшие пояснения: ки, в пакете для Arch Linux они вызываются соответственно
 -i – формат входного файла; routeconverter и routeconverter-cli.
 -o – формат выходного файла;
 -f – входной файл; Что в итоге?
 -F – выходной файл. В результате, мы имеем базовый набор утилит для нормаль-
ной работы с картами под Linux, можем использовать привяз-
Остальные опции доступны при вызове: ки OziExplorer, его файлы с путевыми точками, треками с ми-
$ gpsbabel --help нимальными трудозатратами. На рис. 2-4 представлены сним-
ки экрана QLandKarte GT с загруженными данными для пред-
стоящего похода.
Чтобы каждый раз не писать эти команды, я поместил про-
стой скрипт ozi2gpx в пакет ozi2geotiff. Вызывается он так: 1. Картографические приложения, а также визуализация – http://
$ ozi2geotiff <OziExplorer file: plt, wpt> <out.gpx> hatred.homelinux.net/wiki/zhurnal/2008-10-24_13.49_kartograficheskie_
prilozhenija_a_tak_zhe_vizualizacija.
2. Работа с Qlandkarte GT – http://sites.google.com/site/osmbelarus/Home/
Всё просто и лаконично. Для данной программы в AUR есть manuals/qlandkarte-gt. Это общая страница для размещения информа-
графическая оболочка под названием gebabbel (http://gebabbel. ции, но с 2008 года новых источников не появилось. Обзор интерфей-
sourceforge.net). Так что, если командная строка вас пугает, мо- са – http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/
жете воспользоваться её возможностями. qlandkarte-main-window. Привязка растровых материалов – http://sites.
Вторая программа для тех же нужд называется RouteConverter google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-
(http://www.routeconverter.de/en), требует для своей работы Java, make-geotiff. Создание коллекций (атласов) – http://sites.google.com/
имеет графический и консольный интерфейсы. Пакет для Arch site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-collections.
Linux я подготовил и выложил в AUR. У этой программы есть од- 3. Подготовка карты для qlandkarte – http://takeoff.mipt.ru/wiki/index.php
на так называемая killer feature: она подключается к GoogleMaps ?title=%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%B
и при загрузке трека или путевой точки рисует на карте оные E%D0%B2%D0%BA%D0%B0_%D0%BA%D0%B0%D1%80%D1%82%D
и,  соответственно, позиционирует положение на карте в нуж- 1%8B_%D0%B4%D0%BB%D1%8F_qlandkarte.
ное время – это может быть очень удобно для быстрого разбо- 4. Установка QLandkarte GT для работы с GPS Garmin EtrexVistaHCx –
ра и сортировки треков. http://community.livejournal.com/ru_nix/11337.html.
Как при помощи неё конвертировать? Тоже просто: 5. Garmin GPSmap 60Cx: подключение и использование в Linux – http://
 File → Open... – указываем формат и открываем файл; sovety.blogspot.com/2008/06/garmin-gpsmap-60cx-linux.html.
 File → Save as... – указываем формат и сохраняем файл.
Александр Дроздов
Есть и вариант программы с интерфейсом командной стро- (hatred@inbox.ru)

«Open Source» приглашает  истории успеха применения/распро-


странения ПО с открытым кодом;
 философия и идеология Free Software;

к сотрудничеству!  разработка приложений с применени-


ем средств Open Source.

Э
лектронное приложение «Open Open Source Software): теория и практиче- Желательный объем статей: 6000
Source» всегда открыто для сотруд- ское применение; исторические сведения, или 12000 символов (с пробелами). При-
ничества с новыми авторами, с чи- анализ сегодняшнего положения, прогно- меры актуальных сейчас тем для статей
тателями и их конструктивными предло- зы на будущее и другие аспекты, связан- публикуются на http://osa.samag.ru/todo.
жениями по улучшению издания, обо- ные с открытым ПО. Но не стоит строго ограничиваться при-
снованной критикой и любыми отзывами, Среди наиболее интересных на дан- веденными выше рамками!
с компаниями, занимающимися разработ- ный момент общих тем можно выделить: Публичное обсуждение «Open Source»
кой и продвижением программного обес-  общие обзоры новых и/или интерес- проводится на форуме сайта журнала
печения с открытым кодом. Приветству- ных проектов Open Source и конкрет- «Системный администратор» по адресу:
ются все энтузиасты, желающие опубли- ных приложений, свежих версий дис- http://osa.samag.ru/forum. Связаться с  ре-
ковать у нас свои статьи. Тематика нуж- трибутивов Linux, *BSD и других систем; дакцией можно по электронной почте
ных материалов очевидна из предназна-  советы и рекомендации новичкам osa@samag.ru.
чения приложения, то есть FOSS (Free and в GNU; P.S. За статьи мы платим.

Электронное приложение «Open Source»


14 №68, 15 сентября 2010

Подписные индексы:
Подписка на журнал
20780 * «Системный администратор»
+ диск с архивом статей
Российская Федерация  Казахстан – по каталогу «Россий-
 Подписной индекс: годовой – 20780, ская пресса» через ОАО «Казпочта»
81655 **

полугодовой – 81655
Каталог агентства «Роспечать»
и ЗАО «Евразия пресс»
 Беларусь – по каталогу изданий стран
без диска
 Подписной индекс: годовой – 88099, СНГ через РГО «Белпочта» (220050,
по каталогу агентства полугодовой – 87836 г. Минск, пр-т Ф. Скорины, 10)
«Роспечать» Объединенный каталог «Пресса  Узбекистан – по каталогу «Davriy
России» nashrlar», российские издания через
Адресный каталог «Подписка за ра- агентство по распространению печати
88099 *
+ диск с архивом статей
бочим столом»
Адресный каталог «Библиотечный
«Davriy nashrlar» (7000029, г. Ташкент,
пл. Мустакиллик, 5/3, офис 33)
каталог»  Армения – по списку номенклатуры
 Альтернативные подписные агентства: «АРЗИ» через ГЗАО «Армпечать»
87836
без диска
** агентство «Интер-Почта»
(495) 500‑00-60, курьерская доставка
(375005, г. Ереван, пл. Сасунци Давида,
д. 2) и ЗАО «Контакт-Мамул» (375002,
по Москве г. Ереван, ул. Сарьяна, 22)
по каталогу агентства агентство «Вся Пресса»  Грузия – по списк у номенк лат у-
«Пресса России» (495) 787‑34‑47 ры «АРЗИ» через АО «Сакпресса»
агентство «Курьер-Прессервис» (380019, г. Тбилиси, ул. Хошараульская,
агентство «ООО Урал-Пресс» 29) и АО «Мацне» (380060, г. Тбилиси,
(343) 375-62-74 пр-т Гамсахурдия, 42)
*
Годовой
**
Полугодовой  Подписка On-line  Молдавия – по каталогу через ГП «По-
http://www.arzi.ru шта Молдовей» (МД‑2012, г. Кишинев,
***
Диск вкладывается
в февральский http://www.gazety.ru бул. Штефан чел Маре, 134)
номер журнала, http://www.presscafe.ru по списку через ГУП «Почта Придне-
распространяется только стровья» (МD-3300, г. Тирасполь, ул.
на территории России СНГ Ленина, 17)
В странах СНГ подписка принимается по прайс-листу через ООО агентство
в почтовых отделениях по националь- «Editil Periodice» (МД‑2012, г. Киши-
ным каталогам или по списку номенкла- нев, бул. Штефан чел Маре, 134)
туры «АРЗИ»:  Подписка для Украины:
 Азербайджан – по объединенному Киевский главпочтамт
каталогу российских изданий через Подписное агентство «KSS»
предприятие по распространению пе- Телефон/факс (044)464-0220
чати «Гасид» (370102, г. Баку, ул. Джа-
вадхана, 21)

Электронное приложение «Open Source»