Как случайная онлайн-встреча привела к исполнению мечты

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

К сожалению, наше небольшое сообщество превысило ресурсы, доступные нам на бесплатном экземпляре Heroku.

Бот запускался и сразу вылетал. Из журналов сбоев мы определили, что бот пытался загрузить всех пользователей, которые когда-либо были частью этого Slack, в память вместе с их значениями очков кармы, но у него закончилась память, прежде чем он смог загрузить всех.

Итак, будучи сообществом в основном программистов, мы сделали то, что сделал бы любой программист ̶s̶e̶l̶f̶-̶r̶e̶s̶p̶e̶c̶t̶i̶n̶g̶: мы перешли на бота на основе Node. Эта версия бота восстановила приветственное сообщение и ответила на несколько хорошо подобранных фраз.

Единственное, чего не хватало боту на базе Node, так это модульных тестов. И, как вы могли догадаться по названию этого поста, в нем тоже не хватало кармы.

Учитывая мой опыт как программиста, а точнее сказать, специалиста по разработке программного обеспечения (SDET), тестируемого инженера-разработчика ПО, я решил, что напишу карма-часть бота сам. И, учитывая, что в нашем боте было несколько мелких ошибок, я согласился помочь написать несколько модульных тестов и провести рефакторинг кода бота.

Тайлер и я занимались парным программированием, чтобы исправить недостатки бота, включая вышеупомянутое модульное тестирование и рефакторинг кода. Но как только мы добрались до места остановки, жизнь продолжалась, но нашему боту, ласково известному как R2D8, все еще не хватало Кармы.

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

Я упоминаю JAMStack не потому, что намереваюсь перевести бота на архитектуру JAM, а потому, что JAMStackConf привел меня к тому, что я нашел нового друга, Эндрю Ллойда.

Андрей настоящий барыга, настоящий балерин парень. Помимо работы на различных должностях в киноиндустрии, Эндрю также имеет степень магистра звукового дизайна. Помимо работы с кино, Эндрю решил, что хочет стать еще и программистом, пройдя обучение в Lighthouse Labs. И если этого недостаточно, в настоящее время он работает над еженедельными хакерскими атаками MintBean.

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

План для бота Karma состоял в том, чтобы использовать базу данных Postgres на Heroku, в которой была бы одна таблица с двумя столбцами, о которых я заботился, столбцом с фразами и пунктами.

Причина использования Postgres вместо, скажем, sqlite, заключается в том, что у нас нет места для размещения файлов. Но мы можем получить размещенную базу данных. Работая с Postgres раньше, Postgres стал предпочтительной базой данных.

Идея проста: мы только добавляем имя пользователя (технически их UUID), слово или фразу в базу данных тогда и только тогда, когда их карма изменяется (например, кто-то набирает ++или -- сразу в конце имени / слова / фразы пользователя). В противном случае запись отсутствует, и мы будем обрабатывать несуществующие случаи в нашей бизнес-логике.

Конечно, это означает фактическое подключение к базе данных из нашего кода узла.

Был спор о том, какую библиотеку мы должны использовать для этой задачи. Мы остановились на Sequelize.

Я никогда не использовал Sequelize.

В мои намерения входило пройти это руководство не только о том, как работать с Sequelize, но и о том, как использовать Sequelize для подключения к базе данных Postgres, работающей на Herkou.

Но оказалось, что Эндрю уже работал с Sequelize во время своей курсовой работы в Lighthouse Labs. Конечно, это означало бы, что я не стал бы полагаться только на себя, и мне пришлось бы доверять кому-то другому. Я не хотел идти по этому пути, но у меня не было особого выбора, и я не мог преодолеть свой умственный блок, связанный с тем, сколько времени потребуется, чтобы изучить Sequelize.

Я рад сообщить, что вчера мы с Эндрю занимались парным программированием и смогли продемонстрировать возможность подключения к базе данных Heroku из Node через Sequelize.

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