23 января 2021-го

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Районный бот

Я живу в классическом районе новостроек: широкие проспекты или лес по краям, десятки высоток внутри, и всё в пешей доступности. Застройщик не знал меры с торговыми площадями: у нас три ТЦ и офисные помещения в подвалах почти каждого дома. Короче, столько магазинов и заведений вокруг, что запомнить невозможно, поэтому хочется нарисовать карту.

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

Во-вторых, веб не нужен. Жизнь уходит из страничек в браузере, они — для чтения лонгридов, а тыкают люди в экраны телефонов. Делать проекты нужно там, где живёт твоя целевая аудитория. Ларёк с мороженым лучше открывать на пляже, а не в музее. Указания, куда пройти, — с собой, а не дома на компьютере. Ну и наконец, интерфейс телеграма — отличный вызов для картографического приложения.

Поле ввода и ряд кнопок под ним — это всё, что есть. Нечего таскать, некуда кликать. Бот простой и умеет только отвечать на вопросы. Но знает многое:

  • Ищет заведения по ключевым словам. Да, я внезапно написал геокодер.
  • Выдаёт карту из космоснимка, который я специально обрисовал в гимпе.
  • Подсказывает подъезд и этаж по номеру квартиры для всех домов.

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

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

Каждый вечер я возвращался домой и дописывал бота, чтобы переложить с себя на него все сложности. Вводить «https://» муторно — пусть бот сам превращает «Ttn. By» в «https://ttn.by». Не ждём точек с запятой и дефисов, позволяем пробелы и запятые. Вместо ввода номера дома предлагаем выбор из ближайших адресов. Ну и так далее: не нужно заставлять человека делать работу, с которой справится машина.

Так я собирал по 60-100 заведений в день, около 15 в час. Это включало в себя не только списывание данных, но и иногда разговоры с сотрудниками, которым я раздавал визитки бота. На районе около полутысячи заведений — знай я это заранее, дважды бы подумал, запуская проект. Но теперь он почти завершён, и я готовлю доклад на FOSDEM и приглашения для СМИ.

Уверен, эта новость вызовет три вопроса:

  1. Кто будет обновлять данные, когда я съеду с Маяка Минска?

Не знаю. То есть, конечно, любой человек может нажать кнопку «Поправить» под любым найденным в боте заведением, равно как и добавить новое. Но по опыту понятно, что никто этим заниматься не будет: людям, даже владельцам, проще написать админу в личку или забить. Нужны такие же энтузиасты, как я. И нужен интерфейс, который позволит на повторный обход полутысячи заведений угрохать не неделю, а один-два дня. Его зачатки уже есть (и способ описан в документации), но можно сделать удобнее, особенно для торговых центров. Я пока думаю, как.

  1. Где тут OpenStreetMap?

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

  1. Как мне поднять такого же бота для своего района?

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

Приложение пилят — опенсорсные щепки летят. Пока готовил данные и писал бота, разочаровался в сложности базовых операций в вебе. Например, получить числа координат для прямоугольника можно на нескольких сайтах (например), и довольно удобно. А вот скопировать координаты одной точки — непросто. Специальные сайты писались семь-восемь лет назад и все сломались. А использовать для этого osm.org, где нужно открывать панель, ставить галочку, нажимать Ctrl+C... Линукс-версия телеграма не позволяет прикреплять координаты, поэтому пришлось писать свой сайт на замену. Очень простой: двигаешь карту, нажимаешь кнопку, вставляешь куда нужно.

Ещё я горжусь редактором точек в GeoJSON, которым пользуюсь для причёсывания базы заведений бота. Классические редакторы типа geojson.io, uMap, QGIS не катят: чтобы отредактировать точку, нужно ползать по таблицам, двигать мышкой, нажимать «сохранить». Здесь же всё супер-просто: двойной клик для создания точки, все свойства — простым текстом типа «name Название», по примеру Level0. Поэтому копипаст пачки атрибутов вообще не проблема. Есть фильтр а-ля поиск в JOSM, всё сохраняется автоматически и можно восстановить, если закроешь вкладку. Никаких меню и не больше шести кнопок на экране.

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

Мнения, высказанные на этом сайте, отражают точку зрения лично автора сайта и ничью больше: ни его бывших или настоящих работодателей, ни семьи и знакомых.

15 декабря 2020   · · ·
← Ctrl →
· · ·   27 апреля 2021