На протяжении всего моего пути обучения разработке программного обеспечения одним из аспектов, который я считаю наиболее сложным, является разработка программного обеспечения. Много раз я изучал новую технологию или фреймворк и не имел идей, как ее реализовать. Но когда я сомневаюсь, когда я теряюсь в мире бесконечных возможностей, я вспоминаю: у меня есть Тот Один Проект, К которому Я Постоянно Возвращаюсь. И этот проект — моя страница турнирной таблицы MLB.

Я перестраивал эту страницу столько раз, что чуть не сбился со счета. Первая итерация была одной из первых веб-страниц, которые я создал после изучения jQuery. Я не знал об API, поэтому использовал Ruby (и гем nokogiri), чтобы очистить страницу турнирной таблицы MLB на espn.com. У меня был сеанс tmux, посвященный запуску watch -n 1800 standings.rb. Эти результаты были сброшены в файл .csv, который читался внешним интерфейсом. Фронтенд был полностью написан на спагетти jQuery. Это был полный беспорядок.

Затем, когда я узнал, что такое API, у меня возникла идея переписать mlbstandings, используя API xmlstats Эрикберга. Если я правильно помню, меня забанили в API, потому что я забыл -nflag в команде watch, которую я выполнял, и запрашивал API каждые 2 секунды. В то время я работал в офисе рядом с какими-то программистами, поэтому я спросил одного из них, что делать. Он сказал мне создать новую каплю DigitalOcean, чтобы я мог получить другой IP-адрес. Он также рассказал мне о cron. В тот день моя жизнь изменилась. Вторая версия mlbstats заканчивала тем, что запрашивала API один раз в день (вероятно, из-за боязни повторного бана) через cron. Это означало, что после окончания игры турнирная таблица на моем сайте устарела до тех пор, пока моя работа cron не запустится снова. В этой версии все еще был спагетти-интерфейс, теперь читающий из .jsonfile, и лишь немного улучшенный бэкэнд.

В 2017 году Reddit объявил о стажировке Reddit для инженеров. Это казалось работой мечты, поэтому я посмотрел на страницу приложения. Одним из требований для стажировки было способность запрограммировать свой выход из бумажного пакета… или сделать бумажный пакет из CSS3… или что-то, вероятно, связанное с React, потому что это все, о чем все говорят. Я слышал о React, но почти ничего о нем не знал. Однако как только я увидел это предложение на странице RIFE, я понял, что должен делать. Через несколько минут я погрузился в изучение руководств по React, книг, игр в крестики-нолики и нового мира современного внешнего интерфейса JavaScript (настоятельно рекомендую эту статью Питера Джанга на эту тему). Оглядываясь назад на спагетти-код jQuery второй версии mlbstandings, я понял, что переписывание интерфейса было бы хорошим способом справиться с React, не беспокоясь о бэкэнде. Я внимательно прочитал ограничения скорости xmlstats и изменил задание cron, чтобы оно запускалось каждые 30 минут. Я создал красивый, отзывчивый интерфейс, используя React и Sass, и все было хорошо.

Написав приличный внешний интерфейс, следующим должно было быть обновление внутреннего интерфейса. Недавно я узнал о WebScockets и socket.io, и моя жизнь снова изменилась. Больше никаких setTimetout()и чтения из .jsonфайлов. Теперь я могу отправлять данные API из моего бэкэнда прямо во внешний интерфейс, и я могу не отправлять эти данные, если ничего не изменилось. Впервые я использовал socket.io в своих проектах tweetmap (chicagotweetmap и usatweetmap) и полностью изменился. Теперь я запрашиваю API MLB напрямую через node-mlb-api. Насколько я могу судить, ограничения скорости нет (я буду держать вас в курсе), поэтому я запрашиваю его каждые 10 секунд. Если и только если данные изменились, я выдаю событие с новой позицией, и клиент отображает его.

Я сделал несколько замечаний по поводу The One Project. Это то, что я использую каждый день (по крайней мере, во время бейсбольного сезона). Это достаточно просто, чтобы написать с нуля за день. Он достаточно сложен, чтобы иметь место для совершенствования. Я бы сказал, что без этого проекта я был бы менее заинтересован в веб-разработке. Я не уверен, является ли концепция The One Project общей для людей, изучающих программирование, или я нашел что-то особенное. One Project удобен. Это обнадеживает. Это способ научиться чему-то новому в удобной для вас среде.

На данный момент это финальная версия mlbstandings. Но я уверен, что как только я изучу новую технологию, новый фреймворк или новый способ ведения веб-разработки, у меня всегда будет тот проект, к которому я постоянно возвращаюсь.