Devdays Осень 2018

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

Редактировать wiki одновременно нескольким людям стоит осторожно: после внесения правки проверьте, что она действительно сохранилась.

Содержание

AtomPub для соцсетей

Сервер (возможно, установленный локально) принимает запросы от клиента AtomPub (вроде Open Live Writer или Word) и постит в соцсеть. Сценарий применения: постится в обычный блог что-то через OLW, и заодно в соцсети тоже оттуда же. Ожидается поддержка текста и картинок. Есть похожие по назначению инструменты SMM, берущие RSS, но не локально устанавливаемые (тем более не FLOSS), естественно, платные. Если на этом безрыбье появляется FLOSS решение, есть шанс, что такая вещь пойдёт в народ, в некоторые сегменты.

Язык реализации: Ада. Без базы данных, либо SQLite. Это определяется тем, насколько сложно сделать установочный пакет. Сделать второй Денвер времени нет, а упаковать exe'шник в инсталлятор — другое дело. Если есть уверенность, что некая другая технология тоже позволит прийти к чему-то устанавливаемому, тоже годится. Для разных соцсетей могут быть разные независимо написанные локальные сервера, а установочный пакет общий.

Предложил: Левашев Иван.

Заполнение тега текста в аудиофайле

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

Предложил: Владислав Кораблинов

Oh, here's to my sweet Satan

Всем известно, что Роберт Плант и Джимми Пейдж законченые сатанисты (про последнего, кстати, недалеко от истины). А что, если мы попробуем автоматизировать поиск дьявольских посланий в песнях? Мы можем брать кучу треков, разворачивать их, и кормить какому-нибудь распознаватору речи (для английского языка таких, наверное, прилично), а потом искать там что-то нибудь про satan, sweet lord и hell.

Предложил: Владислав Кораблинов

t-SNE для Twitter или Instagram

Есть прикольный алгоритм визуализации многомерных данных, который какими-то чудесями умеет попутно кластеризовать исходные вектора. Можно попробовать строить модель текста (Twitter) или картинки (Instagram) пользователя, смотреть, как t-SNE их кластеризовал, и искать корреляцию с имеющимися тегами, после чего при добавлении новой записи автоматически предлагать пользователю теги.

Предложил: Владислав Кораблинов

Приключенческая повесть "Плоды прогресса"

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

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

Предложил: Владислав Кораблинов

Креативные технологии

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

Предложил: Владислав Кораблинов

KeePass плагин для IntelliJ Platform

Довольно часто при разработке веб-приложений встает задача хранения секретов (паролей от БД, паролей к различным интегрированным системам). И если в production окружении решений множество (это и SSM от AWS, и Vault от HashiCorp), то вот для локальных запусков всё гораздо хуже (SSM только в AWS, Vault может быть не доступен вне рабочей сети и т.д.).

Одним из распространненых паттернов хранения секретов для локальных запусков является KeePass база (kdbx) хранимая в репозитории. Приложение при локальном старте распечатывает её ключом, введенным локально разработчиком (как правило .password файл созданный им и находящийся в .gitignore проекта). Это очень удобное решение, KeePass обеспечивает безопасность хранения и удобство использования -- легко добавить новые секретные параметры, легко удалить не нужные, а если репозиторий попадет в руки злоумышленников, то у них окажется лишь запечатанная kdbx база :).

К сожалению, на данный момент не сущетвует плагина для IntelliJ Platform предоставляющего клиент для KeePass прямо в IDE. При этом библиотеки есть и более того, сама IntelliJ Platform использует kdbx формат для хранения, к примеру, паролей от БД.

Предлагается написать клиент к KeePass 2.* в виде плагина к IntelliJ Platform и тем самым упростить использование KeePass для локальных запусков (ну и сделать мир чуточку лучше).

Предложил: Владислав Танков (@tanvd)

Система отслеживания домашних заданий

На текущий момент мы имеем кашу из домашних заданий. Все преподаватели выкладывают его там, где удобно им: wiki, google drive, кто-то присылает на почту, а некоторые на github и gitlab. Также периодически возникают разовые события, которые надо делать, вроде заполнения каких-либо анкет. У всех заданий разные дедлайны, а также некоторые из них меняются в ходе учебного процесса. За всем этим достаточно тяжело следить, и очень легко забыть что-либо сделать.

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

  • сбор и показ всех домашних заданий в одном месте;
  • добавление графического интерфейса в виде календаря с временным рамками под каждое задание;
  • подготовка шаблонов под каждый тип ресурсов для повторного использования;
  • push уведомления об изменениях;

Скорее всего это будет некоторое серверное приложение, которое просто собирает информацию по заданным ресурсам. Возможно у некоторых ресурсов уже реализована своя система отслеживания изменений, что упростит задачу. Сами уведомления можно посылать хоть ботом в telegram, либо если серьезно подойти к вопросу, то например использовать FCM/GCM. Как интерфейс проще всего будет реализовать страничку в интернете, либо если вдруг найдутся ребята, умеющие писать под Android|IOS, то можно сделать отдельные приложения.

Предложил: Бахвалов Павел

Telegram tools for us

Пока мы учимся, вокруг нас много простой полезной информации про ИТМО, ВШЭ и CS Center. Я не всегда понимаю, где эту информацию можно узнать. С другой стороны, основной способ коммуникации у нас telegram, он есть почти у всех, также в telegram есть очень удобное api. Почему бы не сделать бота c полезным набором команд.

1. Ссылки на материалы по конкретному предмету.

2. Где поесть? ( геолокация, меню и цены) 

3. Расписание (выбрать организацию и курс)

4. Свободные аудитории. этим летом в JB был хакатон и ребята делали проект на эту тему, посмотрите, там прикольно

5. Полезная реклама (доп семинары, cs club) канал в телеге

6. Тематический стикер пак.

7. Что-нибудь ещё?

Предложил: Рябушев Антон (@rafhik)

Spaced Repetition

Все мы сталкивались с необходимостью выучить большой объём информации. Это могли быть иностранные слова, формулы к экзамену или что-нибудь другое. Обычно для заучивания мы повторяем информацию. Обычно через примерно одинаковые или случайные промежутки времени. Это неоптимальный способ запоминания. Гораздо эффективнее повторять информацию через увеличивающеся промежутки времени. К примеру вы посмотрели слово в словаре. Следующий раз вам нужно вспомнить его через час, потом через пол дня, потом через сутки, через двое, через четверо и так далее. Идея интервального повторения заключается в том, чтобы вспоминать в первую очередь то, что почти уже забылось. Сложно организовать заучивание в соответствие с этим принципом. Тут на помощь приходят информационные технологии. Программа может хранить набор карточек с изучаемой информацией и просить пользователя вспомнить то, что вот-вот забудется.

Такое приложение уже есть[1]. Но при работе с ним у меня возникало много ошибок. Иногда сохранённые карточки пропадают или перестают отображаться. Есть возможность сделать что-нибудь очень простое, но рабочее.

[1]: https://play.google.com/store/apps/details?id=com.ichi2.anki&hl=en

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

привет, Anki!

QBE

Предлагаю написать компилятор для очень простого си-подобного языка программирования с использованием QBE[1] в качестве бэкэнда. Пользы от этого кроме получения опыта разработки компиляторов, но мне уже давно хочется попробовать этот бэкэнд. Понадобится знание Си и, возможно, Haskell, если писать будем на нём.

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

[1]: https://c9x.me/compile/

Социальная сеть "НаВписке"

Как часто вы оказывались в ситуации, когда в пятницу вечером домашние задания уже закончились, а свободное время — ещё нет?

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

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

Больше метаклассов богу метаклассов

Про метаклассы есть книга «Putting Metaclasses to Work», которую никто не видел, но рекомендуют (как Кнута), особенно евангелисты Python, ведь идеи реализации метаклассов и множественного наследования позаимствованы из неё, о чём при случае пишет создатель Гвидо ван Россум. Создавалась книга в таких условиях: в городе Austin, штат Техас сотрудники IBM варганили IBM System Object Model и думают, что изменят мир, но году в 1997м случился ажиотаж по Java, в IBM передумали менять мир, и все разошлись по домам. У двух сотрудников остались нереализованные идеи, и чтоб добро не пропадало, и чтоб патентованные на десять лет вперёд секреты не разглашать, реализовали они по мотивам SOM похожую объектную модель, но с улучшениями. Эта модель и описана в книге. Книга есть в библиотеке.

Немногие знают, но к книге прилагался и код. Ажиотаж по Java был такой, что казалось, всё, что на Java, сделано на тысячелетия, и в аккурат на Java оно и реализовано. Тысячелетия не прошло, но этот код запустить уже не получается, в отличие от замечательно работающего на Windows 10 оригинального SOM. Задача: починить код под современную Java. Порешать задачи из книги.

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

Предложил: Иван Левашев

Унесённые Лобачевским

Унесённые Лобачевским (DevDays Осень 2018) — здесь добавляются подробности.

Предлагается отрендерить (стерео)панорамный видеоролик. ffmpeg умеет разбирать видео на кадры и собирать обратно. При этом можно задействовать разную математику. Таким способом (на Python) математиком Henry Segerman были сделаны панорамные видео: Сферический эффект Дросте 1, Сферический эффект Дросте 2, Переходы Мёбиуса, Портал в зеркальный мир. Лучше смотреть в VR. Математик неравнодушен и к геометрии Лобачевского: Неевклидова виртуальная реальность. Это нужно запускать в VR, а на видео — только запись.

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

Можно взять (евклидову) 3D сцену вроде двора между домами и заменить кусок пространства пространством Лобачевского. Поскольку геометрии сильно разные, корректно стыковать их получается только через достаточно универсальные геометрические формы, а это сфера и плоскость (орисфера). Вот шар воздуха можно выпилить из сцены и заменить шаром пространства Лобачевского. Далее, в видео можно кривизну менять постепенно, так, чтоб объём откачивался равномерно. А камеру отправить вращаться вокруг границы пространств, чтоб оптические эффекты показать. Оптические эффекты, есть мнение, при значительном уменьшении объёма, станут всё менее интересными, это будет сферическое зеркало с дыркой, если смотреть прямо в центр, иначе в остатки объёма лучом зрения толком не попасть. Чтобы разнообразить сцену, можно одновременно увеличивать оптическую плотность пространства Лобачевского, тогда больше лучей будет идти в центр. По-хорошему также стоит сделать так, чтобы камера погружалась в пространство Лобачевского и вылетала обратно несколько раз. Чтобы такое запрограммировать, предположително, нужен движок Ray tracing. Надо бы что-то такое взять, чтоб движок можно было спросить, какого цвета пиксель, если луч идёт из такой-то точки в таком-то направлении, и чтоб модель для движка уже была. А дальше только вызовы делать правильные.

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

Предложил: Иван Левашев

Neon Genesis Inbox

Inbox -- почтовый клиент от Google на базе Gmail, который многим очень полюбился. Он привнёс много чудесных идей, многие из которых перекочевали в Gmail, но не все. Не так давно Google объявили о закрытии проекта, который, видимо, был тестовой базой для новых фитч для Gmail и других сервисов Google. Но самую хорошую идею они никуда не интегрировали: исходить из предположения, что хороший почтовый ящик -- пустой почтовый ящик. Inbox старается не допустить, чтобы в ящике находились десятки и сотни писем. Он повышает приоритет письма, чтобы его скорее заметили и что-нибудь с ним сделали, предлагает в календаре оставить напоминание о том, что на письмо нужно ответить. Также Inbox позволяет оставлять заметки (по факту, записи в TODO-листе), которые помещаются в ящик, и Inbox обрабатывает их как письма (или письма -- как записи в TODO-листе).

Предложение: реализовать простенький почтовый клиент с этими фишечками.

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

CLI Guitar Tab Reader/Converter

Хочется сделать приложение, которое будет отображать файлы .gp[345x] в консоли. Единственный приличный проект под Linux для работы с табулатурами, TuxGuitar, предоставляет только GUI версию, остальные поделки совершенно не предназначены для использования людьми.

Если отображать не получится, можно написать конвертер в ASCII-формат и просто читать полученный txt каким-нибудь less'ом. Консольных версий таких конвертеров под Linux я тоже не встречала.

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

DualReader

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

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

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

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

Страница проекта: https://wiki.compscicenter.ru/index.php/DualReader

Планировщик еды

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

Предложила: Татьяна Бойко.

Статистика прокрастинатора

Относительно недавно на iphone появилась возможность следить за тем, сколько времени ты проводишь в различных приложениях и самой интересной информацией является статистика по соц.сетям. Но не у всех есть новый айфон(например, у меня нет), да и люди, которые большую часть времени проводят у ноутбука, скорее всего, с помощью него и отвлекаются на ютуб/твиттер/инстаграм. Предлагается написать приложение, которое трекает, на каких сайтах сидит человек и показывает ему неутешительную статистику. Как делать пока что не знаю, можно посмотреть, какую информацию предоставляет google chrome, попробовать по запросам узнавать, либо работать как upwork и делать скриншоты каждые несколько минут и анализировать скриншоты.

Предложил: Вальчук Дмитрий

Музыка нас связала

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

Были и програмки, чтоб тоннели бурить, но чем больше всяких NAT, тем более это приходило в негодность, а меж тем благодаря iPhone в iTunes всё больше и больше музыки, до которой никому, кроме владельца, не добраться.

Есть предложение актуализировать бурение туннелей. Требуется: взять Bonjour SDK, прочитать, какие DNS записи анонсятся в сеть локально запущенным iTunes. Там будут TCP-порты и какие-то идентификаторы. Надо дать возможность авторизовать приложение в соцсети, находить друзей, а дальше, через сервер, что анонсится у друзей. Для несовпадающих идентификаторов анонсить в локальную сеть те же записи, но с заменой IP:порт на незанятый локальный порт, который предусмотрительно заранее начинает прослушиваться. Когда идёт подключение, надо пробовать все STUN, TURN, и чего изобрели за последнее время, чтоб установить туннель.

Предожил: Левашев Иван

Спортивные игры

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

Предложил: Никита Винокуров

Цена удачи

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

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

Э-Детектор

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

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

Граф ингредиентов

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

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

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

Если у кого-то к этому моменту возник банальный и скучный справедливый вопрос "Зачем это нужно?". Ну кроме того что это интересно, можно придумать какое-то применение этому, например кто-то открывает ресторан Индийской кухни, наверняка ему важно какие ингридиенты чаще всего придется покупать, или даже наоборот, можно посмотреть на самые дешевые для данного места ингридиенты и понять, что за заведение выгоднее открыть и соответственно каких сотрудников нанимать. Можно придумать еще применения, но это не то чтобы очень интересно.

Проект можно делать на python или R.

Предложил: Елисеев Антон

Yes-No Image

Давайте напишем программу, в основе которой будет лежать нейронная сеть, с помощью которой можно генерировать изображение. Программа изначально генерирует рандомную разноцветную картинку, например если это .png, то это просто матрица из случайных rgb наборов, и спрашивает, нравится ли вам это изображение, на что можно ответить "да" или "нет", при каждом нажатии происходит обучение, после чего, уже обучившись, сеть генерирует новое изображение. Таким образом, после какого-то количества нажатий да/нет получится некое изображение, которое вам нравится больше, чем совсем случайное. Если постараться, то наверняка можно сделать так, чтобы генерируемое изображение красиво выглядело. Тогда можно его распечатать и подарить маме выложить в инстаграм с хештегом #YesNoImage.

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

Предложил: Елисеев Антон

Самолет

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

Предложил: Антон Елисеев

Задачи по курсу Unix и скриптовые языки

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

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

Пример 1 (light):

In: {url, awk, parallel} 3

Out: напишите скрипт, который скачивает csv таблицу из итернета и выбирает из нее какие нибудь строки, все параллельно.

Пример 2 (hard):

In: {url, wget, xpath, sleep, wall} 3

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

Реализовать генератор предлогается на sed.

PS: Возможно Антон Михайлович уже давным давно решил такую задачу.

Предложил: Антон Елисеев

Оповещатель о знакомых поблизости

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

Предложил: Сергей Иванов

Эзотерический язык программирования

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

  • со своими яркими особенностями
  • который бы знали только вы и ваши друзья
  • свой

В качестве особенностей можно выбрать: особый синтаксис, необычные токены, упор на особый функционал, необычные встроенные функции.

Предложила: Ирина Артемьева

Pastebin

<Рассуждения о полезности pastebin> :) Хочу создать кастомный pastebin на Haskell со следующими особенностями: очень минималистичный интерфейс, доступ к файлам только по ссылке, возможность добавления текста по фотографии. P.S.: Pastebin на Haskell уже существовал (lpaste), но в настоящее время он недоступен.

Предложила: Ирина Артемьева

Компьютер и дети

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

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

Клиент под Slack на Kotlin Native

Альтернатива официальным десктопным клиентам на Electron (Chromium). Здесь задокументирована публичная часть API.

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

Ping-Pong league

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

1. регистрировать участников

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

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

4. иметь возможность занести результаты очередной игры

5. выводить таблицу текущих лидеров

6. что-то еще?

Предложил: Хорошев Артем

Homework time manager

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

Предложил: Сычев Станислав

Pax-Планировщик

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

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

P.S. возможно что-то такое уже реализовано, но я просто про это еще ничего не знаю :).

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

Нотная грамота

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

Предложил: Конгоев Михаил

Crimea network analysis

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

Задача: с сайта какого-либо суда распарсить информацию о делах по статье, к примеру, 228 :) Полученных личностей постараться найти в ВК. Пользуясь vk api постараться построить граф связей между этими самыми личностями. Пользуясь, как вариант, этим или этим попробовать восстановить скрытые связи.

Предложил: Гориславский Ростислав

Угадай "$1" по "$2"

Всем нравятся тесты? Лучший способ учиться, да?

Хочется сделать приложение с тестами типа "угадай художника/поэта по картине/стихотворению".

Идея 1: ничего лишнего + на русском языке

Идея 2: автогенерация тестов = поиск "ближайших соседей" (для вариантов ответа) + подбор сложности

Идея 3: в приоритете - заинтересовать пользователей почитать/посмотреть известные вещи

Предложил: Николай Изюмов

Мотивирующий рабочий стол

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

Предложил: Кароль Петр

Редактор прошлого

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

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

Предложил: Михаил Беляков

Spell Cheker на основе Transformer

Хотим реализовать хит 2017, новую архитектуру Transformer, которая основывается на механизме attention и обгоняет традиционные CNN и RNN как минимум в задачах NLP. Считается, что ее довольно сложно правильно имплементировать и настроить. Задача как раз научиться это делать, а также разобраться в некоторых ключевых связанных с архитектурой идеях. Если все пойдет хорошо, планируется участистие в небольшом ml-competition’е на связную тему.

https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf

Предложил: Беляев Владислав

Web приложение для настольной игра ИГНИС

Ссылка на правила настольной игры.

https://cdn.mosigra.ru/mosigra.product.other/527/618/ignis.pdf

Хочется играть с другом через интернет :)

Сам себе депутат

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

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

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

Основные функции:

По подмножеству опросов найти пользователей с таким же мнением, как у тебя, или с противоположным

Создать обсуждение по подмножеству опросов

Найти самые популярные опросы

Если вопрос поднят давно, можно отследить динамику общественного мнения по нему

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

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

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

Архив

Туннель сквозь браузер

Похоже, теперь не работает.

В этих ваших Интернетах пишут, что через Quick Swap DNS и Flash сокеты можно ходить по внутренним сетевым ресурсам с устройства, запустившего скрипт в браузере. Нужно убедиться, что это до сих пор так, и реализовать проникновение в LAN. Всякие сторонние утилиты вроде клиентов SSH и Самбы не хотят знать ничего ни про какие Quick Swap DNS, Flash и все эти внутренности, им надо дать SOCKS или сырой туннель. Для HTTP(S) есть что-то похожее: BeEF Project, malaRIA, но SOCKS, похоже, публично ни у кого нет. Компоненты:

  • SOCKS сервер
  • WebSockets C'n'C сервер для общения со скриптом в браузере
  • Quick Swap DNS
  • Flash прокси, для Flash и JavaScript.

SOCKS сервер при получении команды на соединение готовит Quick Swap DNS, посылает команду в скрипт по WebSockets. Скрипт открывает сырой сокет на Flash, используя подготовленный Quick Swap DNS. Если получается, начинает передавать данные. Утилита, подключившаяся по SOCKS, должна обмениваться данными в обе стороны, как через обычный SOCKS.

Для браузера: ActionScript, JavaScript, haXe, всё, что сработает, но желателен опыт с Flash. Для сервера: вопрос открытый, но нужно, чтоб программируемые DNS и WebSockets были. Может быть, Perl, node.js, Go, Delphi Indy.

Предложил: Левашев Иван.