Mám za sebou první 3 dny studijní stáže na Polytechnique de Montreál a tak je na čase podělit se o své první zážitky.
Oficiální název mé stáže zní: Parallelizing a Large Scale Static Analysis using the Hadoop Map/Reduce Framework. Je to poměrně krkolomný, dlouhý a nic neříkající název. Ve skutečnosti se jedná o poměrně zajímavou věc – přizpůsobení již existujících algoritmů na statickou analýzu kódu pro využití v cloudu. Tedy aby ty algoritmy neběžely na jednom počítači, ale třeba na stovce…
První seznámení s projektem
V pondělí 26. 8. jsem po vyřízení několika formalit zamířil za profesorem a k laboratořím. Po příchodu do laboratoře jsme narazili na problém s nefunkčním počítačem. A tak jsem se zatím dočasně usídlil na sousedním místě, kde počítač funguje. Profesor mi dal přístup k SVN repozitáři, ze kterého jsem si měl stáhnout zdrojáky, a poslal mi soubor se seznamem projektů, které budu potřebovat. Bylo mi jasné, že se nejprve musím seznámit s tím, jak je nástroj naprogramovaný, jak funguje apod., než začnu dělat nějaké modifikace. Ale už jsem netrpělivě očekával své první seznámení s tím jejich úžasným nástrojem pro statickou analýzu kódu, který budu následující 3 měsíce paralelizovat. To jsem ovšem nevěděl, co mě čeká…
V repozitáři se nachází několik stovek projektů (odhadoval bych to tak na 200-300), které mezi sebou mají různé závislosti. Když se mi po několika desítkách minut čekání podařilo konečně stáhnout několik set MB dat z repozitáře, doufal jsem, že už to půjde hladce. To byl ovšem omyl. Všechny projekty jsou dělané v Eclipse a NEMAJÍ mezi sebou nijak nastavené závislosti. A že těch závislostí tam je… Takže po kliknutí na tlačítko Build all se objevilo asi 3000 chyb při kompilaci a dalších pár tisíc warningů (které raději ignoruji). Většina chybových hlášek se týkala chybějících závislostí. No a mě nezbývalo než ručně se proklikat chybami ke konkrétnímu zdrojáku, nastavit pro projekt správné závislosti a kompilovat znovu. A znovu. Občas jsem dokonce narazil i na závislost na projektech, které jsem ještě neměl stažené z repozitáře, a tak jsem je musel stáhnout.
Resolve dependency, build, debug…
Druhý den vypadal víceméně stejně, pokračoval jsem v řešení závislostí a nekonečným kompilováním projektů. Pak se mi konečně podařilo zkompilovat a spustit projekt, který měl sloužit jako ukázka, jak se používá onen nástroj na statickou analýzu. Bohužel jsem stále neměl vyhráno. Projekt jsem sice spustil, ale hnedka na mě vykoukla výjimka a program spadl. A tak jsem strávil celý den debugováním desítek tříd kódu, ke kterým prakticky neexistuje dokumentace, a o kterých jsem neměl ani potuchy co a jak vlastně mají dělat. Byl jsem poměrně zklamaný, protože tohle nebylo zrovna to, co jsem očekával. Nakonec se mi podařilo program dostat do takové fáze, že již nevyhazoval výjimky a tvářil se, že je vše vpořádku. Bohužel nebylo – program nedělal vůbec nic. Statická analýza neproběhla. Profesorovi se to zdálo nějaké divné a tak poslal výpis stack-trace jinému profesorovi, který je vedoucím tohoto projektu.
Třetí den ráno dorazila odpověď. Verze projektu v repozitáři je nějaká rozbitá, máme použít jinou. Tak jsem tedy smazal vše, co jsem doposud dělal a stáhl jsem si novou verzi projektu. A začalo řešení závislostí znovu, nanovo… Naštěstí už jsem tak nějak věděl, který projekt na kterém je závislý a kde tyto závislosti nastavit, takže mi netrvalo dlouho zkompilovat a spustit aplikaci. Běžela. Hurá! S radostí jsem napsal e-mail profesorovi, který přišel a konečně mi taky trošku vysvětlil, co že tam vlastně mají a na čem budu pracovat. A pak mi dal za úkol rozjet další část projektu. Ta už se mi ovšem rozjet nepodařila, protože některé zdrojové kódy v projektu jsou psané pro Javu 1.7 a na mém počítači byla jen verze 1.5.