×Закрыть

DOU Проектор: Rename.dp.ua — справочник о переименовании улиц Днепра, написанный за 2 дня

В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.

Идея

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

А теперь попроще;) Когда на голову ничего не подозревающих днепрян осенью 2015 года свалились одно за другим два распоряжения и.о. городского головы Булавки о переименовании более чем 300 топонимических объектов — это был очень мощный и болезненный удар по сознанию земляков. Действительно, переименование нужно провести, есть соответствующий закон о декоммунизации, но вот формат подачи этой новой, непривычной для горожан информации был более чем печален.

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

Эти сканерные копии быстро разбежались по местным интернет СМИ, но пользоваться ими было совершенно неудобно. И тут я понял — нужно бросить все и немедленно приступить к созданию онлайн справочника для жителей Днепра, которые, так же как и я, мучились при работе с таким документом.

Реализация

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

В качестве такой базы было принято решение выбрать файл формата json. Конечно же, мне хотелось написать на ноде сервис, отдающий этот файл с какого-то урла, с сортировками, пейжинациями, но при этом хотелось бы максимально скоростной отдачи и отказоустойчивости (да, нода действительно быстрая, но для статики nginx все-таки быстрее и надежнее).

Поразмышляв еще, я решил сделать сайт полностью статичным, то есть никаких ангуляров/реактов, исключительно HTML и jQuery по-минимуму. Последним аргументом в сторону статичного решения была скорость разработки. Все идеи и решения сложились в моей голове в пятницу, и я просто обязан был выполнить работу за выходные, чтобы не завалить свою основную трудовую деятельность.

Структура данных. Простых голых данных о том, что улица А переименована в Б — однозначно недостаточно. Поскольку я с любовью отношусь к родному городу, то мне было бы весьма интересно узнать в честь кого или чего такое переименование произошло. Чуть позже неравнодушные люди подсказали, что хорошо бы еще как-то отметить возвращение исторического названия объекта. В процессе работы появилось понимание, что нужно обязательно иметь поле с номером версии справочника — банальный таймштамп.

Вместе с тем, имея некоторый опыт общения со структурами исполнительной власти в прошлом, я знал, что у них есть в работе массивы статистических данных по области и районам с определенной кодировкой районов (кстати все это еще под DOS разрабатывалось, до сих пор местами базы на dBase в работе, о ужас). А именно, для нашего города районы нумеровались в алфавитном порядке такими ключами: АНД — r61, Бабушкинский — r62 и т.д. и последний, Самарский, — r68.

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

Итого, пусть у нас будет массив объектов-районов, в каждом из которых будут поля непосредственных изменений в названии или иных данных этого конкретного района и массив объектов-изменений по конкретным улицам или местам. Поскольку улица может растянуться на несколько районов, этот объект пусть повторяется для каждого района (не очень элегантное решение с точки зрения архитектуры БД).

Итого, структура объекта-района получилось вот такой:

"r61": {
 	"oldAreaName": "Амур-Нижньодніпровський",
 	"newAreaName": "Амур-Нижньодніпровський",
 	"objects": [
     	{
     	 "type": "street",
     	 "newType": "avenue",
     	 "oldName": "Баглія",
     	 "newName": "Брацлавська",
     	 "restored": true,
     	 "link": {
         	 "href": "https://some.url",
         	 "type": 2
         	 }
     	 },
     	 ...
 	 ]
  }

Как видим, здесь учтено то, что может поменяться не только имя, но и тип объекта, то есть улица может превратиться в проспект, переулок — в улицу или еще что-то. Необязательный флаг restored информирует о том, что это возвращенное историческое название. Поле link содержит объект со ссылкой на данные о субъекте переименования (в основном используются материалы Википедии), а также тип такого субъекта — это может быть и личность, и событие, и географическое место, мне показалось важным это учесть для повышения информативности. Типы субъектов переименования представлены цифрами, а типы мест — словами, это еще одна шероховатость с точки зрения архитектуры БД, ждет своего часа по оптимизации.

Публикация. Проект по своей сути должен быть открытым, поэтому все исходники были немедленно отправлены на GitHub. Там же можно ознакомиться с историей изменений. В качестве площадки был выбран мой собственный американский виртуальный сервер, на котором еще теплятся остатки моего древнего хостинг-проекта, который постепенно сходит на нет (конкуренция, жизнь-боль).

Провайдер самый банальный, ничем особо не выделяющийся из многотысячного ряда таких же провайдеров — ServerHub.com (да, это реферальная ссылка, гггг...). Параметры сервера — одноядерный виртуальный процессор 2 ГГц, 1 Гб ОЗУ, 60 Гб места на диске. Операционка — Сентос 6×64. Достаточно шустрое решение для статики, как оказалось позже.

Изначально не ставил счетчики рейтингов, ограничился вставкой Google Analytics.
Ну и собственно домен — он просто обязан быть региональным. И никак иначе, тут я даже не сомневался. Я люблю нашу доменную зону dp.ua, настолько люблю, что даже являюсь официальным регистратором зоны (привет Владимиру Кияну и НПФ Трайфл!). Ну и конечно же, само название должно быть коротким, как выстрел, и ёмким, как тост, поэтому почти моментально ко мне пришло осознание нового доменного имени — rename.dp.ua.

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

Спалось беспокойно, снились какие-то странные животные. Сушило. Тревожило. Встал поздно. Открыл ноутбук и сразу пошел в Google Analytics — ого, за прошлый кусочек воскресенья набежало аж 159 посетителей за час! Недурственно. В почте — 36 неотвеченных писем на вновь созданный почтовый ящик.

Во вторник я увидел по аналитике, что за понедельник пришло 2300 уникальных посетителей. Кажется, моя идея нашла поддержку у земляков!

Отдельная категория экстаза — это письма. В большинстве — это были конструктивные уведомления о грамматических и структурных ошибках, немного благодарностей, ну и маниакальный бред детей полной луны. Некоторые особо упоротые писатели почему-то решили, что это я лично под покровом ночи давал новые названия улиц, поэтому на меня обрушились упреки и негодование: «Да как вы смели обозвать улицу в честь какого-то Менахем Мендл Шнеерсона? Вы совсем там с ума посходили?.. Кто он вообще такой, этот ваш Шнеерсон???» Мда...

Довольно быстро шквал иссяк, буквально за 3-4 дня. И вот тогда появились те самые верные единомышленники, которые вложили соразмерный со мной кусок труда в наш проект.

Люди, которые меняют ход истории. Первым вышел на контакт наш замечательный земляк и художник Алексей Пылёв, который предложил действительно яркую авторскую картинку для шапки сайта. Потом он еще создал пдф-версию справочника, со своим же авторским оформлением.

Затем в бой кинулся Расим Лабибов, который насобирал большинство ссылок на субъектов, в честь кого было совершено переименование, а также исправил большую кучу грамматических и пунктуационных ошибок. Несколько позже подключился Den Drobiazko, который создал и выложил в плей-маркет первое приложение под Android. Ну и десятка два неравнодушных горожан, которые однократно подкидывали информацию об ошибках и неточностях.

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

Признание. С первых же дней я принимал постоянные меры по распространению информации о проекте. Причем, действовал самым примитивным методом — ставил в гугль поисковый запрос «переименование улиц Днепропетровск» и похожие, выбирал три десятка первых ссылок и шел по ним. Обычно это были сайты региональных и общеукраинских новостных СМИ, у большинства из которых есть возможность комментирования статьи. В комментариях я писал заманушку в стиле: «Эгегей, земляки, а вот появился онлайн справочник, все сюда!» Прирост трафика был, но не более десятка-двух хостов в сутки.

Также ходил по региональным форумам (хотя, кроме огорода особо никто не раскручен) и по автофорумам, аж по трем — ибо как только покупал очередную машину, сразу регистрировался на тематическом автофоруме. Написал пост на Reddit. На многих региональных сайтах я писал владельцам в форму обратной связи — просил разместить ссылку на наш справочник, ответ не получил ниоткуда. Даже на сайты областной государственной администрации и горисполкома писал — также безответно.

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

А вот один источник с небольшой посещаемостью подал информацию вообще некрасиво — мол, они сами у себя разработали приложение, которое переводит старые и новые названия, для запуска приложения — нажмите на ссылку — а ссылка ведет собственно на наш сайт! Подозреваю, что они так написали скорее от убогого воображения и полнейшего незнания технологий, чем по злому умыслу :)

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

Что еще требует доработки. Во-первых, я весьма недоволен внешним видом сайта. Дизайнера UX нам так и не принесло на порыве энтузиазма, обращался к паре шапочно знакомых мне человек, но они в итоге слились. То, как сайт выглядит сейчас, меня не устраивает, но поскольку я просто не знаю, как сделать хорошо (я программист, а не художник) — жду хорошего энтузиаста, который в обмен на авторскую ссылку у нас сделает более удобный дизайн. Причем, я обращался также и к студентам с курсов по дизайну — попробуйте, парни и девчонки, отличный старт для портфолио, — ан нет, они тоже тихо растворились. Возможно, кто-то из читателей откликнется с простым, но эффективным решением для справочника?

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

В-третьих, я категорически расстроен тем, что идея онлайн справочников по декоммунизации не пошла по стране. В Запорожье также немало переименований, ну а почему справочника нет до сих пор? Город большой, программистов много, чего спим, коллеги? Тем более, ничто не мешает взять за основу уже готовую нашу структуру.

Вон, весной отозвались ребята из Кропивницкого (Кировограда) — они написали, что воодушевившись моим проектом, на базе моего формата данных сделали аналогичный справочник для своего города. Молодцы!

Результаты

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

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

Как видите, если у вас в голове засветилась лампочка гениальной идеи — то ее надо реализовывать прямо здесь и сейчас, не откладывая. И не терять веру в правильность своего выбора.

14 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Від сьогодні сайт перейшов на українську, як то кажуть — енджой :)

И сам шар должен быть до между новым мостом и мостом, ведущим на Комсомольський остров

Ещё по логотипу, шар то уже на месте)))

Хорошая задумка. А вообще странно видеть в наше время улицу именни 19 партсъезда

Действительно, я специально не упомянул про интеграцию с картографией, поскольку так и не нашел в АПИ гугля метод, который может вывести улицу, как трек — массив пар координат для отрисовки по карте. Т.е. если мы хотим посмотреть а где эта свежепереименованная улица, то логично ее вывести всю, в виде трека, с инфоокном про старое и новое название. Но увы. Вручную затрекивать триста с гаком улиц долговастенько, пока еще ищу выход.

Ваня, респект за проект !

Не знаю что там с мобильным приложением, но я бы сам сайт сверстал бы в bootstrap чтобы на мобильных девайсах тоже выглядело неплохо, не вижу особого смысла в мобильном приложении. Тут работы всего ничего перевести на bootstrap

А откуда гугл мепс черпает информацию?
Я просто вводил там имя старой улицы и оно мне выдает карту!
О...идея! В гугл картах мне не хватает такого: при нажатии на улицу что-бы высвечивалось и старое и новое название(для понимания вообще в какой части города я нахожусь) — может наложите на основе гугл карт старые названия поверх новых?

Ну а так — ОЧЕНЬ КРУТО! РЕСПЕКТ :)

гугло карти можуть шукати по старій назві, показуючи нову

Зашел еще раз в гугл карты с телефона(приложение) — глянул! Не нашел!
Ввел Артема, получил “вулиця Січових Стрільців”

Вот и я о том! Мне не хватает функционала: при нажатии на “вулиця Січових Стрільців” в скобочках/рядом появится старое название! Я бы быстрее выучил новые!

Подписаться на комментарии