Идеи за проекти

  1. В тази тема ще пускаме абстрактни идеи за проекти. Не е необходимо да изберете една от тези теми за проектите си, и самите идеи не са съвсем "цели". В идеалния вариант, се надяваме сами да си измислите проект, който имплементира нещо, което ви е интересно или полезно. Ако не можете да измислите нещо, ок сме с това да подхванете някоя от тези идеи.

    Имайте предвид, че идеите са нарочно непълни и мъгляви. Дори да изберете нещо от тук, бихме искали да измислите вариации или добавки. Свободни сте и да обсъждате идеите, и да предлагате собствени (които може да вдъхновят колегите ви).

    Ако търсите популярни библиотеки по категория, един източник е Awesome Rust.

    (Бележка: Все още не сме решили докога ще ви е крайния срок за избор на тема, но ще е по някое време през януари. Размишлявайте отсега!)

  2. Идея: Image processing

    Подобно на един стар мой университетски експеримент: https://github.com/AndrewRadev/image-processing. Ruby не е от най-подходящите езици за имплементиране на CPU-intensive image processing алгоритми, но Rust определено е :).

    Имайте предвид, че има добри библиотеки за обработка на картинки в Rust: https://github.com/PistonDevelopers/image. Това е причината идеята да е по-скоро мъглява. Какво можете да добавите, което не идва безплатно от библиотеката?

    • Други и интересни алгоритми, които не идват наготово?
    • Обработка на анимирани картинки? (Може да погледнете https://gif.ski/, и https://crates.io/crates/engiffen)
    • Мощен command-line interface подобен на imagemagick, който позволява композиране на команди, и интелигентно конвертиране на файлове?
    • Графичен интерфейс, с който ще постигнете нещо като photoshop-lite, за лесно визуално crop-ване, resize-ване и прочее операции, с live preview и undo? (Използвайки, примерно, gtk-rs)
    • Web service, който обработва картинки спрямо url-а, on the fly? Което оптимизира картинките за web и позволява създаване на предефинирани, именувани композиции от филтри, автентикация с токени...

    За всички идеи по-горе -- може ли алгоритмите да се изпълняват паралелно? Било то всеки алгоритъм сам за себе си, или single-thread алгоритми върху batch-ове от файлове?

  3. Идея: Desktop приложение

    GUI-тата в Rust все още не са много стабилни, но има добри примери за простички приложения, направени с тях. Ето няколко:

    (Собственика на repo-тата има tutorial за писане на GTK приложения с Rust: https://mmstick.github.io/gtkrs-tutorials/.)

    (Не е задължително да използвате GTK, но като че ли е най-стабилния вариант в момента.)

    Какво интересно/полезно нещо можете да измислите, което да е удобно за употреба в графичен интерфейс? Имайте предвид, че искаме да упражнявате Rust повече, отколкото да упражнявате GUI-та. Каквото и да измислите, целете интерфейса да е минимален, а повечето ви работа да е по самата имплементация отдолу. Нещо повече, тази идея е по-скоро wildcard, нещо, което може да комбинирате с каквото и да е друго -- игра, чат, image processing...

    Внимавайте обаче със стабилността на GUI-тата! Експериментирайте, преди да commit-нете към някакво desktop приложение, да не се окаже, че ви липсва нещо важно!

    Надяваме се, че ще можем да направим поне една лекция, в която правим някакво просто GUI, но нищо не обещаваме.

  4. Идея: Игра

    Rust има потенциал като език за писане на игри. Вече се използва за немалко indie игрички, и има библиотеки, които помагат. Може да пробвате да използвате нещо hardcore като Piston, но ви предупреждаваме, че вероятно ще е тежичко, освен ако вече нямате някакъв опит с писането на игри.

    Препоръчваме ви да опитате малката библиотечка ggez за правене на 2D игри. Лекция, която може да ви зариби: https://www.youtube.com/watch?v=str_mex__0M

    Примерна игра с WASM и Rust в браузър : https://aochagavia.github.io/blog/rocket---a-rust-game-running-on-wasm

    Играта, която е представена във видеото, Beyonce Brawles, е добър пример за нещо, което бихме приели. Не точно нея, разбира се, предвид, че вече е направена :)

    Каква игра може да направите?

    • 2D platformer, в стил супер марио?
    • Астероиди с някаква интересна врътка (Като играча може би е Ferris the Crustacean? :))
    • Plants vs Zombies?
    • Turn-based RPG?
    • Някаква имплементация на физическа игра (със зарове или нещо такова)?

    Варианти има и няма да търсим кой знае колко polish -- целта ни, в крайна сметка, е да пишете Rust. Стига да имате смислен модел на играта, типове и трейтове, които интелигентно обвиват модела на играта, няма да настояваме за fancy графика или балансирани противници.

    Надяваме се, че ще можем да направим поне една лекция, в която правим някаквa простa игра с GGEZ, но нищо не обещаваме.

  5. Идея: Конзолно приложение

    Трето домашно, Hangman, имплементира конзолна игра. Бихте могли да имплементирате друга, по-сложна конзолна игра. Може би...

    • Adventure, в стил Zorg, "go north -> You have been eaten by a grue"?
    • Лабиринт, който се рендерира на екрана с ansi-art чертички (https://en.wikipedia.org/wiki/Box-drawing_character). Може би с противници, които се движат, когато играча се движи, лабиринт, който е затъмнен, освен в определен радиус от играча?
    • Вие сте крал/кралица на средновековно кралство! Всяка година трябва да решите дали да купите или продадете територия, колко жито да засадите, и колко да запазите за храна, трябва да се справяте с дипломация, войни и болести. Всяка година, избирате как да си алокирате ресурсите, и играта симулира какво се случва през годината.

    Какво друго може да имплементирате в конзола? Може би с curses/ncurses, може би просто със стандартен терминален output?

    • Typing tutor? (вдъхновено от https://twitter.com/phansch/status/932944244880396288)
    • Текстов редактор? Достатъчно прост такъв (nano-подобен) може да е по-лесен, отколкото си мислите. (ако успея, ще вмъкна една лекция с простичка имплементация, но нищо не обещавам)
    • Log viewer? Ще трябва да поддържа големички файлове (да кажем, стотици хиляди редове), да ги tail-ва in realtime, може би по няколко наведнъж. Може би с интерфейс за филтриране на log entries по определени параметри? Парсене на JSON логове?
    • Интерактивна конзола за преименуване/организиране по директории на музика/снимки/сериали? С редактиране на метаданни? С паралелно изпълнение на операциите върху огромни комплекти от данни (note: експериментирайте върху копия на истинските си файлове, да не ги омажете без да искате :))
  6. Идея: Интерпретатор за прост език

    Да се направи прост интерпретатор на език, който си идва с lexer и parser или използва вече съществуваща библиотека. Тук ще трябва да си играете с конструиране и обхождане на дървета, споделен state за environment-ите на области код...

    Основната част на такъв проект ще е eval функция, която изчислява стойността на AST изрази както и repl, който ще е конзолно приложение. Ок е интерпретатора да е на някакъв вариант на lisp, макар че можете и да си имплементирате някой простичък императивен език. Subset на lua или javascript, например?

    Какво още можете да измислите?

    • Компилиране на езика до bytecode, който е съвместим с LLVM?
    • Интелигентен REPL, който да ви дава инструменти за инспектиране на мета-информация за типове и данни? (като командите на ghci или мощните функционалности на pry)

    Медъла има доброто намерение да демонстрира интепретатор на lambda calculus на лекции, но нищо не обещаваме :).

Трябва да сте влезли в системата, за да може да отговаряте на теми.