ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Perl (64) - Projekt - čtečka sportovních výsledků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. 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 projektuJak 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á:
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
RozborPonechme 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. KoncepceK 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 LivescoreCo by měl umět modul? Shrňme požadavky na něj do několika bodů.
Program liveJak 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í.
Správa projektuBudeme 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í. DokumentacePouž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í.
Související články
Předchozí Celou kategorii (seriál) Další
Perl (1) - Dávka teorie na úvod
Perl (2) - Úvod do syntaxe Perl (3) - Proměnné Perl (4) - Čísla a řetězce Perl (5) - Podmínky Perl (6) - Pravdivostní výrazy Perl (7) - Vstup poprvé Perl (8) - Některé základní vestavěné funkce Perl (9) - Cykly Perl (10) - Další řídící struktury Perl (11) - Pole - úvod Perl (12) - Pole - základní operace Perl (13) - Hashe Perl (14) - Další nástroje pro seznamy Perl (15) - Výchozí proměnná, heredoc, symbolické odkazy Perl (16) - Regulární výrazy - začínáme Perl (17) - Regulární výrazy - kotvy Perl (18) - Regulární výrazy - množiny znaků Perl (19) - Regulární výrazy - opakování a kvantifikátory Perl (20) - Regulární výrazy - magické závorky Perl (21) - Regulární výrazy - nahrazování Perl (22) - Regulární výrazy - přepínače Perl (23) - Regulární výrazy - rozšířené vzory Perl (24) - Regulární výrazy - příklady Perl (25) - Regulární výrazy - závěr Perl (26) - Podprogramy Perl (27) - Prototypy Perl (28) - Rozsahy platnosti proměnných Perl (29) - Úvod k práci se soubory Perl (30) - Práce se soubory Perl (31) - Testování souborů Perl (32) - Jiné typy souborů Perl (33) - Formátování výstupu - printf Perl (34) - Formátování výstupu - formáty Perl (35) - Vestavěný debugger Perl (36) - Grafické debuggery Perl (37) - Začínáme s moduly Perl (38) - Rozhraní modulu Perl (39) - Pragma Perl (40) - Dodatky k modulům Perl (41) - CPAN Perl (42) - Argumenty příkazového řádku Perl (43) - Přepínače Perl (44) - Dlouhé přepínače Perl (45) - Odkazy Perl (46) - Užití odkazů a anonymní data Perl (47) - Složitější datové struktury Perl (48) - Libovolně složité datové struktury Perl (49) - Tabulky symbolů a typegloby Perl (50) - Uzávěry a iterátory Perl (51) - Signály Perl (52) - Externí příkazy Perl (53) - Režim nakažení Perl (54) - Fork Perl (55) - Eval Perl (56) - Volby příkazu perl Perl (57) - Jednořádkové skripty Perl (58) - OOP - úvod Perl (59) - OOP - typické použití Perl (60) - OOP - dědičnost Perl (61) - OOP - přínos a užití dědičnosti Perl (62) - OOP - přetěžování Perl (63) - OOP - závěr Perl (65) - Projekt - získání dat Perl (66) - Projekt - výběr zápasů a podrobnosti Perl (67) - Projekt - dokončujeme modul Perl (68) - Projekt - zobrazení zápasů Perl (69) - Projekt - online přenos Perl (70) - Plain Old Documentation Perl (71) - Navazování proměnných Perl (72) - Navazování složitějších datových typů Perl (73) - DBM Perl (74) - Sockety Perl (75) - Obsluha více klientů Perl (76) - Síťová hra v kostky Perl (77) - Služby internetu Perl (78) - Databáze - úvod Perl (79) - Databáze - manipulace s daty Perl (80) - Databáze - závěrečné poznámky Perl (81) - CGI - příprava webového serveru Perl (82) - CGI - první skripty Perl (83) - CGI - získávání dat od uživatele Perl (84) - CGI - usnadnění tvorby skriptů pomocí modulu CGI Perl (85) - CGI - generování dokumentu modulem CGI Perl (86) - CGI - cookies Perl (87) - CGI - příklad aplikace Perl (88) - CGI - závěr Perl (89) - Mason - snadné psaní webů Perl (90) - Mason - speciální bloky Perl (91) - Mason - handlery Perl (92) - Mason - závěr Perl (93) - Catalyst - MVC framework pro Perl Perl (94) - Catalyst - základy pro psaní aplikace Perl (95) - Catalyst - šablony Perl (96) - Catalyst - spolupráce s databází Perl (97) - Curses - tvorba textových uživatelských rozhraní Perl (98) - Curses - pozicování a okna Perl (99) - Curses - měření rychlosti psaní Perl (100) - Curses - použití hotových widgetů Perl (101) - Curses - jednoduchý textový editor Perl (102) - Rozšiřování Perlu pomocí XS Perl (103) - Rozšiřování Perlu pomocí SWIG Perl (104) - Testování rychlosti Perl (105) - Testování programových jednotek Perl (106) - Debugování pomocí komentářů Perl (107) - Moose - moderní objektový systém Perl (108) - Moose - základní vlastnosti Perl (109) - Moose - role Perl (110) - Moose - meta API Perl (111) - Pokročilá práce se seznamy Perl (112) - Práce s PDF Perl (113) - Práce s archivy Perl (114) - Tk - úvod Perl (115) - Tk - umísťování widgetů Perl (116) - Tk - základní widgety Perl (117) - Tk - některé pokročilejší widgety Perl (118) - Tk - čas a události Perl (119) - Tk - CD man Perl (120) - Wx - základní práce s widgety Perl (121) - Wx - události Perl (122) - Gtk2 - úvod Perl (123) - Gtk2 - základní práce s obrázky Perl (124) - Gtk2 - události a čas Perl (125) - Gtk2 - vlastní widgety Perl (126) - Gtk2 - textové okno a práce s pozicemi Perl (127) - Gtk2 - hierarchické seznamy Perl (128) - Gtk2 - dialogy Perl (129) - Gtk2 - skládání widgetů Perl (130) - Gtk2 - menu a toolbary Perl (131) - Gtk2 - transparentní okna, tray ikona, výběr souborů Perl (132) - Gtk2 - drag&drop, druid Perl (133) - Gtk2 - úpravy vzhledu aplikací pomocí rc Perl (134) - Gtk2 - Glade Interface Designer Perl (135) - XML - čtení a zápis Perl (136) - XML - DOM a SAX přístupy Perl (137) - Vlákna Perl (138) - Memoizace - cachování podprogramů Perl (139) - Profilling - efektivní odhalování pomalých míst v programu Perl (140) - Profilling - píšeme si vlastní profiler / debugger Perl (141) - Formátování kódu, deparsování, perltidy Perl (142) - Způsoby konfigurování Perl (143) - Struktura datových typů, správa paměti Perl (144) - POE - událostmi řízené programování Perl (145) - POE - aplikace typu klient-server Perl (146) - Perl 6 - jazyk budoucnosti Perl (147) - Perl 6 - regulární výrazy, nové operátory Perl (148) - Perl Culture Perl (149) - Závěr Pozvánka na Český Perl Workshop Perl 5.22.0 a vše okolo Perl 5.24.0 a vše okolo Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |