Poslední listopadový víkend jsme měli u nás v Danube House svůj vlastní interní hackathon. Jednou za čas takovou akci pořádáme, protože chceme dát příležitost všem členům týmu zrealizovat své mimopracovní nápady a poskytnout jim k tomu potřebné technologie i zázemí.
Tentokrát jsme na hackathonu měli týmy celkem tři. Pracovali jsme tedy na třech projektech, o dvou z nich je tento blog a o tom posledním, který plánujeme ještě interně rozvíjet, budeme brzy informovat!
Víc sportu do Google kalendáře
Náš backenďák Lukáš K. si pro hackathon připravil vlastní projekt. “Už dlouho jsem ho chtěl realizovat. Měl jsem v plánu vytvořit skript, který by z nějakého vhodného zdroje zpracoval a importoval zápasy mých oblíbených týmů rovnou do osobního Google kalendáře.”
Lukáš, jako velký fanda fotbalu, chtěl tool, díky kterému už nikdy nepropásne žádný zápas. Google kalendář dříve nabízel možnost přidat kalendáře některých sportovních lig, respektive týmů, mezi nimiž byla i naše první fotbalová liga – na přelomu let 2017/2018 přišla ale nová verze kalendáře a tam už bohužel chybí. “Hledal jsem na internetu nějakou službu, která by tuto funkcionalitu nabízela, ale našel jsem jen samé zahraniční ligy. Takže nezbývalo nic jiného, než si skript napsat sám!”
Cílem projektu bylo, aby bylo možné použít a nasadit daný skript pro kohokoliv, kdo má Google účet (určitá technická zdatnost ale potřeba je) a nebyl k tomu třeba žádný dodatečný backend či jiná externí služba.
Co k tomu bylo potřeba
Lukáš využil několika služeb, které Google poskytuje. Zejména pak službu Google Firebase, která nabízí dílčí služby jako Firebase Cloud Functions (serverless solution) a Firebase Database (realtime NoSQL cloud database), které se k tomuto účelu perfektně hodí.
Jako zdroj dat použil stránky flashscore.com, což je anglická mutace livesport.cz, které poskytují vždy aktuální a ověřená data pro velké množství lig a týmů.
Iniciátorem celého procesu je pak dokument Google Spreadsheet, do kterého uživatel přidá na jednotlivé řádky URL adresy vedoucí na seznamy zápasů na stránkách flashscore.com a jehož součástí je i skript napsaný v Google Apps Script, který pravidelně volá první Cloud funkci.
Ta po zavolání získá všechny URL z tabulky, stáhne jednotlivé stránky se zápasy, rozparsuje je a získá z nich veškerá potřebná data a ta pak vloží (případně upraví) do Firebase Database. Na změnách v databázi pak poslouchá druhá Cloud funkce, která se již stará o synchronizaci těchto zápasů – respektive událostí v rámci Google kalendáře. Výsledkem jsou synchronizované zápasy v podobě událostí v kalendáři.
Do budoucna je možné přidat i další parsery pro jiné zdroje než jen flashscore.com a ty pak napojit na již zmíněné Cloud funkce.
Lunchie – obědová vychytávka
Náš frontenďák Lukáš H. chtěl vyvíjet aplikaci, která by mu – a ideálně i spoustě dalším – usnadnila nějakou každodenní rutinu. “Měl jsem víc nápadů, ale nakonec se mi jako nejatraktivnější a s největším potenciálem pro používání zdála aplikace pro polední menu. Hlavní myšlenkou je to, že spousta lidí včetně mě a mých kolegů chodí tady v Karlíně na obědy do restaurací na polední meníčka. Jenže vybrat si to nejlepší, co je ten den k dispozici napříč restauracemi, není úplně jednoduché – každá restaurace si zveřejnění denního menu řeší po svém. Někdo na Zomatu, někdo na Restu, jiný pouze na svých webových stránkách, někdo zase na Facebooku.”
Proto Lukášův tým navrhl aplikaci, která z těchto různých zdrojů dokáže meníčka postahovat a zobrazit přehledně na jednom místě bez nutnosti rozklikávání a proklikávání se kvantem různých webových stránek.
Postup práce
Nejdříve si v “Lunchie týmu” specifikovali funkcionalitu, kterou od prototypu chtěli, ještě před přidáváním dalších a dalších featur. Začali jednoduchou verzí, ve které bylo několik restaurací z okolí a u jedné z nich ručně přidané menu, aby se dala vyvíjet i frontendová část. Chvíli po páteční půlnoci už měli fungující prototyp, který načítal meníčka několika málo restaurací.
V sobotu dopoledne za bleskurychlé pomoci DevOps týmu rozběhli aplikaci online, z dočasného in-memory ukládání dat přešli na persistentní databázi a během soboty už probíhalo hlavně přidávání nových restaurací a dolaďování funkcionality webu. V podvečer pak byla nasazená online verze appky s fungujícími meníčky pro 11 restaurací v okolí.
Michal za Backend: “Vývoj mě opravdu bavil. Hlavně díky tomu, že při hackathonu se člověk soustředí na funkční prototyp a proto vidí posun takovou rychlostí, která by u standardního projektu nebyla možná.”
Nepříjemně ho ale překvapil posun otevřenosti API u platforem, které právě na tom vyrostli - konkrétně Facebook a Slack. Zatímco na začátku těchto projektů na nich byl dostatek obsahu právě díky jejich přístupnosti programátorů, postupně tyto platformy (ať už z vlastní iniciativy, z bezpečnostních či legislativních důvodů) své API omezují a ztěžují jeho používání. Což mělo negativní vliv i na Lunchie, jelikož získávání menu z Facebooku bylo jednoznačně nejnáročnější a propojení se Slackem se nakonec nepovedlo v té formě, v jaké kluci původně zamýšleli.
Druhá věc, která kluky překvapila, bylo, když během soboty přestala menu různých restaurací fungovat. Ukázalo se samozřejmě, že vyvíjet agregátor denních menu restaurací je během soboty o něco složitější, než v pátek :-)
Sám Lukáš je s aplikací také spokojený, dokonce prý předčila jeho očekávání. I po konci hackatonu se ji stále snaží vyvíjet, třeba po práci nebo ve volných chvílích doma. Ale i s hackathonem je spokojený “Tohle byl můj první vnitrofiremní hackathon a pocity jsou uplně ty nejlepší! Atmosféra byla uvolněná, nětížil nás žádný termín, žádný tlak na včasné dokončení i s prezentací, všechny limity jsme si stanovovali sami a tak se nemůžu dočkat, kdy zase nějaký hackathon ve firmě uděláme!”
Dominikův tým
Náš CTO Dominik vedl tým, ve kterém společně vymysleli a pracovali na opensourcovém projektu, který je nejen toolem pro testery, ale zároveň chceme, aby v budoucnu sloužil také klientům. Protože jej zatím dál interně rozvíjíme, budeme o něm informovat až v pokročilejších fázích projektu.
Aby ale Dominik nepřišel zkrátka, prozradíme na něj, že si v průběhu vývoje této aplikace odskočil do Lukášova “Lunchie” týmu a naprogramoval parser pro Presto meat market!