Devdays Осень 2019 (список проектов)

Материал из CSC Wiki
Перейти к:навигация, поиск

Список проектов для DevDays Fall'19

Содержание

Генератор Nix-дериваций для динамически слинкованных бинарников

Существует менеджер пакетов и система воспроизводимых сборок Nix, а также построенный вокруг Nix дистрибутив Linux - NixOS. Все пакеты ("derivations" в терминологии Nix) идентифицируются по хэшу Nix-выражения, с помощью которого они были собраны, и все файлы хранятся в одной директории: /nix/store/.

$ find /nix/store -type d -iname '*glibc*'
/nix/store/iykxb0bmfjmi7s53kfg6pjbfpd8jmza6-glibc-2.27
/nix/store/m53mq2077pfxhqf37gdbj7fkkdc1c8hc-glibc-locales-2.27
/nix/store/lcpf5mzc4f1scj67znarbd6kg64lykls-glibc-2.27-bin
/nix/store/bniand9afisrgrsfi7kr093334iv3ibv-glibc-2.27-dev
...

NixOS не соответствует FHS, в частности, все разделяемые библиотеки находятся не в /usr/lib и т.д., а в /nix/store. Как же динамически слинкованные ELF-бинарники для Linux могут найти требуемые им библиотеки? Никак: они требуют пересборки.

Нередко можно увидеть такую картину:

$ ldd some-binary
        libz.so.1 => not found
        libtinfo.so.5 => not found
        libgmp.so.10 => not found
        ...

Перекомпиляция не всегда возможна и приемлема. Существует утилита patchelf, позволяющая вставить в бинарь правильные пути:

$ ./some-binary
bash: no such file or directory: ./some-binary
$ patchelf --set-interpreter /nix/store/(garbage)/ld-linux.so.2 some-binary
$ patchelf --set-rpath /nix/store/(garbage)/lib:/nix/store/(garbage)/lib/ some-binary
./some-binary # It works!

Для того, чтобы указать правильные аргументы для patchelf, нужно понимать, какие библиотеки нужны:

$ patchelf --print-needed some-binary
libdl.so.2
librt.so.1
libsane.so.1
libQt5Svg.so.5
libQt5PrintSupport.so.5
libQt5Widgets.so.5
...

А также, какие пакеты за них отвечают. Для второго есть утилита nix-locate, которая обычно выдает несколько вариантов:

$ nix-index # Ждём несколько минут, пока строится индекс
$ nix-locate -1 -w lib/libQt5Svg.so.5
libsForQt56.qtinstaller.out
qt56.qtsvg.out
qt5.qtsvg.out
qt56.full.out
libsForQt5.qtinstaller.out
...

Что же выбрать? Неизвестно, но можно придумать простые эвристики (этим мы и займёмся).

После того, как выбор сделан, можно нагенерить Nix-выражение, чтобы собрать работающий бинарный пакет. За вычетом метаинформации и boilerplate, должно получиться что-то такое:

  preFixup = let
    libPath = lib.makeLibraryPath [
      # здесь должен быть список пакетов-зависимостей
      qt5.qtbase
      qt5.qtsvg
      stdenv.cc.cc.lib
    ];
  in ''
    patchelf \
      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
      --set-rpath "${libPath}" \
      $out/bin/some-binary
  '';

Наша задача - написать программу, которая способна вызывать patchelf и nix-locate и сгенерировать derivation на основе поданных на вход эвристик выбора пакетов, которые в самом простом случае могут просто сопоставлять имени файла библиотеки название пакета (эвристики можно хранить в json/yaml или чём-то подобном).

Если получится полностью автоматически пропатчить хотя бы GNU Hello, это уже будет успех. Должно получиться что-то вроде:

$ ls
hello
$ ./hello
bash: no such file or directory: ./hello
$ magic-patchelf hello
$ ls
hello default.nix
$ nix-build -A hello default.nix
$ ls result/bin
hello
$ ./result/bin/hello
Hello, world!

Предложил: Кальницкий Владимир

Deadliner

Самое частое слово, которое слышит студент и ужасается - это дедлайн. Порой бывает тяжело уследить за некоторыми датами по задачам. Да и с тайм менеджментом не все гладко. Поэтому родилась идея, создать веб-ресурс, который мог бы контролировать временные рамки и помогать отслеживать прогресс. Как вариант, использовать progress bars, которые помогут подстроить свой time managment (некий календарь).

Но это звучит слишком легко и банально, а что если этот сервис, дополнительно мог бы собирать необходимую информацию о домашках на одном ресурсе и отсылать уведомления?

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

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

Для данного проекта удобно собрать необходимую информацию, которую можно использовать для дополнительных фич в проекте (опрос среди студентов).

По итогу, вся суть проекта: помочь студенту систематизировать процесс обучения и процесс сдачи домашних задач.

Предложил: Громов Павел


Поиск сокровищ

Если Вы помните, пару лет назад, в течение пары дней, была популярна такая AR игрушка, как Pokemon Go. Помимо ловли пикачу, там можно было останавливаться на так называемых покестопах и получать от этого разные покеплюшки в виде покеболлов и покеконфет. Эти покестопы были обычно расположены рядом с различными достопримечательностями, очень часто о существовании которых, не смотря на рабочие глаза и 20 лет жизни в окрестностях, лично я не имел ни малейшего представления (думайте Чижик-Пыжик, кошки на Малой Садовой или незаделанные дырки в стенах, оставшиеся после бомбёжек блокады, только менее известные штуки).

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

Предложил: Цыкунов Дмитрий

Time management

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

Предложил: Лытаев Александр

Таймер для принтера

В некотором университете N ведет практику преподаватель X. У него есть одна проблема: иногда он опаздывает на пары, потому что не успевает распечатать листики с задачами на принтере. Поскольку у преподавателя много дел, ему не хочется отвлекаться и идти печатать листики сильно заранее. К сожалению, принтер периодически зажевывает листы и приходится тратить время, чтобы их вытащить и напечатать новые. В зависимости от того, сколько страниц печатается, техник какого уровня настраивал аппарат утром, сколько уже страниц уже распечатал принтер за день. Так же преподаватель иногда хочет успевать наливать себе кофе перед парой. К сожалению, и машинка тоже ломается (да что ж такое, у всех лапки!). Поломка зависит от того, сколько раз уже ломалась машнка сегодня, от напора воды, времени, прошедшего с последней чистки машинки и от количества людей в Таймсе. Было бы здорово, чтобы какая-то программа умела предсказывать по нажатию кнопки, сколько времени понадобится преподавателю, чтобы распечатать листочки и, возможно, сделать кофе (считаем, что все необходимые для предсказания данные магическим образом обновляются в табличке). Задачи: - На основе данных (будут добавлены позже), создать статистическую модель (нет, просто catboost кинуть нельзя :) ), имплементировать (да, это тоже надо ручками делать) и пояснить, почему использовалась именно такая модель (подсказка: хорошая идея использовать какую-нибудь регрессию для этого дела). - Создать приложение-сервер, на котором будут проводиться все расчеты. Расчеты должны проводиться быстро, ведь преподаватель не хочет ждать 5 минут, пока модель пофитится. - Создать приложение-клиент для загрузки новых данных и изменения настроек приложения (если их можно собирать автоматически, то добавлять их автоматически) - (опционально) Создать приложение-клиент под Android

Предложила: Картышева Елена

cdecl vs stdcall

Этот проект для тех, кому не страшно взглянуть в глаза ассемблеру. Либо для тех, кто ещё не очень понял, но очень хочет понять, что же это за два таких зверя, о которых рассказали на C++. Проект, больше, исследовательский и нацелен на понимание соглашениях о вызовах в ассемблере (да, да, это к C++ имеет только косвенное отношение). Что предлагается сделать -- сравнить знаменитые соглашения cdecl и stdcall, ... по производительности на различных архитектурах (она должна быть одинаковой), по количеству генерируемых строк кода на языке ассемблер, по размеру программ (если получится). Также, возможно, разработать некоторую вариацию соглашения о вызове stdcall, которая могла бы принимать переменное число аргументов, как cdecl. То есть по сути разработать новое соглашение о вызове, которое работало было бы похоже на stdcall, но очищало бы стек за собой. Egor Basharin -- challenge accepted.

Также, для полного понимания соглашения о вызовах можно запилить какую-нибудь несложную анимацию на JavaScript в веб-браузере, которая бы позволила:

- Определять пользователю простую функцию на языке Си

- Генерить её (псевдо-)ассемблерный код, ну, или код для какой-то конкретной архитектуры: i386, Arm Cortex, ...

- Изменять соглашение о вызовах

- Пошагово выполнять программу


Предлагаю использовать NASM для написания кода на языке Assembler, линковщик любой. Интерактивную визуализацию можно делать с помощью любых средств.

Предложил: Крыштапович Виктор

Генератор аватарок по фотографии

Есть библиотеки для распознавания лиц, но они находят не только прямоутольник, где расположено лицо. Они также дают информацию о цвете кожи, форме лица, губ, бровей, цвете глаз, причёске. Можно использовать эту информацию и на её основе генерировать аватарку, которая будет напоминать лицо на картинке. Предлагается подготовить различные варианты картинок для глаз, рта, овала лица и делать из них коллаж выбирая из них наиболее подходящие.

Предложил: Денис Мирзоев

Glowing eyes meme генератор

Предлагается сделать генератор таких картинок. Находим глаза, добавляем эффектов, можем ещё текст.

Xmpgh7k7e0r01.jpg

Предложил: Денис Мирзоев

Комбинатор идей

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

Предложила: Карпенко Мария

Нотный текст

Приложение, которое может в какой-то форме выдать ноты по входящему аудиопотоку.

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

Предложила: Карпенко Мария


Не очень достаточно глубоко

Как мы хорошо знаем, с нас довольно активно собирают различные отзывы по различным предметам: ФП, C++, и конечно же Unix и скриптовые языки. Нашим любимым кураторам, в частности Марии, очень тяжело фильтровать неадекватные отзывы о предмете и отдавать их в рафинированном виде преподавателям. Предлагается разработать проект, который бы фильтровал текст в автоматическом (или полуавтоматическом режиме) от мата, оскорблений, пошлого и непристойного текста в адрес преподавателей, чтобы Лёше Зубакову не пришлось читать отзывы в духе "Слишком быстро" и "не очень достаточно глубоко", а Халанский не просил бы Эдгарда повышать сложность заданий по ФП.

Возможно, с этой задачей можно справиться и без машинного обучения, но скорее всего интереснее применить что-то более продвинутое, например, использовать text2vec, или ещё что-нибудь из мира машинки :)

Предложил: Крыштапович Виктор

SETutor

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

Веб-ресурс SETutor поможет собрать воедино лучшие материалы, отобранные нашим дружным комьюнити, для улучшения своих познаний по каждому из предметов. Очень важно не превратить многообразие источников в кашу, поэтому предлагается для каждого предмета сделать свою отдельную ленту с постами, которые описывали бы какой-либо ресурс (онлайн-курс, книгу, статью, конспект и т.д.) или представляли бы собой собственный гайд пользователя по тому или иному вопросу. Каждый пост должен рассказывать только об одном ресурсе и объяснять: почему именно он. Каждая публикация должна относиться к определенной теме и иметь уровень сложности для понимания. Данная платформа дает возможность студентам проявить себя творчески, внести свой вклад в общее дело и поучиться у своих коллег чему-то новому. По классике, посты можно лайкать, если они оказались полезными, и фильтровать по количеству этих самых лайков, что даст возможность в долгосрочной перспективе собрать богатую коллекцию проверенных материалов по каждой дисциплине, которые помогут нам и будущим студентам программы познать “Software Engineering”, а вместе с ним и бесконечно-вечное.

Предложил: Морозов Константин


Система автоподбора одежды

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

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

-каждая вещь имеет разные приоритеты: к примеру, футболка приоритетней свитера, поэтому выбирается в первую очередь;

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

-система имеет пороговые триггеры по параметрам: к примеру, если в течение дня температура опускается ниже 10, то система автоматически рекомендует взять шапку, а если осадки больше 1 мм - взять зонт.

Каждый из предметов гардероба имеет заранее ряд характеристик, а также категорию: обувь, штаны, верхняя часть, головной убор и так далее. В соответствии со здравым смыслом, подбирается такая конфигурация вещей, являющихся допустимыми (в частном случае, по выбору пользователя). Иными словами пользователь не может иметь в конфигурации два вида обуви или головных уборов, однако в определенных случаях может иметь два вида штанов, например. Среди характеристик предлагаются условные теплота, промокаемость и продуваемость (определяется на основе эмпирической экспертной оценки, от 0 до 100).

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

Входные переменные: температура, влажность, ветренность

Выходные переменные: теплота, промокаемость, продуваемость

Температурный диапазон: -40 … +40 град цельс

Диапазон скорости ветра: 0 … 25 м/с

Диапазон осадков: 0 … 5 мм

Также система имеет ряд вложенных блоков: к примеру, отдельно по осадкам система осуществляет подбор обуви (на предмет промокаемости).

Для каждого из экстремальных наборов климатической картины определяются выходные переменные теплоты, промокаемости и продуваемости. Например, в течение дня имеет две экстремальные температуры: +10 и +15. Для них по итогам нечеткого вывода имеются параметры теплоты 40 и 60. Однако если оценить суточную кривую температуры, можно заметить, что температура весь день колебалась около +10, а около +15 была лишь около получаса. Это говорит о необходимости взвешивания экстремальных значений. Например, веса для данного случая оценятся в 0,2 и 0,8 соответственно. В таком случае итоговый ориентир теплоты будет 56.

Для данного параметра определяется набор одежды, который будет максимально близок к данной одежде. Также приложение может быть настраиваемым: пользователь может выбирать, быть параметру предпочтительнее ниже или выше целевого.

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

Предложила: Ольшанская Виктория

iСпичка

Реализовать приложение для ios "спички", только игроку/игрокам (max 2) выдаются английские слова, и надо сопоставить адекватный перевод из 4 вариантов. Игра постепенно усложняется, все время повышая уровень владения языком, необходимым для знания ответа. При игре в одиночном режиме надо набрать как можно больше очков (большее число слов), в 2 проигрывает тот, кто заберет последнюю (поэтому тактики игры совершенно разные).

Предложил Деркунский Виктор

Теперь у меня есть друг

Иногда писать код одному скучно, а друзьям это не интересно (или их нет). Эх, вот был бы плагин для IDE (например, для продуктов всем понятной компании), который бы разговаривал бы с тобой, рассказывал шутки, вставлял внезапные реплики и, если ты написал плохой код, говорил бы тебе об этом. Было бы очень круто.

Предложил: Иван Пости

Голосовое управление

Было бы круто реализовать голосовое управление какими-нибудь простыми функциями IDE. Например: сказать что-то в духе "собери проект", "покажи изменения файла" или "добавь файл в коммит".

Предложил: Иван Пости

Мама я стал музыкантом

Для редакторов Atom и VSCode есть интересный плагин Aural Coding, который генерирует и играет приятную мелодию на основе того, что ты нажимаешь на клавиатуре. Оно очень простое и просто ставит в соответствие каждой клавише клавишу пианино. Было бы круто портировать это расширение для продуктов компании JetBrains и доработать его, чтобы между генерируемой мелодией и набираемым текстом была бы какая-то зависимость. Например, определять эмоциональный окрас набранного текста и менять тональность в зависимости от него. Помимо этого, было бы круто, если бы мелодия играла бы непрерывно и замедлялась/ускорялась в соответствии со скоростью набора.

Предложил: Иван Пости

Дедушка Harold оценит ДЗ

Любимая всеми тема ML. Оценивает содержание сообщения о ДЗ и рисует с нужной улыбкой дедушку.

Harold.png

Предложил: Свиридов Николай

Нет, мама, я не могу поставить эту игру на паузу!

Многие знают об очаровательной игре про крокодилов для визуализации лямбда-исчисления: http://worrydream.com/AlligatorEggs/. А почему бы нам её не написать под телефоны/web? А еще можно собрать компанию хаскелль-энтузиастов и навесить сверху более сложные понятия, и вот ты уже популяризатор науки, ссылка на игру из года в год красуется на степике и csc-wiki, студенты не бегают в панике при виде хаскелля, мир добро любовь. Ожидания: можно играть с другом, есть какие-то уровни, есть интерфейс с теоретической справкой. Стек технологий: Unity/C#

Предложила: Колмогорова Валерия

Open-world по четвертому этажу

Студенты, впервые оказавшись в БЦ Таймс, очевидно, находятся в возбуждении и растерянности. Сначала они не могут найти комнату 404/библиотеку/Антона Михайловича, а потом начинают случайно забредать в спортзал и пугать преподавателей и сотрудников. Давайте сделаем виртуальную экскурсию по 4 этажу (а может и по остальным тоже?), чтобы а) показать, где находится нужная аудитория (с подсветкой розеток, конечно же) б) показать лаборатории с 4 этажа интересующимся (чтобы можно было прочесть текст на постерах!) в) посмотреть уже наконец-то на спортзал.

В розовой мечте предложившего это всё разрабатывается под VR очки (Unity/C#)

Предложила: Колмогорова Валерия

Game-Dev days 2019

А давайте поучаствуем в каком-нибудь Game Jam на https://itch.io/. Как раз в один день с хакатоном начинается и заканчивается https://itch.io/jam/polyspace1

Предложил: Чори Александр


Система непрерывного (анонимного) сбора отзывов

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

Есть решение как поставить процесс сбора отзывов на поток и при этом оставить студентам возможность оставлять его анонимно, нажав галочку. (Интересно при этом - какой процент будет нажимать галочку с течением времени, а какой - нет. При этом в первом варианте все участники будут видеть неанонимные отзывы, а во втором - их будут видеть только кураторы - расшифровывая их своим приватным ключом. Но это уже тема для теории игр)

И, чтобы фидбек был действительно анонимным, сделаем эту систему децентрализованной (у каждого будет свой приватный ключ). И сделать приложение / веб-интерфейс для анонимного фидбека, которое будет прослойкой для отправки отзывов в блокчейн. При нажатии выборе опции оставить отзыв анонимно - будет генерироваться новый публичный ключ. Общий принцип анонимного голосования - такой же, как в monero (все транзакции анонимны) или zcash (там есть опция совершить транзакцию анонимно) - эту логику можно встроить в смарт-контракт. Сделать можно либо на кворумных системах, либо на смарт-контрактах (проще) EOS/Ethereum.

Предложил: Бобышев Никита


Игра "Угадай персонажа"

У голосового помощника Алисы есть игра "Угадай персонажа", в которой пользователь загадывает знаменитость, а Алиса задает вопросы вида:

- Ваш персонаж мужчина?

- Ваш персонаж блондин?

- У вашего персонажа есть собака?

Проблема этой игры в том, что Алиса умеет угадывать только знаменитостей.

Давайте сделаем свою версию игры "Угадай персонажа", но угадывать будем наших кураторов и преподавателей. Предлагается сделать это отдельным навыком для Алисы (или в бота для телеги).

Предложил: Петров Дмитрий

Аналог CodeWars/ LeetCode, но с упражнениями по теории языков

Всем известно, что сайты наподобие CodeWars и LeetCode очень хорошо помогают поддерживать форму в алгоритмическом программировании, а так же улучшают процесс обучения за счет явных поощрений (получения exp при решении задач), легко отслеживаемого прогресса обучения (уровни, ранги и т.д), а так же мощного комьюнити, к которому можно обратиться с вопросами и обсудить задачи. Еще на них задания хорошо разбиты на темы, и помогают построить явный путь от новичка к мастеру. Хочется сделать аналог такого сайта для теории языков. В нем будут упражнения на написания грамматик к языкам, удобная интерактивная система, в которой будут тесты этих грамматик, визуализация синтаксических деревьев, система spaced-repetition learning, контесты и т.д.

Предложил: Стоцкий Олег


Jira в telegram

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

Предложил: Лучко Александр


Telegramm Отзовик

Походу учёбы проходят google опросы. Как говорилось выше их приходилось фильтровать и тд (на жаргон). Есть идея создать телеграмм бота, в который мы все войдём, и там можно будет постить фидбек на учёбу и свои ощущения боту анонимно.

Есть Студенческий и Общий чат (Можно использовать тякущие).

Процесс такой:

  1. Кто-то постит мнение в Студенческий чат.
  2. Бот вяжет это мнение с человеком в своей внутреней базе в RAM, его никак уже нельзя будет получить, только пока жив бот пусть он видит свою память.
  3. Мнение анонимизировано показывается всем студентам и каждый имеет право ставить Да/Нет/Нельзя
  4. Если студент набирает больше 10 нельзя в неделю, его имя показывается всем другим СТУДЕНТАМ (т.к им приходится его постоянно Нельзякать), они с ним говорят и он исправляется. Бот никогда не разглашает конкретные посты.
  5. Нельзя на посту >= 5, тогда пост отменяется, и удаляется.
  6. "Да" больше чем ("Нет" + "Нельзя"), пост публикуется в общий чат, там его теперь могут залайкать и обсудить все.
  7. В самом чате обзора постов, студенты всегда могут обсудить свой выбор, и в течении 1-го Дня отменить "Нет", "Да", "Нельзя" и выбрать что-то другое.
  8. Рефери чата (можно назначать 10 студентов рефери рандомно каждую неделю) смогут если это необходимо и большинство просит, менять посты, удалять и изменять информацию, если все по опросу(обычному телеграм опросу) думают что так следует.
  9. Можно ещё добавить функциональность "Общая Воля", если пост действительно важен для всех, и это по обоюдному согласию общее мнение студентов, то пост можно переместить в тип "Общая Воля", это значит что более 15 студентов поставили "Да" по крайней мере на нескольких постах которые про одно и тоже, их склеили и создали один большой. Или какой-то конкретный пост важен многим.


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

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

Или поздравить или поблагодарить кого-то от всех, не создавая подписи под именем (чтобы никто конкреный не казался подхалимом), ведь иногда и правда охота поблагодарить человека, а способов не так много.


Предложил: Лучко Сергей

Плагин для поиска использований метода/класса среди проектов на GitHub

Предположим что разработчик хочет использовать какой-то метод или класс из некоторой библиотеки. При этом релевантной документации нету или она непонятная, а код метода/класса достаточно сложен, чтобы разобраться в нём за разумное время. Возникает естественное желание посмотреть, как используется данный метод/класс в других проектах. Например можно поискать на GitHub, но делать это в ручную не очень удобно:

  • приходится каждый раз выбирать язык программирования (причём иногда это нельзя сделать через UI и приходится править URL)
  • GitHub показывает только первое вхождение в каждом файле, чтобы посмотреть остальные нужно открывать файл и искать
  • результатов поиска может быть очень много, но никак нельзя отфильтровать лишние:
  • метод/класс может иметь распространённое имя и встречаться в разных библиотеках
  • метод может использоваться по разному (и вообще, может быть несколько разных методов с одинаковым именем, но принимающих разное число аргументов)

В идеале хотелось бы что-нибудь такое:

  • разработчик пишет код, в котором какая-то часть пропущена (например вызов метода где вместо одного аргумента стоит прочерк)
  • активируется наш плагин, который ищет на GitHub похожий по структуре код, фильтрует результаты поиска и показывает что можно было бы подставить вместо прочерка

На хакатоне предлагается придумать различные эвристики для фильтрации/ранжирования результатов и реализовать плагин для IntelliJ.

Предложил: Мурзин Дмитрий

Automatic time management

Есть приложение Qbserve для macOS, которое работает в фоне и собирает статистику использования приложений (при этом оно достаточно умное и разделяет время, проведённое в браузере по сайтам). Далее приложения автоматически разделяются на категории: продуктивные (IDE, сайт overleaf и т.д.), нейтральные (например проводник) и непродуктивные (например twitter). И строятся красивые диаграммы: суммарное время в каждой категории за интервал (час/день/неделя), распределение времени по приложениям и т.д. Основная фишка приложения в том, что оно полностью автоматическое.

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

Предложил: Мурзин Дмитрий

Оказывается для Linux уже есть желаемое приложение: RescueTime (спасибо Никите Бобышеву за наводку).

Приложение на телефон для переводчиков

Есть разные приложения для переводчиков, которые позволяют создавать проекты, загружать текст, делить его на предложения (или абзацы) и переводить в режиме: слева отображается оригинал, справа Ваш перевод. Это достаточно удобно, потому что всегда можно вернуться к тому или иному отрывку текста, посмотреть на него еще раз и, например, отредактировать его, при этом не отдалив перевод от оригинала. Чаще всего это программы на компьютер, реже можно встретить такие сервисы онлайн, и найти что-то подобное в виде мобильного приложения мне вообще не удалось (если кто-нибудь найдет, то скиньте ссылку, пожайлуйста)

Так как переводами занимаются (неожиданно) не только профессиональные переводчики, но есть так же любительский перевод, то часто возникает желание переводить в относительно свободное время, например, в общественном транспорте, просто между делом, и не обязательно, когда ты рядом с компьютером. И есть люди, которым хотелось бы увидеть мобильное приложение, которое позволило бы удобно переводить тексты.

Минимальные требования к такому приложению:

Можно загрузить файл (например, в формате txt или doc) (или вставить из буфера в поле). Программа создаст для него отдльный проект. Разобьет его на предложения или абзацы (можно в зависимости от выбора пользователя).

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

Будет отображаться прогресс по проекту (например, переведено x/N предложений/абзацев. При этом полностью переведенным считается предложение/абзац, который отметит переведенным пользователь).

И в любой момент можно будет выгрузить полученный перевод в txt или doc формате. (Например, заменяя непереведенные еще абзацы оригинальными, чтобы можно было восстановить последовательность)

Предложила: Лаптева Юлия

Не время спать

Все чаще и чаще засиживаешься допоздна за очередной домашкой? И все бы хорошо, вроде и работа кипит и чай стынет около компьютера, а ты всего лишь решил закрыл глаза на пару минут? И вот ты просыпаешься через n-ое количество часов, ты опоздал на пару, ты пропустил дедлайн, и у тебя всё плохо. И конечно ты не поставил будильник, ну ты же в очередной раз понадеялся, что не уснешь Такого не случится, если использовать умный будильник!!

Задача: реализовать приложение - "Умный будильник", который бы сверяясь с расписанием дедлайнов, отслеживал исходящую почту по определенным преподавателям и mr GitLab/GitHub на предмет отправки очередного ДЗ. И заранее предупреждал(с определенной периодичностью) о том, что очередное дз по ФП или UNIXу ты еще не отправил, а значит не время спать - вставай и работай.

Предложил: Китов Евгений

Музыкальный Бот

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

Предложил: Галоев Илькин

Начни это делать прямо сейчас

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

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

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

Предложила: Сидорова Елизавета

Помидорка

Метод «Помидора» — техника управления временем. Техника предполагает разбиение задач на 25-минутные периоды, называемые «помидоры», сопровождаемые короткими и длинными перерывами.

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

Предложил: Мартын Евгений

Символьное выполнение

Идея: реализовать инструмент символьного выполнения для смарт-контрактов Ethereum. Смарт-контракты компилируются в байткод, с ним и предстоит работать.

Предложил: Мартын Евгений

Учебный бот-агрегатор в Telegram

Каждый пользуется CSC wiki, каждый заглядывает как минимум на 4 страницы курсов еженедельно по несколько раз в поисках презентаций с лекций и практик, конспектов и примеров кода, а главное - ждет появления новых домашних заданий, чтобы быстрее приступить к ним.

Идея: создать бота в телеграме, агрегирующего доступ ко всем файлам CSC wiki раздела "5 курс (ИТМО)" и уведомляющего о появлении новых материалов по домашним заданиям с возможностью выбора преподавателя практики.

Расширение возможностей бота, не перечисленных выше, не воспрещается, а приветствуется.

Предложил: Рыбин Иван

Big Brother 2.0

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

Идея: реализовать телеграм-бота, собирающего статистику времени и продолжительности посещения ВКонтакте людей, которых вы добавили в target с представлением этой информации в виде относительно подробных графиков и таблиц с разбиением на месяцы, недели, дни. Аналог - программа "Экранное время" на iOS. Дополнительно можно реализовать поддержку уведомлений о смене online-статуса пользователей (но умеренное их число, в границах 3-5). Бот должен выводить статистику по запросу в виде png/pdf для графиков и хорошо отформатированного сообщения для таблички/чисел.

Предложил: Рыбин Иван

Универсальный парсер

Написать парсер, который не будет зависеть от html тэгов. То есть, например, независимо от интернет-магазина напарсить все товары: https://clck.ru/Jb64P здесь информация о товарах находится в элементе article, а на алике https://clck.ru/Jb65P в списке.

Решение такой задачи поможет для составления датасетов и не только.

Предложила: Мамонова Анастасия


Gold list

Создать простенький сайт, который в будущем реально будет существовать на поддомене compscicenter.ru (предлагаю gl.compscicenter.ru). На сайте будет информация о всех выпускниках CSC и связанных магистратур, для каждого выпускника будет своя страничка с информацией в каком году учился/закончил, где сейчас работает, на какой должности и в какой компании. Будет достпупен каталог по годам, а также поиск по людям. Такая база поможет поступающим анализировать успех выпускников, а выпускникам коннектиться с другими выпускниками после выпуска, либо узнавать инфу кто где работает/чем занимается. Для научных людей там также будет указана область научных интересов, ссылки на публикации. Можно добавить еще ссылки на соцсети, git - профили, и т.д.

Предложил: Чернокоз Александр

SE hi! Or.. bye-bye?

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

Возможный путь решения:

  1. Создадим анкету, указав в ней наиболее важные с нашей точки зрения пункты (знание определенных языков программирование, наличия титула "король алгоритмов", умение не спать и пр.). Фидбэк по анкете попросим у наших кураторов.
  2. Анкету заполним все мы, новоиспеченные магистранты, а затем представим возможность это сделать тем, кто варится в этом котле уже продолжительное время.
  3. На основе полученной статистики обучим классификатор, который своими предсказаниями (в координатах нашей магистратуры) будет освещать кандидату путь в направлении успешного поступления. Например, "роковая ошибка", "развернись, пока не поздно", "вы переплюнули некоторых наших преподавателей, добро пожаловать (нет)"

Возможные используемые инструменты:

  1. Т.к. никто не хочет скачивать себе какие-то непонятные приложения непонятных производителей, достаточно google-forms и обработчика заполненных анкет на нашей стороне (например, python).
  2. Вердикт может приходить, например, на почту или на странице forms по окончании ответа на анкету, если это возможно.

Предложил: Прищеп Дмитрий (@DimkNevidimk)


Best of the best

Создать плагин, который на основе базы из композиций выбранного жанра, сделает ремикс из двух ваших любимых песен, подгоняя в нужный темп BPM (кол-во ударов в минуту) и срезая верхние/средние/нижние частоты. В качестве редактора музыки можно использовать Ableton Live.

Предложила: Широбокова Полина


Автопрокрутка

Реализовать простой ридер с автопрокруткой, который будет автоматически подстраиваться под скорость чтения пользователя (возможно, что-то подобное уже есть, но из того, что я видел, везде прокрутка либо по таймеру, либо непрерывная): если читающий сам перелистывает/прокручивает на следующую страницу, значит скорость слишком медленная, если на предыдущую --- слишком быстрая. Также можно попробовать реализовать функцию приостаноски прокрутки, когда пользователь не смотрит на экран.

Предложил: Евгений Кравченко

Hi-C и Deep Learning на графах

Есть такой тип данных секвенирования, Hi-C, позволяющих оценить 3д укладку свернутой молекулы ДНК. Результат эксперимента подобного секвенирования часто представляют в виде матрицы, где рядам и столбцам соответсвуют некотрые участки генома, а значения в ячейках - степень их близости в физическом пространстве. Кажется, такую матрицу можно интерпретировать как матрицу взвешенного графа, интересно было бы попробовать на ней различные методы Deep Learning на графах, задачки могут быть разные: выделение подграфов-перестроек, восстановление загрязненных данных, получение более точных данных из менее точных. Если решим заниматься этим, то я еще поспрашиваю специалистов по теме, чем лучше позаниматься в рамках хакатона. На самом хакатоне тогда хотелось бы попробовать разные типы моделей в приложении к одной задаче. Это не мой НИР, если что! :)

Предложил: Дима Орехов

Messenger в IDE

Реализовать плагин, с помощью которого можно переписываться в ICQ Slack прямо в IDE.

Предложил: Артём Бобров


One more bot...

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

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

Предложила: Широбокова Полина

Букмекерская контора

Придумать самодельную букмекерскую контору по какому-либо популярному виду спорта (например, футбол, баскетбол, хоккей, Формула 1): то есть на основе лайв статистики со спортивных сайтов выдавать коэффициенты для победы / поражения / других интересных показателей какой-либо команды / индивидуального спортсмена

Предложил: Бабиков Игорь

Просыпашка

Умный будильник для профессиональных просыпашек (ну или для тех, кто слишком устал). Приложение на телефон, с разными уровнями возможностями будильника.

Предложила: Парилова Екатерина


Тренировка зрения

Десктопное приложение для тренировки зрения.

Что такое тренировка для глаз? Это 10 минутное упражнение, для которого требуется наличие обычной таблицы с буквами или любыми другими символами. Как в кабинете у офтальмолога, только шире раза в 4. Упражнение заключается в том, что нужно водить одним, тренируемым в данный момент времени, глазом по таблице в течение 30 секунд и стоять с закрытыми глазами около минут.

Вопрос, для чего же приложение? 1. Сейчас когда я хочу потренироваться зрение у меня есть два пути. Первый - поставить некоторое количество будильников, однако например у меня на телефоне будильник не работает с необходимой точностью. Можно поставить таймер. Но опять же у меня нет возможности создать несколько подряд идущих таймеров. Соответственно все время приходится отвлекаться либо на часы, чтобы не прозевать время, либо на телефон чтобы переключать время на таймере. Второй вариант - просить кого-то следить за временем. Тоже не особо работает, учитывая мой график.

2. Нужна таблица для глаз. Не всегда есть возможность повесить ее на стену. К тому же сделать так, чтобы она была достаточно освещена и так далее.

3. Так же как и любая тренировка мышц, данное занятие требует не только концентрации, но и накладывает некоторое ограничение на позу. Например, нельзя сутулиться или щуриться, так как это снижает эффективность от тренировки.

Предлагается создать приложение в котором можно задать время тренировки и релаксации, стандартно задавать из по существующей методике.

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

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

Плюшки: в приложении всегда можно отмечать галочками дни тренировки. Вам нравится ставит галочки, когда они сделали что-то что хотели

Предложила Ольшанская Виктория