Ačkoliv to nejde vidět, pod kapotou logbooku se toho děje skutečně hodně. Aplikace, která se stará o zpracování dat z OGN sítě trpí během krásných letních dnů neskutečnou zátěží (jak jsem již dříve popisoval tady) a kromě počasé kromě super zážitků v luftě způsobuje značnou frustraci a spoustu vrásek ve tváři admina serveru. Popravdě, asi by to nebyl zase takový problém, ale je to tak nějak iritujující..
Fronta OGN beaconů řazených pro zpracování je nakonfigurována na „neomezenou“ délku již více než dva roky a jediný způsob, jak se problém projevuje, jsou až 12hodinová zpoždění ve zpracování nahromaděných dat během těchto přenádherných dnů, aniž by tedy došlo k jakékoliv ztrátě cenných dat. Vzhledem k tomu, že běžící kód plně vytěžuje všechny čtyři jádra procesoru Intel Xeon Silver 4214 @ 2,20 GHz, vyvstala doměnka, že je v kódu něco opravdu shnilého. Navíc je již v běhu i plán přesunout tento server na Raspberry Pi s výrazně nižším výkonem. Takže je s tím třeba něco konečně udelat.
Rozhodování bylo jasné – potřebujeme výrazně urychlit vše, co je třeba provést v reálném čase. Tudíž hned teď. Jak je Python na některé věci opravdu vynikající, tak v tomto případě je zárověn i neskutečně zdechlý. V níže uvedené tabulce je několik programovacích jazyků, ze kterých bychom mohli volit náhradu a které by vyhovovaly našim potřebám. Na základě této tabulky, kterou jsem si vypůujčil z mého oblíbeného informačního zdroje Hackaday.com se jako vhodné alternativy nabízejí následující:
Odshora dolů můžeme uvažovat o C, C++, Rust, Adě, Javě, Packalu. No, C/C++ nepřipadá v úvahu, protože moje zkušenosti s vícevláknovými aplikacemi v C nejsou zrovna pozitivní (a ne, opravdu netvrdím, že po všech těch letech vývoje OGN krabiček jsem někde blízko zkušenému vývojáři v Céčku 😉 ). Rust je neskutečně divný, Ada, Fortran (ani náhodou) a Java. Kdysi jsem chrlil vcelku dost krásného kódu v Javě, Java je dobrá, jen její paměťová náročnost je pro malé Pi asi poněkud příliš. Ale co takhle vyzkoušet ten Rust!?
Navzdory všem nepočítaným článkům a blogům, které nepokrytě vychvalují Rust snad i jako náhradu zdravé výživy, a po téměř roce škrábání se po pověstné učící křivce si troufám tvrdit, že Rust je zdaleka nejkrvavější pokus o naučení se nového jazyka, který jsem kdy zažil. Přepsat celé jádro OGN logbooku mi prakticky zabralo dva měsíce kódění na plný úvazek, způsobovalo hromadu zoufalství a válčení s dosud neviděnými kompilačními problémy, exotickou syntaxí a celkově odlišným přístupem. Přesně jak se říká.. zážitek nemusí být kladný, hlavně když je silný! Nakonec se to povedlo, po dalším měsíci testování, ověřování, nahrazování spousty unwrapů a pilování detailů máme funkční back-end logbooku postavený na .. korozi. Zkušenější ‚rustaceans‘ sice asi při pohledu na to, co bylo zkomponováno skalním OOP vývojářem trefí šlak, ale hlavní je, že to (více méně) funguje.
Více méně. Logbook, který v tuto chvíli využíváte je stále postaven na pythonním kódu. Důvodem je především to, že objem provozu, jak jej lze spatřit v monitoringu se poněkud odlišuje pro obě implementace. V počtu zpracovaných OGN beaconů to může být jen pár procent v nočních hodinách, nicméně rozdíl dosahuje i více než 20% ve špičkách přes den. APRS filtry jsou identické (celý svět) a pravidla pro filtrování beaconů takéž. Jen rustový logbook dostává méně beaconů a navíc, což je nejpozoruhodnější, vyskytuje se i mnoho beaconů letadel, které pythonní logbook vůbec nevidí (a i naopak). Kdybyste někdo náhodou měli ponětí, proč se tak děje, dejte mi prosím vědět! 🤓
Další věcí která se nedávno podařila je rozšíření databáze letišť o všelijaké větší i menší plochy v Kanadě. Na prosbu jistého Tima jsem přidal nejen jejich letiště v divočině (CPL3, Kars, Ontario) ale přibylo i dalších 1637 nových ploch. Výsledný soubor se teď tedy sestává z pozoruhodných 26903 letišť nad kterými OGN logbook drží stráž 🙂