Vylepšení KamZaSněhem.cz formou bakalářské práce

GPS záznam a fotky na KamZaSněhem.cz

Při rozvoji běžkařského webu KamZaSněhem.cz jsme zvolili netradiční cestu. Nabídli jsme téma školní závěrečné práce, a díky tomu získali jako dočasnou programátorskou posilu studenta informatiky, jemuž děkujeme za asi největší rozšíření funkcionality v historii tohoto webu. Jaké zkušenosti přinesla spolupráce na bakalářce mně jako provozovateli zavedeného a slušně navštěvovaného webu?

Co je KamZaSněhem.cz zač?

Bežkařům by tento lyžařský web nebylo potřeba představovat. KamZaSněhem.cz vzniklo už v roce 2009 a mezi weby zaměřenými primárně na běžecké lyžování patří mezi ty nejsledovanější. V posledních letech se návštěvnost pohybuje v rozmezí 1 až 1,5 milionu návštěv za zimní sezónu.

Z jednoho pohledu jde o samoobslužný web – je založen primárně na zprávách, které píší sami lyžaři. Z jiného pohledu péči a rozvoj samozřejmě potřebuje. Kdyby funkcionalita bývala zůstala v rozsahu jako při založení webu, stalo by se KamZaSněhem.cz s ohledem na rychlý vývoj internetu nekonkurenceschopným.

Za KamZaSněhem.cz nestojí žádná firma. Formálně tento web provozuji jako podnikatel – fyzická osoba. Za 13 let existence KamZaSněhem.cz se na jeho rozvoji a provozu podílelo i několik dalších lidí, ale stabilní tým je aktuálně dvoučlenný. Přičemž oba se věnujeme KamZaSněhem.cz vedle práce v rozsahu plného úvazku, tedy často po večerech a víkendech. Pro programátora Láďu to platí stoprocentně, já jsem měl pár měsíců pro KamZaSněhem.cz vyhrazenou část své kapacity, zejména během rodičovské dovolené.

Proč jsem do toho šel?

  • Spolupráce s mladými nadějnými lidmi, co se chtějí učit, mě vždycky bavila,
  • byla to jedna z cest (a nejspíš reálně jediná možná cesta), jak na KamZaSněhem.cz dostat funkcionalitu, která není úplně triviální a jako uživatel jsem ji tam dlouho chtěl,
  • část té funkcionality je svým způsobem unikátní, díky čemuž jsem věřil, že takové téma dostane šanci,
  • s vývojářskou kapacitou na KamZaSněhem.cz máme problém dlouhodobě,
  • školní práce byla cestou, jak získat motivovaného vývojáře programujícího zdarma,
  • spolupráci s mladým nadějným člověkem už jsem si na KamZaSněhem.cz vyzkoušel před lety s Petrem, který se staral o sociální sítě,
  • některé věci mě prostě baví dělat netradičním způsobem.

Jak jsem se k tomu dostal?

Ozval jsem se vedoucímu své diplomové práce, s kterým se mimo to známe i z orienťáku, i když za posledních 20 let jsme se viděli asi tak pětkrát. Ten mě přesměroval na svého kolegu z Katedry informačního a znalostního inženýrství (KIZI) na Fakultě informatiky a statistiky VŠE, do jehož působnosti vedení závěrečných prací typu praktické implementace webových aplikací spadá. Rovnou jsem navrhl i několik možných témat práce – vše byla větší a ucelená rozšíření funkčnosti webu, kde se zároveň mělo řešit něco ne úplně běžného. Na jednom z témat, které bylo zároveň mým jednoznačně preferovaným, jsem se shodli. A už po měsíci mi dorazila do emailu tato zpráva: „Měl bych studenta, který by chtěl cca za rok odevzdávat bakalářskou práci, a zaujala ho nabídka možného vylepšení portálu KamZaSněhem.cz.“

Neověřoval jsem si to, ale myslím, že KamZaSněhem.cz dostalo šanci i kvůli tomu, že jde technologicky s dobou a není to žádný legacy systém. K čemuž kompletní přepsání webu v roce 2018 určitě pomohlo. KamZaSněhem.cz v tu dobu běželo na PHP (7.4), Symfony (5.2) a MariaDB (10.4). Kód je verzován v Gitu a nasazování na vývojový i produkční web je automatizované.

Co v rámci bakalářské práce vzniklo?

KamZaSněhem.cz bylo do této doby založeno primárně na textových zprávách o aktuálních podmínkách, doplněných fotkami. Ty mívaly spíše ilustrační podobu, pokud tedy pisatel v textu zprávy nepopsal, odkud která fotka pochází. Cílem bakalářky bylo začít pořádně pracovat s informacemi o poloze a mapami. Co všechno přibylo:

  • Z fotek jsou automaticky zjišťovány jejich GPS souřadnice,
  • pokud fotky skutečně GPS souřadnice obsahují, zobrazujeme je na zimní mapě,
  • pro zobrazení fotek na mapě vznikl nový typ stránky, detail zprávy,
  • s ním souvisí i doplnění možnosti editace zpráv, takže je možné např. opravovat chyby, doplňovat část informací dodatečně nebo manuálně upravit/smazat souřadnice u konkrétní fotky,
  • ke zprávě je možné přidat i GPS záznam projeté trasy, který samozřejmě také zobrazujeme na mapě,
  • aby lyžaři mohli dostat své záznamy a fotky na KamZaSněhem.cz pohodlněji, mohou po propojení účtů jednoduše přidávat své záznamy z aplikace Strava.com,
  • příjemným bonusem je, že díky synchronizaci GPS záznamu a časů pořízení fotek zobrazujeme polohu fotek na mapě dokonce přesněji, než samotná Strava.

Plus několik drobností k tomu. Podrobněji jsou vylepšení popsány v samostatném článku na KamZaSněhem.cz. Některé funkcionality popisuji ještě víc do hloubky v rozhovoru se mnou vydaném na webu Bezky.net, ve kterém mluvím také o počátcích KamZaSněhem.cz.

Pro pořádek je vhodné dodat, že zjišťování časů pořízení fotek a jejich GPS souřadnic bylo již z větší části připraveno dříve, před zahájením práce na bakalářce. Dík za tyto přípravné práce míří zejména do Skrzu.

Zde v článku ovládací prvky mapy logicky používat nejdou – vyzkoušet si to můžete přímo na KamZaSněhem.cz v příspěvku z Jizerek, odkud tento náhled pochází.

Klíčové postřehy ze spolupráce na bakalářce

Rozsah práce

Když jsem se ozýval na katedru s nabízeným tématem práce, psal jsem o diplomové práci. Možná i z důvodu, že během mého studia před více než 20 lety se ještě bakalářské práce nepsaly. Možná proto, že všechny čtyři mnou v minulosti oponované práce byly diplomky.

Nejsem v takovém kontaktu s akademickou sférou, abych dokázal kvalifikovaně posoudit, jaké téma je dostatečné na diplomku a jaké jenom na bakalářku. Pocitově to vidím tak, že studium na KIZI rozhodně není „dávačka“ a jinde by možná takové téma stačilo na diplomku. Ostatně v mé evidenci činností jsem tuto aktivitu vytrvale označoval jako “diplomka” :-)

Pocity byly možná podpořené tím, že tvorba práce na zavedeném a reálně slušně využívaném projektu s sebou nese i aktivity, které při programování vlastní nové aplikace, nebo izolovaného systému v nějaké firmě, tolik času nezaberou. Protože takové aplikace a systémy ve srovnání s KamZaSněhem.cz v podstatě nikdo nepoužívá. Co vše podle mého zvyšuje náročnost oproti typickému školnímu projektu?

  • Reálné používání a testování se skutečnými daty. V čemž tedy asi zvedám náročnost já osobně, svým testováním. V minulosti jsem si několikrát vyzkoušel, jaký kvalitativní posun kupředu znamená otestovat projekt na datech z reálného provozu. A umím taková data připravit, s čímž jsem pomohl i zde,
  • součástí práce byla integrace s jiným systémem, v tomto případě se Stravou. Integrace obecně bývá solidním žroutem času. Zvlášť když se k tomu přidá ne zrovna dokonale zdokumentované API a jeho neohlášená změna v posledních týdnech před odevzdáním práce,
  • u zavedeného projektu se programátor musí seznámit s kódem a rozběhat si vývojové prostředí, což také nějaký čas zabere.

Méně je někdy více

Jak jsme rozhodli o tom, co v rámci práce budeme přesně řešit? Šlo to postupně:

  1. V úvodním emailu poslaném na KIZI jsem navrhl 3 možné tematické okruhy, potenciální vedoucí práce ve své odpovědi jeden z nich označil za vhodný a navrhl i jiné možné zaměření,
  2. Lukáš, který projevil svůj zájem pracovat na KamZaSněhem.cz, si vybral (k mé radosti) mnou navržené preferované téma,
  3. na společném callu (který byl za celou dobu jediný, kde jsme se potkali společně v sestavě vedoucí práce – řešitel bakalářky – já jako konzultant) jsme prošli možná společná dílčí témata, která se mohou v rámci práce řešit,
  4. dohodou na úrovni vedoucí práce – řešitel vznikl základ zadání práce, tj. výběr klíčových funkcionalit, které mají být v rámci bakalářky řešeny. Myslím, že jsme byli dohodnuti, že dle situace (dané jednak reálnou složitostí, jednak proveditelností, protože v jednom případě musela předcházet realizaci důkladnější discovery fáze) můžeme kdyžtak některé funkce ze zadání škrtnout. Tuto možnost jsme ale nakonec nevyužili,
  5. zadáním práce byly definovány hlavní funkce. O tom, jaké další související drobnosti budeme v rámci práce řešit, jsme se už domlouvali a detaily konzultovali primárně já s Lukášem. S vedoucím práce byl samozřejmě Lukáš dál v pravidelném kontaktu. Společně řešili zejména obsah textové části práce, ale bylo poznat, že ani diskuzi o funkcionalitě nevynechali.

Jak jsem naznačoval výše, plánovaný rozsah bakalářské práce pokrýval víc témat, než jsem sám očekával. A při diskusích o několika souvisejících drobnostech jsme si několikrát řekli – jo, tohle taky ještě uděláme:

  • Vždyť je to drobnost,
  • tohle se zas hodí na začátek pro lepší seznámení se zdrojovým kódem,
  • souvisí tahle rozbitá věc s nasazenými úpravami? – Možná, tak to radši prověřím a opravím,
  • tohle nevypadá moc hezky, co byste řekli na tenhle návrh? – Líbí se mi, tak to taky změníme.

Prostě jsme toho otevřeli až moc. Začali jsme si to uvědomovat s blížícím termínem odevzdání práce. Vlastně nevím, jestli všichni. Spíš myslím, že jsem to se svými produkťáckými zkušenostmi viděl jako první. A začal jsem tak nějak nezištně Lukášův focus usměrňovat, aby se nedostal do fáze kritického nestíhání. Příklady:

  • Napojení na Stravu bude lepší začít řešit už teď. Na základní funkce navazují i pokročilé, a kdekoliv se mohou objevit komplikace,
  • dokonalé zakomponování do webu z toho pohledu, aby uživatelé vše na první dobrou pochopili, teď neřešme. UX je sice důležitá věc, ale cílem bakalářky je primárně funkčnost,
  • testuji funkcionalitu vkládáním zpráv z reálného lyžování, tím logicky najdu víc bugů a nedořešených situací. Ale některé teď označme za speciality, které před obhajobou nechme nedořešené. Reálně si jich nikdo nevšimne, místo toho stihněme to klíčové.

Příště bych se spíše držel toho, že méně je někdy více. Implementovat raději méně nových funkcí, ale důkladněji je otestovat a ošetřit i situace, které se objevují obvykle až v reálném provozu. A více se soustředit i na co nejlogičtější zakomponování novinek do existujícího webu. Tedy na aktivity, na které v našem případě došlo až po odevzdání a obhájení bakalářské práce.

Zde si obří poděkování zaslouží Lukáš, pro kterého obhájením bakalářky spolupráce neskončila. Přes léto doprogramoval domluvenou funkcionalitu a ošetřil zbylé záludné stavy. Takového člověka prostě chcete.

Další úpravy do rozsahu práce přímo nezařazené, ale klíčové pro prezentaci nových funkcí uživatelům, jsme už prováděli sami. Já se díky tomu začal lépe orientovat v kódu, a některé úpravy a opravy jsem zvládl vyřešit sám. Vlastně to bylo podobné jako u jiných mých aktivit v daném roce. Kupředu jsem se posouval hlavně v odborných technických dovednostech a směřoval dál k univerzalitě, netypické pro tradičního produkťáka.

Čas strávený v kódu a dotahováním logicky někde chyběl. Nezbylo ho tolik na komunikaci změn na uživatele KamZaSněhem.cz a propagaci. Zvažovaných aktivit, na které z časových důvodů nedošlo, nebylo málo.

Pozor, přístup „raději méně a perfektně“ považuji za ideální zejména ve vztahu ke KamZaSněhem.cz. Tedy projektu, na který máme minimum času a vývojářská kapacita trvale chybí. V typických komerčních projektech jako produkťák obvykle preferuji spuštění MVP a ladění v reálném provozu.

Termíny a agilní přístup

Termín odevzdání práce, popř. obhajoby. To jsou jediné termíny, se kterými se dá spolehlivě pracovat. Již před zahájením spolupráce jsem očekával, že to tak bude. Na úvodní schůzce jsme si to potvrdili. Další milníky, které by zařídily otestování nových funkcí v reálném provozu a zároveň je umožnily uživatelům KamZaSněhem.cz využívat ještě během sezóny, po níž bude práce odevzdána, jsme si naplánovali jako nezávazné.

Jak to dopadlo v reálu?

  • První balík úprav zvládl Lukáš dokončit a nasadit ještě před startem zimní sezóny. Což by už samo o sobě znamenalo spokojenost i pro případ, kdy by se nestihlo zveřejnit v sezóně nic dalšího,
  • GPS záznamy se dostaly na ostrý web po hlavní běžkařské sezóně. I tak ještě někteří lyžaři zkusili na KamZaSněhem.cz svůj záznam vložit. Díky tomu se podařilo ošetřit situace, na které bychom bez testování v reálném provozu se skutečnými uživateli těžko přišli,
  • napojení na Stravu se podařilo dokončit ve chvíli, když už jsem i já odložil běžky k letnímu spánku. I tak testy proběhly podle mého názoru důkladněji, než je obvyklé u jiných školních závěrečných prací. Jen jsem pro testování namísto záznamů z výletů na běžkách použil data z vyjížděk na kole. Reální uživatelé ověřili funkčnost až na začátku další zimní sezóny.

Aby to nevyznělo jinak, než chci – já byl z termínového pohledu spokojen. Očekávání se podařilo překonat. A myslím si, že práce s termíny je jednou z nejdůležitějších věcí, kterou se student při tvorbě bakalářky nebo diplomky může naučit.

Jak plyne z výše napsaného, fungovali jsme agilně. „Řídit se vybranými principy agilních metodik tak, aby nám pomáhaly fungovat co nejefektivněji, a v případě potřeby se nebát zavedené postupy rychle změnit a přizpůsobit se aktuálním potřebám.“ Tak by mohla znít definice toho, co často označuji jako punk agile, a může nabývat různých podob.

Dohodli jsme se, že všechny úpravy budou procházet přes code review. Aktualizace jsme nasazovali průběžně, přičemž ty klíčové jsme se snažili plánovat mimo období největší návštěvnosti. K řízení workflow nám pomáhalo Trello, které používáme na KamZaSněhem.cz běžně. Rozdíl oproti mému běžnému produkťáckému fungování spočíval v tom, že issues si zakládal Lukáš sám. Školní závěrečná práce není jen o analýze a programování, ale i plánování aktivit. Pro operativní komunikaci jsme využívali Slack. V několika případech jsme ale raději zorganizovali online call, někdy ve dvou, někdy ve třech. Vše dle potřeby, nemělo smysl se snažit o pravidelnost.

Času jsem věnoval aktivitám spojeným s bakalářkou celkem dost. Ale s tím jsem dopředu počítal a držel si pro ně určitou volnou kapacitu. Jen se dopředu hůře plánovalo, kdy bude moje součinnost nejvíce potřeba – mezi okamžikem, kdy jsme si „plácli“, a obhajobou uběhlo asi 13 měsíců. A tak si poděkování zaslouží i Slevomat, kde ve většině situací nemusím řešit, kdy a odkud práci odvedu. Při opravdové volné pracovní době jsem dokázal poskytovat součinnost flexibilně i s minimem své volné kapacity.

Oficiality

Formálně jsem byl do tvorby bakalářské práce zapojen jako konzultant. Předběžně jsme se sice bavili o tom, že budu zastávat roli oponenta, ale ten byl nakonec vybrán tradičním způsobem.

S odstupem si myslím, že je to tak správně. Proč?

  • I když bych se snažil být nestranný (což by se projevilo asi tím, že bych byl při hodnocení práce spíš přísnější než benevolentnější), střet zájmů tam prostě je,
  • stejně tak je pravda, že jsem se na práci podílel. Čímž samozřejmě nemyslím psaní kódu,
  • ale hlavně, jako angažovaný vlastník projektu vidím do detailů, do nichž běžný oponent nemá šanci vidět.

Navíc zpětnou vazbu mohu dát studentovi i jinak než v roli oponenta. Po obhájení bakalářské práce jsme si v našem tříčlenném týmu zorganizovali retrospektivu, kde jsme si práci vyhodnotili do hloubky. Retrospektiva myslím přinesla všem konkrétnější poučení do budoucna, než kdybych práci hodnotil jako oponent. Navíc jsem pak měl větší radost, když Lukáš obhájil práci se známkou výborně.

Závěry

Šel bych do toho znova? Ano! Kdybych mohl vrátit čas a rozhodovat se znovu, tak určitě ano.

Teď bych do dalšího podobného vylepšení z časových důvodů spíše nešel. Podobného vylepšení = takového, které bylo hodně navázané na moje zkušenosti a nápady, a hlavně na pohled reálného běžkaře. Lukáš totiž na běžkách nejezdí, tím víc bylo moje zapojení klíčové, a podobné množství času bych v současné době nenašel.

I tak zde ale prostor pro realizaci další bakalářské nebo diplomové práce je. Jenom ne tak úzce svázaný se základní funkcionalitou KamZaSněhem.cz. Což by podle mě umožnilo samostatnější práci a menší závislost na mé v tuto chvíli chybějící volné kapacitě. Pár konkrétních nápadů mám. V nejtypičtějším případě bude stále vývojářská aktivita důležitou součástí práce, ale součástí může být třeba i uživatelský výzkum. Pro neprogramátory je zde ale také možnost v oblasti marketingu a komunikace. Hezky včetně realizace, vytvořit jen nějakou studii je málo.

Prostě možnosti tu jsou a kontakt na mě je tady.

Tento článek dokončuji až po sezóně, kdy se i zbylá část funkcionality naprogramované v rámci bakalářské práce dostala do ostrého provozu. Ale aspoň se můžu podělit o radost z toho, že během zimy lyžaři nové funkce skutečně využívali. A že ani reálný provoz nevedl k odhalení chyb, které bychom museli opravovat. Další důkaz, že tahle bakalářka měla smysl a byla přínosem.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *