2 ноября 2015 года у нас в компании прошел первый хакатон. Он проходил два дня в рамках только нашего отдела. В 17:00 второго дня всем необходимо было продемонстрировать результаты своей работы. Темы можно было предлагать любые. В нем приняли участие четыре команды. Наша команда была под номером — 3. О нашем опыте я и расскажу. Кому интересно добро пожаловать под кат.
Команда
Наша команда называлась Illumi и состояла из четырех человек. Люди в нашей команде были разные, примерный расклад по скиллам: фронтенд-разработчик, который переметнулся на темную сторону бэкенда; три бэкенд разработчика, которые перешли на светлую сторону DevOps’a и на текущий момент в большей своей степени занимаются автоматизацией процессов. Мы все непосредственно занимаемся программированием. Заниматься этим же на хакатоне не совсем хотелось. Поэтому решили, что на хакатоне мы будем заниматься воплощением интеграции кода с железом. Когда ты сначала программируешь, а потом происходит некий физический процесс — это действительно здорово. Если этим заниматься каждый день, скорее всего, не будет такого же кайфа).
Знания нашей команды в области программирования под Arduino, а так же законов Ома, Киргофа, Кулона и т.п. ограничивались университетскими и школьными. Поэтому в течение месяца мы подтягивали матчасть и собирали нашу будущую систему по кусочкам. Причем вначале мы понимали концепцию того, что хотим получить, но в действительности определились с реализацией только за три дня до начала хакатона.
Что хотелось получить от хакатона
Цель хакатона у нас была очень простая — получить море удовольствия от реализации нашей задумки. Уже целый месяц наши разговоры на перекурах, обедах и даже в личное время были о нашем проекте. Здесь наверное добавить больше нечего.
Постановка задачи
Разработать систему визуального оповeщения о необходимых событиях. Например, при критической ошибке на сервере загорается сигнальная лампа.
Обоснование
Традиционные системы оповещения (письма, смс, сообщения в различных средствах массовой связи) не удовлетворяют по скорости и значимости, а также в значительной степени зависят от различных внутренних и внешних средств доставки, человеческого фактора. Поэтому расширение системы оповещение средством свето-визуальной индикации, является решением обозначенной выше проблемы и в полном объеме соответствует нормам Международного Права ©.
Данное решение призвано ускорить реакцию на сформулированную ранее проблему, в целом повышая качество предоставляемого сервиса. Также, не стоит упускать из виду социальный аспект. Люди, впервые столкнувшиеся с подобные решением, неизбежно будут проявлять интерес, что как следствие окажет благотворное влияние на систему коммуникации внутри компании в целом.
Проект
Простыми словами мы решили реализовать систему, которая будет нас нотифицировать о факапах на продакшене. Поддерживается два типа нотификаций: первая, когда что-то упало на проде у нас загорается проблесковый маяк красного цвета; вторая, когда какая-то характеристика выходит за пределы допустимого, загорается проблесковый маяк желтого цвета. Для реализации мы использовали:
- Arduino nano, как контроллер зажигания тушения световых сигналов;
- Два проблесковых маяка(красный, желтый);
- Два стробоскопа, для интерактивной составляющей (синий, желтый);
- Блок питания;
- Два реле;
- N метров сетевого (ethernet) кабеля, для передачи электрического тока от Arduino до маяков;
- 3 сетевых розетки;
- Пищевой контейнер, для контейниризации arduino. Docker, привет! Мы теперь все контейнизируем);
- Боковая крышка от старого системного блока, которая использовалась, как платформа на которую устанавливались маяки;
- Офисный вентилятор, который был разобран и использован как штатив, для демонстрации;
- PHP, Silex;
- Куча разной мелочи.
Два дня хакатона
Первый день
Хакатон стартовал 2 ноября в 10:00, общим фото, блинами и Dr. Pepper. Не обошлось и без опоздавших, не все смогли придти к 10 утра в понедельник).
Как нам казалось, к началу хакатона мы были готовы. Мы понимали, что собираемся делать, как мы это будем делать, закупили все необходимые компоненты, распланировали шаги и понимали, что в конце каждого шага у нас должен быть готовый результат — итеративный подход. Была видео трансляция того, что мы будем делать, поэтому мы подготовили план по интерактиву с пользователями, в этом нам помог итеративный подход. В первый день мы реализовали прототип на стробоскопах. В середине первого дня мы уже имели рабочий прототип, с которым каждый наблюдающий за нами, мог поиграться, а мы продолжали работать. Для описания разрабатываемой системы, мы использовали подход 4C (Context, Container, Component, Class). В наших условиях мы не опускались ниже уровня Container. Выложили в паблик итерфейс с 4 кнопками включить выключить, синий желтый стробоскоп. Тут нас настиг фейл с интерактивом, в видео трансляции была задержка примерно 30 секунд поэтому интерактив получился не совсем интерактивным, но всем, кто пробывал управлять удаленно нашими стробоскопами, понравилось. Даже был момент, когда один из наших сотрудников написал скрипт, который постоянно выключает лампы, и ни кто не мог их включить. Пришлось найти и пофиксить человека). Так же в самом начале возникла проблема с различными фаерволами и настройками сети, о которых мы даже не думали, потратили часа 3-4 на ее решение.
Разошлись мы где-то в начале 10 вечера. Успели большую часть запланированного на первый день.
Второй день
Второй день мы начали в 8 утра. Мы рассчитывали, что в этот день мы отделаемся только физической реализаций нашей системы. Монтаж и установка придумывались на ходу. Резали, сверлили, скручивали, изолировали на месте, паять в офисе не разрешили). Мы придерживались модульной структуры нашей системы и решили сделать кнопку селф-теста, которая включает наши проблесковые маяки на 5 секунд каждый. Это чуть не стало роковой ошибкой. Пришлось потратить ~2 часа на освоение и отладку работы с кнопкой, но эффект того стоил. Теперь систему можно было тестировать, просто подключив к питанию и нажимая кнопку. Еще одна проблема, с которой мы столкнулись, это странное поведение Arduino. Иногда она не хотела реагировать на наши команды. В долгих поисках решения мы поняли, что ей необходимо какое-то время на инициализацию, и с ней нельзя работать по схеме клиент-сервер. В этом случае клиенту придется всегда ожидать инициализации, а это ~2 секунды. Чтобы решить эту проблему, реализовали простой сокет сервер на PHP, который при старте инициализирует Arduino и после позволяет прозрачно общаться с ней без необходимости инициализации соединения. Чуть позже также реализовали сокет-сервер на Erlang’e, но в итоге все равно при демонстрации использовали PHP-сервер, т.к. сильных Erlang спецов у нас нет и рисковать на демо, не хотелось.
Час X был в 17:00 к этому времени у нас было все готово и мы даже пришли самые первые в демонстрационную комнату, чтобы все подготовить. На демо мы показали, что создали пульт по дистанционному управлению световыми маяками. Можно было с мобильника зайти на url и управлять ими. Пока я рассказывал о том, что мы сделали и как, каждый в зале мог поиграться с нашим решением и это уже был полный интерактив!
Результат
Наша система в сборе (фото / видео):
Выводы
- Хакатон, это действительно здорово и весело и отличный способ разнообразить рабочие будни;
- К такому мероприятию стоит готовится заранее, два дня это не так много времени, как может показаться (если вы конечно не делаете, то что делаете каждый день);
- По возможности применяйте итеративный подход, это вам поможет при различных фейлах. У вас всегда будет готовый продукт, может быть он не будет полностью соответствовать тому, что планировалось, но это лучше, чем ничего;
- Фейлы приходят откуда вы не ожидали. За такое короткое время любой фейл, очень сильно ощущается. У нас во время хакатона почти перед самым окончанием упал наш GitLab и для других команд это стало очень неприятным событием. Удалось в короткие сроки его оживить;
- Размер команды. Подбирайте размер команды оптимальным под вашу задачу, так же не забывайте о знаниях и навыках каждого из того кто будет в вашей команде. При больших размера вы будете терять много времени на синхронизацию действий всех членов, паразитные коммуникации — зло;
- Пицца. Скорее всего это относится не ко всем, но есть 2 дня пиццу — не возможно. Поэтому подумать о еде стоит заранее.
Выводы спустя 5 месяцев
- Мы собрали огромное количество пожеланий и проблем с первой версией хакатона;
- Не для всех хакатон был интересен и не все готовы участвовать в нем вновь;
- "Продать" идею хакатона бизнесу, не простая задача. Решений без контекста не бывает;
- Из всех проектов, которые участвовали в хакатоне, только наш работает в продакшене и приносит пользу;
- Для интеграции в продакшен, некоторые части были переписаны на Go;
- Мы уже начали задумываться на идеями для нового хакатон;
- Некоторые подходы и дух хакатона мы постарались сохранить и применять в повседневной работе;
- Если вы хотите что-то сделать, стоит руководствоваться правилом: просто надо взять и сделать, а для этого надо начать и кончить.
Всем удачи!
Автор: devKP