ШТОСМ

Кнопки не нужны

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

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

Кнопки изменения масштаба появились от свойств тайловой схемы вкупе с линукс-мышлением. Тайлы, из которых состоит карта, устроены просто: на нулевом масштабе один тайл, на первом — четыре (2×2), на втором — шестнадцать (4×4) и так далее, каждый квадратик делится пополам в обоих измерениях. Линукс-мышление требует максимальной конфигурируемости: вдруг пользователь захочет посмотреть на карту конкретно на 13 масштабе, а мы ему не дадим? Поэтому развитие карт идёт увеличением количества уровней масштаба как вглубь, так и вширь, добавлением промежуточных уровней и переходом на векторные тайлы с непрерывным масштабированием. Больше контроля пользователю!

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

Эти кнопки — бич веб-картографии. Как не устаёт напоминать Сергей Голубев, при каждом нажатии на «+» вы видите новую карту, с собственным картостилем и свойствами. На сайте osm.org у нас 20 (двадцать) различных картостилей. Каждое изменение стиля osm-carto затрагивает примерно половину из них, поэтому неудивительно, что дискуссии в репозитории обильно иллюстрированы и могут затягиваться. Но если подумать, действительно ли пользователю нужны все эти карты? Вне компьютера хватает трёх-четырёх: атласа мира, атласа области и карты города. Когда масштабов мало, больше времени остаётся на полировку оформления каждого. А точная настройка интерфейса становится излишней.

Изменить масштаб можно многими способами, в зависимости от устройства и сайта:

  • кнопками плюс-минус на экране;
  • теми же кнопками с зажатым shift для большей скорости;
  • ползунком масштабирования;
  • колёсиком мыши;
  • двойным кликом левой кнопкой;
  • растягиванием прямоугольника мышью с зажатым shift;
  • кнопками «+» и «-» на клавиатуре;
  • перетягиванием двумя пальцами на тачпаде или экране;
  • щипком или расщипком на экране;
  • дважды тыкаешь пальцем, второй раз не отпуская удерживаешь и тянешь вниз или вверх.

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

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

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

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

18 июля   javascript   mobile   ВНЕЗАПНО

Быстрее загружай

Возможно, вы заметили, что правки передаются на сервер быстрее. Или не заметили, потому что это не особенно тормозило и раньше. На прошлой неделе код сайта osm.org, Rails Port, отстранили от ещё одной части API: загрузки пакетов правок. Ваши пакеты теперь обрабатывает Cgimap.

Cgimap — это программа на C++, которая обрабатывает часть запросов к OSM API. Сайт написан на Ruby on Rails, поэтому каждый запрос к нему проходит через длинную цепочку обработчиков, не всегда оптимальную. Кроме того, передача данных от базы к клиенту в Rails требует много памяти и задействует сборщик мусора, который напрягает систему. Поэтому запрос /map на скачивание данных был переписан на C++ ещё в 2009 году.

Предполагается, что если появится API 0.7, то он целиком будет сделан внутри Cgimap. Мы давно хотим отвязать API от кода сайта, чтобы дневнички и интерактивная карта остались в Rails Port, а запросы к базе были отдельно. Но работа не кипит, скрипт обрабатывает лишь малую часть запросов. Сложным барьером была поддержка авторизации OAuth, но в 2016 году Мэтт Эймос, главный разработчик Cgimap, её сделал. В мае 2018 Mmd приступил и написал обработчик второго по количеству перекачиваемых данных запроса: /upload для отправки пакетов правок на сервер. Только в начале этого года у разработчиков дошли руки подчистить концы, отрефакторить и приступить к тестированию.

Второго марта бета-версию Cgimap 0.7.0 (это версия программы, не API) подключили к dev.osm.org, 28 марта тестирование закончилось и версию отправили в репозитории. Но у Тома, как водится, руки дошли подключить только после третьего напоминания. Пара дней ушла на настройку доступа к базе данных, и с 28 мая пакеты правок обрабатываются сервером быстрее, особенно большие. Поскольку это первый запрос, на котором Cgimap требует аутентификации, в ней нашлись несколько проблем, которые поправили в трёх версиях Cgimap за три дня.

7 июня   osm.org

Что за Maxar?

Три недели назад вы могли заметить новый слой спутниковых снимков в вашем редакторе: DigitalGlobe Vivid. А неделю назад — что его заменили два других, тоже на весь мир: Maxar Standard и Maxar Premium. Откуда они и зачем?

Быстрое гугление показывает, что Maxar Technologies получилась в октябре 2017 года слиянием MDA Holdings и DigitalGlobe. Объединённая компания занимается всем, что связано с космосом и спутниками. Теперь ещё и продажей космоснимков. Все сотрудники перешли в Maxar, и они не собираются отзывать разрешение на обрисовку снимков у OpenStreetMap. Никто не делал заявлений на этот счёт, но пул-реквесты в каталог подложек показывают, что в Maxar помнят про сотрудничество и обновляют ссылки.

Новые слои отличаются от старых. Технически — тем, что они не проходят через серверы Mapbox, а отдаются напрямую с DG. Содержанием тоже. В описании Maxar Premium упоминается, что это то же, что DG +Vivid, который нам два года назад выдали в слое DG Premium. Сравнение снимков в десяти городах показало, что чаще всего оба новых слоя совпадают, а если нет, то свежее может быть как Standard (в Новосибирске), так и Premium (в Калининграде). Но в паре мест — в районах Москвы, Петербурга и Саранска — самым свежим оказался DG Premium.

Это печально, потому что старые слои DigitalGlobe отключат не позднее 30 июня. Мы потеряем как самые свежие снимки, по которым можно нарисовать стадион в Саранске, так и самые старые, которые напомнят, как выглядели города до строительного бума. Представители Maxar пока не отвечают на вопросы, но на всякий случай, не откладывайте рисование новых жилых комплексов и инфраструктуры. Конечно, через год-два они появятся на всех слоях, но у нас же самая актуальная и точная карта сегодня, а не через год.

30 мая   источники

Vision of a Future

Вы наверняка знаете про Mapbox Vision SDK. Удивительная библиотека, которая прямо на устройстве прогоняет видео с телефонной камеры через нейронную сеть. Ищет в кадре машины, пешеходов и знаки, размечает кадр попиксельно, рисует на экране маршрут и напоминает об ограничениях. Продвинутый видеорегистратор. Видеоролик лучше любого описания: да, техника дошла, будущее уже в телефоне и почти не тормозит.

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

Когда я за рулём, экран моего телефона выключен. Там работает навигатор и в правильные моменты он подсказывает: «поверните налево», «через триста метров направо». Никогда не удавалось оценить, сколько это — триста метров; порой приходилось резко тормозить и сдавать назад. Если прикрепить телефон к приборной панели, я начинаю его палить: контролировать скорость и время по GPS, смотреть на окрестности на карте. Читать уведомления из мессенджеров.

Поэтому AR, дополненная реальность, не нужна. Остальные части презентации тоже по-своему бесполезны. Предупреждения, например, либо избыточны и их игнорируешь — вспомните «динь» о превышении скорости в яндекс-картах, — либо редки и слишком неожиданны, чтобы вовремя среагировать. Картинки на сайте Vision SDK предлагают и третий вид уведомлений: слишком ярких и перегруженных, чтобы читать за рулём. Последний слайд в «Use Cases» особенно зловещ: внедрение системы приведёт к штрафам за то, что водители не роботы.

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

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

Главное в разработке — заткнуть внутреннего технаря и решать проблемы, а не предоставлять возможности. Например, не показывать, а говорить. Не «триста метров», а «перед забором». «Две минуты до съезда, перестройся вправо». Или «десять секунд», если машин вокруг мало. Это всё базовые улучшения, для которых не нужно камер. Vision SDK позволяет оценивать окружающую обстановку так, как не сможет никакой водитель, особенно усталый или в сумерках. «Впереди пешеход, притормози».

Обучение привычкам водителя, плюс данные с камер и автомобильных датчиков, плюс картография решат все затруднения, знакомые каждому водителю. Стоит ли разгоняться, или всё равно на светофоре стоять? Безопасно ли обгонять таз с прицепом, когда встречка далеко, но слепит фарами? Прервать обгон и встроиться между фурами? Быстрее ли соседняя полоса и точно ли там сейчас никого нет в слепой зоне? Сколько на этой дороге полос, не стоит ли принять чуть вправо? Тормозить или резко свернуть перед препятствием? Не влетит ли в меня обгоняющий, если я поверну налево?

Нужно не вываливать всё, что вычислили, а ненавязчиво подсказывать и, возможно, светить крупными, понятными индикаторами. Знаю, что превышаю скорость, но пора бы понять, что я люблю ездить плюс пять к ограничению, за которые не штрафуют. Если я в правой полосе, то зачем предлагать держаться правее? Линия маршрута нафиг не нужна, когда о повороте можно сказать голосом, а вот индикатор «можно обгонять» очень бы пригодился. Как и индикаторы безопасности перестроения на левом и правом боковых зеркалах.

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

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

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

Ничей OSRM

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

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

Не удивительно, что спустя год его автора, Денниса Люксена, завербовали в Mapbox — сразу после защиты диплома в университете Карлсруэ. В то время это было позитивной новостью: OSRM не откладывался на полку отработанных дипломных проектов, как это случилось, например, с MapSurfer, а получал поддержку деньгами и коллегами от крупной компании. С тех пор OSRM становился всё умнее, получая полезные на практике функции, вроде улучшенных пошаговых инструкций, поддержки полос и restriction:conditional.

Всё поменялось в январе 2018 года. Именно тогда Mapzen объявил о закрытии всех своих сервисов, включая движок роутинга Valhalla. Его особенностью была разбивка данных по тайлам, что предположительно помогало обновлять данные и загружать их в память фрагментами. В то время (да и в это) векторные тайлы захватили воображение руководства Mapbox, поэтому не очень удивляет, что всего через три дня все пять разработчиков присоединились к компании. Спустя месяц Valhalla уже строила маршруты по пробкам на сотнях серверов Mapbox.

А что OSRM? В апреле 2018 активность главного репозитория проекта внезапно снизилась на два порядка: с двадцати коммитов в день до пары коммитов в неделю. Деннис ушёл ещё в начале 2015. Часть разработчиков перевели на другие проекты, но большинство, судя по слухам и активности на GitHub, просто уволили. Из верхних десяти участников проекта (одиннадцатый — Лев из Juno) активность после того апреля проявлял только сотрудник Mapbox Дэниел Паттерсон. Да и то — он лишь проверял и принимал пул-реквесты от пользователей библиотеки, не тратя много времени на разработку. По косвенным признакам ощущалось, что изменения даже не тестировались как следует.

«Линия жизни» репозитория, график коммитов, дважды за последний год прерывалась на месяц: в августе и в декабре. Когда я залил очередной несложный пул-реквест, я ожидал, что нынешний перерыв тоже скоро закончится. Но с последней правки кода прошло уже больше двух месяцев. Дэниела, судя по строчкам вида «42 contributions in private repositories», загрузили работой в Mapbox, и OSRM остался без мейнтейнера. Некому даже нажимать на кнопку принятия пул-реквестов. Другими словами, проект мёртв.

Почему так получилось? У всех всё работает. OSRM как-то страхует Valhalla на серверах Mapbox, но в нём ничего не изменится, потому что вся работа теперь в векторных тайлах. Maps.Me, который когда-то удивил работой движка на смартфонах, пару лет как выкорчевал OSRM из кода, заменив своей, более гибкой навигацией. Для публичных серверов, типа недавно добавленного на глагне роутинга от немецкого FOSSGIS, достаточно старых версий. Вероятно, OSRM просто исчерпал возможности для развития, а отсутствие даже теоретической возможности поддержать различные профили, пробки и прочие динамические ограничения толкают корпоративных пользователей к разработке альтернативных решений. Если энтузиастов не найдётся и среди сообщества OpenStreetMap, проекту крышка.

Не сказать, что это плохо: GraphHopper ещё жив. Разработка движка Valhalla, разумеется, очень активна, но как и другие проекты Mapbox, поднять его на своём сервере будет непросто. А в недрах Гейдельбергского университета Амандус Бутцер и Тим Макколи растят достойную смену: OpenRouteService.

30 апреля   роутинг
Ранее Ctrl + ↓