Jimmy Hayek

Konečně pracuju na vlastním side projektu

Side project

Jak už jsem naivně zmiňoval v článku před třemi lety, rád bych rozjel vedle full-time práce nějaký vlastní projekt. Něco, na čem budu moct podle možností dlouhodobě pracovat, rozhodovat o směrování dle vlastního úvážení a co bude mít potenciálně vyrůst a třeba jednou se tomu věnovat naplno. S prací na hlavní úvazek a dvěma malými dětmi doma není moc snadné něco po večerech bastlit a proto jsem dlouho (ano, hodně dlouho, přítelkyně už má ze mě legraci) přemýšlel, do čeho se pustit. Vždy přijdu s nějakým skvělým nápadem, abych o týden později ho zahodil, když ho začnu promýšlet do důsledků. Nápadů je spousta, čas ale omezený. Takže jsem potřeboval přijít na něco, co mě bude dlouhodobě bavit, bude dávat byznysově smysl a budu schopný rozjet alespoň v prvotní fázi jako one man show. Za poslední cca rok k tomu přibylo ještě jedno kritérium: naučím se na projektu (jako vývojář) něco nového, co mě posune dál a co třeba budu moct využít i v běžné v každodenní práci. Zkrátka dá mi to příležitost vyzkoušet si nové technologie, jazyky nebo přístupy, na které v běžném pracovním nasazení není úplně prostor. I když projekt nakonec vyhnije, nebude to promarněný čas, ale svým způsobem investice.

Online nástroje

Začal jsme takhle třeba už před cca rokem pracovat na projektu Pretty.tools, což by měla být platforma pro jednoduché online nástroje (zpracování textu, PDF, obrázků, videí atd). Cílem bylo/je vytvořit pod jednotným přehledným UI databázi těchto nástrojů seskupených do tematických sekcí, které si budete moci přidávat mezi oblíbené a různě je kombinovat a řetězit. Sám totiž mám spoustu oblíbených online nástrojů, které běžně využívám, ale téměř po každé je googlím, protože si nepamatuju adresu. Co si budeme… no skončil jsem u tvorby druhého nástroje :-D Zatím je projekt u ledu, neříkám, že v něm třeba nebudu ještě pokračovat, ale uvědomil jsem si, že monetizace takového webu by byla problematická, respektive dávala by možná smysl až v dlouhodobém horizontu při organickém růstu a jednoduše řečeno za hodně práce by bylo málo muziky. Vývojářsky mě to taky příliš nenaplňovalo - hodně repetetivní jednoduché práce převážně na frontendu. Na druhou stranu jsem si na tomto projektu vyzkoušel práci v rámci frameworku Astro.build, což je slibný (nejen) statický generátor a v rámci vytváření základů vlastní UI knihovny jsem si vychytal pár přístupů, které vuužívám v práci dál.

Deep learning pro obchodování

Další projekt, kterému jsem se chtěl vážně věnovat, bylo využití deep learningu pro krátkodobou předpověď vývoje cen kryptoměn/akcií/komodit atd. Můžete si to představit jako aplikaci, která by vás třeba upozornila, že na základně dnešního obchodování zítra s velkou pravděpodobností významně (definováno např. minimálním % přírůstkem) poroste cena XY akcie a současně byste mohli vidět úspěšnost odhadů pro konkrétní akcie v minulosti. Na pozadí by bylo několik modelů neuronových sítí natrénovaných na specifickou oblast rozpoznání cenových paternů – neboli taková pokročilejší technická analýza pro trading. Ono to zní možná jako slepá ulička (a dost možná i je), ale je to něco, co mě dost fascinuje a má teoreticky velký potenciál. Na tohle téma z různých úhlů existuje dost zahraničních paperů, spoustu z nich jsem se snažil nastudovat, ale obecně machine learning nebo pak pokročilejší deep learning je dost náročná oblast na teoretické znalosti matematiky a statistiky, takže i když mám dva semestry matiky a statistiky na ekonomce :-D je to pro mě pořád dost španělská vesnice.

Důvod proč jsem se do tohoto chtěl pustit, byly celkové zajímavé výsledky z jednoduchého prototypu, kde jsem tedy nevyužíval neuronové sítě, ale hrubou výpočetní sílu na rozpoznání cenových paternů pro předpověd cen v příští hodině :-) Testoval jsem to ale na velmi malých datech, bylo to neškálovatelné řešení a v produkčním prostředí o milionech záznamech by se ani nedalo realtime provozovat. Napadlo mě na to využít právě neuronové sítě, kde výpočetní náročnost je přesunuta do natrénování modelu a samotné rozpoznání už je relativně rychlé a nenáročné. V principu by to fungovalo podobně jako třeba aplikace na rozpoznání hub :-D, akorát místo hub by rozpoznávala dění v grafech cen, ze kterých by se dal s větší či menší úspěšností predikovat další vývoj. Zatím je tento projekt také u ledu, jednak v tuhle chvíli je to na mě dost velký oříšek a taky náklady na provoz serveru a získávání dat by byly relativně velké s úplně nejistým výsledkem. Ale obecně AI je oblast, která mě hodně zajímá a má podle mě smysl do ní proniknout, akorát to bude vyžadovat systematičtější přístup než jsem u webového vývoje zvyklý :-) Ale zase – čas, který jsem tomu věnoval, nepovažuju za promarněný, protože jsem si v rámci prototypu objevil databázi TimescaleDB a rozchodil jsem si funkční API server psaný v jazyce Go, který je přímo ideální na zpracování velkého počtu výpočetně náročných operací. Mně jako frontenďákovi to otevřelo trochu nový svět.

Monitoring performance webu

OK, nedotažené projekty bychom měli :-D a co tedy mám dál v plánu? Aktuálně je to věc, která mi dává smysl jak byznysově, tak i v rámci nějakého svého vývojářského seberozvoje a myslím, že jsem schopný v dohledné době rozjet MVP s vlastními silami. Není to nic průlomového, ale jako frontenďák ten produkt dobře znám a vím, co mi na trhu chybí. Jedná se o monitoring rychlosti webu, měření web vitals a analýza assetů (css, js obrázky atd) na webu - tedy něco podobného, co třeba v dost základní verzi nabízí český PageSpeed.cz. Nevím, jaké s tím mají tvůrci plány, leč v současné době mi ten nástroj přijde dobrý spíš na takové orientační měření. Ze zahraničním služeb bych vypíchnul zejména SpeedCurve.com, což je v tomto oboru hodně pokročilý nástroj, ale s jejich pricingem cílí spíš na větší firmy a týmy. Jsou samoyřejmě další služby nabízející podobné měření, ale často jsou právě dost drahé a jsou až moc komplexní. Mně osobně chybí jednoduchá služba, která bude za rozumné peníze měřit základní věci, budu mít srovnání s konkurencí / průměrem v oboru, budu si moct nastavit performance budget a při překročení dostanu notifikace a hlavně budu si moct vytvářet přehledná srovnání před/po nasazení nějaké featury (třeba i automatizovaně po propojení s Githubem/Gitlabem) na webu a zjistit její vliv na performance. Nyní, když něco takového chci vědět, tak si manuálně ukládám data (screenshoty) z ad hoc měření před a po nasazení… nic moc. A třčba SpeedCurve za vyšší cenu nabízí i featury, které se podle mě už dají měřit třeba v rámci Google Analytics.

Chtěl bych tedy vytvořit jednoduchou službu s měsíčním plany začínající řádově na jendnotkách dolarů dostupnou i pro solo vývojáře. Nechci vůbec cílit na Česko, ale rovnou mít celou službu v angličtině a jít na zahraniční trh. Pro backend jsem se rozhodl použít PHP framework Laravel se skvělou dokumentací, která má vyřešenou spoustu věcí out-of-the-box. Tahle služba nebude po technické stránce zrovna raketová věda, ale přece jenom je to poprvé, kdy na zelené louce vymýšlím architekturu celé aplikace, návrh databáze a později i devOps (plánuju serverless řešení přes Laravel Vapor + AWS). Frontend i administrace služby budou postaveny jako jeden monolit v rámci Laravelu s jedinou oddělenou servisou pro samotnou analýzu webů, které spolu budou komunikovat zřejmě přes RabbitMQ. Ale v prvotní fázi mám za cíl vytvořit samotnou administraci s přehledem měření v nějaké osekané verzi s testovacími daty. Zatím se hodně seznamuju s Laravelem a to je ostatně i jedním z cílů projektu - naučit se zase něco nového a třeba se časem posunu víc z frontend do full-stack role jako vývojář. Uvidím. Každopádně budu se snažit progres dokumentovat tady na blogu, pomůže mi to se na projekt po čase nevysrat ;-)


Jakub Hájek

Autorem blogísku je Jakub Hájek, kdysi infantilní rebel bez příčiny, nyní infantilní fotr s příčinou. Frontendista – milovník dobrého kódu a konzistentního UI. Nadšený propagátor hičhajkingu a temnokomorničení. Sledujte mě na Facebooku nebo Twitteru.