![](https://habrastorage.org/getpro/habr/upload_files/991/d06/8f6/991d068f664a464e3911686e9b00a841.jpg)
Привет, Хабр! Меня зовут Михаил Череповский, я руководитель олимпиадного направления VK. В рамках образовательных проектов VK Education мы активно сотрудничаем с Университетом Иннополис и Передовой инженерной школой вуза: реализуем учебные курсы, ведем разработки для развития IT-продуктов и сервисов, создаем инфраструктуру для учебы, а также проводим хакатоны для студентов. Результаты партнерства способствуют развитию IT-индустрии и технологий компании, а также привлекают в VK молодых и талантливых специалистов.
Недавно завершился хакатон InnoGlobalHack для студентов 3-4 курсов, организованный VK Education и Университетом Иннополис. Друг с другом соревновались 46 команд из 15 городов, которые пробовали свои силы в решении задач, направленных на увеличение эффективности разработки ПО. 12 лучших команд разделили между собой призовой фонд в 600 тысяч рублей. В этой статье я хочу рассказать вам о некоторых интересных разработках, которые заняли первые места в своих треках.
![](https://habrastorage.org/getpro/habr/upload_files/2f4/a8b/df8/2f4a8bdf8b087ea272dc08bf852f1e63.jpg)
Cистема автоматической агрегации задач на спринт
Команда «Городской конх»
Участники: Альметов Камиль, Хадиев Ильнур, Ковалёв Виктор, Исянбаев Нагим, Королёв Кирилл
![](https://habrastorage.org/getpro/habr/upload_files/06a/574/a25/06a574a25faf2c392477918d50fe6cfc.jpg)
Не всегда в проектах все ресурсы тратятся самым оптимальным образом. Накладки в расписании, неточные оценки трудозатрат могут снижать производительность труда и затягивать сроки разработки. Команда «Городской конх» разработала систему, которая на основе разных параметров и факторов автоматически выбирает наиболее оптимальное распределение задач в спринте.
Для агрегации задач и их распределения между работниками ребята применили «генетический алгоритм». Он использует идею «отбора» и «скрещивания» лучших решений, чтобы создать новые и более подходящие для конкретной задачи. Алгоритм действует подобно тому, как природа отбирает лучшие адаптации в процессе эволюции. Это позволяет учитывать любые особенности команд и проектов, а также легко добавлять новые: можно выбирать определённых работников, их график и стек технологий, задавать сроки и списки задач.
Также команда придумала гибкую структуру бэкенда, с помощью которой можно быстро и просто внедрять новые системы управления, внося лишь небольшие изменения в код общения с API платформы: можно легко подключиться к GitLab Boards, GitHub Projects, Jira и т.д. Задачи между работниками распределяются автоматически прямо в системе управления проектами.
В бэкенде Restfull API взаимодействует с абстрактным диспетчером и распределителем. Распределитель через диспетчера получает данные из системы управления проектами и передаёт их в генетический алгоритм для дальнейшей агрегации. Фронтенд сделан в виде Flutter-приложения.
Технологический стек:
FastAPI
Python
Flutter
Наша команда не впервые участвует в хакатонах, и вот на InnoGlobalHack у нас получилось одержать первую победу.
Хакатон запомнился интересными задачами и своей атмосферой. Надеюсь, он будет проводиться снова, мы бы с удовольствием приняли участие. Каждый хакатон, будь то победа или нет, приносит нашей команде новый опыт. Мы каждый раз стараемся анализировать, что мы сделали хорошо, а что могли бы улучшить. Всем, кто хотел бы побеждать в хакатонах, могу сказать, что чем чаще вы участвуете, тем лучше у вас получается. Поэтому дерзайте, и у вас обязательно получится! Не сосредотачивайтесь только на написании кода, презентация решения играет ключевую роль в победе.
Спасибо большое команде организаторов за предоставленную возможность и за отличный хакатон!
Альметов Камиль
Разработка Dynamic git diff Web View
Команда DSC
Участники: Красильников Федор, Мотасим Бхуиян, Мохамед Ахмид Хамди Абделхамид, Мостафа Кира, Махмуд Мусатат.
![](https://habrastorage.org/getpro/habr/upload_files/c0b/416/6e6/c0b4166e6c75861bc7a17f9a5f0069c5.jpg)
В этом треке нужно было сделать веб-приложение (серверную и клиентскую часть), которое динамически отображает отличия между двумя коммитами (или ветками) git-репозитория. Что означает «динамически»: когда пользователь листает страницу вниз и доходит до нижнего края отображаемых данных, приложение должно отправить запрос на сервер и получить следующую порцию. Diff должен быть удобочитаемым (не как raw patch diff) и подгружаться из репозитория, размещённого на том же хосте, что и северное приложение.
Команда DSC предложила решение, которое работало по такой схеме:
![](https://habrastorage.org/getpro/habr/upload_files/523/540/0b8/5235400b822b69bbb6a0661408f913b4.png)
Стек фронтенда:
HTML
CSS
Vue.js
Стек бэкенда:
Node.js
Docker
Bash
Для большинства из нас это был первый опыт участия в хакатоне. К тому же, мы попали не в самый простой для нас трек, поэтому поначалу не особо рассчитывали на победу. Но в какой-то момент решили попытаться и продемонстрировать всё, на что мы способны.
Хакатон прошел отлично: все хотели выложиться на 100%, и на протяжении всего соревнования (даже ночью) каждый уголок универа был занят разными командами. Советую собрать команду, на которую можно положиться и убедиться, что все участники готовы уделить хакатону все выходные ради достижения общего результата.
Фёдор Красильников
Разработка системы проверки подлинности изображения лица
Команда MISIShunters
Участники: Алиса Семёнова, Алина Бурыкина, Елизавета Борисенко.
![](https://habrastorage.org/getpro/habr/upload_files/bc5/92a/767/bc592a767112f4cfa69f06d56c2fc363.jpg)
Сегодня во многих мобильных приложениях предлагают идентифицировать пользователей по лицам. Эту задачу уже можно считать решённой. Однако одной из актуальных задач остаётся обеспечение достоверности такой идентификации: необходимо отличить реальное лицо от статичных изображений (бумажных фотографий или снимков на экране) и трёхмерных масок.
Девушки из MISIShunters создали сервис для проверки подлинности статичных изображений лиц. В его основе — модель машинного обучения. Получив на вход изображения, сервис по каждому отвечает, является ли это изображением авторизуемого пользователя. Перепробовали разные модели — MiniFASNetV1, MiniFASNetV2, MiniFASNetV1SE, MiniFASNetV2SE, MTCNN, InceptionResnetV1.
В результате остановились на такой комбинации:
![](https://habrastorage.org/getpro/habr/upload_files/5ef/bd0/785/5efbd0785ce69976f4f8fe30202f8a2f.png)
Модели обучили примерно на 16 тыс. изображений размером 1281283. Использованы собственные фотографии авторов, картинки, собранные в интернете, и набор CelebA Spoof. Общее количество параметров — 4 567 682.
![](https://habrastorage.org/getpro/habr/upload_files/887/b91/fc2/887b91fc255ca7d9135e9f5a96ce16e6.png)
Стек:
Python
Flask
Colab
Docker
React
Vite
Код решения можно посмотреть здесь.
С хакатона мы увезли массу положительных эмоций, связанных не только с первым местом. Нас очень порадовала организационная составляющая, мы два дня провели в очень комфортных условиях. Даже успели погулять по Казани и Иннополису.
Что касается самих соревнований, то наша команда уже третий год регулярно участвует в хакатонах, и за плечами уже немало опыта и побед. Но в этот раз мы решились на эксперимент: поработать не с классической продуктовой разработкой, которой мы обычно занимаемся, а взять задачу по машинному обучению (и к тому же втроём, хотя чаще всего мы выступаем впятером). За два дня мы практически не спали и делали всё возможное, чтобы довести своё решение и его презентацию до достойного уровня. Мы были довольны своей разработкой и тем, как представили её экспертам, а итоговый результат превзошёл все наши ожидания.
Наверное, успешно выступать на хакатонах нам в первую очередь помогает опыт. У нас в команде достаточно чёткое разделение, кто какую часть работы может на себя взять и хорошо её выполнить, при этом на разных этапах мы спокойно можем друг другу помогать, подменять и поддерживать, а также решать возникающие по ходу вопросы. А ещё мы учимся вместе уже четвёртый год, так что хорошо знаем особенности характеров друг друга и кто в каких обстоятельствах может работать наиболее продуктивно и эффективно. Мы всегда знаем, что, кому бы какая часть задачи ни досталась, она будет сделана. Часто приходится в рамках хакатонов срочно изучать что-то новое и сразу же это использовать в разработке. Поэтому мы изначально отлично сработались и не планируем останавливаться на достигнутом :)
Алиса Семёнова
Все участники хакатона смогут добавить интересные кейсы в свое портфолио, а победители также получили персональные консультации с экспертами VK. Пишите в комментариях, какие разработки вам показались самыми интересными и задавайте вопросы.
Algrinn
Олимпиады это хорошо и правильно. Ну лучше всего объединять их с исследовательской работой, чтобы результаты олимпиады были интересны профессиональным программистам. Задачи на оптимизацию сервера, это интересно и полезно. Пример: я до сих пор не знаю, какая из технологий лучше всего подходит для Event-driven архитектуры на сокетах. Как лучше всего обрабатывать миллионы TCP подключений. Акторы? А может монады? А может корутины? А может быть нужно просто нормальный реактор на C++ написать? А какие есть уже существующие современные технологии и какие из них действительно хорошо работают, а какие не могут, несмотря на весь пиар вокруг них. Соревнования нейросетей, это тоже очень интересно и актуально, сейчас весь мир помешался на этих нейросетях и тут целое поле для исследований есть.