Я уже рассказывал о своём отношении к онлайновым хакатонам. Но раз других теперь нет, мы регистрируемся на мероприятия по мере появления окон в работе.
Virushack — крупный онлайн-хакатон организованный Ростелекомом. Кажется, в новой реальности™ компании поняли, что организация заочного мероприятия требует значительно меньше ресурсов, ведь помещение, питание и логистика не нужны, экспертов можно засунуть в общую комнату в Зуме, а чекпоинты провести по-старинке через гугл формы.
Нас привлёк размер мероприятия и абстрактные треки объеденённые общей тематикой новой, вирусной реальности. Названия треков сулили обширное поле для творчества и мы надеялись, что никаких задач к этим трекам не приклеят. В итоге так и вышло.
Всего в хакатоне участвовало 1200 человек из 279 команд. В нашем треке было 30 команд.
Описывать происходившее по дням бессмысленно. Все молча нажимали кнопки. Это же онлайн, ну. Только в первый день мы собрались вместе для того чтобы обсудить идеи и наметить план работ.
В четырёх стенах
1 Как выяснилось позже, после просмотра презентаций не добравшихся до финала команд, даже чересчур много места.
Мы выбрали трек «В четырёх стенах» — достаточно лаконичная формулировка, оставляющая море места для манёвра1. Ещё на этапе регистрации мы коротко обсудили с чем могли бы выступить. С железками хотелось взять паузу. Железка означала, что у нас опять будет крутой прототип и при этом слабая подача из-за того, что на проработку продукта не хватит времени.
В этот раз решили обойтись без hardware
Мы рассуждали примерно так: Сейчас люди сидят дома и единственный способ общаться с друзьями и родными это видеозвонки. При этом за последние два месяца технологию адаптировали даже те, кто смартфонами-то раньше пользовался с трудом. А те, кто раньше использовал звонки только по работе, теперь звонят друзьям чтобы позавтракать, посмотреть вместе сериал, или просто обсудить новости.
↓
Когда самоизоляция закончится, звонки останутся с нами. У людей сформировались новые привычки.
↓
Нужно адаптировать звонки под те активности к которым люди привыкли. Звонки уже используют для проведения свадеб, посиделок в барах, занятий йогой, готовкой, игр в монополию и даже судебных слушаний.
↓
Мы сделаем дополнительные игровые механики поверх видеозвонков!
Простой пример: старая игра «кто я?» в которой у нас есть доступное по ссылке лобби, подключившись к которому все участники могут загадать персонажей, вписать их имена в эдит, а система перемешает и распределит между каждым игроком налепив на него в виде маски, которую будут видеть все, кроме него самого.
Как мы это делали
После поверхностного анализа стало ясно, что нагородить прототип собственных групповых видеочатов не так уж сложно. Для этого даже инфраструктуру разворачивать не обязательно.
Слава наткнулся на библиотеки, которые умели оперировать канвасом браузера. Это значило, что, во-первых, мы можем использовать чужую звоночную архитектуру «без спроса». Брать ваш звонок в Зуме и делать с его картинкой что нам вздумается. Например кроить на спрайты и собирать в другом порядке. Во-вторых, и это более весёлая фича, мы можем манипулировать контентом видеопотока.
В этот момент у нас родился оригинальный твист для привычной игры «кто я»: мы будем забирать гифки персонажей с условного giphy и вместо оригинального лица, подставлять лицо активного игрока. Это же маски наоборот!
Первые же эксперименты показали, что получается ржачно и классическая игра задышала киберпанком 2020.
Татарский Брюс Ли: Начало
Дополнительный получасовой штурм показал, что у «масок наоборот» много места для различных модификаций игрового процесса. Например, в первой версии кода Славы была ошибка и когда мы созванивались, вместо лица активного игрока, который должен себя угадывать, подставлялось лицо случайного игрока из комнаты. Это вносило в игру ещё больше хаоса, который только умножал количество ржаки.
Помимо Славы, который в одиночку всё запрограммировал, много работы досталось дизайнерам. Напоминаю, что у нас в команде 2 дизайнера. Это на 2 дизайнера больше, чем всреднем в любой другой команде. Дима с самого начала засел за презентацию, используя в оформлении только эмодзи. Кирилл в первый день занимался общим flow, во второй — UI.
Задачи дизайна в вашей команде закрыты, когда дизайнеры в чате спорят о том, что кнопки UI, который нарисовал один, по тону не подходят к презентации, которую нарисовал другой.
Из-за того, что в кои-то веки все, включая меня, занимались своим делом, доска Virushack в Фигме получилась самой полной и законченной за всю историю нашей команды.
Как проходили отбор
2 Презентация, демо, репозиторий с кодом.
У нас было 2 дня на работу. Затем нужно было выполнить фриз всех артефактов2. По ним эксперты отобрали 10 команд для финальных защит в Зуме. Фриз выполнялся в понедельник 5 мая в 9 утра по москве.
У нас всё было готово к 19 часам воскресенья. Но, как это бывает в последний момент, вылез описанный выше баг, когда во время звонка к гифке подставлялось лицо случайного игрока, вместо активного. Слава решил это пофиксить ближе к ночи и мы, уставшие, решили, что запишем видео с демонстрацией утром в понедельник, а потом по-быстрому™ его смонтируем и отправим на фриз. 🤦♂️
В понедльник рано утром мы и правда довольно быстро записались, а потом iMovie в очередной раз подтвердил, что не стоит откладывать на завтра фейл, который ты можешь совершить сегодня. В итоге демо выглядело совсем не так, как нам того хотелось.
3 Три минуты на презентацию + две минуты на вопросы. Богато.
У нас было около 4 часов между фризом и оглашением списка команд, которые допущены к финальным защитам. Я решил потратить это время на более вменяемый монтаж. По ходу дела мы решили, что драконовские требования3 к защите не позволят нам сказать всё, что мы хотим и мы досняли и смонтировали всю защиту на видео целиком. Впрочем, тоже не без приключений.
Как защищались
В назначенное время организаторы объявили список из 10 команд, допущенных к финальной защите в порядке расписания:
Время | Команда | Что делали |
---|---|---|
16:00 | TaleStorm | Биржа психотерапевтов |
16:06 | Coronavirus Shall Not Pass | — |
16:12 | Доллар по триста | — |
16:18 | Evil citizens | — |
16:24 | InvalidTeam | — |
16:30 | Субтритры | — |
16:36 | Wollem | Считали приседания по камере |
16:42 | Style | Примерка футболок нейросетями |
16:48 | Насос Краб 🦀 Педаль Кебаб | Видеозвонки с гифками |
16:54 | Дела Вне Дома | YouDo с особенностями |
У нас было ещё немного времени чтобы всё допилить, смонитровать видео и залить на ютюб. Пришлось немного почитить: Для того чтобы видео влезло в эталонные 3 минуты, демонстрацию пришлось «ускорить» на 15%. Из-за этого мы там разговариваем как Чип и Дейл.
Защитились без сюрпризов в основном потому что отработали потенциальные проблемы заранее. Вы когда-нибудь пробовали во время звонка шарить группе видео с ютюба без колонок? Потом я ответил на пару вопросов экспертов. В этом формате минимум волнения.
Результаты
Сразу после окончания защит Слава, который был со мной всё это время, развёл руками со словами «Если мы не будем в призах, я завязываю с хакатонами». И правда, если верить критериям оценки, которые организаторы пошарили ещё до начала мероприятия, мы могли рассчитывать на лидерство минимум в 3 из 5.
- Актуальность проблемы
- Оригинальность решения
- Дизайн
- Технологическая реализация
- Качество презентации
Если вспоминать презентации остальных команд, то могу отметить лишь ребят, которые делали медитацию в Телеграме — мне показалось это интересным, и команду Wollem, потому что на вопрос «сколько вам нужно денег на запуск?» они ответили «Нисколько». Остальные вообще ничем не запомнились. Среди проектов было много «уберов для тиндера».
Место | Команда | Что делали |
---|---|---|
🥇 | Wollem | Фитнес-гестапо |
🥈 | TaleStorm | SkyEng для психов |
🥉 | Насос Краб Педаль Кебаб 🥙 | Зомби скайп |
Во время объявления победителей, нас назвали первыми. В смысле: назвали-то нас первыми, но место мы заняли третье. И всё бы ничего, но первое место отдали фитнес-приложению, которое нейросетками через камеру идентифицирует повторения. Фича, которая есть у всех уже больше года. О чем сами эксперты заявили прямо на защите. При этом продуктовая часть была мягко говоря сырой.
Не знаю как TaleStorm оказались выше нас, но признаю: не смотря на то, что технологически это простой продукт, он хотябы выглядел целостным. Без острых углов. Команде даже не пришлось разжовывать как это будет работать, для чего нужно, кто этим будет пользоваться и где они смогут заработать — итак всё понятно.
В общем:
Возможно, у жюри, как это часто бывает, сработал триггер «слишком несерьёзное отношение к такому серьёзному треку, как наш.»
Какие зомби?! Они бы ещё демку на LEGO Duplo сделали!
4 За которое нам полагалось 50 тыс. руб.
После церемонии закрытия, мы больше недоумевали, чем радовались призовому месту 4. Хорошо хотя бы, что условие Славы выполнилось и мы ещё увидим от него решение задач типа Fighting the Povetry with JavaScript.