🔥

Тред (Андрей Нагих)


Возможности web платформы всем нам хорошо знакомы, и управления телевизором там нет. В чём же секрет?

А секрета никакого нет: также как браузеры расширяют возможности JS своими дополнительными API (такими как DOM, History, XHR и пр.) телевизионный браузер добавляет свои глобальные объекты, позволяющие управлять возможностями ТВ.

В любой ТВ ОС вы встретите похожий набор API: 📺 управление плеером 📺 получение данных о ТВ 📺 обработка кнопок пульта 📺 доступ к файловой системе ТВ 📺 управление жизненным циклом приложения

Разумеется, каждый призводитель добавляет своих уникальных возможностей в свои ТВ. И, как водится, каждый производитель придумал свои особые API для всех этих вещей.

Вы скажете: «Им бы договориться о едином стандарте». И будете правы, и такой стандарт даже есть! Но и он не уберёг от классической ситуации из xkcd.com/927/ Называется он SmartTV Alliance Specification, выдержал 5 ревизий, но его реализовали только минорные вендоры.

📛 И это большая проблема для разработчиков! В начале нашего пути у нас было 3 отдельных приложения: для Samsung, LG, и Panasonic. Уже этого набора было достаточно, чтобы серьёзно затормозить темп разработки.

И в этот момент (где то в конце 2014 года) вендоры не сговариваясь объявляют о переходе на новую ОС. Тут бы им объединиться и выбрать какую-то одну ОС. Но так бывает только в мире фей и бабочек.🦄

Итак, что мы имели на тот момент по ОС: 📺Samsung Orsay 📺LG NetCast 📺Panasonic VIERA Connect А теперь следите за руками: 📺Samsung перешёл на Tizen 📺LG на WebOS 📺А Panasonic (внезапно!) на взлетающую Firefox OS.

Это было фиаско. Количество платформ в одночасье удвоилось (бейте астрологов). И хотя Firefox OS загнулась до того, как телеки Panasonic доехали до прилавков, их всё равно было 5!

Также, у нас были планы по портированию на малопопулярные телевизоры и приставки (там тоже есть web приложения), т.е. было понятно, что платформ будет прибывать.

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

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

💎Но нашёлся среди этого настоящий алмаз. Это фреймворк BBC TAL. Они не только реализовали такую абстракцию, но и написали десятки модулей поддержки устройств. Также у них своя библиотека UI элементов.

Правда основан он на уже тогда устаревших технологиях. И я принял решение переписать наши приложеня с нуля с ES2015, компонентами и серверным рендерингом. Если в двух словах, то затея моя провалилась.

❗️Важный урок, который я тогда вынес — революционный путь ведёт к проигрышу. Только небольшие эволюционные изменения приводят к успеху.

☝️Взять всё и переписать не срабатывает почти никогда. Позже я неоднократно слышал о похожем опыте коллег с теми же выводами.

В итоге, мы смержили наши приложения, как и планировали, реализовав абстракцию платформы минимальными средствами.