-
Notifications
You must be signed in to change notification settings - Fork 137
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
1,546 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Указания за разработка на курсов проект | ||
|
||
1. Проектите са индивидуални | ||
|
||
2. Mоже да изберете един от предложените проекти или да измислите и предложите свой (приема се след наше одобрение - изпратете предложението си на екипа на курса) | ||
|
||
3. Всички проекти трябва да покриват следните общи условия: | ||
- Демонстрират знания за | ||
- вход-изход с файлове | ||
- многонишково програмиране | ||
- мрежова комуникация | ||
- Имат unit тестове с поне 50% line code coverage | ||
- Имат валидация на входните данни | ||
- Имат добър обектно-ориентиран дизайн | ||
- Използват подходящи изключения за докладване на грешки | ||
- Използват подходящи структури от данни и ефективни алгоритми | ||
- Имат четлив и добре структуриран код | ||
- Ползват в имплементацията си само Java SE и външни библиотеки и API-та, изучавани в курса или изрично указани в условието. При нужда или желание да ползвате нещо допълнително, обсъдете с екипа на курса | ||
|
||
# Варианти за теми | ||
|
||
| # | Тема | | ||
|:---|:--------------------------------------------------------- | | ||
| 1 | [Authentication Server](auth-server.md) | | ||
| 2 | [Bookmarks Manager](bookmarks.md) | | ||
| 3 | [Dungeons Online](dungeons.md) | | ||
| 4 | [Uno](uno.md) | | ||
| 5 | [Food Analyzer](food-analyzer.md) | | ||
| 6 | [Split(NotSo)Wise](splitwise.md) | | ||
| 7 | [Spotify](spotify.md) | | ||
| 8 | [Torrent Server](torrent.md) | | ||
| 9 | [Password Vault](password-vault.md) | | ||
| 10 | [Todoist](todoist.md) | | ||
| 11 | [Cryptocurrency Wallet Manager](cryptocurrency-wallet.md) | | ||
| 12 | По ваш избор | |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
# Bookmarks Manager :paperclip: | ||
|
||
## Условие | ||
|
||
Създайте приложение за удобно съхранение и организиране на линкове (*bookmarks*). | ||
|
||
### Сървър | ||
|
||
Предоставя следните функционалности на клиента: | ||
- регистриране и вход с потребителско име и парола | ||
- добавяне на нови bookmarks | ||
- премахване на bookmarks | ||
- групиране на bookmarks | ||
- търсене на bookmarks по заглавие или ключова дума | ||
|
||
:bulb: Bookmark-ите на потребителите трябва да се съхраняват във файлове на сървъра. | ||
|
||
:bulb: Всеки добавен bookmark трябва да има *заглавие*. То трябва да отговаря на съдържанието на **<title\>** таг-а от `html`-а на страницата. | ||
|
||
:bulb: При добавяне на нов bookmark, сървърът трябва да `extract`-не ключовите думи от страницата, за да могат потребителите да търсят по тях. | ||
|
||
- Ключовите думи са най-използваните думи в страницата. Погрижете се предварително да премахнете пунктуационни знаци, специални символи, `stopwords` и т.н. | ||
- Опитайте се да сведете думите до техните корени, използвайки някой [`stemming`](https://en.wikipedia.org/wiki/Stemming) алгоритъм. Най-простият от тях, който можете да използвате, е `Suffix-stripping algorithm`: | ||
> - if the word ends in 'ed', remove the 'ed' | ||
> - if the word ends in 'ing', remove the 'ing' | ||
> - if the word ends in 'ly', remove the 'ly' | ||
- За лесно `parse`-ване на `html`, може да използвате библиотеката [JSoup](https://jsoup.org/). | ||
|
||
### Клиент | ||
|
||
Клиентът трябва да има `command line interface` със следните команди: | ||
|
||
|
||
#### Регистриране | ||
```bash | ||
register <username> <password> | ||
``` | ||
Регистрира нов потребител в приложението с име и парола | ||
|
||
#### Вход | ||
```bash | ||
login <username> <password> | ||
``` | ||
|
||
#### Създаване на нова група за съхранение на bookmarks | ||
```bash | ||
new-group <group-name> | ||
``` | ||
|
||
#### Добавяне на нов bookmark в група | ||
```bash | ||
add-to <group-name> <bookmark> {--shorten} | ||
``` | ||
Добавя bookmark в конкретна група. Aко опцията `--shorten` е налична, сървърът трябва да съкрати оригиналния bookmark, използвайки API-то на [Bitly](https://dev.bitly.com/api-reference), документирано [тук](https://dev.bitly.com). | ||
|
||
#### Премахване на bookmark от група | ||
```bash | ||
remove-from <group-name> <bookmark> | ||
``` | ||
|
||
#### List-ване на всички bookmarks | ||
```bash | ||
list - извежда списък с всички линкове на потребителя | ||
``` | ||
|
||
#### List-ване на всички bookmarks от група | ||
```bash | ||
list --group-name <group-name> - извежда списък с всички линкове от дадената група | ||
``` | ||
|
||
#### Търсене на bookmarks по тагове | ||
```bash | ||
search --tags <tag> [<tag> ...] | ||
``` | ||
#### Търсене на bookmarks по заглавие | ||
```bash | ||
search --title <title> - връща всички линкове, в чиито заглавия се среща <title> | ||
``` | ||
|
||
#### Изчистване на невалидни линкове | ||
```bash | ||
cleanup - премахва всички bookmarks, чиито линкове вече не са валидни (т.е при /GET на bookmark-a се връща статус код 404 Not Found) | ||
``` | ||
|
||
#### Добавяне на bookmarks от Chrome | ||
```bash | ||
import-from-chrome - добавя всички bookmarks от Google Chrome | ||
``` | ||
|
||
`Google Chrome` съхранява вашите `bookmarks` на файловата система в `json` формат. Файлът с `bookmarks` се намира в различни директории в зависимост от операционната система: | ||
- **Windows** - `AppData\Local\Google\Chrome\User Data\Default` | ||
- **Linux** - `~/.config/google-chrome/Default/` | ||
- **MacOS** - `/Users/<Your UserName>/Library/Application\ Support/Google/Chrome` | ||
|
||
## Съобщения за грешки | ||
|
||
При неправилно използване на програмата, на потребителя да се извеждат подходящи съобщения за грешка. | ||
|
||
При възникване програмна грешка, на потребителя да се извежда само уместна за него информация. Техническа информация за самата грешка и stackтraces да се записват във файл на файловата система - няма определен формат за записване на грешката. | ||
|
||
Например, нерелевантно е при команда на потребител и възникнал проблем с мрежовата комуникация, да се изписва грешка от вида на "IO exception occurred: connection reset", по-подходящо би било "Unable to connect to the server. Try again later or contact administrator by providing the logs in <path_to_logs_file>". | ||
|
||
При възникване на програмна грешка от страна на сървъра, подходящо съобщение се изписва на конзолата и във файл, като освен това, във файла се записва допълнителна информация (например, при заявка на кой потребител е възникнала грешката, ако въобще е обвързана с потребителско взаимодействие) и stacktraces. | ||
|
||
|
||
## Submission | ||
|
||
Качете в грейдъра `.zip` архив на познатите директории `src` и `test`. Ако пакетирате допълнителни файлове (които не са .java), те трябва да са в корена на архива, на нивото на `src` и `test`. | ||
В грейдъра няма да има автоматизирани референтни тестове. | ||
Проектът ви трябва да е качен в грейдъра не по-късно от 18:00 в деня преди датата на защитата. | ||
|
||
Успех! |
Oops, something went wrong.