30 ноября и 1 декабря в Челябинске прошли первые городские соревнования разработчиков ChelHack. Организаторами стали местные IT-компании: мы (fuse8), Интерсвязь, Napoleon IT, Xpage и АНО «Центр кластерного развития Челябинской области».
Двое суток участники ChelHack решали интересные задачи по веб-разработке и машинному обучению, сражаясь за главный приз в 100 000 рублей в каждой из номинаций.
Мне посчастливилось поучаствовать в хакатоне в роли организатора. И я хотел бы рассказать о ChelHack тем, кто по каким-то причинам пропустил его. Поскольку я имел отношение в основном к треку по web-разработке, впечатления по большей части относятся к нему.
Дебют
Народу было много: ChelHack собрал 110 участников. Это 33 команды: 22 в треке по web-разработке и 11 — в Machine Learning. Большинство участников — студенты (информационная поддержка со стороны ВУЗов была на высоте). Также была солидная прослойка из программистов. Побороться за главный приз пришёл даже один технический директор!
ChelHack проходил в СПА-отеле «Мелиот» сразу в трех залах. В первом и самом просторном разместились большинство участников хакатона. Мы оборудовали зал самым необходимым: рабочими столами и мягкой зоной с креслами-мешками. Негромко, чтобы не отвлекать хакатонщиков, играла музыка. Ещё два зала, поменьше, облюбовали команды, которые предпочитают кодить в полной тишине.
Народ приступил к работе по-разному: одни сразу сели писать код, другие устроили небольшие брейнштормы внутри команд. Пожалуй, именно в начале хакатона у участников возникало больше всего вопросов — эксперты сновали между столами, неся мудрость в массы и стараясь не выдать лишнего. Параллельно в Телеграмме мы в режиме онлайн обновляли F.A.Q. для участников, стараясь выносить ответы на самые часто задаваемые вопросы на всеобщее обозрение.
К вечеру 30 ноября многие ребята уже выкатили вменяемые результаты, которые мы смогли протестировать на производительность и дать народу первые отзывы по работе их продуктов. Так что уже к концу дня сформировался первый (крайне предварительный) список лидеров.
Honorable mentions
- Позитивный настрой. Периодически эксперты устраивали набеги на команды с вопросом «Ребята, как у вас дела?». Самый популярный ответ в первый день – «Дела супер, но пока нифига не работает».
- На ночь остались около 40 человек, не пожелавших давать вдохновению ни малейшего шанса улизнуть. Особенно запомнились ребята, в команде которых из пяти человек четверо были несовершеннолетними. По правилам хакатона они не могли остаться на ночь. Поэтому они снабдили единственного обладателя взрослого статуса ценнейшими рекомендациями по подъёму линукса и уехали домой. А в 8 часов утра уже будили завернутого в плед товарища и требовали немедленно оживить сервер.
- Неизвестные мне герои с ML-трека, соорудив прототип программы распознавания госзнаков автомобилей, совершили ночное паломничество по дорогам города с целью расширить имеющийся датасет грязных номеров.
- В целом, первый день выглядел более продуктивным. На второй у кого-то выдалась бессонная ночь, а кто-то просто устал — популярность кресел-мешков стремительно росла.
Миттельшпиль
Второй день начался с почти стихийного конкурса носков. Голосование за самые креативные пары проходило в телеграмм-канале. Победителями стали носки-Гомеры и носки-яичницы. Их хозяева получили фирменные флешки ChelHack.
При более детальным рассмотрении яичница оказалась авокадо. Никогда бы не подумал, что это два настолько схожих продукта.
Приходящий и просыпающийся народ выглядел помятым, но не желающим сдаваться. За ночь накопились вопросы, участники и эксперты бодро втягивались в работу. Некоторые команды уже на этом этапе считали свои решения готовыми. Поэтому мы подсказали им, как можно расширить функционал и получить дополнительные баллы.
Страсти начали накаляться после обеда. Мы заранее отметили в расписании, что в 16:00 отключим доступ к серверам и возможность деплоя, чтобы начать плотное тестирование проектов.
В 15:00 мы ещё раз прошлись по ребятам и попросили их выложить на серверы хоть какое-то решение — чтобы было понятно, что оно у них есть. В итоге у нас всё равно остались две команды, которые не успели к дедлайну и не предоставили работы к зачету.
Honorable Mentions
- Конкурс на лучшее фото на площадке. Совершенно неожиданно первое место по итогам голосования через гугл-форму занял весьма ординарный снимок.
Авторы, используя социальную инженерию и крайне скрытные методы, умудрились накрутить себе голосов. Памятуя, что у нас все-таки хакатон, мы наградили ребят за хитрость и смекалку. Также награду получили авторы самого неординарного снимка.
- Кросстрековая помощь участникам. Иногда ребята задавали вопросы прямо в телеграмм-канале мероприятия, и некоторые советы по web-разработке давали ребята с Machine Learning. Все восхищались чувствами плеча и товарищества.
- У нас были запланированы две сессии с ответами на вопросы участников хакатона. Но поскольку эксперты работали на площадке в режиме реал-тайм, необходимость таких консультаций была под вопросом. В итоге мы решили организовать «Экспертный диван» (не путать с диванными экспертами), где бурно обсуждались критерии приёмки работ по функционалу.
Эндшпиль
Ближе к 15:00 народ начал шлифовать свои решения. Было такое ощущение, что все хотели запихать в проект что-нибудь ещё, но дедлайн неумолимо приближался. Финалы на треках проходили немного по-разному.
В треке по Machine Learning была своя сложная трехступенчатая система определения победителя. После второго этапа часть команд отсеялась. Жюри оценивали скорость обработки и корректности распознавания номеров автомобилей. На завершающем третьем этапе ребята защищали свои решения перед экспертами.
Machine Learning
В треке по Machine Learning мы взяли боевую задачу из проекта «Умный транспорт» — распознавание регистрационного номера автомобиля по изображению, полученному с обычной IP-камеры. Такие решения могут использоваться в создании новых парковочных пространств в «Умном городе» и автостоянок с автоматизированной системой контроля доступа.
Датасет содержал более 6 тысяч изображений разного разрешения с реальных камер в Челябинске, полученных в разных погодных условиях и в разное время суток. Единственным требованием к фотографиям была возможность правильно распознать номер человеком.
Команды на хакатоне предложили несколько способов решения этой задачи. В одном случае ребята пытались адаптировать модели распознавания из проекта Nomeroff Net к нашему датасету. Убедившись, что детектор работает корректно, разработчики пытались дообучить на наших данных сверточные сети, решающие задачу OCR. По этому пути шла команда победителей хакатона «Хурма» и несколько других команд (включая команду организаторов, которые участвовали в ChelHack вне зачета). Второй подход заключался в реализации собственной нейросетевой модели без использования готовых открытых решений. К сожалению двух дней оказалось недостаточно, чтобы такой авторский подход показал значимые результаты. Но нам как организаторам было интересно наблюдать за ходом мыслей ребят (среди которых были и школьники) в этом направлении. Третий подход выбрали новички в машинном обучении. Он заключался в попытке улучшить базовое решение (kernel), предложенное организаторами в начале соревнования. В этом подходе использовалась библиотека OpenCV без нейронных сетей. Ребята разобрались с библиотекой и смогли показать результат, который позволил им занять третье место в хакатоне. Для команды, участники которой познакомилась в первый день на площадке хакатона, это большой успех.
Главный приз в треке Machine Learning забрала «Хурма» — команда центра математического моделирования анализа данных ЧТПЗ.
Организаторы трека ML считают, что победу «Хурме» обеспечили разумное распределение времени и сил, а также максимальное использование открытых решений, идей и данных, доступных в интернете, что было разрешено правилами соревнования.
Web-разработка
Задача Web-трека выглядела обманчиво простой: нужно было поднять на линукс-сервере секцию «Черной пятницы» интернет-магазина, которая нормально работала бы под нагрузкой.
Мы предоставили участникам доступ к API, куда они могли делать запросы и получать информацию о товарах.
Чтобы усложнить задачу, мы немного «поломали» API. Вместо мгновенного ответа оно отвечало на запрос спустя 3 секунды, а каждый сотый ответ выдавало с ошибкой. Мы ждали, что участники, поняв принцип работы API, реализуют в своих решениях сохранение данных на своей стороне и сделают код устойчивым к ошибкам. Забегая вперед, скажу, что многие участники оправдали наши ожидания, реализовав кэширование.
В треке по web-разработке доступ к серверам отключился в 16:00. В этот момент эксперты начали тестирование решений команд. Жюри оценивали решение в первую очередь со стороны функционала (возможность купить товар). Ведь если приложение не может выполнить свои основные функции, нет смысла оценивать его дизайн и скорость работы под нагрузкой.
Пяти лучшим командам эксперты предложили презентовать свои решения всем участникам хакатона: кратко рассказать о методах, которые они выбрали для реализации проекта, и сложностях, с которыми пришлось столкнуться в процессе. Примечательно, что проекты команд, занявших призовые места, работали под нагрузкой примерно на одном уровне.
Главным победителем в треке стала команда 4pt из Челябинского радиотехнического колледжа. Они не только хорошо реализовали функционал, но и прикрутили красивые заготовки для внешнего дизайна страниц.
Из моментов, на которые стоит обратить большинству участников — это деплой приложения на линукс-сервере. Было жаль ребят, которые не успели вовремя загрузить решения. Но дедлайн есть дедлайн.
Honorable Mentions
- Третье место в треке Machine Learning заняла команда из людей, которые не были знакомы друг с другом до хакатона. Мне кажется, в этом и есть магия ChelHack – в объединении людей для решения сложной задачи. Думаю, у ребят теперь есть много поводов продолжить дружбу. Да и в целом, было здорово наблюдать за общением хакатонщиков в кофейной зоне за поглощением печенюх и пирожков.
- Радует, что победителями трека по web-разработке стали студенты — ребята утерли нос уже состоявшимся программистам. У челябинского IT большое будущее!
- Интрига при объявлении победителей трека по web-разработке. Решения презентовали пять лучших команд, а призовых мест было три. И до последнего момента сохранялась мощнейшая интрига — кто же станет победителем? Презентации всех участников выглядели очень достойно. Наблюдая мандраж людей, по-настоящему понимаешь, сколько сил и надежд люди вкладывали в свои решения.
Закончился ChelHack на позитивной ноте. Участники обсуждали решения победителей, организаторы рассказывали некоторые закулисные истории. После награждения участников ждали фотосессия и афтерпати.
Постскриптум
Это были чертовски насыщенные два дня. Несмотря на усталость и дух соперничества, атмосфера на хакатоне была просто невероятной. Мы физически ощущали свою причастность к созданию чего-то великолепного, нового и захватывающего.
Интересно было почитать отзывы ребят и сравнить их впечатления от мероприятия с нашими. Забегая вперед, скажу, что в целом мы получили позитивный фидбэк. Но есть и моменты, над которыми стоит поработать.
Многие отметили получение новых скиллов: будь то деплой приложения на Линуксе или работа в команде с людьми, которых видишь первый раз в жизни.
Почти все оценили «мягкий» формат мероприятия — ковролин и приглушенный свет явно способствуют работоспособности и спокойной обстановке.
НУЖНО. БОЛЬШЕ. КРЕСЕЛ-МЕШКОВ!!! И яблок! И соков! И морсики. Морсики определенно нужно подвезти к следующему мероприятию.
Огромное спасибо организаторам, партнёрам и участникам ChelHack за одно из самых эмоционально-мощных событий всего челябинского IT-сообщества в этом году.
Кстати, большой фоторепортаж с ChelHack ищите на «Геометрии» и в официальной группе хакатона во «Вконтакте».
Организаторы: fuse8, Интерсвязь, Napoleon IT, Xpage и АНО «Центр кластерного развития Челябинской области».
Образовательные партнеры: ЧелГУ, ЮУрГУ, МИДиС.
IT-партнёры: школа «Корпус», компании UNIT6 и Intec, школа робототехники «Лига Роботов», компьютерная академия «Шаг», Lukevium, детский клуб образовательной и спортивной робототехники RoboSportClub.