Доброго времени суток, хабрачеловек!
На домашней странице Ubuntu снова обратный отсчет. Подпись гласит «The line where / two surfaces meet». Я не знаю, к какому событию он приурочен, но в коментариях на одном сайте здорово шутят — «Canonical выпустит холодильники с Ubuntu». И если речь идет об Ubuntu Phone, то подпись очень даже правдивая. С одной стороны шквал негатива («Еще одна мобильная ОС» и т.д. и т.п.), с другой — искреннее желание как можно скорее увидеть релиз своей любимой ОС на своем смартфоне. Как вы можете помнить, вместе с анонсом Ubuntu Phone так же сообщалось о привлечении волонтеров в разработку 12 базовых приложений для это ОС (core applications). Так вышло, что будучи членом одной из команд, я обладаю некоторой информацией, которая может показаться интересной. Статья не претендует на «взгляд из самых первых рядов», а в формате простого повествования рассказывает о некоторых деталях нашей работы изнутри. К тому же я, помнится, обещал делиться информацией о ходе процесса. С другой стороны, я не могу безэмоционально все рассказывать, так что в статье много нетехнических деталей и художественного повествования. Но если Вы заинтересованы, прошу под кат!
Как все начиналось
А началось оно все (как и многие прекрасные вещи) со спонтанного решения. Так уж вышло, что до этого я не участвовал в OpenSource разработках, но всегда хотелось, а тут вот к тому же почувствовал, что «дорос» как говорится, да и специфика разработки моя, Qt Quick. Заполнил простую форму на сайте. В ней всего лишь нужно было указать свой уровень C++, QML и JavaScript. Притом на честность, никаких проверок не было. Отправил и забыл. Через пару дней пришло письмо, содержание которого смысла не имеет приводить, вкратце «Вы нам подходите, мы выбрали Вас для участия в разработке… барабанная дробь… RSS Reader'a!». Оставалось только сказать «Согласен» и… понеслось!
Формирование команды
Поначалу я очень легкомысленно отнесся к тематике приложения. «Любой может сделать RSS Reader». Даже в примерах работы с XML и то часто ленты новостей парсят. И, формально говоря, я не ошибся, ибо создание RSS Reader'a — довольно простая задача. Однако создание приложения, достойного Ubuntu Phone, полного своими концепциями и инновациями, приправленного духом Ubuntu — нет. Но к этому я пришел чуть позже, но а что было тогда? Тогда я только лишь удивлялся, почему в команду набирается 15 (!) членов (заметьте, не человек). За минусом работников canonical, руководителей проекта и ботов ( вроде Jenkins'a ) оставалось 7-8, что тем не менее казалось перебором. Однако это, несомненно, проверенное опытом решение. В первые же дни еще даже не разработки, а только становления процесса, несколько людей тут же отошли от дел. У кого-то личные проблемы, у кого-то в семье, у кого-то время закончилось, у кого-то у кота день рождения =) Но факт остается фактом. Итого в команде нас осталось только три человека: я, Джои (Китай) и Свен Арне (Швеция. Не уверен, что правильно написал его двойное имя на русском). Оба моих тиммейта достаточно опытные в разработке с использованием Qt (в среднем 4 года) и QML (2 года). Но и с таким опытом они порой удивляли меня своими велосипедами. Начало у нас было классическое, «Лебедь, рак и щука», кто во что горазд. Наверное у всех так, не берусь судить, но мы быстро справились с неразберихой — трудолюбивый Джои набросал документ с основными этапами разработки, тогда как я заложил основу в виде первого рабочего образца.
Цели и средства
Итак, перед нами была поставлена цель — разработать RSS Reader, используя Ubuntu QML Toolkit и Qt Quick везде, где это возможно. В брифинге так же значилось, что модуль на C++ можно было писать только в самой критической ситуации (например, парни из команды файлового менеджера по объективным причинам прибегли к помощи C++ сразу). Хочется сказать, что на Qt Quick основан весь графический интерфейс ОС, что не может не радовать приверженцев библиотеки.
На первом этапе нашей команде было сложно побороть проблему загрузки и парсинга RSS лент, которые представляют собой обычный XML, что искушенный читатель наверняка знает. XmlListModel умеет работать с url в качестве источника, однако не обеспечивает требуемой нам информативности при неудачной загрузке. Позднее мы пришли к использованию XMLHttpRequest с последующим парсингом в двух XmlListModel (информация о ленте целиком и о ее записях отдельно). Но тем не менее такая реализация больше подходила для демо, чем для реального проекта, ибо она немного «наивная» чтоли. Сейчас ведется активная работа по переходу на использование сторонних сервисов для работы с RSS. Для хранения информации для чтения в оффлайне заиспользовали Qt Quick Local Storage API (читайте SQLite). Не уверен, стоит ли раскрывать еще бОльшее количество деталей реализации в самом посте, быть может лучше ответить в комментариях?
Разработка и кооперация
По сути вся наша совместная деятельность разруливается с помощью сайта launchpad. Как систему контроля версий предлагалось использовать bazaar. До этого у меня был не очень большой опыт использования git в личных проектах, но его хватило для того, чтобы провести аналогии с bzr и без особого труда пользоваться новой для меня системой контроля версий. Принцип стандартный — для новой фичи создается новая ветка, которая, как правило, является личной, а затем сливается с trunk'ом. Благо Qt Creator (кстати в SDK включена кастомная версия криэйтора с дополнительными пунктами меню и т.д.) обладает встроенными средствами для работы с bzr. Распределение задач происходит с помощью blueprints — документов с перечнем задач и привязкой к разработчику. У них очень простой синтаксис, [имя] задача: прогресс. Прогресс может быть TODO, DONE, INPROGRESS (Может быть их больше, но эти три были востребованы у нас). Сайт обладает внутренними средствами, позволяющими визуализировать выполнение задач в проектах с помощью blueprints. Визуализация всего прогресса работы над core apps тоже выглядит весьма информативно. Так же сайт содержит внутреннюю систему багтрекинга. К сожалению, время от времени приходится регистрировать баги на разработчиков toolkit'a. К слову — эти самые разработчики часто используют не Qt Quick way в реализации той или иной фичи, стараюсь в таких случаях тоже делать замечания.
Встречи. Кооперация с дизайнерами
У нас еженедельные встречи команды (руководители тоже присутствуют) по четвергам, а так же встречи с дизайнерами по пятницам. На внутренних встречах (которые проходят в IRC'e) стараются в первую очередь выяснить, нет ли блокировок, все ли идет нормально, успеваем ли в срок и т.д. Одним словом организационные вопросы. Ой, получилось двумя =) Пятничные встречи немного более интересны — разговариваем с помощью Google Hangouts. Для меня лично это непростая практика разговора на английском в том числе (благо никто из присутствующих обычно не native speaker, ошибки прощают). Обсуждаем тонкие вопросы реализации некоторых функций приложения, вопросы интернационализации и так далее. Работает с нами некто Лизетт (Lisette). Очень приятная женщина (да, именно женщина, уже совсем не девушка, я впервые был даже немного удивлен, что дизайнер такого проекта не молодежь; позже выяснилось, что она очень опытный и прошаренный в UX человек), располагает к себе, достаточно быстро разработала концепцию дизайна, известную как «Shorts» — именно так и стал называться наш RSS Reader. Сейчас как раз работаем на тем, чтобы привести внешний в соответствие ее дизайну.
Прогресс Core Applications в целом
Не мудрено, что несколько приложений вырвались вперед. Это калькулятор, погода и часы. Снова будет ошибкой сказать, что они простые, но работа над ними здорово параллелится. Другие же отстали — самое печальное положение сейчас у почтового клиента, насколько я знаю. Там фактически полностью будет перенабрана команда. Документы и терминал развиваются своим чередом, без особых прорывов и оставаний. Файловый менеджер до недавнего времени был полон багов, на Hack Days велась активная работа по его улучшению.
Стоит заметить, что из 12 приложений четыре было выделено, как социальные. Это Facebook, Youtube, Twitter и RSS Reader. На данный момент жив только наш проект) Остальные были остановлены из-за какой-то неразберихи с правами и недовольством компаний. Свято место пусто не бывает, так что на их месте возникли новые, по моему личному мнению уже «менее базовые» приложения, вроде игры Sudoku.
В августе у всех проектов будет Beta. В сентябре Release. Сейчас примерно Alpha-2.
Рассказывал участник команды разработки RSS Reader'a в рамках программы 12 Core Applications for Ubuntu Phone.
Готов поделиться всей информацией, которую по причинам позднего часа забыл упомянуть в статье, так что задавайте вопросы!
UPD По прошествию пары дней я задам накопившееся вопросы, на которые не могу точно ответить, кому-либо из Canonical и добавлю ответы в пост!