Возможности 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, компонентами и серверным рендерингом.
Если в двух словах, то затея моя провалилась.
❗️Важный урок, который я тогда вынес — революционный путь ведёт к проигрышу. Только небольшие эволюционные изменения приводят к успеху.
☝️Взять всё и переписать не срабатывает почти никогда.
Позже я неоднократно слышал о похожем опыте коллег с теми же выводами.
В итоге, мы смержили наши приложения, как и планировали, реализовав абстракцию платформы минимальными средствами.