Как мы выигрывали хакатон в Нью-Йорке

в 4:59, , рубрики: api, arduino, cloud, Disrupt, IoT, SmartCities, TechCrunch, хакатон, Хакатоны

победа
24 часа спустя

Пару месяцев назад коллеги с моей новой работы предложили присоединиться к ним и принять участие в крупном хакатоне в Нью-Йорке. Сначала я удивился, зачем лететь так далеко, но немного изучив тему, понял, что по-настоящему крупные хакатоны проходят не так уж и часто, и майский TechChrunch Disrupt является одним из наиболее уважаемых и крупных среди подобных мероприятий. У ребят к тому моменту уже было за плечами несколько побед в других хакатонах, и мне тоже захотелось проявить себя, поэтому недолго думая я зарегистрировался, купил билеты и с нетерпением стал ждать 12го мая...

Правила хакатона

До участия я лишь отдаленно представлял себе, что такое хакатон. Если коротко, то основные правила следующие:

  • Нужно за 24 часа сделать и показать рабочий продукт. Без слайдов и лишних слов
  • Собрать прототип и написать код необходимо за эти 24 часа с нуля. Можно использовать Open Source API, общедоступные библиотеки и сервисы
  • Продукт должен быть новым, расширить существующий нельзя
  • Размер команды ограничен пятью участниками
  • Необходимо продемонстрировать свою работу со сцены в течение одной минуты, за которую нужно убедить жюри, что именно вы достойны получить приз

Особых ограничений на идею проекта нет. По ходу хакатона я украдкой смотрел, что делают другие команды (а их было почти 90): кто-то программировал дронов, делал 3D-модели соседних улиц, писал софт для распознавания чеков, и многое другое.

Каждой команде в распоряжение предоставляется стол, 6 стульев, один пилот, неограниченные кола, кофе и энергетики, а также время от времени предлагают разнообразную еду.

столы
рабочее место хакера

Идея

Среди множества вариантов мы остановились на идее делать клуб парковок для велосипедистов. Чтобы вступить в клуб, нужно купить замок, рассчитанный на два велосипеда: одна секция всегда пренадлежит хозяину, вторая же доступна для любого другого члена клуба. Велосипед — это очень популярный вариант для комьюта (commuting — перемещение из дома на работу и обратно) там, где я сейчас живу, а парковка велика становится актуальной проблемой, потому что куда бы ты ни поехал, приходится всегда возить с собой замок (зачастую весьма тяжелый), чтобы обезопасить свою собственность.

идея
замок на два велосипеда

С технической точки зрения наскоро сделанный прототип — это конструкция из соплей и палок из пластиковых водопроводных труб, в которую встроена Arduino, умеющая открывать и закрывать замок. Она подключена к облаку и ожидает управляющих команд. Пользователь управляет замком, отправляя СМСки, либо через мобильное приложение. Это приложение также умеет находить ближайшую свободную парковку и строить до нее велосипедный маршрут.

конструкция

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

актуатор

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

схема

Отбракованные фичи

С одной стороны 24 часа — не такой уж и большой срок, с другой на выступление отводится всего лишь минута, поэтому важно фокусироваться на основных фичах и отбрасывать второстепенные. Из нереализованного мы хотели "научить" наш замок оповещать владельца припаркованного велосипеда о надвигающемся дожде, а также добавить в мобильное приложение месседжинг, чтобы можно было оперативно узнать, когда другой член клуба освободит заинтересовавшую вас парковку.

Проблемы

В нашей команде не было человека, который бы профессионально занимался железками, ну или хотя бы имел к этому склонность. Сделать хороший дизайн — не вопрос, написать код под любую платформу и на любом языке программирования — с удовольствием, а вот паять или хотя бы иметь отдаленное представление, как собирать электронные схемы, — это не про нас. Разумеется, мы столкнулись с массой проблем с "железом", и ниже далеко не полный их список.

GPRS модем

В первоначальной схеме планировалось подключить Arduino к GPRS-модему для обмена данными с облаком. Этим мы бы убили сразу двух зайцев: спрятали бы все микросхемы и провода в трубы, что сделало бы нашу конструкцию визуально гораздо лучше, и смогли бы не использовать местный WiFi, который часто сбоит на таких мероприятиях. Однако, когда мы разложили микросхемы, то почти сразу же поняли, что на то, чтобы просто подключить их друг к другу и заставить работать, может потребоваться больше 24 часов без каких-либо гарантий на успех. Это пример "хорошей" проблемы, когда сразу очевидно, что ничего путного не выйдет и нет соблазна потратить драгоценное время напрасно.

Arduino и WiFi

В качестве замены GRPS мы бы с радостью воспользовались расширением Arudino WiFi Shield, если бы смогли его оперативно найти и купить, но увы. Однако, нашлась другая плата — WEMOS D1. Если коротко, то это Arduino с WiFi на борту. У меня ушло не больше получаса на то, чтобы с ее помощью сделать первый успешный HTTPS запрос, однако радость продолжалась недолго — после нескольких часов безуспешных попыток "научить" WeMOS управлять замком, выяснилось, что у этой платы не только отличается порядок входов и выходов от оригинальной Arduino (соответствие в Интернете нашлось за пару минут), но из-за поддержки WiFi набор доступных разработчику интерфейсов был урезан, и либо мы были обречены с самого начала, либо я оказался слишком криворуким. Другими словами, тут тоже ничего не вышло.

Arduino и Arduino

Хорошо: раз у нас есть Arduino, которая умеет управлять замком, и WEMOS, который умеет ходить в Интернет, буквально напрашивается решение их "подружить". На несколько неудачных попыток было потрачено еще минут 30. Итого за первые семь часов хакатона успехами мог похвастаться только дизайнер, который успел разработать и опубликовать лендинг, нарисовать экраны мобильного приложения и подготовить описание нашего проекта на сайте Дизрапта. Желание инженеров сделать все красиво и элегантно уступило стремлению сделать "хоть как-нибудь, лишь бы оно уже наконец-то заработало".

Arduino и MacBook

В итоге мы вернулись к самому простому и неизящному варианту: макбук поллит облачный сервис и отправляет Arduino управляющие команды через USB. Казалось бы, что может быть проще, но и тут словили граблей: через Arduino IDE команды отправлялись, а скриптом — нет. К счастью, баг получилось найти и исправить достаточно быстро, когда я догадался открыть исходники Arduino IDE на гитхабе и найти соответствующий фрагмент кода. Ура! За 8 часов собрали работающий прототип!

Хрупкость

Схема состояла из 11 проводов, и каждый из них мог стать точкой отказа. Вообще говоря, точек отказа у нас и так хватало с учетом использования стороннего облака, хакатонского WiFi и мобильного приложения, написанного на коленке за пару часов. Мы постарались по-максимуму укрепить конструкцию, поэтому следующие 3 часа паяли, изолировали и клеили. Думали, что обойдемся 30 минутами, но сильно недооценили свои "способности".

процесс
процесс

Софт

Работу с "железом" мы с горем пополам закончили к часу ночи. Хотя впереди нас ждало еще много работы, мы почуствовали огромное облегчение. Оба инженера нашей команды профессионально разрабатывают софт более 10 лет, поэтому за следующие 3 часа мы разработали и задеплоили в облако необходимые веб-сервисы и разработали мобильное приложения, можно сказать, не приходя в сознание. После нескольких успешных end-to-end тестов я все же пошел спать в 4 утра, а коллега решил заниматься шлифованием приложения "до упора".

Демонстрация

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

зал
за 30 минут до начала

Хотя нам и достался 33й номер, дополнительного времени это не давало: команды выстроились в блоки по 20 штук и бодро двигались по направлению к сцене. На самой сцене одновременно находилось сразу 5 команд: у каждой было по минуте на выступление, и, когда одна заканчивала, сразу же начинала другая. За эту минуту нужно представиться, рассказать и показать свой продукт. В процессе выступления можно использовать камеру, которая проецирует изображение с телефона или планшета на большой экран. С технической точки зрения организация показа была устроена выше всяких похвал, и я не могу вспомнить ни одного примера, когда у какой-либо команды возникла проблема с демонстрацией по вине организаторов.

Хотя команды шли друг за другом достаточно бодро, путь до сцены показался мне вечностью — по пути я изо всех сил старался обезопасить наш прототип, чтобы не дай Бог никто его случайно не задел и не сломал — починить мы бы уже не успели. За минуту до нашего выступления я поставил конструкцию на сцену: замок по-ближе к краю, ноутбук — где-то в двух метрах, у ног ведущего, чтобы он был не так заметен. В самой демонстрации я непосредственного участия не принимал, поэтому мне лишь оставалось ждать за кулисами. Вообще говоря, актуатор — штука весьма шумная, и я думал, что услышу, заработал он или нет. Это был самый важный момент в этих 24 часах: если все сработает — у нас очень хорошие шансы на победу, если нет — можно сразу ехать домой. У фантазеров нет шансов на победу в таких конкурсах. Я так ничего и не расслышал: слишком много шума и звуков было вокруг сцены. Не ожидая ничего хорошего, я вернулся на сцену ровно через минуту, чтобы помочь убрать конструкцию, где и застал последние мгновения открывающегося замка — главное свидетельство нашего успеха!

Не успели мы уйти со сцены, как к нам подошел журналист и попросил об интервью, — хороший знак, значит мы как минимум в шорт-листе!

Победа

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

Это был потрясающий опыт, и я надеюсь, когда-нибудь получится его повторить!

Take aways

  • TechCrunch Disrupt Hackathon, New York, 13-14 мая 2017 года
  • 87 команд
  • $36,404 призовой фонд
  • 7 номинаций

Репозиторий: https://github.com/yury-dymov/disrupt

Статья про проект: https://techcrunch.com/2017/05/14/bikeparking-club-brings-connects-a-social-network-to-bike-locks-in-a-city/

P.s. Как всегда, буду рад получить личное сообщение с найденными ошибками и опечатками.

Автор: yury-dymov

Источник

* - обязательные к заполнению поля