Електронний «випромінювач інформації» при мінімумі витрат

Коли у нас надійно заробила безперервна інтеграція на Jenkins і устоялися процеси випуску релізів продукту, виникла думка: а чому б не перейняти передовий досвід і не поставити в офісі свій електронний випромінювач інформації (information radiator): великий красивий екран, на якому відображаються автоматично відбуваються з проектом процеси?



Думка хороша, але ж це коштує грошей і часу, тобто того, чого ніколи немає. Особливо зараз. Особливо у маленьких компаній без бюджетів на всілякі допоміжні цілі. Зробити все належало за «п'ять копійок» і за «п'ять хвилин» — і ось як я з цим [частково] впорався.

Навіщо це потрібно
Звичайно, потім, щоб збільшити продуктивність праці.

Перш за все, щоб полегшити стеження «здоров'я» безперервної складання Jenkins. У тому, що проблема з виправленням складання/модульних тестів вирішується тим простіше, чим раніше його починають вирішувати, ми давно переконалися на собственнном досвіді. Поки свіжі в пам'яті всі деталі того, що ти тільки що зробив — простіше полагодити «зламане» в результаті твоїх дій. А висить в кімнаті великий «світлофор», переключившись з зеленого сигналу на червоний, сповіщає про «розваленої» збірці всіх і відразу, це самий швидкий і помітний спосіб оповіщення. Про це давно сказано в посібниках по модульного тестування і безперервної інтеграції, і це безперечна істина.

По-друге, інформаційний екран повинен бути частиною комплексу заходів по налагодженню комунікацій в проекті. У роздутий проекті багато паралельно виконуваних завдань, та людина, цілком занурений в одну ізольовану завдання, часто невчасно отримує відомості про те, над чим працюють розробники в сусідній кімнаті і віддалено з інших міст (а у нас є і ті, і інші). Всі подробиці роз'яснюються на семінарах і в розсилках, але ще раніше них побачити ключові слова, що мелькають в задачах системи контролю запитів на зміну і коментарях до коммитам в систему контролю версій, безсумнівно, корисно всім учасникам проекту.

Далі, це підвищує якість роботи. Усвідомлення того, що коментар до коммиту в систему контролю версій, що ти зараз робиш, буде через секунду у всіх на виду на великому екрані, мимоволі змушує написати ці кілька слів сказати.

Ну і не в останню чергу — це круто виглядає!

Software-частина
Отже, при мінімальному фінансовому та временном бюджеті не було ніякої можливості вкладатися в те, щоб розробляти щось унікальне, та ще й малювати дизайн. Мені потрібно було щось майже готове. Пошуки привели мене до Ruby-фреймворку Dashing, якраз призначеному для конструювання інформаційних табло на великих екранах.

Архітектурно ідея дуже проста: формується «жива», автоматично оновлюється Web-сторінка, на моніторі відкривається веб-браузер на весь екран — і готово. У Dashing виявилися наступні переваги:

  1. готовий приклад з розкладкою, оптимізованої для телевізора 1080p,
  2. можливість за допомогою миші розташувати віджети (aka інформери aka плитки з інформацією) по екрану,
  3. багато стандартних віджетів,
  4. більше додаткових віджетів
  5. легкість, з якою можна розробляти свої власні віджети.


У квітні 2016 року основні розробники Dashing оголосили, що не будуть більше розвивати його, але, вважаю, це не проблема для затребуваного OpenSource проекту.

До цього моменту я ніколи не працював з Ruby. Однак розібратися в тому, як все встановити та сконфігурувати виявилося неважко. Трохи зайвих рухів потрібно, щоб встановити все на Windows (з Linux, наскільки я розумію, все елементарно), ось який перелік дій спрацював у мене:
  1. Встановити node.js.

  2. Встановити Ruby rubyinstaller.org.
  3. Встановити звідти ж RubyDevKit.
  4. ruby dk.rb init
    ruby dk.rb review 
    ruby dk.rb install
    

  5. gem update system ::якщо не зробити цього, можуть виникнути проблеми з установкою інших пакетів
    gem install htmlentities
    gem install bundle
    gem install nokogiri
    gem install dashing
    



Розмістити на віджетах я вирішив наступну інформацію:

  1. інформери про статуси збірок Jenkins,
  2. заголовки свіжих повідомлень в групу розсилки Google,
  3. коментарі до свіжим коммитам в сховища SVN з вихідними кодами,
  4. інформацію про зміну статусів тікетів 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», підключення до мережі по Wi-fi і можливість встановлювати програми і вбивати тексти з пульта за допомогою T9.

Серед усього цього розмаїття можливостей мене цікавили підключення по WiFi (не потрібен провід) і веб-браузер. Це дозволяло розмістити сервер програми віртуальної машини в датацентрі, відкрити браузер в телевізорі, набрати за допомогою пульта адреса сервера — і вуаля, на екрані засяяла інформаційна панель, справу зроблено!

На жаль, радів я занадто рано. Рівно через 10 хвилин картинка згасла і телевізор почав показувати «скрінсейвер», исчезавший, тільки якщо натиснути будь-яку клавішу на пульті. «Не проблема,» — вирішив я і став шукати в меню опції відключення скрінсейвера. Опція не перебувала. Я звернувся до Google і замість готового рецепту набрів на сторінку на офіційних форумах компанії LG, де кілька таких же, як я, бідолах розповідали про те, що купили їх прекрасний великий телевізор для постійної трансляції на його екрані веб-сторінки, і нарікали на неможливість відключити заставку. LG на своєму офіційному форумі не відповідав. Мабуть, недарма: щось таке знає LG про матриці своїх телевізорів, якщо на них годинами показувати статичне зображення, і не бажає витрачатися на їх гарантійну заміну.

Так ідея використання вбудованого в телевізор браузера виявилася провальною і треба було придумувати щось ще. Залишалося тільки задіяти HDMI-вхід, а це означає, що поряд з телевізором повинен бути розміщений джерело відеосигналу, тобто який-ніякий комп'ютер. Витрати на реалізацію проекту збільшувалися.

Джерело відеосигналу повинен був бути простим, дешевим і надійним, при цьому без особливих вимог до швидкодії системи. Я зупинився на неттоп MSI WindBox DC-111, який підвернувся за вигідною ціною. Повинен сказати, що ця маленька машина нас не підвела: працюючи цілодобово, вона надійно виконувала (і продовжує виконувати свою задачу вже майже рік. А під час корпоративних вечірок ми запускаємо на ній прокручування фотографій і відео.



Телевізор же продовжив «виявляти характер». За допомогою таймерів він був налаштований таким чином, щоб автоматично включатися в 9:00 і виключатися в 19:00 по робочих днях. Але чомусь через три години після автоматичного ранкового включення (тобто рівно опівдні) він, якщо не натискати будь-які кнопки на пульті, гасне. Якщо після цього включити його вручну, він працює вже без виключення стільки, скільки треба (природно, все меню налаштувань було уважно вивчено, всі «енергозберігаючі» опції відключені). Так продовжується і понині.

Висновок
Наш «випромінювач» опрацювала вже майже рік, і за результатами цієї історії я можу зробити наступні висновки:

  1. Завдання вимагає деякої кмітливості, але нічого неможливого для професійних програмістів.
  2. Фреймворк Dashing сміливо рекомендую в якості системи швидкої і зручної складання інформаційних панелей.
  3. Ідея використовувати в якості інфопанелі побутовий телевізор має підводні камені: наш телевізор LG щосили пручається роботі в такому режимі. Хоча за рік роботи з матрицею взагалі нічого не сталося.


Я не наводжу тут вихідних кодів своєї системи, тому що розумію, що в кожному конкретному випадку вимоги до наповнення інформаційної панелі дуже індивідуальні (але готовий поділитися з бажаючими). Приклади і готові рішення на сайті Dashing є в достатку.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.