23 марта прошел первый день тренинга по MAEMO, который состоялся в здании НИВЦ МГУ им. Ломоносова в Москве.
В этот день были рассмотрены следующие темы:
Сначала расскажу об организации тренинга.
На входе традиционно всем выдали бейджи. А также диск с необходимым ПО, документацией и презентациями.
Были перерывы на кофе-брейк. Кофе хоть и растворимый, но один из лучших. Также чай, минералка и традиционные печеньки.
Обед в программу тренинга не входит, впрочем про обед расскажу позже, это отдельная тема.
Тренинг проходил по следующей схеме, первые две вводные темы, потом GTK, потом Hildon и задание на самостоятельное выполнение, далее снова про некоторые особенности Hildon и MAEMO и опять задание.
Первая презентация была обзорной, ее делал Дмитрий Маличенко, СПБ ГУАП.
Важной частью вступления было описание архитектуры MAEMO, основные компоненты вы можете видеть на изображении
В принципе больше из вступительной рассказать не о чем, так как дальше шли и так уж известные вещи, на вроде описания железа N900.
Доклад делал тот же докладчик. Эту презентацию я также отнес к вступительным, потому что в общем-то все, что его рамках было рассказано, не представляет ничего нового, однако остановлюсь на наиболее важных моментах:
Вход в scratchbox выполняется командой — /scratchbox/login.
С помощью скрипта sb-menu в скретчбоксе можно поменять окружение и платформу для сборки и эмуляции.
Для вывода графического экрана эмулятора вне скретчбокса нужно запустить Xephyr следующей командой:
а для запуска самой MAEMO выполнить в скретчбоксе команды:
Для запуска графического приложения из консоли скретчбокса нужно использовать скрипт run-standalone.sh
Он добавляет запускаемому приложению необходимое окружение.
Для разработки приложений минимум потребуются:
Большинство из этого уже должно быть установлено, но если чего-то не хватает, вы можете установить это сами привычным apt'ом.
Единственной 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'шника это было абсолютно новой информацией.
Доклад делал: Евгений Линский, СПБ ГУАП
GTK+ — графическая объектно-ориентированная библиотека на С.
Это накладывает на стиль разработки сильный отпечаток т. к. «чистый» C не поддерживает классы и объекты.
пример:
На С++ вы бы писали так:
На С же вам придется писать так:
С моей точки зрения это жутковато, но об этом и вообще о целесообразности использования GTK позже.
Основные компоненты библиотеки вы можете посмотреть на изображении
Основой набора виджетов 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 сообщества.
Аудитория во время кофе-брейка:
Организаторы и докладчики (СПБ ГУАП)
Демонстрация приложения-задачи из задания по переносу Desktop-GTK приложения на MAEMO-Hildon в эмуляторе Scratchbbox
Тоже самое приложение но уже на устройстве, портированное собственноручно мной (на фото моя рука, кстати :) )
Про второй день тренинга вам расскажет хабрапользователь tass.
За сим прошу откланяться, спасибо за то что читали.
Сорокин Василий: @VasiliySorokin.
Кормалев Денис: @BlackTass.
В этот день были рассмотрены следующие темы:
- Введение в MAEMO. Обзор устройств и версий.
- Рабочее окружение. Обзор IDE.
- Введение в GTK
- Введение в Hildon
Предисловие
Сначала расскажу об организации тренинга.
На входе традиционно всем выдали бейджи. А также диск с необходимым ПО, документацией и презентациями.
Были перерывы на кофе-брейк. Кофе хоть и растворимый, но один из лучших. Также чай, минералка и традиционные печеньки.
Обед в программу тренинга не входит, впрочем про обед расскажу позже, это отдельная тема.
Тренинг проходил по следующей схеме, первые две вводные темы, потом GTK, потом Hildon и задание на самостоятельное выполнение, далее снова про некоторые особенности Hildon и MAEMO и опять задание.
Введение в MAEMO. Обзор устройств и версий.
Первая презентация была обзорной, ее делал Дмитрий Маличенко, СПБ ГУАП.
Важной частью вступления было описание архитектуры MAEMO, основные компоненты вы можете видеть на изображении
- 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
Единственной 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'шника это было абсолютно новой информацией.
Доклад делал: Евгений Линский, СПБ ГУАП
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
Основные компоненты библиотеки вы можете посмотреть на изображении
- 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 сообщества.
Еще несколько фотографий
Аудитория во время кофе-брейка:
Организаторы и докладчики (СПБ ГУАП)
Демонстрация приложения-задачи из задания по переносу Desktop-GTK приложения на MAEMO-Hildon в эмуляторе Scratchbbox
Тоже самое приложение но уже на устройстве, портированное собственноручно мной (на фото моя рука, кстати :) )
Про второй день тренинга вам расскажет хабрапользователь tass.
За сим прошу откланяться, спасибо за то что читали.
Авторы
Сорокин Василий: @VasiliySorokin.
Кормалев Денис: @BlackTass.