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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Электричка слева — Аэроэкспресс — теперь тоже добавлена в приложение.

В день расписание у нас просматривают 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 написал много пожеланий к тому, как должно выглядеть приложение в связке с другими видами транспорта. Мы думали, что доделали, потом столкнулись с вычислительными сложностями, потом опять думали, что доделали… В общем, там получилось где-то совсем другое, где-то лучше, а где-то есть тупики. После стабильного релиза мои коллеги расскажут детальнее.

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

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



Направление



Цена, автобус



Цена, электричка



Пересадка на электричку



Москва — Можайск



257



276



нет



Москва — Обнинск



269



284



нет



Москва — Ступино



264



279



нет



Москва — Волоколамск



273



322



нет



Москва — Егорьевск



275



276



нет



Москва — Переславль-Залесский



285



-



-



Москва — Кубинка



94



161



нет



Москва — Петушки



253



337



нет



Москва — Воскресенск



213



230



нет



Москва — Суздаль



605



-



-



Москва — Рязань



379



462



нет



Москва — Зарайск



336



-



-



Нижний Новгород — Муром



591



-



-



Москва — Алексин



484



658



да



Москва — Озёры



286



368



да



Москва — Гусь-Хрустальный



517



701



да



Москва — Ясногорск



385



388



нет



Москва — Зубцов



436



-



-



Москва — Лакинск



275



421



нет



Великий Новгород — Сольцы



200



-



-




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

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


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

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

Мы продолжаем пилить самое точное расписание в Рунете, остаёмся на связи и готовы к тому, что вы скажете, что ещё можно и нужно сделать. Не всегда мы нужные вещи делаем быстро, но точно всегда прислушиваемся. Поэтому поругайте или похвалите нас, пожалуйста: это полезно.
Источник: https://habr.com/ru/company/tuturu/blog/465303/


Интересные статьи

Интересные статьи

Открытые исходники Недавно в открытый доступ были выложены исходники системы голосования, которая по всей видимости, и будет применяться на электронном голосовании по Конституции в М...
VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.
Много всякого сыпется в мой ящик, в том числе и от Битрикса (справедливости ради стоит отметить, что я когда-то регистрировался на их сайте). Но вот мне надоели эти письма и я решил отписатьс...
Но если для интернет-магазина, разработанного 3–4 года назад «современные» ошибки вполне простительны потому что перед разработчиками «в те далекие времена» не стояло таких задач, то в магазинах, сдел...
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...