Rozvrh na FEL
Odevzdávací systém
Posluchači ASS
Cvičení
Týdenní přehled
Týden | Datum | Poznámka |
5 | 21. 3. | |
6 | 28.3. | |
7 | 4.4 | |
8 | 11.4. | |
9 | 18.4. | |
10 | 25.4. | |
11 | 2.5. | Výuka jako v pondělí! |
12 | 9.5. | |
13 | 16.5. | |
14 | 23.5. | Cvičení odpadá! |
Zpětná vazba
Podmínky zápočtu
Účast na cvičení
Odevzdané domácí úkoly splňující podmínky odevzdávání
Odevzdaná semestrální úloha splňující podmínky odevzdávání
Zisk alespoň 50% z bodů získatelných na cvičení, získaných dle kritérií hodnocení
Kromě účasti na cvičení je nutno odevzdat v termínu domácí úkoly a semestrální úlohu, která bude zadána v druhé polovině semestru.
Bezdůvodně lze vynechat nejvýše 2 cvičení. Před vznikem třetí absence pište email cvičícímu.
Úlohy je nutno vypracovat samostatně a vyvarovat se plagiátů! Pro vypracování semestrální úlohy a úkolů lze použít open-source knihovny jako jsou:
Knihovna však nesmí řešit úlohu jako celek.
Podmínky odevzdávání
Úlohy odevzdávejte do odevzdávacího systému BRUTE.
Úlohy se nyní odevzdávají emailem na sivakfil@fel.cvut.cz v příloze v archivu zip.
Očekávám archiv se strukturou:
└───src
├───main
└───test
└───pom.xml
Pro každou úlohu je nutné mít testy v TestNG nebo JUnit (není vyžadováno 100% pokrytí, testujte to, co je rozumné testovat)
Všechny odevzdané úlohy musí být Maven project
Kód a komentáře pište anglicky
Neodevzdávejte soubory a složky nesouvisející s projektem
Neodevzdávejte soubory generované IDE (př.: “.idea”)
Neodevzdávejte zkompilované knihovny (tj složku “target”)
Kritéria hodnocení
Kód správně řeší zadanou úlohu (kód dělá to co má)
Kód dodržuje principy správného návrhu (viz 2. cvičení)
Počet odevzdání, dotazy a konzultace nemají negativní vliv na hodnocení
Úlohu odevzdanou po deadlinu je možné uznat pro získání zápočtu, nedostanete však body
Doporučení:
1. Týden
Prezentace z prvního týdne se zadáním úkolu [pdf]
Deadline pro první úkol: Úterý 7. 3. 2017 23:59
FAQ k úkolu:
V zadání je append popsána jako metoda, která připojí prvek na začátek seznamu a prepend jako metoda, která připojí prvek na konec seznamu, což je obráceně. Za chybu se omlouvám a budu uznávat obě verze.
Java 7: metodu remove v iterátoru nemusíte implementovat (vyhoďte UnsupportedOperationException, nebo podobnou)
metoda count počítá počet prvků v poskytnuté kolekci, nikoliv ve vašem listu (je to pouze umělé cvičení na generic wildcards)
v iterátoru neimplementujte forEachRemaining, má defaultní implementaci
Nepovinná doporučená četba
Každý týden doporučím zajímavou doporučenou “četbu”, nejčastěji formou youtube přednášky, která si myslím, že stojí za to.
2. Týden - Návrhové vzory
Domácí úkol 2 - Refactoring špatného kódu na MVP
Deadline: Úterý 14. 3. 23:59 Úterý 21. 3. 23:59
Stáhněte si prosím maven projekt
hw2.zip
Změňte package a grouid v maven projektu na “ass.yourusername”
Najděte chyby porušující design principles zmíněné na cvičení a opravte je
Tight coupling
Liskov principle
…
Refaktorujte aplikaci do MVP
View bude implementovat interface
Vytvořte Presenter, který přistupuje k View prostřednictvím interface a ukládá data do repositáře
View nemá žádnou závislost na Modelu (repositáři)
Presenter si u repositáře zaregistruje notifikace, repositář na každou změnu upozorní zaregistrované Presentery (push notifikace)
Vzhled aplikace neměňte
Použijte Dependency Injection (ze cvičení, vlastní nebo knihovnu - třeba Google guice), Service locator nebo Factory
Aktualizace 5.3. 2017
Napište alespoň jeden test, ve kterém testujete Presenter. Vyzkoušíte si tak výhodu schování implementačních detailů View za interface. View mockujte jednoduchou implementací Vašeho view interface
View interface nesmí mít závislost na swing komponentách
Aktualizace 14.3. 2017
3. Týden - Multithreading a reaktivní programování
Stáhněte si: maven project k cvičení 3
Řešení 1) na pastebin
Osnova cvičení:
Domácí úkol HW3 (deadline 21. 3. 23:59):
Přejmenujte package (změňte sivakfil na svůj username!)
Implementujte ExecutorTrader, který je implementací IStockTrader a prochází všemi testy v TraderTest
Implementujte ReactiveTrader, který využívá RxJava, je implementací IStockTrader a prochází všemi testy v TraderTest (nápověda:
na pastebin)
4. Týden
Konzultační cvičení k úlohám.
Domácí úkol za 4. týden nebyl zadán, studenti měli za úkol dokončit úkoly, které mají rozpracované.
Dobrovolné cvičení (zadáno pouze na 2. cvičení, kde zbyl čas):
5. Týden
Stáhněte si prosím: cvi5
Dema, jsou řešení příklady předvedené na cvičení, neodevzdáváte je.
Tasky, jsou příklady, které řešíte na cvičení, neodevzdáváte je. Pro své obohacení je však vypracujte.
Homework je domácí práce, kterou odevzdáváte.
Demos
Optional
Try.of
Try with resource the functional way
Tasks
Homework 5
Deadline 4.4. 2017
Parsujte soubor “data.txt”, cílem je vytvořit CSV se sloupci (telefon, datum)
Soubor obsahuje data o uživatelích. Záznamy jsou přes několik řádků, počet řádků se u každého uživatele liší
Vaším úkolem je zpracovat data tak, aby se dále dali jednodše analyzovat
Telefonní čísla jsou náhodně generovaná, nevolejte na ně
K parsování telefonního čísla můžete použít regulární výraz
K parsování data použijte Joda time knihovnu
Použijte funkcionální / reaktivní programování a funkci takeWhile
Java stream nemá takeWhile funkci! Musíte použít RxJava nebo javaslang Stream
Filtrujte špatně formátovaná data
Pozor! Datum je ve dvou formátech!
EEE, MM. dd. YYYY hh:mm:ss Z
MM. dd. YY hh:mm
Nápověda jak parsovat datum:
DateTimeFormatter format = DateTimeFormat.forPattern(DATE_TIME_PATTERN).withLocale(Locale.US);
format.parseDateTime("Nejaky string s datumem")
Aktualizace 28. 3. 2017
- Nápověda, jak rozdělit soubor po tokenech
Odevzdávejte prosím na
BRUTE
Aktualizace 3. 4. 2017
Preferuji krátké čitelné řešení, před komplikovaným
Preferuji řešení, které nenačítá vstupní soubor celý do RAM, snažte se tedy zpracovávat ve streamu a nepoužívat konstrukty jako toList().blockingGet()
Může vám přijít zajímavý operátor
buffer
Někdo z vás použil na parsování telefonního čísla knihovnu
libphonenumber od Google (řešení uznávám, Vaší kreativitě se nebráním)
6. Týden - Reaktivní programování 2
7. Týden
8. Týden
cvičení na reflexe
V jaru je třída vault.Vault11, která na sobě má:
Cílem je zjistit, co za tajemství vrací metoda password2
Řešit můžete dvěma způsoby
Reflexe (lehký)
Založte nový projekt, nebo použijte nějaký stávající
Projektu nastavte jako external jar dependency stažený vault.jar
Získejte instanci třídy Vaultu: Class<Vault11>
Pomocí reflexe získejte hodnotu filedu password
Pomocí reflexe instanciujte Vault11 a zavolejte na něm password2, do kterého vložíte dekódovaný password1 (password1 je nějak zakódovaný, zjistěte jak a rozkódujte ho)
Dekompilace (těžký)
dekompilujte jar a prozkoumejte zdrojový kód
zjistěte, jak je tajemství v password2 uchováno a prolomte ho brute force útokem (relevantní kus dekompilovaného kódu si zkopírujte do nějakého projektu)
9. Týden
10. Týden
11. Týden
Není cvičení. Výuka probíhá jako v pondělí.
12. Týden
Nainstalujte si Lombok
Eclipse
Spusťte lombok.jar: java -jar lombok.jar
Vyberte kde máte nainstalován eclipse (klikněte na “Specify location”)
Klikněte na “Install/Update”
Restartujte eclipse
-
Program cvičení
13. Týden
Doplňující literatura
Zajímavé přednášky
Nepovinný rozšiřující materiál, který nebude testován u zkoušky
Backlog
Technologie, které by bylo dobré zmínit, ale za tím na ně nevyšel čas: