středa 25. června 2014

VUT FIT – 8. semestr / 1. MGR

Wow, 8. semestr na VUT FIT. Dal mi zabrat, ale je konečně za mnou.

Jak tento semestr charakterizovat? Byl to jeden velký meeting (hlavně díky MPR a ostatním teamovým projektům). V knihovně jsem strávil mnohem více času než kdekoli jinde a to jsem na bakaláři pořádně nevěděl, že nějakou knihovnu s konferenčkama máme. :-D Hmm tak mě napadá, stejně jsem si tam nepůjčil nikdy knihu. Ale třeba si nějakou půjčím v posledním ročníku.

A kromě meetingů? Přiučil jsem se, že pokud si zlámete nohu/přetrháte vazy a většinu semestru pajdáte o berlích, tak prakticky nikdo není ochoten zapnout záznamy a zveřejnit je. To, že je celkem složité dopajdat na FIT a sedět tam X hodin, přičemž vám natéká v sádře noha a bolí to jak kráva je spoustě vyučujících jedno. Smutné jak málo je na FITu „humanity“. (vynechal jsem z toho, ty kteří záznamy zveřejňují a dokonce se starají, když se jim někdo s berlemi rozseká na schodech v aule)

Ale konec s bezúčelným tlacháním. Tady máte seznam předmětů, které jsem tento semestr měl. ;-)


FLP - Funkcionální a logické programování

FLP je bezpochyby jeden z největších strašáků na FIT. Jeho pověst je na úrovni předmětů jako TIN a MAT. Teamové projekty, těžké písemky, zápočet 20 bodů a … a překvapivě malá úmrtnost. Tento rok předmět dalo 107 lidí a jen 28 mělo smůlu.

Navnadil jsem vás, že ten předmět nedalo jen 28 lidí? No skutečnost je taková, že většina lidí z předmětu dostala známku E, druhá nejčastější známka byla D a pár lidí dostalo lepší známku. Já ke své radosti dostal 79 bodů na prvním termínu a už jsem se nemusel otravovat s dalšími pokusy. Bohužel spousta lidí se s tímto předmětem drbala i třetí pokus.

Přednášky

Přednášky vede Dušan. Většina z vás s ním je obeznámena z bakaláře, kde učil předmět IPP. A stále si jede to svoje. Hodí slidy a vysvětluje Lambda calculus, Haskell a Prolog. Kupodivu látku vysvětluje celkem srozumitelně, ale někdy je toho prostě moc, a jakmile se jednou zamotáte, tak se potom špatně chytá. 

Cvičení

Co se týče cvičení… byl jsem na prvních dvou-třech. Přišlo mi to celkem pointless. Navíc se v té době hrál na Olympiádě hokej, tak to bylo zabité. Myslím, že je lepší si otevřít learnyouahaskell.com a naučit se to z toho. A že je stránka anglicky? Who cares? Jste na výšce, tak by vám nemělo problém to přelouskat. ;-)

Jen si tak hraji s Jablíčkem v CVT a najednou toto.

Semestrálka

Na tu jsem se drtil jak divý. Měl jsem na ni jen 5 dní (i když jsem učil i předtím) a v těch pěti dnech semestrálku z GJA na kterou jsem si ani nečetl slidy a doufal, že hromada bodů z projektu a znalosti, které mám s Javou EE mě zachrání (což se nakonec stalo).

Ale zpátky k FLP. Dušan nám říkal, že pokud si to neodsereme (neodporogramuje), tak nemáme šanci. Já s ním souhlasil, ale chtěl jsem i záznamy, které pomáhaly, když jsem něco nemohl dostat do hlavy. No něco nakonec zveřejnil, ale některé chyběly a byly to právě ty, které by se mi hodily.

Každopádně moje příprava… každý den budíček na osm, kafe do půllitru a jel jsem jak fretka. Potom půl hodiny pauza na oběd a jel jsem zase do večera. Půl hodiny pauza na večeři (takže jsem dokoukal rozdívanou epizodu Game of Thrones od oběda) a jel dále až do jedné do rána.

Na konci této etapy jsem byl vždy tak vypatlanej z Lambdy, Haskellu a Prologu, že jsem další hodinu nemohl usnout… a prásk osm ráno, budíček, kafe a jedem další kolo… a další a další… Ve čtvrtek jsem měl oddech a šel si napsat semestrálku z GJA a jedno poslední kolečko učení.

Co se týče stylu učení, tak to jsem prostě vzal hromadu propisek a tlustý sešit a kódil na papír. Čas od času něco opsal do nouťasu a spustil, ať vím, že nepíši totální bláboly a poté se vrátil zpátky k papíru. Na zkoušce se to dělá stejně. Píšete kód na papír. Teorii jsem se neučil. Slidy jsem k semestrálce ani neviděl.

Typy příkladů jsou každý rok podobné. Ale samozřejmě se nedají naučit nazpaměť. A Dušan to ví, takže se ani nemusí snažit vymýšlet nový a převratné věci. Prostě do sebe musíte dostat procházení stavového prostoru v Prologu, Lambdu a důkazy, Haskell a Lambdu v něm a tunu dalších věcí. Ty příklady nestačí, jen tupě opisovat. Musíte je pochopit. Musíte znát dobře oba jazyky a programovací paradigmata a také samozřejmě základní algoritmy na binární sčítačku, Eratosthenovo síto, stromy a vlastně všechny důležité věci, které jste se dozvěděli na bakaláři. Když máte trošku toho programátorského nadání, tak tyto algoritmy vymyslíte i přímo na zkoušce, ale máte je tak na půl v Céčkové podobě a sebere vám to drahocenný čas a ještě to stejně musíte přepsat do Haskellu nebo Prologu.

Projekty

Projekty jsou celkem obtížné, teamové (4 lidé) a někdy se špatně vedou. Haskell se ještě dá. Analyzujete problém, řeknete, ty uděláš funkci A, ty vezmeš výsledek funkce A a uděláš funkci B, která bude mít takové výsledky a já udělám C a monády pro načítání dat a ten poslední dostane něco lehčího a otestuje projekt. Můžete si to dovolit. Haskell nemá vedlejší efekty u funkcí. V to je pro mě jeho krása. Ale dělat vše pomocí rekurze? Chtělo se mi z toho po pár dnech zvracet. Ani neexistuje způsob, jak to nějak normálně debugovat.
Výsledek? Projekt v Haskellu jel, bylo za něj dost bodů, ale rychlost nebyla nic moc. A to jsme se ještě snažili optimalizovat kód.

V Prologu jsme dělali hru Connect 6, což je něco jako piškvorky. Během tohoto projektu nám odpadl z teamu jeden člověk, takže jsme to dělali ve třech a byli jsme trochu ve skluzu. Nakonec jsme z toho dostali zase full point, ovšem rychlost umělé inteligence nebyla nikterak excelentní. Na tah máte jen jednu sekundu, což není mnoho.

A nějaké rady? Pokud děláte vedoucího teamu, tak dělejte meetingy a předtím, než začnete něco psát, tak si sedněte s teamem, analyzujte projekt, rozčleňte ho na podproblémy a poté rozdělte práci lidem. Stejně jako když se na bakaláři dělal v IFJ kompilátor, tak vedoucím doporučují vzít si práci díky, které můžete kontrolovat postup co nejvíce členů v teamu. Udělejte něco jako kostru programu, kde budete lepit jednotlivé funkce od ostatních lidí + si klidně vezměte I/O operace atp.

Kdyby se náhodou stalo, že jste práci udělali nějak rychle, přijdete se k někomu, kdo narazil na nějaký zádrhel a pomozte mu s řešením daného problému. Pokud si omylem naberete moc práce, nebojte se to přiznat a požádat o pomoc. To stejné platí, pokud neodhadnete náročnost nějakého problému. Pomozte dotyčnému, nebo k němu někoho přiřaďte. Vedete team a tipuji, že už nejste usmrkaný puberťák s maturitním vízem, na kterém ještě nestačil zaschnout inkoust… takže se podle toho chovejte. Máte pravomoc rozdělovat body, pokud někdo nedělá, co má a kašle na tým, nebojte se mu pohrozit srážkou bodů. Nebylo by to potom férové k těm, co makají nebo k vám. Samozřejmě, jestli vy sami děláte velké kulové a drolí se vám team pod rukama, tak by se hodilo z toho vyvodit nějakou zodpovědnost. ;-)

Jo a ještě jedna důležitá věc. Nepodceňte komunikaci v teamu. Může se vám stát, že vám jeden člen teamu 3 dny před odevzdáním napíše, že má zápočet a že na projekt kašle. Takovéto situace jsou nemilé :-D .

Haskell – Simple Grep

Prolog – Connect 6

MAR – Marketing

Můj první předmět z podnikatelky. Byl jsem na něj zvědavý. A byl to srandy kopec. Vyučující z počátku straší, že jsou písemky, musíme splnit to a ono, a předmět bude těžký… Po první „mini-písemce“ uvidíte, že realita není zase tak strašná. Vlastně v porovnání s předměty z FITu je MAR naprostý joke, co se týče obtížnosti. :-D

Nebudu moc řešit, co se v předmětu všechno dělá, jaké jsou projekty atd. Chtěl bych vypíchnout jednu zajímavou věc. V tomto předmětu si pokecáte. Přednášky jsme měli ráno v Áčku. Malá učebna a díky ranní hodině i málo lidí. Můj průměrný čas dopajdání o berlích byl 8:05 a v tu doby už v učebně byli všichni. Všech 7 lidí z nějakých 37, kteří tam měli sedět.

Toto se na FITu jen tak nevidí... závan výuky z podnikatelky
Díky tomu, že nás na přednášky chodilo jenom pár, tak jsme si mohli s přednášejícím pokecat o tématu i o tom, co nás jenom zajímalo. A já toho samozřejmě s chutí vyžíval. :-D Tím se mimoděk omlouvám některým mým kolegům, kteří měli v plánu se tam dospat anebo apaticky posedávat.

Získat Áčko z marketingu je poměrně easy. Uděláte, co musíte, zajdete na cvika, napíšete teamový projekt a občas se naučíte na relativně jednoduchou písemku. Čekali jste něco více? Smůla, to je vše a máte za to dobrou známku. ;-)

Projekt do MAR

Download: https://drive.google.com/file/d/0BzEavpv8QogcOUFya0w3QjE2c1U/edit?usp=sharing

MPR - Management projektů

Nůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůůda… Ne počkat byly tam 2 boží přednášky, od lidí z praxe. A nůůůůůůůůůůůůůůůůůůůůdné učení na semestrálku.

Zkrátím to, předmět jsem udělal na Á (a to nebyl ani jednoduchý a jako bonus byl nudný) a na národní certifikaci na management nebo tak něco stejně nejdu, jelikož v době konání budu v CERNu.

Projekt - strukturovaný seznam činností

Projekt - odhad ceny produktu

PRL - Paralelní a distribuované algoritmy

Tento předmět jsem si zapsal sám. Někteří jeho obtížnost přirovnávají k obtížnosti FLP a pro některé je ještě větší hardcore (mě se zdál v poho). Ale mě zajímá paralelismus a vše možné kolem něj, tak jsem si řekl, že by se mi znalosti z tohoto předmětu mohly hodit.

A jako jo… v předmětu jsem se dozvěděl spoustu věcí, které jsem dosud neznal. V zásadě se učíte algoritmy jako v IAL, ale v několika paralelních podáních + něco navíc. Dozvíte se něco o teoreticky nejrychlejších algoritmech pro řazení, vyhledávání a hraní s maticemi.

Problém je v tom, že jde jenom o teorii. Papír snese vše, hardware, který by měl dané výpočty provádět už nikoli. Chcete seřadit rychle pár milionů prvků? No tak k tomu potom potřebujete mašinu, která má mega-na-druhou procesorů. Celkem sci-fi (prozatím).

Spíše jsem doufal, že se dozvím i něco o tom, jak výpočty akcelerovat pomocí grafických karet, jak určit počet vláken tak, aby daný výpočet běžel co nejrychleji na serveru atd. Bohužel v předmětu o těchto tématech nepadlo ani slovo. Stejně tak byl kvantový počítač zmíněn jen v jedné jediné větě… další oblast, o které bych se toho chtěl dozvědět něco více.

Projekty

Světlá stránka předmětu jsou projekty. Oficiálně tři, prakticky jsou dva. Jedná se o implementaci paralelních algoritmů pomoci MPI. Nikdy jste tuto zkratku neslyšeli? Neva, prakticky jde o C/C++ s tím, že si jednotlivé procesy zasílají zprávy.

Jelikož se jedná o paralelní systém, tak pod Linuxem neexistuje normální způsob debugovaní takového programu (printf to jistí ;-) ). To projekty trošku komplikuje. Mě se ale i tak zdály implementace obou dva algoritmů celkem v pohodě. Ale je možné, že jsem byl v menšině. Potkal jsem lidi, kteří v tom celkem patlali. Asi to záleží na tom, kdo má jaké zkušenost s paralelismem a jeho implementací.

Dám vám tady oba dva projekty k nahlédnutí. Ale je to fakt jen pro studijní účely. Hlavně nic neopisujte. Nic vám to nedá a ještě vám hrozí vyhazov z FITu.

Projekt 2 - Enumeration sort

Projekt 3 - Parallel Binary Adder

Nevýhoda PRL

Co mě na tomto předmětu vadilo, tak byla jeho organizace, která vlastně nebyla. Vždyť mi jsme se ani nedozvěděli, kdy píšeme půlsemestrálku. Takže půlka lidí musela přes hodinu čekat na druhou. A to je jen jeden z mnoha příkladů.

Slidy jsou samozřejmě plné chyb (oficiálně se tomu říká chytáky), záznamy nejsou. A ještě jedna důležitá věc. Pokud se vám zdá, že máte málo bodů ze semestrálky, tak si zajděte na konzultace. Stává se, že vám bez problémů nezapočítají body za jeden nebo za dva příklady a potom se divíte, co jste pohnojili. Mě se už kvůli tomu do Brna jet nechtělo, tak jsem si nechal Béčko, ale lidi co tam šli, tak často dostali přidáno celkem dost bodů.

ZPO - Zpracování obrazu

Super-boží-cool předmět. Lidi z UPGM jsou v cajku, tak jak je znáte z bakaláře. Přednášky jsou zajímavé a dokonce si tam občas můžete pokecat a na něco se zeptat bez toho, aby se vás vyučující snažil ponížit nebo se tvářil otráveně. Fakt skvělý pozitivní přístup.

Během semestru děláte asi nějakých 5 úkolů v OpenCV. Jsou jednoduché, ale procvičíte se na tom. Navíc jde OpenCV použít spolu s Visual Studio (na YouTube jsou na to návody), takže programování je zábava.
V předmětu se píše i teamový projekt. My měli morphing: https://www.youtube.com/watch?v=iBMfoULrPbk . Napsat si jej můžete v čemkoli. V našem případě jsme zvolili Windows 8/Metro/Moder UI prostředí. A celkem to šlo. Projekt se obhajuje. Měl nás Víťa, na všechno se podíval, podiskutoval o tom a zdrbal nás, že jsme mu vytiskli dokumentaci na papír. Jo netiskněte dokumentaci, je to plýtvání papíru. Prostě mu to dejte přečíst na iPadu nebo tak něco. :-D Ale nakonec dal stejně fullpoint. :-)


V ZPO jsou dvě písemky. Půlsemestrálka není v půli semestru, ale až na konci. Divné, že? Ale jinak geniální nápad. Nezatěžuje vás to v době, kdy máte starostí už tak dost. A navíc dva týdnu poté píšete semestrálku. Takže si jen zopáknete, to co jste snad ještě nezapomněli za těch pár dnů a jdete si pro Áčko. 98 bodů za semestr + zábavný projekt v čem chcete + znalosti o zpracování obrazu + cool vyučující. Takové předměty by měly být všechny.

Mini-projekty

WAP - Internetové aplikace

Říkal jsem si, že když to je na magistru, tak se tam naučím něco zajímavého, co ještě neznám. No sekl jsem se. Pamatujete si na informační systémy z bakaláře? Tak to je vončo s jiným názvem. XSLT, JS, PHP, CSS, HTML. Na konci vám Burget řekne něco o Web Services, což je jediné, co mě něco dalo.

V předmětu je jen jeden projekt. Je to za neuvěřitelných 30 bodů. Vezmete JS a napíšete v něm poměrně lehký projekt. Hotovo. Teď se kajícně přiznám, že já ten projekt psal v TypeScriptu a potom zkompilovat do JS. No jo, je to pořád JS, ale alespoň jsem měl snahu se naučit něco nového a něco navíc si z tohoto předmětu odnést. A i s naučením „nového“ programovacího jazyka jsem ten projekt napsal za chvíli a za plný počet bodů.

Jinak projekty a písemky opravuje Burget. Je to pohodář. Co máte dobře, tak si buďte jisti, že za to dostanete plný počet bodů. Co nemáte úplně správně, tak z toho vám vymačká, co nejvíce bodů jde.

Ve výsledku potom není problém mít full za projekt + full za půlsemestrálku a potom ztratit 3 body na semestrálce. Kdo vůbec neumí dělat webovky, chce se naučit XSLT a nebo se jen ulít, tak pro toho je tento předmět šitý na míru.

Projek - Validátor formulářů


GJA - Grafická uživatelská rozhraní v Javě

V první řadě… Tento předmět nemá s GUI v Javě mnoho společného. Před rokem nebo tak nějak došlo k restrukturalizaci prakticky všeho, co tam dříve vyučovalo a vznikl předmět „Java EE + Android“.

Proberete tam servlety, JSP, JSF, Sping, PrimeFaces, Hibernate, JPA, Androind a hromadu dalšího. Každá z těchto technologií je tak na rok-dva učení. Vy ji prakticky celou projedete za dvě hodiny. Je to nářez a nedá se to zvládnout.

Spíše bych ocenil, kdyby se v předmětu učilo, jaké výhody a nevýhody daná technologie má, kdy ji ne/použít, jaké jsou alternativy atd. Bylo by to mnohem užitečnější než 2 hodiny toho, kde je jaký konfigurák a jeho detailní obsah.

Vyznat se poté v takovém množství špatně zapamatovatelných informací je celkem hardcore. Hlavně u písemek, které dopadly bídně. Lidé nevěděli, co je důležité a co se učit. Navíc to bylo mezi PRL a FLP, takže je jasné, kde byly priority. Naštěstí ze semestrálky není minimum a za projekt je hromada bodů.

Co se týče projektů. Ty jsou teamové, ale můžete si je dělat sami. Můžete si dokonce vybrat vlastní zadání. Kouřil, který tam má prakticky všechno na starosti je cool chlápek a pohodář a vychází ve všem vstříc (no jo, UPGM). Když napíšete relativně obstojně půlsemestrálku a zamakáte na projektu, tak s body ze semestrálky to Éčko získáte… vlastně většina lidí z předmětu dostala É. :-D Ale dobré známky nejsou pointa tohoto předmětu. Pro mě bylo hlavní, že mi toho dal hromadu projekt, který jsem dělal (vlastní zadání + PrimeFaces).

Původně jsem byl zklamaný, že na FITu není předmět s Java EE, ale on tu je. Jen ho schovali za tímto zastaralým názvem :-). U tohoto předmětu nehledejte dobré známky, ani se neulijete. Ale pokud máknete na projektu, tak naučíte spoustu nového a myslím, že v konečném výsledku bude spokojeni.