LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (64) - Projekt - čtečka sportovních výsledků

Perl Protože jsme se dosud zabývali výhradně teorií, věnujeme následujících 6 dílů na napsání snad prvního smysluplného programu v tomto seriálu.

5.10.2007 06:00 | Jiří Václavík | Články autora | přečteno 11668×

Dosud jsme v seriálu uváděli pouze minimum příkladů. Byly to příklady pro příklady - tedy vesměs co nejstručnější vyumělkované programy bez většího smyslu. Jejich účelem bylo pouze demonstrovat určitou část syntaxe.

Dnes zahájíme práci na textové čtečce sportovních výsledků, což by mělo přinést zpetření seriálu.

Práci na každém větším projektu lze rozdělit do několika etap. Programování je pouze jednou z nich. Podle velikosti projektu se těmto etapám přisoudí důležitost, která se projeví zejména na časové organizaci. Čím větší projekt, tím je obvykle čas na programování v porovnání s analyzováním a přípravou menší. Na velikosti projektu také záleží to, z kterých fází se bude postup skládat.

Nás toto členění však zase tolik trápit nemusí, protože půjde pouze o poměrně malý projekt. Spoustu fází, jako například hardwarové nároky tak nemusíme řešit vůbec.

První věcí, kterou bychom si tedy nyní měli ujasnit je, co vlastně budeme psát.

Cíl projektu

Jak již bylo řečeno, napíšeme program pro čtení výsledků kopané. Výsledky budeme získávat extrakcí z vybrané internetové stránky. Zmiňme rovnou, že to bude napevno www.livescore.com. Toto řešení má sice několik zásadních nevýhod, ale ukážeme si na něm některé zajímavé postupy.

Prvotní představa o tom, co by náš program měl umět, je taková:

  • vypsat všechny zápasy, které se hrají dnes (tedy v podstatě seznam zápasů na www.livescore.com/default.dll?page=home)
  • vypsat všechny zápasy z národních resp. mezinárodních soutěží (získávat je budeme z www.livescore.com/default.dll?page=jméno_soutěže)
  • každý zápas může být v době volání v jedné ze tří fází.
    1. zápas ještě nezačal
    2. zápas se právě hraje
    3. zápas se již dohrál
    Tyto fáze musíme ve výpisech zápasů zřetelně odlišíme
  • u každého zápasu by měla být informace o názvu soutěže, údaj kdy zápas začne a pokud již začal tak buď průběžný nebo konečný výsledek.
  • zobrazit detail vybraného zápasu - střelci branek, případně karty apod. (tedy to, co je dostupné na www.livescore.com/default.dll/Game?comp=soutěž&game=id_hry)
  • sledovat zápas online, pokud se hraje

Použití programu by mělo být nanejvýš jednoduché a intuitivní. Jediným zadaným příkazem do shellu bychom měli obdržet požadovanou informaci. Abychom získali alespoň jistou představu, uveďme si, jak by taková volání mohla vypadat.

Program pojmenujeme live a bude se spouštět stejnojmenným příkazem. Bude k dispozici několik možností volání. Pro zobrazení zápasů, které se hrají dnes bude sloužit tento příkaz.

$ live

Pokud zadáme argument, vypíše se pouze zápasy, které vyhovují vzoru.

$ live manchester

Dále bude program přijímat několik argumentů z příkazového řádku. Pomocí volby -league nebo -l zadáme stát nebo mezinárodní soutěž, jejíž zápasy se mají vypisovat a to v takovém tvaru, v jakém ji uvádí livescore.com. Tedy například tento příkaz zobrazí zápasy v Anglii.

$ live -l england

Dále zde bude volba -o nebo -online, která bude zobrazovat detail zápasu. V případě, že se zápas hraje, spustí se online přenos. Pokud se již dohrál, zobrazí se střelci branek, průběh apod.

$ live -o

Pokud nezadáme žádný argument, program zobrazí seznam zápasů a zeptá se, který z nich chceme zobrazit. Zadávat mu budeme část názvu týmu, podle kterého již program požadovaný zápas určí. Pokud nebude zadání jednoznačné, zeptá se na další informaci. Pokud však hodnotu vložíme, program podle ní zápas určí automaticky.

$ live -o manchester

A nakonec zde bude volba -r nebo -refresh, pomocí které nastavíme sekundový interval pro aktualizaci při online přenosu. Nicméně protože nastravíme nějakou rozumnou implicitní hodnotu, bude používán jen zřídka.

$ live -r 30 -o manchester

Rozbor

Ponechme stranou pro nás irelevantní (jinak však nezbytné) otázky typu "v čem psát" a pojďme udělat několik důležitých rozhodnutí o tom "jak psát".

Nejprve poznámku o stylu programování. Program nebudeme ladit až k naprosté dokonalosti. Budeme dbát zejména na názornost. Pokud narazíme na problém, který bude chod programu ovlivňovat jen minimálně, ale jehož řešení by zabralo relativně mnoho času, pouze ho zmíníme, případně nastíníme řešení a většinou necháme být.

Koncepce

K návrhu programu použijeme objektově orientované programování. Program se bude sestávat z několika částí. Je třeba se rozhodnout pro konkrétní variantu.

Předně vytvoříme modul s názvem Livescore, který se bude starat o získávání a zpracovávání dat. Nebude řešit věci jako je zobrazování dat, data bude pouze poskytovat.

Zpracování dat můžeme udělat několika způsoby. Buď můžeme napsat mezičlánek mezi modulem Livescore a programem live, např. modul Livescore::Text, který bude řešit zobrazování dat podle požadavků programu live. Výhodou tohoto postupu je, že bychom později mohli dopsat např. moduly Livescore::Qt, Livescore::Curses apod., které bychom mohli snadno použít při tvorbě uživatelských rozhraní.

A nebo napíšeme pouze program live, který bude zpracovávat data od Livescore sám.

Druhá varianta je jednodušší a protože našemu zadání plně postačuje, zvolíme právě ji.

Modul Livescore

Co by měl umět modul? Shrňme požadavky na něj do několika bodů.

  • Základním požadavkem na modul je získat data. Proto zde bude existovat funkce ziskej_zdrojovy_kod, která stáhne z www.livescore.com tu stránku, která bude zrovna požadována.
  • S předcházejícím bodem tane na mysli další otázka. Otázka perzistence. Budeme stahovat pokaždé, když bude program volán nebo si stránku "někam" uložíme? Tento problém je třeba důkladně zvážit, neboť bude program pravděpodobně často volán opakovaně. Rozhodněme se pro následující řešení. Každý stažený soubor uložíme do adresáře /tmp a po každém volání se podíváme, zda náhodou již vhodný soubor nemáme. Budeme muset brát zřetel na stáří souboru. Další podotázka je, jak se budeme zbavovat starých tmp souborů? Vyřešíme to jednoduše. Nijak. Moc místa zabírat nebudou a čas od času každý stejně tempy maže...
  • Dále by měl modul extrahovat data na základě zdrojového kódu. K tomu budeme muset pečlivě prostudovat HTML kódy z livescore.com.
  • Další vlastností bude hledání zápasu podle daných kritérií.
  • A na závěr se nabízí otázka, jak udělat online přenos? Protože o formu zobrazování dat se modul nestará, tak se tato otázka vyřeší sama. Odpovědnost za online přenos bude mít program live. Modul Livescore bude pouze na požádání posílat průběžná (nebo konečná) data.

Program live

Jak již bylo řečeno, live se stará o kontakt uživatelem a formu zobrazování dat. Vytvořme opět nějakou osnovu, na které budeme moci stavět. I když tentokrát nebude příliš konkrétní.

  • Je třeba obsloužit volání uživatele.
  • Na základě dat z modulu Livescore bude třeba zobrazit aktuální zápasy, případně detail zápasu. Online přenos bude řešen cyklickým doplňováním nových informací.
  • V zadání projektu jsme rozdělili zápasy na 3 typy, podle toho, v jakém jsou stavu z hlediska časového postupu. Tyto druhy rozlišíme barvami.

Správa projektu

Budeme se zabývat pouze programováním. Nicméně nepíšeme program na 10 řádků a asi by tedy bylo žádoucí použít nějaký program na správu verzí.

Dokumentace

Použití našeho programu bude poměrně jednoduché, u modulu to bude složitější. Měli bychom vytvořit dvě manuálové stránky ve formátu POD. Jednu pro modul a další pro příkaz live. Dokumentací POD se v rámci seriálu ještě budeme podrobně zabývat.

Co se týče komentářů v kódu, tak je samozřejmě dobré komentovat nejasná místa. Protože používáme objektově orientované programování, neměly by být u dobře navrženého projektu nároky na komentáře příliš vysoké. Nelze říct, že dobrý kód komentáře nepotřebuje, ale že v dobrém kódu je na první pohled jasné, co se právě děje a nejasná místa vznikají daleko méně.

Závěr

Úspěšně jsme dokončili naši minianalýzu a příště se pustíme již do programování.

Verze pro tisk

pridej.cz

 

DISKUZE

Super článek 9.10.2007 17:17 Petr Zajíc




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

23.4.2014 7:29 /MaReK Olšavský
Čínská firma Lemaker představila konkurenci Raspberry Pi, SBC Banana Pi s 2 jádrovými SoC Allwinner A20 (Cortex-A7) o frekvenci 1 GHz, a (konečně) jedním SATA konektorem. GPIO header by měl být kompatibilní s R-Pi i možnosti připojení jsou stejné.
Přidat komentář

23.4.2014 7:29 /MaReK Olšavský
Bezpečnostní chyba „Heartbleed“ v OpenSSL se dostala i do hlavních zpráv světových médií a pravděpodobnost objevení další je nenulová. Naprostá dominance (OpenSSL má téměř monopolní postavení) pak znamená ohrožení opravdu velkého počtu uživatelů. Stávající OpenSSL je vyvíjené dlouhou dobu a Theo de Raadt se rozhodl pro vytvoření forku LibreSSL, který přinese i značné vyčištění API.
Přidat komentář

22.4.2014 6:47 /MaReK Olšavský
Svobodný software a softwarově definované sítě/datacentra se doplňují. O možných změnách stávajících rolí v datacentrech, píše Dan Kusnetzky.
Přidat komentář

22.4.2014 6:47 /MaReK Olšavský
Zatím není úplně jasné, zda je reálné, aby Chromebooky pronikly do enterprise sféry, přestože se Google a Citrix snaží o zpřístupnění kritických aplikací z platformy Windows.
Přidat komentář

18.4.2014 7:51 /MaReK Olšavský
Práce je dokončena a vyšlo Ubuntu 14.04 „Trusty Tahr“, které je s prodlouženou podporou (LTS). Zároveň s originálním Ubuntu vyšly i oficiální forky. Neškodí si připomenout 10 kroků po instalaci.
Přidat komentář

18.4.2014 7:51 /MaReK Olšavský
Pátrání po troskách letu 370 trvá přes měsíc a vedle různých konspiračních teorií je i seriozní přístup k hledání, jehož se účastní i automatizovaná miniponorka Bluefin-21, jejíž systémy využívají GNU/Linux.
Přidat komentář

18.4.2014 7:51 /MaReK Olšavský
Uživatelé Wordpressu mají k dispozici novou verzi 3.9. Vývojáři zapracovali především na vestavěném editoru, jenž se podobá editoru známému uživatelům Google Docs.
Přidat komentář

17.4.2014 7:17 /MaReK Olšavský
Open source pro knihovny, to je Koha, která vznikla na Novém Zélandě a dnes patří mazi nejlepší software svého druhu. Historické okénko, na webu OpenSource.com, ukazuje jak kontext vzniku software, jež vznikl z potřeby efektivního a levného řešení.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

7.4.2014 6:31 / MaReK Olšavský
Re: No, nevím

4.4.2014 10:22 / Petr Ježek
No, nevím

4.4.2014 10:18 / Petr Ježek
ATI

24.3.2014 13:54 / Michal Linha
Re: Delimiter

24.3.2014 13:46 / Michal Linha
Re: Delimiter

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2014) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze | zákony online