Мысль хорошая, но ведь это стоит денег и времени, т. е. того, чего никогда нет. Особенно сейчас. Особенно у маленьких компаний без бюджетов на всевозможные вспомогательные цели. Сделать всё предстояло за «пять копеек» и за «пять минут» — и вот как я с этим [частично] справился.
Зачем это нужно
Разумеется, затем, чтобы увеличить производительность труда.
Прежде всего, чтобы облегчить отслеживание «здоровья» непрерывной сборки Jenkins. В том, что проблема с исправлением сборки/модульных тестов решается тем проще, чем раньше её начинают решать, мы давно убедились на собственнном опыте. Пока свежи в памяти все детали того, что ты только что сделал — проще починить «сломанное» в результате твоих действий. А висящий в комнате большой «светофор», переключившийся с зелёного сигнала на красный, оповещает о «развалившейся» сборке всех и сразу, это самый быстрый и заметный способ оповещения. Об этом давно сказано в руководствах по модульному тестированию и непрерывной интеграции, и это — несомненная истина.
Во-вторых, информационный экран должен быть частью комплекса мер по налаживанию коммуникаций в проекте. В разросшемся проекте много параллельно выполняющихся задач, и человек, целиком погруженный в одну изолированную задачу, часто невовремя получает сведения о том, над чем работают разработчики в соседней комнате и удалённо из других городов (а у нас есть и те, и другие). Все подробности разъясняются на семинарах и в рассылках, но ещё прежде них увидеть ключевые слова, мелькающие в задачах системы контроля запросов на изменение и комментариях к коммитам в систему контроля версий, несомненно, полезно всем участникам проекта.
Далее, это повышает качество работы. Осознание того, что комментарий к коммиту в систему контроля версий, который ты сейчас делаешь, будет через секунду у всех на виду на большом экране, невольно заставляет написать эти несколько слов поаккуратнее.
Ну и не в последнюю очередь — это круто выглядит!
Software-часть
Итак, при минимальном финансовом и временном бюджете не было никакой возможности вкладываться в то, чтобы разрабатывать что-нибудь уникальное, да ещё и рисовать дизайн. Мне нужно было что-то почти готовое. Поиски привели меня к Ruby-фреймворку Dashing, как раз предназначенному для конструирования информационных табло на больших экранах.
Архитектурно идея очень проста: формируется «живая», автоматически обновляемая Web-страница, на мониторе открывается веб-браузер во весь экран — и готово. У Dashing оказались следующие достоинства:
- готовый пример с раскладкой, оптимизированной для телевизора 1080p,
- возможность при помощи мыши расположить виджеты (aka информеры aka плитки с информацией) по экрану,
- много стандартных виджетов,
- ещё больше дополнительных виджетов,
- лёгкость, с которой можно разрабатывать свои собственные виджеты.
В апреле 2016 года основные разработчики Dashing объявили, что не будут больше развивать его, но, полагаю, это не проблема для востребованного OpenSource проекта.
До этого момента я никогда не работал с Ruby. Однако разобраться в том, как всё установить и сконфигурировать оказалось нетрудно. Немного лишних телодвижений нужно, чтобы установить всё на Windows (с Linux, насколько я понимаю, всё элементарно),
- Установить node.js.
- Установить Ruby с rubyinstaller.org.
- Установить оттуда же RubyDevKit.
ruby dk.rb init ruby dk.rb review ruby dk.rb install
gem update system ::если не сделать этого, могут возникнуть проблемы с установкой других пакетов gem install htmlentities gem install bundle gem install nokogiri gem install dashing
Разместить на виджетах я решил следующую информацию:
- информеры о статусах сборок Jenkins,
- заголовки свежих сообщений в группу рассылки Google,
- комментарии к свежим коммитам в репозитории SVN с исходными кодами,
- информацию об изменении статусов тикетов в Trac.
За основу виджета для Jenkins я взял один из готовых в богатой библиотеке виджетов к Dashing. Т. к. мне хотелось, чтобы отображаемое на мониторе максимально походило на то, что человек видит на странице Jenkins, я усовершенствовал виджет, добавив к нему иконки с «погодными условиями» проекта, используемые в самом Jenkins. При этом фоновый цвет «плитки» соответствует статусу последней сборки: зелёный — последняя сборка успешна, серый — сборка в процессе, красный — сборка неуспешна. Дорабатывать виджеты под Dashing оказалось довольно легко и приятно, и я решил пойти дальше.
Для отображения информации о том, что присходит в системе Trac и в группе рассылки, понадобился виджет, отображающий RSS-ленту. Его пришлось клонировать и отдельно доработать для Trac и для Google-группы в силу местных особенностей RSS-формата. «Украсить» ленту Trac-событий удалось при помощи Trac-овских иконок открытого и закрытого тикета.
Более всего повозиться пришлось с лентой комментариев к коммитам из SVN. У сервера Subversion нет встроенного RSS-сервиса, каких-то готовых решений в библитеке виджетов Dashing также не было. Поизучав вопрос, я понял, что единственным подходящим методом является запуск команды svn log и анализ выводимых ею данных при помощи регулярных выражений. К этому моменту я уже достаточно разобрался и в Ruby, и в создании виджетов, чтобы сделать скрипт, объединяющий в один список комментарии к разным репозитариям и затем сортирующий их в хронологическом порядке.
Напоследок оставалось поэкспериментировать с раскладкой виджетов по экрану с добавлением часов и — сверху — виджета, отображающего имя пользователя, время и характер последнего зафиксированного информационной панелью действия.
Информационное наполнение было готово, и настала пора приобретать и устанавливать большой экран.
Hardware-часть
Что выбрать в качестве монитора? Я сразу понял, что, с одной стороны, есть такая вещь, как «профессиональные мониторы с широкой диагональю». Их стоимость исчисляется сотнями тысяч рублей и для нас это был абсолютно неприемлемый по бюджету вариант. С другой стороны, современные бытовые телевизоры оснащены HDMI-входами, обладают высоким разрешением и стоят на порядок дешевле. Поэтому я решил брать бытовой телевизор.
Как впоследствии оказалось, всё, конечно, не так просто и бытовой телевизор слабо подходит для такой задачи (о чём ещё будет рассказано). Но и колоссальную разницу в цене это не оправдывает, так что если решитесь на что-то подобное — выбирать вам.
Исходя из размеров нашего помещения и места установки, я решил, что подходящей является диагональ 46''. Мой выбор первоначально пал на бренд Samsung, но в означенный час поставщик сообщил мне, что заказанной и предоплаченной по безналу модели Samsung у них больше нет и они могут предложить похожую, и даже более «продвинутую» модель LG. Так у нас в офисе оказался огромный плоский телевизор LG.
NB: Бухгалтеру нужно дополнительно сообщить, что телевизор приобретён в качестве монитора, т. е. средства производства, чтобы не покупать его из прибыли компании и тем самым уменьшить налог.
Надо сказать, что в гаджетах типа «телевизор» я разбираюсь плохо, ибо своего телевизора в доме, за ненадобностью, не имею. Оказывается, все они теперь хотят по функциональности быть похожими на смартфоны или планшеты. Доставшийся нам LG имеет «систему WebOS», подключение к сети по WiFi и возможность устанавливать приложения и вбивать тексты с пульта при помощи T9.
Среди всего этого изобилия возможностей меня интересовали подключение по WiFi (не нужен провод) и веб-браузер. Это позволяло разместить сервер приложения в виртуальной машине в датацентре, открыть браузер в телевизоре, набрать с помощью пульта адрес сервера — и вуаля, на экране засияла информационная панель, дело сделано!
К сожалению, радовался я слишком рано. Ровно через 10 минут картинка погасла и телевизор начал показывать «скринсейвер», исчезавший, только если нажать на пульте любую клавишу. «Не проблема,» — решил я и стал искать в меню опции отключения скринсейвера. Опция не находилась. Я обратился к Google и вместо готового рецепта набрёл на страницу на официальных форумах компании LG, где несколько таких же, как я, бедолаг рассказывали о том, что купили их великолепный большой телевизор для постоянной трансляции на его экране веб-страницы, и сетовали на невозможность отключить скринсейвер. LG на своём официальном форуме не отвечал. Видимо, недаром: что-то такое знает LG про матрицы своих телевизоров, если на них часами показывать статическое изображение, и не желает тратиться на их гарантийную замену.
Так идея использования встроенного в телевизор браузера оказалась провальной и надо было придумывать что-то ещё. Оставалось только задействовать HDMI-вход, а это значит, что рядом с телевизором должен быть размещён источник видеосигнала, т. е. какой-никакой компьютер. Затраты на реализацию проекта увеличивались.
Источник видеосигнала должен был быть простым, дешёвым и надёжным, при этом без особых требований к быстродействию системы. Я остановился на неттопе MSI WindBox DC-111, который подвернулся по выгодной цене. Должен сказать, что эта маленькая машина нас не подвела: работая круглые сутки, она надёжно выполняла (и продолжает выполнять) свою задачу уже почти год. А во время корпоративных вечеринок мы запускаем на ней прокрутку фотографий и видео.
Телевизор же продолжил «проявлять характер». При помощи таймеров он был настроен таким образом, чтобы автоматически включаться в 9:00 и выключаться в 19:00 по рабочим дням. Но почему-то через три часа после автоматического утреннего включения (т. е. ровно в полдень) он, если не понажимать какие угодно кнопки на пульте, гаснет. Если после этого включить его вручную, он работает уже без выключения столько, сколько надо (естественно, всё меню настроек было внимательно изучено, все «энергосберегающие» опции отключены). Так продолжается и поныне.
Заключение
Наш «излучатель» проработал уже почти год, и по результатам этой истории я могу сделать следующие выводы:
- Задача требует некоторой смекалки, но ничего невыполнимого для профессиональных программистов.
- Фреймворк Dashing смело рекомендую в качестве системы быстрой и удобной сборки информационных панелей.
- Идея использовать в качестве инфопанели бытовой телевизор имеет подводные камни: наш телевизор LG изо всех сил сопротивляется работе в таком режиме. Хотя за год работы с его матрицей вообще ничего не случилось.
Я не привожу здесь исходных кодов своей системы, потому что понимаю, что в каждом конкретном случае требования к наполнению информационной панели очень индивидуальны (но готов поделиться с желающими). Примеры и готовые решения на сайте Dashing имеются в изобилии.
Комментарии (27)
Akr0n
29.05.2016 09:41+3У нас самый старый RaspberryPi справляется с выводом дашборда. Зачем был целый неттоп?
IvanPonomarev
29.05.2016 10:47Затем, что никто из нас с малиновыми пирогами до этого дело не имел, и цена трудозатрат на разбирательство была бы выше разницы в цене девайса (учитывая, что неттоп обошёлся в 13000 рублей).
Но с точки зрения инженерной неттоп тут overkill, конечно.
Что стоит на вашем RaspberryPi? Только браузер или и «мозги» тоже? Расскажите.
Akr0n
29.05.2016 15:34Дефолтный Raspbian, дефолтный браузер. Из настроек только строчка для запуска браузера при старте в полноэкранном режиме. Все.
woodhead
29.05.2016 14:38Всегда недолюбливал марку LG. То есть, я понимаю, что в большинстве случаем мои страхи беспочвенны и мнение надуманно. Но вот из практики то телефон у одного коллеги попадётся бракованный, то монитор с браком уже у другого коллеги. И как то так получается, что начинаешь осамсунгиваться (два монитора, три смартфона, ноутбук, телевизор). ))
Вот и здесь, чувствую, зря вы Samsung не взяли.IvanPonomarev
29.05.2016 14:46Да, у меня то же самое ощущение) Недаром я заказывал Samsung… Но в моём случае, я подозреваю, такое поведение телевизора — не брак, а намеренное продвижение для «промышленных задач» своих «промышленных решений» за «промышленную цену».
Если правильно помню, то все информационные табло в аэропорту Шереметьево сейчас на панелях LG. Специально разглядывал: на вид ничем от домашних телевизоров не отличаются, только специальная прошивка внутри… и легко могу себе представить, за какую цену продают каждую такую «панельку».staticspb
29.05.2016 15:23Может быть мне просто повезло, но уже три года минимум использую Samsung ME45 как основной монитор, который, в силу специфики и графика работы, все три года не выключался.
Вообще эти экраны оказались достаточно хорошими, за несколько лет из почти сотни – только два ушли «по гарантии». При работе 24/7 в терминалах частной авиации. Остальные до сих пор работают.
А вот LG… Нервов нам подпортил) опять-же, может просто не повезло))
azsx
29.05.2016 18:15+2> почему-то через три часа после автоматического утреннего включения (т. е. ровно в полдень) он, если не понажимать какие угодно кнопки на пульте, гаснет. Если после этого включить его вручную, он работает уже без выключения столько, сколько надо (естественно, всё меню настроек было внимательно изучено, все «энергосберегающие» опции отключены).
Данная функция называется эко-таймер и смотрится в английских мануалах. Как правило штатно, даже в сервисном меню ее отключить нельзя. Делают так:
1. Выводят черную картинку на экран, телевизор включен всегда.
2. Обратитесь в местный сервис, возможно они уже читали мануал и умеют отключать эту опцию для вашей модели.
3. Решайте проблему методом «научного тыка». Найдите в настройках второй таймер (эко-таймер). Попробуйте сперва поставить его на 10 минут, потом либо на 0, либо «выкл». Попробуйте поставить телевизор на профиль «энергосберегающий», затем обнулите эко-таймер, затем верните профиль «обычный» или яркость повысьте.
4. Купите Chunghop RM-L968E, например, там макросы поставьте на таймер (на пульте) типа громкость увеличить и уменьшить раз в 3 часа. Но предлагаемый мой пульт узконаправленный (замучаетесь в реальном офисе).
По моему мнению, я могу и ошибаться, им законодательно надо ставить не отключаемый эко-таймер, но они его ставят и предусматривают недокументированные возможности по его отключению.
ps
а ваще сливайте прошивку от lg, дебажьте её и ищите эко-таймер на 10800 и как его отключить. А то грустно статью читать, я повесил телик и обновляю на нем сайт. А я на мониторе 15 пингов в терминаторе запустил и при сбое повесил на них звуковой сигнал ошибки. Только это не круто :)
Paskin
30.05.2016 08:421. Не исключено что для вашего ТВ есть новая прошивка, исправляющая эти проблемы
2. Если ваши ТВ и компьютер поддерживают CEC (передачу управляющих сигналов по HDMI) — можно найти соответствующую библиотеку и играться громкостью раз в час, например — это предотвратит выключение.
3. Можно купить за пару долларов ИК-излучатель и эмулировать пульт
4. Тут должна была быть реклама Распберри — CEC она умеет из коробки, а ИК колхозится за пять минут через GPIO
Markuzzz
30.05.2016 09:153 года назад столкнулся с таким же поведением телевизора LG при включении по таймеру. Тоже использовали в качестве табло. При детальном осмотре задней панели ТВ был найден последовательный порт для удаленного управления, а в мануале от ТВ — список управляющих кодов. Далее ТВ был соединен с ПК нуль-модемным кабелем, и, так как ПК, который выводил картинку, работал под Windows, следующую схему включения:
в планировщик был вставлен батник, который посылал в последовательный порт с помощью утилиты serialsend 3 байта, которые включали ТВ, а затем запускали PowerPoint Viewer с презентацией в полноэкранном режиме. Эта же задача планировщика предварительно выводила ПК из режима гибернации.
Выключение происходило наоборот: планировщик снова запускал батник, который завершал PowerPoint, копировал из шары свежую версию презентации, отправлял в последовательный порт другие 3 байта, которые выключали ТВ, и переводил ПК в режим гибернации.
Полагаю что под Linux'ом будет проще — можно напрямую писать в последовательный порт без костылей.IvanPonomarev
01.06.2016 21:14Да, уже понял, что использование последовательного порта для управления телевизором — очень круто.
Сегодня дошли руки снять телевизор со стены — к сожалению, у нашего экземпляра последовательного порта нет.
bigspb
30.05.2016 16:45Сборки Jenkins удобно мониторить Catlight (есть такая система мониторинга для Jenkins, см. catlight.io/a/jenkins-build-status-notifications ).
Заметно повышает производительность программистов ))
AllexIn
А почему телевизор по гарантии не сдаете? Автоматическое выключение через три часа — легко воспроизводится и легко доказывается, что это баг, а не фича, т.к. устройство не документированно выключается, когда этого никто не ждет.
Есть вероятность что сервис сможет победить это.
IvanPonomarev
Интересная мысль. «Повентилирую вопрос», как дойдут руки.
tolstomordik
Отключение через три часа, после включения телевизора по таймеру, это не баг, это фича бытовых телевизоров LG. Раз снаружи никого нет (пульт никто не теребит) то работать не для кого и аппарат, добросовестно отработав заданные производителем три часа отрубается.
Столкнулся с этим при реализации задачи отображения медийного контента по расписанию (Digital Signage).
В принципе, телевизор управляется по RS-232. На своем экземпляре проверил, работает. Простейший способ отправки из под Windows — CMD-файл.
IvanPonomarev
К сожалению, в моём экземпляре последовательного порта нет. Уже понял, что использование управления по нему — наилучшее решение для всевозможных табло. Ну что ж, на будущее мне — опыт.
dkv
USB-RS232 Converter стоит менее 200 рублей на алиэкпрессе. В оффлайне за 500 найти не проблема.
IvanPonomarev
на ТЕЛЕВИЗОРЕ нет RS232
dkv
Засада. Остаётся ИК. И тут бы Broadlink Black Bean использовать за $11, как готовое доступное решение, да вот только к нему подход ещё найти надо.
dkv
Как уже написали, есть вариант управлять по RS-232 либо ещё есть вариант HDMI-CEC, но вряд ли последнее поддерживается неттопом. А вот на малине бы работало.