Č ESKÉ V YSOKÉ U ČENÍ T ECHNICKÉ V P RAZE Fakulta Elektrotechnická
Bakalářská práce Program pro závodní časomíru
Petr Diviš Vedoucí: Ing. Šimon Nešvera Studijní program: Elektrotechnika a informatika, strukturovaný, bakalářský Obor: Výpočetní technika
Červen 2008
4
Program pro závodní časomíru
Poděkování
5
Poděkování Na tomto místě bych rád poděkoval vedoucímu mé bakalářské práce Ing. Šimonu Nešverovi za jeho vstřícnost a ochotu. Dále bych chtěl vyjádřit svůj dík organizačnímu týmu cyklistického závodu „Lišanská šlapka“, kde jsem získal inspiraci pro tvorbu práce. Též bych chtěl poděkovat Marku Kočímu za poskytnutí oficiálního programu pro správu účastníků tohoto závodu.
6
Program pro závodní časomíru
Prohlášení
7
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu § 60 Zákona č.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Lubné dne 12.6.2008
......................................................................................
8
Program pro závodní časomíru
Abstract
9
Abstract The bachelor thesis deals with the design and the implementation of program for the amateur racing time measurement which is suitable for the district bicycle competition. The program is based on the Qt framework ported into the C++ programming language. It manages a competitor database and provides the time measurement for a competition. As a proof of identity of the competitor finishing the race at a certain time, it takes a photograph of the finish line in the time of the competitor’s thoroughfare.
Abstrakt Bakalářská práce se zabývá návrhem a implementací programu pro amatérskou závodní časomíru vhodného pro okresní cyklistický závod. Program založený na frameworku Qt v programovacím jazyku C++ spravuje databázi závodníků a zajišťuje samotné měření závodu. Jako průkaznou identifikaci průjezdu závodníka cílem pořizuje fotografii cílové čáry v čas průjezdu.
10
Program pro závodní časomíru
Obsah
11
Obsah Seznam obrázků................................................................................................................................. 13 1.
Úvod................................................................................................................................. 15
2.
Rozbor zadání .............................................................................................................. 16 2.1.
Stručně o závodu „Lišanská šlapka“ ......................................................................... 16
2.1.1. 2.2.
Druhy startů .............................................................................................................. 18
2.2.2.
Způsob měření ......................................................................................................... 18
2.2.3.
Stopování času ......................................................................................................... 19
2.2.4.
Rozlišení závodníků ............................................................................................... 19
2.2.5.
Evidence závodníků v cíli ..................................................................................... 19
5.
Požadavky na program .................................................................................................. 20
Rešerše ........................................................................................................................... 21 3.1.
4.
Požadavky na časomíru ................................................................................................. 18
2.2.1.
2.3. 3.
Technické zázemí závodu .................................................................................... 17
Komerční řešení ............................................................................................................... 21
3.1.1.
Přehled firem vyrábějící profesionální časomíru ....................................... 21
3.1.2.
Přehled firem měřících sportovní události v ČR ......................................... 23
3.1.3.
Samostatný software ............................................................................................. 24
3.2.
Volně dostupná řešení ................................................................................................... 25
3.3.
Shrnutí rešerše ................................................................................................................. 26
Analýza a návrh implementace ............................................................................. 27 4.1.
Co je třeba implementovat ........................................................................................... 27
4.2.
Volba programovacího jazyka .................................................................................... 28
4.3.
Volba frameworku pro C++ ......................................................................................... 29
4.4.
Volba databáze .................................................................................................................. 29
4.5.
Vývojové prostředí .......................................................................................................... 30
4.6.
Připojení fotoaparátu ..................................................................................................... 31
4.7.
Více o Qt ............................................................................................................................... 31
4.7.1.
Události, signály a sloty ........................................................................................ 31
4.7.2.
Ostatní vlastnosti Qt............................................................................................... 32
Popis implementace .................................................................................................. 34 5.1.
Vzhled formulářů ............................................................................................................. 34
12
6.
Program pro závodní časomíru
5.2.
Třídy ...................................................................................................................................... 40
5.3.
Use case diagram .............................................................................................................. 44
5.4.
Schéma databáze .............................................................................................................. 45
5.5.
Schéma tříd programu ................................................................................................... 46
Testování ....................................................................................................................... 47 6.1.
Stabilita programu ........................................................................................................... 47
6.2.
Propustnost časomíry .................................................................................................... 47
6.3.
Zpoždění fotoaparátu ..................................................................................................... 47
6.4.
Propustnost fotoaparátu ............................................................................................... 47
7.
Závěr ................................................................................................................................ 48
8.
Přílohy ............................................................................................................................ 49
Obsah
13
Seznam obrázků Obr. 2.1 – trasa závodu .................................................................................................................... 16 Obr. 2.2 – současný program pro závod ................................................................................... 17 Obr. 3.1 – příklad měřícího schématu ALGE ........................................................................... 21 Obr. 3.2 – příklad měřícího schématu TAG Heuer ................................................................ 22 Obr. 3.3 – program na měření TAG Heuer ............................................................................... 23 Obr. 3.4 – ukázka programu RunScore ..................................................................................... 25 Obr. 5.1 – první mód hlavního okna ........................................................................................... 34 Obr. 5.2 – druhý mód hlavního okna ......................................................................................... 35 Obr. 5.3 – záložka Výsledky ........................................................................................................... 36 Obr. 5.4 – záložka Statistiky .......................................................................................................... 36 Obr. 5.5 – vkládání závodníka ...................................................................................................... 37 Obr. 5.6 – kontextové menu v tabulce závodníků ................................................................. 38 Obr. 5.7 – export výsledků ............................................................................................................. 38 Obr. 5.8 – přiřazení času závodníkovi ....................................................................................... 39 Obr. 5.9 – nastavení fotoaparátu ................................................................................................. 39 Obr. 5.10 – okno fotografie a náhledy v hlavním okně ....................................................... 40 Obr. 5.11 – Use case diagram ........................................................................................................ 44 Obr. 5.12 – schéma databáze programu ................................................................................... 45 Obr. 5.13 – třídní schéma programu .......................................................................................... 46
14
Program pro závodní časomíru
Úvod
1.
15
Úvod
Nápad na bakalářskou práci vznikl po osobních zkušenostech při organizování okresního cyklistického závodu „Lišanská šlapka“ [1] konaném každoročně v květnu v obci Lišany, okres Rakovník. Účelem práce je vytvoření kvalitnějšího programu pro měření časů závodníků a zpřehlednění organizace výsledků při měření závodu. Navržený program, jakožto rozšíření původního programu, by měl obsahovat stejné funkce. Navíc musí ovšem umět stopovat dojezdové časy závodníků a vytvářet evidenci průjezdů cílovou čárou pomocí fotoaparátu připojeného k programu. Důvod vzniku programu byl takový, že existující program nebyl dostatečně vybaven pro měření dojezdových časů závodníků a obsahoval chyby, které způsobovaly jeho nestabilitu.
16
Program pro závodní časomíru
2.
Rozbor zadání
2.1.
Stručně o závodu „Lišanská šlapka“
Cyklistický závod se koná jednou ročně o víkendu v květnu, je spíš zábavního charakteru, ale účastní se ho i několik špičkových cyklistů z ČR. Celkem se zúčastní závodu kolem 300-600 závodníků. Jede se trasa dlouhá 65km. Startuje se ve vesnici Lišany u Rakovníka, trasa pokračuje přes Rakovník, Pavlíkov, Panoší Újezd a Týřovice k řece Berounce. Podél řeky se jede až do Roztok, poté do Křivoklátu a Městečka. Před obcí Nový Dům se zahýbá směrem zpět na Lišany, kde je cíl (viz Obr. 2.1).
Obr. 2.1 - trasa závodu
Rozbor zadání
17
Závod je prezentován jako cyklistický výlet a memoriál Franty Mašína. Měřený čas se proto stopuje po uplynutí 4 hodin od startu, protože se předpokládá, že ti co brali závod jako výlet už nepotřebují znát svůj čas. Startovní i cílová čára je na hlavní ulici u hospody. V hospodě je zároveň registrace i vyhlašování výsledků. Při registraci jsou všichni závodníci zapsáni na papíry a dostanou pořadové číslo a poukázku na cílový řízek. 2.1.1. Technické zázemí závodu Účastníci se ráno před závodem přihlašují organizátorům a ti si jejich iniciále píší na papír. Zároveň dostanou závodníci startovní číslo, které si musí připevnit na řidítka svého kola. Záznamy se z papírů přepisují do dvou přinesených počítačů. Jsou evidovány tyto údaje: jméno, příjmení, startovní číslo, obec a rok narození. Program, který je v současné době k dispozici, má všechny potřebné věci pro skladování těchto údajů (viz Obr. 2.2).
Obr. 2.2 - současný program pro závod
Není ale úplně stabilní a je napsán v jazyce Visual Basic. Kontroluje návaznost startovních čísel, dokáže importovat část databáze z jiného zdroje - problémově, a
18
Program pro závodní časomíru
nakonec
přiřazování
cílových
časů
k jednotlivým
účastníkům.
Umožňuje
exportovat výsledkovou listinu do HTML souboru. Vede také statistiku nejstarších účastníků, celkový počet mužů, žen, počty účastníků z obcí. Čas se měří na několika stopkách. Několik lidí zapisuje na připravené papíry s nadepsanými pořadovými čísly časy a jiní zapisují na jiné papíry čísla závodníků, tímto způsobem nelze předejít náhodné chybě při nadepisování papírů nebo zapisování časů a čísel. Také není možné s jistotou změřit více závodníků než je počet měřících osob.
2.2.
Požadavky na časomíru
Závodní časomíra se zabývá měřením doby, která uplyne od startu závodníka ze startovního místa – typicky ze startovní čáry – do okamžiku, kdy závodník překročí cílovou čáru. Na základě změřené doby se určí pořadí závodníka v závodu. 2.2.1. Druhy startů Závodní starty se od sebe liší způsobem startu závodníků. a) Hromadný start – všichni závodníci startují najednou na signál od pořadatele (slovní pokyn, výstřel, mávnutí praporkem) b) Intervalový start – startuje vždy jeden závodník po určitém časovém intervalu, který je závislý na čase z předchozího závodu v sérii (např. běžkařský pohár) c) Individuální start – závodník se musí během určitého časového limitu rozhodnout k odstartování (např. lyžařské sjezdy) 2.2.2. Způsob měření Podle typu startu se měří všem účastníkům čas od stejného okamžiku (hromadný start) nebo každému zvlášť (individuální start). Cyklistické závody mají většinou hromadný start, takže vyžadují jen jednu referenční časomíru. Vzhledem k tomu, že cyklistické závody trvají několik hodin, není třeba velká rozlišovací přesnost dojezdových časů a stačí proto měření s přesností na vteřiny.
Rozbor zadání
19
2.2.3. Stopování času Při překročení cílové čáry je třeba čas závodníka zaznamenat a evidovat s ním zároveň i jeho startovní číslo. Výsledný seznam časů je potřeba ihned individuálně nebo hromadně se zpožděním přidat k seznamu závodníků a generovat výsledkovou listinu závodu a statistiky, pokud jsou vyžadovány. 2.2.4. Rozlišení závodníků K rozlišení závodníků se používají tyto metody: a) Dresy s čísly – každý závodník má dres se svým číslem (např. sprinty) b) Cedulky s čísly - závodníci dostanou cedulku s číslem, které musí upevnit na část svého oblečení nebo na kolo c) Čipy – elektronické RFID čipy poskytující bezdrátově čtečce své identifikační údaje (závody s velkým počtem účastníků a delší dobou trvání) Pro závod s velkým počtem závodníků se hodí elektronické čipy, které jsou ale drahé a náročnější na výrobu a propojení s počítačem. 2.2.5. Evidence závodníků v cíli Technologie elektronických RFID čipů je moderní cesta k přesnému měření a získávání okamžitých výsledků. Rozlišení závodníků v cíli probíhá zcela automaticky. Tato metoda je v dnešní době nejvíce žádaná, protože s ní odpadá spousta práce se zpracováním výsledků a existuje mnoho firem, které nabízejí měření sportovních závodů právě touto metodou. Na druhou stranu představují cedulky s čísly levné a jednoduché řešení, které může organizátor zvládnout sám i bez specializované firmy. Je ale třeba zajistit evidenci startovních čísel v cíli manuálně. Metody evidence závodníků v cíli lze rozdělit: a) Automatická s RFID čipy b) Automatická pomocí kamer s mnoha snímky za sekundu c) Automatická pomocí fotobuněk d) Manuální, psaním projetých závodníků ručně a přiřazením časů, též napsaných ručně (vyžaduje několik „stoperů“ v cíli)
20
Program pro závodní časomíru e) Manuální, pomocí fotoaparátu připojeného k počítači s programem na měření času a přiřazováním dojezdových časů závodníkům z fotografií cílové čáry vyfocených v době průjezdu.
2.3.
Požadavky na program
Program musí zvládat stejné úkony jako program předchozí verze, tj.: 1. Správu závodníků 2. Tvorbu výsledkové listiny 3. Exportovat výsledkovou listinu do HTML 4. Vytvářet statistiku 5. Přiřazovat dojezdové časy závodníkům 6. Vyhledávat v údajích závodníků podle kritérií 7. Kontrolovat návaznost startovních čísel 8. Spojovat více databází do jedné 9. Umožnit vkládat údaje zrychleně s usnadněními
Navíc by měl umět: 10. Stopovat čas závodu 11. Evidovat průjezdy závodníků 12. Dokumentovat průjezdy cílovou čárou pomocí fotoaparátu připojeného k programu 13. Umožnit jednoduché nastavení fotoaparátu 14. Zobrazovat náhledy fotografií pořízených při průjezdech 15. Obsahovat stručný návod k obsluze Dále by program měl vykazovat lepší stabilitu než jeho předchůdce a lepší efektivitu práce. Měl by obsahovat data v databázi kompatibilní s jazykem SQL.
Rešerše
3.
Rešerše
3.1.
Komerční řešení
21
Na poli měření sportovních závodů působí několik světových firem, které jsou špičkami ve svém oboru, používají k dosažení kvalitních výsledků dlouhodobou zkušenost, bohaté zázemí vlastního zařízení a programů. 3.1.1. Přehled firem vyrábějící profesionální časomíru ALGE Timing Rakouská firma má již více jak 30tiletou zkušenost s výrobou sportovní časomíry. V jejím sortimentu jsou všechny druhy zařízení měřící i zobrazovací závodní techniky. K velkému množství sportovních závodů nabízí měřící sestavy včetně hardware i software pro ovládání [9]. Příklad takového schéma uvádí Obr. 3.1.
Obr. 3.1 - příklad měřícího schématu ALGE
22
Program pro závodní časomíru
TAG Heuer Historie firmy TAG Heuer sahá do roku 1860, kdy si švýcarský hodinář Eduard Heuer otevřel svoje vlastní hodinářství. Už v roce 1916 byly představeny stopky, které dokázaly změřit čas s přesností na 1/100 sekundy. Dnes patří společnost mezi špičky a její přístroje jsou brány jako za referenční. V současné době patří k jejím nejlepším přístrojům Monaco V4, který je schopný přesnosti 1/10 000 sekundy [6].
Obr. 3.2 - příklad měřícího schématu TAG Heuer
Společnost nabízí komplexní vybavení pro měření závodů – jak stopky (viz Obr. 3.2) tak software, které je dokonce zdarma, ale bez propojení se stopkami zůstává bez praktického využití (viz Obr. 3.3).
Rešerše
23
Obr. 3.3 - program na měření TAG Heuer
Tissot Firma byla založena v roce 1853 ve Švýcarsku. Je členem skupiny Swatch od roku 1983. Zabývá se výrobou hodinek a měřením závodů jako jsou Grand Prix – MotoGP, Nascar a jinými moto a cyklistickými závody. Nenabízí ovšem žádnou techniku pro měření, pouze komplexní služby pro měření časů světoznámých závodů [8]. 3.1.2. Přehled firem měřících sportovní události v ČR Sport-časomíra.cz Společnost patřící pod Svaz Lyžařů ČR, nabízí měření jakýchkoli sportovních závodů s hromadným nebo intervalovým startem. Dále nabízí celkové zpracování údajů závodníků a výsledků závodů v elektronické podobě [4]. SportSoft spol. s.r.o. Firma měří sportovní události v Čechách od roku 1998. Vyvinula si pro to vlastní program ExpertRacing a používá také techniku ALGE. Ve výbavě má také bezdrátové RFID čipy, které snímá koberec vytvářející elektromagnetické pole na cílové čáře [7]. Firma také vyvíjí software pro podporu tréninků sportovců.
24
Program pro závodní časomíru
DanuTiming Dceřiná společnost eSki s.r.o., která se zabývá elektronickým měřením profesionálních sportovních ale i firemních akcí. Na trhu působí od roku 2004. K měření používá špičkové měřící techniky od firmy TAG Heuer. Mezi její nejčastěji měřené závody patří, jak vyplývá z názvu společnosti vlastníka, lyžařské sjezdy [5]. H & H Servis Společnost se zabývá měřením již od roku 1984 a měří na národní i mezinárodní úrovni. Mezi její největší závody patří Mistrovství světa juniorů z roku 1993. Měření provádí homologovanou časomírou FIS pro sjezdové závody [2]. Sportis Firma Sportis vznikla v roce 1993 a od té doby působí na poli závodní časomíry v České republice i v zahraničí. Nabízí vlastní technologii měření pomocí bezdrátových čipů SportisChip. Technologie zvládne registrovat až 150 závodníků za sekundu. Identifikace čipu proběhne až do rychlosti 80km/h. Čip je zalitý do voděodolného pouzdra, takže lze použít i při závodech typu triatlon nebo plavání. Čip je třeba upevnit na kotník závodníka. Unikátnost systému spočívá v tom, že systém nepoužívá přeběhový koberec s indukční smyčkou, ale pouze anténku umístěnou vedle měřícího prostoru. Majitel firmy je absolvent ČVUT, fakulty elektrotechnické, Ing. Michal Slabej, CSc [3]. 3.1.3. Samostatný software RunScore Program zahrnuje správu závodníků, evidenci jejich cílových časů podle několika typů čteček čipů nebo čárových kódů. Program dokonce umožňuje tisk vlastních čárových kódů pro identifikaci závodníků v cíli. Mezi další vlastnosti programu patří tvorba vlastního registračního formuláře. Připojení startovního tlačítka přes sériový port. Software je vyvíjen jedním autorem Alanem Jonesem, který pracoval 26 let u IBM. Autor však uvádí, že program není vhodný pro jiná sportovní odvětví než pro běžecké závody [10]. Cena je stanovena na $250 dolarů za licenci.
Rešerše
25
Obr. 3.4 - ukázka programu RunScore
Race Wizard Komerční program pro MS Windows, který zvládne změřit závod a produkovat výsledkové listiny. Prostředí programu je vzhledově z dob MS Windows 3.11, ale funguje i na MS Windows XP. Umožňuje načtení dat z měřících zařízení nebo importovat data z jiných datových formátů. Jeho cena je $ 199 kanadských dolarů [11].
3.2.
Volně dostupná řešení
Kromě volně dostupných programů od firmy TAG Heuer, které však potřebují vlastní hardware pro měření časomíry, není na internetu dostupný žádný volně šiřitelný program nebo jiné softwarové řešení pro měření závodů. Nabízí se tedy možnost použití první verze programu určeného pro závod Lišanská šlapka poskytnutého Markem Kočím, který ovšem nenabízí možnost měření času přímo v sobě.
26
3.3.
Program pro závodní časomíru
Shrnutí rešerše
Nebylo nalezeno žádné řešení měřícího systému odpovídající požadavkům měření s nízkými náklady na pořízení. Firmy na trhu zmapovaly situaci, protože vědí, že se pořadatelům nevyplatí investovat velké finanční prostředky na pořádání jednoho závodu do roka. Na internetu jsou dostupné komerční programy v angličtině, které nabízejí propojení s měřícími zařízeními, jako je například RunScore. Další náklady vznikají pořízením měřící techniky jako je například ALGE.
Analýza a návrh implementace
4.
Analýza a návrh implementace
4.1.
Co je třeba implementovat
27
Požadavkem je vytvořit spustitelný program s grafickým rozhraním pod platformou MS Windows, který uživateli umožní snadnou a rychlou orientaci v prostředí programu, která je při probíhajícím závodu potřeba. Z tohoto důvodu je nutné implementovat grafické knihovny rychle reagující na požadavky uživatele. Dále je třeba vkládat jednotlivé závodníky opět maximální možnou rychlostí, aby nebyli zdržováni další závodníci, kteří čekají na registraci. Pro toto je potřeba vytvořit formulář, který bude obsahovat inteligentní políčka. Nashromážděná data závodníků je nutné ukládat do databáze pro jejich opětovné vyvolání a úpravy. S daty v databázi je obecně jednodušší manipulace, než s netříděnými daty v souboru, či dokonce jen v paměti programu. V seznamu účastníků je třeba vyhledávat, proto je potřeba implementovat filtr údajů. Program musí umět generovat výsledky podle různých kritérií na vyžádání a exportovat je do HTML souboru jako výsledkovou listinu. Jako doplněk je vyžadováno generování statistik v programu. Jednotlivé statistické kritéria vyžadují současně více pohledů na databázi, proto je třeba databáze umožňující vytvářet pohledy. Měření času je potřeba ukazovat po celou dobu práce s programem pro možnost okamžité reakce například při práci se seznamem účastníků. K dokumentaci cílové čáry je vhodné mít k počítači připojený fotoaparát a při každém průjezdu vyfotit cílovou čáru. Snímky by se pak mohly ukládat do počítače a přiřazovat k jednotlivým časům. Pro toto je potřeba najít nebo vytvořit knihovnu pro propojení programu s fotoaparátem.
28
Program pro závodní časomíru
Uložené fotky by bylo dobré v programu zobrazovat v asociaci s jednotlivými časy jako náhledy a po kliknutí by se mohly zvětšit pro detailní rozbor závodních čísel. Program by měl být schopen běžet na více počítačích pro ukládání údajů účastníků z více stanovišť a potom je finálně spojit v jednu závodní databázi. Nastavení programu by mělo být zapamatovatelné pro snadné obnovení při opětovném spuštění.
4.2.
Volba programovacího jazyka
Pro implementaci programu se nabízí několik programovacích jazyků. Jsou to mnou ovládané jazyky Java, PHP a C++. Mezi výhody programovacího jazyka Java patří jeho multiplatformovost, která ale v tomto případě není vyžadována. Další výhodou je bez pochyby jednoduchost programování. Proti bohužel hovoří špatná napojitelnost na hardware, jako je fotoaparát. Podstatná nevýhoda také je proslulá pomalost programů v jazyku Java. Program napsaný v Javě také vyžaduje instalaci Java Runtime Environment (JRE), což je prostředí pro podporu běhu programu. Programovací jazyk PHP není správně určen pro psaní samostatně spustitelných aplikací. Vyžaduje nainstalovaný HTTP server s podporou spouštění PHP skriptů a případné GUI by bylo možné zobrazit jen v internetovém prohlížeči jako vygenerovanou HTML stránku. Podpora pro propojení s hardware v PHP neexistuje. Pro účely vytváření požadovaného programu se proto nehodí. Poslední možnou volbou je programovací jazyk C++, který podporuje vytváření GUI aplikací pomocí přídavných knihoven a zároveň je možné ho napojit na hardware. Pro jazyk C++ existují různé nadstavby nástrojů (Frameworky), které má v sobě Java běžně zabudované, takže není problém psát programy stejně snadno jako v Javě. Bohužel je programovací jazyk C++ závislý na platformě, protože je třeba jej před spuštěním přeložit do strojového kódu závislého na hardware. Díky tomu je ale výsledný spustitelný program rychlejší než ekvivalentní program v Javě.
Analýza a návrh implementace
29
Z důvodu rychlosti a s ohledem na hardwarovou podporu jsem k realizaci předmětu této práce zvolil programovací jazyk C++.
4.3.
Volba frameworku pro C++
Přiházejí v úvahu 2 dostupné frameworky a to .NET a Qt. Framework .NET je z dílny Microsoftu a nabízí mnoho předpřipravených funkcí a interfaců pro programovací jazyky zastřešené Microsoftem jako jsou C#, J#, VB.NET a ASP.NET. Programování v programovacím jazyku C++ je nahrazeno podobným C# a zacházení s kódem při kompilaci je podobné Javě. Frameworkové knihovny je, stejně jako JRE, pro úspěšné spuštění programu pod OS Windows nutno nejprve nainstalovat. Existují programy, které vytvářejí spouštěcí prostředí i pro jiné platformy než pro Windows, bohužel Microsoft nezastřešuje jejich podporu[12]. Další framework je Qt od firmy Trolltech. Firma ho nabízí pod dvěma licencemi – Open source a komerční verze. Podmínkou Open source je, aby byly zdrojové kódy vytvořeného programu volně k dispozici a program nebyl prodáván [13]. Prostředí umožňuje vývoj pro více platforem jako Java a podporuje i jiné programovací jazyky. Framework obsahuje podobně jako .NET moduly s různými funkcemi pro usnadnění práce programátora. Qt obsahuje vlastní nástroje pro tvorbu GUI a překladu programu do více jazyků. Balík obsahuje plno demonstračních programů ukazujících funkce všech modulů frameworku. Všechny funkce jsou přehledně zdokumentovány a dány vývojáři k dispozici formou programu Qt Assistant, který je vlastně přehledným manuálem. K dispozici je i přehledný grafický nástroj na tvorbu GUI programů Qt Designer. Dále je možné vytvářet vícejazyčné programy pomocí nástroje pro překlad Qt Linguist. Volba je v tomto případě jasná, protože jak bylo řečeno v předchozí kapitole, pro programování byl zvolen programovací jazyk C++, a proto je vybraným frameworkem Qt.
4.4.
Volba databáze
Při volbě databáze je důležité brát ohled na podporované příkazy SQL a robustnost databáze. Jelikož má být program přenositelný, nepadá v úvahu žádná větší
30
Program pro závodní časomíru
databáze, která vyžaduje pro svůj chod nainstalovanou databázovou službu, se kterou je práce navíc. Ze hry tak vypadávají systémy jako MySQL, Firebird nebo PostgreSQL. Vhodná dostupná databáze, která obsahuje přístupové rozhraní již v knihovnách frameworku a nepotřebuje tudíž žádný SQL server, je SQLite. Relační databázový systém SQLite je dostupný jako 500kB zdrojový kód v C [14]. Pro použití v Qt je už zakompilován do knihovny. Databáze je uložená v jediném souboru a pro přístup do ní nejsou vyžadovány žádné přihlašovací údaje. Nevýhodou systému je, že nepodporuje plně databázové transakce. V programu ale nebudou transakce využívány, protože přístup k databázi nebude nijak komplexní. SQLite také nepodporuje cizí klíče, což je na škodu, ale při dostatečném ošetření v programu, nehrozí, že by byla integrita (celistvost[15]) databáze porušena. Datové typy jsou v SQLite dynamické. V praxi to znamená, že lze definovat datové typy pro každý sloupec. Při přiřazování proměnné typu string do int se pokusí systém o konverzi. Pokud se konverze nepovede, vloží systém do sloupce celý string. Za tuto vlastnost sklízí tvůrci systému veřejnou kritiku.
4.5.
Vývojové prostředí
Při volbě vývojového prostředí byla možnost porovnat Dev-C++, Visual Studio 2005, NetBeans. Vývojové prostředí Dev-C++ je Open source a je poměrně jednoduché, jeho podpora kompilace programu je dostatečná, zato doplňování kódu pro Qt není snadné vyřešit. Program nabízí správu projektů a standardní zvýrazňování kódu. Visual Studio 2005 nabízí podporu pro programovací jazyk C++ i pro framework Qt, bohužel jen pro komerční verzi. Je to komplexní nástroj podporující všechny jazyky z rodiny .NET. Vývojové prostředí Visual Studio je komerční produkt společnosti Microsoft, který je v rámci školní MSDNAA licence poskytován pro studijní účely zdarma. Prostředí NetBeans je primárně určeno pro vývoj software v jazyku Java, ale nabízí i podporu pro jazyky jako je Ruby, C++ nebo pro vývoj webových aplikací v PHP. NetBeans je Open source vývojový nástroj s vlastnostmi podobnými Dev-
Analýza a návrh implementace
31
C++ a snaží se dohnat kvalitou prostředí Visual Studia. Jeho podpora pro Qt je obstojná a jde v něm projekty vyžadující tento framework vyvíjet docela svižně. Dalším plusem jsou klávesové zkratky, které opravdu urychlí práci. Například klávesová zkratka pro prohození řádků. Inteligentní doplňování kódu je ale ještě důležitější argument při rozhodování. Jako vývojové prostředí jsem zvolil NetBeans, protože je volně dostupné, rychle se vyvíjí a mám s ním již delší zkušenosti při vývoji programů v Javě. Návod jak zprovoznit kompilování kódu v C++ s prvky Qt je k dispozici na internetu [16].
4.6.
Připojení fotoaparátu
K dispozici je fotoaparát Canon EOS 40D, což je moderní digitální zrcadlovka, schopná snímat obraz v rozlišení 10Mpx rychlostí 6 snímků za sekundu [19]. Standardně se k počítači připojuje přes rozhraní USB a je možné ji ovládat dodávaným programem od společnosti Canon. Pro připojení fotoaparátu k jiným programům však Canon nenabízí žádné rozhraní. Na internetu je k dispozici jen jediné rozhraní, které to umožňuje. Tím je komerční program DSLR Remote Pro od společnosti Breeze Sys [20] volně dostupný pouze v 15ti denní trial verzi. Cena programu je $95 dolarů (červen 2008). DSLR Remote Pro nabízí dynamickou knihovnu DSLRRemoteLib.dll pro přístup k ovládání fotoaparátu přes počítač. Knihovna je přístupná přes hlavičkový soubor DSLRRemoteLib.h
a
je
potřeba
přilinkovat
k programu
souborem
DSLRRemoteLib.lib. Knihovna umožňuje ovládat jen některé funkce fotoaparátu jako například snímání, nastavení názvu fotografie, nastavení cesty pro ukládání v počítači, nastavení kvality fotografie, délku expozice, velikost clony a hodnotu ISO.
4.7.
Více o Qt
Sada objektů Qt nenabízí jen komponenty GUI, ale kompletní nadstavbu nad základním i objekty a datovými typy jazyka C++. 4.7.1. Události, signály a sloty Samotné nasazení GUI objektů by nám nebylo k ničemu bez zajištění podchycení událostí, jakými jsou například zmáčknutí tlačítka, zavření okna, dvojklik na určitý
32
Program pro závodní časomíru
prvek a jiné akce. K tomuto používají standardní události – events. Objekt se musí zdědit,
aby
se
mohla
implementovat
doubleClickEvent(MouseEvent
funkčnost
metodě,
například
*). Dalším způsobem, jak implementovat
funkčnost prvkům je systém signálů a slotů. Při nějaké akci, jako je zmáčknutí tlačítka, se standardně vyšle (emituje) několik signálů. Signály se musí připojit ke slotům, což jsou česky řečeno zdířky, aby byla plně zajištěna funkčnost reakce na konkrétní událost. Signály i sloty se musí deklarovat v hlavičce třídy takto: public slots: int udelej(int); private slots: signals: void udelano(int);
Signály lze v metodě vyslat klíčovým slovem emit a nesmí mít návratovou hodnotu. Také se nesmí definovat jako metoda. Slotům je třeba implementovat tělo funkce. Připojení Signálů a slotů pak probíhá pomocí statické metody: QObject::connect(&objekt1,
SIGNAL(udelano(int)),
&objekt2,
SLOT(udelej(int)));
Slova SIGNAL, SLOT, signals a slots jsou makra a třída používající tyto makra musí mít v hlavničce uvedenou deklaraci makra Q_OBJECT a musí dědit z třídy QObject [17]. Tímto se určuje, že se hlavička třídy musí nejdříve zkompilovat MOC kompilátorem, což je další specialita Qt. MOC prohledá kód a přidá do něj takzvané Meta informace o kompilovaných třídách. Meta informace jsou definice signálů a slotů, volání asynchronních funkcí a další prvky, které standardní C++ neumožňuje [13]. 4.7.2. Ostatní vlastnosti Qt Sada nástrojů Qt neobsahuje jen grafické třídy, ale také kompletní přestavbu standardní C++ STL knihovny. Třídy se jsou mají předponu Q. Například jsou to QString, QList, QArray, QFile, QDir, QTime, QDate. Dále podporuje nadstavbu
fontů třídami QFont, QFontInfo. V Qt je možno i kreslit třídami QPainter, QPixmap, QColor, QGraphicsView. Vytváření více vláknových nebo více
procesových aplikací Qt usnadňuje třídami QThread a QProcess. Síťová
Analýza a návrh implementace
33
komunikace je jednodušší díky modulu QtNetwork. Qt podporuje i grafickou knihovnu OpenGL, práci s XML, SVG, znakovými sadami a databázemi.
34
Program pro závodní časomíru
5.
Popis implementace
5.1.
Vzhled formulářů
Na vzhled a rozmístění prvků GUI byl kladen velký důraz, protože s programem budou pracovat pořadatelé u cílové čáry, kteří nebudou mít čas hledat jednotlivé ovládací prvky. Pro grafické prvky GUI má framework Qt speciální modul nazvaný výstižně QtGui. V grafickém prostředí operačního systému jsou všechna grafická okna a prvky nazývány ‚widgety‘. Jejich umístění ve formulářích, což jsou vlastně aplikační okna, se rozvrhuje do sestav. Tyto sestavy se nazývají ‚layouty‘ a určují kromě umístění prvků také to, jak se budou prvky chovat při změně velikosti okna. Hlavní okno
Obr. 5.1 - první mód hlavního okna
Hlavní okno programu MainFrame je potomkem třídy QMainWindow, což je v Qt základní stavební prvek pro větší GUI aplikace. Opětovnou implementací této třídy lze kontrolovat chování a funkčnost všech prvků v okně. V hlavním okně jsou prvky rozmístěny podobně jako v předchozím programu (viz Obr. 2.2 a Obr. 5.1). Třída QMainWindow umožňuje rozmístit v okně horní menu, které zajišťuje třída
Popis implementace
35
QMenuBar. Dále obsahuje vespod stavový řádek QStatusBar, pro zobrazování
stavových hlášení. Prostřední část hlavního okna je určena pro layout neboli rozvržené umístění dalších prvků v okně. Nalevo je třída QTabWidget obsahující záložky a napravo QGroupBox nazvaný ‚Stopky‘. Podrobnější obsah těchto centrálních widgetů si popíšeme níže. Okno má dva módy zobrazení. První mód zobrazení ukazuje Obr. 5.1. Jde o správu závodníků a ‚Stopky‘, které představují měřící část. Druhý mód ilustruje Obr. 5.2. Rozšíření okna je patrné na pravé části, kde se zobrazují náhledy fotografií pořízené v konkrétním čase. Náhledy jsou umístěny ve widgetu PhotoView, který je potomkem QGraphicsView.
Obr. 5.2 - druhý mód hlavního okna
QTabWidget obsahuje tři záložky – ‚Závodníci‘, ‚Výsledky‘ a ‚Statistiky‘. Každá
záložka obsahuje vlastní layout pro rozmístění grafických prvků. Záložka ‚Závodníci‘ je vidět na Obr. 5.1 a Obr. 5.2. Je na ní skupina tlačítek QPushButton pro správu závodníků sdružených do skupinového boxu QGroupBox. Vedle tlačítek je modul hledání závodníků (další QGroupBox), který obsahuje obrázek a text v prvku QLabel, výběrový prvek QComboBox, vstupní QLineEdit a resetovací tlačítko QPushButton. Pod QGroupBoxy je nejpatrnější část – tabulka se závodníky
36
Program pro závodní časomíru
TableView, která je potomkem
QTableView. Proč tabulka dědí widget
QTableView si popíšeme v části 5.2.
Obr. 5.3 - záložka Výsledky
Další záložka ‚Výsledky‘ obsahuje prvky pro filtrování závodníků na výsledkové listině ve widgetu QGroupBox nazvaném ‚Nastavení zobrazení‘ (viz Obr. 5.3). Skupinu tvoří popisující textové prvky QLabel, filtrovací prvky QComboBox, zaškrtávací prvek QCheckBox a akční tlačítka QPushButton. Tlačítko ‚Export‘ vyvolá dialog pro export výsledků do souboru HTML. Tabulka pod skupinovým boxem QTableView zobrazí výsledkovou listinu podle filtru.
Obr. 5.4 – záložka Statistiky
Poslední záložka ‚Statistiky‘ zobrazuje aktuální statistiky ze závodu. První tabulka třídy QTableView ukazuje pořadí závodníků všech obcí podle počtu závodníků za
Popis implementace
37
obec, další tabulka QTableView zobrazuje pořadí podle nejstaršího závodníka a napravo je QGroupBox zobrazující celkové statistiky v prvcích QLabel. Vkládání závodníka Formulář pro vkládání účastníků NewDialog, který je potomkem standardní třídy QDialog, je také koncipován tak, aby při vkládání nového účastníka neměl
pořadatel problém s adaptací na novou verzi programu a zadávání bylo co nejrychlejší. Formulář je z tohoto důvodu skoro identický s formulářem z původního programu (viz Obr. 2.2 a Obr. 5.5). Jeho vyvolání se provede tlačítkem ‚Nový‘ v hlavním okně. Okno obsahuje prvky v layoutu typu QGridLayout, který je rozmístí do pomyslné mřížky. V layoutu jsou prvky QLabel a QLineEdit se speciálními funkcemi, které si popíšeme v kapitole 5.2. Dialog se potvrzuje nebo ruší tlačítky v QButtonBox.
Obr. 5.5 - vkládání závodníka
Úprava závodníka Jelikož jsou upravované údaje závodníka shodné s údaji vkládanými, je i formulář pro jejich úpravu identický s formulářem vkládání NewDialog (viz Obr. 5.5). Jeho vyvolání se provede a) výběrem řádku v seznamu závodníků a kliknutím na tlačítko ‚Uprav‘ (viz Obr. 5.1) b) výběrem
řádku
pravým
tlačítkem
vyvolaném kontextovém menu (viz Obr 5.6)
a
volbou
‚Upravit‘
ve
38
Program pro závodní časomíru
Obr. 5.6 – kontextové menu v tabulce závodníků
c) poklikáním na řádek Export výsledků Pro export výsledků byl vytvořen dialog ExportDialog dědící z třídy QDialog (viz Obr. 5.7). Vyvolání je možné tlačítkem ‚Export‘ v záložce ‚Výsledky‘ v hlavním okně. Účelem dialogu je nastavit parametry pro generování výsledkové listiny do HTML. Obsahuje pouze popisující QLabely, editační pole QLineEdit, zaškrtávací QCheckBox a potvrzovací tlačítka QButtonBox.
Obr. 5.7 – export výsledků
Přiřazení času závodníkovi Tento dialog třídy AssignDialog opět dědící QDialog je určen pro přiřazení dojezdového času závodníkovi podle jeho startovního čísla, které je nutné vyčíst z náhledu fotografie. Dialog se vyvolá dvojitým kliknutím na cílový čas v seznamu dojezdových časů. Obsahuje prvky textů QLabel a editační pole QLineEdit se speciálními funkcemi, které si popíšeme v kapitole 5.2. Jednoduchý formulář přiřazení času je vidět na Obr. 5.8.
Popis implementace
39
Obr. 5.8 – přiřazení času závodníkovi
Nastavení fotoaparátu V dialogovém okně CameraDialog, které je též potomkem QDialog, je obsaženo základní nastavení fotoaparátu pro dokumentaci cílové čáry (viz Obr. 5.9).
Obr. 5.9 – nastavení fotoaparátu
Zobrazení fotografie Třída PhotoPopup, která dědí z třídy QWidget, zobrazuje fotografii v maximální velikosti, na kterou klikne pořadatel v náhledech. Slouží k podrobnému prozkoumání fotografie a zjištění startovního čísla závodníka. Zobrazení fotografie je koncipováno tak, aby nepřekážela v práci a proto lze zrušit jakoukoli klávesou nebo tlačítkem myši. Její zobrazení je maximální až po rozměry hlavního okna. Okno s fotografií a jejími náhledy v hlavním okně ukazuje Obr. 5.10.
40
Program pro závodní časomíru
Obr. 5.10 – okno fotografie a náhledy v hlavním okně
5.2.
Třídy
Program je složen z několika tříd zajišťujících funkčnost formulářů. Kompletní diagram tříd je na Obr. 5.13. MainFrame Třída hlavního okna, která dědí od dvou rodičovských tříd – QMainWindow a Ui::MainFrame [18]. Několikanásobné dědění je zde potřeba kvůli formulářům
navrženým v Qt Designeru. Ten ukládá navržené formuláře do XML souboru mainframe.ui a speciální nástroj UIC (user interface compiler) je převede na hlavičkový C++ soubor, v tomto případě ui_mainframe.h. Díky dědění lze formulář upravovat v Qt Designeru, generovat zdrojový kód Ui::MainFrame opakovaně a funkčnost zůstane zachována. MainFrame zajišťuje funkčnost všem grafickým prvkům hlavního okna, takže obsahuje hlavně sloty a v konstruktoru inicializuje napojení na databázi. Připojení zobrazovacího
widgetu
TableView
k
databázi
probíhá
přes
model
QSqlRelationalTableModel (ať žije Java ), který je nadstavbou databázových
tabulek a umožňuje data v tabulce řadit, filtrovat a spravovat. Hledání v seznamu účastníků je aktivováno pomocí signálů prvků QComboBox a QLineEdit (viz
Popis implementace kapitola
5.1
–
Hlavní
okno)
a
hledá
v tabulce
závodníků
přes
41 filtr
QSortFilterProxyModel, který je napojen na QSqlRelationalTableModel.
V třídě se také deklaruje funkčnost menu pomocí třídy QAction. Menu spouští metody pro načítání a ukládání databáze, připojení fotoaparátu, kontrolu spojitosti startovních čísel, dialog nastavení fotoaparátu a nápovědu. V menu je také obsažena položka ‚Spojit soubory‘, která spouští metodu na zkopírování tabulek z jedné databáze do druhé. Spravování položek v seznamu časů QListView je možné díky signálům clicked, doubleClicked a akci actionSmaz2, připojených ke slotům ovládajícím model
tabulky QSqlTableModel. Stopování času probíhá pomocí třídy QTime a jeho zobrazování v QLabel po každé vteřině. Obnovování textu v QLabel provádí časovač QTimer, který každou vteřinu spustí metodu repaintStopWatch.
Při odstartování časování zkontroluje
program, jestli je připojen fotoaparát a spuštěn podpůrný program DSLR Remote Pro, který fotoaparát ovládá. Pokud je vše v pořádku, spustí se pomocné vlákno CameraThread, které ovládá spoušť fotoaparátu a nezatěžuje hlavní vlákno
čekáním na ukončení komunikace s fotoaparátem. Tlačítko ‚Průjezd‘ přidá aktuální čas do seznamu dojezdových časů QListView spolu s oznámením vláknu CameraThread, že má vyfotit fotografii. Tato akce lze také spustit pomocí
klávesové zkratky F1. TableView Třída TableView je potomkem třídy QTableView a je reimplementovaná kvůli metodě contextMenuEvent, díky které lze vyvolat v tabulce závodníků kontextové menu. Menu obsahuje akce QAction pro vyvolání úpravy nebo smazání závodníka (viz Obr. 5.6). PhotoView Pomocí třídy PhotoView, která dědí po QGraphicsView, se zobrazují náhledy fotografií na pravé straně hlavního okna. PhotoView implementuje metodu mouseReleaseEvent, která zajišťuje zobrazení fotografie ve widgetu PhotoPopup
po kliknutí tlačítkem myši.
42
Program pro závodní časomíru
CameraThread Tato třída je pomocné vlákno dědící standardní Qt třídu QThread a inicializuje se při spuštění měření času tlačítkem ‚Start/Stop‘ (viz Obr. 5.1). Vlákno běží v nekonečné smyčce a je synchronizované s hlavním vláknem pomocí mutexu a podmíněné proměnné, které jsou deklarované jako globální proměnné. Ke spuštění funkce ReleaseShutter, která ovládá závěrku fotoaparátu, dojde v případě, že se odblokuje podmíněná proměnná takePicture. Pokud fotoaparát není připojen, vlákno se nespustí. Pozdější připojení po startu měření se dá zajistit akcí v menu ‚Připojit fotoaparát‘ a při prvním stopování času se spustí vlákno. NewDialog Okno NewDialog je potomkem formuláře Ui::NovyDialog a zajišťuje zpracování nových dat o závodnících. Signály vstupních polí QLineEdit jsou napojeny na sloty, které kontrolují správnost zadaných dat a doplňují neúplná zadání textů. Vzhled formuláře je patrný z Obr. 5.5. V poli ‚Příjmení a Jméno‘ se kontroluje podle příjmení, zda je závodník ženského pohlaví a automaticky se zvolí tato volba u QRadioButton ‚Pohlaví‘. Políčko ‚Ročník‘ je kontrolováno, jestli čísla pasují do rozsahu posledních 100 let a povolují vkládání zkrácené formy – například číslo ‚85‘ je upraveno na ‚1985‘ a čísla od roku 2000 do současnosti lze vkládat zkráceně také. Vkládání textu do pole ‚Obec‘ urychluje chytrá nápověda, která při psaní doplní název již existující obce v databázi závodníků. Doplňovací třída se jmenuje QCompleter a navazuje na tabulku obcí přes QSqlRelationalTableModel.
Poslední políčko ‚Dojezdový čas‘ je ve formuláři pro přímé vložení dojezdového času závodníka a má na sebe napojenou kontrolu správně zadaného času pomocí regulárního výrazu QRegExp: ^([0-9])[:,.]([0-9]{1,2})[:,.]([0-9]{1,2})$
Výraz připouští vložení času ve formátu 0:0:0 až 9:99:99 a místo dvojtečky lze vložit i tečku nebo čárku. Formátovací funkce v metodě checkTime zkontrolují rozsahy zadaných čísel a naformátují čas na jednotný formát typu 0:00:00.
Popis implementace
43
Při potvrzení dialogu se zkontroluje navíc unikátnost startovního čísla a data se uloží do databáze. Poté se ukáže nové prázdné okno kvůli urychlení vkládání závodníků. Třída je přizpůsobena i pro úpravy závodníků. AssignDialog Tato třída slouží k přiřazení dojezdového času závodníkovi a dědí z formuláře Ui::CasyDialog (viz Obr. 5.8). Při potvrzení dialogu kontroluje, zda existuje
zadané startovní číslo a jestli nalezený závodník nemá dojezdový čas přiřazený. Pokud se čas přiřadí, vymaže se ze seznamu dojezdových časů QListView v hlavním okně. CameraDialog Ve třídě CameraDialog se provádí nastavení fotoaparátu. Třída dědí formulář Ui::FotoDialog (viz Obr. 5.9). Dialog se spouští v menu hlavního programu pod
položkou ‚Nastavení fotoaparátu‘. Nastavení se ukládá do registrů operačního systému při ukončení programu a načítá se při jeho spouštění spolu s dalšími hodnotami jako je pozice a velikost okna a naposledy otevřený soubor. ExportDialog Export výsledkové listiny je zajišťován třídou ExportDialog dědící z formuláře Ui::ExportDialog (viz Obr. 5.7). Třída provede vyhodnocení pořadí závodníků
podle časů a vytvoří HTML soubor s titulkem podle pole ‚Název výsledkové listiny‘. Pokud je zaškrtnut QCheckBox ‚Zobrazit nezměřené závodníky‘, vypíší se do souboru i závodníci, kteří ještě nedojeli. PhotoPopup Okno PhotoPopup je potomkem třídy QWidget a má parametr windowFlag nastaven na Qt::Popup, který určuje vzhled okna. To neobsahuje standardní rám s tlačítkem zavřít. Třída implementuje reakce na události myši a kláves, které mají společné chování – zavřou okno s fotografií. Dalším úkolem třídy je zmenšit fotografii, pokud přesahuje velikost hlavního okna a umístit ji do obdélníka s hlavním oknem, aby ho nikde nepřesahovala.
44
5.3.
Program pro závodní časomíru
Use case diagram uc Záv odní časomíra
v ložit záv odníka
uprav it záv odníka
smazat záv odníka
zkontrolov at start. čísla
Pořadatel
spoj it soubory
spustit čas
přidat doj ezd. čas
přiřadit čas
Obr. 5.11- Use case diagram
V Use case diagramu na Obr. 5.11 je stručně zobrazeno, co všechno může pořadatel s programem dělat a čeho se snaží výše uvedené třídy dosáhnout.
Popis implementace
5.4.
45
Schéma databáze
class databáze
zav odnici
casy «column» *PK id casy = 0:00:00 «PK» + PK_casy()
«column» *PK id name mistoid pohlavi cas rok poradi poradint
mista «column» *PK id {mistoid=id} misto pocet 1..* 1 mporadi «PK» + PK_mista()
«PK» + PK_zavodnici()
«view» mistav iew «column» + mporadi + misto + pocet
«view» seniori «column» + id {ordered} + poradi + name + misto + vek + pohlavi «PK» + PK_seniori()
«view» v ysledky «column» + poradi + cislo {ordered} + name + pohlavi + misto + cas + poradint «PK» + PK_vysledky()
Obr. 5.12 - schéma databáze programu
Databáze obsahuje 3 tabulky s daty a 3 pohledy pro zobrazení výsledkové listiny a statistik. SQLite nepodporuje cizí klíče a nedokáže upravovat data v pohledech, což nejsou nijak výrazná funkční omezení, ale SQLite tak nesplňuje poslední SQL standard [14]. Ze schéma na Obr. 5.12 vyplývá, že je databáze velice jednoduchá.
46
5.5.
Program pro závodní časomíru
Schéma tříd programu
class Záv odní časomíra QTableView
+tableView_zavodnici
TableView
Ui::MainFrame +boxFotky
QGraphicsView
-popup
QWidget PhotoPopup
PhotoView
QDialog QMainWindow
AssignDialog
Ui::CasyDialog
MainFrame -camera QDialog Ui::Nov yDialog
New Dialog
QThread CameraThread
QDialog CameraDialog
QDialog
Ui::FotoDialog
Ui::ExportDialog
ExportDialog
Obr. Chyba! Pomocí karty Domů použijte uObr. textu,5.13 který- třídní se má zde zobrazit, styl 0..1 schéma programu
Třídy popsané v kapitole 5.2 jsou na Obr. 5.13 zobrazeny ve schématu, které jasně ukazuje metodu vícenásobného dědění. Třída dědící předpřipravený formulář, například MainFrame, dědí nejen zmíněný formulář (UI:MainFrame) ale i standardní zobrazovací widget, kterého je formulář nadstavbou – QMainWindow. Dále diagram demonstruje vkládání upravených prvků (například TableView) do navrženého formuláře (UI:MainFrame) v Qt Designeru. V terminologii Qt se tomuto způsobu říká „povýšení“ (anglicky „promotion“) standardní třídy (QTableView).
Testování
6.
Testování
6.1.
Stabilita programu
47
Program byl testován z hlediska stability jak při samotném vývoji, tak v testovací fázi, kdy měřil čas přes 4 hodiny, byl naplněn zkušebními daty a byly zaznamenány dojezdové časy spolu s fotografiemi. Poté byly časy přiřazeny závodníkům. Vše proběhlo bez jakékoli chyby. Případná chybová hlášení jsou ošetřena tak, aby program zůstal stabilní.
6.2.
Propustnost časomíry
Propustností časomíry se myslí maximální možný počet průjezdů cílovou čárou za vteřinu. Hodnota závisí pouze na hbitosti prstu pořadatele na klávese F1 nebo na tlačítku myši při klikání na tlačítko ‚Průjezd‘. Měření proběhlo 5x a průměrný počet zmáčknutí klávesou byl 7 za vteřinu a myší také 7 za vteřinu.
6.3.
Zpoždění fotoaparátu
Měření zpoždění fotoaparátu proběhlo vyfocením klasických stopek tlačítkem ‚Průjezd‘ současně se zmáčknutím stopek. Po 5ti měřeních bylo zjištěno maximální zpoždění spouště fotoaparátu 0,4 vteřiny. Závěrka fotoaparátu se otevírala současně se zmáčknutím tlačítka, takže zpoždění 0,4 vteřiny je spíše chyba metody.
6.4.
Propustnost fotoaparátu
Originální program k fotoaparátu zvládne pořídit 1,4 fotografie za sekundu, program DSL Remote Pro nezvládá bohužel takhle rychlou odezvu a vyfotografuje jen jednu fotografii za 1,5 vteřiny, což je poloviční rychlost. Na tomto programu závisí rychlost snímání časomíry.
48
7.
Program pro závodní časomíru
Závěr
Pro vývoj programu splňujícího veškeré požadavky na bezproblémové použití při cyklistických závodech bylo s ohledem na parametry využito prostředků programovacího jazyka C++ a frameworku Qt. Vývoj programu probíhal v prostředí NetBeans. Povedlo se implementovat všechny požadavky kladené na program a vytvořit tak závodní časomíru se správou závodníků a jejich výsledků. Testování podle kritérií odpovídajícím reálnému provozu, tedy test stability, propustnosti časomíry, zpoždění a propustnosti fotoaparátu, proběhlo v pořádku a výsledkem bylo to, že nejhorším parametrem se stala propustnost fotoaparátu. Šlo ale bohužel o nedostatečně kvalitní ovládání fotoaparátu přes externí knihovnu komerčního programu DSLR Remote Pro, který fotoaparát ovládal. Testování programu v reálném provozu se bohužel vzhledem k termínu cyklistického závodu Lišanská Šlapka nepovedlo uskutečnit. Věřím ale v jeho nasazení během příštích ročníků tohoto závodu. Byla vytvořena uživatelská dokumentace, kterou obsahuje nápověda programu, sloužící jako plnohodnotná podpora i pro nezaškoleného uživatele. Vzhledem k univerzálnosti požadavků kladených na program může tento najít uplatnění nejen v cyklistickém závodě, ale i jiných závodech s hromadným startem. Zmíněná nedostatečná rychlost snímání pomocí externí knihovny a programu DSLR Remote Pro ponouká k dalšímu vývoji programu a optimalizaci komunikace s fotoaparátem například pomocí vlastní knihovny. Jinou možností je integrovat do programu podporu pro dnes stále více používané RFID čipy, čímž by se ale rapidně zvedly náklady vzhledem k velkému množství potřebných čipů.
Přílohy
8.
49
Přílohy
Použité zdroje ....................................................................................................................... 51 Slovník zkratek .................................................................................................................... 53 Uživatelská příručka .......................................................................................................... 55 Obsah CD................................................................................................................................. 57
50
Program pro závodní časomíru
Přílohy
51
Použité zdroje [1]
Lišanská šlapka, Marek Kočí, [online], [c 2007], [cit 2008-6-4], URL
[2]
H & H Servis, David Hejral, [online], [c 2005], [cit 2008-6-5], URL
[3]
Sportis & SportisChip, Sportis.cz, [online], [c 2008], [cit 2008-6-5], URL
[4]
Sport-časomíra.cz, , [online], [c 2007?], [cit 2008-6-5], URL
[5]
Danutiming, Roman Kajer, Tomáš Peslar, [online], [c 2008], [cit 20086-5], URL
[6]
TAG Heuer , [online], [c 2008], [cit 2008-6-5], URL
[7]
SportSoft , [online], [c 2006], [cit 2008-6-5], URL
[8]
Tissot, Wikipedia – the free encyclopedia, [online], [akt 2008-5-26], [cit 2008-6-5], URL
[9]
ALGE Timing, Sports - Road Cycling Races, [online], [akt 2007-12-21], [cit 2008-6-5], URL
[10]
RunScore, Alan Jones, [online], [akt 2008-4-4], [cit 2008-6-5], URL
[11]
Race Wizard, Peter J. Chernis, [online], [akt 2007-7-22], [cit 2008-6-5], URL < http://www.racewizard.bizland.com/>
[12]
.NET Framework - Wikipedia, the free encyclopedia, [online], [akt 2008-6-5], [cit 2008-6-5], URL
52 [13]
Program pro závodní časomíru Qt - Wikipedia, the free encyclopedia, [online], [akt 2008-5-31], [cit 2008-6-5], URL
[14]
SQLite - Wikipedia, the free encyclopedia, [online], [akt 2008-6-5], [cit 2008-6-5], URL
[15]
ABZ.cz: slovník cizích slov - on-line hledání, Radek Kučera a dcera [online], [c 2006], [cit 2008-6-5], URL < http://slovnik-cizichslov.abz.cz/>
[16]
Qt v4.3.4 + NetBeans IDE 6.0.1 + Windows, [online], [akt 2008-5-4], [cit 2008-6-6], URL < http://www.qtforum.org/post/87197/qt-v4-34-netbeans-ide-6-0-1-windows.html#post87197>
[17]
Qt Manual, Signals and Slots, [online], [c 2005], [cit 2008-6-8], URL
[18]
Qt Manual, Multiple inheritance example, [online], [c 2008], [cit 20086-8], URL
[19]
Dpreview, Canon EOS 40D Review, Phil Askey, [online], [2007-10], [cit 2008-6-8], URL
[20]
DSLR Remote Pro, Breeze Sys, [online], [c 2008], [cit 2008-6-8], URL
Přílohy
53
Slovník zkratek HTML HyperText Markup Language RFID Radio Frequency IDentification SQL Structured Query Language ISO značka citlivosti média ve fotografii STL Standard Template Library MSDNAA Microsoft Developer Network Academic Alliance VB.NET, ASP.NET, C#, J# programovací jazyky pro platform .NET .NET softwarová platforma Mpx Megapixels MySQL, PostgreSQL, Firebird, SQLite Konkrétní implementace relačních databází GUI Graphical User Interface Qt platformově nezávislý aplikační framework HTTP HyperText Transfer Protocol PHP Hypertext Preprocessor C++ Programovací jazyk, následovník C JRE Java Runtime Environment MOC Meta Object Compiler Open source Otevřený zdrojový kód programu OS Windows Operační Systém Windows
54
Program pro závodní časomíru
Přílohy
55
Uživatelská příručka Instalace programu Program se instaluje pouhým rozbalením archivu ZIP nebo překopírováním adresáře se soubory kamkoli do počítače. Pro běh programu jsou vyžadovány tyto soubory: imageformats\qjpeg4.dll sqldrivers\qsqlite4.dll casomira.exe DSLRRemoteLib.dll mingwm10.dll napoveda.html QtCore4.dll QtGui4.dll QtSql4.dll Pro spolupráci s digitální zrcadlovkou Canon je vyžadován program DSLR Remote Pro, stažitelný na www.breezesys.com - zdarma pouze jako 15ti denní trial verze. Správa závodníků Vkládání závodníků se provádí tlačítkem Nový na záložce Závodníci. Je třeba vyplnit všechny údaje kromě času. Formulář kontroluje chybně zadané hodnoty u polí Rok, Čas a Startovní číslo. Umí doplňovat pohlaví podle detekce ženského příjmení. Rok účastníka lze vložit i jako číslo od 0 do 100. Akceptován je závodník maximálně 100let starý, ne že bych chtěl diskriminovat seniory, ale je pravděpodobnější že zadaný ročník je chybný, než že by závodil člověk starší 100 let :-) číslo účastníka je kontrolováno na duplicity. Dojezdový čas lze vkládat jen ve formátu 0:00:00 nebo rozsahu 0:0:0 až 9:59:59, pro urychlení zadávání lze místo dvojtečky použít tečka a čárka. Úprava závodníka probíhá vybráním závodníka a tlačítkem Uprav nebo jednoduše poklikáním, nebo pravým tlačítkem na závodníkovi. Formulář pro úpravu je identický. Mazání závodníka se provádí vybráním závodníka a tlačítkem Smaž nebo klávesou Delete.
56
Program pro závodní časomíru
Kontrola, zda nechybí nějaké startovní číslo v databázi, se provede v menu Úprava -> Zkontrolovat čísla. Připojení fotoaparátu Digitální zrcadlovka musí již mít v počítači nainstalované ovladače z dodávaného CD.
Před
měřením
je
třeba
spustit
program
DSLR
Remote
Pro
(www.breezesys.com). Potom je potřeba připojit fotoaparát pomocí USB a načíst jej v DSLR Remote Pro. Pokud již běží čas v programu, musí se fotoaparát připojit volbou v menu Úprava -> Připojit fotoaparát, jinak nebude fotit při stopování. Měření času Měření se spustí a ukončí tlačítkem Start/Stop. Při průjezdech se mačká tlačítko Průjezd nebo klávesa F1. Pokud je připojen fotoaparát správně, fotí snímky s maximální rychlostí cca 0,7 snímku/s. Zkoušku fotoaparátu je dobré provést nanečisto ještě před začátkem měření. Pokud není k dispozici fotoaparát, musí se zaznamenávat čísla k časům ručně. Přidělování časů Přidělování časů probíhá podle startovních čísel a to dvojklikem na stopnutý čas v seznamu časů. Vpravo se zobrazují náhledy fotek (pokud existují) k danému času, ze kterých je potřeba zjistit startovní číslo. Náhledy lze zvětšit kliknutím na ně. Čas lze smazat výběrem a klávesou Delete. Generování výsledků Výsledky je třeba vygenerovat v záložce Výsledky tlačítkem Zobrazit a vybráním příslušných kritérií. Export celkových výsledků probíhá do souboru HTML, který se pak zobrazí v internetovém prohlížeči, kde lze také vytisknout.
Přílohy
57
Obsah CD CD obsahuje následující adresářovou strukturu: text – tento text v několika formátech program
– spustitelná verze programu i s uživatelskou příručkou v HTML
souboru. Pro spuštění programu je třeba překopírovat adresář na zapisovatelný disk, kvůli zapisování do souboru databáze src – zdrojové kódy programu (díky projektovému souboru *.pro se kompilují
příkazy qmake a následně make) support – program DSLR Remote Pro