Table of Contents

Rozvrh na FEL Odevzdávací systém Posluchači ASS


Cvičení

Vede Filip Sivák (mailto:sivakfil@fel.cvut.cz)

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

Pište anonymně kdykoliv v průběhu semestru do google formuláře.

Podmínky zápočtu

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  
  1. 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)
  2. Všechny odevzdané úlohy musí být Maven project
  3. Kód a komentáře pište anglicky
  4. Neodevzdávejte soubory a složky nesouvisející s projektem
    1. Neodevzdávejte soubory generované IDE (př.: “.idea”)
    2. Neodevzdávejte zkompilované knihovny (tj složku “target”)

Kritéria hodnocení

  1. Kód dodržuje Google Java Style Guide
  2. Kód správně řeší zadanou úlohu (kód dělá to co má)
  3. Kód dodržuje principy správného návrhu (viz 2. cvičení)
    1. kód využívá návrhové vzory (GoF,Fowler)
  4. Počet odevzdání, dotazy a konzultace nemají negativní vliv na hodnocení
  5. Ú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:

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

Prezentace ze cvičení

Domácí úkol 2 - Refactoring špatného kódu na MVP

Deadline: Úterý 14. 3. 23:59 Úterý 21. 3. 23:59

Aktualizace 5.3. 2017

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):

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):

Minitask (řešte Task2) řešení

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.

  1. Demos
    1. Optional
    2. Try.of
    3. Try with resource the functional way
  2. Tasks
    1. User to address (java.util.Optional) řešení na pastebin
    2. Date parsing using Joda time (javaslang.control.Try) řešení na pastebin
    3. Strategy pattern using higher-order function řešení na pastebin
  3. Homework 5
    1. Deadline 4.4. 2017
    2. Parsujte soubor “data.txt”, cílem je vytvořit CSV se sloupci (telefon, datum)
      1. 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ší
      2. Vaším úkolem je zpracovat data tak, aby se dále dali jednodše analyzovat
      3. Telefonní čísla jsou náhodně generovaná, nevolejte na ně
      4. K parsování telefonního čísla můžete použít regulární výraz
      5. K parsování data použijte Joda time knihovnu
    3. Použijte funkcionální / reaktivní programování a funkci takeWhile
      1. Java stream nemá takeWhile funkci! Musíte použít RxJava nebo javaslang Stream
    4. Filtrujte špatně formátovaná data
    5. Pozor! Datum je ve dvou formátech!
      1. EEE, MM. dd. YYYY hh:mm:ss Z
      2. MM. dd. YY hh:mm
      3. 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

  1. Odevzdávejte prosím na BRUTE

Aktualizace 3. 4. 2017

  1. Preferuji krátké čitelné řešení, před komplikovaným
  2. 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()
  3. Může vám přijít zajímavý operátor buffer
  4. 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

řada 1 řada 2 celá třída

7. Týden

Cvi 7

8. Týden

9. Týden

10. Týden

11. Týden

Není cvičení. Výuka probíhá jako v pondělí.

12. Týden

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: