Подземелья, драконы и Telegram-бот
В ноябре в институте прикладных компьютерных наук ИТМО прошел хакатон DevDays, о результатах которого уже писали ранее. Теперь мы решили подробнее поговорить с победителями о работе над их проектами. Первая команда — Build & Roll — написала Telegram-бот для генерации персонажей в игре Dungeons & Dragons. В интервью студенты рассказали об особенностях работы над проектом, с какими сложностями они столкнулись и благодаря чему им удалось занять второе место.
Команда проекта
  • Иван Золотников
    teamlead, разработка логики генерации персонажа — «Инструменты разработки и анализа программ»
  • Иван Ступницкий
    разработка БД для хранения заклинаний и ее интеграция с логикой генерации персонажа — «Инструменты разработки и анализа программ»
  • Александр Крюков
    разработка и тестирование Telegram-бота — «Программное обеспечение высоконагруженных систем»
  • Иван Мякиньков
    разработка Telegram-бота, интеграция
    с логикой генерации персонажа —
    «Разработка программного обеспечения»
  • Матвей Багров
    поиск нейросетей для генерации текста
    и изображений, написание скриптов
    для взаимодействия с API —
    «Распределенные веб-сервисы»
— Как вам пришла идея проекта?

Иван Золотников
teamlead, разработка логики генерации персонажа
— На самом деле очень просто: когда на установочном собрании озвучивали темы, мне приглянулась идея про генератор персонажей для D&D [Dungeons & Dragons — настольная ролевая игра «Подземелья и драконы». — Прим. ред.]. Оказалось, что на эту идею набралось больше людей, чем нужно в одну команду, и мы сформировали свою. Мы решили сделать легкий и доступный инструмент для генерации персонажей, а другая команда начала работать над чем-то более сложным, но, на мой взгляд, менее интересным. Поскольку мы сделали ставку на доступность, стали разрабатывать Telegram-бот. Соответственно, писали все на Python. В результате получился сервис, который может сгенерировать полностью случайного персонажа или создать его на основании требований.
— Вы сразу решили взять на себя роль тимлида? Как распределялись другие роли в команде? Как вы чувствуете себя на позиции «главного»?

Иван Золотников
teamlead, разработка логики генерации персонажа
— Как-то получилось, что раз я предложил поделиться на две команды, то и стал тимлидом одной из них. Мне это было интересно, поэтому я быстро нашел еще пару крутых ребят и распределил задачи. В самом начале я спросил, кто что умеет и кто как видит проект, и раскидал задачи в зависимости от интересов и сильных сторон каждого. Мне, в принципе, нравится тимлидить, и я иногда это делаю на учебных проектах. Поэтому руководить командой было легко, и вроде даже все получили удовольствие.
— Иван, Александр, вы разрабатывали сам Telegram-бот. Это первый опыт подобной работы? Почему решили взять на себя эту роль?

Иван Мякиньков
разработка Telegram-бота, интеграция
с логикой генерации персонажа
— У меня был небольшой опыт разработки Telegram-ботов до хакатона. Их функциональность отличалась от той, которую мы в итоге реализовали, но имеющиеся навыки все же пригодились во время соревнования.

Разработка Telegram-бота — это отличная идея pet‑проекта на скорую руку для бэкендера: можно и базу подключить, и API реализовать, а тестирование в интерфейсе Telegram удобное и приятное. По этим же причинам мы решили сделать наш генератор персонажей именно в виде бота: хакатон длится всего несколько дней, и крайне желательно за это время довести проект до минимально жизнеспособного состояния. Раз так, мы сосредоточились на разработке внутренней логики, а затем обернули ее в готовый интерфейс.

Александр Крюков
разработка и тестирование Telegram-бота
— Для меня это тоже не первый опыт с Telegram-ботами. Именно поэтому я и взял на себя эту роль: и самому проще, и так от меня больше пользы.
— Члены вашей команды учатся на четырех разных программах института (да и вы — два разработчика бота — с двух разных программ). Как вам было взаимодействовать друг с другом, учитывая разный опыт и разные знания?

Иван Мякиньков
разработка Telegram-бота, интеграция
с логикой генерации персонажа
— Главное, что все мы умели говорить на одном языке — змеином [Python или «Питон». — Прим. ред.]. Полагаю, важным компонентом успеха стало грамотное распределение обязанностей: Иван Золотников — наш тимлид — придумал алгоритм генерации характеристик, Иван Ступницкий создал базу заклинаний, Матвей Багров подключил языковые модели. А мы с Александром Крюковым в итоге собрали все это воедино как «начинку» бота. Наши знания различались, но когда каждый занят тем, что лучше получается, это не проблема.
— Иван, разработкой базы данных и ее интеграцией с логикой генерации персонажа вы занимались в одиночку. Сложно ли работать одному, при этом понимая свою ответственность перед другими членами команды?

Иван Ступницкий
разработка БД для хранения заклинаний и ее интеграция с логикой генерации персонажа
— Конечно, когда работаешь один, чувство ответственности создает дополнительную нагрузку на исполнителя. Но я привык таким заниматься, так что не могу сказать, что мне было сильно тяжело. Хотя вспоминаю один момент, когда я был близок к состоянию паники: тогда уже прошла почти половина хакатона, а намеченных результатов я еще не достиг.
— С какими трудностями во время работы вы столкнулись?

Иван Ступницкий
разработка БД для хранения заклинаний и ее интеграция с логикой генерации персонажа
— Основная сложность, с которой я столкнулся — неправильная оценка объема работ на разных этапах. Изначально я разбил свою задачу на такие этапы:
1. продумывание логики хранения информации в базе данных;
2. парсинг необходимых данных с заранее подготовленных веб-ресурсов;
3. заполнение базы данных.

С первым этапом я справился в намеченные сроки, но вот со следующим уже пришлось повозиться, потому что подготовленный веб-ресурс динамично подгружал и удалял необходимую информацию. Таким образом, вместо привычного скачивания html-страницы и дальнейшего парсинга из нее, пришлось писать целый скрипт. Он эмулировал работу пользователя, который наводит мышку на заклинание, и сохранял промежуточную страницу каждые две секунды. Интеграция с учетом логики генерации персонажа прошла легко и быстро, так как тут я уже активно консультировался с тимлидом, который ее реализовал.

Александр Крюков
разработка и тестирование Telegram-бота
— Сложности, конечно, были, но не непосредственно в работе, а из-за самого формата хакатона, когда ты три дня посвящаешь только своей задаче. У меня последний день соревнования совпал с дедлайном по переезду из съемной квартиры — получилось весьма нервно.
— Сейчас ваш бот общается на английском. Чем это обусловлено: желанием охватить потенциально большую аудиторию или техническими моментами?

Матвей Багров
поиск нейросетей для генерации текста
и изображений, написание скриптов для взаимодействия с API
— Мы решили остановиться на английском языке, поскольку в D&D сообществе, как правило, в общении и во время игры используют английскую терминологию. Многие игровые понятия в принципе не переводятся на русский, в ходу у игроков либо иностранная терминология, либо сленговые транскрипции на уровне rogue — ро́га [один из классов персонажей. — Прим.ред.]. Расчет шел на то, что русскоязычная аудитория со всеми понятиями знакома. По этой причине основное взаимодействие с ботом на английском, а вот предыстория персонажа создается на русском языке. В будущем хотелось бы адаптировать всю терминологию для русскоязычного коммьюнити.
— Для вас это первый опыт участия в хакатоне? Как вы его оцениваете?

Иван Золотников
teamlead, разработка логики генерации персонажа
— Для меня это соревнование, к сожалению (или к счастью), — не первый опыт, и, кажется, не последний. Я достаточно активно участвовал в хакатонах в бакалавриате, поэтому примерно понимал, что там будет и чего ожидать. Этот вышел очень спокойным, участники команды спали по ночам и успели сделать все, что хотели, поэтому я оцениваю его как успешный. Тем более, мы заняли второе место с темой, от которой комиссия была очень далека.

Александр Крюков
разработка и тестирование Telegram-бота
— В DevDays — первый, в хакатонах вообще — нет. Все прошло гладко — к концу хака у нас был рабочий продукт, а это редкость.

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

Матвей Багров
поиск нейросетей для генерации текста
и изображений, написание скриптов для взаимодействия с API
— Это не первый мой опыт хакатона, я участвовал в похожих ивентах в ходе бакалавриата и еще в школе. Мне есть с чем сравнить, и в DevDays все было организовано очень хорошо. По началу только смутила методика предложения и выбора идей для проектов: каждому нужно было представить свою идею, но работать над ней дальше было необязательно.
— Чему вас научило участие в хакатоне?

Иван Мякиньков
разработка Telegram-бота, интеграция
с логикой генерации персонажа
— Для меня приятным открытием стало, что группа незнакомых людей с разным прошлым, некоторые из которых даже не знают, как выглядят остальные, может успешно объединиться и эффективно работать над общим делом. Нужно только, чтобы эти люди были ответственными, грамотно оценивали свои и коллективные ресурсы и возможности, а также чтобы имелась общая для всех мотивация прийти к цели. Тогда и сработаться несложно. Еще одно важное осознание: хорошо, когда работаешь над задачей не в одиночку. Александр намного опытнее — он сильно выручал, проверяя код и указывая на ошибки, которые не были для меня очевидными. Теперь я понимаю, почему парное программирование считается хорошей практикой.

Иван Ступницкий
разработка БД для хранения заклинаний и ее интеграция с логикой генерации персонажа
— До DevDays я ни разу не работал с веб-страницами и у меня почти не было опыта с базами данных. Я просто посчитал эти области интересными и захотел чуть поработать с ними. В остальном, не могу выделить, чему еще меня именно «научило» участие в хакатоне, но скажу, что практика и опыт тесной работы в команде, согласование всего со всеми в короткие сроки — определенно полезная вещь.

Матвей Багров
поиск нейросетей для генерации текста
и изображений, написание скриптов для взаимодействия с API
— Хакатон в очередной раз подчеркнул, что в командной работе, особенно в условиях сжатых сроков, софтскилы решают больше хардов. А еще важны мораль всей команды и заряженный тимлид.