# Указания към проектите за курса "Програмиране с Python"

## Какво е проект ?

​	Въпреки че темите за проекти са отворени, можем да ви дадем няколко идеи какво очакваме. Ще разделим проектите на няколко типа, и ще дадем общи насоки за всяка от тях:

#### Общи насоки:	

- Очакваме различни функционалности, в зависимост от темата. Примерно, ако правите приложение за бележки през конзолата, очакваме да имате начин за запазване на бележки, категоризиране, напомняния и т.н. 
- Проектите ви трябва да могат да бъдат пуснати на друга машина - кратък INSTALL.md или инструкции в README.md биха ни свършили работа
- Може да използвате всякакви библиотеки, но очакваме да имате достатъчно функционалност написана от вас
- Трябва да имате тестове
- Трябва проекта да е качен в Git (Github, Gitlab, Bitbucket, т.н.)
- Добър error handling е очакван
- Очакваме демонстрация на проекта - 5-10 минути демонстрация и 5 минути за въпроси

## Примерни идеи и насоки към тях

1. ### Уеб приложение

   - Може да използвате Flask, Django, или някакъв друг web framework
   - Ще се оценява частта написана на Python (т.е. ако използвате Angular/JS/TS за front-end-а, а backend-а е на Python, ще оценяваме само Python частта)
   - Може да напишете и само backend/API, но очакваме да може да демонстрирате работата му по някакъв начин

2. ### Конзолно приложение

   - The sky is the limit here - може да направите много неща, в зависимост от вашите интереси
   - Очакваме да имате адекватен CLI
   - Четене/писането от файл е препоръчителна функционалност

3. ### Desktop приложение

   - Въпреки, че в рамките на курса няма да успеем да разгледаме примери за GUI framework, остава възможността някой да направи desktop приложение с GUI
   - Може да използвате PySimpleGui, TKInter, PyQT или друг framework
   - Няма да оценяваме красота на интерфейса, но ще оценяваме начина по който е написан

4. ### Игри

   - Както и при desktop приложенията, въпреки че не сме разглеждали framework за игри, все пак даваме възможност за създаване на игра
   - Може да използвате PyGame или други
   - Може и да пропуснете графичния интерфейс, и да направите игра, която да се играе в конзолата (текстов интерфейс е валиден вариант), но тогава очакваме малко повече функционалности

5. ### Друго

   - Ако проекта ви не се вписва в никоя от горните 4 категории - поздравления, ще правите нещо много интересно
   - Ако ще ни показвате някакъв проект свързан с AI/ML - ще се изкефим, но очакваме нещо повече от невронна мрежа с `pytorch`, `keras` или `tensorflow`
   - Ако имате идея да напишете библиотека за нещо което го няма - очакваме много добро пакетиране, разделение на модули, тестове, добри абстракции и error handling
   - Wrap-ването на някаква C/C++ библиотека в Python също би било интересен проект, но ще очакваме малко повече от един wrapper 

## Как да си избера тема проект ?

1. Измисляте си тема
2. Записвате я в канала `projects` в Дискорд
3. Обсъждате я с нас
4. Одобряваме я или я пращаме за rework

​	**Крайният срок за избирането на тема е края на семестъра - 19.01.2023**. **Крайният срок за проектите е 11.02.2023**

## Какви са критериите за проект ?


**Total**: 40 точки

- **Защита** - 10 точки
- **Функционалност** - 10 точки
- **Разделение на модули** - 3 точки
- **Използване на "Питонизми"** - 3 точки
   - list comprehensions, generators, any/all, slicing

- **Използване на type hints** - 3 точки
   - Автоматично оценено, чрез `mypy`
- **PEP-8** - 3 точки
   - Автоматично оценено, чрез `pylint`
- **Тестове** - 5 точки
   - Автоматично оценено, чрез `coverage`
- **requirements.txt** - 1 точка
   - Автоматично оценено

- **Git** - 1 точки
- **README** - 1 точка
