Отчет о хакатоне 24hack

August 19, 2013, revised February 2, 2014 iOS iPhone Хакатон

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

Хакатон 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.)

Buy Me a Coffee at ko-fi.com