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

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

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

Реализовать полнотекстовый поиск по учебным практикам и ВКР

Python, Flask, PDF, HTML/CSS

Описание

На сайте кафедры Системного программирования есть архив учебных практик и ВКР (бакалаврские и магистерские) с 2007 по 2021 год. Многие работы загружены в виде PDF документа.

На текущий момент поиск выполняется по ФИО автора и названию работы.

Необходимо реализовать полнотекстовый поиск по всему тексту работы. В результате поиска необходимо выводить сниппет.

Репозиторий

Демо

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

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

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

Зеленчук Илья Валерьевич

MIRF

JavaScript, React, Java, Kotlin, Docker, Spring Boot

Описание

Medical Images Research Framework — это библиотека для автоматической обработки медицинских данных, таких как МРТ- и КТ-снимки. В летней школе, однако, предлагается позаниматься веб-приложением для получения второго мнения, которое позволяет пациентам общаться с врачами и использует MIRF для помощи первым и вторым. Приложение начинали писать в прошлогодней летней школе, сейчас есть много не очень больших задач по его доработке.

Репозиторий

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

Желание позаниматься веб-разработкой в существующем проекте. В технологиях можно будет разобраться по ходу.

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

Латохин Святослав Алексеевич, Шеремет Ирина Дмитриевна, Шехаде Даниэль, Чижова Ангелина Сергеевна, научный руководитель — Литвинов Юрий Викторович

Дружим с RISC-V

RISC-V, ассемблер.

Описание

В последнее время набирает популярность открытая архитектура RISC-V. Компиляторы располагают приемлемой поддержкой этой архитектуры, однако для специализированных приложений этого недостаточно. Например, такие проекты как gmp, mpfr, crypto реализуют критические участки кода на ассемблере целевой архитектуры. Предлагается задача анализа приложений с открытым исходным кодом и составления списка таких проектов. Далее, выбрать наиболее понравившийся проект и добавить в него поддержку RISC-V. Проверка будет либо на "живой" плате, либо на qemu.

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

Знакомство с ассемблером хотя бы одной архитектуры, знакомство с qemu, желательно знание основ постановки экспериментов.

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

Смирнов Кирилл Константинович, Кириленко Яков Александрович

Технологии встраиваемых систем (Задача 1: рефакторинг DSP модулей)

TI DSP

Описание

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

Задача 1: рефакторинг DSP модулей Для обработки видео в проекте TRIK используются модули для специализированного процессора DSP. Модули справляются со своими задачами хорошо, но можно сделать еще лучше. В качестве задачи предлагается изучить фреймворк XDC от Texas Instruments для создания приложений для DSP и улучшить существующие модули. В частности, нет нужды иметь два разных модуля, которые отличаются всего лишь форматом изображения, имеет смысл "слить" их в один.

Репозиторий

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

Владение C/C++

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

Кириленко Яков Александрович, Смирнов Кирилл Константинович

Технологии встраиваемых систем (Задача 2: машинное обучение в embedded)

Встраиваемый Linux, edge device inference, TFLite, MS Lobe.

Описание

Машинное обучение проникло во встраиваемые системы. Не всегда хватает ресурсов обучать нейронку на маломощном устройстве, но есть и такие подзадачи. Мы же сосредоточимся на том, что называется “Edge Device Inference”. Обученную модель импортируют на относительно слабое устройство, которое будет заниматься исключительно распознаванием. Такой подход позволяет не передавать данные пользователя в облако, а для устройств без постоянной связи позволяет использовать возможности нейронных сеток.

В качестве учебной, но полезной прикладной задачи предлагается развернуть на ТРИК модель, предварительно обученную в системе MS Lobe.

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

Владение C/C++

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

Кириленко Яков Александрович, Смирнов Кирилл Константинович

Технологии встраиваемых систем (Задача 3: сборка, загрузка и юзабилити)

Кросс-сборка, встраиваемый Linux, WiFi, управление конфигурациями

Описание

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

Репозиторий

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

Знакомство с Linux. Желательно поверхностное знакомство с различными init и busybox.

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

Кириленко Яков Александрович, Смирнов Кирилл Константинович

Технологии встраиваемых систем (Задача 4: умный дом)

Встраиваемый Linux, умный дом.

Описание

В “умных домах” естественным образом возникают встраиваемые системы. В этом разделе предлагается познакомиться с техническими внутренностями (протоколами, библиотеками и так далее) того мира, который простые пользователи называют "умным домом". Есть шанс изучить всё как со стороны примитивного конечного устройства, так и со стороны контроллера. Можно “скрестить” Яндекс Алису с ТРИКом: пусть включает моторчик, моргает лампочкой и делает вид, что оно умный сенсор или лампа. С другой стороны, научить ТРИК управлять умными розетками.

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

Linux

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

Кириленко Яков Александрович, Смирнов Кирилл Константинович

Технологии встраиваемых систем (Задача 5: обработка изображений и DSP)

Кросс-сборка, TI DSP, Qt, Video4Linux2

Описание

Важной частью проекта является видеоподсистема, включающая в себя обработку изображений с различных камер в разных форматах. В рамках этой подсистемы вы узнаете, как в Linux поддерживается мультимедиа (V4L2), как изображения представляются в памяти компьютера и почему это бывает больно. Предлагаются задачи по добавлению поддержки формата NV16 в драйвер ядра, в DSP модули и в Qt.

Репозиторий

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

Знакомство с Linux, базовое владение C и C++. Желательно поверхностное знакомство с форматами изображений.

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

Кириленко Яков Александрович, Смирнов Кирилл Константинович

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

Kotlin, JavaFX, TornadoFX, JUnit 5

Описание

Конструктор вычислителей — это кафедральный проект по разработке симулятора разных видов конечных автоматов, машин Тьюринга и т.п. для нужд прежде всего образования. Разные автоматы встречаются в курсах на матмехе довольно часто, а показывать, как всё работает, приходится на доске. Конструктор вычислителей пишут уже больше года, есть десктопная версия (на Kotlin) и веб-версия (на TypeScript). В летней школе предлагается поработать именно над десктопной версией, довести её до релиза и внедрения. Задачами, в частности, будут:

  • создание вычислителей по их описанию на формальном языке (регулярным выражениям, КС-грамматикам);
  • преобразование вычислителей из одного вида в другой (например, НКА в ДКА)
  • разные задачи по UI, типа копирования и вставки, локализации и т.п.

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

Репозиторий

https://github.com/spbu-se/KotlinAutomataConstructor (там есть и демо его работы).

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

Иметь опыт работы на Kotlin или большое желание его изучить, JavaFX будет плюсом. Про автоматы знать не надо.

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

Илья Муравьев (tg: @ilyamuravjov), научный руководитель — Литвинов Юрий Викторович

Построение ground truth data и анализ KPI системы дополненной реальности для автомобилей

C++, opencv

Описание

ADAS — система дополненной реальности для помощи водителя на дороге, в которой используются различные сенсоры для моделирования окружающего мира, в том числе камера. Среди функций ADAS предупреждение о покидании полосы, предупреждение о столкновении, дополненная навигация и прочие. Для тестирования оценки качества работы ADAS необходимо иметь ground truth data (идеальный выход алгоритмов) полос движения, автомобилей, пешеходов, направления дороги и прочее. Однако, ручная разметка ground truth data — очень долгий процесс, к тому же не всегда точный из-за человеческого фактора. В рамках данного проекта предлагается автоматизировать процесс создания ground truth data, а также заняться анализом метрик тестирования ADAS.

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

C++

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

Мария Сергеевна Осечкина, osechkina.masha@gmail.com

Введение в современное веб-программирование

C++, Python

Описание

В прошлом году наша команда на школе вела проект Desbordante, в рамках которого участники занимались разработкой веб-фронтенда для самого высокопроизводительного open-source профайлера данных в мире. Вдохновленные прошлыми результатами, мы захотели повторить успех и в этом году тоже. Однако, возникли проблемы: за прошедший год проект усложнился настолько, что за три недели школы нет никакой возможности сделать в нем что-либо осмысленное :(

Поэтому в этом году мы решили провести полностью учебную дорожку. На ней мы просто поучим всех желающих писать веб-приложения, дадим базовые знания, которые потом при желании можно будет развить (для чего мы тоже дадим площадку). Наш курс посвящен React и NodeJS, программа есть тут. Мы будем давать задания и смотреть ваши пулл-реквесты. Настоящих лекций будет мало, но мы дадим материалы и будем регулярно проводить Q&A сессии. Задания будут как индивидуальные, так и групповые. Чтобы было интересно, задания будут оцениваться в баллах, это отразится на сертификате. Еще возможен теорзачет. Так как у нас именно учебная дорожка, то участия в “защитах” проектов не предполагается.

Программа рассчитана на людей “с нуля”, но мы можем ее адаптировать и под более высокий уровень, если придут не новички. По количеству мест: мы не знаем насколько это всё будет интересно людям и сколько к нам придут. До девяти человек должно быть без проблем, если будет больше — мы можем устроить отбор.

Дорожка поддерживается компанией Unidata, дошедшие до конца получат сертификаты от компании и попадут “на карандаш” отделу кадров (в хорошем смысле). Кроме того, лучших позовем в Desbordante и MAP — open-source проекты, которые позволят вам закрепить полученные навыки в серьезном проекте и начать собирать портфолио проектов.

Репозиторий

Демо

Что у нас по итогам школы получилось в прошлом году

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

C++, Python

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

Дорожку ведут: Антон Чижов (СПбГУ), Владислав Макеев (СПбГУ), Георгий Чернышев (СПбГУ, Юнидата).

Planar SLAM (Task 1 (1 student). Plane extraction - CAPE)

Python, C++, Docker

Описание

Planes are basic primitives in man-made environments that could be extracted from 3D data (LiDARs, depth cameras). Those primitives can serve as landmarks in SLAM for localization and mapping of autonomous systems (self-driving cars, indoor robots – service robots, warehouse robots). Planar SLAM project is devoted to research on these primitives in two directions: (1) develop methods for plane extraction from heterogeneous sensors and (2) elaborate on how those primitives could be used in SLAM backend.

To get intuition on SLAM and its application in robotics: https://ieeexplore.ieee.org/document/7747236

Current state: we have a benchmark of existing plane extraction approaches for depth camera and LiDAR, that includes labeled dataset, metrics, performance evaluation of existing methods for plane extraction. We have also shown the possibility of a full SLAM pipeline with best of these plane extraction algorithms on synthetic data using SLAM backend solution implemented in mrob. As a result of our previous work we have a repository with well-prepared docker images for fast and convenient usage of these algorithms. As a next step we need a close look at the top 3 algorithms for possible optimizations and fine-tuning of them for real SLAM data.

Form for candidates:  https://docs.google.com/forms/d/e/1FAIpQLSdd7QJShj0fFqBsEfMvB1M2gmzfXZO3-bqn6KcgnKee8xWySA/viewform

Task 1 (1 student). Plane extraction - CAPE The task is to carefully review paper and existing implementation of the plane extraction algorithm called CAPE and adopt it for the real SLAM pipeline based on data from TUM RGB-D and ICL NUIM datasets.That includes the next subtasks:

  1. Review paper about the algorithm
  2. Run existing implementation
  3. Fine tune and optimize algorithm for evaluation on real data
  4. Measure quality of the result in the SLAM pipeline with common metrics

Репозиторий

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

experience with any mentioned technologies will be a great bonus, but we don't expect that students should have a strong background in them, the most important thing is to be open to work intensely and hard, and don't be scared a lot from math.

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

Anastasiia Kornilova (Mobile Robotics Lab, Skoltech), Dmitrii Iarosh (SPBU), Arthur Saliou (SPBU)

Planar SLAM (Task 2 (1 student). Plane extraction - PEAC)

Python, C++, Docker

Описание

The task is to carefully review paper and existing implementation of the plane extraction algorithm called PEAC and adopt it for the real SLAM pipeline based on data from TUM RGB-D and ICL NUIM datasets.

That includes the next subtasks:

  1. Review paper about the algorithm
  2. Run existing implementation
  3. Fine tune and optimize algorithm for evaluation on real data
  4. Measure quality of the result in the SLAM pipeline with common metrics

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

experience with any mentioned technologies will be a great bonus, but we don't expect that students should have a strong background in them, the most important thing is to be open to work intensely and hard, and don't be scared a lot from math.

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

Anastasiia Kornilova (Mobile Robotics Lab, Skoltech), Dmitrii Iarosh (SPBU), Arthur Saliou (SPBU)

Planar SLAM (Task 3 (1-2 students). Plane association: methods comparison)

Python

Описание

The important intermediate step between plane extraction and SLAM backend execution is plane association. It is a process of matching planes with themselves in different frames of the sequence. There are several known methods for this task which are used in real SLAM algorithms like https://arxiv.org/pdf/2203.02882.pdf, https://www.cs.cmu.edu/~kaess/pub/Yang16iros.pdf, http://www.stefanorosa.it/preprints/ias2013-87.pdf. The task is to implement them as a convenient instrument for plane processing and measure the quality of these algorithms on real SLAM data.

That includes the next subtasks:

  1. Review existing methods of plane association
  2. Implement all of them
  3. Measure quality of the association on real SLAM data and choose the best one
  4. Implement chosen solution as a part of SLAM algorithm pipeline

Form for candidates:  https://docs.google.com/forms/d/e/1FAIpQLSdd7QJShj0fFqBsEfMvB1M2gmzfXZO3-bqn6KcgnKee8xWySA/viewform

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

Experience with any mentioned technologies will be a great bonus, but we don't expect that students should have a strong background in them, the most important thing is to be open to work intensely and hard, and don't be scared a lot from math.

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

Anastasiia Kornilova (Mobile Robotics Lab, Skoltech), Dmitrii Iarosh (SPBU), Arthur Saliou (SPBU)

Localization in indoor environments using smartphone

Android (Java/Kotlin), C++, JNI, Python, technologies on porting DL networks on mobile devices

Описание

Globally, this project is aimed to solve the next problem. Imagine, that you have a huge environment (shopping mall, business center) and, using a typical user smartphone and photo from it, your algorithm should calculate in what part of the building it was captured. Such a system is devoted to help visitors to localize in an unknown environment and build a route to the room or shop they exactly need. To do this, we need two components: (1) design a system that will scan environment and create map of the building and (2) develop smartphone application that, using built map and photo from smartphone's camera, will calculate approximate user location.

Task (2 students). Demo Android-application with keypoints detection from images in real time

Important brick in the second component (smartphone app) is to extract keypoints and their descriptors from images directly on the smartphone in soft real time. There are two types of keypoints: classical (SIFT/ORB/SURF, available in OpenCV) and learnable, that use deep learning network (i.e. SuperPoint). The task for summer school is to develop demo Android-application that will continuously capture image from the smartphone, calculate classical and learnable keypoints and visualize them.

This includes the next subtasks:

  1. Develop Android application that grabs image from camera in real time
  2. Develop C++ library that extracts keypoints of different types
  3. Integrate C++ library into Android application, support visualization of extracted keypoints
  4. Measure performance of calculation of different types of keypoints

Form for candidates:https://docs.google.com/forms/d/e/1FAIpQLSdd7QJShj0fFqBsEfMvB1M2gmzfXZO3-bqn6KcgnKee8xWySA/viewform

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

C++, Python

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

Anastasiia Kornilova (Mobile Robotics Lab, Skoltech), Timofey Pushkin (SPBU)