Как стать автором
Обновить

Тренинг по MAEMO. День 1

Время на прочтение7 мин
Количество просмотров1.5K
23 марта прошел первый день тренинга по MAEMO, который состоялся в здании НИВЦ МГУ им. Ломоносова в Москве.
В этот день были рассмотрены следующие темы:
  • Введение в 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)

  • 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 не поддерживает классы и объекты.
пример:
На С++ вы бы писали так:
  1. GtkButton *btn = new GtkButton();
  2. btn->setLabel("label");
  3. GtkWindow *w = (GtkWindow *) btn;
* This source code was highlighted with Source Code Highlighter.


На С же вам придется писать так:
  1. GtkButton *btn = gtk_button_new();
  2. gtk_button_set_label(btn, "label");
  3. 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, которая лишь выводить окно и закрывается по «крестику»
  1. #include <gtk/gtk.h>
  2.  
  3. static void on_close(GtkWindow *window, gpointer user_data){
  4.   gtk_main_quit();
  5. }
  6.  
  7. int main(int argc, char *argv[]){
  8.   GtkWidget *window;
  9.  
  10.   gtk_init(&argc, &argv);
  11.  
  12.   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  13.   gtk_window_set_title(GTK_WINDOW(window), "simple"); 
  14.   gtk_widget_set_size_request(window, 300, 100);
  15.  
  16.   gtk_widget_show_all(window);   
  17.  
  18.   g_signal_connect(window, "destroy", G_CALLBACK(on_close), NULL);
  19.  
  20.   gtk_main();  
  21.   return 0;
  22. }
* 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.
Теги:
Хабы:
+7
Комментарии16

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн