Отчет о хакатоне 24hack
August 19, 2013 , revised February 2, 2014 in EventsЯ люблю хакатоны. Хакатон - это собрание людей, готовых фигачить, жертвуя отдыхом, сном, и личной гигиеной. Это настоящие программисты, в лучшем смысле этого слова. Это безумные идеи, безумный темп и совершенно разумный вариант досуга выходного дня.
Хакатон 24hack прошел в городе Запорожье 17 и 18 августа 2013 года. Спасибо Андрею Мосину и другим ребятам за организацию этого замечательного события.
Расположение - SMART CAFÉ ZIMA Project (прямо вот так и пишется). Это невероятно интересный коворкинг/кафе/опенспейс, в котором и так приятно находиться, да еще и разные события проходят. Завидую запорожчанам. (А может, зря? Может, в Днепре тоже такое есть?)
Собралось человек сорок, из Запорожья, Днепропетровска, Харькова, Киева; удаленно присутствовали ребята из Ровно.
По организации: было все хорошо, на удивление не было проблем с интернетом, еды хватало, место выбрали отличное, нашлось достаточно много спальных мест. Были дикие технические проблемы с презентациями, причем практически со всеми. Не всем дали футболки, что досадно.
Я участвовал один. Делал проект для iPhone. Это было мое первое “живое” приложение под iOS и на Objective C. Вообще мне только в пятницу подключили iOS Developer Program, а до этого я думал прогружать программу через джейлбрейк, что было бы не так удобно, потому что нельзя было отлаживать на самом айфоне.
Моё приложение находит ямы на дорогах, используя показания айфонских датчиков. Приложение я пока дать не могу, зато на первые измерения можно посмотреть онлайн. Сайт тормозит, это пока нормально.
Первым делом я написал программку, которая просто записывала всевозможные показания в CSV. С этой программкой я поездил по ямам (сердце кровью обливалось), получив начальный массив данных.
Эти данные я слил на компьютер и дальше писал скрипты на Ruby, которые их по-всякому крутили и выдавали таблицы для Excel, который рисовал графики. Проблемой было то, что для обнаружения ямы нужно собирать по 100 показаний в секунду, то есть, десятиминутная тестовая поездка собирает 60000 показаний, а Excel на таком объеме данных уже подтупливает. Кстати, прикольно было бы иметь средство нарисовать график прямо из Ruby.
Один из графиков
Потом захотелось посмотреть результаты на карте. Тут-то мне и пригодилась визуализация GeoJSON на GitHub. Не такая она и бесполезная! Достаточно в Ruby подготовить массив точек, сохранить его в JSON и загрузить в Gist. Вот один из ранних результатов:
Когда алгоритм на Ruby стал давать хорошие результаты, я переписал его на Objective С, а точки начал выводить на Google Maps for iOS. Проехавшись вокруг квартала еще раз, я получил вот этот экран:
Работает!
Теперь точки нужно было сохранять. Причем по ряду причин хотелось сохранять прямо в веб. Я накидал примитивный веб-сервис на Rails. Благодаря тому, что мой сервер настроен через Chef, подключение и запуск веб-сервиса занял буквально полчаса, и то, большую часть этого времени я дописывал базовую комплектацию приложения - добавлял Unicorn, JS-движок и т.п.
Все это было готово часам к 11 вечера, а приложение еще не умело сохранять данные. Первой мыслью было накрутить Core Data и RestKit, но я быстро понял, что наскоком их не взять. Много кода и много новых понятий. Поэтому подключил AFNetworking и самым простым образом слал новые точки на сервер. При загрузке карты точки одним запросом скачивались назад в приложение. Тупо, неэффективно, зато уложилось в пятьдесят строчек.
Также в первый день я успел сделать отрисовку точек на Google Maps в браузере, чтоб было что показать.
Кататься в два часа ночи было уже поздно, поэтому я ушел спать в машину. В семь утра проснулся и поехал в Макдональдс собирать данные. Сажусь за столик, загружаю на ноуте сайт - и - ура! - вижу свой маршрут, раскрашенный в зелено-желто-красные точки.
Во второй день я уже полировал отображение точек на карте, собирал больше данных, делал презентацию и чинил баги. Например, оказалось, что при выборе “автомобильного” режима работы GPS показания датчика “прилипают” к улицам на карте, да ещё и украинские улицы на Apple Maps представлены ужасно (на предыдущей карте это довольно хорошо видно). Пришлось переключиться в “другой” режим работы.
Есть куча проблем с текущей версией и куча идей по развитию, но ни одна из них не укладывалась в оставшиеся пару часов, так что пришлось остановиться. Я доволен работой! Довелось и испробовать новую технологию, и поломать голову над алгоритмом, и покататься на машине, и сделать что-то полезное людям.
А еще я занял третье место по голосованию! Спасибо! Теперь надо придумать, как использовать выигранный Raspberry Pi.
На обратном пути протестировал всю трассу Запорожье-Днепропетровск, просадив гривен 50 на интернет. Вот одна из проблем - надо эффективнее слать данные.
Презентация проекта (которую я еле смог показать, потому что не взял переходника DisplayPort-HDMI.)
Понравился пост? Купи мне кофе