8xx8 (Андрей Кулаков)

Творческая мастерская

Дорожные докладаторы. От @Ulway до Waytag.ru

| Comments

Сейчас стало модным делать стартапы. У каждого второго разработчика есть свой. А в Rails сообществе ­— у каждого первого, наверное. И чтобы оставаться в тренде я тоже решил принять участие в разработке одного интересного сервиса.

Небольшая история о том, как я докатился до такой жизни.

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

Если кто-то еще не догадался, речь идет о ситуации на дорогах.

В нашем городе есть несколько способов узнать о том, что происходит на дорогах. Можно послушать радио (2х2 и Дорожное), можно посмотреть Яндекс.Пробки, а можно почитать ICQ бот. Каждый из них в чём-то хорош, но ни один из них не подходил в полной мере моему другу, заядлому микроблогеру, Дмитрию Вислову.

Неудобства были настолько заметными, что 20 сентября 2011 года ситуация достигла критической точки, и он с ещё двумя товарищами (Александром Щербининым, Костей Соколовым), пожертвовав законным перерывом на обед, сделал робота, который читает тот самый ICQ бот с информацией о дорогах и транслирует всё в специально созданный аккаунт @Ulway..

Идея пришлась по душе многим из нашего окружения, твиттер аккаунт быстро набрал около 200 подписчиков, в основном из друзей, знакомых, знакомых знакомых и т.д. Техническая сторона вопроса была достаточно тривиальной, скрипт читал по cronу бот, парсил содержимое, сохранял в базу для избежания дубликатов и отправлял в твиттер.

Через месяц успешной работы, основной разработчик начал свою хардкорную жизнь программиста и с головой ушёл в изучение Ruby/Rails. Какое-то время сервис поддерживали Юрий Токарев, Алексей Загайчук. Но затем в феврале 2012 года проект попал в мои руки. Попав в мои руки , скриптик сразу же был обёрнут в микрофреймворк Silex, что позволило немного упорядочить код.

Серьёзно к проекту никто не относился, работы в основном проводились в обед и редко. Да и зачем? Просто небольшое удобство в основном для себя и друзей, и так проект жил. К середине Марта 2012 года в подписчиках было около 350 человек, не такой уж и значительный рост за 4 месяца.

В среднем мы получали и публиковали 5-10 сообщений в сутки. Мало. Решили расширить список источников информации. Выбор пал на хештег #ulway. В нем обыватели нашего города иногда оставляли информацию о происшествиях. Там было не много материала, но хоть что-то. Схему работы придумали простую, раз в 10 минут PHP робот читает хештег, фильтрует мат и публикует от имени сервиса то, что должно пройти.

Неактивно, но пошла популяризация самого хештега #ulway.

Количество подписчиков начало расти. Из этого вытекало несколько задач:

  • более сложная фильтрация с учётам смысловой нагрузки;
  • сайт проекта с возможностью отправить сообщение с него;
  • чтение сообщений из реплаев твиттера;
  • рефакторинг бекенд части.

Так появился ulway.net.

Мы торопились, хотели закончить к конференции “Стачка!”, поэтому бекенд было решено не переписывать.

Фронтэнд был написан на jQuery mobile. Мы хотели делать сразу приложение для мобильных телефонов, используя PhoneGap. Код был открыт, репозиторий и ныне на GitHub.

Бекенд всё так же остался на Silex, к нему лишь прибавился нехитрый алгоритм оценки “полезности” сообщения. Состоит он из частотного словаря, на основе которого высчитывается рейтинг сообщения, в случае, если оно проходит определённый порог, установленный экспериментальным путём, то сообщение считается подходящим. Частотный словарь подстраивается на основе того какие слова были в том сообщении, которое прошло фильтр.

К выступлению на “Стачке” фильтр и публикация сообщений работали. Сам доклад я пропустил, но он способствовал продвижению идеи в массы.

Моя светлая сторона умоляла начать делать всё “как надо”. Под впечатлением “Стачки” хотелось сразу писать на erlang. Задача казалось бы как раз для него! Но неделя глубокого исследования этого вопроса показала

  • освоить erlang быстро с моим уровнем подготовки не получится;
  • работа со строками в erlang это ад.

Объём быдлокода давил на моральные принципы, нужно было искать путь. И его, сам того не зная, подсказал Кирил Мокевнин. Вот тут.

На любом языке одинаково можно писать как хорошие, так и плохие программы. Программа ­— это отражение модели мышления программиста в виде языка, понятного компьютеру, и для меня пришло время развивать новую модель мышления.

Был использован Composer для управления зависимостями. В качестве основы остался Silex, но на этот раз я разобрался как работает Dependency Injection в нём. Был использован Simfony::Console для реализации взаимодействия с приложением через консоль. Для твиттера после долгих мучений подошёл лишь один пакет, но и его пришлось допилить.

Фронтенд был переделан на Twitter Bootstrap, но только его главная страница. Мы оба ленились переделывать саму форму с JQuery Mobile, на ней было много JavaScript лапши. Форма была взята из предыдущей версии и в таком состоянии “франкенштейна” это проработало ещё какое-то время.

Система работала достаточно стабильно. Подписчиков уже стало около 600. Люди стали активно публиковать свои сообщения.

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

Мы приняли решение бросить разработку текущей вресии и начать делать всё на рельсах. Причина крылась не в том, что это сейчас модно, а в том, что в инфраструктуре Ruby/Rails больше гибких, удобных инструментов для быстрой разработки веб-приложений.

После конференции RailsClub, которая проходила в нашем городе, мы пообщались с коллегами из Чебоксар, которым очень понравилась идея нашего сревиса и то, как он работает в Ульяновске. Они предложили свою помощь в популяризации в своём регионе. Идею также похвалили и ребята из http://evrone.ru/ С ними мы обменялись наклейкамми (Ulway на GistFolw) С этого же момента мы поняли, что приколюшка “для своих” вышла за рамки этого состояния. Ulway ­— это полноценный проект требующий больше сил и времени.

Нужно было придумать название для новой системы, которое бы отражало общее отношение к городам. Так и сошлись на Waytag.ru.

Следующий шаг, аренда VPS на Clodo и полное её администрирование через Chef.

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

Сама архитектура системы усложнилась. Теперь нет скриптов которые по cron‘у читают твиттер. У нас работает комплекс процессов-демонов запущенных под runit, которые получают сообщения от твиттера через Twitter Streaming API, осуществляют их фильтрацию и публикацию, но уже через Twitter Rest API.

Так же появилась няшная админка, в которой можно посмотреть, поискать, отредактировать, создать всё то, что есть внутри нашей базы (прощай PhpMyAdmin!).

Внутри админки — частотный словарь, сообщения, блек-лист аккаунтов, сообщения которых игнорируются, а также список улиц, ну и сами города со служебной информацией.

9 января 2013 года система окончательно была запущена. Все старые версии отключены.

Сейчас для Ульяновска в день публикуется около 15-30 сообщений, статистику за декабрь прошлого года можно заценить тут.

Мы таже присутствуем и в “офлайне” Иногда мы раздаём наклейки и футболки. Иногда всем подряд, иногда особо отличившимся, но обэтом лучше напишет Дмитрий Вислов.

В ближайшем будущем проект обретёт фирменный стиль, будет вести свой отдельный блог, обзаведётся поддоменами для городов, заново подружится с ICQ ботом и много чего ещё =)

Наш сайт:

Твиттеры:

Почта для связи:

mail@waytag.ru

Comments