This is an old revision of the document!
Table of Contents
Geocaching
spolecne
Geocaching je hra na hledání pokladů s pomocí navigačních přístrojů GPS. Na internetovém serveru geocaching.com (varování: při řešení tohoto úkolu se pravděpodobně neobejdete bez bezplatné registrace na tomto serveru) jsou zveřejněné souřadnice schránky (tzv. kešky, anglicky cache), uživatel si souřadnice uloží do navigačního přístroje, pak vyrazí do terénu a snaží se schránku najít. Některé kešky jsou tzv. multi-kešky: bodů, které uživatel musí v terénu projít, je několik. Cestou uživatel sbírá číselné indicie a z nich nakonec spočítá podle vzorce, který je u popisu kešky uveden, cílové souřadnice vlastní schránky. A právě tyto multikešky jsou pro nás zajímavé.
Mnozí „kačeři“ (hráči geocachingu) používají k navigaci chytrý telefon, který jim přímo v terénu stáhne popisy nejbližších kešek na základě jejich aktuální polohy. Díky tomu si nemusejí popisy multikešek předem tisknout na papír, aby věděli, jaké indicie mají na kterém místě zjišťovat. Zjištěná čísla si ale stále musejí poznamenávat stranou. Stejně tak závěrečné dosazení do vzorce a výpočet souřadnic je na nich. Automatizace a programová podpora tohoto kroku je obtížná, protože každý autor zapíše vzorec do popisu kešky trochu jinak. Abychom mohli vzorec rozpoznat, musíme umět rozebrat text webové stránky, případně mu i částečně porozumět.
Další možné komplikace:
- Stránka může obsahovat několik vzorců. Některé body, kterými musí kačer projít, mohou mít souřadnice také vypočítané, místo aby jejich souřadnice byly uvedeny v popisu přímo.
- Cílový vzorec se může skládat z několika výpočtů, které na sebe navazují. Příkladem je keška Metro = B =.
TODO
Zadání
Vaším úkolem je napsat (v Perlu) robota, který dostane adresu internetového obchodu, projde stránky obchodu, najde na nich potřebné informace a přidá je do databáze. Hledejte následující údaje:
- Seznam zboží, které obchod nabízí. Nemusíte zachovat třídění zboží do kategorií. Některé obchody zboží třídí, jiné ne, ale kategorie beztak nebudou u dvou obchodů stejné. Měli byste však poznat, když dva obchody vedou totéž zboží pod lehce odlišnými názvy. Ke každé položce vás dále zajímá:
- Cena, za kterou ji obchod nabízí. Zahrnuje cena DPH? Kolik je to s daní a bez daně?
- Dostupnost. Je zboží skladem? Může být k odeslání do N dnů? Je dlouhodobě nedostupné?
- Adresa (URL) stránky, na které má daný obchod informace přímo o této položce.
- Možnosti dodání (poštou, různými kurýrními službami, vyzvednutí v kamenné provozovně)
- Jaká je dodací lhůta? To mívá obchod napsáno v obchodních podmínkách a může se to dále lišit i u jednotlivých druhů zboží. Případně můžete do databáze uložit alespoň URL stránky s obchodními podmínkami.
- Možnosti placení (dobírka, předplatba na účet, platební karta, PayPal…)
- Kontakt
- Telefon, e-mail, popř. adresa webového kontaktního formuláře
- Adresa, kde obchod sídlí, resp. odkud se bude odesílat zboží
- Ještě více vás zajímají adresy případných kamenných provozoven. Na vašem hypotetickém serveru by se jistě hezky vyjímala mapa se značkami, kde lze dotyčné zboží koupit, popř. seznam provozoven seřazený podle vzdálenosti od místa, které si uživatel určí. Nebude proto škodit, pokud adresu dokážete rozebrat na město, ulici, PSČ apod. Takové údaje se pak snadněji geokódují, tj. zjišťují se podle nich ze specializovaných databází zeměpisné souřadnice provozovny.
- Jaké jsou otvírací hodiny v jednotlivých provozovnách?
- Jaký je telefon nebo jiný kontakt do každé provozovny?
Tato úloha pochopitelně je jazykově závislá. Předpokládejte, že stránky obchodu jsou v češtině. Samozřejmě vám bude sloužit ke cti, pokud robota dokážete napsat tak, aby přechod na jiný jazyk nebyl těžký, například že jazykově závislá pravidla nezadrátujete přímo do zdrojáku, ale místo toho je načtete ve stanoveném formátu ze souboru. Nicméně to není povinné.
Asi můžete i předpokládat, že ceny budou uvedené v českých korunách. Ale pozor! Adresa sídla obchodu už může být v cizině. Existují obchody, které komunikují česky, nechávají si platit kartou nebo dokonce v korunách na český účet, ale sídlí třeba v Paříži, odkud také rozesílají zboží. To je pro zákazníka pochopitelně zajímavá informace.
Neměli byste naopak předpokládat žádný konkrétní druh zboží. Pokud budete program testovat třeba na mobilech, nemělo by to znamenat, že nepůjde se srovnatelnou úspěšností pustit i na obchod s cédéčky, hrami, oblečením aj. Ignorujte méně obvyklé druhy zboží, které se běžně neposílají poštou (na jedné straně třeba nemovitosti a auta, na druhé např. skladby a software, který si po zakoupení registračního kódu přímo po síti stáhnete do počítače).
Databáze
Je na vás, jakou zvolíte implementaci databáze, do které budete informace ukládat. Pro snadnější testování robota na libovolném stroji se však raději vyhněte užívání knihoven a softwaru, který by bylo potřeba doinstalovat (např. SQL server). Úplně postačí, když příslušná data dokážete vypsat do textových souborů, kde jsou hodnoty jednotlivých polí oddělené středníky.
Databázi ovšem musíte umět také na začátku načíst, abyste mohli porovnávat názvy zboží, které v obchodě najdete, s názvy zboží, které jste už dříve našli v jiných obchodech.
Databázi můžete číst a ukládat do souboru (složky), jehož výchozí jméno je uvedené přímo ve zdrojáku. V tom případě to ale nesmí být absolutní cesta (není přenositelná, např. C:\Documents and Settings\blablabla
nefunguje na Linuxu) a v podstatě by vůbec neměla opustit aktuální složku, pokud neumíte zajistit, že případné neexistující složky se vytvoří. V každém případě ale uživatel musí mít možnost dodat cestu k databázi, kterou preferuje on, pomocí nějaké volby na příkazovém řádku, např. dobyvatel.pl -db /home/user/obchody-db
.
Další informace
Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://ufal.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán).
Pokud se individuálně nedohodneme jinak, termín odevzdání je konec listopadu. Při některé prosincové přednášce program předvedete ostatním.