Archive for the ‘Uncategorized’ Category

Devoxx 2018

Saturday, November 17th, 2018

Po letech jsem se byl podívat na Devoxxu, takže je na čase oprášit na blogu pavučiny a zapsat si, co jsem se naučil.

Reactive vs. Loom

Nejvíc mě dostala prezentace o projektu Loom. Na současném přístupu ke škálování mi cosi nesedělo, ale nedokázal jsem pojmenovat co. Pár firem potřebuje opravdu škálovat, a proto všichni musí začít připisovat knihovny na to, aby podporovaly RxJavu, Reactor a podobné. Musíme přepsat databázové ovladače, HTTP knihovny, přístup k souborovému systému tak, aby byl reaktivní. Za to se nám dostane té odměny, že už nebudeme muset psát v Javě, ale v jakémsi DSL, kterým budeme krásně skládat asynchronní potrubí.

Když se nad tím zamyslíte, tak je to neuvěřitelně prosakující abstrakce. Abych ji mohl použít, musím moji asynchronní knihovnu zadrátovat do API. Takže metody už nevrací T ale Mono<T>. To není prosakující abstrakce, ale cedník.

V projektu Loom si chlapci v Oraclu řekli, že to jde možná dělat lépe. Co nám vadí na vláknech? Jsou drahá, žerou paměť a jsou zbytečně blokována při čekání na sít, souborový systém nebo zámek. Co kdybychom použili jinou abstrakci, říkejme jí třeba Fiber (nitka?). Nitka se veze na vlákně, ale když narazí na blokující operaci, tak se vlákna pustí a to může jít vozit jiné nitky. Když blokující operace skončí, blokovaná nitka naskočí na jiné vlákno a provádí další můj kód. Jelikož se všechny blokující operace obvykle provádí skrz standardní Java knihovnu, kód který řeší opuštění vlákna a opětovné naskočení zpět je schovaný v JVM a jeho knihovnách. Já nemusím nic řešit. (Kdo můj poetický popis nepochopil, nechť se stydí a pustí si video).

To znamená, že jako programátor dostanu škálování v podstatě zadarmo. Můžu dál psát svůj staromódní imperativní kód a JVM zajistí, že to poběží efektivně. Samozřejmě nedostanu všechny výhody reaktivního přístupu jako backpressure (protitlak), ale možná mi to za čistší API, čitelné stack tracy a jiný konfort, na který jsem zvyklý, stojí.

Na Dovoxxu ukazovali zajímavé demo, kde vzali Jetty, místo ThreadPoolu podvrhli něco co používá Fibers a když to zrovna nespadlo, tak klasická aplikace v JAX-RS škálovala jako divá. Bohužel bude ještě pár let trvat, než dořeší všechny detaily jako ThreadLocals a podobně, ale vypadá to nadějně.

Trochu s tím rezonovala přednáška o Briana Goetze o Objektovém a funkcionálním programování. Síla objektového programování je v místech, které překračují hranice (boundaries). Tam potřebuji mít silný kontrakt v čemž OOP exceluje. Uvnitř hranic dává občas smysl zahodit ceremonii s objekty spojenou a využít sílu FP.

Nejlepší přednášky:

Co říci závěrem? Devoxx je super konference, člověk si rozšíří obzory, uvědomí si, jak moc ho programování baví a jak živý je Java ekosystém. Až na pár ojedinělých výjimek byly všechny přednášky skvělé, takže několikrát litoval, že se nemůžu rozkrájet a jít do víc sálů najednou. Nevadí, 10 Mistakes Hackers Want You to Make si pustím z YouTube.

Zápisky z pražského GeeCONu

Sunday, October 25th, 2015

Pražský GeeCON letos velmi příjemně překvapil. Většinou se z podobných akcí vracím s otázkou proč jsem se nic moc nenaučil. Může to být tím, už jsem tak dobrý nebo to může být nízkou úrovní konference. Letos jsem to řešit nemusel, většina přednášek mě alespoň někam posunula.

Dangers of Parallel Streams

Lukáš Křečan

Pro mě rozhodně nejpřínosnější příspěvek, hlavně proto, že jsem ho přednášel já. Byla to moje první zkušenost s mluvením na akci podobné úrovně. Přípravou jsem strávil neuvěřitelné množství času, dost jsem se toho bál, ale stálo to za to. Nebylo to o mnoho těžší než mluvit před víc kolegy v práci. Ani se nenaplnily moje obavy, že mi z hlavy zmizí všechna anglická slovíčka nebo že mi vypadne technika, bez které by to nedávalo smysl. Nejhorší moment byl, když jsem si celou strašně dlouhou sekundu nemohl vzpomenout na jméno jedné třídy. Celé to byla hrozně zajímavá zkušenost, rozhodně vám doporučuji si to taky zkusit. Připravte si téma, obešlete pár konferencí a vyražte. Výmluvy, že nemáte o čem mluvit neberu, myslíte si, že jsem před tím něco věděl o paralelních streamech? Kdyby vás náhodou nikde nechtěli, tak se ozvěte Dagimu, zjevně má nouzi o řečníky na CZJUG. Mimochodem, pokud jste o můj skvělý výkon přišli, ještě to někdy v příštích měsících budu opakovat pro CZJUG, takže budete mít šanci. Navíc jsem měl pozitivní ohlasy, takže jsem si i dost načechral ego, to není k zahození.

On a Quest Towards the Fastest VM on the Planet!

Jaroslav Tulach

Zajímavé povídání o tom, co se peče v pražském Oraclu – projekt Graal a Truffle DSL Musím se přiznat, že jsem to nepochopil úplně do detailu, ale měla by to být náhrada jednoho kroku JIT kompilace Javy, kdy se bere bytecode a všelijak se optimalizuje. Současná verze je v céčku, Graal je v Javě což údajně umožňuje dělat složitější optimalizace. Zajímavé na tom je to, že k tomu mají API, které vás nechá se do procesu zaháčkovat a upravit ho. To dává možnost pro lepší optimalizaci ostatních jazyků. Na Ruby to ukazuje několikanásobné zrychlení i proti JRuby. Ještě víc neuvěřitelné je to, že se v tom úspěšně pokoušejí pouštět i céčko. To nedává smysl jen do té doby, než si uvědomíte, že spousta jazyků závisí na C knihovnách takže je problém je portovat na JVM. Kdybych dokázal pracovat v korporaci, tak se k nim snad přidám.

Clean Coders Hate What Happens To Your Code When You Use These Enterprise Programming Tricks

Kevlin Henney

Kevlin je profesionální řečník, na kterého narazíte skoro na každé konferenci. Vymakané představení, kde se toho zas tak moc nedozvíte. Navážel se do toho jak často píšeme zbytečně složitý kód jenom ze zvyku. Měl zajímavý příklad s importy v Javě. Opravdu potřebujeme mít na začátku každé třídy desítky řádek s importy? Jakou hodnotu to přináší? Proč nepoužíváme hvězdičkové importy? Má pravdu, není pro to žádný racionální důvod, děláme to jen ze zvyku. Je to zajímavá ilustrace, nicméně problémy se složitostí kódu jsou někde jinde a teprve po deseti letech dennodenního programování jsem tomu začal přicházet na kloub. Čekám, že mi to ještě pár let zabere a tato přednáška mi hlavně připomněla, že se o tom mám pořád pokoušet.

Domain Specific Languages with pleasure

Václav Pech

Musím se přiznat, že na tuto přednášku jsem šel z pocitu viny. S Václavem se znám docela dlouho a ještě nikdy jsem ho přednášet neviděl. Já hlupák. Docela mě to chytlo a otevřelo oči. Pro mě nejzajímavější myšlenka byla to, že vlastně nepřemýšlím v kódu, ale v AST. Krásný příklad je jazyk Scratch pro výuku programování. Ty kostičky jsou AST jak to, že jsem toho ještě nevšiml? Takže já mám v hlavě AST, přepíšu ho do textu, kde to parser vezme a zas z toho udělá AST. Pro programátory to asi dává smysl, ale normálním lidem to nevyhovuje. proto v JetBrains dělají MPS, který vám s AST umožní pracovat i jinak než pomocí textu – třeba pomocí obrázků nebo symbolů.

The dangers of building microservices

Christopher Batey

Pěkně udělaná přednáška o mikroslužbách. Točilo se to kolem toho, že vás mikroslužby vystaví síťovým voláním. A takové volání po síti se může rozbít spoustou různých způsobů. Nejen že ty způsoby ukazoval, ale hlavně předváděl, jak na to psát testy. Přiznejte se, kdo z vás píše automatické testy simulující chování vaší aplikace s nezvykle velkou síťovou latencí. Pokud nevíte jak na to, tak doporučoval Wiremock a Saboteur

Power to the Programmers!

Tom Gilb

Pan Gilb se prý označuje jako dědeček agilního vývoje. Od roku 1958 programoval, agilně pracoval od roku 1960. Ještě pamatuje primitivní doby, kdy lidi chtěli vidět čísla, když se o něčem rozhodovali. Od té doby jsme už naštěstí pokročili a pro rozhodování nám stačí dojmy. Vyprávěl zajímavou historku o tom, jak se na architektonické konferenci zeptal, kolik z nich odhaduje cenu navrhovaného řešení. Z tří set architektů se mu prý přihlásili tři. To je hrozně zajímavé, navrhujeme architekturu a neřešíme kolik to bude stát.

Přednáška se hlavně točila kolem toho, jak je důležité dát programátorům kontrolu nad procesem, kterým pracují. Demonstroval to na tvrdých číslech o množství chyb. V jeho dřevních dobách trávili programátoři opravováních chyb asi tak 30% svého času. Nezapomínejte, že to bylo před nějakými čtyřiceti lety, to by se nám dnes nemohlo stát. Zkusili to změnit. Nejdřív to dali za úkol manažerům, ale to nevedlo k žádnému zlepšení. Když ale dali prostor lidem dole, kteří vědí kde je tlačí bota, tak to výrazně pomohlo. Detaily a odkazy na studie najdete tady

Don't Give Up on Agile Just Yet

J. B. Rainsberger

Poslední byla keynote o agile. Staré známe pravdy, které stojí za to připomínat pořád dokola. Agile je hlavně tom dělat bezpečné a měřitelné experimenty a podle nich se rozhodovat. Vypíchnu dvě myšlenky. První je, že standup je především o risk managementu. Pokud ho děláte kvůli něčemu jinému, tak ho zrušte. Druhá je o to, že laťka v oboru je pořád nastavená hrozně nízko. Stačí přestat dělat úplné pitomosti a budete za hvězdu.

Hlavní výhoda mikroslužeb

Sunday, December 7th, 2014

Mikroslužby (microservices) jsou ta nová naprosto nejvíc cool věc. A samozřejmě se najdou kritici, kteří tvrdí, že už to tu dávno bylo, ať už v podobě SOA, OSGi nebo jakékoliv jiné. Navíc se dočtete, že mikroslužby jsou složité, náročné na údržbu, vývoj a koordinaci. Všechno je to nepopiratelně pravda. Mikroslužby mají ale jednu výhodu, která má potenciál všechny tyto nevýhody zastínit. Překvapivě tato výhoda není technická, ale organizační.

Vrstvy aplikace

Podívejme se na toto hrubě zjednodušené schéma aplikace. Máme tam tři vrstvy – UI, logiku a databázi. Máme také tři vlastnosti. Představme si, že píšeme konkurenci Spotify takže máme přehrávání hudby, doporučování nové hudby a zobrazování reklamy. Všechny vlastnosti jdou přes všechny tři vrstvy. Vsadím se, že máte podobnou architekturu, jenom výrazně složitější.

Vertikální nebo horizontální týmy?

Teď si představme, že je naše aplikace úspěšná takže najímáme nové a nové lidi. Původní tým moc vyroste, takže ho potřebujeme rozdělit. Máme dvě možnosti. Můžeme aplikaci rozříznout vertikálně, co tým to vlastnost. Nebo k tomu můžeme přistupovat horizontálně a mít týmy pro jednotlivé vrstvy. Ve vertikálním členění budeme mít tým pro doporučování hudby, v horizontálním tým starající se o databázi.
Vertikální týmy jsou lepší

Když se nad tím zamyslíte, tak zjistíte, že chcete vertikální členění. Má neuvěřitelné přednosti. Má-li tým na starost například doporučování hudby, tak je snadné zařídit, aby se soustředil na zákazníka, aby se celý tým snažil dělat nejlepší doporučování hudby na světě. Členové takového týmu mají jasno v tom co dělají a proč je to užitečné. Teď si na chvíli představte váš tým databázistů. Kdy jste je naposledy slyšeli vyslovit slovo zákazník?

Vertikální členění také mnohem lépe škáluje. Když je produkt úspěšný, přidávají se nové vlastnosti a není tedy problém přidávat nové týmy. Když mám horizontální týmy a rozroste se mi databázová vrstva tak, že je nad síly jednoho týmu, není moc jasné co udělat. Pro vertikální týmy je mnoho dalších argumentů, ale potřebuji se dostat k mikroslužbám, takže vám je nechám za domácí úkol.

Horizontální týmy odpovídají architektuře

Pro horizontální týmy mluví jeden hlavní argument – Conwayův zákon. Ten říká, že organizační struktura firmy nevyhnutelně kopíruje architekturu a naopak. Pokud mám logickou vrstvu v jedné komponentě, musím dát lidi, kteří do ní zasahují, do jednoho týmu. Když to tak není, koleduji si o problémy. Když má víc týmů pracovat nad jednou komponentou, tak spolu musí komunikovat natolik intenzivně, že je z nich de fakto jeden tým. Jsou tu i další otázky. Který z týmů má za tu komponentu zodpovědnost? Tým který přehrává hudbu nebo ten který hudbu doporučuje? Kdo má držet pohotovost? Kdo má zastavit všechnu práci, když neprocházejí testy? Kdo má dělat větší refaktoring, když je potřeba?

I když Conwayův zákon nemá takovou moc jako přírodní zákony, stejně vás nakonec dožene. Můžete se ho snažit ignorovat, ale bude to podobné jako kdybyste se pokoušeli levitovat tím, že budete hrozně rychle skákat. Ano, většinu času budete ve vzduchu, ale stejně to neznamená, že byste porazili gravitační zákon.

Co s tím?

Takže chceme mít vertikálně členěné týmy, ale kvůli zpropadenému Conwayově zákonu to nejde. Co s tím? Jedna z cest je rozdělit se zároveň vertikálně i horizontálně. Kdo jste dělal v korporaci, víte o co jde. Můžete mít vertikální týmy, které se soustředí na funkcionalitu a hodnotu pro zákazníka. A k nim přidat týmy, které se soustředí na údržbu komponent. Tam už jsme byli před tím než jsme zavedli DevOps. Z tohoto uspořádání nutně plynou předávky, povinně používané frameworky, formální reviews, byrokracie a nevraživost. V zásadě to znamená, že budete mít týmy co dělají chyby a týmy, které je opravují a starají se o ně. Takovou situaci už jsem párkrát zažil a nerad bych se k ní vracel.

Další cesta, jak z toho ven, jsou mikroslužby. Ono není náhoda, že se objevily zhruba ve stejný čas jako DevOps. Když ty monolitické vrstvy rozseknu na spoustu malých, přidělám si hromadu starostí, ale obejdu tím Conwayův zákon. Najednou můžu naprosto přirozeně udělat vertikální týmy. Každý z nich má na starost pár mikroslužeb a hotovo. Mám týmy, které se zároveň soustředí na zákaznickou hodnotu i cítí vlastnictví nad provozem a údržbou svého kódu. Hranice mezi týmy je naprosto jasně daná rozhraními mikroslužeb. Když spadnou testy, vím naprosto jasně za kým jít. Stejně tak, jako když potřebuji přidat nějakou funkcionalitu. Každý tým dokonce může mít jinou kadenci releasů. Zkrátka samá pozitiva a sociální jistoty. A to je podle mě ta hlavní výhoda mikroslužeb. Umožňuje mi vytvořit týmy orientované na zákazníka a zároveň obejít Conwayův zákon. Takže až vám bude někdo říkat, že jsou mikroslužby na nic, zeptejte se ho, jak jim funguje organizační struktura.

Tento článek je silně inspirován tím jak to dělají v Netflixu a ve Spotify, viz. například toto video.