pondělí 24. dubna 2017

CZ Podcast 169 -

Do tohoto dílu jsme pozvali Michala Bláhu, který stojí za hromadou zajímavých a úspěšných projektů, Atlas.cz, Energomonitor, Hlidacsmluv.cz, abychom jmenovali některé z nich. Byla to jedna z mála příležitosti během, které jsme se mohli zeptat na téma pro nás neprobádané a to na poslední Maichalovu aktivitu v oblasti eGovernmentu.



středa 29. března 2017

CZ Podcast 168 - Převážně nevážně


V 168. díle jsme to vzali převážně nevážně. Témata oscilují od práce na stavbě, sport, audioknihy až po muzeum herních konzolí.

pondělí 27. března 2017

Papírová škálovatelnost, Bcrypt a ladění výkonostních problémů Zonkyho

V poslední době často odpovídám na technické otázky našich uživatelů z řad investorů ohledně problémů s přetíženým Zonkyho v době půjček s vysokým úrokem, o které se pravidelně strhává litý boj. Rád bych na jednom místě sepsal seznam problémů a řešení, které jsme udělali.

Jakékoliv naše řešení je nutně determinované architekturou aplikace a zdroji, které máme k dispozici. Zonky je postavený nad klasickým Java stackem - Spring, JPA a jako databáze se používá Postgres. Jako v každém jiném startupu jsme nejdříve validovali business model a jeho růst namísto toho, abychom tunili architekturu. Podle mého soudu je to naprosto validní a jediná správná cesta. K čemu je vám super škálovatelná architektura, když nemáte platící uživatele. Řečnická otázka samozřejmě.

Naše architektura je tedy resp. byla do jisté míry poplatná tomu, že jsme startup, který šel na trh s MVP. jednalo se o klasický monolit. Škálovatelnost vertikální ano, horizontální na papíře. Proč na papíře, když svět je přece plný technologií s neomezenými škálovacími možnostmi, máme Docker, Kubernetes, Redis, cloud, virtualizaci?

Při použití klasického Java stacku, máte teoretickou možnost škálovat horizontálně. V našem případě nasadit aplikaci na více strojů. Ještě jednou, tohle je teorie. Každý kdo někdy provozoval nějaký distribuovaný systém ví, že jakmile do hry začne vstupovat sdílený stav a síť, začnou se věci dost komplikovat viz CAP theorem a jeho důsledky.

Krátká odbočka k Zonky. V našem případě je sdílený stav reprezentovaný in-process cache, kterou offloadujeme zátěž z databáze. V cache leží všechny kritická data, která jsou nutná pro provedení investice - aktuální stav zainvestování, autentizační tokeny atd.

A teď zpátky k CAPu a jeho dopadům. Máte sice kód a technologie, které se tváří, že fungují v distribuovaném prostředí, ale prakticky nevíte jaké problémy se na vás řítí - rozpady sítí, zpomalení komunikace/zahazování packetu, rozjetí systémových hodin atp., které k vám stejně probublají.

Rozdíl mezi tím, kdy máte aplikaci horizontálně škálovatelnou teoreticky a prakticky, je v tom že tyhle okrajové případy selhání máte podchycené. Nemůžete si říci: můj technologický stack tohle podporuje, fajn jdeme na to. Musíte se podívat na sdílený stav a ten vyřešit. Žádná technologie, která by magicky za vás řešila všechny problémy sdíleného stavu neexistuje.

Náš charakter provozu vypadá následovně: stabilní počet požadavků a při půjčce s vysokým úrokem řádový nárůst, protože faktor času/rychlosti je klíčový. To co nám hraje do karet je, že chvilku před víme, že k takové události dojde. Zase je to teorie, protože pokud nedokážete horizontálně vyškálovat je vám tahle informace k ničemu.

Většina prvotních výkonových problémů šla jednoduše odstranit na databázi. Prostě se přidal chybějící index případně se zoptimalizoval JPA dotaz či jiné další známé ORM optimalizace. Před nějakým časem jsme ovšem narazili na problém, který vyžadoval mnohem větší invenci.

Problém byl v tom, že aplikace začala konzumovat veškerý výpočetní výkon a pak se na chvíli zasekla a pak zase rozběhla. Podle telemetrie všechno ukazovalo na Bcrypt funkci, která se používá na hashování hesel. Vzhledem k době platnosti autentizačního tokenu došlo k tomu, že se stovky uživatelů chtěly v jeden okamžik zalogovat. Bcrypt je jako bezpečná funkce pro hashovani hesel z principu pomalá.

To co nedávalo smysl, bylo zatuhnutí a samovolné rozběhnutí aplikace. Z telemetrie bylo vidět, že jsou obsazené všechny databázové připojení. Při bližším průzkumu jsme zjistili, že za to může použítí návrhového anti-vzoru OpenSessionInView v kombinaci se sideloaderem do cache.

Po celou dobu odbavení požadavku se drželo aktivní databázové připojení. Při saturovaném výkonu CPU to znamenalo, že vlákna, která fakticky databázová připojení nepotřebovala, (neb čekala na CPU) spotřebovala všechnu jejich kapacitu. Buďto se dostala k lizu a nebo skončily timeoutem. V tu chvíli se celý systém rozpohyboval zpět k životu. Jak to?

Máme read-heavy provoz, praktický veškerou komunikaci obsluhujeme z cache a data do cache (Hazelcast) se nahrávají side loaderem z databáze. Ten je reprezentován dedikovaným thread poolem. Čili mezi aplikačním vláknem či vlákny, které čekají na tu cache a vlaknem sideloaderu, které do ní nahrává data z databáze, došlo k vyčerpání připojení. Sideloader(y) do cache čekaly na spojení, která byla zbytečně držena aplikačními vlákny (díky OpenSessionInView), která čekala na CPU plně saturované Bcryptem. Když došlo k timeoutu nebo se uvolnilo spojení, ke kterému se dostalo sideloader vlákno systém se pomalu pohnul dopředu.

Pořadí našich patchů:

  1. Vertikální škálovaní - zvýšit výkon přidáním CPU
  2. Odložit alokaci databázového spojení na nejzašší možný okamžik (typicky zahájení transakce)
  3. Odstranit sideloading do cache pro nejčastější použítí
  4. Dedikovaný databázový pool pro sideloadery, aby nedocházelo k vzájemnému vyčerpání.
  5. Předřazení semaforu před Bcypt, abychom limitovali maxímánlí možmý paralelismus, který systém neochromí (počet CPU - 1)

Úplné odstranění OpenSessionInView nebylo možné a stejně tak přepsání sideloaderu vzhledem k urgenci toho problému.

Dalším krokem, který chystáme, je offloadování Bcryptu na volnou kapacitu, kterou máme v datovém centru k dispozici. Máme mikroslužbu, kterou nasadíme na N strojů a jediné co bude dělat, je hashování s tím, že tam bude vždycky možnost fallbacku zpět na lokální výpočet.

Zde se nabízí otázka jestli neudělat scale out do cloudu. Pro tenhle případ by se perfektně hodil serveless v podobě AWS Lambda. Už teď máme hybridní deployment, kdy nám server side rendering pro SPA běží nad AWS Elastic Beans Talk. Lambda má tu nevýhodu, že by tam byla daleko větší latence a mám trochu obavy, že neexceluje v schopnosti elasticky reagovat na prudký nárůst požadavků během pár desítek sekund. Pak by to znamenalo AWS Lamdy “nažhavit” tedy generovat syntetická provoz, aby se patřičně nafoukl počet instancí schopných odbavit očekávaný provoz. Potřebný infrastrukturní by byl mnohem složitější než samotná mikroslužba.

pondělí 6. března 2017

CZ Podcast 167 - Machine learning startups

At the episode 167. we interviewed Bradford Cross (Google, Flightcaster, Prismatic) who leads machine learning and big data venture capital fund www.ceai.io. We have been discussing various topics - Scala vs. Clojure, Prismatic acquistion by LinkedIn, machine learning at scale etc. One of the key topics was about a culture in startups distributed between Sillicon Valley and Central Europe. An excellent talk worth to listen.

neděle 26. února 2017

Digitální dementi

Jsem digitální dement a otrok chytrého mobilu? Sedím vám takhle s manželkou v restauraci a vzhlédnu od stolu, vidím jak u jiného stolu sedí jiná dvojice a oba koukají do mobilu. Chci něco pohoršeného dodat a všimnu si, že manželka kouká do mobilu. Spolknu myšlenku a vrátím se zpátky k svítícímu displeje mého mobilu. Stop, počkejte chvilku. Protřepat hlavu. Tohle přece není normální. Řekl jsem normální, ale co je normální.

Všimli jste si někdy ikonek aplikací, které vám signalizují, kolik novinek tam přímo na vás čeká? Začal jsem jejich tvůrce podezírat, že to slouží jenom jako vějička pro nalákání uživatelů. A tak sedím na hajzliku s mobilem v ruce a klikám na svítící ikony a jsem zklamán, že pod žádnou z těch ikon není vlastně nic nového, co by mě zajímalo. Stejně mi to nedá a tak pořád koukám.

Kdysi dávno jsem stíhal číst Twitter a dokonce si občas přečíst Facebook statusy a fotky přátel. Už to nedělám, vysoce sofistikované řazení příspěvků, které vás zamkne ve vaší bublině, mi bere poslední zbytky iluzí, že si svobodně volím to co mě zajímá. A bude hůř, strojové učení a petabajty dat budou sloužit právě k tomu, abychom v těch bublinách strávili více času.

Snažím se vypěstovat pár základních návyků, které mi umožní v téhle džungli přežít a nevypadat jako totální otrok sociálních sítí a mobilů.

  • Začal jsem znovu používat Newslettery jako zdroj informací, třeby ty z Oreilly nebo InfoQ. Nemám pak obavu, že zmeškám nějaký zajímavý článek. Články, které mě zaujmou - to nepoznáte podle 140 znaků dlouhé zprávy - si ukládám k pozdějšímu přečtení do Instapaperu.
  • Otáčím mobil displejem dolů, aby mě to nerušilo a nesvádělo k tomu do něj pořád čumět.
  • Dávám si mobil do náprsní kapsy, abych se k němu obtížně dostal, když jsme někde na procházce. Případně ho nechávám v jiné místnosti.

Co se mi nedaří. Neumím nečíst firemní email a Slack po večerech a o víkendech. Je to strašný mor. Člověk je pořád v divné tenzi, že mu něco uniká. Jak mi kdysi pravil jeden velmi moudrý kolega: když budeš pořád něco řešit, nikdy nic nevymyslíš. Musíš se naučit vypnout a nechat mozek flákat.

Proč o tom píšu? Zajímá mě jestli máte nějaké vlastní návyky, jak se tomu bránit nebo jsem sám kdo má pocit, že je digitální dement a otrok chytrého mobilu.

pondělí 20. února 2017

CZ Podcast 166 - Stories

Jednoho čtvrtečního odpoledne vzal Filemon svůj velmi malý mikrofón a vyrazil s ním k I.P. Pavlova vyzpovídat partičku kolem startupu Stories. Konkrétně jsme vyzpovídali Vojtu Ročka, Petera Fedoročka a Filipa Douška. Zajímá vás, co za analytická kouzla peče jeden z nejzajímavějších startupů v České Republice? K tomu se dále dozvíte, co to znamená exponenciální tým, proč se kluci vykašlali na AWS a jak krájejí nekonečný prostor a hledají v něm zajímavá místa. Kluci mají neortodoxní názory a nezdráhají se o ně s vámi podělit. Takže se připravte na díl ostrý jako břitva.

středa 8. února 2017

CZ Podcast 165 - CZ Podcast 165 - Sonda do jádra Mono, Micro, Unikernely

Tentokrát jsme zavítali na akademickou půdu MFF UK za Martinem Děckým z Katedry distribuovaných a spolehlivých systému. Naše povídání se točilo především kolem jádra operačního systému a jeho architektuře takže jsme se dostali od monolitické architektury, přes microkernely až po unikernely. Dotkli jsme se Dockeru, virtualizace a cloudu. To všechno jsou totiž témata, se kterými architektura operačních systému resp. jádra dost úzce souvisí.

čtvrtek 26. ledna 2017

CZ Podcast 164 - Etický hacking

Do dalšího dílu jsme pozvali Radovana Vacka ze společnosti Insighti a tématem byl white hat hacking či etický hacking aneb jak si nasadit hackery do firmy a ještě jim za to zaplatit.


úterý 17. ledna 2017

CZ Podcast 163 - 10 let jsme tu s vámi

Výročí si zaslouží speciální díl a ten vám právě přinášíme. Trocha rekapitulace, hosté z prvních dílů. Užijte si to a doufáme, že to s námi vydržíte minimálně dalších deset let!

neděle 15. ledna 2017

Moje cesta - Programátor těsně před čtyřicítkou

Nedávno jsem tuším na Zdrojáku četl článek A. Denta alias Martina Malého o tom, jaký je život programátora po čtyřicítce. Ten článek mi mluvil z duše a proto jsem se rozhodl popsat mojí cestu.

Jsem ročník 1979 a s počítači jsem nezačal koketovat v dobách tuhého komunismu a období studené války jako Martin Malý, ale těsně po Sametové revoluci. Asi tak těsně, že se nám během školní docházky občas vloudilo oslovení “soudružko učitelko”. Některé mé vzpomínky jsou proto notně zastřené.

Určitě jsme s bratránkem pařili něco na jeho Commodore 64, ale můj pravý začátek s počítači resp. mikropočítači se odehrál během vánoc 1991 ve věku sladkých jedenácti. To mě totiž moji oduševnělí rodiče naznali jako způsobilého k tomu, abych se stal vlastníkem Didaktiku M, černobílé televize, jehličkové tiskárny (musel se používat kopírovací papír tzv. kopírák) a kazetového přehrávače.

K tomu byl slovensky psaný technický manuál s popisem jednotlivých obvodů a já nevím čeho. Můj otec ho s neodmyslitelnou cigaretou v ústech pročetl a provedl iniciální propojení všech výše zmíněných periferií.

V těch dětských letech jsem počítač viděl jenom jako nástroj zábavy, ale jisté technické otázky mi vrtaly hlavou. Jak jsou ty hry udělané? Jak se dělá grafika? A co zvuk a hudba? Možná se teď jenom trochu idealizuji a ve skutečnosti mi učarovaly ty hry a tyhle otázky se objevily mnohem později.

Otec, velmi technicky založený člověk, mi opatřil knihu o programování v BASICu a já začal podnikat první nesmělé pokusy. Že bych tehdy tušil co to je procesor nebo paměť a nedej bože jak to funguje? O tom nemůže být ani řeč. Prostě jsem metodou pokus omyl začal tvořit jednoduché programy, do kterých si mohl člověk maximálně zapsat nějaký text. Metoda pokus omyl se stala po všechna následující léta mým nejlepším způsobem učení.

Snažil jsem se napodobit grafiku, kterou jsem viděl ve všech hrách, ale šance na úspěch byly velmi mizivé. Tehdy nebylo žádné StackOverflow, nebyl Google, kterého byste se zeptali “computer games graphic”. Navíc k jazykové vybavenosti dotvářející tehdejší školní docházku patřily hodiny ruštiny, protože učitelé anglicky ani německy prostě neuměli.

Mimochodem v té době Tim Berners-Lee právě spustil World Wide Web (WWW), tedy to co nyní většina lidí trochu zkresleně vnímá jako internet. Dokonce jsem ve svém okolí neměl nikoho, kdo by alespoň vzdáleně tušil, jak se tvoří počítačové hry. V roce 1994 jsem nastoupil na Střední průmyslovou školu v Písku. Didaktik M tehdy přestával být v kurzu a moje dychtivost po počítačovém vzdělání byla velmi rychle uvedena do reality Ohmova zákonů a polovodičů.

Místo do počítačové obrazovky jsem čuměl na osciloskop a snažil se pochopit věci pro mě naprosto nepochopitelné. Já si chtěl hrát s počítači a nikoliv stavět transformátory nebo se učit Boolovu algebru. Já byl vždycky spíš top down typ. Během dvou hodin výpočetní techniky (jedna učebna 286tky a druhá 386tky), jsme se učili ovládat DOS, Norton Commander a podobné blbosti.

Byly nějaké pokusy naučit nás programovat v Pascalu, ale kdo neměl doma PC, byl prakticky bez šance cokoliv pochytit. Možná jsem teď moc kritický, protože někteří z mých spolužáků to zvládli, ale já v tom plaval jako hranolky v oleji. Někdy kolem druháku jsem měl ve škole hrozné problémy, hlavně matematika pro mě byla naprostou noční můrou. Neoznačil bych se za úplně natvrdlého, ale pokud nemáte dobrého učitele, a pro technické předměty to platí absolutně, stačí jenom málo a věci vám přestanou dávat smysl a vy se je musíte učit memorovat. Já nikdy nebyl studijní typ, že bych ležel v učení, takže memorování u mě nefungovalo. Postupem času se můj školní průměr začal přeci jenom zlepšovat, ale programování mě pořád míjelo, přestože jsem kolem roku 1996 dostal PC 486.

Programovat na Didaktiku M a 486 byly úplně jiné světy. Na Didaktiku na vás blikal terminál, do kterého jste rovnou začali psát program, ale na 486 vás čekal maximálně DOS. A teď v tom DOSu zkuste začít něco programovat, pokud znáte maximálně BASIC. Na konci střední školy jsem byl maximálně špatně kvalifikován v pokračování rodinné tradice v opravě televizí.

Na vysokou školu mě nevzali. Tehdy se dalo ještě mluvit o tom, že si vysoké školy studenty vybíraly, neboť přijat byl každý pátý. Jsem tomu rád, protože místo přihlášky na techniku jsem zbaběle zkusil pedák s výpočetní technikou. A tak jsem dnes mohl být špatně vydělávající a neurotický zeměpisář či učitel občanské nauky s trvalým pocitem promarněného života.

Navázal jsem proto studiem na Vyšší odborné škole, ale pořád jsem byl od programování na hony vzdálen. Kromě toho moje PC 486 začalo poměrně dost rychle zastarávat. Možná jsem v té době ani o programování nepřemýšlel. Nicméně pak nastala v mém životě série třech velmi nepravděpodobných událostí, která mě nasměřovala na dráhu programátora.

Pamatujete si Invex? Invex byla výstava výpočetní techniky, kam se sjížděli adolescenti pařit nejnovější hry a slintat nad výdobytky ze světa spotřební elektroniky. Mimochodem jsem tam poprvé v životě viděl futuristický design počítačů značky Apple. Na plakátu samozřejmě. Ten mi učaroval tak, že mi několik let zdobil dětský pokojíček. Řízením osudu jsem si u jednoho stánku koupil hru za padesátikorunu a díky tomu se stal součástí velké slosovací soutěže o našlapaný počítač (Pentium II, grafický 3D akcelerátor). Kolik byla šance, jedna ku tisíci, jedna ke stu? Abych to zkrátil, vyhrál jsem ho.

Druhá náhoda spočívala v absolventské práci v roce 2001. Měl jsem absolvovat nějakou praxi a při ní pracovat na oné práci. Problém byl v tom, že můj vedoucí na mě neměl čas. V té době jsem chodil vypomáhat se správou počítačů, tiskáren apod. na záchrannou službu v Písku. Protože to byla brigáda přes jednoho z mých učitelů, pana Oldřicha Hlaváčka, napadlo ho, že bychom mohli zkusit změnit téma absolventské práce.

Slovo dalo slovo a já začal v rámci záchranky pracovat na vývoji informačního systému. Na škole jsme dostali nějaké základy databází, HTML, Visual Basicu, pokud si tedy dobře vzpomínám. S trochou nadsázky jsem si na té záchrance dělal product ownera, analytika, scrum mastera, vývojáře i testera v jedné osobě. Tři měsíce jsem jenom seděl a programoval v PHP, MySQL, HTML a JavaScriptu. Všechno jsem se poctivě učil občas opět metodou pokus/omyl.

V offline podobě byly k dispozici knihy. Papírové knihy samozřejmě. Požitkem byly návštěva knihkupectví a přehrabování se v knihách z nakladatelství Grada. Knihy měly dvě nevýhody. Mnohé byly zastaralé již ve chvíli kdy opouštěly areál tiskárny. Druhou nevýhodou byla cena.

V online podobě byly populární diskusní emailové skupiny. Existovalo jich několik, některé sídlily na serveru builder.cz a interval.cz. Tam jste poslali dotaz a občas vám někdo i odpověděl. Občas to tam pěkně vřelo, když padaly naprosto nevinné dotazy na to, jestli použít PHP nebo ASP. Taky jsem si párkrát přilil olej do ohně, ach to mládí.

Po dokončení řádného studia a úspěšné obhajobě diplomové práce jsem nastoupil základní vojenskou službu. Místo myši a klávesnice jsem leštil kanady a učil se pochodovat po buzerplace. Krom důležitých praktických informací, jako například způsobu skládání spodního prádla, se ve mě prohloubil přirozený odpor k uniformitě, hierarchii a hlavně dělání úkonů postrádajících smyl.

K majstštykům vojenské logiky patřilo trhání trávy v srpnu palčáky namísto použití sekaček. Na ty jsme totiž nebyli zaškoleni. O inteligenci některých kamarádu se jistě dalo pochybovat, ale na tohle stačili i ti nejméně bystří spolubojovníci. Pokud jste potřebovali něco s někým vyřešit, většinou jste nemohli, protože byste porušil subordinaci (komunikujete jenom se svým velitelem, a ten se svým a tak dále). Dokonalá průprava pro práci v korporaci případně dokonalý způsob, jak se naučit nenávidět hierarchie.

Neradostné rodinné události zkrátily službu vlasti na tři měsíce. Všem těm co se teď uchechtnou a utrousí, jaká to byla asi vojna, bych přál, aby to na vlastní kůži zažili aspoň týden a pak nechť ať hodnotí…

Tím se pomalu dostáváme ke třetí náhodě. Civil, ty vole civil, normální oblečení, jídlo, prostě vymoženosti běžného života. Jenom jedna starost, co budu asi dělat. Písek, mé rodné město, není zrovna technologický pupek světa. Rozhodně si tam kliku u dveří nepředávají magnáti ze Sillicon Valley.

Je podzim roku 2001 a já hledám práci. Nabídka technických pozic osciluje mezi barmanem v internetové kavárně, správcem sítě a prodavačem výpočetní techniky. Obešel jsem lokální firmy, poptal se po práci, rozeslal životopis a skončil jsem na pracáku tedy na úřadu práce. Kde já dneska mohl být kdyby to vyšlo? Asi opět na pracáku.

Určitě o mne byl zájem v Praze, ale já nejevil zájem o Prahu. Jednou mi takhle odpoledne zazvonila pevná linka. Paní z úřadu práce mi oznámila nechť navštívím firmu A.S.E.I. (Aplikace Systémů Ekonomických Informací), že by tam pro mne mohli mít práci. Vybaven adresou, Písek je rozkošně malé město, jsem vyrazil žádat práci. K mé smůle firma na adrese nesídlila. Pro jistotu jsem se byl na té adrese podívat několikrát, jestli mě nešálí zrak. A nešálil.

No nic, povídám uhlazené paní za stolečkem, na té adrese firma neexistuje, přestože tam mají ještě cedulku. Paní, jistě študovaná a moudrá, mi poradila ať tam zavolám. Zavolat? No to mě opravdu nenapadlo. Zavolal jsem tedy na telefoní číslo a domluvil si schůzku alias přijímací pohovor.

Dneska vývojář ukazuje GitHub, já tenkrát donesl vytištěnou diplomku. Na co přesně se mě ptali si nevzpomínám, ale hrozně se mi to líbilo. Samou radosti oslepen vlastní blbostí jsem nabídnul tykání budoucímu šéfovi Jirkovi Kotalovi - na pohovoru.

Od té doby dám dost na pocit, nejenom když měním práci, ale i když někoho přijímám. Musím z toho mít prostě dobrý pocit. Mimochodem od té doby nejsem zaskočen, když mi na pohovoru začne kandidát tykat.

Zpětně viděno, já dostal v té době práci snů pro můj další rozvoj. Webové aplikace, tenkrát se jim říkalo vícevrstvé, byly čerstvě narozený dítě a Java jakbysmet. Servlety nikdo neznal, možná ani nevymyslel, takže jsem si pěkně napsal vlastní HTTP server. Java to pro mě byla magie. Můj mozek nebyl připraven na mentální skok z PHP na Javu.

Mě najali, abych dělal ksicht těch aplikací. Opět jsme na to šli od lesa, místo JSP jsme pěkně dynamicky generovaly XML a pomocí XSLT jsme získávali HTML, které jsme rozhýbali JavaScriptem. Přátelé, to nebyl React, Ember či Angular, dokonce ani jQuery, ale document.getElementById. Historie zapadaná prachem, AJAX a asynchronní dotazy na server? Nepředstavitelné.

Java se mi nelíbila, bylo to na mě moc složité. K tomu Objektové programování. Všechno se to zlomilo díky tomu, že jsem si jednou v létě vypůjčil knihu Thinking in Java od Bruce Eckela od mého rádce a kolegy Rudy Pischeka. Sakra, najednou ty věci začaly dávat smysl. Teď trochu kecam. Musel jsem hodně programovat. S Rudou jsme neustále něco předělávali. Dneska by se tomu říkalo hackovat.

Tenkrát jsme dodávali jednu webovou aplikaci do Komerční banky. Mimochodem ta tam běží ještě dnes. Byl to punk non plus ultra. Oba dva jsme měli velmi mlhavé představy o bezpečnosti. Já tedy možná žádné a jestli měl Ruda, tak to úspěšně skrýval.

Aplikace na GET, jehož parametrem bylo osobní číslo zaměstnance, vracela jeho údaje. Kromě těch nevinných jako jméno a příjmení, či pozici, i ty citlivější třeba roční bonusy. To, že by osobní číslo zaměstnance mělo souhlasit s osobním číslem autentizovaného uživatele nás napadlo až ve chvíli předávky, kdy si nějaký vykuk začal prohlížet záznamy generálního ředitele.

Mezi další kiksy patřila záměna funkce pro zaokrouhlení desetinného čísla za truncate podle spec. symbolu aneb ze hodnoceni 4.9 byly najednou 4 a to v aplikaci pro hodnocení lidí. Tím jsme úspěšně přispěli k redukci zaměstnanců jiné banky asi o polovinu. Doufám, že už je to po těch letech promlčené. Kromě toho tam Ruda ještě v servrovně rozsednul diskové pole.

Někdy kolem roku 2004 jsem si čuchnul k Hibernatu a hlavně k Springu. To byl kulturní šok. Asi jako při přechodu z PHP do Javy. Taky jsem se díky psaní blogu potkal s pár lidma z Prahy a představa, že tam budu jednou pracovat, mě přestávala děsit. Jednou mi pod okny zastavilo SUV s pražskou poznávací značkou a chlápkem z Ústí či nějaké díry s komínem a jednou fabrikou ze severu. S ním jsme pak udělali pár dobrých věcí. Třeba CZ Podcast.

Filemon už tenkrát dělal pro Aribu, byl ve Finsku a spřádal velkolepé plány. Mě chtěl zneužít pro nějaký tool v Eclipse, který by potom Aribe prodal. Vždycky jsem bral Fila trochu s rezervou když mluvil o svých plánech - on lítal v oblacích a já chodil po zemi - proto on udělal několik úspěšných firem a já žádnou. Zaujala mě firma Systinet Romana Staňka, pro kterou Filemon dříve pracoval. Přetáhl mě tam, stejně jako o pár let později do GoodData, Pavel Kolesnikov řečený Koles. S ním to byla známost čistě virtuální, podle vzorce ty máš blog, já mám blog.

Je první Únor 2006 a já jedu tramvají číslo 1 směr Želivského, Praha hlavní město. Z firmy kde bylo maximálně pět Java vývojářů jsem se ocitnul ve firmě, kde jich bylo šestkrát tolik nebo víc. Naučil jsem se pár cizích slov, začal používat czechenglish (hoď mi tam mítíng ty vé, koho to hajrujete vy lůzři, naportujeme to pro AIX) a dostal se do jiného světa.

Původně jsem si myslel, že to bude svět webových služeb, ale k tomu, to mělo hodně daleko. Vývoj byl klasický vodopád, Spring tam nikdo neznal, ale za to jsem si tam přičuchnul k různým aplikačním serverům, databázím a middlewarů, ke kterému bych se jinak nedostal. Kromě toho mi tam vysvětlili co je to ten REST a našel jsem tam plno přátel a kamarádů do nepohody.

Kromě toho, že jsem se stále něco nového učil, jsem začal nějaké vědomosti předávat sám. Začali jsme nahrávat CZ Podcast a pořádat setkání pražské Czech Java User Group. Tenkrát u toho byl ještě Roman Štrobl alias Roumen, který pracoval v Sun Microsytems jako evangelista vývojového prostředí NetBeans.

Byly to doby, kdy jsme řešili blbosti typu: myslíš si, že je lepší Eclipse či NetBeans nebo já ti říkám velké firmy nebudou nikdy používat Spring. Hodně jsem pracoval. Já byl v práci i o dovolené, protože mě to prostě bavilo. Mezi roky 2001-2008 jsem měl maximálně dva týdny opravdové dovolené, myšleno offsite. Holt mladej kluk.

Zásadní předěl nastal ke konci roku 2009, to jsem totiž přestával věřit, že HP (spolknul Systinet) dokáže dělat dobré softwarové produkty. Jak by mohli ti kluci od tiskáren sakra vědět, jak se dělají softwarové produkty. Mojí tehdejší intuici nechť zvaliduje aktuální stav HP Software resp. pozůstatků kdysi hrdé Systinet firmy. Filemon mi tehdy nabídnul teplé místečko ve Spořce pod vlajkou jeho firmy JetMinds, se kterou se tam tehdy zkoušel etablovat.

Byl to světák světa znalý, dokonce mi tenkrát slíbil nějaké stock options. Ale já tam nevydržel déle než půl roku, korporátní prostředí není nic pro mě. Korporátní logika - v naší části lodi není díra - mi připomínala časy vojenského stejnokroje. Hodně mi chyběl pocit, že za něco kopu, že ta práce dává smysl. Anglicky se tomu dneska říká ownership. Začal jsem pošilhávat po startupu GoodData, který založil Roman Staněk. K mojí smůle tam nebyla žádná práce v Jave. Bad luck, smůla hochu, někdy jindy a jiném životě.

Na CZJUG na jaře 2010 dorazili Koles s Jardou Gergičem a bavili jsme se o GoodData a oni nadhodili, že tam mají vlastně část aplikace napsanou v Jave. Zalapal jsem po dechu a začal jsem se vyptávat. Slovo dalo slovo a ocitl jsem se tam na pohovoru. Otázky jsem smáznul snad dřív než se na ně ptali. Ego nabylo obřích rozměrů, když mi volal sám Staněk a popisoval mi klady a výhody práce pro něj. Nakonec se mi s nabídkou neozvali. To mě doslova pobouřilo. Nakonec z nich vypadlo, že mají nějaké pofidérní pochybnosti, a že mě určitě nemůžou zaplatit, protože jako startup.

Málo love. Ty kdyby věděli, že bych tam dělal i za půl darma. Startup, Sillicon Valley, akcie, produktový vývoj. Bylo mi 30, žádný závazky, tak proč to nezkusit. Peníze budou a hlavně to ti povídám, až se ta firma prodá, budu ve vatě a kalim s čičinama v pražským báru. No realita bývá někdy na hony vzdálená představám.

Místo do Sillicon Valley a jízdě po Golden Gate jsem jezdil maximálně pendolinem přes Pardubice do Brna. Ale stálo to za to. Teď nemyslím catering Českých drah a jejich neschopnost zajistit internetové připojení. Byla to velká profesní škola života. A.S.E.I byla základka, Systinet střední, GoodData vejška. Najednou jsem začal pracovat na produktu, který reálně používali zákazníci (rozdíl proti HP). Byli jsme v cloudu na AWS, řešili zajímavé problémy a firma i produkt rostly.

Mohl bych tu psát o tom, že jsem poznal co to znamená distribuovaný systém, zažil DevOps, NoSQL, ale nejcennější bylo, že tam byla hromada chytrých lidí, od kterých se mohl člověk leccos přiučit. Na druhou stranu tam byla trochu kultura inženýrských alfa-samců, kde se neustále poměřovala ega. Všechno to bylo navíc vyostřené ideologickým sporem, která technologie je nejlepší. I triviální rozhodnutí končila v klinči patem, protože nikdo nechtěl ustoupit ze své pravdy. Marnost nad marnost.

Bylo tam pár failů, které jsem si řekl, že nikdy za žádných okolností znovu v jiné firmě nedopustím. Některé se mi podařilo dodržet, třeba že na backendu budeme mít jeden jazyk, a jiné nikoliv, třeba Ember. Strávil jsem tam krásných pět let a zase to nedopadlo exitem. Pokud by bylo náhodou IPO, dejte mi vědět kvůli akciím.

No krásných pět let.. Přátelé, měl jsem se tam báječně. “Hypotéka na krku, dítě na cestě, máš se tam jako prase v žitě, proč chceš odcházet?" Ťukala si na hlavu moje žena. "Půjdeš do Zonky, nechceš radši do Avastu? Měl bys tam snídaně, obědy, večeře - víš kolik toho sníš - pět minut od baráku, mohli bychom tam za tebou se synkem zajít.” No jak bych vám to vysvětlil, jsou lidi, kteří když si můžou vybrat ze dvou cest k dosažení nějaké výzvy, tak si z principu vždycky vyberou tu složitější. A to je přesně můj případ. Asi soutěživost nebo pocit, že to nebude moci nikdo zlehčovat.

A tak jsem v Zonky, to je peer to peer služba na půjčování peněz. Asi patnáckrát jsem se sám sebe ptal, kam to lezu. Malý kancly, CTO co jezdí ve Fabii a na oběd do vývařovny na stojáka (bez stravenek) zvané U mokrýho lokte, kam mě brával fotr snad ještě za komára. Ovšem velká výzva, postavit tu službu v pár lidech.

První skvělá zpráva na sebe nenechala dlouho čekat. CTO si jede na tři měsíce na dovolenou a pak se asi nevrátí. Máš to tu na starosti. Ahoj kluci, ehm, pardon? Už jsem se smířil s tím, že po patnácti letech nebudu programovat. Je to pech, ale firma si myslí, že jí více pomůžu, když to celé budu pomáhat řídit.

Má to jednu výhodu, když za mnou přijde vývojář s nějakým geniálním nápadem např. že to celé přepíšeme do Scaly, mám po ruce milion a jeden argument, proč je to ten nejdebilnější nápad pod sluncem. To byl fakt jenom příklad, nic proti Scale, kromě toho že to je akademickej jazyk, jednou to napíšeš a nikdo to už nepřečte. Ale co já vím o Scale, že jo.

Za těch patnáct let mám krapet zkušeností, které vybrousily něco čemu se říká intuice. Je to blbý, že to takhle říkám, protože dneska chce každej řídit firmu daty, že jo… Chce za vším vidět propracovaný kalkulace a div ne umělou inteligenci, ale ono je to pořád stejný. Kromě intuice jsem měl vždycky štěstí. Nebo jsem měl štěstí, protože jsem měl intuici? Kdo ví.

Je pár principů, které jsem si ověřil a které fungují přes více oborů. Dej lidem svobodu a chtěj po nich odpovědnost. Důvěřuj jim, jinak jsi je neměl najímat. Když se něco podělá, ber to jako příležitost se něco naučit. Nikdy netoleruj alibismus. Z těch hardskillových není žádné univerzální, protože technologie se mění každý den. Co platilo včera je dneska tabu. Nevěřím na nějaký upfront design čehokoliv a velké plánování, protože ani jedno ani druhé nepřežije první střet s realitou. A samozřejmě pokus omyl stylem top down. To je asi pointa celého příběhu.

Vlastně možná jenom jedna myšlenka. Štěstí musíš mít aspoň na lidi a já ho měl třeba díky CZ Podcastu nebo CZJUGu nebo tomuto blogu. Snad vám moje cesta pomůže ve vaší vlastní, ale tu si musíte prošlápnout sami.