23 марта прошел первый день тренинга по MAEMO, который состоялся в здании НИВЦ МГУ им. Ломоносова в Москве.
В этот день были рассмотрены следующие темы:
Сначала расскажу об организации тренинга.
На входе традиционно всем выдали бейджи. А также диск с необходимым ПО, документацией и презентациями.
Были перерывы на кофе-брейк. Кофе хоть и растворимый, но один из лучших. Также чай, минералка и традиционные печеньки.
Обед в программу тренинга не входит, впрочем про обед расскажу позже, это отдельная тема.
Тренинг проходил по следующей схеме, первые две вводные темы, потом GTK, потом Hildon и задание на самостоятельное выполнение, далее снова про некоторые особенности Hildon и MAEMO и опять задание.
Первая презентация была обзорной, ее делал Дмитрий Маличенко, СПБ ГУАП.
![](http://dl.yarlug.org/misc/MaemoConference/Day0/1.jpg)
Важной частью вступления было описание архитектуры MAEMO, основные компоненты вы можете видеть на изображении
![](http://dl.yarlug.org/misc/MaemoConference/Day0/arc.png)
В принципе больше из вступительной рассказать не о чем, так как дальше шли и так уж известные вещи, на вроде описания железа N900.
Доклад делал тот же докладчик. Эту презентацию я также отнес к вступительным, потому что в общем-то все, что его рамках было рассказано, не представляет ничего нового, однако остановлюсь на наиболее важных моментах:
Вход в scratchbox выполняется командой — /scratchbox/login.
С помощью скрипта sb-menu в скретчбоксе можно поменять окружение и платформу для сборки и эмуляции.
Для вывода графического экрана эмулятора вне скретчбокса нужно запустить Xephyr следующей командой:
а для запуска самой MAEMO выполнить в скретчбоксе команды:
Для запуска графического приложения из консоли скретчбокса нужно использовать скрипт run-standalone.sh
Он добавляет запускаемому приложению необходимое окружение.
Для разработки приложений минимум потребуются:
Большинство из этого уже должно быть установлено, но если чего-то не хватает, вы можете установить это сами привычным apt'ом.
![](http://dl.yarlug.org/misc/MaemoConference/Day0/2.jpg)
Единственной IDE под которой рекомендуют сейчас писать является EsBox — модифицированный Eclipse.
esbox.garage.maemo.org/2nd_edition/index.html
Еще можно использовать интеграцию в «родной» Eclipse
wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Development_Environment/Maemo_Eclipse_Integration
На этом все вступления закончились и началось программирование.
Этот раздел наверняка будет абсолютно не интересен людям работающим с GTK каждый день, если вы один из таких, можете смело пропускать.
Однако, для меня как для Qt'шника это было абсолютно новой информацией.
Доклад делал: Евгений Линский, СПБ ГУАП
![](http://dl.yarlug.org/misc/MaemoConference/Day0/5.jpg)
GTK+ — графическая объектно-ориентированная библиотека на С.
Это накладывает на стиль разработки сильный отпечаток т. к. «чистый» C не поддерживает классы и объекты.
пример:
На С++ вы бы писали так:
На С же вам придется писать так:
С моей точки зрения это жутковато, но об этом и вообще о целесообразности использования GTK позже.
Основные компоненты библиотеки вы можете посмотреть на изображении
![](http://dl.yarlug.org/misc/MaemoConference/Day0/gtk.png)
Основой набора виджетов GTK является базовый графический элемент GtkWidget, он является
базовым классом для всех графических элементов, от него наследую кнопки, меню, тулбары и т. д.
GTK является сигнало-ориентированной библиотекой, т. е. когда происходит некое событие (например нажатие кнопки) испускается сигнал. Разработчик может связать сигнал с неким заранее описанным обработчиком, это делается
функцией g_signal_connect().
Пример простейшей программы на GTK, которая лишь выводить окно и закрывается по «крестику»
В начале выполняется инициализация GTK-окружения функцией gtk_init(),
После создается основное окно программы — gtk_window_new(),
устанавливаются размеры окна и его тайтл,
далее вызывается gtk_widget_show_all(), которая говорит главному окну нарисовать себя и всех своих потомков,
после чего устанавливается обработчик (on_close()) выхода из программы и
выполняется функция gtk_main(), которая запускает главный цикл приложения.
После этого рассказывалось про контейнеры GTK, контейнеры это виджеты в которые можно вкладывать
другие виджеты, рассказывать про них здесь я не буду, всем интересующимся читать введение в GTK
это все достаточно просто.
В конце презентации были рассмотрены несколько примеров приложений, которые вы можете скачать по этой
ссылке.
Доклад делал Евгений Линиский.
Hildon — это графическая библиотека для MAEMO. Hildon является надстройкой над GTK,
добавляющей реализацию специфичную именно для мобильных устройств, например touch-интерфейс ввода.
Hildon полностью копирует интерфейс GTK, заменяя некоторые функции на свои, благодаря чему
позволяет осуществлять взаимодействие через нарисованные элементы.
Например, меню в MAEMO, представляет собой просто лист больших кнопок, на которые удобно нажимать.
Главный ToolBar перемещается вниз, как это принято в MAEMO. Важно отметить, что относительно
ToolBar'а разработчики MAEMO дают следующую рекомендацию — он должен содержать лишь реально часто используемые
функции приложения, все второстепенные функции должны выноситься в меню.
После данной части презентации наступило время «интерактива» и нам было предложено
самим портировать Desktop-gtk приложение на MAEMO-Hildon.
Пример на GTK и результат предложенный автором доклада можно скачать и изучить здесь
Важно отметить, что в отличие от GTK в Hildon'е событие перерисовки канвы выполняется лишь при запуске приложения, но не выполняется при сворачивании/разворачивании окна.
После того как большинство из участников справилось с заданием и был произведен «разбор полетов»
Начался обеденный перерыв. В поисках общепита нами (группой в составе трех человек) был пройден путь ~7км, а все потому, что никто не знал где можно поесть в районе МГУ, и изначально было выбрано неправильное направление.
На продолжение мы опоздали на 15 минут, однако, организаторы опоздали также, и видимо по той же причине.
Так что мы ничего не пропустили.
Стек окон, реализует цепочки следующих друг за другом окон, в котором можно вернуться из верхнего в нижний кнопкой назад, такой подход очень удобен для мобильных приложений.
Создание стекового окна производиться функцией hildon_stackable_window_new();
А переключение на следующее окно функцией gtk_widget_show_all() с параметром — указателем на следующее окно.
В приложении можно реализовывать множество стеков окон.
HildonPannableArea — Виджет-контейнер который может включить в себя количество дочерних виджетов превышающие размер экрана,
и реализующий инерционное скроллирование пальцем. Виджет создается функцией hildon_pannable_area_new().
После презентации опять начался интерактив, и нам было предложено реализовать пример с использованием HildonPannableArea и стека окон.
Однако GTK на сегодня мы уже наелись, и решили попробовать сделать тоже самое на Qt for MAEMO
как установить его и использовать читайте статью хабраюзера tass.
Как и ожидалось, код на Qt оказался в два раза короче, если считать по строкам, и раза в 2.5 оказались короче сами строки. Это лишний раз доказывает, что что-либо должно делаться инструментом подходящим для этого. Тем более MAEMO 6 (или MeeGo) полностью перейдет на Qt в качестве графической библиотеки.
Посмотреть код на Qt можно здесь.
maemo.org/api_refs/5.0/5.0-final — вся необходимая документация для разработки под MAEMO.
fruct.org — сайт организации проводившей тренинг.
maemoworld.ru — сайт русского MAEMO сообщества.
Аудитория во время кофе-брейка:
![](http://dl.yarlug.org/misc/MaemoConference/Day0/3.jpg)
Организаторы и докладчики (СПБ ГУАП)
![](http://dl.yarlug.org/misc/MaemoConference/Day0/4.jpg)
Демонстрация приложения-задачи из задания по переносу Desktop-GTK приложения на MAEMO-Hildon в эмуляторе Scratchbbox
![](http://dl.yarlug.org/misc/MaemoConference/Day0/7.jpg)
Тоже самое приложение но уже на устройстве, портированное собственноручно мной (на фото моя рука, кстати :) )
![](http://dl.yarlug.org/misc/MaemoConference/Day0/10.jpg)
Про второй день тренинга вам расскажет хабрапользователь tass.
За сим прошу откланяться, спасибо за то что читали.
Сорокин Василий: @VasiliySorokin.
Кормалев Денис: @BlackTass.
В этот день были рассмотрены следующие темы:
- Введение в MAEMO. Обзор устройств и версий.
- Рабочее окружение. Обзор IDE.
- Введение в GTK
- Введение в Hildon
Предисловие
Сначала расскажу об организации тренинга.
На входе традиционно всем выдали бейджи. А также диск с необходимым ПО, документацией и презентациями.
Были перерывы на кофе-брейк. Кофе хоть и растворимый, но один из лучших. Также чай, минералка и традиционные печеньки.
Обед в программу тренинга не входит, впрочем про обед расскажу позже, это отдельная тема.
Тренинг проходил по следующей схеме, первые две вводные темы, потом GTK, потом Hildon и задание на самостоятельное выполнение, далее снова про некоторые особенности Hildon и MAEMO и опять задание.
Введение в MAEMO. Обзор устройств и версий.
Первая презентация была обзорной, ее делал Дмитрий Маличенко, СПБ ГУАП.
![](http://dl.yarlug.org/misc/MaemoConference/Day0/1.jpg)
Важной частью вступления было описание архитектуры MAEMO, основные компоненты вы можете видеть на изображении
![](http://dl.yarlug.org/misc/MaemoConference/Day0/arc.png)
- Media Application Framework — абстракция над GStreamer
- GDigikam — надстройка над GStreamer для работы с камерой
- tablet-browser-interface — API к браузеру
- calendar-backend — управление календарем и органайзером
- UI Framework
- Hildon Desktop — оконный менеджер
- Графическая библиотека Hildon
- Библиотека Clutter для работы с 3D графикой
- Input Method Framework — работа с виртуальными клавиатурами и раскладками
- Nokia Graphics
- Звуки, иконки, картинки
- Предустановленное видео, аудио содержимое
- Location Framework — Работа с картами и GPS
- Поиск координат на карте по адресу
- Показать на карте
- Получить информацию с карты
- POI (Points Of Interest)
- Data managment
- GConf — система для хранения и управления настройками приложений
- Адресная книга
- Tracker — инструмент для индексирования и поиска
- Управление пакетами
- Набор инструментов (Toolkit)
- Графические библиотеки gtk+, hildon, cairo и т. д.
- Штрифты, темы
- RTCom (Real Time Communication)
- Фреймворк Telepathy
- Обмен мгновенными сообщениями
- IP-телефония
- Потоковая передача (telepathy-stream-engine)
- Менеджеры соединения (telepathy-sofiasip)
- Фреймворк Telepathy
- Connectivity Framework
- Управление соединением (libconic->D-BUS->ICd)
- Фреймворк GUPnP
- osso-wlan
- Bluez
- Multimedia Framework
- GStreamer, кодеки
- PulseAudio, кодеки
- Cellular
- Сотовая связь
- ПО модема
- System software
- Управление питанием
- Управление состоянием устройства
- upstart
- Maemo Launcher
- D-BUS
- HAL
- clockd, alarmd
- Linux kernel
- Video4Linux
- Сенсоры
- Вибро
- X Window System
- OpenGL ES
- OpenSSL
- Библиотеки C/C++
- BusyBox
- Nolo bootloader
В принципе больше из вступительной рассказать не о чем, так как дальше шли и так уж известные вещи, на вроде описания железа N900.
Рабочее окружение. Обзор IDE.
Доклад делал тот же докладчик. Эту презентацию я также отнес к вступительным, потому что в общем-то все, что его рамках было рассказано, не представляет ничего нового, однако остановлюсь на наиболее важных моментах:
Что потребуется для разработки
- Linux дистрибутив (желательно Debian-based)
- Scratchbbox — набор инструментов для кросс-компиляции и эмуляции (платформы ARM, x86). Инструкцию по установке можно прочитать в статье хабраюзера tass.
- Maemo SDK
- Xephyr — X-сервер
Запуск эмулятора
Вход в scratchbox выполняется командой — /scratchbox/login.
С помощью скрипта sb-menu в скретчбоксе можно поменять окружение и платформу для сборки и эмуляции.
Для вывода графического экрана эмулятора вне скретчбокса нужно запустить Xephyr следующей командой:
$ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac &
а для запуска самой MAEMO выполнить в скретчбоксе команды:
export DISPLAY=:2
af-sb-init.sh start
Для запуска графического приложения из консоли скретчбокса нужно использовать скрипт run-standalone.sh
Он добавляет запускаемому приложению необходимое окружение.
Рабочий инструментарий
Для разработки приложений минимум потребуются:
- gcc
- pkg-config
- make
- GNU Autotools
- Develop библиотека GTK+
Большинство из этого уже должно быть установлено, но если чего-то не хватает, вы можете установить это сами привычным apt'ом.
IDE
![](http://dl.yarlug.org/misc/MaemoConference/Day0/2.jpg)
Единственной IDE под которой рекомендуют сейчас писать является EsBox — модифицированный Eclipse.
esbox.garage.maemo.org/2nd_edition/index.html
Еще можно использовать интеграцию в «родной» Eclipse
wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Development_Environment/Maemo_Eclipse_Integration
На этом все вступления закончились и началось программирование.
Введение в GTK
Этот раздел наверняка будет абсолютно не интересен людям работающим с GTK каждый день, если вы один из таких, можете смело пропускать.
Однако, для меня как для Qt'шника это было абсолютно новой информацией.
Доклад делал: Евгений Линский, СПБ ГУАП
![](http://dl.yarlug.org/misc/MaemoConference/Day0/5.jpg)
GTK+ — графическая объектно-ориентированная библиотека на С.
Это накладывает на стиль разработки сильный отпечаток т. к. «чистый» C не поддерживает классы и объекты.
пример:
На С++ вы бы писали так:
- GtkButton *btn = new GtkButton();
- btn->setLabel("label");
- GtkWindow *w = (GtkWindow *) btn;
* This source code was highlighted with Source Code Highlighter.
На С же вам придется писать так:
- GtkButton *btn = gtk_button_new();
- gtk_button_set_label(btn, "label");
- GtkWindow *w = GTK_WINDOW(btn);
* This source code was highlighted with Source Code Highlighter.
С моей точки зрения это жутковато, но об этом и вообще о целесообразности использования GTK позже.
Структура GTK
Основные компоненты библиотеки вы можете посмотреть на изображении
![](http://dl.yarlug.org/misc/MaemoConference/Day0/gtk.png)
- Libglade — создание интерфейса по XML-описанию (не рассматривается в докладе)
- GDK — низкоуровневый ввод/вывод
- Pango — вывод текста (шрифты, стиль, языки)
- Cairo — Векторная графика, рисование, работа с изображениями (новая библиотека призванная заменить стандартные GDK'шные функции рисования)
- GLib — коллекции, потоки и т. д.
Практическое использование
Основой набора виджетов GTK является базовый графический элемент GtkWidget, он является
базовым классом для всех графических элементов, от него наследую кнопки, меню, тулбары и т. д.
GTK является сигнало-ориентированной библиотекой, т. е. когда происходит некое событие (например нажатие кнопки) испускается сигнал. Разработчик может связать сигнал с неким заранее описанным обработчиком, это делается
функцией g_signal_connect().
Пример простейшей программы на GTK, которая лишь выводить окно и закрывается по «крестику»
- #include <gtk/gtk.h>
-
- static void on_close(GtkWindow *window, gpointer user_data){
- gtk_main_quit();
- }
-
- int main(int argc, char *argv[]){
- GtkWidget *window;
-
- gtk_init(&argc, &argv);
-
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), "simple");
- gtk_widget_set_size_request(window, 300, 100);
-
- gtk_widget_show_all(window);
-
- g_signal_connect(window, "destroy", G_CALLBACK(on_close), NULL);
-
- gtk_main();
- return 0;
- }
* This source code was highlighted with Source Code Highlighter.
В начале выполняется инициализация GTK-окружения функцией gtk_init(),
После создается основное окно программы — gtk_window_new(),
устанавливаются размеры окна и его тайтл,
далее вызывается gtk_widget_show_all(), которая говорит главному окну нарисовать себя и всех своих потомков,
после чего устанавливается обработчик (on_close()) выхода из программы и
выполняется функция gtk_main(), которая запускает главный цикл приложения.
После этого рассказывалось про контейнеры GTK, контейнеры это виджеты в которые можно вкладывать
другие виджеты, рассказывать про них здесь я не буду, всем интересующимся читать введение в GTK
это все достаточно просто.
В конце презентации были рассмотрены несколько примеров приложений, которые вы можете скачать по этой
ссылке.
Введение в Hildon
Доклад делал Евгений Линиский.
Hildon — это графическая библиотека для MAEMO. Hildon является надстройкой над GTK,
добавляющей реализацию специфичную именно для мобильных устройств, например touch-интерфейс ввода.
Hildon полностью копирует интерфейс GTK, заменяя некоторые функции на свои, благодаря чему
позволяет осуществлять взаимодействие через нарисованные элементы.
Например, меню в MAEMO, представляет собой просто лист больших кнопок, на которые удобно нажимать.
Главный ToolBar перемещается вниз, как это принято в MAEMO. Важно отметить, что относительно
ToolBar'а разработчики MAEMO дают следующую рекомендацию — он должен содержать лишь реально часто используемые
функции приложения, все второстепенные функции должны выноситься в меню.
После данной части презентации наступило время «интерактива» и нам было предложено
самим портировать Desktop-gtk приложение на MAEMO-Hildon.
Пример на GTK и результат предложенный автором доклада можно скачать и изучить здесь
Важно отметить, что в отличие от GTK в Hildon'е событие перерисовки канвы выполняется лишь при запуске приложения, но не выполняется при сворачивании/разворачивании окна.
Обед
После того как большинство из участников справилось с заданием и был произведен «разбор полетов»
Начался обеденный перерыв. В поисках общепита нами (группой в составе трех человек) был пройден путь ~7км, а все потому, что никто не знал где можно поесть в районе МГУ, и изначально было выбрано неправильное направление.
На продолжение мы опоздали на 15 минут, однако, организаторы опоздали также, и видимо по той же причине.
Так что мы ничего не пропустили.
Работа с Hildon. Стек окон. HildonPannableArea (кинетическая прокрутка пальцем)
Стек окон, реализует цепочки следующих друг за другом окон, в котором можно вернуться из верхнего в нижний кнопкой назад, такой подход очень удобен для мобильных приложений.
Создание стекового окна производиться функцией hildon_stackable_window_new();
А переключение на следующее окно функцией gtk_widget_show_all() с параметром — указателем на следующее окно.
В приложении можно реализовывать множество стеков окон.
HildonPannableArea — Виджет-контейнер который может включить в себя количество дочерних виджетов превышающие размер экрана,
и реализующий инерционное скроллирование пальцем. Виджет создается функцией hildon_pannable_area_new().
После презентации опять начался интерактив, и нам было предложено реализовать пример с использованием HildonPannableArea и стека окон.
Однако GTK на сегодня мы уже наелись, и решили попробовать сделать тоже самое на Qt for MAEMO
как установить его и использовать читайте статью хабраюзера tass.
Как и ожидалось, код на Qt оказался в два раза короче, если считать по строкам, и раза в 2.5 оказались короче сами строки. Это лишний раз доказывает, что что-либо должно делаться инструментом подходящим для этого. Тем более MAEMO 6 (или MeeGo) полностью перейдет на Qt в качестве графической библиотеки.
Посмотреть код на Qt можно здесь.
Работа с Hildon. Что еще есть интересного.
- HildonBanner — сообщения которые показываются на определенное время (показ уведомлений, например: «соединение установлено»)
- HildonNote — стандартный диалог подтверждения
- HildonFileSelection — диалог для выбора файлов, оптимизированный под маленький экран. (для его использования надо дополнительно подключать библиотеку hildon-fm-2)
Полезные ссылки
maemo.org/api_refs/5.0/5.0-final — вся необходимая документация для разработки под MAEMO.
fruct.org — сайт организации проводившей тренинг.
maemoworld.ru — сайт русского MAEMO сообщества.
Еще несколько фотографий
Аудитория во время кофе-брейка:
![](http://dl.yarlug.org/misc/MaemoConference/Day0/3.jpg)
Организаторы и докладчики (СПБ ГУАП)
![](http://dl.yarlug.org/misc/MaemoConference/Day0/4.jpg)
Демонстрация приложения-задачи из задания по переносу Desktop-GTK приложения на MAEMO-Hildon в эмуляторе Scratchbbox
![](http://dl.yarlug.org/misc/MaemoConference/Day0/7.jpg)
Тоже самое приложение но уже на устройстве, портированное собственноручно мной (на фото моя рука, кстати :) )
![](http://dl.yarlug.org/misc/MaemoConference/Day0/10.jpg)
Про второй день тренинга вам расскажет хабрапользователь tass.
За сим прошу откланяться, спасибо за то что читали.
Авторы
Сорокин Василий: @VasiliySorokin.
Кормалев Денис: @BlackTass.