SmartWalk: Plánovač cest na míru

SmartWalk: Plánovač cest na míru

Informatika / rozhovor

Záliba v cestování přivedla Dmitrye Zhukova k tématu bakalářské práce. V rámci té vyvinul aplikaci, která dokáže cestovateli během vteřiny naplánovat vycházku na míru. „Schopnost aplikace vyhledávat místa podle několika kritérií může být užitečná nejenom při plánování procházek a volného času, ale také například při výběru budoucího bydlení nebo při průzkumu trhu,“ říká absolvent Matfyzu.

Mohl byste stručně představit svou práci?

Většina cestovatelů nejspíš někdy zažila podobnou situaci. Stojíte na hlavním nádraží v Praze a máte několik hodin, než se budete moci ubytovat v hotelu. Rádi byste mezitím navštívili muzeum nebo galerii, ochutnali tradiční českou kuchyni a na závěr si užili zeleň parku.

SmartWalk je webová aplikace pro vyhledávání pěších cest s ohledem na klíčová slova. Na vstupu stačí zadat koncové body, požadované vlastnosti objektů a maximální vzdálenost, kterou jste ochotni ujít. Aplikace vám ihned nabídne několik tras s vyznačenými body na mapě.

Příklad výsledku vyhledávání pěších cest v aplikaci SmartWalk


Co vás inspirovalo k tomu zaměřit se právě na toto téma?

S přítelkyní rádi chodíme na delší procházky a jezdíme na výlety. Než někam vyrazíme, pečlivě si rozmyslíme, kam půjdeme a co všechno uvidíme. Proces plánování jenom jedné cesty však může zabrat poměrně dost času. Nejprve si vyberete místa, kam byste chtěli zamířit, a to buď vyhledáváním, nebo označením bodů na mapě. Poté vytvoříte pořadí, v jakém je navštívíte. A v dalším kroku se nakreslí samotná cesta.

Co když vám nezáleží na tom, jaká konkrétní místa nakonec vyberete, pokud splňují vaše požadavky? Co kdybyste chtěli naplánovat hned několik tras a následně z nich vybrat tu nejvhodnější? S těmito otevřenými otázkami jako prvotním návrhem tématu jsem přišel na Katedru softwarového inženýrství za panem doc. Martinem Nečaským, který s vedením práce souhlasil a svou všestrannou podporou mi pomohl dosáhnout lepších výsledků.

Jaké konkrétní využití má tedy vaše práce?

Hlavním cílem práce bylo zjednodušit celý proces plánování procházek tak, aby bylo možné hledat místa a cesty zároveň. Téma bylo do jisté míry i mojí osobní výzvou, což pro mě představovalo další zdroj motivace.

Z analýzy vyplynulo, že existující nám známé mapové aplikace, například Mapy.cz, nic takového neumožňují. S vedoucím jsme se dohodli, že vytvoříme softwarové dílo funkčně a vzhledově podobné konkurenčním řešením, které však splňuje specifické požadavky. Při implementaci jsme se omezili pouze na otevřené datové sady (OSM, Wikidata, DBpedia apod.) a technologie s otevřeným zdrojovým kódem. Samostatnou kapitolou je zacházení s uživatelskými daty. V práci využíváme nově vznikající technologii Solid, která odděluje data od aplikací takovým způsobem, že vlastník dat se může rozhodnout, která aplikace k nim bude mít přístup a na jak dlouho.

S jakými konkrétními technologiemi jste pracoval a jaké metody jste využíval?

Technologie použité v této práci lze sledovat na následujícím obrázku. Aplikace má standardní vrstevnatou architekturu. Prezentační vrstva, v podobě jednostránkové webové aplikace, je implementována ve funkcionálním Reactu. Dotazy směrují na REST API psaném v C# s využitím frameworku ASP.NET. Geografická data ukládáme v dokumentové databázi MongoDB. Pro kreslení cest slouží velmi efektivní směrovací systém OSRM.

Kontejnerový diagram jednotlivých částí aplikace


Aplikace využívá dva externí softwarové systémy – Solid server a další pro získávání mapových obrázků. Zdrojový kód a návod, jak aplikaci zprovoznit na Linuxu nebo Windows, jsou volně dostupné na platformě GitHub.

Co bylo během psaní vaší práce nejtěžší? Je něco, co byste zpětně udělal jinak?

Nejtěžším dílčím a časově nejnáročnějším krokem pro mě byla samotná implementace. Při vývoji webových aplikací se člověk setkává s širokou škálou různých technologií. Je velmi důležité zvolit ty správné a všechny volby odpovídajícím způsobem odůvodnit. Další obtíží byla práce s reálnými daty a nalezení rovnováhy mezi použitím veškerých dostupných dat s generickým uživatelským rozhraním nebo menší podmnožiny dat s hezčím rozhraním. Rozhodl jsem se spíše pro druhou variantu.

Příklad uživatelského vstupu pro vyhledávání zájmových bodů na mapě


Naopak nejzáživnější částí pro mě osobně bylo studium vyhledávacích algoritmů a heuristik. Jednalo se zejména o kombinatorické NP-těžké problémy a způsoby, jak je řešit efektivně a dostatečně přesně. Příště bych tím netrávil tolik času, protože jsem si nakonec zvolil poměrně jednoduché algoritmy.

Jakým způsobem jste ověřoval výsledky své práce?

Prováděl jsem celkem tři různé druhy testování. Abych zajistil bezchybnost a kvalitu zdrojového kódu, průběžně jsem spouštěl a doplňoval unit testy jak pro frontendovou, tak i pro backendovou část aplikace. Zátěžové testy ukázaly, že i na průměrně výkonném počítači dokáže aplikace vrátit první výsledek v řádu zlomků sekundy. Chování uživatelů jsem simuloval generováním náhodného vstupu a sledoval jsem, jak dlouho výpočet trvá. Do uživatelského průzkumu jsem zapojil jak lidi bez hlubokých teoretických znalostí v oblasti vývoje počítačových aplikací, tak i několik kolegů z fakulty, abych získal co nejvíce různých názorů. Bylo pro mě obohacující pozorovat, jak moc se názory na stejné věci liší. Došel jsem k závěru, že vývoj úspěšné aplikace spočívá v nalezení rovnováhy mezi různými názory a potřebami uživatelů.

Co považujete za nejdůležitější výsledek nebo závěr své práce?

Tato práce je zajímavá především jako celek. Vytvořil jsem aplikaci, která se svým vzhledem a chováním přibližuje komerčním produktům, funguje stejně dobře na desktopových i mobilních zařízeních, a zároveň jsem k ní přistupoval rigorózně. V neposlední řadě jsem si vyzkoušel průkopnickou technologii Solid pro ukládání citlivých uživatelských dat.

Koncept decentralizace datového úložiště pomocí technologie Solid


Schopnost aplikace vyhledávat místa podle několika kritérií může být užitečná nejenom při plánování procházek a volného času, ale také například při výběru budoucího bydlení nebo při průzkumu trhu.

Máte pocit, že vaše práce může být inspirací pro další studenty nebo odborníky v dané oblasti?

Několik směrů budoucího vývoje jsem nastínil v závěru práce. Tradičními směry jsou nasazení chytřejších algoritmů pro předzpracování a těžení geografických dat nebo efektivnější a přesnější plánování cest. Méně obvyklým směrem by bylo vytvoření kolaborativního prostředí na základě technologie Solid, kde budou uživatelé moct sdílet, komentovat a doporučovat místa a cesty ostatním. Již existuje několik plnohodnotných sociálních aplikací na různá témata vycházejících z komunity, avšak nejsem si vědom žádné, která by pracovala s geografickými daty. Vzhledem k nedávným pokrokům v rozvoji velkých jazykových modelů (LLM) vidím jistý potenciál v jejich použití při zpracování uživatelského vstupu místo rigidního systému filtrů.

Jaké jsou vaše plány do budoucna?

V následujících obdobích bych chtěl mírně přepracovat a zdokonalit několik modulů a následně aplikaci nasadit do cloudového prostředí a zpřístupnit široké veřejnosti. V současnosti pracuji na pozici softwarového inženýra v oblasti financí. V zaměstnání často řeším optimalizaci dotazů v relačních databázích nebo vytvářím nejrůznější API. Znalosti získané na Matfyzu a určitý způsob přemýšlení mi nesmírně pomáhají porozumět souvislostem v širším kontextu a tím odvádět kvalitnější práci.

Demo aplikace SmartWalk

Repozitář UK
GitHub
Dokumentace
Demo uživatelského rozhraní

Další články k tématu