/DEV
/Days
Fall 2023
Хакатон DevDays — давняя традиция корпоративной магистратуры компании «Газпром нефть» «Разработка программного обеспечения». А в этом учебном году в нем смогли принять участие еще три корпоративных программы нашего института: «Программное обеспечение высоконагруженных систем» (Яндекс), «Распределенные веб-сервисы» (VK Education) и «Инструменты разработки и анализа программ» (YADRO).

104 студента в 23 командах представили проекты в таких областях, как машинное обучение, генеративные сети, рекомендательные системы, финтех, компиляторы и среды разработки, мобильные помощники.

Мы поговорили с тимлидами команд-победителей и узнали, как был устроен хакатон, с какими трудностями сталкивались ребята и чему смогли научиться.
I место
Бот — «Система для тестирования биржевых алгоритмов»
  • Алексей Хамицевич
    тимлид проекта, студент «Разработки программного обеспечения»
Последние несколько лет я разрабатывал свою систему для управления портфелем инвестиций и в процессе столкнулся со сложностью тестирования биржевых алгоритмов. Как оказалось, с ней сталкивался не только я. Так я и решил, что на хакатоне хочу работать именно над этой задачей. Парадоксально, но сформулировать ее оказалось непросто, но за пару дней у меня получилось, а презентация сразу привлекла несколько кандидатов в команду.
Суть нашего проекта заключалась в том, чтобы упростить и сократить время на тестирование биржевых стратегий для конечного пользователя, а в дальнейшем — сделать инструменты для упрощения стратегий разработки.

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

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

Для меня это не первый хакатон, ранее я участвовал в создании программы для работы 3D-принтера, но в прошлый раз я работал без команды. На DevDays я получил очень интересный командный опыт и познакомился с большим количеством людей с других направлений, которые тоже заинтересованы в разработке. На этом хакатоне я научился правильно расставлять приоритеты: мы смогли сконцентрироваться и сделать только то, что нужно было для победы, не отвлекаясь на оверкилл фичи.

Репозиторий
Бот Wakabi
  • Даниил Манаковский
    тимлид проекта, студент «Программного обеспечения и высоконагруженных систем»
Выбор проекта для меня был непростым: сначала я хотел попасть в одну из команд, которые работали над разбиением счетов, но оказалось, что мы по разному видим сам этот процесс. В итоге я решил работать в команде, которая разрабатывала бот для изучения иностранных языков, потому что помимо всего прочего мне было интересно поискать полезные инструменты для личной языковой практики.

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

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

Для меня это далеко не первый хакатон: еще в бакалавриате мы с друзьями победили в bizhack. siberia и стали финалистами VK Hackathon 2019. Я участвовал онлайн и параллельно работал, поэтому не смог почувствовать дух хакатона в полной мере, но, судя по общему чату, офлайн в Петербурге было весело. А еще я в восторге от отзывчивости организаторов в плане технической поддержки: я пытался сам распарсить датасет английских слов, на что мне не хватило вычислительных ресурсов, а они оперативно поделились университетскими на время хакатона.

Самое важное, чему я научился на этом хакатоне, — следить за прогрессом в распределенной команде. Каждый из нас работал в удобное для него время, учитывая загруженность на работе и привычки, но мы все равно смогли создать классный проект. И это круто!

Репозиторий
Проект VSCode Keypromoter plugin
  • Даниил Бакин
    тимлид проекта, студент «Инструментов разработки и анализа программ»
Я давно хотел сделать плагин, который бы обучал сочетаниям клавиш при работе в VSCode, и хакатон предоставил мне такую возможность.

Работу в команде мы организовали следующим образом: я декомпозировал задачи, а ребята сами разбирали и реализовывали то, что им интересно. Каждый день мы устраивали созвон по прогрессу и общим вопросам. Я также вносил предложения по улучшению и исправлению ошибок на GitHub, т.к. у меня уже был опыт разработки плагинов для VSCode.

В итоге нам удалось реализовать MVP и выпустить плагин в маркет, где он уже имеет более 900 загрузок. Его основная функция — обучать шорткатам в VSCode: если пользователь делает что-то мышкой, мы периодически напоминаем ему, что он мог сделать то же самое, только быстрее, при помощи сочетания клавиш. Раньше такого плагина не было, а он существенно ускоряет работу в IDE и в целом повышает квалификацию программиста.

DevDays мне очень понравился: я смог реализовать давнюю идею, поборол страх делегировать ответственность за задачи и научился доверять людям.

Репозиторий
II место
Бот «Друг-крыса»
  • Андрей Перевощиков
    тимлид проекта, студент «Программного обеспечения и высоконагруженных систем»
Мы рассматривали две основные идеи ботов: один должен был собирать всю информацию о человеке и составлять на ее основе токсичные комментарии, а второй — следить за активностью друзей в игре и в случае, если играют неполным составом, писать токсичные комментарии. В процессе обсуждения мы остановились на втором варианте, т.к. она показалась нам наиболее интересной и реализуемой.

Часть нашей команды уже работала вместе, поэтому я точно знал, у кого какой опыт, и кто может взять на себя определенные задачи. К тому же, для меня это далеко не первый хакатон, так что работу удалось организовать максимально эффективно. Мы создали чат в Telegram и там все распределили.

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

Репозиторий Telegram бота
Репозиторий Backend’а
Приложение «Разделяй и плати»
  • Тимофей Плетнев
    тимлид проекта, студент «Инструментов разработки и анализа программ»
Мы очень часто собираемся большой компанией, чтобы вместе провести вечер, и чаще всего за еду и напитки платит кто-то один. А потом начинаются сложности с тем, чтобы вручную посчитать сумму, которую каждый должен перевести платившему. Поэтому на хакатоне мы, не раздумывая, взялись за решение этой проблемы.

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

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

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

Репозиторий
Бот «Где бы поесть»
  • Михаил Еленский
    тимлид проекта, студент «Программного обеспечения и высоконагруженных систем»
Изначально мы думали работать над проектом по поиску похожих заведений на карте, но в какой-то момент мой друг предложил попробовать сделать бот с поиском на естественном языке. С командой мы решили, что это удачная идея и приступили к реализации.

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

Нам удалось разработать рекомендательную систему в виде бота, в котором можно искать заведения в городе по запросу на естественном языке. Например, можно написать боту: «Хочу вкусных немецких колбасок» — а он в ответ пришлет список из пяти подходящих мест с геометкой, нажав на которую, можно построить маршрут. Все предложения формируются на основе отзывов с Яндекс Карт.

Мы успели реализовать baseline-решение на основе семантического поиска в качестве proof-of-concept. Были планы сделать fine-tuning эмбеддинговой модели и провести полноценное сравнение, но мы не успевали, поэтому сконцентрировались на реализации базового решения как отправной точки.

Этот хакатон оставил после себя только хорошие впечатления: мне удалось переключиться с учебной и рабочей рутины, получилось сделать семантический поиск и весело провести время. Самое ценное, что я вынес с DevDays — это хоть и небольшой, но опыт управления командой.

Репозиторий
III место
Проект «Планировщик домашек для студентов»
  • Андрей Богданов
    тимлид проекта, студент «Разработки программного обеспечения»
Идея этого проекта вдохновлена буднями студента, в которых много домашних заданий и дедлайнов, держать в голове которые достаточно сложно. Мы разработали сервис, позволяющий преподавателям или инициативным студентам вести канал по предмету и выкладывать на нем домашние задания с примерной оценкой времени для их выполнения и приоритезацией.

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

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

Репозиторий
Плагин Control Fun Graph
  • Евгений Букреев
    тимлид проекта, студент «Инструментов разработки и анализа программ»
На нашей программе мы уже познакомились с различными представлениями программного кода, которые используются при статистическом анализе. Однако часто по коду не сразу понятно, в какой последовательности он будет выполнятся, или необходимо разобраться в коде, который написан на незнакомом вам языке. И я решил, что было бы удобно строить представления прямо из IDE для лучшего понимания программ.

Так мы с командой решили разработать плагин для IDE на базе платформы IntelliJ, который позволяет визуализировать поведение программ в виде графа потока управления.

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

В результате у нас получился прототип, который позволяет строить графы для Kotlin, Rust, JavaScript и С#. А при перемещении курсора внутри функции на графе выделяются соответствующие узлы. Также в плагине есть возможность просмотреть все пути, которые ведут к выбранному в данный момент узлу из начала функции.

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

Репозиторий