Site icon AppTractor

Как MTA закрыла мое приложение для пассажиров Пенсильванского вокзала

От идеи важного для пользователей приложения до его закрытия: разработчик Алекс Харламов поделился историей своего проекта TrackTrain.

Бэкграунд

Когда я переехал на Лонг-Айленд, я начал совершать ежедневные поездки по железной дороге Лонг-Айленда (LIRR) на Пенсильванский вокзал (Пенн-стейшн) Манхеттена. Для тех, кто никогда там не был — вокзал кажется огромным, переполненным и ошеломляющим. Там работает три железнодорожных компании, над станцией находится Мэдисон-сквер-гарден, а также множество магазинов, баров, ресторанов и других мест. 650 тысяч людей проезжают через Пенн-стейшн каждый день — больше, чем через все аэропорты Нью-Йорка.

LIRR, Нью-Джерси Транзит и Amtrak ежедневно отправляют 1200 поездов по 21 пути. По многим причинам до последнего момента неизвестен точный путь, с которого отправляется поезд. Чтобы справиться с этой проблемой, в центре зоны вокзала расположен огромный экран, на котором показано расписание поездов. За десять минут до отправления поезда наконец-то появляется номер пути — и так вы узнаете, куда идти, чтобы добраться домой. К сожалению, и все остальные люди начинают идти в то же время.

Как только появляется номер пути для любого поезда, огромная толпа людей начинает бежать к очень узкой лестнице, ведущей к поездам. Если вы подождете, пока все пройдут, в поезде останутся только стоячие места (это касается часа пик, если вы едете в 3 часа ночи в Саффолк Каунти, то поезд будет почти пустым).

Идея

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

Однако через несколько недель я начал замечать определенные шаблоны. Во время часов пик поезда отъезжали от одного и того же пути каждый день. Чтобы проверить свою теорию, я решил отследить номер пути для разных поездов, на которых я ездил. Она оказалась почти верной: в обычные часы номера менялись, но во время пиковых часов номер совпадал в 95% случаев. Я начал спускаться к поездам до официального объявления и понял, насколько проще это делает жизнь — я был одним из первых людей в поезде, занимал любое место и не переживал насчет времени.

Час пик на Пенн-стейшн

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

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

Технологии

Архитектура состояла из трех компонентов:

Для бэкенда я рассматривал новую технологию вроде Node.js/MongoDB, которую я хотел изучить, но передумал. Так как это не планировалось как одноразовый проект, я решил использовать технологии, которые я хорошо знаю. По этой причине я выбрал стек PHP/PostgreSQL. Я был доволен выбором, всё работало, и я нашел несколько полезных библиотек, которые сэкономили мне время.

Для мобильного компонента я исследовал технологии “JavaScript в нативной оболочке” вроде Phonegap/SenchaTouch. Но всё работало не так, как должно было, и поэтому я нанял разработчика-фрилансера для создания нативного iOS-приложения (Если у вас нет опыта в найме фрилансера, я не рекомендую вам это делать — это непросто).

Данные

Для начала я хотел посмотреть, возможно ли получить данные от MTA. Было бы отлично использовать API, но у них его не было. Единственный способ получить информацию о пути — извлечь её с их сайта. Это легко — номер пути появлялся в очень предсказуемом теге. Однако сложнее было придумать, как получать данные безопасно, без риска быть заблокированным MTA или обрушить их серверы.

Чтобы меня не заблокировали, мне нужно было сделать сложным идентификацию запросов, исходящих из моего скрипта. Знаком могло быть любое из списка ниже:

Решать это было весело. Вот что я сделал в итоге:

После нескольких недель кодинга по ночам и выходным приложение начало выглядеть хорошо. Однако всё стало сложнее — внезапно MTA запустила официальный API! С одной стороны, я был рад таким новостям — я мог получить данные честно, без скрепинга. С другой стороны, я потратил много усилий, чтобы скрепинг работал идеально. В конце концов, я был не против — хотя мой код остался не у дел, сам процесс его создания был интересным. Я отправил запрос на ключ API и получил его через несколько недель.

Релиз

Хотя мне пришлось переписать бэкенд, чтобы задействовать официальный API, приложение было почти закончено. Я решил, что оно должно выглядеть максимально минималистично. Пользователи откроют приложение, выберут поезд и увидят номер пути для этого поезда за последние десять дней.

Я назначил цену в один доллар, назвал приложение “Track Train”, отправил его в App Store и всё завертелось!

Несмотря на нулевой маркетинг, приложение получило пользователей и хорошие отзывы. Люди писали мне, как долго они ждали подобное приложение. Скоро оно было в топе результатов поиска по ключевым словам, связанным с LIRR. Другие разработчики начали спрашивать, могут ли они использовать мой API для создания приложения на других платформах. Хотя денег было недостаточно даже для покрытия моих затрат, я был рад, что сделал что-то, что действительно хотели люди и начал планировать больше функций и расширение приложения на другие станции (Atlantic Terminal в Бруклине имел схожие проблемы).

Закрытие

Увы, этому не суждено было случиться. Спустя нескольких месяцев после запуска я получил письмо от MTA о том, что я использовал “неправильный API”. Хотя я получил официальный токен от MTA, API предназначался для приложений MTA, а не для стороннего использования. Я посмотрел на новый API и понял, что в нем нет самой главной функции — номера пути для поездов! Да, функция, вокруг которой было построено все мое приложение.

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

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

Уроки

Несмотря на несчастливый конец проекта, я не слишком расстроился. Вот некоторые уроки, которые я вынес:

В целом, хотя мне и было жалко закрывать приложение, я рад, что создал TrackTrain. Это было моим первым приложением для iPhone, и я горжусь завершением и запуском проекта. Я узнал много ценных вещей и хорошо провел время. Мне стыдно перед пользователями, но я надеюсь, что скоро появится лучшее решение.

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

Exit mobile version