Разработка для SailfishOS: основы

  • Tutorial
Здравствуйте! На прошлой неделе я написал о том как начать разрабатывать под мобильную платформу Sailfish OS. Сегодня же я хотел бы рассказать о жизненном цикле приложений Sailfish, о создании страниц приложения и управления ими, а также о некоторых специфических особенностях мобильных приложений, которые следует учитывать при разработке под Sailfish OS, в частности управление ориентацией устройства.

В состав SailfishOS SDK (работа с которым была описана в прошлой статье) входит Sailfish Silica — QML модуль, использующийся для создания Sailfish приложений. Данный модуль содержит QML компоненты, которые выглядят и управляются в соответствии со стандартами приложений для Sailfish. Помимо прочего, Sailfish Silica так же содержит инструменты для создания специфических элементов Sailfish приложений, таких как, например, Cover Page, которые были немного затронуты в прошлой статье. Для того, чтобы воспользоваться модулем Sailfish Silica и его инструментами и компонентами, необходимо просто импортировать данный модуль в QML файлы кода приложения. Это будет показано в примере чуть позже.

ApplicationWindow


QML основной любого Sailfish приложения является компонент ApplicationWindow, который описывает окно приложения и содержит пользовательский интерфейс приложения и вообще является основной и обязательной входной точкой загрузки Sailfish приложения. Экраны же приложения реализуются при помощи компонента Page. При этом ApplicationWindow содержит свойство initialPage, позволяющее установить начальный экран приложения. Таким образом минимальное приложение для платформы Sailfish будет выглядеть следующим образом:
import QtQuick 2.2
import Sailfish.Silica 1.0

ApplicationWindow {
    initialPage: Component {
        Page {
            Label {
                text: "Привет, Хабр!"
                anchors.centerIn: parent
            }
        }
    }
}

Данное приложение будет отображать одну простую страницу с надписью Привет, Хабр! посередине. Не обязательно описывать саму страницу прямо в описании свойства, можно просто передать туда id страницы или URL файла, где описана страница.

Page Stack


Помимо начальной страницы, ApplicationWindow так же содержит свойство pageStack — содержащее компонент Page Stack, позволяющий управлять стеком экранов (или страниц) приложения. В примере выше, Page Stack состоит всего из одной страницы, которая была положена на этот стек с помощью свойства initialPage. Добавить страницу на верх стека страниц (и, соответственно, отобразить ее на экране) можно с помощью метода push(), передавая ему в качестве аргумента путь до QML файла со страницей либо id этой страницы. Расширим наш пример, добавив под надпись кнопку, при нажатии на которую будет происходить переход на следующую страницу (будем предполагать, что код этой страницы содержится в файле SecondPage.qml):
ApplicationWindow {
    initialPage: initialPage
    Page {
        id: initialPage
        Label {
            id: helloLabel
            text: "Привет, Хабр!"
            anchors.centerIn: parent
        }
        Button {
            text: "Следующий"
            anchors.top: helloLabel.bottom
            anchors.horizontalCenter: parent.horizontalCenter
            onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml"))
        }
    }
}

В метод push() так же, вместо одной страницы, можно передать массив, содержащий несколько страниц. В таком случае все эти страницы будут добавлены на стек. У данного метода есть еще два опциональных аргумента. Первый — это параметры страницы, а второй — тип операции, определяющий нужно ли использовать анимацию при переходе на заданную страницу. Он может быть одним из двух значений: PageStackAction.Animated или PageStackAction.Immediate. Данный аргумент так же присутствует и во всех других методах Page Stack, которые отвечают за смену текущей страницы (например, метод pop, который будет рассмотрен далее). По умолчанию все переходы осуществляются с анимацией, что удобно. Если по какой-то причине анимация при переходе не нужна, можно вызвать метод следующим образом:
pageStack.push(Qt.resolvedUrl("SecondPage.qml"), { }, PageStackAction.Immediate)

Для того, чтобы вернуться на предыдущую страницу нужно на компоненте Page Stack вызвать метод pop(). Этот метод уберет со стека самую верхнюю страницу и, соответственно, перейдет на страницу назад. Опционально методу можно так же указать некоторую страницу, которая уже есть на стеке. В этом случае, метод уберет со стека все страницы, расположенные на стеке выше указанной. Здесь так же стоит отметить, что переход назад в платформе Sailfish OS реализован с помощью горизонтального свайпа от левого края экрана, однако в Sailfish Silica данный функционал уже реализован и при данном жесте автоматически вызывается метод pop(), что удобно, поскольку разработчику не нужно прилагать усилий для реализации стандартного функционала.

Кроме вышеописанных методов, Page Stack так же предоставляет такие свойства как depth (количество страниц в стеке) и currentPage (текущая страница), а также такие методы, как:
  • replace() — заменяет текущую верхнюю страницу на стеке,
  • pushAttached() — добавляет указанную страницу на верх стека, но не осуществляет переход к ней (пользователь может перейти к данной странице с помощью горизонтального свайпа от правого края экрана),
  • navigateForward() и navigateBack() — осуществляют переход на, соответственно, следующую или предыдущую страницу в стеке относительно текущей, при этом не изменяя сам стек.

Конечно, выше описаны не все методы и свойства компонента Page Stack. Однако, основные, которые могут пригодиться в первую очередь, я попытался описать. Подробнее про компонент можно прочитать в официальной документации.

Dialog


Диалоги в Sailfish OS представляют собой те же самые страницы. Однако, предназначены они для того, чтобы отобразить пользователю некоторые данные, с которыми он может согласиться или не согласиться. Причем сделать он может это как нажатием на кнопки, так и свайпом влево (согласиться) или вправо (отказаться). Поскольку, диалог представляет собой особую страницу, то и в Sailfish Silica компонент Dialog «наследуется» от компонента Page. Заменим в предыдущем примере переход на следующую страницу на показ минимального диалога. Для этого опишем диалог в нашем ApplicationWindow:
ApplicationWindow {
    initialPage: initialPage
    Page {
        id: initialPage
        Label {
            id: helloLabel
            text: "Привет, Хабр!"
            anchors.centerIn: parent
        }
        Button {
            text: "Следующий"
            anchors.top: helloLabel.bottom
            anchors.horizontalCenter: parent.horizontalCenter
            onClicked: pageStack.push(dialog)
        }
    }
    Dialog {
        id: dialog
        Label {
            text: "Я - диалог"
            anchors.centerIn: parent
        }
    }
}

Даже показ диалога осуществляется добавлением его на стек страниц. Если запустить приложение и нажать на кнопку, то мы увидим следующее:

Как видите, внешне данный минимальный диалог ничем не отличается от обычной страницы. Однако, его поведение отличается: при свайпе влево или вправо (или нажатии на белые области в верхнем левом или нижнем углу) диалог закроется и будет показана начальная страница приложения. При этом в зависимости от направления свайпа вызовется соответствующий сигнал диалога (onRejected или onAccepted). Это можно проверить, добавив в диалог обработчики данных сигналов, которые будут изменять текст на главной странице:
onAccepted: helloLabel.text = "Согласился"
onRejected: helloLabel.text = "Отказался"

Так же на диалоге можно с помощью компонента DialogHeader добавить стандартные кнопки «Cancel» и «Accept» вверху диалога. При этом для отображения данных кнопок достаточно просто добавить пустой компонент. Опционально можно так же указать свойство title, которое определит текст, который будет расположен под кнопками. Данный текст обычно используется для отображения вопроса к пользователю. Добавим DialogHeader в диалог из примера выше:
Dialog {
    id: dialog
    DialogHeader {
        title: "Простой диалог"
    }
    Label {
        text: "Я - диалог"
        anchors.centerIn: parent
    }
    onAccepted: helloLabel.text = "Согласился"
    onRejected: helloLabel.text = "Отказался"
}

Теперь он выглядит так:


Следует отметить, что при запуске примера выше вы можете увидеть следующие предупреждения:
[W] unknown:189 - file:///usr/lib/qt5/qml/Sailfish/Silica/DialogHeader.qml:189: TypeError: Cannot read property 'backIndicatorDown' of null
[W] unknown:194 - file:///usr/lib/qt5/qml/Sailfish/Silica/DialogHeader.qml:194: TypeError: Cannot read property 'backIndicatorDown' of null
[W] unknown:247 - file:///usr/lib/qt5/qml/Sailfish/Silica/DialogHeader.qml:247: TypeError: Cannot read property 'forwardIndicatorDown' of null
[W] unknown:242 - file:///usr/lib/qt5/qml/Sailfish/Silica/DialogHeader.qml:242: TypeError: Cannot read property 'forwardIndicatorDown' of null

На функциональности они никак не сказываются, но в интернете найти причину данных предупреждений мне не удалось. Похоже, что это небольшая недоработка, поскольку Sailfish Silica все еще находится в разработке. Будем надеяться, что в будущем данные недочеты будут исправлены.

Подробнее о Dialog можно почитать в официальной документации.

Жизненный цикл приложений и Cover


Жизненный цикл приложений для Sailfish OS весьма прост. Поскольку в платформе реализована полноценная многозадачность, приложение может находится в одном из трех состояний: либо оно не запущено вовсе, либо оно работает в фоне (background), либо работает в активном режиме (foreground). При этом в активном режиме приложение развернуто во весь экран, тогда как в фоновом режиме приложение представлено своей миниатюрой (называемой cover) на главном экране системы (об этом было немного написано в предыдущей статье). Определить в каком именно состоянии находится приложение можно с помощью свойства Qt.application.state. Если приложение находится в фоне, данное свойство принимает значение Qt.ApplicationInactive. В противном случае — Qt.ApplicationАctive. Состояние приложения необходимо знать и использовать, например, для остановки тяжелых вычислительных задач или анимаций, когда приложение находится в фоне, чтобы не тратить ресурсы системы.

Когда приложение находится в фоне, на главном экране отображается его миниатюра — cover. Описать этот cover в коде приложения можно с помощью компонента Cover. По умолчанию в приложении уже установлен cover, который выглядит следующим образом:

Установить свой cover можно с помощью свойства cover компонента ApplicationWindow. Переделаем пример выше так, чтобы при нажатии на кнопки в диалоге менялся текст не на главном экране приложения, а на его cover:
ApplicationWindow {
    initialPage: initialPage
    cover: cover
    Page {
        id: initialPage
        // Описание главной страницы приложения...
    }
    Cover {
        id: cover
        transparent: true
        Label {
            id: coverLabel
            text: "Привет, Хабр!"
            anchors.centerIn: parent
        }
    }
    Dialog {
        id: dialog
        DialogHeader {
            title: "Простой диалог"
        }
        Label {
            text: "Я - диалог"
            anchors.centerIn: parent
        }
        onAccepted: coverLabel.text = "Согласился"
        onRejected: coverLabel.text = "Отказался"
    }
}

Конечно, данный пример призван только ознакомить читателей с работой с компонентом Cover. В реальном приложении cover представляет само приложение на главном экране системы. Поэтому он должен, во первых, представлять приложение так, чтобы пользователь при первом взгляде мог узнать, что это миниатюра данного конкретного приложения. Во-вторых, cover должен содержать минимальное количество самой важной информации, поскольку все детали пользователь может увидеть открыв само приложение. И, наконец, в-третьих, как и показано в примере выше, cover приложения должен изменяться, вслед за состоянием самого приложения и его данными.

Sailfish OS так же позволяет cover выполнять ресурсоемкие задачи: анимации, вычисления и т.д. Однако, стоит отметить, что поскольку приложение может находится в фоне вместе с другими приложениями и его миниатюра отображена на ряду с остальными, то задачи эти не должны нагружать систему постоянно и должны выполняться периодически. Например, погодное приложение должно обновлять свой cover только когда с сервера приходят новые данные о погоде. Кроме того, не стоит выполнять такие задачи, когда миниатюра не видна пользователю (например, когда закрыт главный экран). Для этого можно использовать свойство status, которое принимает одно из следующих значений:
  • Cover.Inactive — миниатюра не видна и пользователь не может с ней взаимодействовать,
  • Cover.Active — миниатюра видна и пользователь может с ней взаимодействовать,
  • Cover.Activating — миниатюра переходит в статус Cover.Active,
  • Cover.Deactivating — миниатюра переходит в статус Cover.Inactive.


Помимо этого cover так же может предоставлять пользователю возможность управления приложением непосредственно с самой миниатюры. Для этого с помощью компонента CoverActionList, внутри которого определяются компоненты CoverAction, можно добавить на миниатюру кнопки. Например, для музыкального плеера это могут быть кнопки остановки и воспроизведения композиции, а также кнопки перехода на следующий или предыдущий трек. Добавим кнопку управления на миниатюру из нашего примера. Эта кнопка будет менять надпись на нашей миниатюре:
Cover {
    id: cover
    transparent: true
    Label {
        id: coverLabel
        text: "Привет, Хабр!"
        anchors.centerIn: parent
    }
    CoverActionList {
        CoverAction {
            iconSource: "image://theme/icon-cover-next"
            onTriggered: coverLabel.text = "Следующий!"
        }
    }
}

Подробнее про Cover можно прочитать в официальной документации.

Ориентация устройства


Как и другие мобильные устройства, устройства на платформе Sailfish OS поддерживают две возможных ориентации экрана: портретную и ландшафтную. Для того, чтобы узнать текущую ориентацию устройства можно воспользоваться свойствами isPortrait и isLandscape компонента Page, либо свойством orientation, которое принимает одно из следующих значений: Orientation.Portrait, Orientation.Landscape, Orientation.PortraitInverted или Orientation.LandscapeInverted. Так же, если важно проверить например, что устройство находится в портретной ориентации, а инвертировано оно или нет — не важно, то можно сравнить значение свойства orientation с маской Orientation.PortraitMask. Для ландшафтного режима существует аналогичная маска Orientation.LandscapeMask.

Если необходимо, чтобы приложение работало только в определенных ориентациях, то можно воспользоваться свойством allowedOrientations компонента ApplicationWindow, которому можно указать, в каких ориентациях должно работать приложение. В качестве значений можно указывать те же значения, что возвращает свойство orientation, а так же маски Orientation.LandscapeMask, Orientation.PortraitMask или Orientation.All. Значение по умолчанию свойства allowedOrientations зависит от конкретного устройства, поэтому если для приложения важно, что оно должно работать в определенных ориентациях (или в любых), то лучше указать это явно. Кроме того, это свойство можно указать и у компонента Page, тогда правило разрешенных ориентаций будет применяться только к конкретной странице.

На этом все. Однако, хотелось бы отметить, что не смотря на то, что в примерах данной статьи весь код был описан в одном файле, при написании реальных приложений лучше всего описывать каждую страницу и cover в отдельном QML файле. Это ускорит запуск приложения, поскольку предотвратит компиляцию всех QML компонентов при старте приложения.

В следующей статье я расскажу о других компонентах, входящих в состав Sailfish Silica.

Автор статьи: Денис Лаурэ
Поделиться публикацией

Похожие публикации

Комментарии 78

    +1
    По теме.
      0
      Остаётся открытым только один вопрос: Где купить телефон на SailfishOS и, желательно, не китайского монстра.
      З.Ы. За перевод спасибо.
        0
        Да вот, говорят, Intex начали рассылать повсеместно.
          0
          Получается около 7 т.руб. Нормальная цена для такого аппарата. Интересно, насколько дороже будет сертифицированная версия, если появится.
          Жаль только, что всего 720p и экран, и камера. И в сенсорах не указаны ни компас, ни барометр, ни даже гироскоп. И NFC нет.
        +1
        Это всё, конечно, хорошо, но без достойного по характеристикам устройства и доступного (в том числе по цене) устройства, не очень интересно. Смысл вкладываться в разработку приложений для этой ОС неясен. Ради чего? В ближайшем будущем вряд ли удастся заработать на этом больше, чем на Windows Phone или Tizen, не говоря об iOS или Android. Для себя тоже бессмысленно, так как пользоваться можно только в эмуляторе.
          0
          Для некоторых вещей — прямой заработок неважен.
          Скажем, какому-нибудь Ватцапу это нужно для статуса универсального везде доступного месседжера.
            +1
            Вотсапов немного, большинство же не заморачиваются разработкой под платформу с небольшим числом пользователей.
              0
              99% мобильных приложений нафиг никуму не нужно. Они мусор, шлак.
                +1
                С другой стороны, внезапно оказывается, что приложений, которые мне нужны, нет. Например, среди 100500 таймеров в Google Play, мне не удалось найти такого, который устраивал бы меня хотя бы на 80%. С приложениями для бега ситуация ещё хуже — нигде не нашлось даже тех функций, которые я считаю основными. По крайней мере без ввода данных кредитки.
                  0
                  Если вам даже в Google Play не удалось ничего найти, то о чем с вами можно говорить про эту ОС?
                    0
                    Вам не о чем, согласен.
            –1
            Удастся заработать больше. Не на продажах своих приложений, но, например, на аутсорсинге.
              +1

              А как же экономическая теория: "Спрос рождает предложение"? Не вижу достаточного спроса на Sailfish, что бы зарабатывать да же на аутсорсинге.

                –2
                Спрос есть. То, что он не афишируется — это другой вопрос.
                  0

                  Спроса нет, поэтому Jolla в 2015 испытывала финансовые трудности
                  .
                  Или Big bro планирует выпустить закон, по которому кого-то обязует покупать "отечественные" смартфоны с "отечественной" ос?

                    0
                    Трудности она испытывала из-за проблем с компонентами.
                    Спрос-то как раз был, который покрыть они не смогли из-за этих самых проблем.
                    0
                    Вы так говорите, будто бы поддержка отечественного ПО — это плохо.

                    Что, например, в наличие Яндекса что-то хуже, чем в наличие Яндекса + Гугля.

                    Это у нас есть выбор.
                    А у европейцев — его нет. Только Гугль.
                      0

                      Почему же тогда не поддержать Яндекс.Кит, это то же отечественное ПО.


                      Я против поддержки "инноваций" и "отечественного ПО" за счет казны под флагом импортозамещения.

                        +1
                        Вообще, сейчас Sailfish OS развивается не за счёт казны, а за счёт частных инвесторов.
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      Очень спорный вопрос о приятности, а тем более удобства.
                      К интерфейсу Sailfish OS привыкается за пару дней. А вот отвыкать от него заметно дольше.
                      До сих пор, если беру в руки устройство на, скажем, Android, пытаюсь свернуть приложения свайпом.

                      Принятый принцип взаимодействия приложений — d-bus.
                      Хотя все остальные механизмы Linux (сокеты, пайпы) вполне работают.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          Ничего не поделаешь.
                          Есть такое понятие как «порог вхождения».
                          Если для какой-то вещи высокий порог вхождения — не факт, что это плохая вещь. Может быть даже и наоборот.
                  +2
                  Кроме госконтор, которые могут загнать под эту платформу (а могут и не загнать или загнать, например, под Тайзен.ру) такой аутсорс не нужен.
                  Если платформа не планирует выходить на открытый рынок, она мне неинтересна, как и большинству разработчиков.
                    –1
                    Вот прям сейчас я, пожалуй, могу сказать только, что есть хороший интерес и не со стороны гос.контор. Покажут, когда время придёт.
                    Свободная продажа текущих устройств буде после сертификации. Ну, и новые будут. Причем, не только… кхм… Ермак, конечно.
                      +1
                      То, что устройств нет в свободной продаже, вполне понятно: надо допилить, сертифицировать и т.д. Но нет и нормальных анонсов. Есть специфический девайс Ермак, Ойстерс с довольно мутным описанием, будет ли в России что-то ещё — неизвестно. Возможные цены, естественно, тайна. Но мне почему-то кажется, что конкурентными они не будут. Возможно, после смартфонов на Ubuntu touch, которые стоили почти в два раза дороже аналогов на Android. Да и на девайс от Jolla цена была высоковато для его характеристик.
                        0
                        > Возможно, после смартфонов на Ubuntu touch, которые стоили почти в два раза дороже аналогов на Android. Да и на девайс от Jolla цена была высоковато для его характеристик.

                        А сами производители при таких «завышенных» ценах — заработали намного меньше, чем они же зарабатывают на Андроидах.

                        Пока не будет массового производства — так и будет.
                          0

                          Что мешает взять китайфон, поставить SailfishOS и продавать? Тут дело не в массовом производстве, а в отсутствие спроса.

                            0
                            Ну вот возьми и поставь.
                            Через полгода твоих бесплодных попыток — приди сюда и поясни нам: а почему это так не просто.
                            Или почему — работает только 80% функционала, а оставшиеся 20% не так просто завести, потому что нужно переписывать большие куски кода под железо.
                              0

                              Переписывать SailfishOS под конкретное железо? Это что-то новенькое.

                                –1
                                Да ты че?
                                Ты можешь поставить на любой телефон — Андроид 6? Не имея исходного текста драйверов?
                                Давай ты мне обновишь телефон, где до сих пор 4-ка стоит?
                                  0

                                  Есть такая штука, называется NDA. Никто не мешает компании, которая собирается выпускать свои смартфоны, подписать NDA с производителем железа

                                    0
                                    Ты уходишь от темы. Я говорю: дело в драйверах и т.п. вещах, которые нужно подгонять под каждую модель (или группу моделей) телефона. Установи мне Android 6 на телефон, где максимум Android 4.
                                    А ты начинаешь втирать бред про какое то NDA. Да кому нужно NDA на УСТАРЕВШИЕ телефоны?
                                      0

                                      Я говорю о том, что вместо производства дорогих моделей, компания производитель может начать с выпуска аппаратов в ценовой категории 50$.

                                        0
                                        В начале, когда спрос маленький — большая часть расходов не связана с ценой комплектующих, с тем дорогое будет железо или бюджетная модель. Значительная часть расходов на маленьких масштабах производства — это R&D (в частности с адаптацией Сэйлфиш под конкретную модель железа).

                                        А R&D, в отличие от самой железной начинки, от комплектующих — слабо связан с тем дорогая это модель или дешевая.

                                        Следовательно, производить дешевый или дорогой аппарат — все не сможешь продать его дешево на маленьких масштабах производства.

                                        Странно, что кто-то еще не понимает таких элементарных вещей.
                                          0

                                          Проекту не первый год, и был опыт Mer, MeeGo, Maemo. О каком R&D сейчас идет речь?

                                0
                                Чтобы «взять и поставить», нужно договариваться с производителем, у частного лица такой возможности нет.
                                Пытаться достичь массового производства нишевых смартфонов, конечно, перспективнее.
                                  0
                                  Чтобы «взять и поставить», нужно договариваться с производителем, у частного лица такой возможности нет.


                                  Я лично знаком с человеком, который сделал прошивку на поставляемый в РФ китаефон с кривой прошивкой.

                                  И поставщик в РФ принял его самопальную прошивку как основную и дал этому «частному лицу» денег (но изначально разработка велась на голом энтузиазме).

                                  Все это «частному лицу» якобы нельзя — отмазки людей, которые ни разу не профи, а все тут даже — берутся описывать как элементарно накатать ОСь на любой телефон.

                                  Программно-инженерный отдел любого изготовителя или импортера телефонов и так занят. И тратить, к примеру, дополнительно многие сотни тысяч рублей на адаптацию ОСь под телефон, который не будет гарантировано продан хотя бы в десятках тысяч экземпляров — никто не будет.
                              0
                              Однако, китайцы с этим как-то справляются. Я же написал: "дороже аналогов", а не просто дороги.
                                0
                                Пока не будет массового производства — не будет дешево.
                                  +1
                                  Никто не станет покупать дорогие аппараты на альтернативной ОС. Без смартфонов по конкурентной цене массового спроса, а стало быть и производства не будет. Никогда.
                                    0
                                    Да ты че? Не будут покупать дорогие телефоны? Джобс-то был не прав, оказывается?

                                    Если пробьют рынок, то будут покупать.

                                    Проблема только — вылезти как-то, набрать критическую массу пользователей.

                                    Этим занимаются люди по всему миру.
                                    Постоянно и непрерывно.

                                    Кто-то вылазит наверх рынка.

                                    Согласен, что в наше время это уже сложно.

                                    И кстати, ребята из Блекберри, имея уже раскрученную ОС, от нее отказались, а вот то, от чего ББ добровольно отказались — Сейлфишу, Убунте или кому другому будет стоить годы раскрутки и миллиарды…

                                    Путь наверх тяжел.
                                    Но это обыденность.

                                    Этим прямо сейчас занимаются миллионы людей. В разных сферах деятельности.
                                      0
                                      Джобс мог продавать дорогие телефоны. Но таких как он, можно пересчитать по пальцам. Поэтому миллионы людей считают убытки. Прямо сейчас, в разных сферах деятельности. И лишь единицы получают прибыль.
                                        0
                                        Капитан Очевидность?

                                        А что — Вы бы хотели наоборот? Миллионы успешных ОС для смартфонов и всего лишь единицы неудач? Зачем нам такое разнообразие?
                                          0
                                          Я хочу одну ОС, чтобы править всеми её использовать, под неё разрабатывать и на этом зарабатывать.
                                          Приходится работать Капитаном, раз Вам очевидное не сразу очевидно.
                                            0
                                            Ох, как бы я не хотел дожить до времени когда будет одна ОС (которая скорее всего будет не нравится всем), а еще и один магазин, одна авиакомпания и прочее, благо хорошо помню как это было, когда все было по «одному»… Пусть лучше будет разнообразие и у Вас будет выбор под какую ОС разрабатывать, чьи телефоны покупать и так далее :)
                                              0
                                              Мне нужна одна ОС, которая бы меня устраивала, а не единственная ОС на рынке. Я прекрасно понимаю, что многим мой выбор не подойдёт, потому что у них другие критерии.
                                              Скорее всего Вы, как и я, помните «по одному» во времена упадка, а не расцвета. К сожалению, существующая модель разнообразия тоже имеет свои недостатки, причём весьма существенные, так что сходу и не скажешь, лучше ли это, чем качественная реализация «по одному», поэтому я предпочитаю не отвлекаться на сравнение этих систем.)
                                              Хороший пример недостатков — ситуация с мобильными ОС, когда разнообразие практически сводится к выбору из двух вариантов.
                                              0
                                              Это идеализм.

                                              На практике с одной ОСью будут другие проблемы.

                                              К сожалению, человеческая сущность такова, что одна ОС означает то, что её изготовитель шевелится еле-еле даже с критичными багами.

                                              Конкуренция — двигатель людей хотя бы чуть-чуть работать. Без этого люди будут сидеть на попе и ловить бананы ртом с дерева (будет лениво даже потрясти дерево).

                                              Не зря теплые страны, где можно практически такой образ жизни вести, оказались значительно слабее Европы.

                                              Не зря те же викинги или монголы из стран, где трудно раздобыть себе пропитание — легко покорили страны с более благостным климатом.
                                                0
                                                Это — теория. Я такого наслушался в конце 80-х прошлого века, даже как-то удивительно читать то же самое через 30 лет. На практике всё обстоит несколько иначе, и производители легко кладут большой болт на обновление даже недавних флагманов, предпочитая вкладывать деньги в маркетинг и адвокатов, потому что это — эффективнее. Всё равно им надо впаривать новые модели и судиться с конкурентами.

                                                IT-особое явление. Часть людей будет заниматься своей работой, просто потому, что это интересно, хотя эффективность, наверное, будет ниже.
                                                  0
                                                  Чем это ИТ — особое????
                                                  Ох уж этот ИТ-шный элитаризм…
                                                    0
                                                    Я написал об этом прямо в следующем предложении.
                                                      0
                                                      В абсолютно любой сфере есть такие люди.

                                                      Есть увлеченные слесаря. Знаком с таким. Постоянно что-то изобретает для упрощения своей работы.

                                                      ИТ — ничем не отличается от других сфер человеческой деятельности. Есть даже проститутки, которым это делать чисто по кайфу.
                                                        0
                                                        Я даже допускаю существование ассенизаторов, получающих кайф от своей работы, но сомневаюсь, что в данной сфере человеческой деятельности это явление столь же распространено, как у программистов.
                                          0

                                          Джобс выпустил телефон тогда, когда альтернатив было мало. У Джобса было огромное преимуществ на старте в виде Apple, которая смогла развернуть "Спрос рождает предложение" в "Предложение рождает спрос".

                                            0
                                            > Джобс выпустил телефон тогда, когда альтернатив было мало.

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

                                            Если ты самый первый — тебе очень сложно начать, пробиться. Потому что тебе нужно СНАЧАЛА ОБЪЯСНИТЬ людям зачем им эта новая непонятная штуковина.

                                            Если же тебе это удалось — то да, отсутствие конкуренции это благо и огромный доход.

                                            До этого, пока ты самый первый, пока люди еще не поняли что это за штуку такую ты предлагаешь, то отсутствие конкуренции, отсутствие АНАЛОГОВ — только мешает.

                                            Легко было уже Android, на фоне iOS. Тогда люди УЖЕ понимали.
                          0
                          Если вдруг там будет рынок — то совсем наоборот, будет преимущество по заработку.
                          Кто первый встал — того и тапки.
                            0
                            Это — старая мантра. Я слышал её в отношении Maemo, Windows Phone, Tizen… К сожалению, она не работает.
                              0
                              А кто-то ее слышал по отношению к Андроиду и iOS — и упустил рынок.
                              Всякое может быть.
                                0
                                Может. Правда, я не знаю, насколько такое действительно было. Возможно, это просто отмазка писателей г4софта, который всё равно забыли бы после выхода более качественных аналогов.
                              +1
                              Да, экзотические платформы имеют свои прелести. Помнится, моё приложение класса helloworld для N9, написанное за неделю, долго не покидало бесплатный топ, у меня даже где-то есть скриншот магазина с ним на первом месте. Но это — не заработок.
                              И это всё не отменяет необходимость иметь устройство для разработки, потому что эмулятор — это одно, а устройство — совсем другое. И многие косяки вылезают только в процессе регулярного использования.
                                0
                                Выбирайте на ваш вкус: https://wiki.merproject.org/wiki/Adaptations/libhybris
                                Сейчас более чем реально раздобыть устройство с Sailfish OS.
                                  0
                                  Там нет официальной версии чтобы работали все функции аппарата. А разбираться, кто глючит, недоделанная ОС или моя программа, я не люблю (с упомянутым недоприложением такое как раз было, исправили в следующем релизе MeeGo).
                                    0
                                    Это список аппаратов для тех, кому ехать. Шашечки нужно немного подождать. В этом году обещают в России выпустить сертифицированные аппараты.
                                      0
                                      Шашечки дают надежду (а в идеальном мире даже гарантируют), что водитель действительно неплохо знает своё дело и не летит под 120, не глядя на светофоры. И что у машины не откажут тормоза. Я в своё время на таких накатался, надоело.
                                      Применительно к ОС и аппаратам тоже. А использую датчики и сенсоры, с адаптациями могут быть разные проблемы.
                                        0
                                        Вы говорите об этом с точки зрения пользователя, а не разработчика. Если в мире останутся одни пользователи, то некому будет «неплохо знать своё дело». А разработка как раз о том, как сделать лучше, в том числе когда откажут тормоза.
                                          0
                                          Я говорю с точки зрения разработчика приложений. А тормоза — это в ведении системных программистов. Если я этим и занимаюсь, то только по нужде, если системщики сделали своё дело недостаточно хорошо (на что у них могут быть уважительные причины).
                                            0
                                            Серьезные разработчики получают доступ к железу еще на этапах альфа-версий железа.
                                              0
                                              К серьёзным разработчикам серьёзные производители железа приходят сами и платят серьёзные бабки, чтобы они сделали свои приложения под их железо. Но вряд ли эта статья ориентирована на них.
                                                0
                                                Это вы для самооправдания пишете.
                                                Есть хорошая пословица: «Под лежачий камень вода не течет».

                                                Пока ты САМ не пошевелишься — тебе никто ничего не пришлет для тестирования твоей разработки.

                                                Многие производители рассылают даже БЕСПЛАТНО свои образцы. Тебе достаточно показать, что ты уже сделал софт под другую ОСь. Тут несколько лет назад была пару статей. Например, так делал Blackberry, когда Android-программист прислал им ссылку на свою софтину.

                                                Шевелиться нужно.
                                                А не говорить, что в том, что ты не крут тебе мешает то, что ты не крут и тебе никто ничего не пришлет в альфа версии.
                                                  0
                                                  Я не крут. Тем не менее у меня есть несколько бесплатных образцов от Nokia и один от Samsung.
                                                  А от Jolla нет. Наверное, потому, что я не приложил достаточных усилий, чтобы его получить. Тут Вы правы.
                                                  Вот только штука в том, что я этого не сделал из-за того, что их смартфон не показался мне достаточно интересным.
                                                  И у ОМП ничего нет, о чём я, собственно, и написал. А Вы зачем-то развели дискуссию о шашечках.
                                                    0
                                                    Разумеется Jolla и ОМП нужно время чтобы найти свою нишу. И тут их история ничем не отличается от всех кумиров прошлого. Например, помню как в начале еще в FIDO гнобили телефоны Nokia, по сравнению с популярными тогда Motorolа. Было даже пара эх, специально посвященных этой теме. Я думаю все помнят как гнобили в начале Самсунги, причем в начале это даже было заслуженно. А как народ смеялся над более догорим GSM и малым количеством трубок под него, и говорил что они останутся на популярной тогда NMT (в России его чаще называли Delta по названию оператора). Это прогресс и это нормально. Мне кажется Jolla и ОМП делает очень классную и полезную работу, и то что Вы читаете эти посты и комментируете их, для меня знак что Вам это тоже интересно и это здорово.
                                                      0
                                                      Меня не устраивают распространённые мобильные платформы, вот почему мне интересны альтернативы, в том числе Sailfish.
                                                      Время важный ресурс, поэтому, на мой взгляд, если в перспективе есть хорошее железо, его стоит анонсировать как можно раньше, чтобы привлечь потенциальных пользователей и разработчиков. Потому что без железа ОС — штука слишком уж виртуальная. Для платформы, основанной на свободном ПО принцип release early, release often имеет значение.
                                                      Что я, собственно, и пытаюсь донести в своих комментариях.
                          • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            А как реализована поддержка разных размеров/разрешений/ppi? На сколько сложнее будет поддерживать по сравнению с Андроидом?
                              0
                              Рассказано в конце видео, которое в первом комментарии.
                              Слайды:
                              Масштаб интерфейса: Theme.pixelRatio
                              Выбор размера элементов: Screen.sizeCategory
                              Выбор компоновки: Screen.sizeCategory

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое