Архив описаний прошлых летних школ

Летняя проектная онлайн-школа программирования для обучающихся СПбГУ (2021, онлайн).

Школа проводилась с 12-го июля по 6-е августа. 12 июля в 12:00 прошло открытие школы и презентация проектов. 6 августа были проведены презентации результатов проектов, подведение итогов и закрытие школы.

Проекты летней школы

HwProj 2

C# (и немного F#), ASP.NET Core, Entity Framework Core, TypeScript, React, RabbitMQ

Описание
Цель проекта — замена Blackboard или всяких гуглотаблиц для процесса поддержки обучения (сдачи домашек, выкладывания материалов пар, отслеживания статуса и т.п.). Также большая часть функциональности разрабатываемой системы направлена на автоматизацию работы с учебными практиками — сбор и выдача тем, отслеживание прогресса, поддержка рецензирования текстов, поддержка защит практик. Проект разрабатывается уже давно, кода написано довольно много, но всё ещё не было попыток его внедрения, потому что уж очень многое (особенно во фронтенде и интеграции фронтенда с бекендом) надо доделать. Задачей летней школы будет сделать и развернуть минимальную полезную версию к началу осеннего семестра.

Архитектурно проект представляет собой типичную современную информационную систему — микросервисная архитектура, микросервисы соединены шиной на RabbitMQ, взаимодействуют с фронтендом через шлюз на Ocelot (постепенно заменяем на Giraffe), каждый имеет свою БД. Фронтенд пишется на TypeScript с библиотеками React + MaterialUI.

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

Требования к кандидату

Навыки программирования под .NET, желательно владение веб-разработкой или большое желание её освоить. Приём в проект по собеседованию.

Руководители

Бережных Алексей Владимирович, Литвинов Юрий Викторович

Конструктор вычислителей

У нас есть две версии проекта, одна десктопная, другая веб. Они развиваются независимо, в рамках летней школы можно заняться той, что больше нравится. Десктопная: C#, WPF, GraphX Веб: TypeScript, React, Vis-Network.

Описание
Целью проекта является создание инструмента, иллюстрирующего различные вычислители, для использования его в учебном процессе на курсах “Программирование”, “Теория автоматов и формальных языков”, “Проектирование программного обеспечения”. Инструмент должен позволять преподавателю демонстрировать работу вычислителей, а студентам — экспериментировать с различными вычислителями, облегчать создание вычислителей, решающих конкретные задачи (например, автомата, разбирающего заданное регулярное выражение), в конечном итоге повышая уровень освоения материала.

Также возможно применение разрабатываемого ПО в промышленных проектах с целью быстрой разработки конечных автоматов и генерации по ним кода.

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

Подробное техническое задание: https://docs.google.com/document/d/1MG2lUpvM-c7l8idzfboZMIwJK24I4dQdTPD3zrPxhgU. На данный момент закончена Фаза 1 из ТЗ.
Репозиторий

Демо

Требования к кандидату

Желание разбираться в чужом коде и писать много своего. Технологиям научим.

Руководители

Плоскин Александр Евгеньевич (десктопная версия), Усманов Артур Радикович (веб-версия), Литвинов Юрий Викторович

Сайт кафедры системного программирования

Flask (Python), Sqlite, BootStrap

Описание
У кафедры системного программирования есть свой сайт. Еженедельно сайтом пользуются более 200 человек. Одним из востребованных функционалов на сайте является:
  • поиск по курсовым и дипломным работам (расширение функционала)
  • загрузка курсовых и дипломных работ (расширение функционала)
  • новостная лента (создание нового функционала)
Целью создания и расширения данного функционала является:
  • дать студентам возможность удобно искать курсовые и дипломные работы по темам, направлениям и преподавателям.
  • сообщать студентам о важных событиях на кафедре: (семинар кафедры, предзащиты и защиты, дедлайн подачи заявок на повышенные стипендии, информация по стажировкам и практикам и т.д.)
  • собрать в одном месте информацию о проектах кафедры, чтобы абитуриенты и студенты понимали, чем занимается кафедра.
  • Репозиторий

    Демо

    Требования к кандидату

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

    Руководители

    Зеленчук Илья Валерьевич - старший преподаватель кафедры системного программирования.

Теория формальных языков и линейная алгебра для анализа графов

Python, C/C++, OpenCL, Линейная алгебра, Теория графов, Теория формальных языков

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

Возможные задачи:
  1. Реализовать возможность добавления и загрузки графов в различных форматах (например в виде троек "вершина, метка, вершина") в CFPQ_Data.
  2. Провести экспериментальное сравнение существующих парсеров RDF (lightrdf, rdflib, raptor, redland-bindings). Интегрировать лучшие решения по парсингу и сериализации в CFPQ_Data.
  3. Реализовать алгоритм пересечения конечных автоматов через синхронный обход в ширину, добавить реализацию в CFPQ_PyAlgo
  4. Поддержать работу с виртуальной памятью в OpenCL в spbla
Репозиторий

Демо

Требования к кандидату

Отличное знание Python или С и соответствующего инстуентария (автоматизация тестирования, сборки, генерации документации и т.д.) Умение читать и понимать чужой код Умение модифицировать чужой код Умение оформлять репозитории проектов Отличное знание теории графов, линейной алгебры, теории формальных языков хотя бы на уровне дискретки и алгебры первого курса Приём в проект по собеседованию!

Руководители

Семён Вячеславович Григорьев - доцент кафедры информатики

Веб-система диагностики патологий по медицинским снимкам

Backend: Java, Spring Boot, Maven, PostgreSQL. Frontend: Javascript, React DevOps: Docker, AWS, TravisCI.

Описание
"Второе мнение" – распространенная во всем мире практика повторной консультации с медицинским специалистом по результатам проведенных анализов и исследований. Наш сервис позволяет пользователю произвести диагностику и получить "второе мнение" по его медицинским снимкам (МРТ, КТ, и др.)

Это можно сделать двумя способами:
  • выбрать подходящего врача и воспользоваться его услугами через наш сервис;
  • воспользоваться функцией автоматического анализа медицинских изображений данная функциональность реализована при помощи библиотеки MIRF, которая предоставляет возможность обрабатывать медицинские изображения, используя алгоритмы машинного обучения
Репозиторий

Требования к кандидату

Умение программировать на Java, желательны навыки в разработке веб-приложений

Руководители

Александра Алексеевна Швыркова, Ангелина Сергеевна Чижова, Юрий Викторович Литвинов

Cargotime — логистический портал

Широкий спектр возможных технологий в зависимости от задачи: Node.js, PHP, Swift, Wordpress, инструменты глубокого обучения и т.д.

Описание
Cargotime — большой проект, наработки по которому можно наблюдать по адресу: https://cargotime.ru/. Цель всего проекта — создание сервиса, объединяющего профессиональных логистов, крупных перевозчиков и частных клиентов в общем намерении взаимовыгодно сотрудничать друг с другом. Для этого на портале агрегированы различные логистические инструменты, такие как трекинг ISO-контейнеров, калькулятор оценки стоимости поездки на машине между двумя точками с учётом дозаправок и построением оптимального по цене маршрута, калькулятор стоимости доставки груза разными грузовыми компаниями, каталоги грузовых компаний и т.д. Целью летней школы является развитие существующего функционала сайта в одном из обозначенных ниже направлений.

Возможные задачи в рамках проекта:
  • Реализовать визуально красивое отображение пути ISO-контейнера по карте по заданным точкам. Построение пути по воде не реализуется большинством современных картографических сервисов;
  • Автоматизировать распознавание текстовых каптч;
  • Доработка существующего сервиса по расчету стоимости доставки: перевод на новый стек технологий (Node.js с PHP), увеличение быстродействия, размещение его в облаке;
  • Оптимизация алгоритма построения маршрута и оценки стоимости поездки на автомобиле;
  • Реализация удобного поиска по каталогам компаний грузоперевозчиков;
  • Приложение для Android/iOS с функциональностью трекинга IOS-контейнеров и возможностью подписываться на обновления в трекинге;
  • Приложение для Android/iOS для оценки стоимости пути на машине.
Преимущества:

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

Требования к кандидату

В рамках задачи с каптчами преимуществом будет знакомство с технологиями Deep Learning. Желание освоить что-то новое. Приём в проект по собеседованию.

Руководители

Максим Викторович Абрамов

Анализ результатов ЭКГ

Python, машинное обучение, анализ изображений

Описание
Целью проекта является реализация оценки клинического состояния пациента по данным его ЭКГ и анализов. Задача имеет высокую медицинскую значимость и широкий потенциал применения, проект выполняется совместно со Всероссийским центром экстренной и радиационной медицины имени А.М. Никифорова (ВЦЭРМ). На данный момент реализована первичная оценка состояния пациента по некоторым характеристикам его ЭКГ, а именно значениям интервалов RR и QT. Множество наборов данных с записями ЭКГ существуют только в бумажном виде, по таким записям значения интервалов RR и QT измеряются специалистами вручную с помощью линейки и карандаша, что имеет очевидные недостатки. Этот процесс хочется автоматизировать.

Конкретная задача в рамках проекта: автоматизация измерения значений интервалов RR и QT по графическому представлению ЭКГ.
Требования к кандидату

Знакомство с технологиями анализа изображений и Deep learning. Желание развиваться и осваивать новые технологии. Готовность самостоятельно искать пути решения поставленных задач. Приём в проект по собеседованию.

Руководители

Максим Викторович Абрамов

Анализ социальных сетей

Выбор языка возможен по согласованию, VK API.

Описание
Социальные сети на данный момент — богатейший источник данных о современном обществе, в котором можно найти отражение как характеристик отдельных пользователей, так и взаимодействия и особенностей различных сообществ. Анализ социальных сетей подразумевает сбор и работу с большими объемами выгруженных данных. «ВКонтакте» предлагает свой API, также существует множество библиотек для работы с ним, однако они не заточены непосредственно под сбор данных. В рамках летней школы предлагается реализовать программу для сбора информации о пользователях социальной сети «ВКонтакте».

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

Желание развиваться и осваивать новые технологии. Готовность самостоятельно искать пути решения поставленных задач. Приём в проект по собеседованию.

Руководители

Максим Викторович Абрамов

Система учёта научных публикаций

JavaScript, PHP.

Описание
В рамках работы научного сотрудника часто возникает необходимость составить список работ коллектива, соответствующий заданным критериям: за фиксированный период времени, определенной индексации, в определённом формате и т.д. Целью данного проекта является разработка страницы с информацией о публикациях коллектива, позволяющую удобную работу со списком. На данный момент основная функциональность реализована, но осталось много задач по фронтенду, в рамках летней школы предлагается довести проект для визуального и функционального идеала.
Требования к кандидату

Знакомство с технологиями фронтенда и желание развиваться в этом направлении. Желание осваивать новые технологии. Готовность самостоятельно искать пути решения поставленных задач. Приём в проект по собеседованию.

Руководители

Максим Викторович Абрамов

Twist-n-Sync

Нужно будет изучать код на Python, оформить его в формате библиотеки на C/С++, интегрировать библиотеку в Java под Android c использованием JNI. Чтобы это заработало и все было по красоте -- постичь азы кросс-платформенной сборки, подготовить тесты и настроить CI.

Описание
В основе проекта Twist-n-Sync лежит алгоритм синхронизации времени двух устройств с использованием MEMS-гироскопов, которые распространены как в обычных смартфонах, так и в робототехнических системах. Каждый гироскоп с некоторой частотой возвращает следующие измерения: угловые скорости по трем осям и временная метка (таймстемп) в системе времени устройства, в котором данный датчик находится. Если предположить, что два устройства с MEMS-гироскопами внутри неподвижны относительно друг друга (например, смартфоны сжаты в руке, две разные подсистемы жестко сцеплены на одном платформе), то при колебаниях (тряске) этой “сцепки” можно оценить смещение времени разных устройств относительно друг друга, анализируя данные с гироскопов. На данный момент реализован proof-of-concept вариант алгоритма, в котором данные со всех устройств отправляются на внешний сервер и обсчитываются с использованием Python-скрипта.

Проблема

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

Задачи

  • Реализовать данный алгоритм на C/С++, обосновать выбор библиотек для использования методов кросс-корреляции и интерполяции с использованием кубических сплайнов, которые есть в алгоритме.
  • Обеспечить проект тестами для демонстрации того, что результат на C/C++ реализации эквивалентен оригинальной реализации на Python.
  • Поддержать CI сборку и тестирование.
  • (Опционально) Перевести приложение Twist-n-Sync для Android с использования внешнего Python-сервера, на С/C++ реализацию алгоритма синхронизации на одном из смартфонов.
Репозиторий

Демо

Требования к кандидату

Основные: готовность и желание плотно поработать в течение следующего месяца. Дополнительные: знание чего-то из упомянутых технологий будет плюсом.

Руководители

Лаборатория мобильной робототехники, Сколтех. Корнилова Анастасия Валерьевна, Ахметьянов Азат Ришатович (студент ПИ 3 курс, можно расспрашивать про опыт работы в лаборатории, полученный в последний год)

Интеграция синхронизированной видеосъемки в OpenCamera Sensors

Java, Android, CI/CD

Описание
OpenCamera -- open-source приложение для Android, которое дает пользователю доступ к расширенным настройкам камеры и позволяет гибко их настраивать, что важно в исследовательских задачах для сбора данных, например, для разработки алгоритмов компьютерного зрения, где конечным пользователем является обладатель смартфона, например, создание 3D реконструкций, VR/AR алгоритмы. Проект OpenCamera Sensors возник в нашей лаборатории как расширение OpenCamera, дополняющее его функциональностью записи данных сенсоров (гироскоп, акселерометр, магнетометр) во время видеосъемки. Эта функциональность полезна в SLAM, 3D реконструкции, так как сенсоры предоставляют дополнительную информацию о перемещении устройства, что упрощает и ускоряет работу многих алгоритмов.

Проблема

Синхронизация видеосъемки на нескольких устройствах позволит расширить область применения приложения -- при съемке динамических сцен “соседние” кадры разных камер с большим смещением во времени могут заметно отличаться, поэтому в задачах связанных с multi-view системами применение несинхронизированных изображений и видео затруднено. Google Research предложили способ синхронизации фотосъемки для Android смартфонов, который затем был расширен на видеозапись в нашей лаборатории (приложение RecSync). Глобальная задача -- внедрение экспериментального приложения RecSync в OpenCamera Sensors, что позволит синхронизированно снимать видео + датчики с нескольких смартфонов.

Задачи

  • Внедрение упомянутого метода в OpenCamera Sensors
  • Обеспечение переносимости настроек камеры, заданных пользователем, на новый режим съемки
  • Разработка модификации UI для синхронизированной записи (добавить несколько настроек/кнопок, связанных с подготовительными шагами)
  • (Опционально) Добавление тестов для новой функциональности в CI
Репозиторий

Демо

Требования к кандидату

Основные: готовность и желание плотно поработать в течение следующего месяца. Дополнительные: базовое знание Android будет плюсом

Руководители

Лаборатория мобильной робототехники, Сколтех. Корнилова Анастасия Валерьевна, Ахметьянов Азат Ришатович

Desbordante

C++17, boost, googletest, cmake, linux и немного python

Описание
Desbordante -- система для высокопроизводительного поиска функциональных (и не только) зависимостей в таблицах. Функциональная зависимость может рассматриваться как некая закономерность, присутствующая в данных. Возможность автоматически находить подобные закономерности интересна прикладным ученым, которые обладают массивами данных. Найденные в них ФЗ позволяют формулировать гипотезы, касающиеся предметной области, или даже делать готовые выводы, производя новое научное знание.

“Игрушечный” пример: есть набор записей пациентов, где представлены результаты различных анализов и диагноз. ФЗ из столбцов X⊂R в столбец “Диагноз” говорит о том, что это заболевание можно определить с помощью проведения анализов, входящих в X.

Автоматический поиск ФЗ -- довольно трудоемкая задача: сейчас самый большой датасет, который проходит за разумное время -- около 70 MB, причем на серверном железе. Desbordante реализовывалась как альтернатива платформе Metanome -- проекте Hasso-Plattner-Institut (Германия). Metanome скорее является исследовательской платформой (написана на java), нежели индустриальным инструментом. На настоящий момент Desbordante опережает ее по скорости от 2 до 10 раз, в зависимости от алгоритма и таблицы.

На данной фазе мы практически закончили с реализацией базовых алгоритмов поиска ФЗ, и теперь нам интересно развитие “вширь”: добавление классов зависимостей, которых нет в Metanome, повышение удобства использования и так далее.

Задачи

В рамках школы, участникам проекта предлагаются следующие классы задач:
  1. (легко) Улучшение качества жизни: коннекторы на различные СУБД, поддержка дополнительных форматов данных, REPL, GUI, сделать докер образ, и т.д.
  2. (тяжело) Расширение набора поддерживаемых типов зависимостей (matching, differential, order, conditional, etc.) + ассоциативные правила?
  3. (тяжело) Desbordante-Server: распределенный поиск зависимостей Каждый выбирает себе задачу по силам и по интересу. Как познакомимся -- можно будет сформировать мини-команды, если будут такие желающие.
    Репозиторий

    Демо

    1. Хабр про поиск зависимостей
    2. Статья, где чуть более формально объясняется что такое зависимости
    3. Статья про Desbordante
    4. Статья про Relaxed зависимости
    5. Про проект Metanome

    Требования к кандидату

    Основные: интерес к проекту, желание и способность самостоятельно разбираться, умение формировать, обосновывать и реализовывать свое видение, умение хоть как-то программировать на C++. Желательно: способность прочитать научную статью на английском языке, умение программировать на современном C++.

    Руководители

    Чернышев Георгий (СПбГУ, Юнидата), Струтовский Максим (СПбГУ), Полынцов Михаил (СПбГУ), Щукин Илья (СПбГУ). Конференция в Discord: https://discord.gg/se9mV2p7, я chernishev#8836 Чернышев Георгий: chernishev@gmail.com, +7(905)258-02-79

REAL.NET

C#, ASP.NET.

Описание
REAL.NET -- среда визуального моделирования, которая, к тому же позволяет быстро создавать свои визуальные языки под конкретную задачу (то, что называется предметно-ориентированным моделированием). Например, языки для программирования различных роботов, для описания параллельной обработки данных и т.д. можно делать с помощью REAL.NET очень быстро, в итоге получая работающий редактор, возможность сохранения моделей и т.п.

Проект потихоньку развивается уже довольно давно, написан на C# и F#, имеет десктопную и веб-версии, микросервисную архитектуру. На летнюю школу выносится конкретно задача реализации микросервиса генерации. А именно, требуется разработать сервис, который будет принимать визуальную модель (на самом деле, сам запрашивать информацию о ней из репозитория с моделями) и генерировать по ней работающий код, документацию, что угодно. Поскольку для каждого языка генерация работает по-своему, потребуется реализовать механизм описания правил генерации (скорее всего, это будет движок генератора Razor, используемый в ASP.NET для генерации веб-страниц).
Репозиторий

Требования к кандидату

знание C#, некоторое представление о веб-программировании (знакомство с Razor будет большим плюсом).

Руководители

Михаил Владимирович Кидянкин, Юрий Викторович Литвинов