19 заметок с тегом

id

Квинси ушёл

В сентябре Квинси Моргану за разработку редактора iD начал платить OSMF. Но что-то пошло не так: в декабре его продуктивность резко упала, а с конца февраля, уже два месяца как, он ни написал ни строчки кода, только принимал иногда чужие пул-реквесты. Последняя версия редактора вышла 18 марта, с тех пор — никакого движения. Так что сегодняшнее объявление, что Квинси больше не работает над iD, логично, хотя и грустновато.

Совет OSMF теперь ищет человека на замену, но оптимизма маловато: судя по графикам вклада в разработку, для редактора не удалось выстроить сообщества, на второй и третьей позициях — люди с 20 коммитами за год, да и то лишь в пресеты и переводы. Немал шанс, что мы наблюдаем закат iD. Что его заменит? RapID? Не могу обосновать, но чувствую, что фейсбук уже на низком старте.

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

Гонка за JSON

Что это я всё хвалю iD — у него тоже проблем хватает («ахаха» — раздаётся от жосмера в голове). Например, Саймон Пул четыре дня назад заметил, что в некоторых регионах данные не подгружаются, без причин и без ошибок. Какие-то слова про undefined в консоли, и всё.

Позавчера Квинси понял, что выпадают объекты, нарисованные анонимными пользователями до 2009 года. У этих объектов нет поля uid, чего редактор не ожидал. Но тогда вопрос, почему раньше этой пропажи никто не замечал? Ответ — в JSON.

Мало кто любит XML. Это структурированный формат, который может хранить любую структуру данных, но слишком многословен и требует сложных преобразований. С популярностью JavaScript разработчики предпочитают использовать другой формат хранения данных, JSON (JavaScript Object Notation). Формат жёстко регламентирован, но по сути, представляет собой кусок кода, который интерпретатор JS может быстро превратить в объект. Сюрпризов у него никаких, структура очевидная для программистов, в отличие от XML, поэтому формат пихают везде: например, вам может быть знаком GeoJSON.

OSM API всегда отвечал в формате XML. Но в сентябре 2018 года cgimap научился возвращать ответ в формате json. Для этого в запросе нужно указать правильный заголовок Accept или добавить в конец расширение .json (например). Одним из первых новому формату научился важнейший запрос /map (получение всех данных в прямоугольнике), затем пошли остальные. Но, поскольку формат ещё не поддерживал Rails Port (часть API, написанная на Ruby on Rails), json временно отключили.

Разрыв нужно было закрывать: участник Mmd в мае 2019 года сделал пул-реквест в вебсайт, но мы знаем, как у нас проходят пул-реквесты. Второй пул-реквест он создал в декабре. Он был проще, обсуждение сразу пошло: всего через полсотни комментариев, в феврале, правки приняли, и теперь объекты можно получать в любом из двух форматов.

Тут все посмотрели на iD. Для кого ещё писали поддержку json, как не для редактора на JavaScript? И да, всего через неделю соответствующие вызовы заменили — поддержку нового формата тот же Mmd написал ещё год назад. Но свежий релиз редактора готовился-готовился, прошёл один месяц, второй... В общем, строчка про json утонула в списке изменений версии 2.18, вышедшей две недели назад. Отсюда и проблема, найденная Саймоном: формат ответа API поменялся, его обработка тоже, и анонимные правки забыли протестировать. Ошибку починили буквально вчера.

По замерам Mmd, использование json для скачивания данных ускорило iD примерно вдвое. Перемещение карты в редакторе действительно ощущается быстрее, контрастируя с заторможенным интерфейсом редактирования тегов.

Подгрузку данных в редакторе ещё можно ускорить, и даже в несколько раз. Сам запрос /map невыносимо медленный: сервер делает несколько запросов к базе данных на каждый объект в ответе, что, как посчитал Дорофей «Komяpa», ограничивает скорость получения данных до примерно 2000 объектов в секунду. Именно поэтому iD разрешает редактирование от 16 уровня масштаба, а не дальше. В 2016 году Дорофей переписал запрос к карте на чистый SQL, ускорив его на порядок, но его предложение погрязло в комментариях, а после добавления формата json и вовсе устарело. То есть, мы знаем, что скачивание данных можно ускорить, но для поддержки быстрого кода нужны знания PostgreSQL, которых нет ни у кого из админов.

Обновление: Mmd в комментариях замечает, что запрос /map переписали в 2018 году, ускорив его даже лучше, чем это сделал Дорофей. Так что последний абзац уже неактуален.

Третий редактор

Написав заметку про iD, немедленно задумался: а где третий? Почему из настольных редакторов у нас выбор только между iD и JOSM?

Когда я только пришёл в проект, редакторов было три: Potlatch, JOSM и Merkaartor. Первый выбирали за простоту, второй — за фичи битком. Последний был непривычно быстр и выглядел как нормальное приложение, потому что написан на C++. Увы, соавторы для него не нашлись, поэтому Ладислав лишь чинит редкие ошибки и выносит отвалившиеся фрагменты. Последний релиз Merkaartor был в ноябре прошлого года. Пользователей он начал терять в 2013 году, уйдя глубоко в низ рейтинга вслед за Potlatch 1. Тогда же по количеству правок он уступил третье место iD, а в 2018 его сдвинул с четвёртого Go Map.

С 2013 года у нас всё ещё три популярных настольных редактора: JOSM, iD и Potlatch 2. Написанные на Java, JavaScript и Flash. Очевидно, что последний живёт только благодаря упоминанию на главной странице — хотя сам по себе он очень хорош, быстрый и простой, особенно если выучить кнопки. Но люди стремительно его забывают: сейчас он тоже уполз вниз, им пользуются для правки карты реже, чем даже OsmAnd. 31 декабря Potlatch умрёт, как я упомянул в прошлой статье, потому что Adobe прекращает поддержку Flash, и его окончательно выпилят из браузеров. Предложение Ричарда отвязать редактор от браузера Совет решил не принимать.

Так что да, выбор между iD и JOSM. Почему никто не начинает писать полноценный десктопный редактор OpenStreetMap? В списке редакторов вообще никаких намёков: есть тематические, есть обрезки, встроенные в ГИС и операционные системы, но ничего, что может заменить даже Potlatch 1. Получается какая-то двухпартийная система: не нравится JOSM — добро пожаловать в iD, у него отличный интерфейс, понятные панели и не нужно бороться с JRE. Не нравится iD — ставь JOSM, он работает офлайн у него сотни модулей и стилей оформления карты. Но... Может, нужно больше вариантов?

Кажется, тут я должен топить за поиск революционера и больше альтернатив — но данные подсказывают, что правильнее наоборот. Таблицей количества пользователей правят мобильные и тематические редакторы: у Maps.Me пользователей в полтора раза больше, чем у JOSM, и четвёрка StreetComplete — Osmand — Vespucci — Go Map тоже в сумме бьёт его по пользователям. А ниже притаились настольные и веб-редакторы отдельных элементов: GNOME Maps, OsmHydrant, Level0. Кажется, картографам их достаточно. В мире редакторов назрел перелом, и честно говоря, давно пора.

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

JOSM устарел. Нам не нужен не только третий редактор, — нам уже не нужен JOSM. Рисовать тысячи домиков и сотни километров грунтовок по снимкам отлично получается у участников Missing Maps и прочих мероприятий гуманитарной команды. JOSM не только оптимизирует массовое рисование, которое давно устарело. Он местами вредит проекту и другим картографам. Например, удобством работы с мультиполигонами — стали бы вы рисовать «лоскуты» в iD? А каково их там править? Размером пакетов правок (в среднем 150 объектов против 50 в iD) — все валидаторы жалуются на плодовитых картографов. Лёгкостью подключения слоёв гугля и кадастра. Тем, что система модулей позволяет писать системы тегирования, которые вручную применять невозможно. Сложность JOSM проникает в OpenStreetMap и делает его сложнее.

Достаточно iD. Для крупных же правок у нас появился новый инструмент: RapiD. Основанный на том же iD, в нём одной кнопкой можно добавить сеть дорог, тысячи домиков и прочие данные через платформу Esri. Он закрывает вопрос импортов и раскрашивания «белых пятен». Где нет в RapiD, туда нагонят картографов крупные корпорации (в экономически интересные регионы) и гуманитарная команда (в менее интересные). Эта ситуация установилась с прошлого года, таков теперь OpenStreetMap.

Опытным картографам в этой картине отводятся места учителей и хранителей платформы: мы поддерживаем и уточняем тегирование, следим за системными ошибками менее опытных картографов, пишем системы мониторинга и управления данными (потому что у компаний не хватает экспертизы) и устраиваемся на хорошие деньги в эплы и фейсбуки руководить отделами осмеров.

Наше дело больше не рисовать основные дороги и не следить за валидаторами. Можно расслабиться, взять в руки обходные листы или StreetComplete и выйти на улицу как десять лет назад. Позаносить парикмахерские и люки. Обойти соседний двор и нарисовать в нём тропинки и заборы. Для этого достаточно веб-редактора, он нынче удобен даже на планшете со стилусом. Или мобильного приложения — а их становится больше с каждым месяцем.

iD удобнее JOSM

Квинси Морган объявил о выходе свежего редактора iD версии 2.18. Его анонсы нужно видеть: это не просто список, как в гитхабе, но комикс из девяти слайдов по основным фичам. Прошлую версию анонсировали в блоге редактора (у iD есть блог!), но за полгода авторы, видимо, о нём забыли. Прочитайте то и то: узнаете, как делать мосты и туннели одной кнопкой (а не разделить-разделить-добавить тег, как раньше) и открывать детектированные Mapillary объекты, типа знаков.

Главное, что открыли эти твиты, — что iD стал первым большим редактором, которым не больно пользоваться с тачпада. У которого, напомню, нет правой кнопки. Теперь с ноутбука можно править карту! Можно даже нажать «править» на айпаде и не расплакаться от невозможности подвинуть дом под снимок. Я всю весну сидел с мышкой, у которой сломана правая кнопка, и тупо не мог пользоваться JOSM из-за этого. мой тикет про альтернативы правой кнопке висит без движения с 2014 года.

Как и Potlatch (который умрёт в декабре), редактор iD понятен без слов, но работать с ним становится офигенно, если помнить о клавиатуре:

  • Пробел — замена левой кнопке: выбирать объекты (с Shift можно много), двигать точки, открыть меню, если подержать.
  • Стрелочки — двигать карту (как Shift-потянуть левой кнопкой или двумя пальцами по тачпаду), а Shift+стрелочки — двигать выбранные объекты.
  • Масштабировать двумя пальцами по тачпаду, двумя пальцами + Shift (так привычнее) или кнопками — и = (я думал, JOSM обломается приближать по + без шифта, а оказалось — не смог отдалить по минусу).
  • 1, 2, 3 — новые точка, линия, полигон. A — продолжить линию.
  • M — двигать линию. Случайно сдвинуть домик или дорогу, как в JOSM, не получится.
  • V — развернуть линию (буква похожа на стрелочку), S — выпрямить (от straighten), D — отсоединить линию от всего или точку от линии, X — разрезать линию в точке.
  • O — сделать круглым, Q — сделать квадратным, R — повернуть.

Короче, всё в справке и во всплывающем меню. iD всё ещё чудовищен, если нужно добавлять необычные теги (а до панели тегов крутить и крутить) или наводить порядок на карте, но для мелочей типа дорисовки пропущенной тропинки он уже задвинул JOSM. Так что у меня пакетов правок с ним теперь больше — вот бы я удивился этому лет пять назад.

Новостей про третью версию iD нет.

Скованные одним слоем

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

Клубок данных

Шесть лет назад слои были у всех на устах. «Какие слои в вашем проекте закончены?» — спрашивали на конференциях. «Рано или поздно придётся внести понятие слоёв», — комментировали в штосме. И вот мы в 2018, как успехи в этом направлении?

У нас были сайт Ito Map и панель фильтров в JOSM: ввела highway=* и получила слой дорог и связанных с ними POI. Теперь к ним добавились тематические сайты на основе Overpass API — например, редакторы полос от Almaz. Это круто, конечно, но не решает общую проблему OpenStreetMap.

Проблема с нашими данными в том, что они неделимы. Это хуже, чем топология (когда объекты собираются из частей): связи в данных невероятно прочны и непредсказуемы. Точка лежачего полицейского в составе линии дороги, территория школы и забор вокруг неё в одном объекте, остров-лес... Мрак для человека, всю жизнь работавшего с шейпфайлами. Добавим сюда отношения с сотнями автобусных маршрутов поверх одних и тех же дорог, административные границы по рекам и прочие радости типа type=person — и трогать данные становится страшновато.

Спрятать лишнее фильтрами? Не только потеряем некоторые сильные связи (см. границы по дорогам), но и наткнёмся на распространённые слабые связи: когда кажется, что объекты не связаны, но их взаимное расположение или общие элементы важны. Например, многие проспекты разбиты на сегменты, которые объединяет только тег name (да и то не всегда). Магазины нередко находятся внутри здания с shop=mall (или без этого тега, но с названием вида «ТЦ Скрытный»). Как узнать адрес кафе? Ищете дом, содержащий кафе, затем точку с адресом, лежащую внутри контура дома, ближайшую к кафе.

Зато модель данных простая!

OpenStreetMap с самого начала был не про дороги. Это много карт в одной: города и административное деление, леса и поля, гидрография, дорожный граф и запреты поворота, улицы и адреса, каталог заведений, схемы общественного транспорта, база объёмных моделей зданий. Классические ГИС позволяют включать и выключать тематические слои, чтобы они не мешали работать. Классические ГИС умерли, потому что слои — слишком сложно. Единственный крестик в OSM — на вкладке браузера.

Справочник

Мы хотим, чтобы наша карта работала в качестве справочника заведений, и в этом не уступала коммерческим альтернативам — от странного Here до агрессивного 2ГИС. Разве не за этим вы старательно вводите часы работы магазина во время стоянки в путешествии? Не для этого удаляете с карты закрытое кафе по пути на работу? Как приятно в незнакомом городе найти хорошее кафе или неочевидную детскую площадку в OsmAnd! Сразу чувствуешь, что картографы-любители работают не зря.

«Смотри-ка, люди пользуются OpenStreetMap» — удивляются владельцы крупных организаций и просят своих менеджеров добавить все заведения сети на карту. Иногда срабатывает: когда заведений немного и их можно добавить руками. Иногда они обращаются к тем же компаниям, что добавляют их в коммерческие справочники — и вы знаете, что происходит. Картографы не хотят, чтобы на карте были все объекты. И не только потому что они будут мешать картированию — а они будут, своей неидеальностью, — но и потому что начнётся неявное соревнование человека и «машины». Бездушной капиталистической машины.

Как только какие-то классы объектов на карте станут относительно полными — например, заправки — картографы и пользователи OSM начнут на них полагаться. «У нас есть почти всё» — будут думать они и пропускать неотмеченные небольшие заправки, предполагая, что уже всё есть. Сейчас картографы чувствуют ответственность: кто, если не они. Это приятно, потому что ощущение ответственности похоже на ощущение власти (и ломка от понимания разницы страшная). Когда мы отдаём заметную часть POI, «справочник», на откуп коммерции и роботов, картографы потеряют к ней интерес. Эта потеря может затронуть и остальную карту: мол, запятнали, сами и рисуйте.

Естественная реакция на подобную задачу — выделить слой справочника в отдельный проект. Тоже открытые данные, но с более жёстким классификатором и более дружелюбный к организациям и импортам. Перенести все POI из OpenStreetMap и установить правило: справочник → там. Короче, предложить OpenCorporates двухсторонний обмен информацией.

Разумеется, это не сработает: OpenCorporates — это коммерческая компания, а одно из главных достоинств OSM — что наши данные ни от кого не зависят. Как и другие достоинства, с другого ракурса оно скорее походит на недостаток. Но чинить, что не сломано, — не наша задача. Поэтому наш справочник — это OpenStreetMap. У нас есть база заведений, мы умеем отделять её от других данных. Насколько эта база хороша?

Доверия к заведениям в OSM нет даже у опытных осмеров. От моего дома до ближайшего неотмеченного на карте заведения двести метров. Уверен, это расстояние не превысит полукилометра для значительной части активных редакторов. Когда нужно найти кафе, я открываю foursquare, когда ищу автосервис — карты яндекса. Чем больше POI на карте, тем меньше уверенности в их актуальности. Точки вполне могли нарисовать несколько лет назад. А когда фрагмент карты выглядит относительно полным, осмеры перестают его замечать. Наши инструменты не делают удобным обновление данных. Приятно отметить новый магазин. Удалить закрытый сложно.

Будущее

«Участвовать в проекте легко — достаточно зарегистрироваться и нажать кнопку „Правка“». Нажимаем, видим мешанину как на рисунке ниже. Как здесь найти магазин, который нужно поправить, или как тыкнуть в парк, чтобы его обвести, или как проложить тротуар и не зацепить ничего лишнего? Любой опытный осмер, запомнивший, какой кнопкой расцеплять линии, ответит, что это почти невозможно. И мы даже не упоминаем отношения. Постепенно территории, где опасно орудовать в iD и неудобно в JOSM, расширяются. Когда-нибудь такой плотной станет вся карта — и это не будет поводом для радости.

Могли бы помочь автофильтры, вот только за полтора года мы не увидели работ в этом направлении. Да и нынешние их воплощения не сильно отличаются от обычных фильтров, проблема которых описана выше. Нет, дополнительной функциональностью существующие редакторы не поправишь. Пора признать, что в OpenStreetMap у стандартного подхода «скачать всё и потом редактировать» нет будущего. Ни JOSM, ни iD, ни Vespucci, ни Go Map не посоветуют новичкам через десять лет.

Что же посоветуют? Другие редакторы, эксперименты в которых мы видим в последние годы. Прежде всего, это Maps.Me и StreetComplete. Несмотря на технические недостатки, ими пользуются десятки тысяч пользователей. Их особенность — они тематические. Не пытаясь обрабатывать весь клубок данных, они вытаскивают и пришивают только интересные им ниточки: POI и дополнительные атрибуты. Пользоваться ими легко, и для работы с этими слоями даже опытные осмеры предпочитают достать телефон, а не запускать редактор на компьютере.

Именно это и произойдёт в будущем: редакторы всё-в-одном расслоятся на низкоуровневые, типа Level0, и тематические. На мобильных устройствах последние уже победили, теперь дело за настольными редакторами. Вдохновляющие заметки о первых попытках их сделать только начинают появляться в ленте. Например, Deriviste от Ричарда: простая (и очень сырая) страничка с фотографией из Mapillary, картой и поиском по заготовкам тегов. Дважды кликаешь на магазин на фотографии, корректируешь его расположение, вводишь «фрукты» и идёшь дальше. Обработка фотографий из картографической прогулки раньше была невыносимо сложной, а теперь это игра. Гениально.

Пока что у нас нет ни единого законченного тематического редактора, которым хотелось бы пользоваться вместо обычных. Близки к таким редакторы полос, упомянутые выше. Может, ещё Conflation Audit для подтверждения изменений при импортах POI. Логичным развитием его будет помощь при загрузке любых пакетных точечных данных — так что видя страницу магазина с пятью адресами, захочется открыть этот редактор, а не JOSM или iD, потому что он удобнее и гарантирует обновление данных, когда обновится сайт.

Чудесные тематические редакторы будущего обойдут все проблемы, которые описаны ранее:

  • Они очевидным образом решают вопрос слоёв, работая только со срезом данных. Например, вы указываете автобусные остановки по маршруту, а редактор сам прокладывает маршрут по ближайшим улицам и после проверки правильно разрезает их и собирает отношения route. Связи между слоями станут не случайными, а осмысленными и одобренными пользователем.
  • Они автоматизируют редактирование: заботы об обновлении данных лягут не на супер-картографов, коих сейчас один человек на миллион жителей, а на машину. Она сама скачает данные из того же источника и сама напомнит, когда ваш вклад начнёт выглядеть устаревшим. Хранение жизненного цикла внутри OSM не работает, в отличие от сторонних сервисов, которые знают, что делать со всеми этими датами.
  • Они дают уверенность в качестве данных, потому что валидируют не только геометрическую и техническую корректность, но и источник, и взаимосвязь объектов внутри темы, и возраст данных. Импорты станут умнее, потому что у импортированных объектов будет история. Авторы редакторов будут писать валидаторы не вширь, как в JOSM, а вглубь, находя новые неочевидные способы убедиться в правильности изменений.

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

Дело за малым: придумать и написать. Авторы потенциальных редакторов-хитов должны не только хорошо разбираться в OpenStreetMap и уметь программировать, но и иметь опыт в проектировании хорошего UX. Знать все примеры хорошего пользовательского дизайна в картографии: сайта Moovit, редактора запретов поворотов в iD, алгоримов модерации, интерфейса «народных карт»... Да, подвох тут очевиден. Продолжение следует.

Ранее Ctrl + ↓

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