В августе мы прошли отборочный хакатон Цифрового Прорыва в родном Ижевске и попали в финал, который проходил в Казани в конце сентября. Это мероприятие на 48 часов где команды от 3 до 5 человек получив реальную задачу, провайдерами которой выступают крупные министерства или бизнесы, должны сделать рабочий прототип и, протащив его через серию проверок и презентаций, защитить перед комиссией.
Заранее скажу, что мы не попали в единственный приз на трек и заняли 4 место из 17 команд.
2019-09-26, Чт
В четверг встречаемся рано утром на вокзале Ижевска и сразу начинаем обсуждать ночное письмо от организаторов со списком будущих треков, которые нам нужно ранжировать до вечера в зависимости от того, что нам больше нравится. Нас трое: дизайнер Дима, разработчик Слава и я. Второй дизайнер Кирилл не смог поехать из-за болезни и это была настоящая потеря. Все вместе мы познакомились на отборочных. О том, что получился дрим-тим я уже писал.
Отсортированный нами список треков.xlsx
Прыгаем в поезд и тратим бо́льшую часть времени на обсуждение. Задач нет, есть только 20 тем и их провайдеров, которые описаны примерно так: «ПАО «Газпром нефть» — Разработать сервис анализа данных для дефектоскопии транспортных трубопроводов». Полного описания задачи, разумеется, нет и это главная интрига. Ведь как только будет задача, можно будет приступать к её решению.
Мы гадаем, но общий вектор понятен, хотя в некоторых темах есть ловушки и они не то чем кажутся. Например, та же дефектоскопия это не про анализ терабайтов фоток трубопровода сделанных дроном с воздуха, а вовсе про digital signal processing. Мы чуть было не взяли её первым пиком, но вовремя прогуглили.
Из 20 тем отбрасываем ровно половину — они совсем скучные. Из оставшихся выстраиваем топ, особое внимание уделяем первым трём. Выбираем:
- Построение карты реального покрытия сотовой сети для Минтранса потому, что у Славы хороший опыт с картами, а я могу из говна и палок сделать железку-логгер.
- AR/VR для производства и Минпромторга лишь из-за того что я хорошо разбираюсь в производственной кухне и в том, что сейчас на этой кухне происходит с AR (при этом никакого прикладного опыта с этой тематикой у нас нет вообще и мы даже не понимаем на каких технологиях это делать).
- Мониторинг пунктов сбора мусора для, почему-то, Ростелекома. Думаем что там можно выступить с компьютерным зрением, да и тема интересная сама по себе.
Параллельно слушаем интересные истории бывшего машиниста о том как неприятно сбивать поездом самоубийц и близорукое нытьё какой-то бабулитты о том что дорожный сбор на её туарег слишком велик и она его не платит потому что в правительстве дураки и вообще: я машиной не пользуюсь.
Десантируемся в Казани и едем вписываться в патихаус. На самом деле огромную квартиру у которой один только балкон примыкает к 2 стенам дома и по площади похож на всю мою квартиру. Обсуждаем темы и придумываем как будем действовать. Идем ужинать в Мегу которая удачно оказалась в 5 минутах ходьбы.
Перед отъездом я взял с собой два одноплатника: RPi3 и Jetson Nano на случай если придётся прототипировать устройство. При этом на Джетсоне было развёрнуто только основное окружение и мне перед отъездом удалось запустить дефолтовые примеры кода с машинным зрением. Остаток вечера четверга я потратил на то, чтобы настроить всё на бесшовную работу с моим ноутом и не зависеть в будущем от сетей площадки. В общем, на руках у нас были максимально универсальные железки, которые при необходимости можно было приспособить много для чего.
2019-09-27, Птн
1 Отличная площадка. Вообще в Удмуртии мы называем соседний Татарстан «Россией здорового человека».
В пятницу регистрация начиналась с 7-30 и длилась весь день. Примерно к 10 утра долетаем на такси до Казань Экспо1. Без проблем забираем бэйджи. Стоим трёхминутную очередь за сине-оранжевыми толстовками и отправляемся изучать карту площадки. Слава идет на стойку регистрации и возвращается с новостями: нас посеяли во второй пик.
Наше будущее на ближайшие 3 дня — это AR/VR для Минпромторга.
Бежим на площадку нашего трека, получаем задачу и детально её изучаем. Задача сформулирована довольно конкретно. Указано даже, что нужно изучить опыт Lokheed Martin и Boeing чтобы её решить. Обсуждаем, гуглим, вывод простой: продукт понятен, но очевидно что не нам одним. А ещё он сложный. Кроме этого нас смущает частое упоминание в задаче ключевого слова «специальный техпроцесс».
Тут важно сказать, что мы могли легально поменять трек аж до 19 часов пятницы. Но подход, который исповедует наша команда: «Похуй, пляшем. Работаем с тем, что есть. Так веселее.» Легко залендиться в тему VR, если ты занимаешься этим всю свою жизнь, знаешь технологии и у тебя есть оборудование. Таких было большинство. Мы же предпочли выкручиваться на незнакомом треке о существовании которого узнали сутки назад. Это не ошибка, а осознанный выбор.
Мы предпочли выкручиваться на незнакомом треке о существовании которого узнали сутки назад. Наш осознанный выбор.
Следующие 2 часа мы распаковываем все свои знания по теме, много гуглим и много обсуждаем. Главный вопрос: на каких технологиях мы можем сделать прототип и демку? Для VR нужны очки, которых у нас нет, Unity или UE о которых мы ничего не знаем, трекинг позиции головы и пр.
Однако, JavaScript не был бы таким популярным, если бы с его помощью невозможно было решить вообще всё на свете. Слава хорошо умеет JS. У меня есть хороший производственный бэкграунд. У нас даже дизайнер есть — с таким сетапом, считай, можно вообще ничего не делать и сразу идти в кассу за деньгами.
Что угодно можно сделать на JS
Идём на торжественное открытие и во время церемонии гуглим доступные либы и сопряжённые технологии. В голове потихоньку появляется понимание, что хоть что-то мы показать всё-таки сможем. После церемонии к нам подходит эксперт из отрасли и мы беседуем с ней около 10 минут. Мы традиционно окольными путями пытаемся выяснить «чё там у других».
1300 ₽ по карте Mastercard
Выясняем, что задачу мы с самого начала поняли верно. Что «специальными техпроцессами» можно пренебречь потому, что большинство команд задачу не поняли вовсе и ей пришлось им всё разжёвывать, а значит «специальные техпроцессы» не решит никто. Но главное: она работает на Казанском Авиастроительном где собирают военные самолёты и нам становится ясен их фокус и к чему в задаче были референсы к Lokheed и Boeing.
2 тыс. рублей мы потратили на набор Лего и пассивные очки в ближайшем торговом центре.
Слава сразу озвучивает идею: в демке мы будем собирать Lego Duplo. Нужный комплект с самолётом продаётся в ТЦ недалеко от нашей квартиры. Это отличная идея потому что в ней полно задора и оригинальности и при этом такая демка в полной мере покажет даже серьёзный функционал.
2 Да кто вообще захочет конкурировать с таким ультимативным набором баззвордов?!
Прототип, демка и даже продукт окончательно складываются: мы будем делать, простихоспади, VR на JS, который запустится прямо в мобильном браузере и будет показывать overlay с информацией поверх картинки с камеры смартфона. Сам телефон мы установим в обычные, «пассивные» очки. Информацию мы выудим из локальной базы данных и она будет рендериться контекстно в зависимости от того какую именно деталь видит пользователь прямо сейчас. Для этого придётся расчехлить Джетсон и сделать какое-то компьютерное зрение с нейросетью и GPU-акселлерацией2.
Приложение будет распознавать конкретную деталь в кадре и накладывать поверх неё полезные данные типа чертежей, схемы сборки, шаблона и допусков.
Вроде бы вырисовывается бомба. Особенно если учесть, что мы сможем «продать» это как дополненную реальность, а не виртуальную. Осталось мелочь: всё купить и закодить то, чего мы никогда раньше не кодили.
800 ₽ по карте Mastercard
Времени 22 и на разбитом такси мы летим домой потому что ещё нужно успеть купить дешевые очки и Лего. Успеваем. Дома ковыряемся с покупками и я звоню Тиму, обрисовываю наш план. Он соглашается помочь. Очевидно, что самостоятельно я CV не успею и у нас нет возможности раздать ему удалённый доступ к Джетсону да и это было бы совсем уж не честно. Слава деплоит первые демки на очки, я делаю 60 фоток деталей лего-самолёта на фоне белой доски валявшегося на балконе ДСП для того чтобы позже обучить на них нейросеть. Дима уже во всю рисует презентацию. В 01-30 идём спать.
2019-09-28, Сб
3 Выполнен в виде Google формы с набором вопросов о будущем прототипе и настрое команды. Если честно: эти формальные чекпоинты значительно полезнее, чем показались нам на первый взгляд.
Утром успеваем в экспоцентр к 8-30. Проходим формальный чекпоинт3. Назначаем внутрикомандный чекпоинт на 15 часов. Суббота — единственный день, когда мы можем работать от рассвета до глубокой ночи. 15 часов — это середина дня и всего хакатона. Дедлайн к которому нам нужно точно знать что именно мы будем показывать на предзащите завтра утром. Повернуть обратно или доделать что-то серьёзное после этой отметки будет невозможно.
Технически чекпоинты выполнены в виде Google формы с набором вопросов о будущем прототипе и настрое команды.
Я не волнуюсь за презу — она почти готова, и не волнуюсь за продукт — у меня есть ответы на все вопросы, поэтому звоню Тиму, шарю экран и мы несколько часов без остановки пытаемся одну за другой запустить обученные по моим фоткам модели. Ничего не получается. За весь день со стороны компьютерного зрения не было вообще никакого инкремента и это жутко бесило. Особенно на фоне того, что Слава с Димой сильно продвинулись в своей части и оверлей во всю верстался, а ассеты к нему активно рисовались.
В 15-00 принимаем решение делать видео, как было запланировано изначально: вместе с CV, а если попросят живую демонстрацию, то CV «внезапно сломается» — всякое бывает, электричество до конца не изучено. Допридумываем пару крутых фич про проверку детали проецируемым шаблоном и factory-wide traceability через фотки qr-кодов. Предзащиты начинаются завтра в 10-30 и к этому времени должно быть готово всё. Распределяем оставшиеся задачи.
4 На церемонии закрытия выступала представитель Книги и подтвердила рекорд. Нас было 3259 человек. Примерно столько же программистов можно найти в любом китайском Старбаксе.
К столу подходят кураторы нашего трека и, извиняясь из-за накладок с питанием, выдают трофейную банку Red Bull. Дело в том, что в субботу нас весь день держат в ангарах буквально за закрытыми дверями. Это необходимо чтобы выполнить требования Книги Рекордов Гиннеса и получить ачивку Самый Крупный Хакатон в Мире4. Из-за этого питание организовано «на местах», а не в специальных столовых, как обычно. Мы хлопаем глазами: кажется не голодны и нормально существуем на подножном корме, воде и кофе, но на всякий случай советуем не раздавать Red Bull голодным людям за 30. А то машины реанимации стоят аж у 3 павильона и тащить полкилометра тело с остановившимся сердцем — такое себе. Наверное. Мне-то откуда знать?!
3259 человек было зафиксировано для Книги Рекордов Гиннеса. Примерно столько же программистов можно найти в любом китайском Старбаксе.
Нас выгоняют из павильонов чтобы пересчитать и 10 минут спустя пускают обратно. На этому кутерьма с рекордом закончена. Парни садятся за последние экраны, а я затеваю очередной многочасовой звонок Тиму и параллельно прохожу чекпоинты, расписываю сценарий видео, сам для себя отвечаю на вопросы:
- Сколько это будет стоить предприятию?
- Где мы будем зарабатывать? Сколько?
- Какие капитальные расходы потребуются до пилота?
- Каковы метрики срок/команда для пилота? и пр.
Мы просто граиндим и ходим за водой по-одному чтобы остальные не теряли времени. Слышно только цокот клавиатур. Измотанные возвращаемся домой в 23-30. Работаем до 01-00 и ложимся спать. Видео нет, текста презентации нет, но мы завтра приедем на место пораньше и успеем. Не забыть бы выписаться утром из квартиры.
2019-09-29, Вск
В воскресенье, нашу предзащиту ставят на 12 часов, что нам сильно на руку. Я пишу речь и репетирую её пару раз в тёмном гардеробе в глубине которого кто-то заныкал удобный пуфик. Пытаюсь вписаться в тайминг. Иногда проверяю новые идеи Тима. Дима экспортирует презу из Фигмы. Много предсказуемой организаторской суеты, но мы уже знаем куда нам бежать и в какое время. Парни снимают видео и мы не успеваем его смонтировать до предзащиты. Нужно делать видео картинка-в-картинке чтобы вместе с происходящим было видно то, что пользователь наблюдает в очках. Реальность-то дополненная.
Аппаратное решение «картинка в картинке»: запустить видео на планшете и поверх положить телефон со вторым видео.
Бежим на предзащиту, она оказывается довольно неформальной и мы хорошо питчим экспертов из отрасли. Я вещаю заученную речь и показываю презу. Слава показывает 2 видео: одно на большом планшете, второе одновременно в телефоне. Получается картинка-в-картинке. Особенно если запустить враз. Получаем кучу вопросов, положительное кивание и валим доделывать всё к финальной защите. Модераторами выступают кураторы нашего трека и они, неожиданно, оказываются богами в части модерирования. Всё проходит согласно расписанию. Я никогда такого раньше не видел.
Тут нужно объяснить что до этого момента мы вообще не понимаем каково наше положение относительно остальных участников. Не было возможности ни с кем пообщаться, ходить вокруг столов и подсматривать тоже бесполезно: кто-то может собирать бомбу и никак не выдавать себя.
# | Команда | Прототип | Дизайн | Итоговый |
---|---|---|---|---|
1 | IndieTeam | 10 | 10 | 20 |
2 | Jingu Digital | 10 | 10 | 20 |
3 | AVM | 10 | 9 | 19 |
4 | Readme 😍 | 9 | 9 | 18 |
5 | Zoul | 7 | 9 | 16 |
После предзащит всё меняется. Организаторы публикуют протоколы и мы на 4 месте из 17 команд. У нас 18 баллов из 20 возможных. Всё норм ведь мы знаем где подтянуть. Защиты назначены на 15 часов. Слава монтирует видео, я режу спич, ворую музыку из демок HUDWAY параллельно деплою на Джетсон какой-то код от Тима. Вносим последние правки в презу, экспортируем её, отправляем организаторам на мыло. Пора бежать. Зрение всё ещё не запускается. Хватаем Джетсон на треноге, очки и бежим в другой конец экспоцентра на защиты потому что кураторы уже орут на нас в чате.
5 Отправка на почту нужна была для того чтобы зафиксировать версию на случай если в будущем потребуется аппеляция.
На месте понимаем, что у организаторов нет нашей презы5 а показать со своего оборудования мы её не сможем т.к. ни у кого нет type-c → hdmi переходника. Слава бежит спринт за флешкой, я остаюсь в комнате и прошу флешку у другой команды. Её приходится форматировать потому что Mac. Сливаю на неё презу и видео. Но защиты уже начались и мы 4 в списке, а значит подойти и скинуть файлы на комп не получится, он занят — нужно будет импровизировать и сделать это перед нашей собственной защитой искусственно протянув время прямо напротив модераторов, которые неожиданно хороши в модерировании.
Если бы у нас был Кирилл, можно было бы отвлечь внимание разыграв сцену с удушьем, приёмом Геймлиха и апплодисментами.
Ко всему этому я даже примерно не знаю получится ли запустить .mov контейнер с видео на компе с виндой и когда я форматировал флешку с мака, то выбрал файловую систему MS-DOS. Что это вообще значит в 2019?! В общем, что угодно может пойти не так. Руки уже не дрожат, теперь дрожат ноги, нам выходить.
Текст, который я произношу во время демонстрации, есть в описании к этому видео на Ютубе.
Слава начинает медленно расставлять очки, самолёт и треногу с Джетсоном перед комиссией, здороваясь со всеми и что-то объясняя пока я судорожно ищу где на презентационном компе USB гнезда и запуская презу, которая внезапно открывается в браузере. И видео тоже работает, повезло, мы начинаем.
Как отличить модератора-бога от модератора-яичницы? Первый может сказать выступающему: «отвечайте, пожалуйста, на вопросы заданные комиссией, а не те, которые вы себе сами придумали.» Он следит не только за временем, но и за контекстом.
Как обычно тараторю спич, озвучиваю видео, сильно волнуюсь и это заметно посторонним, но всё без заминок. Полностью опускаю рассказ о бизнесе в надежде на то, что меня о нём спросят. И в конце получаю всего два совершенно несуразных вопроса от комиссии, после чётких ответов на которые защита заканчивается…
Нихуя не понятно…
Я сравнительно хорошо выступил. Кажется, на демке была бомба. Ни у кого из присутствующих не было зрения и кастомных нейросеток, а мы пользовали его во всю ширь. Они что, не восприняли нас всерьёз из-за Лего?! Я даже успел упомянуть что «всё это не смешной прикол, а реально работающие продакшен технологии». Серьёзно: мы были так близки к запуску зрения, что я был уверен: если придётся доказывать «живьем», то через полчаса, я смог бы продемонстрировать что-то работающее. Почему они не спросили про бизнес часть? Может быть когда модератор поднимал флаг «осталось 10 секунд» нужно было просто сказать «у меня есть ответы на все ваши вопросы про бизнес, просто задайте их»? Да ёбанный жеж в рот!
Они что, не восприняли нас всерьёз из-за Лего?!
6 Как отличить модератора-бога от модератора-яичницы? Первый может сказать выступающему: «отвечайте, пожалуйста, на вопросы заданные комиссией, а не те, которые вы себе сами придумали.» Он следит не только за временем, но и за контекстом.
Выступают остальные команды. Кто-то хорошо, кто-то не очень. Когда выступают другие складывается ощущение, что они говорят вечность, хотя у них те же 5 минут6. Никто ничего не демонстрирует живьём. Все показывают видео. Оно и понятно: в формате 5 минут на презентацию нет возможности ничего демонстрировать. Экспертов демо вообще не интересует. Мы поставили им на стол очки с запущенным приложением и никто в них даже не заглянул. И так со всеми. Последняя защита заканчивается.
7 Не могу назвать те формулировки просьбой.
Слушаем короткий, общий фидбэк от каждого члена жюри. Последним выступает замминистра с неуместным 10 минутным монологом, который начинался с приказа7 «развернуть камеры в стену» и всех подгружает сильно смешав настроение. Никто не вышел из той комнаты весёлым или хотя бы разговорчивым.
8 Зал во время открытия был с трибунами и балконом, а на закрытии эта половина была скрыта стеной. Многие входя в зал во второй раз не понимали куда они попали. Просто не могли его узнать.
Мы сидим на своих рабочих местах и, полностью вымотанные, впустую обсуждаем защиту. Времени около 18-00 и организаторы уже зовут нас в зал на церемонию закрытия. Входим в трансформировавшийся зал8, занимаем места, но всё-равно ждём начала около 30 минут. Занавес отказвыается открываться. Ведущий старается исправить ситуацию растягивая время. У него неплохо получается.
Нам одобрили грант в ₽ 500 тыс. на проект, который мы выполняли во время отборочного тура.
9 Апдейт из будущего: в итоге мы отказались от тех денег т.к. условия их получения показались нам несоразмерными.
Смотрим выступления и слушаем речи о том, что все мы здесь уже победители. Одновременно Дима находит свежий пост с результатами выделения грантов на проекты выполненные в рамках отборочных туров в регионах. Мы получили 500 тыс. руб. на парковки, которые там решали. Настроение поднялось, но я 2 полных дня потратил на ту заявку и скорее бы удивился если бы этот грант мы не получили9.
Оглашают победителей нашего трека. Первое место занимают молодые ребята из Екатеринбурга. Занимают по делу. Красивый продукт и хорошие ответы про бизнес. Проиграть им не стыдно. Позже пообщавшись, мы выяснили, что они дропнули свои обратные билеты на поезд ради церемонии закрытия. Окупилось.
10 Неделю спустя организаторы опубликовали результаты. После финальных защит мы остались на 4 месте.
Возвращаемся на места после длинной церемонии. Организаторы не шарят протоколы защит и мы опять не знаем как высоко мы забрались. Или упали10. Уже нет сил ничего обсуждать. Поезд в 02-00 ночи и весь наш выбор: сидеть в пустом ангаре до полуночи или заглянуть в какой-то бар. Просто по инерции включаю Джетсон и звоню Тиму рассказать о результатах. Меньше чем за 10 минут получается запустить распознавание. Сетка точно определяет какая из 3 деталей лего-самолёта попадает в объектив камеры.
(╯°□°)╯︵ ┻━┻
2-30 ночи. Сидим в поезде в Ижевск. Свет выключен, тишина. Все в зомби-режиме и вот-вот вырубятся. Дима, который сидит рядом, косится в экран моего телефона и вздрагивает: «Ты чё, новый хакатон ищещь?!». Незнакомый парень в сине-оранжевой толстовке начинает ржать на соседней полке.