Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Как выглядит разработка для Blackberry 10

27 комментариев

Несмотря на то что мне повезло в жизни работать с достаточно продвинутыми IDE, я все же иногда смотрю на другие среды разработки дабы понять как же все там плохо, что можно улучшить, и главное понять какой же вообще разработческий experience у того кто пишет для этой системы. Вот недавно я решил узнать положение дел в стеке Blackberry, особенно если учесть что недавно был выпущен их Q10 (жаль что по нереальной цене).

Языки и Технологии

Вот у Android все понятно: программы пишутся на Java. Для iOS тоже все более менее понятно: нужно использовать Objective-C, хотя Xamarin предлагает разрабатывать эти приложения в Visual Studio на C# (я это делаю, т.к. хочется использовать R#, и отладка из Студии реально работает, но это дорогая опция). На нишевых платформах все очень неоднородно — под Windows Phone можно писать на C#, C++ или WinJS (это адское месиво из HTML, CSS и JS) а на WinJS для WP8 вроде как нельзя писать. На Blackberry, правда, все еще хуже. Варианты примерно такие:

  • Использовать Java, но это только для «старых» версий, т.е. не для современной BB10. Отпадает сразу.

  • Портирование приложений Android. Ход хороший, конечно, но уверен что реализовано не без косяков. К тому же, не катит для тех, у кого приложений нет вообще.

  • Адаптация приложений Adobe AIR. Та же ситуация что и с Андроидом, плюс я не знаю кто нынче вообще кроме Adobe использует AIR. Последнее приложение которое я видел на AIR был «тяжелый» TweetDeck, но потом он магически материализовал себя как приложение Google Chrome и потребность в Standalone версии отпала вообще.

  • С++. Аааааа! Для написания «современных» BB10 приложений нужно использовать С++!

Я ничего не имею против плюсов, но видев тот адъ который творился с использованием плюсов для Symbian (привет двухэтапное создание объектов), энтузиазма у меня особого не наблюдалось. Тем не менее, решил скачать SDK.

Создание проекта

Всегда интересно, что же предлагает IDE на момент создания проекта. Ведь для мобильных устройств нужно настроить как минимум deployment targets, а это та еще задача, пусть у BB10 еще и нет той фрагментации что у Андроида. Итак, поехали.

Cascades – это то как называется новый интерфейс BB10. Следующий этап – выбор шаблона проекта, при условии что мы решили делать UI а не игру на OpenGL:

Далее все интересней – после генерации проекта (был еще один скрин для названия, я его не стал приводить), появляется мегаокно настроек. Первое, что эта штука делает – это находит ваши девайся или симуляторы:

Далее идет вопрос относительно того, как вы планируете подписывать приложения. Это, конечно, вопрос, т.к. я к моменту написания поста не был зарегистрирован ни на каких сайтах. Подсказка тут в том что это дело можно прокинуть, но я решил посмотреть… и вот самое важное, что должен видеть каждый:

А вот это очень правильно хотя… если учесть как у них там дела… хотя нет, дела у них не так плохо:

Ну да ладно, я зарегился и BBRY (это их новый тикер, раньше был RIMM) уведомил меня о том что ждать часа этак 2.

Интересно, зачем 2 часа на то чтобы выдать ключи? Вероятно там, на том конце, кто-то пробивает мое имя в Гугле чтобы узнать, являюсь ли я of good character. Между прочим, character checks все еще существуют в реале, например для того чтобы получить британский паспорт или права, за вас должен поручиться резидент. Но в данном случае это как-то особенно странно. Дайте мне мои ключи!!!

QNX Momentix IDE

Blackberry поставляется со своей собственной IDE для разработки под названием Momentix IDE. Это только звучит красиво. На самом деле – это Eclipse со всеми вытекающими. Какими? Ну во-первых, система не понимает свой собственный синтаксис:

Автодополнение мало того что выглядит неаппетитно, да еще и тормозит впридачу.

Редактирование UI происходит на языке QML который, не являясь XML-образным, вообще непонятно как редактировать. То есть выглядит это например так:

Автодополнения тут нет вообще (а мы еще ругаемся на XAML), но зато ошибку он подсвечивает. Конечно, этот же QML можно редактировать и в визуальном редакторе:

Все бы хорошо но вот незадача: контролы почему-то нельзя тащить на редактор, зато можно тащить на еще один тулбокс под названием Outline:

Эмулятор

Признаюсь: я все еще зол на то что Microsoft заставляет пользователей устанавливать Windows 8 только для того чтобы воспользоваться ролью Hyper-V (которая, пакость, еще требует обновленных процов, Core 4 Quad якобы не катит, нужен core i7) под которой запускать эмулятор. Слава Рогам что с Blackberry все проще – вам просто дается VM под VMWare, и все.

Первое что замечаешь — это варианты запуска OS для разных устройств. То что все это в одной виртуалке – это удобно, не люблю когда плодят сущности. Что не очень радует так это наличие Safe Mode, что как бы намекает что «что-то может пойти не так». (И действительно, на практике у меня система после перезапуска просто показала черное окно без каких-либо намеков на активность.)

Должен признаться — QNX Neutrino, подпиленный под Blackberry, выглядит неплохо:

Конечно, UI этот не для фэнбоев Apple а скорее для людей которые просто хотят to get shit done, поэтому собственно мне Q10 и нравится (цена не нравится совсем, правда).

Ну да ладно, вся суть в том, что имея приложение в Momentix IDE, можно нехитрой манипуляцией запустить его в эмуляторе. К сожалению, при первом запуске я получил лишь:

Поначалу, до того как я добавил ключи (которых ждал 2 часа), не работало вообще ничего, я потерял много времени чтобы все полетело. Но потом все запустилось и я был очень рад увидеть свое (пусть и унылое) приложение:

К слову скажу, что и в симуляторе и в QNX IDE я словил массу багов, один раз переустановил симулятор полностью (не советую его перезапускать) а также потратил лишний час-два на вещи которые просто отказались интуитивно работать.

Пишем Код

У меня обычно первое желание в «плюсовом» проекте – подключить STL и Boost. Но перед этим хочется показать как вообще все происходит. Например, вот как можно создать новый класс:

Добавил #include <vector>, скомпилировал, вроде съело. Это значит что STL, как минимум, работает. Добавляю метод и тут оказывается что IDE добавляет в автодополнение все что вообще только можно:

Это же как сильно нужно ненавидеть разработчиков чтобы в список дополнения залить вообще все, что только можно найти на верхнем уровне. Самое интересное что что моей функции из заголовочного файла в списке вообще нет, что бред и сумасшествие. Да, что там, для member fields автодополнения тоже нет, есть разве что для this-> но дальше него дело не идет.

Решил сделать кнопку. Внезапно в начале ввода атрибута появился комплишн, уже что-то

Смарт-комплишна на этот enum (если это можно так назвать) конечно не было, увы. Кстати, точно так же как и в Visual Studio/XAML, тут есть визуальный редактор свойств, который наверняка может быть полезен:

Для обработки события кнопки можно писать код прямо в QML, что выглядит неидиоматично. Даже XAML не опускается до такого уровня:

Естественно, что поставить брейкпоинт в это место нельзя, т.к. это работает только в кодовых файлах. Кстати, для брейкпоинтов у меня не получилось даже потыкать в левый margin чтобы их ставить, пришлось лезть в меню. Только я запустил все это дело под дебагом, как…

Ну неужели так сложно помочь пользователю синхронизовать все это дело? Почему я должен беспокоиться о том, что последние скачанные пакеты не стыкуются? Еще примечательно что, в отличии от Visual Studio (да и большинства вменяемых IDE), Momentix IDE не восстанавливает window layout из дебажного в обычный после того как вы закрыли отладку. Как холодной рыбой по лицу, чесслово.

Еще интересно то, что дебаггер у меня не сработал где просили но зато сработал где не просили, а именно почему-то воткнулся в main() хотя моего брейкпоинта там не стояло.

Да, и что касается Boost, то нашел на просторах интернета проект, который как раз портирует Boost для Blackberry, так что если что, можно воспользоваться.

Заключение

Понятное дело что для того чтобы понять как все действительно хорошо нужно попользоваться системой месяц-другой. Мое субъективно ощущение что все могло бы быть намного хуже, и что надо благодарить Рога за то, что у Blackberry получилось хоть что-то. По крайней мере, Cascades — неплохая система, и я думаю что Q10 – неплохой девайс.

Другое дело что API сделанный на С++/QML полностью неинтуитивен. Например, вот как выглядит код создания UI из QML. Попробуйте догадаться что тут что.

Так что против BBRY тут два фактора: неудобный язык (все же Java или C# поудобнее будут), а также неудобная IDE. Много ли разработчиков захотят писать под эту платформу? Пока что относительно пустой магазин Blackberry World — плохо для экосистемы, но что если ее забросают недопроектами в стиле тех «соревнований» которые устраивает Microsoft? Этого-то точно не хотелось бы. Лучше мало, но качественно, чем 99% мусора.

У меня пока всё. Comments welcome.

Advertisements

Written by Dmitri

5 мая 2013 в 11:47

Опубликовано в IDE

Tagged with , , , , ,

комментариев 27

Subscribe to comments with RSS.

  1. Вы еще под Bada попробуйте пописать ;) Там тоже весьма весело всё делать. И тормозной эклипс даже там присутсвует. Итог: жутко напоминает Bada

    Denis Ionov

    5 мая 2013 at 12:05

    • Я не сомневаюсь! Еще проблема в том что Bada это как бы недоандроид, то есть вроде как обычные Android приложения для нее писать нельзя (если я правильно понимаю).

      Dmitri

      5 мая 2013 at 12:29

  2. QNX, как и BB, живые трупы. И если QNX ещё как-то конвульсирует (за счёт бывших контрактов с автопромом, который радостно заменяет QNX на Линупс), то BB светит только дырка от гвоздя в гробу — мобильный рынок не так широк как кажется, а пара-тройка игроков в нём насыщает рынок до гланд. Причём едва перетянутыми девелоперами. Кого может перетянуть QNX с её С++ и Дебиклипсе — ума не приложу.

    QNX — мало того, что они просрали собственную же IDE, так ещё сидели как бабка с селёдкой на привозе — выставили ценник и сидели 10 лет, пока селёдка не стухла. Разрабов не привлекали, скидок для ВУЗов не делали, «lite» версий не выпускали, конечно сейчас для них пишет только внутренняя команда!

    Видя их политику, я бы дал им тихо сдохнуть, а потом взял бесплатный QNX и попросил DigitalMars портировать туда D. Вот это был бы номер!

    Thorn

    5 мая 2013 at 12:19

    • Тут вот какая штука — все это конечно правильно, но осталась очень странная группа пользователей (я в том числе) которым нужна хардварная клава. Понятно что Z10 айфону не конкурент, но Q10 вроде как сам по себе (хотя у Нокии есть Asha) и соответственно они взяли и выставили невменяемый ценник (почти $900) на модель которая явно того не стоит. Так что даже я хоть и хотел взять Q10, но пока не буду. Особенно если учесть что тут Нокия например прислала Lumia 920 бесплатно, «за красивые глаза», не смотря на то что я для них ни одного приложения еще не написал (и вряд ли напишу).

      Dmitri

      5 мая 2013 at 12:33

  3. На нишевых платформах все очень неоднородно — под Windows Phone можно писать на C#, C++ или WinJS (это адское месиво из HTML, CSS и JS).

    Там все очень даже однородно. Обычный софт пишут на С#, игры на С++ (только WP8), а на WinJS писать вообще нельзя.

    Гость

    5 мая 2013 at 12:30

    • а на WinJS писать вообще нельзя

      Да, точно, ступил.
      Конечно C# в 10 раз удобней чем C++, опять же нет таких адских проблем с портабельностью.

      Dmitri

      5 мая 2013 at 12:34

  4. 1) Автодополнение в QML в QDE есть — не знаю почему у вас не работало.
    2) Субъективно QML гораздо приятнее и удобнее того же XAML
    3) Ту же связку Qt/QML использовала Nokia в N9, планирует использовать Ubuntu во всех будущих ОС (десктоп/телефон/планшет) — т.е. подход довольно современный.

    vansickle (@genvansickle)

    6 мая 2013 at 16:18

  5. AppWorld для старта по количеству приложений отнюдь не мал, но большинство мусорные.

    vansickle (@genvansickle)

    6 мая 2013 at 16:21

  6. > Естественно, что поставить брейкпоинт в это место нельзя, т.к. это работает только в кодовых файлах.

    Можно, надо включить отладку для JS

    vansickle (@genvansickle)

    6 мая 2013 at 16:32

    • JS?

      Dmitri

      6 мая 2013 at 17:49

      • Код обработчиков сигналов который вы написали в «Для обработки события кнопки можно писать код прямо в QML, что выглядит неидиоматично.» — это JavaScript

        vansickle (@genvansickle)

        6 мая 2013 at 19:34

        • OMFG… а я думал что это плюсы, и еще удивляюсь почему ничего не исполняется. Кстати, я включил опцию

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

          Dmitri

          6 мая 2013 at 20:19

        • Похоже на баг, попробуйте двойным кликом на левом margin поставить — добавится

        • Да, так получилось, спасибо.

          Dmitri

          15 мая 2013 at 14:56

  7. > Даже XAML не опускается до такого уровня

    угу, в XAML для простых UI-вещей надо приделывать какую-нибудь неудобную декларативную фигню — binding там с конвертерами описать или еще что, вместо того чтобы строчку кода на JS

    vansickle (@genvansickle)

    6 мая 2013 at 16:37

  8. >Так что против BBRY тут два фактора: неудобный язык (все же Java или C# поудобнее будут), а также неудобная IDE
    Вообще-то есть такая IDE как QtCreator, разрабатываемая qt project. В ней есть и более грамотное дополнение C++, и дополнение для QML. Использовать Eclipse для C++ и потом жаловаться на C++ — мсье знает толк в извращениях.

    Жалобы тут только на эклипс должны быть.

    Sergey Shambir

    11 мая 2013 at 13:27

    • Ага, я уже нашел инструкцию по настройке Qt Creator для BB10. Не знаю будет ли у меня время посмотреть на то как там всё.

      Dmitri

      11 мая 2013 at 13:47

    • > Использовать Eclipse для C++ и потом жаловаться на C++ – мсье знает толк в извращениях.

      Eclipse CDT на котором основана IDE для BlackBerry 10 довольно удобный и распространенный инструмент — на нем куча средств разработки основана — от всяких embedded’ков до Nvidia Nsight

      Другое дело что поддержка конкретно Qt/QML тут хуже чем в QtCreator, наверное — но выбор связан с QNX, на которой основан BB10 и QNX Momentics IDE на которой сделана IDE для BB10

  9. Я получил от блэкберри девайс и обещал им разработать софт за это. Но не разработал, потому что все убого. Что меня ожидает, Дмитрий?

    Озамат

    28 мая 2013 at 14:27

    • Тебя проклянут и отлучат от мобильного рая! И ждёт тебя ассемблер с перфокартами!!

      Mememe

      28 мая 2013 at 18:56

    • У Блэкберри как-то странно с девайсами — вместо того чтобы высылать продакшн копии как Нокия, они высылают какие-то модели А, В и так далее, которые как бы не релизные варианты. Интересно зачем…

      Dmitri

      10 июня 2013 at 13:23

  10. BBRY один из наиболее идиотских брендов что мне только встречался. Во-первых, сами аппараты крайне удодские. Особенно удодские они когда за не пойми что просят 20+ тысяч рублей (про q10 в частности). Подарил такой своей девушке недавно, и тоже решил поиграться с IDE, авось, добавлю в их убогий магазин что-нибудь полезное. Плакал горючими слезами от таких «удобств для разработчика», и забил вообще на эту ерунду.
    Вдвойне пожалел потраченных денег на телефон (лучше бы я ей айфон с макбуком подарил) и времени. Надо было сразу зайти в магазин и головой подумать, — приложений мало, значит или никто эти говно-фоны не покупает или какая-то ж*па с разработкой ПО. Оказалось, что и то и другое в квадрате, да еще и за тыщу баксов.

    Алексей

    4 октября 2013 at 0:08

    • Ну, кажется скоро этой компании вообще не будет, точнее она перестанет заниматься всем этим. А жаль, между прочим, т.к. телефоны с клавиатурами нужны, по крайней мере мне. Ну да ладно, куплю дешевый Q10 когда цены упадут.

      Dmitri

      10 октября 2013 at 20:32


Оставить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: