Devdays Весна 2018 — различия между версиями
Строка 162: | Строка 162: | ||
== Эмулятор собеседования == | == Эмулятор собеседования == | ||
+ | [[Try your skills]] | ||
+ | |||
Написать десктопное приложение, эмулирующее прохождение собеседования. | Написать десктопное приложение, эмулирующее прохождение собеседования. | ||
Версия 10:52, 3 мая 2018
Чтобы править эту страницу, нужно залогиниться в Sewiki. Тогда сверху будет кнопочка "править". Если у вас нет учётной записи — напишите Игорю желаемый логин.
Редактировать wiki одновременно нескольким людям стоит осторожно: после внесения правки проверьте, что она действительно сохранилась.
Содержание
- 1 Пример
- 2 Квест-бот для телеграмма
- 3 Opus Magnum на Android
- 4 Игрушка RogueLike на Python
- 5 Coverage App
- 6 /bin/init на Rust
- 7 Парсер dts-файлов на Haskell
- 8 surf с клавиатурой
- 9 Консольный stepik
- 10 J на GPU
- 11 Игра под NES
- 12 Камень, ножницы, бумага
- 13 Эмулятор собеседования
- 14 Читалка формул из латеховских исходников
- 15 Читалка с навигацией
- 16 Download Hell
- 17 Благотворительность 2.0
- 18 Smart-contract authorization module
- 19 Password patterns
- 20 Public Channel Viewer
- 21 Метки
- 22 Загрузка
- 23 Голосование
- 24 Ar shooter
- 25 Умные Звонки
- 26 Visual bytecode
- 27 Распознавание графа из рисунка
- 28 StickFighter
Пример
Описание
Квест-бот для телеграмма
Есть культовая серия игр конца 90-х - первой половины 00-х "Космические рейнджеры". Один из компонентов игры - текстовые квесты, очень увлекательная и разнообразная штука от простых логических задач в стиле загадки Эйнштейна до симуляторов дальнобойщика и зэка. Было бы здорово портировать эти квесты в телегу, неплохая такая развлекаловка. Презентация проекта в формате pdf
Кодим на питоне.
Предложил: Чернышев Ярослав
Opus Magnum на Android
Есть замечательная игрушка Opus Magnum (страница в Steam). Цель игры -- программировать реакторы, которые преобразуют одни химические соединения в другие. Каждый уровень игры представляет из себя бесконечное гексагональное поле на котором можно размещать манипуляторы, которые можно программировать, размещая на поле различные команды (подхватить атом, повернуть атом, двигаться в другом направлении, объединить атомы и другие).
Для управления всем, что происходит в игре достаточно одной мыши, на прохождение уровня уходит от нескольких минут до нескольких часов (в зависимости от сложности поставленной задачи), что делает игру подходящей для мобильных платформ (можно посидеть подумать, пока едешь из Парнаса в Автово).
Идея: портировать Opus Magnum на Android.
Технологии: Android, Java/Kotlin
Предложил: Новожилов Дмитрий
Игрушка RogueLike на Python
Есть семейство игрушек RogueLike. Игрушек в этом семействе много, они популярны, но не позволяют сохранятся после гибели персонажа. Хочется сделать игрушку, которая не будет удалять все сохраненные данные после смерти персонажа.
Предложил: Никулин Данил
Coverage App
Карты путешествий это здорово, но что делать, если ты путешествуешь только не дальше своей страны/города? (Грустно, но бывает.)
Есть ряд приложений, в которых отмечаешь, в каких странах ты был и какие хотел бы посетить. Можно сделать аналог, но в пределах города. Появится возможность отмечать места, где уже был (с комментариями/оценками) и куда хотел бы сходить, а также следить за статистикой в виде процента изучения города -- часть города, где ты когда-либо бывал (мб с градацией по количеству посещений), в масштабе улиц, площадей, домов.
Предложила: Валерия Горячева
/bin/init на Rust
systemd -- ужасающий кусок софта, но он уже захватил все крупные дистрибутивы Линукса. И это объяснимо: его подход к организации сервисов в самом деле довольно удобный по сравнению с теми ad-hoc-решениями, которые принимались раньше.
Можно попытаться сделать легковесный init без ужасных частей systemd, но умеющий разбирать service-файлы. В дополнение к этому, можно его написать на Rust, чтобы не было глупейших уязвимостей с переполнением буфера, которыми славен systemd.
Халанский.
Парсер dts-файлов на Haskell
В ядре Linux для ARM для описания набора доступных на системе устройств используются dts-файлы (Device Tree Source File). Но с ними есть такая проблема, что инструментальной поддержки у них немного. dtc (Device Tree Compiler) откровенно аскетичный, и если в dts синтаксическая ошибка, он скажет что-то не сильно более содержательное, чем "error". Логические же ошибки он и вовсе не проверяет. Предложение такое: задействовать монадические парсеры и показать суровым ядрописателям, что даже Хаскелль на что-то годен.
Халанский.
surf с клавиатурой
All software sucks. Кроме, конечно, софта от https://suckless.org/. В частности, утверждается, что крохотный браузер https://surf.suckless.org/ does not suck. В самом деле, в подходе suckless есть какая-то логика: чем меньше софта, тем меньше что может suck.
Но понятно также и то, что всё, чем можно управлять только мышкой, -- если это не инструмент рисования диаграмм или пользовательских интерфейсов -- фундаментально sucks. Хочется исправить surf так, чтобы он заслуживал звание suckless и поддерживал базовые keybinding'и, знакомые любому любителю vimperator и иже с ними, а не только мышекликанье.
Уже имеются наработки от сообщества surf, и найти их можно прямо на странице surf, но они обладают рядом важных ограничений, из-за которых без мышки нельзя обойтись даже близко: к примеру, нельзя с клавиатуры переводить фокус на поля ввода; или открывать ссылки в новом окне; продолжать можно долго.
Халанский.
Консольный stepik
Stepik -- сайт с хорошими курсами, это у него не отнять. Но веб-интерфейс у него довольно неудобный. Он очень медленный и ведёт себя местами странно. И многие вещи приятнее делать прямо у себя дома, в родной консоли. К примеру, отсылать задания. Или читать комментарии. Зачем для всего этого нужно ждать, пока все страницы Степика соизволят прогрузиться?
Stepik предоставляет API: https://github.com/StepicOrg/Stepik-API
Оно, на первый взгляд, более-менее полное, раз на нём работают даже мобильные приложения платформы. Также с его помощью уже создали несколько удобных вещей, к примеру, тот же отсылатель кода: https://github.com/StepicOrg/SubmissionUtility. Но всё же хотелось бы вылезать в веб-интерфейс ещё реже. Кажется вполне реальным скачивать видео, отсылать задания, получать комментарии, вообще не пользуясь браузером.
Халанский.
J на GPU
Есть язык J, идейный последователь APL.
APL -- язык, на котором Conway's Game of Life записывается так (надеюсь, я случайно не взломаю wiki, напечатав этот текст):
life←{ ⍝ John Conway's "Game of Life". ↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵ ⍝ Expression for next generation. }
J -- язык, на котором эта игра записывается так:
l=:[:+/(3 4=/[:+/(,/,"0/~i:1)|.])*.1,:]
Суть этих языков в том, что они ориентированы на массивы данных -- как numpy, или R, или GNU Octave, но более радикально и/или консистентно: массивы данных являются *фундаментальной* сущностью в этих языках, такой же фундаментальной, как, к примеру, функции. Более подробно о массиво-ориентированных языках можно почитать тут: http://www.ccs.neu.edu/home/shivers/papers/rank-polymorphism.pdf, но вот базовый пример.
a =: 5 5 $ i.25 NB. Just a 5x5 matrix a 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 < a NB. Put the whole matrix into a box ┌──────────────┐ │ 0 1 2 3 4│ │ 5 6 7 8 9│ │10 11 12 13 14│ │15 16 17 18 19│ │20 21 22 23 24│ └──────────────┘ < "2 a NB. Do it for two dimensions (matrix, basically the same as before) ┌──────────────┐ │ 0 1 2 3 4│ │ 5 6 7 8 9│ │10 11 12 13 14│ │15 16 17 18 19│ │20 21 22 23 24│ └──────────────┘ < "1 a NB. Do it for one-dimensional arrays (rows) ┌─────────┬─────────┬──────────────┬──────────────┬──────────────┐ │0 1 2 3 4│5 6 7 8 9│10 11 12 13 14│15 16 17 18 19│20 21 22 23 24│ └─────────┴─────────┴──────────────┴──────────────┴──────────────┘ < "0 a NB. Do it for zero-dimensional arrays (scalars) ┌──┬──┬──┬──┬──┐ │0 │1 │2 │3 │4 │ ├──┼──┼──┼──┼──┤ │5 │6 │7 │8 │9 │ ├──┼──┼──┼──┼──┤ │10│11│12│13│14│ ├──┼──┼──┼──┼──┤ │15│16│17│18│19│ ├──┼──┼──┼──┼──┤ │20│21│22│23│24│ └──┴──┴──┴──┴──┘
То есть map (и, на самом деле, многие другие концепции) получаются естественным образом.
Сейчас на APL пишут мало. На J тоже, но всё же побольше. При этом APL на GPU умеют выполнять, а J -- нет, о чём сообщество J сильно жалеет: в конце концов, ориентированные на массивы языки -- самый очевидный кандидат для выполнения на GPU.
Давайте попробуем исполнять на GPU какое-то подмножество J. Всё не получится: язык слишком крупный http://www.jsoftware.com/docs/help806/dictionary/vocabul.htm и с большим количеством граничных случаев, которые за несколько дней не выйдет покрыть. Но если язык будет парситься по синтаксису J и некоторые операторы будут работать, это уже хорошее начало. Технологии -- C, Rust или их помесь, а также что-нибудь для работы с GPU.
Халанский.
Игра под NES
Иногда так устаёшь сидеть за компьютером, что хочется его выключить и пойти заняться чем-нибудь другим, забыть про все технологии, ощутить единство с природой и отдалиться от любых достижений технологического прогресса. К примеру, поиграть в Денди (aka NES/Famicom). Но, за неимением телевизора, это недостижимо -- остаётся только довольствоваться отголосками мечты.
Отголосок может, в частности, заключаться в создании своей собственной игры, которую можно хотя бы запустить в эмуляторе. Хотя бы, скажем, вот такой: https://www.youtube.com/watch?v=71JNREDtUQM
Технологии: Си, hex-редактор, терпение и спокойствие перед лицом чистого ужаса.
Халанский.
Камень, ножницы, бумага
Иногда нужно быстро решить серьёзный вопрос выбора одного человека из нескольких, и сделать это можно скинувшись на раз-два-три. Предлагается написать программное обеспечение (для компа или телефона), позволяющее сделать это дистанционно. Понятно, что в таких вопросах доверять нельзя никому, поэтому необходимо реализовать протокол, гарантирующий каждому участнику честность процесса. Пример атаки на наивный протокол: участник смотрит, что выбрали остальные, и быстренько подстраивает свой выбор оптимальным образом.
Предложил: Егоров Антон
Эмулятор собеседования
Написать десктопное приложение, эмулирующее прохождение собеседования.
Перед пользователем ставится задача и дается время на ее решение (не больше 30 минут). При этом код необходимо писать в чем-то похожем на Google Docs, то есть нет никакой подсветки синтаксиса либо автодополнения.
Так же есть чат, в котором будет проходить взаимодействие с собеседущим, например, он может спросить о асимптотики решения или может задать вопрос по теории алгоритмов (необходимо ввести название алгоритма, его асимптотику, либо выбрать правильный вариант ответа в тесте).
При этом учитывается, что во время прохождения собеседования пользователь должен постоянно что-либо делать: если пользователь не пишет всевдокод/код, то должен отвечать на вопросы.
Будет возможность скомпилировать решение и проверить на тестах. Задачи можно взять из книги Cracking the Coding Interview, Gayle Laakmann.
Предложила: Мурычева Наталья
Читалка формул из латеховских исходников
Иногда, когда идешь куда-то или слишком устал, читать становится совсем неудобно, и тогда хочется послушать, о чем идет речь в задаче.
Идея: переводить формулы в текст (желательно не слишком формальный, чтобы слушать было приятно), и потом передавать это какой-либо читалке для озвучивания.
Предложила: Колесниченко Лара
Читалка с навигацией
Вот читаю я статью, вижу ссылку на таблицу/рисунок/список литературы, перехожу по ней, а вернуться обратно возможности нет, приходится перелистывать статью и искать нужное место. Давайте напишем читалку под Android, в которой есть возможность не только переходить по ссылке в статье, но и наоборот, из мест в статье, на которую есть ссылки, переходить на позиции, откуда эти ссылки ведут.
Предложил: Кузнецов Александр
Download Hell
Часто мы качаем что-то с интернета и оно попадает в папку Downloads, и эта папка со временем превращается в помойку, но при этом часть файлов может быть всё-таки нужной, но искать их среди кучи хлама - не всегда приятно. Давайте попробуем "умным" образом автоматизировать это дело -- программа будет пытаться автоматически распихивать новые файлы по директориям, основываясь на истории предыдущих перемещений (хотелось бы чуть менее тривиально, чем просто группировать по формату файла - существующие известные мне решения так и делают).
Предложил: Макеев Владимир
Благотворительность 2.0
Люди постоянно тратят деньги на всякий виртуальный стаф. Давайте поможем людям тратить деньги на более полезные вещи. Я предлагаю написать небольшое android-приложение, где пользователи в пару кликов смогут пожертвовать на наиболее понравившийся им проект.
Технологии: Java/Kotlin, android
Предложил: Кузиванов Николай.
Smart-contract authorization module
Сейчас модно говорить о блокчейне и смарт-контрактах, как это круто и полезно, что за этим будущее, и что технология имеет кучу применений в различных сферах. Одним из полезных и жизненных применений смарт-контакта является аутентификация пользователей - абсолютно анонимно и практически неугоняемо злоумышленниками. Так как технология относительно новая, все пилят свой велосипед. Было бы здорово сделать готовый модуль (например, для Django), который позволял бы из коробки сделать на сайте смарт-авторизацию.
Технологии: Python, Javascript, Solidity
Предложила: Шеметова Екатерина
Password patterns
Известный факт - если пароль составлен по какому-либо правилу (даты, имена, 3 буковки + 4 цифры и т.д.), то можно существенно облегчить перебор и соответственно быстрее взломать аккаунт. С точки зрения "светлой стороны" - при соответствии пароля паттерну можно сообщить пользователю о ненадёжности такого пароля. Давайте используем наши новые знания по ML, проанализируем базы слитых паролей разных ресурсов и попробуем поискать такие паттерны.
Предложила: Шеметова Екатерина
Public Channel Viewer
В блокируемом, блокируемом, но так и не заблокированном всеми известном мессенджере есть возможность создавать публичные каналы. Иногда это удобно, чтобы не писать одновременно одно и тоже нескольким людям. И тогда все, кто хочет, смогут подписаться и прочитать. Однако, в вашем окружении всегда найдутся люди, которые по тем или иным причинам не могут/не хотят пользоваться этим мессенджером. И чтобы не пересказывать или пересылать все сведения из канала им лично, было бы удобно создать сервис, где можно ввести ссылку и увидеть весь контент этого канала.
Собственно идея: создать сайт/приложение, который по ссылке на публичный канал будет отображать все записи и изображения оттуда без регистрации и смс.
Предложила: Орищенко Александра
Метки
Мы снимаем видео занятий. Но нам нужно научиться фиксировать время, когда преподаватель переключает слайды или переходит к другой теме. Тогда научимся:
- генерировать «contents» в описании на ютюбе
- объединять снятую лекцию с презентацией в одном видео
Тогда станет проще использовать видео-материалы, например, при подготовке к сессии.
Игорь
Загрузка
И магистры, и бакалавры снимают видео занятий, но пока что у всех групп одинаковая проблема — уходит много времени на заливку и пост-обработку видосов. Что мы делаем:
- Группируем файлы с карты памяти (руками)
- Конвертируем, делаем пост-обработку (руками)
- Заливаем на ютюб (руками)
- Указываем заголовки, описания, плейлисты (руками)
- Отправляем в телеграмм
Хочется минимизировать количество рук, чтобы можно было вставить флешку в ноутбук, а дальше вся грязная работа произошла сама собой.
Игорь
Голосование
Когда мы группой устраиваем опросы в телеграме, то используем @vote
и @pollrBot
, которые позволяют выбрать только один вариант. Но что если половина группы хочет Пепси, половина — Колу. Но все не против чая?
Метод Шульце более точно отразит, чего мы хотим — в этом примере победит чай, который всех устраивает. Предлагается попить чаёк, поразбирать математику и написать нового бота.
Игорь
Ar shooter
Предлагается написать шутер с дополненной реальностью. Есть библиотека Openpose, позволяющая распозновать узловые точки тела человек, работает достаточно быстро и точно, но не достаточно быстро что бы работать на мобильных устройствах. Предлагается написать мобильное приложение и серверную часть, которая будет разворачиваться на локальной машине игроков и обрабатывать потоковое видео/картинки с мобильных приложений.
Openpose: https://github.com/CMU-Perceptual-Computing-Lab/openpose
Лапко Данила
Умные Звонки
Когда мы разговариваем по телефону, иногда бывают ситуации, когда мы забываем какие-то детали. Предлагаю написать приложение, которое конспектирует весь разговор в текстовый документ и (возможно) выделяет какие-то ключевые моменты и ставит напоминания.
Калинин Владислав
Visual bytecode
Все знают, что jvm — stack based vm, т.е. при выполнении байткода оперирует с регистрами, а со стеком, хотелось бы этот стек визуализировать, чтобы можно было легче и быстрее понимать, что делает данный байткод
Алексей Зубаков
Распознавание графа из рисунка
Иногда хочется нарисовать какой-нибудь красивый граф для домашки или конспекта по алгоритмам, но делать это с помощью tikz-а лень, а вставлять картинку неловко и непрактично.
Предлагается сделать инструмент, который по рисунку графа сможет сгенерировать код (например, код tikz-а), рисующий похожий граф.
Голышев Роман
StickFighter
Предлагается написать fighter исполюзуя в качестве персонажей stickman
Гостевский Дмитрий