Na úvod je asi vhodné uvést, že s organizováním a přednášením na konferencích nějaké zkušenosti mám a ačkoliv se v následujících řádcích někde vyjadřuji kriticky, tak celkově byl GeeCON výborně zvládnutý a přes hodně slušnou návštěvnost jsem nikde nezaznamenal výraznější problémy.
Konečně se mi zadařilo mít čas zajít na GeeCON. A navíc díky Romanu Pichlíkovi z CZ Podcastu jsem měl volný vstup, takže dokonalá win-win situace. O to více, že jsem se na organizaci nepodílel ani nepřednášel, což pobyt na konferenci výrazně ulehčuje.
Trochu problém mám pravda s ranním vstáváním, ale zjevně o něm organizátoři věděli a začátek prvního dne byl v 9:40. Dělat konferenci v kině v nákupním centru by mne popravdě nenapadlo. Velké plus této varianty jsou velikosti plátna a světelnost projektorů. Tady se prostě nestane, že by někdo neviděl nebo nemohl přečíst slidy. Pohodlné sedačky už jsou trochu “dvousečné”, dá se v nich velmi snadno usnout. To se hned na druhé přednášce povedlo jednomu účastníkovi, který navíc seděl v první řadě. Chrápáním trochu rušil, ale přednášející to zvládl s přehledem (“This guy clearly loves graphs”). Polský JUG, který GeeCON organizuje na jaře v Krakově a na podzim v Praze, si do Prahy přivezl kompletní tým, včetně cateringu.
Keynote od hlavního sponzora Y Softu mne ničím nezaujala (stejně jako expozice Y soft world s asi břišními tanečnicemi nebo co to mělo být). Výrazně lepší byla následující od Oracle Labs konkrétně od Jardy Tulacha. Kluci tam pracují na vlastní verzi JIT překladače, nazvaného GraalVM, který nejen že je pro běh javových programů rychlejší než standardní, ale s využitím další jejich technologie Truffle umožňuje běh programů i v dalších jazycích, třeba JavaScriptu nebo R. A to kolikrát rychleji než v nativních implementacích. V přednášce zaznělo i to, že Hotspot C2 compiler, který je v standardním Oracle JDK, není moc dobrý ve zpracování kódu Java 8, konkrétně lambda výrazů. Celý je napsaný v C++ a prý se v tom kódu nikdo nevyzná a nechtějí do toho tímpádem moc zasahovat :-). GraalVM je napsaný v Javě, integrování nových jazyků přes Truffle se dělá taky v Javě. Ale je to laboratorní projekt, těžko říct, jaké úmysly s ním Oracle do budoucna má. Zatím je to ale opensource, takže hurá na github a můžete se kouknout, jak to celé funguje.
Na konferencích vybírám přednášky podle dvou kritérií: buď je to něco naprosto mimo moje pole působnosti, nebo naopak něco, co používám často. V druhém případě si na přednáškách snažím potvrdit, že mi v dané oblasti neujel vlak. V prvním případě se jen nechávám inspirovat. Proto jsem zvolil následující moc nesouvisející přednášky:
Who’s Afraid of Graphs? - David Ostrovsky
Jak název napovídá, přednáška byla o Graph databases. David podle mne velmi přehledně a poutavě popsal jejich silné a slabé stránky. Kupříkladu jejich neškálovatelnost. Ta se obchází třeba více identickými kopiemi databáze v clusteru, kdy router směřuje stejné dotazy vždy na stejnou repliku, aby je měla nakešované.
Co jsem si odnesl: i Elasticsearch má podle všeho Graph API, se kterým se dá poměrně pěkně pohrát.
Effective and Clean Java Code? Tips and Tricks from the Real World - Edson Yanaga
Jedna z “potvrzovacích” přednášek. Svižně, přehledně předvedená a vysvětlená taková základní řemeslná latina, s důrazem na Domain driven development. Kód by měl být k dispozici na githubu.
Co jsem si odnesl: zatím mi vlak neujel.
Need for speed: tools for JVM tuning - Andrey Adamovich
Tohle byla naopak přednáška o něčem, co jsem zatím nikdy nemusel řešit. Přehled dostupných většinou volných nástrojů pro sledování a nastavování parametrů JVM. Taková ta přednáška, kde si začnete dělat poznámky, co si chcete vyzkoušet, a v půlce přestanete psát, protože píšete úplně všechno.
Hot code is faster code - addressing JVM warm-up - Mark Price
Tohle mne naprosto nadchlo, byť to nejspíš nikdy nevyužiju. Zkusím to shrnout, ale doporučuju každému kouknout na záznam, až bude k dispozici. Díky JIT se často používané metody překládají do velmi optimalizovaného strojového kódu a jejich běh je tedy rychlý (jakmile se nějaká metoda nevolá dost často, je z tohoto vyjmuta, vrátí se zpátky do skupiny “cold” částí programu a jejích několik dalších volání může tedy probíhat dokonce jen interpretovaně, než se zase díky četnosti volání teoreticky dostane mezi “vyvolené”). To znamená, že po nějaké době běhu programu jsou jeho nejvytíženější části nejvíce optimalizované. A právě to “po nějaké době běhu programu” může znamenat problémy pro systémy, u kterých záleží na rychlosti. Jednou z možností, jak zajistit optimální nastavení takového programu, je nasimulovat mu zátěž co nejpodobnější té produkční, ale ještě dříve, než ono produkční zatížení přijde (Mark popisoval jejich případ s otevřením burzy). Aplikace tedy musí poznat, že se jedná o data “testovací” a nenaložit s nimi v rozhodujícím kroku jako s produkčními (nekoupit/neprodat/neposlat peníze atd.), ale všechny ostatní části aplikace musí zatížit k nerozeznání od opravdových vstupů.
Další z variant je prý “přehrát” log Hotspot překladače (je na to komerční produkt, jehož název jsem neudržel v paměti), ve kterém je právě uložena historie těch optimalizací a přesunů do “hot” zóny. To nicméně předpokládá, že se od minulého zalogování kód neměnil, aby identifikátory tříd a metod v logu odpovídaly metodám v aktuálním kódu aplikace. Mark popisoval, že u nich mají v test prostředí dokonalou kopii produkce, která umožňuje (na úrovni siťových switchů!) přehrávat přesně to, co se na produkci dělo. To samo o sobě mi přijde jako parádní věc a hrozně rád bych si s něčím takovým pohrál.
Naprostý omyl pro mne bylo jít na Enterprise Java in the cloud, kterou prezentoval Dmitry Kornilov. Očekával jsem asi něco jiného než výčet technologií v jednotlivých edicích J2EE resp. Java EE a seznam modulů, které se v další verzi budou měnit nebo budou odstraněny. Směřování do cloudu je pochopitelně velmi aktuální a mne spíš zajímaly detaily, jak (ne že) bude v další verzi Java EE tento směr podporován.
Plánoval jsem zajít i na večerní párty na parníku, ale nakonec jsem se tam po mezipřistání doma už nevykopal. Jak se ukázalo, bylo to dobře. Podle ohlasů na twitteru se jednalo o hladovou a suchou jízdu. Tedy pro běžné účastníky, přednášející a sponzoři měli jiné podmínky. Buď dělám party pro všechny, nebo jen pro vybranou skupinu. Mít v rámci jedné akce různé podmínky pro dvě skupiny mi nepřijde šťastné.
Den druhý
Tady už organizátoři dost vyzkoušeli moje limity a první přednáška začínala v 9 hodin. Přednášku jsem sice fyzicky stihl, ale k vědomí se probírám až kolem desáté, takže How to bake reactive behavior into your Java EE application pořád nevím. Snad se Ondra Mihályi nebude zlobit.
Na One VM to rule them all Jakuba Podlešáka a Jana Štoly už jsem byl v rámci svých možností v kondici a to, co GraalVM a Truffle nabízí, se mi moc líbí. Bylo to naznačeno už v keynote, ale rychlost běhu nejen javových aplikací pod tímhle VM je hodně dobrá. Ne že bych si snad plánoval napsat vlastní programovací jazyk, ale jak to na mě jednou přijde, určitě budu koukat po GraalVM/Truffle.
What is your application doing when you are not around? - Adam Dubiel
Adam se hned na začátku přiznal, že je control freak a pohled na dashbordy ukazující, co se děje v aplikacích, ho baví. Praktické rady, jak v aplikaci nahradit logování uběhlých milisekund mezi sledovanými operacemi komplexnějším přístupem, jaké metriky má smysl sledovat, jaké vlastně nemají nijak velkou vypovídací schopnost, i když se nás mozek snaží přesvědčit, že je tomu naopak, atd. Já sice nehodlám přiznat, že bych snad mohl být control freak, ale ty dashboardy rozhodně musím mít!
Na TDD: That’s not what we meant a Steva Freemana jsem se moc těšil, navíc jak známo člověk raději přijímá informace, které jsou mu blízké, takže tady jsem si vyloženě užil. Přemýšlet o návrhu kódu před začátkem implementace je mi vlastní, Test Driven Development je v tom navíc velmi nápomocný. Kupříkladu tohle jsem v různých kódech viděl tolikrát! Líbil se mi Stevův nedogmatický přístup k používání TDD nebo třeba k volbě jmen testovacích metod.
Co jsem si odnesl
JVM dive for mere mortals od Jakub Kubryńského pro mne bylo po čtvrtečním Hot code is faster code - addressing JVM warm-up už vlastně zbytečné a pokud bych si měl vybrat, kterou z těch dvou zvolit pro získání přehledu, co a jak se v JVM děje, určitě by vyhrál Mark Price. Nicméně tento slide je myslím velmi užitečný.
Reverse engineering clean code - Jakub Marchwicki
Krátké zamyšlení o vztahu designu fyzických objektů (přístrojů, nábytku, …) a přístupu k navrhování api a kódu obecně. Trochu nepřekvapivě se poznatky z první oblasti dají úspěšně používat i v oblasti druhé.
Dirty Hacks With Java Reflection Heinz Kabutze na závěr byla lahůdka. I když vlastně všechny ukázané techniky byly unsafe :-) Opět doporučím počkat na záznam a mezitím koukněte na kód.
Na závěr jen poznámka: jsem dost citlivý na kvalitu kávy (zly jazykové tvrdí, že přecitlivělý). Ale tady to bylo tragické. Hnědá tekutina vydávaná za filtrovanou kávu snad ani nezaslouží komentář. Pro všechny účastníky tak byl k dispozici jeden kávovar s ucházející kávou, ale ono si ho naštěstí zase tolik lidí nevšimlo, takže u něj nebyly nekonečné fronty. A viděl jsem i pár lidí, kteří nelenili a vybíhali do okolních kaváren v obchodním centru.