В моём прошлом посте я рассказывал о хакатонах. Разных, хороших. Настолько хороших, что и внутри компании захотелось устроить собственные соревнования. В посте расскажу, как проходили хакатоны в Avito, какие проекты реализовали, про техничку с полторашкой, кодокатицу, свидетеля столовой и носочки с котиками.



Внутренние хакатоны Avito


Полторашка


imageПервый хакатон запланировали провести в течение полутора суток. Маленький, экспериментальный, просто организованный, по-домашнему уютный. Название напрашивалось само собой — «Полторашка».


Хакатон проходил в пятницу и субботу: руководство отдало участникам один рабочий день. Это всем понравилось, используем дальше.


Для работы отвели конференц-зал, чтобы не мешать коллегам: первый день рабочий, пятница. Организационная часть — одно собрание участников накануне хакатона. За полчасика рассказали о формате, ответили на вопросы, объявили регламент. Питание организовали на базе своей столовой.


За регламентом следили строго: репозитории закрыли на запись после дедлайна, на финальные питчи отвели по три минуты. Питчи записывали на видео. Победителей определяли общим голосованием технического департамента, даже среди тех, кто не участвовал в хакатоне. Поэтому награждение прошло через неделю после окончания хакатона, когда голосование завершилось.


Было опасение, что внутри компании не наберётся достаточно желающих, но всё прошло отлично: заявилось больше десятка команд, полутора суток хватило.


Техничка


imageВторой хакатон стал экспериментом с ограничением тематики. Его посвятили техническим вопросам: техпортал и внутренние инструменты разработки, инструменты-кандидаты на опенсорс. Выбрали название: «Техничка».


Ввели простую систему номинаций, например, самый упоротый хак или самый полезный хак. Победители в номинациях получили на выбор поход на квест или в бар. Угадайте, что выбирали победители. Лучшие проекты определили сразу по завершении «Технички»: голосованием среди хакатонщиков.


Заявилось пятнадцать команд. Участники начали придумывать забавные названия командам, предлагать смелые идеи проектов. Появился ряд качественных прототипов.


Chucknology


imageТретий хакатон, Chucknology, сконцентрировался на поиске новых решений в рамках продукта, продолжил поддерживать опенсорс-проекты и полезные в работе инструменты. Перечислен список перспективных технологий для номинации «Самый инновационный хак». Появился переходящий кубок как главный приз. На нём гравируют имена победителей. Уже в планах приделывать ступеньки как у кубка лорда Стэнли.


Четырнадцать команд на финише. Идеи стали смелее, а проекты заметно сложнее: нейросети повсюду, хитрая кластеризация больших объёмов данных для поиска, продвинутая визуализация. Демонстрации и презентации повзрослели. Стали появляться презентации с фото и видео, снятыми во время хакатона.


На одной из демонстраций сфотографировали зал на камеру смартфона, и демонстрируемое приложение аккуратно подставило в толпу Свидетеля из Фрязино. В скором времени в офисе появился картонный Свидетель в полный рост. Иногда он путешествует на конференции вместе с нами, а иногда помогает на хакатонах.



Этот скриншот — из внутреннего сервиса, написанного в межхакатонье и позволяющего узнать, нет ли очереди в столовой. Хакатонщики уже грозились прикрутить к сервису компьютерное зрение, чтобы выводить длину очереди в виде метрики в мониторинг.


Кодокатица


imageЧетвёртый хакатон поставил рекорд по количеству команд: двадцать. По традиции Rust у одной из них. Названия продолжают эволюционировать: бок о бок работают «Вздутый кляр» и «Дверь мне сгенерируй или клиент мне запили». Перед хакатоном в чате идёт агитация:


Хакатонщики! В команде «Асинхронные упоры» всё ещё есть места!
Мы пишем host-based IDS на Rust c применением blockchain. Требуются ржавые хардкорные бекендеры и один фронтендер со спиннером. Асинхронисты всех стран, объединяйтесь!

В этот раз победителей определяло независимое жюри. Лишь одну номинацию, «Выбор технического департамента», вынесли на внутреннее голосование.


Подытог


Что важного узнали при организации внутренних хакатонов? Подобрали оптимальную частоту — раз в квартал. Нашли подходящий формат: старт в пятницу утром, завершение в субботу вечером. Анонсируем очередной хакатон на внутренних мероприятиях, рассылками в чате и почте.


Заранее формируем команды, определяемся с темой. Проводим мозговые штурмы идей одной или несколькими командами, если есть соприкосновение по тематике. Стараемся не конкурировать в рамках одной идеи. Не боимся писать на расте и браться за задачи уровня оператора кубернетеса и нейронок.


Минимализм при организации: предоставляем место, питание. За день до хакатона — собрание на полчасика с рассказом о формате и регламенте. В завершение — питчи и подведение итогов.


Проекты


Уже прошло четыре хакатона по десять-двадцать команд. В результате — много проектов. Часть из них даже стали основой для боевых сервисов. Часть — полезными внутренними инструментами. Рассказывать можно не всё, но о некоторых проектах поведаю.


Определение микрокатегории и генерация заголовка объявления на Avito по фото


На хакатоне была создана демо-версия сервиса, который подсказывает пользователю 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.

Комментарии (27)


  1. hiddenman
    20.11.2017 14:12

    Скажите, когда пройдет хакатон, после которого Avito научится не спрашивать у меня город каждый раз? О нормальном поиске даже не прошу.
    Еще, кстати, «магическим» образом я попал в аккаунт к совершенно чужому человеку (с другим номером телефона и объявлениями), при этом по почти своему email-у (внутри адреса точка откуда-то взялась), но по такому же паролю.
    Пришлось удалить его данные. Явно вы что-то намудрили у себя или какой-то серьезный баг, не разбирался. Хотя если у вас есть bounty bug program, можно и поразбираться.


    1. igor_kuznetsov
      20.11.2017 15:24

      Зачем нормальный поиск? Главное — впарить премиум размещение.Скоро нужно будет нажать 20 кнопок чтоб отказаться…


    1. avitocare
      20.11.2017 15:43
      +1

      Пожалуйста, напишите нам в личку:
      1. На какой из версий сайта (веб, мобайл, приложение) появляются проблемы с определением города.
      2. Электронный адрес, который вы использовали для входа на сайт перед тем, как попали в чужой аккаунт.

      Попробуем разобраться вместе!


      1. hiddenman
        20.11.2017 19:22

        1. Вёб. Заходишь на сайт и каждый раз спрашивает. Любой уважающий себя сайт умеет GeoData уже лет 15. Сделайте автоматически и спрашивайте просто мой это город или нет, если надо.
        2. Ок, напишу.


      1. hiddenman
        21.11.2017 14:59

        Кстати, даже если я залогинился в свой аккаунт, где явно указано, что я из Москвы, все равно спрашивает город при входе на avito.ru.
        При этом нет варианта Вся Россия. А когда уже выбрал город, в поиске можно сменить на «Вся Россия». Какой смысл каждый раз спрашивать город и почему нельзя выбрать всю Россию на главной?


  1. FreakII
    20.11.2017 14:19
    +2

    В посте расскажу, как проходили хакатоны в Avito

    Лучше расскажите, когда перестанете использовать темные паттерны при подаче объявления


  1. Alex_info
    20.11.2017 23:54

    Да, Авито любит всякие провокации, например взять деньги за поднятие объявления, а потом прислать сообщение что «Ваше объявление заблокировано». Блокировка оказывается случайной, и через 5-7 часов модераторы Авито её могут снять, но всё самое эффективное и оплаченное время поднятия уже пройдёт. Причём заметил что Авито любит так делать с частными объявлениями, у компаний имеющих сотни объявлений таких «чудес» не происходит. С большой вероятностью возможно предположить что такие «случайности» вовсе не случайны. Просто такой метод мелкого кидалово от «Авито», частные объявления «случайно» скатываются в поиске, а объявления компаний «всплывают». Интересно, кто для Авито более выгодный клиент компания с парой сотен объявлений или частный клиент с одним двумя? Как говорил К. Маркс «Капитал боится отсутствия прибыли или слишком маленькой прибыли, как природа боится пустоты. Но раз имеется в наличии достаточная прибыль, капитал становится смелым. Обеспечьте 10 %, и капитал согласен на всякое применение, при 20 % он становится оживлённым, при 50 % положительно готов сломать себе голову, при 100 % он попирает все человеческие законы, при 300 % нет такого преступления, на которое он не рискнул бы, хотя бы под страхом виселицы.»


  1. mSnus
    21.11.2017 06:56

    Хакатон, кубернетес, раст… Распознавание изображений! Здорово.


    А что из этого заставляет фильтр по ценам "от… до" (простой текстовый блок с пятью элементами) грузить отдельно и на стороне клиента, а не сразу со всей страницей на сервере? Зачем прятать его до захода в под-категорию, их же не так много?


    В общем, хотел попросить, чтобы фильтр по ценам в полной версии сайта
    1) появлялся без захода в под-категорию
    2) грузился сразу, а не через полсекунды


  1. Kadetoff
    21.11.2017 08:05

    Научитесь бороться со спамом. После попадания телефонного номера на Авито, начинается шквал спама на телефон.


    1. Germanets
      21.11.2017 11:53

      Я так понимаю, спам идёт не через Авито, а просто через смс? То есть бороться надо всё-таки не со спамом, а каким-то (полу)автоматическим парсингом номеров с сайта…


  1. SanekPlus
    21.11.2017 13:05

    Помню сделал объявление в своем городе о продаже, потом понял, что в моем маленьком городе я долго это буду продавать и стер объявление. Попытался сделать это объявление на соседний город (5 км. ) так все, это спам блин! Отклоняет модератор не разбираясь и не вникая никаким аргументом. Полная тупость. Я что, все спамом уделываю там чтоли? Капец.
    Жаль мало альтернатив Авито, но они есть и работают.


    1. avitocare
      21.11.2017 14:13

      Написали вам в ЛС.


      1. SanekPlus
        21.11.2017 14:50

        У меня в личке от вас вот это:

        Действительно, согласно текущим правилам сайта, размещать объявления можно только в том городе, в котором находится товар.

        В скором времени мы запустим сервис Avito-доставка, который поможет увидеть ваше объявление покупателям из других городов и регионов.


        Авито-доставка, это что-то платное и мне очень нужное да?

        Дело в том, что мой «другой город» находится на расстояние 5 км, тоесть это лишь формально другой город, это же очевидная вещь, не? Кстати, когда я решил ну хоть вернуть объявление назад в свой город, мне тоже отказали, потому, что я типа дублирую объявление, которое уже было. ЛОЛ. :)) Фактически получается, что мне отказали в продаже этой вещи на авито.
        Ладно бы я был там каким-то агрессивным менеджером активно использующим механизмы Авито для проталкивания своих товаров, так нет же, я там пару раз в год, что-то вывешиваю… Такое ощущение, что те, кто придумывает правила на Авито смотрит на пользователей как на врагов.


        1. avitocare
          21.11.2017 15:16

          Данный сервис поможет вам быстро и безопасно продать свой товар покупателю из другого региона страны. Подробнее о сервисе Avito-доставка вы можете прочитать по следующей ссылке: support.avito.ru/categories/115000474347

          Если у вас снова возникнет похожая ситуация с объявлениями, то свяжитесь, пожалуйста, с нами через официальное сообщество: vk.com/avitoclub
          Постараемся быстро помочь и решить вашу проблему.


          1. SanekPlus
            21.11.2017 16:46

            Ясно, понятно.


  1. Ant1Stat1c
    21.11.2017 13:17

    Личные сообщения когда почините? Одни обещания…


    1. avitocare
      21.11.2017 14:04

      К сожалению, сейчас мессенджер работает так себе. Активно чиним.


  1. darjke
    21.11.2017 17:48
    +1

    А куда-то выкладываются исходники проектов о которых можно рассказывать? А то интересно же не только что напридумывали, но и как реализовывали.


    1. pik4ez Автор
      21.11.2017 17:51
      +1

      Отдельно проекты с хакатонов не выкладываем. Но если авторы решат, что можно поделиться с общественностью, исходники появятся здесь: github.com/avito-tech.


  1. Zeka13
    22.11.2017 00:02

    По тексту статьи кажется что в Avito круто, почитал ответы в комментариях на реальные проблемы, будто роботы отвечают. Всё таки видимо там довольно уныло.


    1. pik4ez Автор
      22.11.2017 00:30

      В Avito круто.

      Круто, если ваш уровень совпадает с рабочими задачами. Круто, если вы готовы работать: здесь любят результат. Круто, если готовы брать на себя ответственность. Общий уровень адекватности в техотделе очень высок. Поймайте меня на какой-нибудь конференции, расскажу подробнее. Часами могу болтать, а хабр гуманитария не стерпит.

      Офис выше всяких похвал.

      В Avito не круто.

      Не круто, если вы ленитесь и не хотите работать. Не круто, если вам не нравятся ваши рабочие задачи.

      В компании в целом и в техотделе в частности сотни человек. Это много. Они разные. Одним словом, «хорошо» или «плохо» такое явление не описать.

      Комментарии к статье, к огромному сожалению, не про статью. Но даже на них мы реагируем, ставим задачи, улучшаем продукт.


  1. avelor
    22.11.2017 00:53

    А можно поинтересоваться средним возрастом сотрудников техотдела?


    И да, смотрю на блог — хакатоны, митапы, котлин… свидетели из фрязино и черные властелины… а основной продукт судя по комментариям не фонтан.


    Подобное довольно часто встречается, кмк — модно, стильно, молодёжно с так-себе-продуктом. Впрочем, и суровый совок с категориями и разрядами программистов не всегда выдаёт что-то хорошее.


    1. pik4ez Автор
      22.11.2017 01:28

      Я плохо определяю возраст по людям. Достаточно молодые в среднем.

      В блоге пишем про яркие и интересные события. На конференциях, внутренних и внешних митапах часто рассказываем про более приземлённые вещи: решения во фронтенде, бэкенде, платформе. У нас кубернетес для оркестрации и Helm для управления релизами, вовсю применяется компьютерное зрение, поиск по миллиарду объявлений в бэкофисе и множество других сложных интересностей.

      Ошибки с удовольствием допускаем и с ещё большим удовольствием исправляем. Кто не ошибается, тот ничего не делает.

      Стильно-модно-молодёжно — я не смогу так сказать про компанию с десятилетней историей, взрослым продуктом и сотнями сотрудников.


      1. avelor
        22.11.2017 02:12

        Спасибо за ответ.


        Ещё вопрос, больше личного характера, просто из любопытства (ну почти только из любопытства). Навороченный офис, проведение мероприятий различного характера и тп это довольно серьёзные затраты для компании, которые вместо этого могли бы пойти в ФОТ. Поменяли ли бы вы всё это на увеличение зарплаты в полтора-два раза?


        1. pik4ez Автор
          22.11.2017 02:15

          Ну, раз вопрос личный, и отвечу в личку.


  1. Ayleda
    23.11.2017 00:30

    А можно подробнее о проекте учёта тестовых устройств. У нас тоже стоит эта проблема и тоже пытались решить ее на хакатоне:/ можно и в личку;)


    1. Mishko_kun
      23.11.2017 09:39

      Если в общих чертах, то система состоит из двух компонентов:


      1. Сервер на Go:
        • Считывает id пропуска при поднесении карты, логинит/регистрирует пользователей
        • Считывает с usb портов список подключиных устройств (через обертку над libusb), матчит их с устройствами в БД по serial number
        • Контроллирует был ли авторизован юзер в момент отключения устройства и записывает id в табличку, либо статус что девайс был взят без авторизации
        • Отдает данные в web-сокет.
      2. Клиент на Angular:
        • Общается с сервером по web-сокет и выводит информацию на экран.
        • Умеет добавлять в систему новых пользователей

      Возможно есть более конкретные вопросы?