Hlavní navigace

Michal Bláha (Hlidacstatu.cz): Novináři, kteří používají Hlídače, mají nejvíc exkluzivních zpráv

Autor: David Slížek, Internet Info
Jan Sedlák

Celý kód Hlídače chci jednou zveřejnit jako open source, říká autor Hlídače státu a popisuje, jak vypadá technické pozadí této služby.

Doba čtení: 13 minut

Hlídač Státu oslavil dva roky fungování a postupně se pěkně rozrostl. V databázi má 120 milionů záznamů, 1,5 milionu smluv nebo 800 veřejných zakázek. Autor Hlídače Michal Bláha plánuje postupně zapojovat nové zdroje dat.

V rozhovoru pro Lupu popisuje, jak má vyřešené technické pozadí této služby, jaké funkce chce přidat, v čem by potřeboval pomoci od dobrovolníků, a naznačuje, že by projekt mohl uvolnit jako open source.

TIP: Michal Bláha bude o digitalizaci státu mluvit na konferenci WebTop100

Hlídač Státu je po Atlas.cz tvůj další projekt, o kterém je v Česku poměrně dost slyšet. Atlas byl mimo jiné známý tím, že běžel na technologiích od Microsoftu. Jak k tomu přistupuješ nyní v Hlídačovi?

Podobně, ale Hlídač už je různorodější. Atlas byl do značné míry „Microsoft only“ a i u Hlídače je většina kódu napsaná v .NET, a to jak byznys logika, tak web. Ale například u databáze se jen velmi omezeně používá Microsoft SQL. Nasazené je jen na jednoduché věci, jako jsou data z obchodního rejstříku, správa uživatelů a pár maličkostí navíc. S drtivou většinou dat pak pracuje Elastic. Plus samozřejmě mám různé drobné věci, které jsou napsané v kde čem – něco v Javě, Pythonu, JavaScriptu (Node.js).

Dělal jsi před rozjezdem Hlídače nějaký větší náčrt celé architektury a promýšlel jsi, jak to všechno půjde k sobě, nebo službu skládáš postupně?

Úplně první verze Hlídače byla postavená na Solr. Ale tam byl problém, že to umělo pouze fulltextový engine a samotná data bych stejně musel mít někde uložená. Elastic mi současně data uloží a poskytne a také mi udělá indexy. Velice rychle jsem tedy přešel na Elastic a zjistil jsem, že je to zcela geniální a je to jedna z nejlepších technologií, kterou jsem poznal a umí toho mnohem více, než jsem původně tušil. A je velmi výkonná a škálovatelná. Smlouvy zpracovávám průběžně každou hodinu. Každou noc to vezmu všechno znova a doplním, co jsem nestihl během dne. Do Elasticu dělám tři tisíce dotazů za sekundu a Elastic to zvládá.

Proč sis vybral .NET?

Protože v něm umím a znám ho. Je to dobrá technologie. Existuje řada frameworků pro PHP, Ruby a spol., ale .NET má výhody, kvůli kterým já u něj zůstávám. Je dvacet let konzistentní. Samozřejmě byly doby, kdy Microsoft blbnul a vymýšlel podivnosti, a to hlavně v době, když se snažil .NET dělat multiplatformní. Ale poslední dva roky je vše bez problémů, technologie je připravená na škálování, běží v kontejnerech, je open source, je slušně multiplatformní.

Jednou z výhod, proč u .NET zůstávám, je ekosystém, který je veliký a řízený. Stojí za ním velká firma, která nezkrachuje, a není to postavené pouze na jednom člověkovi. Současně je ekosystém relativně konzistentní. V Javě si můžu vybrat z deseti různých vývojových prostředí a platforem a databází. Je to strašně roztříštěné. V .NET je to mnohem snazší.

Využíváš nějakým způsobem Docker?

Elastic by na Dockeru mohl běžet, ale mám ho na virtuálních strojích. Využívám částečně cloud od vpsFree, kterým tímto děkuji, protože mi část infrastruktury dávají zadarmo a část dostávám od kamaráda Honzy Panocha, kterému patří stejný dík. Elastic Hlídače tedy běží na třinácti strojích. Zbytek fyzicky běží na jednom silném stroji, na kterém ale funguje ještě pár dalších virtuálek, které mám na komerční projekty, plus mám jeden fyzický stroj, na kterém mám skripty, parsování a podobně. 

Nezvažoval jsi spuštění na nějakém public cloudu typu AWS?

To je pro mě drahé. Kdybych Elastic v rozsahu, tak jak ho používám dnes, provozoval na AWS, platím minimálně o nulu víc. Hlídač je neziskový projekt. Nemluvě o tom, že bych data měl podstatně dále, zatímco vpsFree mi sedí o dva racky vedle u stejného poskytovatele (Master Internet). Dat mi teče poměrně hodně s tím, jak se Elastic neustále synchronizuje.

Kontinuálně teče kolem 150 Mb/s, ve špičkách 200 až 250 Mb/s. Elastic si sám neustále přelévá data „zleva doprava“. Není to zcela trvalý tok, ale když se podívám na denní křivky, není tam třeba hodinová pauza. Navíc přichází dotazy ze všech nodů a spojují se do jedněch výsledků. Když dám dotaz do Elasticu, tak node, kterého se zeptá, přenese dotaz na všechny ostatní nody, ty tento dotaz udělají, vrátí k němu výsledky, hlavní node je spojí a vrátí mi je. Také nody si mezi sebou „povídají“.

Rozumím tomu, kdy cloud typu AWS funguje dobře a kdy má své opodstatnění. Ale na mé situace mi většinou přišlo výhodnější to řešit u sebe. Ne pouze cenově, ale i také z hlediska správy, částečně to bude i zvyk. Ale z cloudu Azure používám funkci Application Insights, díky které se víceméně bezpracně dostanu ke statistikám, jak to funguje uvnitř aplikace, kde jsou slabší místa a podobně. Pomocí jednoduché konfigurace se integruje dovnitř aplikace v .NET a dělá to diagnostiku. Existují další podobné služby a nástroje, ale Microsoft to udělal moc hezky a elegantně.

Jaký typ dat si odkládáš dočasně a co ukládáš trvale?

Cache dělám u věcí, které trvá dlouho spočítat. Elastic má několik výhod a několik nevýhod. Jedna z nevýhod je, že není vhodný na dotazy typu „vyjeď mi všechna čísla IČO“. Oproti SQL je pomalejší o několik řádů. Ale za to je skvělý na dotazy typu „najdi mi smlouvy obsahující tato slova, sluč je po měsících, sečti hodnoty smluv po měsících a po letech“. Tam SQL nemá šanci.

Některá data mám tedy v cache – třeba celý „dump“ čísel IČO. Dále například počítám ke každému úřadu a firmě některé základní statistiky po letech. Teď to dělám tak, že pro všechna čísla IČO, která jsou v registru smluv, kterých jsou řádově větší desítky tisíc, spočítám statistiku a přepočítávám ji každý den. Ale zvažuji, že se na tuto strategii znova podívám, zda vše nepočítat jen v případě, když si o to někdo řekne. Protože z těch desítek tisíc se na třetinu čísel nikdo nezeptá. Ale ještě si musím projít kód, protože vím, že někdy dělám analýzy napříč. Už to jako projekt docela narostlo.

S jak velkými objemy dat pracuješ?

V Elasticu mám 250 GB dat. Dále mám staženy všechny dokumenty z registru smluv, čehož je asi 1,5 TB. Veřejných zakázek je pak asi další 1 TB. Každopádně jsem v půlce toho, co bych chtěl mít. Od října budou k dispozici všechny veřejné zakázky, nyní mám k dispozici pouze ty velké a od nich část dat. Nyní budou všechny zakázky včetně zadávacích dokumentací a podobně, a to i z profilu zadavatelů.

Také se budu napojovat na Dotačního parazita, kde budu mít souhrnné informace o dotacích. Všechny tyto údaje budu dávat do kontextu v rámci Hlídače. Na posledním státním hackathonu jsem také spustil novou věc, které říkám datové sady. Jde o volně dostupné API na Hlídači, které komukoliv umožní si do Hlídače uložit strukturovaná data a zpřístupnit je komukoliv dalšímu. Data budou okamžitě fulltextově indexovaná a bude možné nad nimi zapnout notifikace. Myšlenkou samozřejmě je to, aby lidé nahrávali data týkající se české veřejné správy, která jsou alespoň základním způsobem užitečná pro ostatní. Nepůjde o volné úložiště. Například nedávno jsem tam vložil všechna rozhodnutí ÚOHS.

Daří se ti dosahovat na dobré odezvy?

Ač pracuji s velkým množstvím dat, 99 procent zobrazených informací se zobrazuje živě z Elasticu a odezvy mám do 250 milisekund. Vždy se usmívám, když státní systémy za desítky až stovky milionů korun mají odezvy tři sekundy a já to mám za pár korun výrazně rychlejší. Ale samozřejmě nějaký větší DDoS útok bych asi jen tak nepřežil.

Už na Hlídače nějaké útoky šly?

Ani ne. Pouze čas od času někdo stahuje data, což mi trochu vadí, protože většina dat je dostupných přes API a mě využívání API vyjde levněji. Je to levnější na procesorový čas a tak dále. Důvod, proč data někdo parsuje, úplně neznám. Je pravda, že do API několik málo detailů nedávám, ale nevím. Možná si nevšimli, že tam API je.

Nebudeš Hlídače duplikovat do dalšího datacentra?

Zatím ne. Drtivou většinu dat dokážu znova rekonstruovat. Znovu je stáhnu, znovu přepočítám. To, co nedokáži rekonstruovat, mám několikrát zálohované, v rámci jednoho datacentra. Když bouchne datacentrum, asi bych o data přišel, ale to se snad nestane.

Jak často děláš patchování a další údržbové aktivity?

U Windows prostředí tak do týdne, co update vydá Microsoft. Dělám to ručně, strojů nemám tolik. Elastic řeším tvrdě řízeně. Automatizované tyto procesy nemám. Mám relativně malý systém a dělám ho sám a je pro mě důležitější mít kontrolu nad tím, kdyby se něco změnilo. U Microsoftu si vzpomenu, že je update, a někdy v noci ho vyřeším. Nemám dobrou zkušenost s tím, když se servery restartují, kdykoliv se jim zlíbí. U Elasticu je update vždy trochu bolest, protože se cluster pokaždé rozpadá a podobně. To je jedna z věcí, kterou by mohli vyřešit. U Elasticu by se mi líbilo, kdyby to fungovalo jako u WordPressu, kdy zmáčknu jedno tlačítko a dojde k updatu.

Jaké jsou největší technické „bottlenecky“, které řešíš?

Já už jsem docela zkušený borec, takže některým věcem se dopředu dokážu vyhnout (smích). Asi jako každý bojuji se dvěma největšími problémy, které se vývojářů týkají, a to je pojmenování a cache. Cachování je někdy složité. Ale zásadní úzká hrdla nemám. Občas jsem bojoval s Elasticem, že mi třeba v noci přestal na půl hodiny fungovat. To jsem vyřešil tím, že jsem přidal pár nodů a upgradoval na novější verzi.

Elastic se poměrně rychle rozvíjí, většinou zhruba jednou za rok má novou „major“ verzi. Mezi posledními verzemi se odehrály poměrně velké změny. Přejít na poslední verzi pro mě bude znamenat sáhnout docela dost do kódu a upravit ho. To bude bolet, takže tomu se zatím vyhýbám. Cache v současné době často řeším v paměti. Věci, které potřebuji mít v cache, mám částečně na disku, ale především v paměti. Není to úplně dlouhodobě udržitelné, takže přemýšlím, že bych nasadil Memcached či podobné řešení.

Na straně získávání dat už je problémů více?

Tam jsou miliony problémů. Když už jsou nějaké problémy, tak jsou na straně úřadů a spol. Úřady se někdy brání. Obchodní rejstřík nebo ARES jsou rejstříky, které jsou dlouhodobě strašně problematické, a situace se zhoršuje. Stát obecně velmi zřídka hledá cestu, jak lidem, kteří data konzumují, pomoci. Spíše hledá cesty, jak jim to zkomplikovat. Jsou výjimky a přibývá jich, ale obecně je spíše tendence přístup k datům komplikovat. A to i u datových sad, které mají být jako open data ze zákona.

Typickým příkladem je ARES. Méně komfortně už to udělat snad ani nejde. Někdy je problém se dostat k datům, která jsou potřeba, ale prostě nejsou k dispozici vůbec. Každý měsíc posílat žádost podle zákona 106 také nedává úplně smysl. Jsem rád za hackathony, jako byl ten státní. Ty státu ukazují, že když otevře data, nepředstavuje to pro něj riziko. Naopak to ukazuje, že když se data dají ven, lidé s nimi umí dělat řadu věcí a nakonec státu pomohou v jeho vlastní práci. Je to běh na dlouhou trať.

Hlídače stále vyvíjíš především ty?

Tak 99 procent kódu je má práce.

Dobrovolníci se nehrnou?

Asi to s nimi moc dobře neumím. Přes zimu jsme nabrali asi šedesát dobrovolníků. Dali jsme jim seznam věcí, které by bylo potřeba udělat, a každý si pak mohl vybrat a navrhovat další změny. Ukázalo se, že hodně lidí bylo zvědavých, ale když mělo dojít na nějakou práci, zjistilo se, že jde o náročnější věc a že věnovat tomu čtyři hodiny týdně je pro ně problematické. Nebo že je to ve skutečnosti zase tak moc nebaví. Asi jsme dobrovolníky neuměli příliš zaujmout a vtáhnout je, takže to spíše vidím jako chybu na naší straně. Komunitu jsme nedokázali motivovat a inspirovat. Uvidíme, jak se to vyvine.

Není to podobné jako open source?

Je to podobné, ale to je tak všude. Několik let zpátky se prezentovala čísla, že jedno procento lidí na internetu obsah produkuje, tuším osm procent ho aktivně komentuje a zbytek ho pasivně konzumuje. Nám aktivně pomohlo osm až deset lidí.

Dlouhodobě chceme dát všechen kód Hlídače jako open source. Nebyl by problém ho zveřejnit už teď, ale zveřejnit ho bez dokumentace nedává velký smysl. A já nyní nemám dost času se o komunitu kolem celého kódu Hlídače na GitHubu postarat.

Nemáš ambice dobrovolníkům nabízet finanční odměny?

Nemám, protože dobrovolnictví není za finanční odměnu. Samozřejmě bych byl rád, a dlouhodobě k tomu směřuju, aby kolem Hlídače byl tým pěti, šesti lidí, kteří se mu budou věnovat na plný úvazek. K tomu potřebuji financování. Proto prosím malé dárce, aby přispívali ideálně pravidelně, a obcházím velké dárce, aby mohli přispět větší částkou. Primárně by peníze šly na platy lidí. Ale ten tým ještě nestavím, protože se mi zatím podařilo vybrat asi milion a tři čtvrtě a já bych rád, abych měl financování alespoň dvou až tří lidí na rok a půl dopředu. Nechci do týmu někoho dovést a za půl roku mu říci, že došly peníze. Čekám, až se mi podaří vybrat o trochu víc.

S jakým „pitchem“ za potenciálními dárci chodíš?

Snažím se vysvětlit to, co Hlídač dělá a že se snažíme udělat transparentní to, co stát dělá. Ať už jde o finanční toky, smlouvy a celý kontext. Poskytnout data veřejnosti a novinářům. Pro novináře se z Hlídače stal nezastupitelný zdroj informací. Jeden z důvodů je to, že jsem se informace snažil zpřístupnit srozumitelnou formou, protože tohle stát často neřeší. Ale pořád je na tom dost práce.

Kolik v současné době provoz Hlídače stojí?

Nepočítám svůj čas. Hlídači už se v podstatě na plný úvazek zadarmo věnuji dva roky. Velké množství infrastruktury využívám ze své komerční firmy, což jsou opět náklady, které jsou nulové. Další kapacity mám zadarmo, jak už jsem zmiňoval. Reálné náklady, které platím, jako jsou licence, online služby a další věci, může být do deseti tisíc korun měsíčně.

Jaký je poměr toho, kolik času a práce dáváš programování a technické části a tomu zbytku?

Špatně se to odhaduje, protože je to nárazové. Teď jsem spouštěl datové sady, takže jsem jel týden dvanáctihodinové směny, kdy jsem více méně jenom kódoval. Chtěl jsem to stihnout do státního hackathonu. Pak jsou období, kdy na kód dva měsíce nesáhnu, nebo udělám pouze nějaké drobné úpravy, opravy chyb a podobně. Měl bych kódovat méně a více času se věnovat tomu ostatnímu. Hodně času asi trávím tím, že analyzuji data a dělám investigaci a zjištění šířím na sociálních sítích, dávám novinářům a podobně.

Jaké dobrovolníky v současné době potřebuješ nejvíce?

Potřebuji každého, každá ruka je dobrá. Já jsem extrémně špatný na marketing. Jedna slečna mi s tím pomáhá, hlavně s AdWords. Navíc je to trochu specifické, protože Google nám dává nějaký rozpočet v rámci programu pro neziskové organizace a tam je řada omezení, které je dobré znát. Navíc já nemám čas data analyzovat, vylepšovat reklamy a tak dále a slečna taky moc ne. Strašně by mi pomohlo mít na každou práci někoho, kdo je v tomto samostatný a nebude ode mě potřebovat žádnou zpětnou vazbu.

WT100 tip v článku Dolejšová

Dále samozřejmě potřebuji programátora, ještě lépe takového, který umí .NET. Někdo s dostatkem času by byl sen. Kód mám podle mě docela dobře čitelný a nemyslím si, že ho píšu úplně „prasácky“. Bylo by fajn, kdyby se do něj díval ještě někdo jiný. Dále potřebuji „šťourala“. Charakterem a přístupem investigativního novináře, kdo by s daty pracoval a hledal v nich podezřelé věci. 

Vím o několika novinářích, kteří Hlídače používají prakticky na denní bázi. Mají nějaký okruh, který je zajímá a nějakou oblast, na kterou se specializují. Přes klíčová slova si z těchto oblastí nechávají každý den posílat všechny smlouvy. A tito lidé mají nejčastěji exkluzivní zprávy, protože toho díky Hlídači v registru smluv a veřejných zakázkách spoustu najdou.

Našli jste v článku chybu?