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



    В день расписание у нас просматривают 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 лет назад нам звонили неизвестные люди сказать, что где-то отмена, а мы вносили в расписание (потому что была только бумага). Ещё тогда мы запомнили, что пассажиры рады помогать друг другу. Думаю, сейчас мы поймём, как сделать это лучше, и будем дальше смотреть в эту сторону.

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

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

    Комментарии 22

      +2
      Насчёт тёмной темы — был чрезмерно благодарен вам, когда она появилась. Насчёт тикетов — когда-то пытался участвовать в голосованиях фич для продуктов Мелкософта на Андроиде, ибо пользовался, там фич-реквесты тёмной темы висят годами и никто не спешит их реализовывать. В какой-то момент просто смирился и перестал пользоваться приложениями без тёмной темы, если есть альтернативы. Нет веры в то, что тикет реализуют.
        0
        Сделали очень крутую (для нас) штуку: фича «платформа и путь»
        Не на всех вокзалах и платформах эта фича необходима. Вот например Савёловский вокзал платформ и путей много, а пригородные поезда идут в одном направлении.
        Также например на Курском вокзале (Курское направление) исторически сложилось что прибытие с юга происходит на пути 9 ,10 и тд. Реже на 5 или 6 путь. Отправление происходит со второй платформы.
          0
          Согласен, не на всех станциях необходима данная фича, поэтому в iOS-приложении мы её оставили только у 50 станций.
          Что касается вокзалов, то осенью ожидаются серьёзные приятные обновления, следите за нашими релизами
            +1

            Вот про пункт отменен согласен полностью.
            Отслеживать летнее или зимнее расписание или вникать в подробности где и как долго идет ремонт путей не всем бывает интересно.


            К сожалению приложением не пользуюсь, так как расписание в регионе где я живу практически не менялось десятилетиями ( Курское направление), но возможно будет интересно внести в приложение статичную информацию о пригородных поездах или аэроэкспресах. Я в этом году впервые воспользовался аэроэкспресом и не знал что после 12 ночи они не ходят. также для МКЖД на некоторых участках расписание не менялось годами (Кубинка-Поварово)

              0
              Кстати, у нас есть расписание аэроэкспрессов в приложениях и на сайте.
              Осенью появится возможность через нас покупать билеты на аэроэкспрессы по цене перевозчика
            +1
            Надо сделать более атмосферный дизайн, что бы больше соответствовало реальности.
            image

            image

            image
              0

              Поработайте, пожалуйста, с отступами. Побольше воздуха немного. В тех же Яндекс.Электричках с этим всё в порядке. У вас текст слишком близко друг к другу.

                +1

                Вот не надо лишних отступов! И без них места не хватает.

                  0
                  По дизайну мы получаем множество противоречивых друг другу пожеланий, пытаемся найти компромиссный вариант
                  +1
                  Спасибо вам за ваше приложение, пользуюсь путь и не регулярно, но достаточно давно.

                  Фича «платформа и путь» очень клевая, спасибо.
                  Но к ней бы еще и схему путей, хотя бы очень схематическую, потому что запомнить ту же нумерацию на Белорусском вокзале, особенно если не каждый день ездить — можно мозг вывихнуть.
                    0
                    Спасибо за идею! Кажется, это может быть очень полезно
                    +2
                    важная фича — это офлайн-режим. Мы его долго не вводили, потому что смысл расписания — как раз в постоянных изменениях

                    смысл расписания — в постоянных изменениях

                    *вселенский вой, полный сумасшедшего смеха, адской боли и невыразимой тоски*
                      0
                      Имеется ввиду, что смысл сервиса расписаний в показе самых актуальных данных с учётом всех изменений (плановых, внеплановых, изменений базового расписания)
                        0
                        Да я понимаю, что не сервис виноват.
                      +1
                      Оффлайн режим это же просто огонь. Яндекс.Электрички на стартовом экране показывают маленькое расписание, но если открыть направление, то лезут в сеть. И ты такой на эскалаторе готов проклять весь этот ненужный и не к месту онлайн.
                        0

                        Оффлайн это круто и очень удобно, ведь можно с утра загрузить расписание на поездку вечером, мало ли что случится в пути: будь то кончился мобильный интернет или вообще пропала связь. Теперь не надо фотографировать расписание по прибытию и искать его потом где попало!
                        Пара фиче-реквестов:


                        • Возможность свернуть попап "Не удалось обновить расписание" в, например, маленький желтый восклицательный знак где-то слева от кнопки "Обратно". Ведь если интернета нет и не предвидится — ценность попапа пропадает: я и так это знаю, спасибо, предупрежден — вооружен
                        • Возможность фильтровать электрички по типу: например, посмотреть "только ласточки", или, наоборот, "только обычные электрички"
                          0
                          Возможность свернуть попап — хорошая идея, спасибо, подумаем над этим!
                          Возможность фильтровать электрички по типу уже есть как на сайте, так и в последних версиях приложений. Кстати, в приложениях можно как раз посмотреть в том числе и только «обычные» электрички
                            0

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


                            Баг/Фича?

                            image

                            При просмотре на «завтра» или на «дату» всё хорошо.
                            Теперь, кстати, (особенно при просмотре только ласточек) мозолит глаза кнопка «Расписание до 3:00». По статье понятно, зачем она, но на моём направлении она совершенно бессмысленна. Кажется, имеет смысл добавлять её в спорных случаях, когда невозможно однозначно определить когда «начинается завтра». И кстати при нажатии на неё сбрасывается фильтр «ласточка».
                            Тогда ещё один фиче-реквест, наверняка не первый его пишу: возможность переключаться между «сегодня» / «завтра» / «дата» по свайпу!
                              0
                              Хорошее замечание насчёт сбрасывания фильтра, доработаем.
                              Скрывать «Расписание до 3:00», если в расписании на предыдущие «электричечные сутки» нет поездов с 00:00 до 03:00 вряд ли мы будем в ближайшее время, многое придётся для этого переписывать, за это время можно более изящное решение разработать.
                              Возможность переключения по свайпу мы сейчас изучаем, да, Вы правы, подобных пожеланий мы получили довольно много
                                0

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

                          +1

                          На выходных активно пользовался приложением и в голову пришёл следующий фич-реквест:
                          возможность уведомлений о конкретных электричках за 5/10/20/N минут до ожидаемого прибытия. Пользуюсь электричками нерегулярно, поэтому наизусть расписание не помню; ночью, когда электрички ходят сравнительно редко, приходится постоянно подглядывать в расписание, чтобы не забыть когда там придёт выбранная подходящая электричка. Получать подобное уведомление минут за 15 (то бишь, когда пора выходить из дома) было бы очень удобно.


                          Как правильнее реализовывать не вполне представляю, потому что сообщать обо всех электричках по заданному направлению не целесообразно, придётся постоянно включать/отключать. Или цепляться за конкретные и делать одноразовую напоминалку, или указывать период времени и делать напоминания периодическими, как это сделано для изменений.

                            +1
                            matsulenko будет время, гляньте приложение швейцарских sbb. Быть может, возьмёте на вооружение тему со станциями-tiles и простой навигацией между оными. Например, курьер, гоняет между 5-7 станциями, берёт проводит по экрану от А к Б или от А к Б (фикс на 1 сек) к В и получает маршрут.

                            На счёт разных станций с одним названием или разных платформ, в том же sbb прикручен api локальных карт local.ch.

                            *PS*: если нужна будет пояснения что, как и для чего сделано — велкам, расскажу и покажу

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое