Хабрахабр

Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал

Я хочу немного отчитаться о том, что мы добавили в приложение электричек по просьбам сообщества. В день расписание у нас просматривают 600 тысяч человек, поэтому каждое маленькое изменение имеет эффект большого масштаба. И сказать спасибо всем, кто давал нам обратную связь, и показать, что мы меняли.

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

Как выяснилось, не делать его — идея так себе, потому что:

  1. Многие хотят посмотреть расписание «в целом», а не по текущей ситуации.
  2. Открылся совершенно необычный способ использования приложения: с эскалатора. А на эскалаторах обычно какой-нибудь 3G-LTE-интерконнект или просто смена базовой станции. В час пик ещё и «растянутая» между абонентами сота. И вообще в метро часто так бывает, что интернет как бы есть, а коннекта по факту нет.

Сейчас модель действий такая: если есть быстрая связь, то всегда грузится актуальное расписание. Спасибо OVAV: мы начали детектировать такие ситуации. По мере просмотра мы можем успеть получить обновление (пакеты очень лёгкие) и сразу показать его прямо в интерфейсе «на лету». Если связи нет — показывается офлайн-версия (это из локального кэша фактически), на ней — метка времени, когда это было актуально. Тогда метка про офлайн-режим будет убрана.

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

Поскольку пакеты очень лёгкие (там XML-данные по паре килобайт на маршрут), то всё это очень быстро.

Прогнозирование опозданий

Электрички по API транспортной системы дают статус с запозданием на шаг графика (10 минут), и статус будет за последние 10 минут. То есть в 14:22 можно получить фактическую картину движения поездов на 14:12. А в 14:12 она будет собрана с фреймом 10 минут, то есть в худшем случае отставание будет 19-20 минут, в лучшем — 10. Мы немного пошаманили с матмоделями и историческими данными и научились сокращать это окно до двух минут по прогнозированию движения остальных поездов. То есть если электричка опаздывает не из-за внезапной аварии, а из-за тактического изменения расписания, то мы узнаём об этом очень достоверно на 8–18 минут раньше фактических данных.

Юзабельность

Больше всего к нам было вопросов по юзабилити. Да, год назад у нас не открывался сразу тот экран, который вам был нужен: уходил лишний клик на расписание. Спасибо airy за поднятый тикет.

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

Причём так оказалось, что искал его тот же человек, который внёс. Нашли очень красивый баг, который сами же и заложили несколько лет назад. Полночь не подходит. В общем, когда-то давным-давно нам нужен был момент, когда на железной дороге наступает завтра. И когда ты смотришь электрички на сегодня, то ждёшь, что после той, что в 23:50, будет показана 00:20 без переключения дат. Дело в том, что у планеты сутки заканчиваются в полночь, а у людей — в другое время.

Вопрос был в том, где поставить границу: показывать до часа ночи, до двух, до трёх, до пяти утра?

Поскольку больших данных тогда не было, ограничились константами. Поскольку мы математики, то смоделировали потоки и учли распределение рейсов. Для Москвы вывели волшебное время — 2:52, именно в этот момент было удобнее всего сменять сутки.

Дальше была пара тикетов про то, что пропадают электрички на сегодня: это определённые запросы поиска между 00:00 и 2:52 (считали, что сегодня — это вчера). Примерно пять лет это уходило всё глубже и глубже в код. А вчера все электрички ушли.

В итоге мы разделили на более понятные категории, как и должны были бы сделать изначально, если бы не гонялись за оптимизацией в те годы (а мы гонялись).

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

Стандартная модель поведения — когда поезд уходит из расписания, он просто растворяется в эфире. Иногда сыпались тикеты на то, что «у вас пропадают электрички». Это они не у нас пропадают, а у ЦППК и других перевозчиков (в расписании). Ощущают потерю контроля. Пользователи, которые его помнили, думают, что как-то не так ищут, и нервничают. Людям стало спокойнее, а нас не считают злыми разработчиками, ворующими поезда у честных граждан. Теперь мы сделали призрак поезда: строчка в расписании с меткой «Отменён».

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

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

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

Мы думали, что доделали, потом столкнулись с вычислительными сложностями, потом опять думали, что доделали… В общем, там получилось где-то совсем другое, где-то лучше, а где-то есть тупики. Karpion написал много пожеланий к тому, как должно выглядеть приложение в связке с другими видами транспорта. После стабильного релиза мои коллеги расскажут детальнее.

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

Сортировка по популярности направления. Вот смотрите, мы выделили направления, где это имеет значение (или где можно напрямую проехать автобусом там, где на электричке нужны пересадки). Так что если у вас в этих городах живут родственники, то, возможно, им будет интересно это сравнение.

При этом с поездами дальнего следования пересечение небольшое, около 7 %. В целом около 50% направлений электричек (по которым у обеих станций есть привязка к городу) есть альтернатива из автобусного расписания.

При этом пассажиры приложения могут голосовать за платформу отправления. Сделали очень крутую (для нас) штуку: фича «платформа и путь». Это на 50 самых популярных станциях мы стали прогнозировать, куда подадут электричку на основании истории её подач и движения поездов. То есть вы пришли, сели в свою электричку и нажали вот так:

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

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

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть