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 12174×

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ů

24.10.2014 7:33 /MaReK Olšavský
Vyšlo Ubuntu 14.10 a spiny s dalšími desktopy Kubuntu 14.10, Xubuntu 14.10 a poprvé i Ubuntu-Mate (Lubuntu 14.10 bude opožděno). Změn je poměrně málo, nestihli zařadit aktuální GNOME a je bez convergence části.
Přidat komentář

24.10.2014 7:33 /MaReK Olšavský
Přípravy na vydání Debianu 8 jsou v plném proudu a nejednoho potenciálního uživatele by mohla zajímat připravovaná podpora multimédií pro novou verzi (jinak dosti konzervativní distribuce). Asi nebude potřeba používat obskurdní repozitáře kvůli podpoře přehrávání audia/videa a hudebníky nejspíše také potěší.
Přidat komentář

23.10.2014 7:13 /MaReK Olšavský
CERN používá OpenStack přibližně rok. Jaké je aktuální používání při výzkumu ukazuje článek na OpenSource.com. Vyprodukovaných dat, z měření, není malé množství a pro jejich zpracování je potřebný výkon několikatisíců serverů a pracovních stanic.
Přidat komentář

23.10.2014 7:13 /MaReK Olšavský
Prodejce starších her; jež jsou často hratelnější, než moderní grafické orgie; Good Old Games dosáhl milníku 100 her připravených pro Linux (nejde o portace, ale připravené konfigurace DOSBoxu/Wine).
Přidat komentář

23.10.2014 7:13 /MaReK Olšavský
O malou reklamu pro Ubuntu se postaral Andy Swan, se svým laptopem, při analýze počasí pro tragickou Velkou Cenu Japonska 2014 (Formule 1).
Přidat komentář

22.10.2014 7:19 /MaReK Olšavský
Programovacímu jazyku Swift, jenž nedávno zveřejnil Apple a je uzavřený, vzniká svobodná odpověď Phoenix (repozitář). Jazyk bude stejný, takže lze očekávat, že se Apple bude bránit i soudně. Název Phoenix už nejspíše také někdo používá, starší pamatují, že se tak chvíli jmenoval dnešní Mozilla Firefox.
Přidat komentář

22.10.2014 7:19 /MaReK Olšavský
Programátorům v PHP je určen nástroj RIPS, který jim pomůže odhalit zranitelnosti v jejich kódu. Pokud znáte další nástroje, podělte se o ně v diskusi.
Přidat komentář

22.10.2014 7:18 /MaReK Olšavský
HDMI sticků, které povyšují možnosti TV, je na trhu nepřeberné množství, ale Apec Electronics se nepokouší zaujmout nejlevnější cenou. Za US$ 110 dostanete Android běžící na 4 jádrovém Atomu (takže platformu x86), přičemž místo Androidu lze pořídit verzi s MS Windows 8.1.
Přidat komentář

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

> Poslední diskuze

16.10.2014 7:56 / Leo
Sanba

13.10.2014 7:20 / MaReK Olšavský
Re: PDF a podpis

10.10.2014 8:01 / Hynek Beran
PDF a podpis

10.10.2014 7:41 / Dusan Hlavac
Re: Takže nic.

10.10.2014 6:36 / MaReK Olšavský
Re: Může, ale nemusí

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