Привет, Хабр! Меня зовут Михаил Череповский, я руководитель олимпиадного направления VK. В рамках образовательных проектов VK Education мы активно сотрудничаем с Университетом Иннополис и Передовой инженерной школой вуза: реализуем учебные курсы, ведем разработки для развития IT-продуктов и сервисов, создаем инфраструктуру для учебы, а также проводим хакатоны для студентов. Результаты партнерства способствуют развитию IT-индустрии и технологий компании, а также привлекают в VK молодых и талантливых специалистов. 

Недавно завершился хакатон InnoGlobalHack для студентов 3-4 курсов, организованный VK Education и Университетом Иннополис. Друг с другом соревновались 46 команд из 15 городов, которые пробовали свои силы в решении задач, направленных на увеличение эффективности разработки ПО. 12 лучших команд разделили между собой призовой фонд в 600 тысяч рублей. В этой статье я хочу рассказать вам о некоторых интересных разработках, которые заняли первые места в своих треках.

Cистема автоматической агрегации задач на спринт

Команда «Городской конх»

Участники: Альметов Камиль, Хадиев Ильнур, Ковалёв Виктор, Исянбаев Нагим, Королёв Кирилл

Не всегда в проектах все ресурсы тратятся самым оптимальным образом. Накладки в расписании, неточные оценки трудозатрат могут снижать производительность труда и затягивать сроки разработки. Команда «Городской конх» разработала систему, которая на основе разных параметров и факторов автоматически выбирает наиболее оптимальное распределение задач в спринте. 

Для агрегации задач и их распределения между работниками ребята применили «генетический алгоритм». Он использует идею «отбора» и «скрещивания» лучших решений, чтобы создать новые и более подходящие для конкретной задачи. Алгоритм действует подобно тому, как природа отбирает лучшие адаптации в процессе эволюции. Это позволяет учитывать любые особенности команд и проектов, а также легко добавлять новые: можно выбирать определённых работников, их график и стек технологий, задавать сроки и списки задач.

Также команда придумала гибкую структуру бэкенда, с помощью которой можно быстро и просто внедрять новые системы управления, внося лишь небольшие изменения в код общения с API платформы: можно легко подключиться к GitLab Boards, GitHub Projects, Jira и т.д. Задачи между работниками распределяются автоматически прямо в системе управления проектами.

 В бэкенде Restfull API взаимодействует с абстрактным диспетчером и распределителем. Распределитель через диспетчера получает данные из системы управления проектами и передаёт их в генетический алгоритм для дальнейшей агрегации. Фронтенд сделан в виде Flutter-приложения.

Технологический стек:

  • FastAPI

  • Python

  • Flutter

Наша команда не впервые участвует в хакатонах, и вот на InnoGlobalHack у нас получилось одержать первую победу.

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

Спасибо большое команде организаторов за предоставленную возможность и за отличный хакатон!

Альметов Камиль

Разработка Dynamic git diff Web View

Команда DSC

Участники: Красильников Федор, Мотасим Бхуиян, Мохамед Ахмид Хамди Абделхамид, Мостафа Кира, Махмуд Мусатат. 

В этом треке нужно было сделать веб-приложение (серверную и клиентскую часть), которое динамически отображает отличия между двумя коммитами (или ветками) git-репозитория. Что означает «динамически»: когда пользователь листает страницу вниз и доходит до нижнего края отображаемых данных, приложение должно отправить запрос на сервер и получить следующую порцию. Diff должен быть удобочитаемым (не как raw patch diff) и подгружаться из репозитория, размещённого на том же хосте, что и северное приложение.

Команда DSC предложила решение, которое работало по такой схеме: 

Стек фронтенда:

  • HTML

  • CSS

  • Vue.js

Стек бэкенда:

  • Node.js

  • Docker

  • Bash

Для большинства из нас это был первый опыт участия в хакатоне. К тому же, мы попали не в самый простой для нас трек, поэтому поначалу не особо рассчитывали на победу. Но в какой-то момент решили попытаться и продемонстрировать всё, на что мы способны.

Хакатон прошел отлично: все хотели выложиться на 100%, и на протяжении всего соревнования (даже ночью) каждый уголок универа был занят разными командами. Советую собрать команду, на которую можно положиться и убедиться, что все участники готовы уделить хакатону все выходные ради достижения общего результата.

Фёдор Красильников

Разработка системы проверки подлинности изображения лица

Команда MISIShunters

Участники: Алиса Семёнова, Алина Бурыкина, Елизавета Борисенко. 

Сегодня во многих мобильных приложениях предлагают идентифицировать пользователей по лицам. Эту задачу уже можно считать решённой. Однако одной из актуальных задач остаётся обеспечение достоверности такой идентификации: необходимо отличить реальное лицо от статичных изображений (бумажных фотографий или снимков на экране) и трёхмерных масок. 

Девушки из MISIShunters создали сервис для проверки подлинности статичных изображений лиц. В его основе — модель машинного обучения. Получив на вход изображения, сервис по каждому отвечает, является ли это изображением авторизуемого пользователя. Перепробовали разные модели — MiniFASNetV1, MiniFASNetV2, MiniFASNetV1SE, MiniFASNetV2SE, MTCNN, InceptionResnetV1. 

В результате остановились на такой комбинации: 

Модели обучили примерно на 16 тыс. изображений размером 1281283. Использованы собственные фотографии авторов, картинки, собранные в интернете, и набор CelebA Spoof. Общее количество параметров — 4 567 682. 

Стек:

  • Python

  • Flask

  • Colab

  • Docker

  • React

  • Vite

Код решения можно посмотреть здесь.

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

Что касается самих соревнований, то наша команда уже третий год регулярно участвует в хакатонах, и за плечами уже немало опыта и побед. Но в этот раз мы решились на эксперимент: поработать не с классической продуктовой разработкой, которой мы обычно занимаемся, а взять задачу по машинному обучению (и к тому же втроём, хотя чаще всего мы выступаем впятером). За два дня мы практически не спали и делали всё возможное, чтобы довести своё решение и его презентацию до достойного уровня. Мы были довольны своей разработкой и тем, как представили её экспертам, а итоговый результат превзошёл все наши ожидания. 

Наверное, успешно выступать на хакатонах нам в первую очередь помогает опыт. У нас в команде достаточно чёткое разделение, кто какую часть работы может на себя взять и хорошо её выполнить, при этом на разных этапах мы спокойно можем друг другу помогать, подменять и поддерживать, а также решать возникающие по ходу вопросы. А ещё мы учимся вместе уже четвёртый год, так что хорошо знаем особенности характеров друг друга и кто в каких обстоятельствах может работать наиболее продуктивно и эффективно. Мы всегда знаем, что, кому бы какая часть задачи ни досталась, она будет сделана. Часто приходится в рамках хакатонов срочно изучать что-то новое и сразу же это использовать в разработке. Поэтому мы изначально отлично сработались и не планируем останавливаться на достигнутом :)

Алиса Семёнова

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

Комментарии (1)


  1. Algrinn
    08.11.2023 10:42
    +1

    Олимпиады это хорошо и правильно. Ну лучше всего объединять их с исследовательской работой, чтобы результаты олимпиады были интересны профессиональным программистам. Задачи на оптимизацию сервера, это интересно и полезно. Пример: я до сих пор не знаю, какая из технологий лучше всего подходит для Event-driven архитектуры на сокетах. Как лучше всего обрабатывать миллионы TCP подключений. Акторы? А может монады? А может корутины? А может быть нужно просто нормальный реактор на C++ написать? А какие есть уже существующие современные технологии и какие из них действительно хорошо работают, а какие не могут, несмотря на весь пиар вокруг них. Соревнования нейросетей, это тоже очень интересно и актуально, сейчас весь мир помешался на этих нейросетях и тут целое поле для исследований есть.