В моём прошлом посте я рассказывал о хакатонах. Разных, хороших. Настолько хороших, что и внутри компании захотелось устроить собственные соревнования. В посте расскажу, как проходили хакатоны в Avito, какие проекты реализовали, про техничку с полторашкой, кодокатицу, свидетеля столовой и носочки с котиками.
докладе Артура @N01Z3 Кузина на недавно прошедшем митапе в Avito. Общая схема подхода показана на рисунке.
А вот и команда проекта:
Фильтры для Paparazzo
Многие знают про наш опенсорс-проект, медиапикер Paparazzo. Он уже упоминался в этом блоге: 1, 2. В ходе хакатона коллеги вели разработку дополнительных возможностей для него. Многие пользователи Avito перед тем, как разместить фото своего автомобиля, замазывают его номера. Либо как-то еще редактируют иллюстрации к объявлению. Чтобы облегчить им эту задачу, ребята придумали встроить фильтры непосредственно в медиапикер. Для комьюнити это означает опенсорс-компонент с фильтрами, который можно встроить в свое приложение. Фильтры можно написать самому или взять из каталога.
Весь проект был написан на языке Swift, работа с DeepBelief велась на Objective-C. На хакатоне использовали встроенное определение лиц через CIDetector, поиск номера реализовали средствами фреймворка DeepBeliefSDK, умеющего распознавать, что изображено на фото.
Несколько фильтров, в частности, автоматическое замазывание лиц и номеров, встроили в основное приложение с использованием новых системных фреймворков Vision и CoreML. Работа с фильтрами выложили в опенсорс.
Также для проекта был реализован умопомрачительный фильтр, располагающий свидетеля из Фрязино рядом с людьми на фото. Зачем? Автор утверждает:
Проект с фильтрами победил в номинациях «Лучший open-source» и «Самая зажигательная презентация».
Команда проекта:
Карта офиса
Когда компания разрастается, встает необходимость навигации, поиска коллег, оргтехники, переговорок в офисе. Чтобы решить эту проблему, можно нарисовать двумерный план помещений и даже добавить интерактив с привязкой к базе данных сотрудников. Но намного эффектнее и нагляднее сделать карту трехмерной. Про этот проект Александр s9k Амосов рассказывал на РИТ++ 2017 и MoscowJS 37.
В докладах описан процесс создания WebGL-визуализации, начиная от создания модели в трехмерном редакторе и заканчивая оптимизациями из мира компьютерных игр. Посмотрите видео по ссылке выше, если вы хотите свой интерактивный 3D-проект.
Этот проект — победитель номинации «Лучший хак на свободную тему» самого первого хакатона. Уже больше года он используется в Avito и сильно облегчает жизнь сотрудникам.
Kubernetes load testing tool
Ещё один проект, который появился в результате хакатона — система для проведения нагрузочного тестирования с помощью Kubernetes. Её цель — предоставить инфраструктуру для нагрузочного тестирования микросервисов. В графическом интерфейсе можно указать, что нагрузить, профиль нагрузки и другие параметры. А потом нажать на кнопку, и система сама сшедулит стрелялку и проведет нагрузочное тестирование.
Используемые технологии: Golang для написания инфраструктурных компонентов, работы с API Kubernetes, Yandex Tank для запуска стрельбы с помощью декларативного описания параметров нагрузки, Kubernetes для оркестрации компонентами, Redis для очереди стрельб, Graphite для метрик. Система состоит из нескольких компонентов: web UI, очередь стрельб, воркеры для разгребания очереди и discovery свободных танков, танки с API для проверки текущего состояния.
Задача на стрельбу поступает от пользователя через web-интерфейс и складывается в очередь (Redis). Воркеры читают из очереди и производят discovery танков с помощью API kubernetes. Когда находится свободный танк, задание поступает в работу и производится стрельба. Во время стрельбы метрики пишутся в graphite. После окончания стрельбы есть возможность посмотреть основные метрики по latency, rps и кастомные метрики по cpu, RAM, etc. Этот проект будет допиливаться и использоваться в рабочих задачах.
Учёт мобильных девайсов
Один из хакатонов принёс нам инструмент, который совсем скоро возьмёт на себя учёт девайсов для тестирования. Он умеет читать пропуск, записывать, кто взял телефон, понимать, что девайс взяли, не приложив пропуск и — приятный бонус — заряжать телефоны.
Проект победил в номинациях «Самый полезный внутренний инструмент» и «Один в поле воин».
Отпускник
Бот для Slack, написанный во время хакатона, знает, на сколько можно уехать отдохнуть и помогает коллегам генерировать заявления на отпуск.
Helm
Для хостинга сервисов внутри Avito мы используем Kubernetes-кластер. Для управления релизами — Helm. Helm был опробован в рамках хакатона, после чего успешно внедрён.
Карта теней на террасе
Я уже писал о том, что одна из важных составляющих хорошего хакатона — упоротость. Этот проект — лауреат номинации «Самый упоротый хак». Дело в том, то мы все любим поработать на террасе и не любим, когда солнце ярко светит на монитор. И теперь у нас есть инструмент, который показывает, где на террасе будет тень в выбранную дату и время. Из технологий была использована библиотека threejs.org.
Заключение
Внутренние хакатоны дали кучку приятных возможностей и осязаемых полезностей. Часть реализованных проектов используется, другая ждёт своего часа. Третьи показали состоятельность или несостоятельность идеи, позволили оценить сложность её реализации. Хакатонщики стали чаще отходить от привычного им стека технологий и пробовать что-то им неизвестное: AST парсят, блокчейн дрессируют, на новых языках пишут. Появился соревновательный момент. С каждым хакатоном всё сложнее используемые технологии, всё круче названия команд и зажигательнее презентации.
А мне удалось узнать, как работает вентиляция, когда не работают люди, посмотреть красивейшие закаты с высоты пятнадцатого этажа, поспать в уютной норке, поболтать с аквариумными рыбками в полумраке пустого офиса и вернуться домой в синих ботинках поверх зелёных носочков с котиками.
P.S.
Пока статья дозревала, успел пройти пятый хакатон — «Грогчейн». И, впервые в истории хакатонов в Avito, моей команде Du kannst mich gern haben удалось взять номинацию за упоротость. Делали железную кнопку релиза. Деревянный корпус, внутри которого кнопка от какого-то заводского конвейера и умная железка с вайфаем. Нажимаешь кнопку — сервис выкатывается в бой.
Как-нибудь расскажу подробнее о пятом хакатоне. О телеграм-боте, об умном кэшировании, о том, почему QA больше не нужны и о том, как прокачать ваш Exchange.
Источник: Хабрахабр