Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Bakal´ aˇ rsk´ a pr´ ace Statistiky ˇ casu z kalend´ aˇ rov´ ych dat
Plzeˇ n, 2014
Tom´aˇs Kr´asn´ y
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem bakal´aˇrskou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni, dne 6. kvˇetna 2014 Tom´aˇs Kr´asn´ y
Podˇ ekov´ an´ı Dˇekuji doc. Ing. Pˇremyslu Bradovi, MSc. Ph.D., za odborn´e veden´ı m´e bakal´aˇrsk´e pr´ace a za cenn´e rady, kter´e mi pomohly tuto pr´aci vytvoˇrit. V Plzni, dne 6. kvˇetna 2014 Tom´aˇs Kr´asn´ y
Abstract This work is based on calendar data which almost everyone uses every day. People can keep time records in many ways, more and more in online calendars. We can use calendars for saving events, tasks, alarms etc. After filling up calendar with events or data, various time statistics can be calculated. We can obtain total time of events from previous month or specific events representing for instance business meetings. The aim of this bachelor thesis is processing calendar data. The final goal is to create a tool for generating specific time statistics from events entered in online calendars and then display the results to user. This tool has various options the user can set, e.g. granularity (per days, per weeks, ...), an output unit (minutes, hours, ...) or keywords which can separate important events from others only by a keyword in its subject. The final data are recorded in table and consequently saved in HTML file or Excel workbook. This tool is implemented in Java language using various libraries. The functionality is verified on real-world Google calendars.
Abstract Tato pr´ace je zaloˇzena na zpracov´an´ı kalend´aˇrov´ ych dat, kter´a jsou dnes velmi hojnˇe vyuˇz´ıv´ana. Lid´e si mohou v´est ˇcasov´e z´aznamy v´ıce zp˚ usoby, z nichˇz jedn´ım jsou online kalend´aˇre. Po naplnˇen´ı kalend´aˇre ud´alostmi je moˇzn´e vypoˇc´ıt´avat urˇcit´e ˇcasov´e statistiky; lze napˇr´ıklad z´ıskat celkov´ y ˇcas trv´an´ı ud´alost´ı v minul´em mˇes´ıci nebo trv´an´ı konkr´etn´ıch ud´alost´ı, jak´ ymi mohou b´ yt napˇr´ıklad firemn´ı sch˚ uzky. Hlavn´ım c´ılem t´eto bakal´aˇrsk´e pr´ace je vytvoˇren´ı n´astroje pro generov´an´ı ˇcasov´ ych statistik z ud´alost´ı v online kalend´aˇr´ıch a n´asledn´e zobrazen´ı tˇechto statistik uˇzivateli. Uˇzivatel m´a k dispozici mnoho moˇznost´ı nastaven´ı aplikace. Pˇr´ıkladem m˚ uˇze b´ yt granularita (po dnech, po t´ ydnech apod.), jednotky v´ ystupu (minuty, hodiny, ...) nebo kl´ıˇcov´a slova, kter´a mohou oddˇelit d˚ uleˇzit´e ud´alosti od ostatn´ıch. V´ ysledky jsou pot´e zobrazeny v tabulce a uloˇzeny ve form´atu HTML nebo v seˇsitu aplikace Microsoft Excel. Aplikace je implementov´ana v programovac´ım jazyce Java, pro samotn´ y v´ yvoj byly pouˇzity dalˇs´ı extern´ı knihovny. Funkˇcnost je ovˇeˇrena na skuteˇcn´ ych kalend´aˇr´ıch.
Obsah ´ 1 Uvod 1.1 C´ıle pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Vyuˇzit´ı v praxi . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Struktura pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 2 3
2 V´ ykazy ˇ casu a time management 2.1 Proˇc vykazovat ˇcas . . . . . . . 2.2 Existuj´ıc´ı n´astroje . . . . . . . . 2.3 Time management . . . . . . . 2.3.1 Pravidla . . . . . . . . . 2.3.2 Kategorizace . . . . . . 2.3.3 Priority . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
5 5 5 6 6 7 7
3 Online kalend´ aˇ re a jejich data 3.1 Kalend´aˇr . . . . . . . . . . . . 3.1.1 Vyuˇzit´ı . . . . . . . . . 3.1.2 V´ yhody a nev´ yhody . 3.2 Form´at iCalendar . . . . . . . 3.2.1 Historie . . . . . . . . 3.2.2 Popis souboru . . . . . 3.2.3 Struktura . . . . . . . 3.2.4 Komponenty . . . . . 3.2.5 Vyuˇzit´ı a pouˇzit´ı . . . 3.2.6 Knihovny . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
10 10 10 11 13 14 14 15 15 21 22
. . . . . . . . . .
4 Zad´ an´ı 23 ´ 4.1 Uˇcel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.2 Funkˇcnosti aplikace . . . . . . . . . . . . . . . . . . . . . . . . 23 5 Implementace 26 5.1 Architektura aplikace . . . . . . . . . . . . . . . . . . . . . . . 26
5.2
. . . . . . . . . . . . . .
26 26 28 29 29 33 35 36 37 38 38 39 40 41
. . . . .
43 43 43 44 44 46
7 Z´ avˇ er 7.1 Zhodnocen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Moˇzn´a rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Uˇzivatelsk´a dokumentace . . . . . . . . . . . . . . . . . . . . .
49 49 50 51
5.3
5.4
5.5
5.6
Popis architektury . . . . . . . . . 5.2.1 Technologie . . . . . . . . . 5.2.2 Pr˚ uchod architekturou . . . Zpracov´an´ı dat . . . . . . . . . . . 5.3.1 Ud´alosti . . . . . . . . . . . 5.3.2 Kl´ıˇcov´a slova . . . . . . . . Generov´an´ı v´ ystupu . . . . . . . . . 5.4.1 Poˇc´ıt´an´ı souˇct˚ u . . . . . . . 5.4.2 V´ ystupn´ı form´aty . . . . . . Uˇzivatelsk´e rozhran´ı . . . . . . . . 5.5.1 Modely a renderery . . . . . 5.5.2 Integrace s aplikaˇcn´ı vrstvou 5.5.3 Vyuˇzit´ı ud´alost´ı . . . . . . . V´ ysledn´a podoba aplikace . . . . .
6 Ovˇ eˇ ren´ı aplikace 6.1 Ovˇeˇren´ı hlavn´ıch modul˚ u. . . . . 6.1.1 Ovˇeˇren´ı naˇc´ıt´an´ı dat . . . 6.1.2 Ovˇeˇren´ı statistik a exportu 6.2 Testy dob bˇehu . . . . . . . . . . 6.3 Uk´azka v´ ystupu . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . .
. . . . .
´ 1 Uvod Kaˇzd´ y uˇz urˇcitˇe byl nˇekdy ve stavu, kdy musel v hlavˇe nosit spoustu d˚ uleˇzit´ ych informac´ı, u ´kol˚ u, pˇripom´ınek, vˇetˇsinou ve spojen´ı s nˇejak´ ym datem nebo s nˇejakou akc´ı, napˇr. sch˚ uzkou, poradou nebo u ´kolem. D´ıky tomu se velmi snadno m˚ uˇze st´at, ˇze se na nˇejakou takovouto ud´alost prostˇe zapomene. A aby se takov´eto situace omezily co moˇzn´a nejv´ıce, vznikly zp˚ usoby, jak si tyto informace, sch˚ uzky, srazy, u ´koly nebo ˇcistˇe jen pozn´amky zaznamen´avat. A jedn´ım z tˇechto zp˚ usob˚ u je pouˇzit´ı kalend´aˇrov´ ych dat. Kalend´aˇrov´a data n´am umoˇzn ˇuj´ı pl´anovat si sv˚ uj vlastn´ı ˇcas tak, abychom mˇeli vˇzdy pˇrehled o tom, co n´as dnes, za t´ yden nebo za mˇes´ıc ˇcek´a. Takov´ ym ud´alostem lze nastavit pˇripomenut´ı v urˇcit´ y ˇcas, abychom na nˇejakou z nich nezapomnˇeli. Tyto informace jsou uloˇzen´e v kalend´aˇri, kter´ y je reprezentov´an nˇejak´ ym standardem. Nejpouˇz´ıvanˇejˇs´ı standard je form´at iCalendar (zkr´acenˇe iCal ). Do tohoto kalend´aˇre lze ukl´adat urˇcit´a data souvisej´ıc´ı s ˇcasem. Tˇemi m˚ uˇze b´ yt napˇr. ud´alost, u ´kol, alarm atd. Nen´ı tedy divu, ˇze jsou v dneˇsn´ı dobˇe kalend´aˇrov´a data velmi rozˇs´ıˇrena a vyuˇz´ıv´ana.
1.1
C´ıle pr´ ace
Vu ´vodu byla zm´ınˇena kalend´aˇrov´a data a jejich vyuˇzit´ı k usnadnˇen´ı pr´ace s ˇcasem a ˇcasov´ ymi u ´daji. Prvn´ım u ´kolem bude prozkoumat form´aty uloˇzen´ı tˇechto dat, jak´e moˇznosti tato kalend´aˇrov´a data nab´ızej´ı a jak´ y se skr´ yv´a potenci´al v jejich zpracov´an´ı. S t´ım souvis´ı v´ yzkum, jak v˚ ubec tato data zpracov´avat a jak´e (jestli nˇejak´e) n´astroje jiˇz existuj´ı. Pokud nˇejak´e existuj´ı a poskytuj´ı nˇejak´e v´ ysledky a v´ ystupy, bylo by vhodn´e prov´est jejich anal´ yzu za u ´ˇcelem z´ısk´an´ı pˇredstavy napˇr´ıklad o lepˇs´ım vyuˇzit´ı vynaloˇzen´eho ˇcasu. Aby tento ˇcas byl vyuˇzit co nejefektivnˇeji, budou prozkoum´any moˇznosti, jak toho doc´ılit. Tato pr´ace je d´ale orientovan´a na ˇcasov´e u ´daje z pohledu vykazov´an´ı str´aven´eho ˇcasu. Budou prozkoum´any existuj´ıc´ı n´astroje, jak ˇcas evidovat a vykazovat, jak´e jsou jejich v´ ystupy a k ˇcemu je vykazov´an´ı spotˇrebovan´eho ˇcasu v˚ ubec vhodn´e. Praktick´ ym c´ılem je navrhnout a vytvoˇrit n´astroj, kter´ y bude umˇet zmi1
´ Uvod
Vyuˇzit´ı v praxi
n ˇovan´a kalend´aˇrov´a data zpracovat. Aplikace bude umˇet navrˇzen´ ym zp˚ usobem vypoˇc´ıt´avat souhrnn´e statistick´e informace slouˇz´ıc´ı jako podklad pro ˇcasov´e v´ ykazy pr´ace. Jelikoˇz zdrojem tˇechto informac´ı jsou kalend´aˇrov´a data obecnˇe, je nutn´e prozkoumat moˇznosti, jak tyto u ´daje t´ ykaj´ıc´ı se v´ ykaz˚ u oddˇelit od ostatn´ıch u ´daj˚ u, kter´e se mohou v kalend´aˇri vyskytovat, ale s v´ ykazy nesouvis´ı. V´ ysledn´a aplikace bude otestov´ana na netrivi´aln´ıch datech a bude ovˇeˇrena spr´avnost vypoˇcten´ ych u ´daj˚ u.
1.2
Vyuˇ zit´ı v praxi
Aplikace m˚ uˇze m´ıt v re´aln´em pouˇz´ıv´an´ı hned nˇekolik zp˚ usob˚ u vyuˇzit´ı, mezi ty hlavn´ı lze zaˇradit napˇr´ıklad • vykazov´an´ı pr´ace, • sumarizace trv´an´ı (urˇcit´ ych) ud´alost´ı, • sledov´an´ı spotˇrebovan´eho ˇcasu na projektu, • pˇrehled o osobn´ım ˇcasov´em vyt´ıˇzen´ı. Vykazov´ an´ı ˇ casu Vykazov´an´ı ˇcasu neboli evidence odpracovan´e doby, at’ uˇz pro zamˇestnavatele nebo za jin´ ym u ´ˇcelem, je velmi podstatn´a z´aleˇzitost. Zamˇestnavatel si na z´akladˇe tˇechto v´ ykaz˚ u m˚ uˇze kontrolovat odpracovanou dobu sv´ ych zamˇestnanc˚ u nebo prov´adˇet napˇr´ıklad mˇes´ıˇcn´ı zpracov´an´ı v´ yplat. Jelikoˇz si uˇzivatel m˚ uˇze v´est jeden kalend´aˇr pro zaznamen´av´an´ı vˇsech ud´alost´ı, je nutn´e nˇejak oddˇelit ud´alosti, kter´e spolu maj´ı nˇeco spoleˇcn´eho - tento u ´kol se naz´ yv´a kategorizace. N´aslednˇe lze ze statistik zjistit, jak dlouho se uˇzivatel vˇenoval urˇcit´ ym ud´alostem. K tomuto vykazov´an´ı ˇcasu lze jeˇstˇe podotknout, ˇze nen´ı potˇreba ˇza´dn´eho speci´aln´ıho softwaru pro vykazov´an´ı spotˇrebovan´eho ˇcasu. Pr´ace s kalend´aˇrem je velmi snadn´a a dostupn´a a vloˇzen´ı nov´e ud´alosti je velmi rychlou z´aleˇzitost´ı.
2
´ Uvod
Struktura pr´ace
Sumarizace trv´ an´ı ud´ alost´ı Pˇri pohledu na nˇejak´e ˇcasov´e obdob´ı nen´ı trv´an´ı jednotliv´e ud´alosti pˇriliˇs hodnotn´a informace. Mnohem hodnotnˇejˇs´ı informac´ı je souˇcet trv´an´ı vˇsech ud´alost´ı ˇci nˇejak´e podmnoˇziny. Jelikoˇz z prvn´ıho pohledu na ud´alost v nˇejak´e kalend´aˇrov´e aplikaci nen´ı vˇzdy zˇrejm´e, jak dlouho ud´alost trvala (natoˇz kdyˇz je potˇreba ud´alosti spojovat do nˇejak´eho urˇcit´eho ˇcasov´eho obdob´ı), je nutn´e trv´an´ı tˇechto ud´alost´ı nˇejak sumarizovat. D´ıky t´eto sumarizaci lze z´ıskat nad zvolen´ ym obdob´ım pˇrehled o celkov´em trv´an´ı. Sledov´ an´ı spotˇ rebovan´ eho ˇ casu na projektu Toto vyuˇzit´ı lze sp´ıˇse ch´apat jako konkr´etn´ı pˇr´ıpad pˇredchoz´ıho odstavce. Spotˇrebovan´ y ˇcas na nˇejak´em projektu ˇci zak´azce je velmi d˚ uleˇzitou informac´ı pro projektov´ y management ve firmˇe. D´ıky tomu m´a veden´ı pˇrehled o v´ yvoji projektu z pohledu spotˇrebovan´eho ˇcasu, at’ uˇz za jednotlivce ˇci za cel´ y v´ yvoj´aˇrsk´ y t´ ym, a m˚ uˇze podniknout urˇcit´e kroky ˇci opatˇren´ı k jeho redukci (samozˇrejmˇe s ohledem na kvalitu produktu). Osobn´ı ˇ casov´ e vyt´ıˇ zen´ı V´ ystup aplikace nemus´ı b´ yt pouˇzit konkr´etnˇe k vykazov´an´ı ˇcasu nebo jin´ ym pracovn´ım u ´ˇcel˚ um. Se statistikami lze sledovat i osobn´ı ˇcasov´e vyt´ıˇzen´ı. Napˇr´ıklad po vygenerov´an´ı jednotliv´ ych v´ ystup˚ u za posledn´ı tˇri mˇes´ıce m˚ uˇze uˇzivatel jejich srovn´an´ım zjistit, ˇze v minul´em mˇes´ıci se jeho voln´ y ˇcas oproti pˇredeˇsl´ ym dvˇema zmenˇsil o 20%. Dalˇs´ım pˇr´ıkladem m˚ uˇze b´ yt celkov´ y ˇcas str´aven´ y na rodinn´ ych oslav´ach a veˇc´ırc´ıch. To vˇse je samozˇrejmˇe podm´ınˇeno t´ım, ˇze kalend´aˇrov´e ud´alosti, reprezentuj´ıc´ı spotˇrebovan´ y ˇcas na tˇechto ud´alostech, jsou nˇejak odliˇseny od ostatn´ıch, a to bud’ samostatn´ ym kalend´aˇrem, nebo kl´ıˇcov´ ym slovem v pˇredmˇetu ud´alosti.
1.3
Struktura pr´ ace
Celou pr´aci lze rozdˇelit na dvˇe hlavn´ı ˇc´asti. Prvn´ı ˇca´st (kapitola 2 a 3) je teoretick´a a jej´ım hlavn´ım t´ematem je pr´ace s ˇcasem. Jsou v n´ı pops´any zp˚ usoby pl´anov´an´ı ˇcasu tak, aby byl maxim´alnˇe a efektivnˇe vyuˇzit (time management, sekce 2.3). K tomu jsou pops´any nˇekter´e existuj´ıc´ı n´astroje a jejich moˇznosti, kter´e nab´ız´ı. D´ale jsou v t´eto ˇca´sti (sekce 2.1) vysvˇetleny zp˚ usoby vykazov´an´ı a evidence spotˇrebovan´eho ˇcasu a v neposledn´ı ˇradˇe hlavnˇe popis online kalend´aˇre jako hlavn´ıho zdroje dat, jeho vyuˇzit´ı a form´aty ˇci zp˚ usoby jeho uloˇzen´ı, to vˇse v kapitole 3.
3
´ Uvod
Struktura pr´ace
Druh´a ˇc´ast je sp´ıˇse praktick´a a je zamˇeˇrena na konkr´etn´ı vytvoˇrenou aplikaci zpracov´avaj´ıc´ı tato kalend´aˇrov´a data. V kapitole 4 je vysvˇetlen u ´ˇcel vytvoˇren´ı t´eto aplikace a jej´ı hlavn´ı funkˇcnosti. D´ale je v kapitole 5 pops´ana architektura a implementace vˇcetnˇe logick´e a prezentaˇcn´ı vrstvy. Po t´eto ˇc´asti n´asleduje ovˇeˇren´ı aplikace (kapitola 6), uk´azka v´ ystupu a jeho ovˇeˇrov´an´ı a testov´an´ı. Za druhou ˇca´st´ı je v kapitole 7 uveden z´avˇer a zhodnocen´ı pr´ace. V posledn´ı ˇca´sti jsou pops´ana moˇzn´a roˇzˇs´ıˇren´ı vytvoˇren´e aplikace a uˇzivatelsk´a dokumentace v sekci 7.3.
4
2 V´ykazy ˇcasu a time management 2.1
Proˇ c vykazovat ˇ cas
V´ ykazy ˇcasu slouˇz´ı k z´ısk´an´ı informac´ı o odpracovan´em ˇcasu na jednotliv´ ych u ´kolech ˇci cel´ ych projektech. Dalˇs´ım d˚ uvodem je napˇr´ıklad z´ısk´an´ı pˇredstavy o pracnosti projekt˚ u ˇci podklady pro v´ yplaty nebo odmˇeny zamˇestnanc˚ um. V´ ykazy mohou slouˇzit jako d˚ uleˇzit´e vod´ıtko pˇri sledov´an´ı odpracovan´e doby na projektu. Pˇred spuˇstˇen´ım v´ yvoje produktu se odhadne doba potˇrebn´a k jeho realizaci a n´aslednˇe lze v pr˚ ubˇehu v´ yvoje sledovat a srovn´avat, jak odhadnut´a doba odpov´ıd´a skuteˇcn´emu ˇcasu str´aven´emu na projektu.
2.2
Existuj´ıc´ı n´ astroje
Existuje mnoho n´astroj˚ u, kter´e nˇejak´ ym zp˚ usobem slouˇz´ı k vykazov´an´ı ˇci evidenci ˇcasu a pr´ace. Nˇekter´e jsou orientov´any sp´ıˇse k evidenci str´aven´eho ˇcasu neˇz k popisu proveden´e pr´ace, napˇr. kalend´ aˇ re. Jednˇemi z nejvˇetˇs´ıch z´astupc˚ u jsou webov´a aplikace Google Calendar ˇci zn´am´ y Microsoft Outlook. V n´astroj´ıch tohoto typu slouˇz´ı k evidenci ˇcasu ud´alosti. Ud´alost sama o sobˇe nem´a pˇr´ıliˇs charakter v´ ykazu vykonan´e pr´ace. K ud´alosti lze uv´est jej´ı pˇredmˇet, struˇcn´ y popis a hlavnˇe ˇcasov´e u ´daje: ˇcas a datum od, do, opakov´an´ı, m´ısto ud´alosti, u ´ˇcastn´ıci atd. Dalˇs´ı n´astroje obsahuj´ıc´ı informace o str´aven´em ˇcasu jsou n´astroje pro spr´avu projekt˚ u: Redmine1 , Jira2 ˇci TargetProcess3 nebo jin´e bug tracking syst´ emy (bug tracking syst´em je speci´alnˇe navrˇzen´a aplikace tak, aby pom´ahala program´ator˚ um pˇri v´ yvoji projekt˚ u a n´asledn´ ych oprav chyb - bug˚ u): 4 5 Bugzilla , FlySpray , . . . . Obˇe tyto kategorie spolu souvis´ı a prol´ınaj´ı se. Tyto syst´emy umoˇzn ˇuj´ı v´est z´aznamy o spotˇrebovan´em ˇcase na jednotliv´ ych u ´kolech (viz obr´azek 2.1) a na jejich z´akladˇe lze z´ısk´avat informace o ˇcasov´em v´ yvoji cel´eho projektu. Pˇri vytv´aˇren´ı u ´kolu lze specifikovat ˇcasov´ y odhad tr1
http://www.redmine.org/ https://www.atlassian.com/software/jira 3 http://www.targetprocess.com/ 4 http://www.bugzilla.cz/ 5 http://flyspray.org/ 2
5
V´ykazy ˇcasu a time management
Time management
v´an´ı jeho splnˇen´ı a tento odhad n´aslednˇe srovn´avat se skuteˇcnˇe str´aven´ ym ˇcasem. Tˇret´ı kategori´ı mohou b´ yt syst´emy nasazen´e ve firm´ach a v instituc´ıch, kde je souˇcasnˇe d˚ uleˇzit´ y nejen popis odveden´e pr´ace, ale tak´e ˇcasov´e u ´daje, kdy byla pr´ace prov´adˇena. Napˇr. z d˚ uvodu v´ ypoˇctu mzdy.
Obr´azek 2.1: Uk´azka moˇzn´e aktualizace u ´kolu v syst´emu Redmine
2.3
Time management
Time management [5, 6] je soubor dovednost´ı, postup˚ u a n´astroj˚ u za u ´ˇcelem lepˇs´ıho vyuˇzit´ı sv´eho ˇcasu a dosaˇzen´ı vˇetˇs´ı produktivity [3]. Hlavn´ım u ´kolem je pl´anov´an´ı, realizace a komunikace. C´ılem je spr´avn´e rozvrˇzen´ı aktivit po dobu cel´eho dne, aby v´ ysledky pr´ace byly efektivn´ı. Mezi hlavn´ı aktivity patˇr´ı pl´anov´an´ı, stanoven´ı c´ıl˚ u a priorit, delegov´an´ı, . . .
2.3.1
Pravidla
Jak jiˇz bylo ˇreˇceno, time management je sloˇzen z nˇekolika pravidel ˇci postup˚ u vedouc´ıch k efektivn´ımu ˇr´ızen´ı sv´eho ˇcasu. Tato pravidla nejsou sloˇzit´a. D˚ uleˇzitˇejˇs´ı je se jimi ˇr´ıdit a soustˇredit se na nˇe. Mezi jedny z d˚ uleˇzit´ ych pravidel patˇr´ı: 6
V´ykazy ˇcasu a time management
Time management
• stanoven´ı priorit: nal´ehav´a aktivita nesm´ı pˇredbˇehnout d˚ uleˇzitou, • delegov´ an´ı aktivit: nevykon´avat aktivity, na kter´e jsou tu jin´ı, • odm´ıtnut´ı: b´ yt schopen ˇr´ıci ne“ (odm´ıt´a se nab´ıdka, ne ˇclovˇek), ” • informovanost: vˇcas zn´at veˇsker´e (negativn´ı) aspekty t´ ykaj´ıc´ı se aktivity, neinformovanost m˚ uˇze zp˚ usobit ˇspatn´ y odhad situace, • ruˇ siv´ e vlivy: odolnost proti neˇcekan´ ym ud´alostem je velmi d˚ uleˇzit´a, • ˇ casov´ e rezervy: uvolnit zhruba 40% ˇcasu na spont´ann´ı a neˇcekan´e aktivity.
2.3.2
Kategorizace
D˚ uleˇzit´ ym faktorem zvyˇsov´an´ı vlastn´ı produktivity je vylouˇcen´ı nebo alespoˇ n omezen´ı aktivit, kter´e nepˇrin´aˇs´ı zisk, nejsou d˚ uleˇzit´e a jsou jinak pouze ztr´atou ˇcasu. K rozdˇelen´ı aktivit do kategori´ı podle d˚ uleˇzitosti a nal´ehavosti m˚ uˇze pomoci metoda navrˇzen´a Stephenem Coveyem z jeho knihy First Things First (1994) [1]. Metoda obsahuje definice 4 typ˚ u aktivit (viz obr´azek 2.2): d˚ uleˇzit´e a nal´ehav´e, d˚ uleˇzit´e a nenal´ehav´e, ned˚ uleˇzit´e a nal´ehav´e a ned˚ uleˇzit´e a nena´ l´ehav´e. Kaˇzdou aktivitu lze zaˇradit alespoˇ n do jedn´e z tˇechto skupin. Ukoly se pot´e vyˇrizuj´ı podle ˇc´ısla kvadrantu, v kter´em jsou.
2.3.3
Priority
Pˇri rozdˇelov´an´ı aktivit do skupin podle d˚ uleˇzitosti a nal´ehavosti je nutn´e pˇridˇelit kaˇzd´e aktivitˇe nˇejakou prioritu. K nastaven´ı priorit slouˇz´ı nˇekolik technik, napˇr´ıklad Paretova anal´ yza nebo ABC anal´ yza. Paretova anal´ yza Myˇslenkou Paretovy anal´ yzy je, ˇze 80% aktivit m˚ uˇze b´ yt splnˇeno ve 20% dostupn´eho ˇcasu. Zbyl´ ych 20% aktivit bude trvat 80% ˇcasu. Aplikac´ı t´eto anal´ yzy se moˇzina aktivit rozdˇel´ı na 2 skupiny, z nichˇz prvn´ı skupinˇe se pˇriˇrad´ı vyˇsˇs´ı priorita a bude vykon´av´ana pˇrednostnˇe.
7
V´ykazy ˇcasu a time management
Time management
Obr´azek 2.2: Stephen Covey - diagram typ˚ u aktivit (pˇrevzato z [1])
8
V´ykazy ˇcasu a time management
Time management
ABC anal´ yza Tato technika je bˇeˇznˇe kombinov´ana s Paretovou anal´ yzou a vyuˇz´ıv´a se takt´eˇz pro kategorizaci do skupin. Skupiny jsou standardnˇe oznaˇcov´any p´ısmeny A, B, C - z toho vypl´ yv´a, ˇze je jejich poˇcet neomezen´ y. Aktivity se rozdˇeluj´ı podle krit´eri´ı: • A - d˚ uleˇzit´e a nal´ehav´e aktivity (velmi d˚ uleˇzit´e ), • B - d˚ uleˇzit´e, ale nenal´ehav´e aktivity (stˇrednˇe d˚ uleˇzit´e ), • C - ned˚ uleˇzit´e ani nal´ehav´e (m´alo d˚ uleˇzit´e ). Po zaˇrazen´ı jsou skupiny n´aslednˇe seˇrazeny podle priority.
9
3 Online kalend´aˇre a jejich data 3.1
Kalend´ aˇ r
Kalend´aˇr je syst´em pro dˇelen´ı ˇcasu a orientaci v ˇcase, jehoˇz z´akladn´ı jednotkou je den. Kalend´aˇre slouˇz´ı k efektivn´ı organizaci ˇcasu, ke komunikaci ve firmˇe, k organizov´an´ı sch˚ uzek atd. Nejzn´amˇejˇs´ı aplikace umoˇzn ˇuj´ıc´ı pr´aci s kalend´aˇri jsou napˇr´ıklad: Google Calendar [7], Apple iCal, Mozzila Thunderbird, Microsoft Outlook a dalˇs´ı. Vˇsechny tyto aplikace pouˇz´ıvaj´ı stejn´ y form´at pro reprezentaci kalend´aˇrov´ ych dat zvan´ y iCalendar definovan´ y standardem RFC 5545 [2]. iCalendar je standard pro v´ ymˇenu kalend´aˇrov´ ych dat a je v souˇcasn´e dobˇe nejpouˇz´ıvanˇejˇs´ı.
3.1.1
Vyuˇ zit´ı
Kalend´aˇre pokr´ yvaj´ı ˇsirok´e spektrum akc´ı, kter´e se nˇejak´ ym zp˚ usobem t´ ykaj´ı ˇcasu a souvis´ı s ˇcasov´ ymi u ´daji, at’ uˇz pˇr´ımo, nebo jen u ´zce. V mnoha pˇr´ıpadech kalend´aˇre usnadˇ nuj´ı pr´aci v organizov´an´ı sch˚ uzek, pl´anov´an´ı soukrom´eho i firemn´ıho ˇcasu, pˇripom´ınaj´ı d˚ uleˇzit´e ud´alosti a data, poskytuj´ı pˇrehledy o ˇcasov´em vyt´ıˇzen´ı a dalˇs´ı jin´e v´ yhody. Pl´anov´an´ı ud´alost´ı je jedn´ım z nejˇcastˇejˇs´ıch u ´kon˚ u prov´adˇen´ ych nad kalend´aˇrem. Ud´alost je ˇcasov´e obdob´ı v kalend´aˇri maj´ıc´ı dan´ y zaˇca´tek a konec. Mohou existovat v´ yjimky, kdy ud´alost nem´a pˇresnˇe definovan´ y ˇcas, napˇr´ıklad v´ yroˇc´ı. Ud´alosti je moˇzn´e nastavit opakov´an´ı, kter´e m´a ˇsirok´e moˇznosti nastaven´ı, napˇr.: po dnech/t´ ydnech/mˇes´ıc´ıch, kaˇzd´e u ´ter´ y, kaˇzd´e tˇret´ı u ´ter´ y, kaˇzdou druhou stˇredu a p´atek a tak d´ale. Ud´alosti mohou m´ıt nastaven´e upozornˇen´ı, kdy uˇzivateli pˇrijde pˇripom´ınka o bl´ıˇz´ıc´ım se zaˇca´tku dan´e ud´alosti. Nastaven´ı tohoto upozornˇen´ı je opˇet velice variabiln´ı. D´ıky tˇemto ud´alostem a upozornˇen´ım je m´alo pravdˇepodobn´e, ˇze se na nˇejakou d˚ uleˇzitou ud´alost nebo akci zapomene. Na ud´alosti je moˇzn´e zv´at u ´ˇcastn´ıky a d´ıky tomu pl´anovat sch˚ uzky a r˚ uzn´a ˇskolen´ı. Jelikoˇz je moˇzn´e kalend´aˇre mezi sebou sd´ılet, organiz´ator m˚ uˇze jednoduˇse zjistit, kdy maji vˇsichni u ´ˇcastn´ıci v kalend´aˇri volno, vytvoˇrit ud´alost a poslat u ´ˇcastn´ık˚ um pozv´anku. Ti maj´ı na v´ ybˇer, zda pozv´anku pˇrijmou nebo odm´ıtnou. K tomuto rozhodnut´ı lze pˇripojit i nˇejak´ y popis, proˇc napˇr. 10
Online kalend´aˇre a jejich data
Kalend´aˇr
uˇzivatel sch˚ uzku nepˇrijal. Organiz´ator souˇcasnˇe m˚ uˇze celou ud´alost zruˇsit ˇci zmˇenit jej´ı datum nebo ˇcas. V obou pˇr´ıpadech dost´avaj´ı u ´ˇcastn´ıci informaci o proveden´e zmˇenˇe ud´alosti. Kalend´aˇre tak´e umoˇzn ˇuj´ı vytv´aˇret u ´koly, kter´e mus´ı b´ yt splnˇeny v urˇcit´ y den. I tomuto u ´kolu pˇredch´az´ı upozornˇen´ı pro uˇzivatele. Pˇr´ıkladem m˚ uˇze b´ yt pˇriˇrazov´an´ı u ´kol˚ u zamˇestnavatele do kalend´aˇre zamˇestnance, kdy zamˇestnanec v´ı, jak´e povinnosti ho ˇcekaj´ı. Spr´ava zdroj˚ u ve firmˇe je dalˇs´ı d˚ uleˇzitou z´aleˇzitost´ı, kterou je tˇreba efektivnˇe ˇreˇsit. Zdrojem m˚ uˇze b´ yt napˇr´ıklad projektor, tabule, firemn´ı automobil atd. Ke spr´avˇe tˇechto zdroj˚ u lze rovnˇeˇz pouˇz´ıt kalend´aˇre. Ty obsahuj´ı n´astroje ke zjiˇstˇen´ı dostupnosti zdroje a umoˇzn ˇuj´ı jeho rezervaci na konkr´etn´ı dobu. Pˇr´ıkladem m˚ uˇze b´ yt rezervace zasedac´ı m´ıstnosti. Pˇred napl´anov´an´ım sch˚ uzky potˇrebuje organiz´ator vˇedˇet, zda je m´ıstnost voln´a nebo obsazen´a. M´ısto sloˇzit´e komunikace mezi z´ajemci postaˇc´ı sd´ılen´ y kalend´aˇr, ve kter´em m´a kaˇzd´ y pˇrehled o obsazenosti dan´eho zdroje a m˚ uˇze podle toho podnikat pˇr´ısluˇsn´e kroky.
3.1.2
V´ yhody a nev´ yhody
V´ yhody online kalend´ aˇ r˚ u • Dostupnost - nez´aleˇz´ı, kde se ˇclovˇek zrovna nach´az´ı. Staˇc´ı b´ yt pˇripojen´ y k internetu a m´ıt nˇejak´e zaˇr´ızen´ı s aplikac´ı podporuj´ıc´ı spr´avu kalend´aˇre (mobiln´ı telefon, tablet, . . . ). Pot´e jsou k dispozici t´emˇeˇr vˇsechny moˇznosti, kter´e kalend´aˇre nab´ız´ı (pozor, ne vˇsechny aplikace nab´ız´ı stejn´e moˇznosti, nˇekter´e konkr´etn´ı pˇr´ıklady jsou uvedeny pozdˇeji). • Sd´ılen´ı - sd´ılen´ı kalend´aˇr˚ u napˇr´ıklad ve firemn´ım prostˇred´ı je velice uˇziteˇcn´e. D´ıky tomu lze z´ıskat pˇrehled o ˇcasov´ ych aktivit´ach a moˇznostech jin´e osoby. Sd´ılen´ı je tak´e hojnˇe vyuˇz´ıv´ano ve spr´avˇe zdroj˚ u. Souˇcasnˇe je moˇzn´e specifikovat reˇzimy sd´ılen´ı (ekvivalence pˇr´ıstupov´ ych pr´av): prov´adˇet zmˇeny a spravovat sd´ılen´ı, prov´adˇet zmˇeny ud´alost´ı, zobrazit vˇsechny podrobnosti ud´alost´ı nebo je skr´ yt (zobrazit pouze informace o dostupnosti). • Synchronizace - velmi mocn´ y n´astroj, bez kter´eho by bylo pouˇz´ıv´an´ı kalend´aˇr˚ u sloˇzitˇejˇs´ı. D´ıky synchronizaci lze vyuˇz´ıvat v´ıce zaˇr´ızen´ı 11
Online kalend´aˇre a jejich data
Kalend´aˇr
ke spr´avˇe (sv´ ych) kalend´aˇr˚ u. Veˇsker´e zmˇeny proveden´e na jednom zaˇr´ızen´ı jsou n´aslednˇe viditeln´e ve vˇsech jin´ ych zaˇr´ızen´ıch pouze za pˇredpokladu existuj´ıc´ıho pˇripojen´ı k internetu. Pokud je pˇripojen´ı nedostupn´e, jsou zmˇeny ukl´ad´any lok´alnˇe. K jejich prom´ıtnut´ı do online kalend´aˇre dojde aˇz bude pˇripojen´ı dostupn´e. • Trvanlivost informac´ı - pˇri vyuˇz´ıv´an´ı online kalend´aˇr˚ u jsou informace velmi bezpeˇcnˇe uloˇzeny na serverech poskytovatele kalend´aˇre a je velmi nepravdˇepodobn´e, ˇze by se tato data ztratila. Dˇr´ıve pouˇz´ıvan´e kalend´aˇre (v pap´ırov´e podobˇe) mˇely ˇradu nev´ yhod, hrozilo napˇr´ıklad poˇskozen´ı vodou ˇci ohnˇem. • Elektronick´ a podoba - internetov´e kalend´aˇre jsou ukl´ad´any v elektronick´e podobˇe. D´ıky tomu odpad´a nutnost pouˇz´ıv´an´ı psac´ıch potˇreb a velk´ ych fyzick´ ych kalend´aˇr˚ u, kter´e mˇely oproti online kalend´aˇr˚ um ˇc´asteˇcnˇe omezenou kapacitu. Souˇcasnˇe umoˇzn ˇuje elektronick´a podoba velmi jednoduchou spr´avu ud´alost´ı: pˇrid´av´an´ı, maz´an´ı a editace. • Vyhled´ av´ an´ı - pokud je zn´am n´azev ˇci pˇredmˇet ud´alosti (nebo jen ˇc´ast), je velice jednoduch´e ud´alost ve zlomku ˇcasu vyhledat. U fyzick´ ych kalend´aˇr˚ u je nutn´e ruˇcn´ı prohled´av´an´ı. • Podpora aplikac´ı - aplikac´ı pro spr´avu kalend´aˇr˚ u je mnoho. Standardn´ı akce prov´adˇen´e nad kalend´aˇrem (tj. spr´ava ud´alost´ı, sd´ılen´ı, synchronizace atd.) podporuj´ı t´emˇeˇr vˇsechny. Kaˇzd´a aplikace pot´e nav´ıc podporuje urˇcit´e kalend´aˇrov´e akce a nastaven´ı, kter´e naopak jin´a nepodporuje. Nev´ yhody online kalend´ aˇ r˚ u • Pˇ ripojen´ı k internetu - aby mohly b´ yt internetov´e kalend´aˇre plnˇe vyuˇz´ıv´any, je nutn´e b´ yt co nejˇcastˇeji (t´emˇeˇr st´ale) pˇripojen k internetu. To samozˇrejmˇe nen´ı vˇzdy moˇzn´e, internetov´e pˇripojen´ı napˇr´ıklad nemus´ı b´ yt zrovna k dispozici. • Elektronick´ e zaˇ r´ızen´ı - spr´ava kalend´aˇre pˇres poˇc´ıtaˇc je samozˇrejm´a. Urˇcitˇe ale nˇekdy nastane situace, kdy u nˇej ˇclovˇek zrovna nen´ı a potˇreboval by uloˇzit d˚ uleˇzit´e datum ˇci ud´alost. V tu chv´ıli se velmi hod´ı nˇejak´e zaˇr´ızen´ı s podporou kalend´aˇr˚ u. T´ımto zaˇr´ızen´ım m˚ uˇze b´ yt napˇr´ıklad mobiln´ı telefon ˇci tablet pˇripojen´ y k internetu.
12
Online kalend´aˇre a jejich data
Form´at iCalendar
• Prvn´ı setk´ an´ı - prvn´ı setk´an´ı s online kalend´aˇrem m˚ uˇze b´ yt matouc´ı a ne pˇr´ıliˇs pozitivn´ı. Jelikoˇz jde o m´ırnˇe odliˇsn´ y zp˚ usob pl´anov´an´ı ˇcasu, m˚ uˇze ˇclovˇek nab´ yvat pocitu, ˇze se kalend´aˇr nikdy nenauˇc´ı pouˇz´ıvat. Jeho v´ yhody ovˇsem pˇrevaˇzuj´ı nad v´ yhodami fyzick´ ych kalend´aˇr˚ u a investice ˇcasu k jeho pozn´an´ı se pozdˇeji urˇcitˇe vyplat´ı. Konkr´ etn´ı pˇ r´ıklady Jak jiˇz bylo ˇreˇceno, kaˇzd´a kalend´aˇrov´a aplikace podporuje m´ırnˇe odliˇsn´e sluˇzby a moˇznosti. Typickou pr´aci s kalend´aˇri ale zvl´adaj´ı vˇsechny. Zde je uvedeno p´ar rozd´ıl˚ u konkr´etn´ıch aplikac´ı, jak se mohou mezi sebou liˇsit. Aplikace Google Calendar neum´ı vyhled´avat podle ˇca´sti slova, kter´ y obsahuje pˇredmˇet ud´alosti. Pˇr´ıklad: v kalend´aˇri je ud´alost s pˇredmˇetem Petrovy narozeniny. Pˇri hled´an´ı ˇca´sti Petr“ aplikace Google Calendar ud´alost ne” najde. Pˇri hled´an´ı slova Petrovo“ uˇz ano. Oproti tomu aplikace Microsoft ” Outlook 2013 a Yahoo! Calendar ud´alost naleznou. Zaj´ımavˇe se chov´a aplikace iCal od Applu, kter´a ud´alost vyhled´a, kdyˇz hledan´ ym slovem je Petr“. ” Pokud hledan´ ym slovem bude etrov“, uˇz ud´alost nenalezne. ” Kategorizaci ud´alost´ı aplikace Google Calendar standardnˇe nepodporuje. Jedin´ ymi moˇznostmi, jak ud´alosti nˇejak´ ym zp˚ usobem od sebe rozliˇsit, je vkl´ad´an´ı do nov´ ych kalend´aˇr˚ u, kde by kaˇzd´ y kalend´aˇr reprezentoval jednu kategorii. V pˇrehledu pot´e budou m´ıt ud´alosti ze sv´ ych kalend´aˇr˚ u barvu pr´avˇe toho kalend´aˇre. Dalˇs´ım zp˚ usobem rozliˇsen´ı m˚ uˇze b´ yt nastaven´ı barvy ud´alosti. Aplikace iCal kategorizaci tak´e neumoˇznuje a takt´eˇz ji ˇreˇs´ı pouˇzit´ım v´ıce kalend´aˇr˚ u, z nichˇz kaˇzd´ y m´a jinou barvu. L´epe jiˇz kategorizaci ˇreˇs´ı aplikace Microsoft Outlook 2013 a Yahoo! Calendar, ve kter´ ych se pˇri vytv´aˇren´ı nov´e ud´alosti m˚ uˇze specifikovat, do jak´e kategorie patˇr´ı. V aplikaci Microsoft Outlook 2013 lze nav´ıc vytvoˇrit kategorii novou a ud´alost do n´ı pˇriˇradit. Ud´alosti v Microsoft Outlook 2013 mohou m´ıt oproti Yahoo! Calendar kategori´ı v´ıce.
3.2
Form´ at iCalendar
Aby bylo moˇzn´e s kalend´aˇrov´ ymi daty nˇejak pracovat, je nutn´e definovat strukturu (form´at), jak´ ym zp˚ usobem se budou zapisovat a reprezentovat a jak´ ym zp˚ usobem bude prob´ıhat jejich v´ ymˇena. Vytvoˇren´ı jednotn´eho form´atu usnadˇ nuje komunikaci v´ yvoj´aˇr˚ u kalend´aˇrov´ ych aplikac´ı, nebot’ kaˇzd´ y v´ı, jak jsou kalend´aˇrov´a data definov´ana. V´ yhodou je takt´eˇz pˇrenositelnost mezi 13
Online kalend´aˇre a jejich data
Form´at iCalendar
tˇemito aplikacemi, pokud vˇsechny podporuj´ı stejn´ y standard. T´ımto standardem je iCalendar, t´eˇz zn´am´ y pod zkratkou iCal (iCal je souˇcasnˇe jm´eno kalend´aˇrov´e aplikace firmy Apple). iCal nen´ı prvn´ım form´atem, kter´ y se pouˇz´ıv´a k v´ ymˇenˇe kalend´aˇrn´ıch a pl´anovac´ıch informac´ı v r´amci internetu. iCalu pˇredch´azel form´at vCalendar slouˇz´ıc´ı takt´eˇz k v´ ymˇenˇe kalend´aˇrn´ıch informac´ı. Oproti vCalendaru je form´at iCal nez´avisl´ y na pˇren´aˇsen´em protokolu.
3.2.1
Historie
Prvn´ı verze standardu, oznaˇcen´a RFC 2245, byla vyd´ana v listopadu roku 1998 organizac´ı IETF1 zab´ yvaj´ıc´ı se internetov´ ymi standardy a byla zaloˇzena na starˇs´ım form´atu vCalendar. vCalendar vydala spoleˇcnost IMC2 , kter´a dnes jiˇz neexistuje. Prvn´ım updatem proˇsel iCal v roce 2009. D˚ uvodem 3 bylo rozˇs´ıˇren´ı standardu internetov´e poˇsty MIME pr´avˇe o iCal (typ obsahu text/calendar ) a souˇcasnˇe nez´avislost na pˇren´aˇsen´em protokolu. Nov´ y standard nese oznaˇcen´ı RFC 5545, je nejpouˇz´ıvanˇejˇs´ım a nejrozˇs´ıˇrenˇejˇs´ım form´atem pro v´ ymˇenu kalend´aˇrov´ ych dat a jeho autorem je Bernard Desruisseaux.
3.2.2
Popis souboru
Soubor typu iCalendar m´a pˇr´ıponu .ics a obsahuje prost´ y ASCII text. Standardn´ı k´odov´an´ı iCalu je UTF-8. Pouˇzit´ı jin´eho k´odov´an´ı je podm´ınˇeno nastaven´ım MIME parametru charset“ pˇri pˇrenosu. Maxim´aln´ı d´elka ˇra´dku ” v souboru by nemˇela pˇres´ahnout 75 bajt˚ u (pozor, ne znak˚ u). Pokud d´elka ˇra´dky pˇresahuje 75 bajt˚ u, mˇela by b´ yt rozdˇelena do v´ıce ˇra´dek. Po rozdˇelen´ı se pˇred kaˇzd´ y nov´ y ˇra´dek vloˇz´ı b´ıl´ y znak (mezera ˇci tabul´ator), a d´ıky tomu ˇ adka je ukonˇcena lze rozpoznat, ˇze tato ˇr´adka je pokraˇcov´an´ım pˇredchoz´ı. R´ znaky CR+LF. 1
Internet Engineering Task Force Internet Mail Consortium 3 Multipurpose Internet Mail Extensions 2
14
Online kalend´aˇre a jejich data
3.2.3
Form´at iCalendar
Struktura
Kaˇzd´ y .ics soubor pˇredstavuje pr´avˇe jeden kalend´aˇr, kter´ y je definov´an prvn´ı a posledn´ı ˇra´dkou v souboru. Mezi tˇemito ˇra´dkami je definovan´e tˇelo kalend´aˇre. To se skl´ad´a z vlastnost´ı dan´eho kalend´aˇre a alespoˇ n jedn´e komponenty (viz 3.2.4). Prvn´ı ˇra´dka souboru4 , BEGIN:VCALENDAR, pˇredstavuje zaˇca´tek kalend´aˇre a posledn´ı ˇra´dka, END:VCALENDAR, pˇredstavuje konec kalend´aˇre. Tyto ˇr´adky maj´ı pevnˇe dan´e m´ısto a nelze je mˇenit. Dalˇs´ı ˇra´dkou v souboru je informace o verzi pouˇzit´eho form´atu. VERSION:2.0 indikuje, ˇze data jsou ve form´atu iCalendar, naopak VERSION:1.0 znaˇc´ı, ˇze se jedn´a o form´at vCalendar. Dalˇs´ı vlastnost´ı objektu kalend´aˇre mus´ı b´ yt indentifik´ator oznaˇcuj´ıc´ı autora ˇci produkt, kter´ y kalend´aˇr vytvoˇril. Napˇr´ıklad kalend´aˇr aplikace Google Calendar m´a identifik´ator PRODID:-//Google Inc//Google Calendar 70.9054//EN. Uk´azka kalend´aˇre: BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Google Inc//Google Calendar 70.9054//EN BEGIN:VEVENT UID:
[email protected] DTSTAMP:19970610T172345Z DTSTART:19970714T170000Z DTEND:19970715T040000Z SUMMARY:Bastille Day Party END:VEVENT END:VCALENDAR D´ale se uvnitˇr kalend´aˇre definuj´ı komponenty, viz 3.2.4.
3.2.4
Komponenty
Kalend´aˇre standardnˇe obsahuj´ı nˇejak´a data, napˇr´ıklad ud´alosti, u ´koly atd. Tato data se naz´ yvaj´ı komponenty. Komponenta kalend´aˇre je datov´a oblast v souboru definovan´a sv´ ym prvn´ım a posledn´ım ˇra´dkem pˇredstavuj´ıc´ı kon4
Vˇetˇsina uk´ azek v t´eto kapitole je pˇrevzata z RFC 5545 [2].
15
Online kalend´aˇre a jejich data
Form´at iCalendar
kr´etn´ı prvek kalend´aˇre. Vˇsechny komponenty zaˇc´ınaj´ı p´ısmenem V a jsou n´asleduj´ıc´ı: • VEVENT - skupina vlastnost´ı popisuj´ıc´ı ud´alost, • VTODO - skupina vlastnost´ı popisuj´ıc´ı u ´kol, • VJOURNAL - skupina vlastnost´ı popisuj´ıc´ı z´aznam v den´ıku, • VFREEBUSY - skupina vlastnost´ı popisuj´ıc´ı poˇzadavek na informaci o voln´em/obsazen´em ˇcase, odpovˇed’ na tento poˇzadavek ˇci pouze ozn´amen´ı o obsazen´em ˇcase, • VALARM - skupina vlastnost´ı popisuj´ıc´ı alarm, • VTIMEZONE - skupina vlastnost´ı definuj´ıc´ı ˇcasovou z´onu.
Komponenta VEVENT Komponenta VEVENT popisuje ud´alost zab´ıraj´ıc´ı v kalend´aˇri nˇejak´ y ˇcasov´ yu ´sek. Pˇr´ıkladem m˚ uˇze b´ yt napˇr´ıklad n´avˇstˇeva doktora z´ıtra od 10:00 do 11:00. Ud´alosti jsou standardnˇe zahrnuty jako obsazen´ y“ ˇcas pro kompo” ˇ nentu VFREEBUSY. Cas zabran´ y ud´alost´ı lze uvolnit nastaven´ım vlastnosti TRANSPARENT dan´e ud´alosti. Pˇr´ıklady vlastnost´ı komponenty VEVENT: • DTSTAMP - datum a ˇcas vytvoˇren´ı objektu iCalendar, datum a ˇcas je uv´adˇen ve form´atu UTC (povinn´a vlastnost), • UID - jednoznaˇcn´a glob´aln´ı identifikace komponenty (povinn´a vlastnost), • SUMMARY - definice pˇredmˇetu kalend´aˇrov´e komponenty (ne nutnˇe ud´alosti) (voliteln´a vlastnost), • CREATED - datum a ˇcas vytvoˇren´ı komponenty (voliteln´a vlastnost), • RRULE - vlastnost definuj´ıc´ı pravidlo ˇci opakovac´ı vzor pro komponenty, kter´e se mohou opakovat (ud´alosti, u ´koly, z´aznamy v den´ıku, definice ˇcasov´ ych z´on) (voliteln´a vlastnost), 16
Online kalend´aˇre a jejich data
Form´at iCalendar
• CATEGORIES - definice kategori´ı, do kter´ ych ud´alost patˇr´ı. Tyto kategorie by se daly ch´apat jako kl´ıˇcov´a slova, kdyby je vˇsechny kalend´aˇrov´e aplikace podporovaly (v´ıce v 3.1.2) (voliteln´a vlastnost), • a dalˇs´ı. Vlastnost RRULE je velmi ˇcasto pouˇz´ıv´ana. Vyskytuje se u komponent, kter´e se nˇejak´ ym zp˚ usobem opakuj´ı. Pˇr´ıklady opakov´an´ı mohou b´ yt: • RRULE:FREQ=DAILY;COUNT=10 (10x, opakovan´ı dennˇe), • RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR (10x, prvn´ı p´atek v mˇes´ıci), • RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU (kaˇzd´e u ´ter´ y kaˇzd´ y druh´ y mˇes´ıc), • RRULE:FREQ=WEEKLY;UNTIL=20141224T000000Z (t´ ydenn´ı opakov´an´ı aˇz do 24. prosince 2014).
Pˇ r´ıklady ud´ alost´ı Ud´alost v kategorii School, kter´a zaˇc´ın´a 03.09.2013 v 16:30:00 UTC, konˇc´ı 03.09.2013 v 19:00:00 UTC a m´a pˇredmˇet Sraz ze ˇskoly, m˚ uˇze m´ıt n´asleduj´ıc´ı iCal reprezentaci: BEGIN:VEVENT UID:
[email protected] DTSTAMP:20130901T130000Z DTSTART:20130903T163000Z DTEND:20130903T190000Z SUMMARY:Sraz ze s ˇkoly CATEGORIES:SCHOOL END:VEVENT Ud´alost, kter´a m´a trv´an´ı jeden den a opakuje se vˇzdy od 02.10.2013 kaˇzd´ y rok, m˚ uˇze vypadat v iCal form´atu n´asledovnˇe:
17
Online kalend´aˇre a jejich data
Form´at iCalendar
BEGIN:VEVENT UID:
[email protected] DTSTAMP:20130901T130000Z DTSTART;VALUE=DATE:20131002 SUMMARY:Our Blissful Anniversary TRANSP:TRANSPARENT CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION RRULE:FREQ=YEARLY END:VEVENT
Komponenta VTODO ´ Komponenta VTODO poskytuje sadu vlastnost´ı reprezentuj´ıc´ı u ´kol. Ukol m˚ uˇze b´ yt jednor´azov´ y nebo m˚ uˇze m´ıt nastaven´e nˇejak´e opakov´an´ı (vlastnost RRULE). Souˇcasnˇe tato komponenta nem˚ uˇze b´ yt sama o sobˇe vnoˇrena v jin´e komponentˇe, ale m˚ uˇze b´ yt k jin´e komponentˇe vztaˇzen´a pomoc´ı vlastnosti RELATED-TO. Pˇr´ıklad u ´kolu, kter´ y mus´ı b´ yt splnˇen do 1. kvˇetna 2014: BEGIN:VTODO UID:
[email protected] DTSTAMP:20140313T123432Z DUE;VALUE=DATE:20140501 SUMMARY:Submit Quebec Income Tax Return for 2006 CLASS:CONFIDENTIAL CATEGORIES:FAMILY,FINANCE STATUS:NEEDS-ACTION END:VTODO
Komponenta VJOURNAL Tato komponenta reprezentuje z´aznam do den´ıku. Z´aznamem do den´ıku se mysl´ı nˇejak´ y text spojen´ y s urˇcit´ ym datem. Jelikoˇz tato komponenta nezab´ır´a v kalend´aˇri ˇz´adn´ y ˇcas, m´a automaticky nastavenou vlastnost TRANSP na hodnotu TRANSPARENT. D´ıky tomu neblokuje ˇz´adn´a vyhled´av´an´ı voln´eho ˇci obsazen´eho ˇcasu komponentou VFREEBUSY. Komponenta VJOURNAL m˚ uˇze b´ yt takt´eˇz vztaˇzena k jin´e komponentˇe vlastnost´ı RELATED-TO. 18
Online kalend´aˇre a jejich data
Form´at iCalendar
Pˇr´ıklad z´aznamu do den´ıku: BEGIN:VJOURNAL UID:
[email protected] DTSTAMP:19970901T130000Z DTSTART;VALUE=DATE:19970317 SUMMARY:Staff meeting minutes DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa\, and Bob. Aurora project plans were reviewed. There is currently no budget reserves for this project. Lisa will escalate to management. Next meeting on Tuesday.\n 2. Telephone Conference: ABC Corp. sales representative called to discuss new printer. Promised to get us a demo by Friday.\n3. Henry Miller (Handsoff Insurance): Car was totaled by tree. Is looking into a loaner car. 555-2323 (tel). END:VJOURNAL
Komponenta VFREEBUSY K rezervaci ˇci zjiˇst’ov´an´ı dostupnosti zdroj˚ u slouˇz´ı komponenta VFREEBUSY. D´ıky n´ı lze vytv´aˇret poˇzadavky na zjiˇstˇen´ı dostupnosti zdroje, odpov´ıdat na tyto poˇzadavky a nebo lze napevno nastavit obsazenost zdroje nebo ˇcasov´eho intervalu. Pˇr´ıklad poˇzadavku na zjiˇstˇen´ı voln´eho ˇcasu (ORGANIZER je tazatel, ATTENDEE je t´azan´ y): BEGIN:VFREEBUSY UID:
[email protected] ORGANIZER:mailto:jane\
[email protected] ATTENDEE:mailto:john\
[email protected] DTSTART:19971015T050000Z DTEND:19971016T050000Z DTSTAMP:19970901T083000Z END:VFREEBUSY
19
Online kalend´aˇre a jejich data
Form´at iCalendar
Komponenta VALARM Tato komponenta slouˇz´ı k reprezentaci alarmu nebo upozornˇen´ı k nˇejak´e ud´alosti nebo u ´kolu a mus´ı obsahovat vlastnosti ACTION a TRIGGER. Vlastnost ACTION urˇcuje, co se m´a st´at po spuˇstˇen´ı alarmu (napˇr´ıklad pˇrehr´an´ı zvuku, zobrazen´ı hl´aˇsky ˇci odesl´an´ı emailu). Vlastnost TRIGGER urˇcuje, kdy bude alarm spuˇstˇen. Pˇr´ıklad alarmu pˇrehr´avaj´ıc´ıho zvuk 4x v 15ti minutov´ ych intervalech: BEGIN:VALARM TRIGGER;VALUE=DATE-TIME:19970317T133000Z REPEAT:4 DURATION:PT15M ACTION:AUDIO ATTACH;FMTTYPE=audio/basic:ftp://example.com/pub/ sounds/bell-01.aud END:VALARM
Komponenta VTIMEZONE ˇ Komponenta VTIMEZONE slouˇz´ı k definici ˇcasov´e z´ony. Casov´ ych z´on m˚ uˇze kalend´aˇr obsahovat v´ıce, pokud maj´ı jedineˇcn´e TZID. Mezi hlavn´ı vlastnosti ˇcasov´e z´ony patˇr´ı zm´ınˇen´e TZID. TZID je textov´a hodnota, kter´a je pro kaˇzdou ˇcasovou z´onu unik´atn´ı. Kaˇzd´a komponenta VTIMEZONE mus´ı d´ale definovat alespoˇ n jednu ze subkomponent STANDARD (ekvivalence zimn´ıho ˇcasu) nebo DAYLIGHT (ekvivalence letn´ıho ˇcasu). Obˇe tyto subkomponenty mus´ı d´ale definovat vlastnosti TZOFFSETFROM a TZOFFSETTO, kter´e definuj´ı ˇcasov´ y posun (offset) v dan´e ˇcasov´e z´onˇe oproti UTC (Coordinated ˇ Universal Time). Casov´ e z´ony mohou tak´e obsahovat opakov´an´ı. ˇ Pˇr´ıkladem m˚ uˇze b´ yt definice ˇcasov´e z´ony kalend´aˇre pro Ceskou republiku. BEGIN:VTIMEZONE TZID:Europe/Prague X-LIC-LOCATION:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 20
Online kalend´aˇre a jejich data
Form´at iCalendar
TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE Z pˇr´ıkladu je zˇrejm´e opakov´an´ı zmˇen vˇzdy posledn´ı nedˇeli v bˇreznu a ˇr´ıjnu z d˚ uvodu stˇr´ıd´an´ı letn´ıho a zimn´ıho ˇcasu. Jsou tak´e vidˇet ˇcasov´e posuny (TZOFFSETFROM a TZOFFSETTO) v obou subkomponent´ach (DAYLIGHT a STANDARD).
3.2.5
Vyuˇ zit´ı a pouˇ zit´ı
Standard iCalendar je urˇcen k popisu kalend´aˇrov´ ych dat a je to souˇcasnˇe nejpouˇz´ıvanˇejˇs´ı standard v t´eto oblasti. Tento form´at je podporov´an mnoha kalend´aˇrov´ ymi aplikacemi, napˇr´ıklad Google Calendar, iCal (Apple), Microsoft Outlook, Yahoo! Calendar, Mozzila Thunderbird a dalˇs´ı. Standard iCalendar je navrˇzen tak, aby byl nez´avisl´ y na pˇren´aˇsen´em protokolu. S´am o sobˇe ani nedefinuje, jak kalend´aˇrov´a data pˇren´aˇset. Pro pˇrenos tˇechto dat se pouˇz´ıvaj´ı jin´e protokoly. Obecnˇe nejzn´amˇenˇs´ım prokolem pro transport kalend´aˇrn´ıch informac´ı je protokol CalDAV (RFC 47915 ). CalDAV souˇcasnˇe umoˇzn ˇuje pˇr´ıstup k tˇemto dat˚ um na stranˇe serveru a jejich spr´avu. Dalˇs´ım protokolem m˚ uˇze b´ yt iTIP (RFC 55466 ). 5 6
http://tools.ietf.org/html/rfc4791 http://tools.ietf.org/html/rfc5546
21
Online kalend´aˇre a jejich data
3.2.6
Form´at iCalendar
Knihovny
Existuje mnoho knihoven pro r˚ uzn´e programovac´ı jazyky, kter´e poskytuj´ı n´astroje pro spr´avu soubor˚ u ve form´atu iCalendar. Mezi nejzn´amˇejˇs´ı knihovny pro programovac´ı jazyk Java patˇr´ı: • iCal4j - http://wiki.modularity.net.au/ical4j/, • biweekly - http://sourceforge.net/projects/biweekly/, • Free Association (libical) http://sourceforge.net/projects/freeassociation/, • Mulberry iCalendar library http://trac.mulberrymail.com/repos/wiki/icalendar.
22
4 Zad´an´ı C´ılem pr´ace je vytvoˇren´ı aplikace slouˇz´ıc´ı ke generov´an´ı ˇcasov´ ych statistik z kalend´aˇrov´ ych dat. Aplikace bude umˇet zpracovat soubory ve form´atu iCalendar, vypoˇc´ıtat z nich pˇr´ısluˇsn´e statistick´e informace (dle nastaven´ı uˇzivatele) a n´aslednˇe statistiky uˇzivateli zobrazit. D´ale bude moˇzn´e parsovat1 kl´ıˇcov´a slova (viz 5.3.2) z pˇredmˇet˚ u ud´alost´ı zvolen´eho kalend´aˇre. Kl´ıˇcov´a slova slouˇz´ı jako popisy skupin ud´alost´ı nebo kategori´ı, do kter´ ych lze ud´alosti zaˇrazovat a budou hlavn´ım podkladem pro poˇc´ıt´an´ı statistik.
4.1
´ cel Uˇ
Aplikace byla vytvoˇrena za u ´ˇcelem poˇc´ıt´an´ı statistik z kalend´aˇrov´ ych dat. V´ ystupy aplikace obsahuj´ı sumarizace trv´an´ı ud´alost´ı za urˇcit´a ˇcasov´a obdob´ı. Tyto sumarizace mohou poskytovat pˇrehled o ˇcasov´e n´aroˇcnosti dan´eho u ´kolu ˇci mohou poslouˇzit jako podklady pˇri vykazov´an´ı str´aven´eho ˇcasu. V´ıce o vyuˇzit´ı aplikace lze naj´ıt v sekci 1.2.
4.2
Funkˇ cnosti aplikace
Postup generov´an´ı statistik se d´a povaˇzovat za kr´atk´e workflow2 se 4 hlavn´ımi kroky: 1. naˇcten´ı kalend´aˇre / kalend´aˇr˚ u, 2. nastaven´ı parsov´an´ı kl´ıˇcov´ ych slov, 3. nastaven´ı statistik, 4. export. Naˇ cten´ı kalend´ aˇ re / kalend´ aˇ r˚ u Aplikace umoˇzn ˇuje vloˇzen´ı v´ıce kalend´aˇr˚ u (neboli v´ıce soubor˚ u ve form´atu 1 2
parsov´ an´ı = proces rozdˇelov´an´ı textu na menˇs´ı ˇc´asti vyhovuj´ıc´ı nˇejak´emu vzoru workflow - pracovn´ı postup, pr˚ ubˇeh pracovn´ı operace
23
Zad´an´ı
Funkˇcnosti aplikace
iCalendar). Soubory je moˇzn´e do aplikace vkl´adat bud’ z lok´aln´ıho um´ıstˇen´ı v poˇc´ıtaˇci nebo pˇres adresu URL v internetu. Reference na tyto kalend´aˇre je moˇzn´e uloˇzit do souboru ve form´atu XML. Soubor m´a n´azev data icr.xml, kde icr“ v n´azvu znamen´a ical representation“. Po spuˇstˇen´ı se aplikace po” ” kus´ı tento soubor naj´ıt a naˇc´ıst z nˇeho dˇr´ıve uloˇzen´e reference. Je d˚ uleˇzit´e m´ıt na pamˇeti, ˇze aktualizace tohoto souboru se prov´ad´ı manu´alnˇe stisknut´ım tlaˇc´ıtka Save. Pokud uˇzivatel pˇrid´a nˇejak´ y kalend´aˇr a neuloˇz´ı, po restartu aplikace kalend´aˇr v seznamu nebude. Nastaven´ı parsov´ an´ı kl´ıˇ cov´ ych slov Kl´ıˇcov´a slova je moˇzn´e do aplikace nahr´at bud’ ze souboru (form´at CSV3 ) nebo je vyparsovat. Nastaven´ı parsov´an´ı kl´ıˇcov´ ych slov: • zdrojov´ y kalend´ aˇ r: kalend´aˇr, z jehoˇz ud´alost´ı se kl´ıˇcov´a slova parsuj´ı, • minim´ aln´ı v´ yskyt: minim´aln´ı v´ yskyt kl´ıˇcov´eho slova, • regul´ arn´ı v´ yraz: hled´an´ı kl´ıˇcov´ ych slov odpov´ıdaj´ıc´ıch regul´arn´ımu v´ yrazu, • ˇ casov´ e obdob´ı: nastaven´ı ˇcasov´eho obdob´ı, ze kter´eho se budou kl´ıˇcov´a slova parsovat, • odstranˇ en´ı diakritiky: ignorace diakritiky, • rozliˇ sen´ı velk´ ych a mal´ ych p´ısmen: ignorace velk´ ych a mal´ ych p´ısmen. Do seznamu vyparsovan´ ych kl´ıˇcov´ ych slov lze d´ale pˇridat i nˇejak´e v´ yjimeˇcn´e kl´ıˇcov´e slovo, kter´e nevyhovovalo nastaven´ı, ale i pˇresto je povaˇzov´ano za kl´ıˇcov´e. Souˇcasnˇe je moˇzn´e i nˇejak´a odebrat. Nastaven´ı statistik Nastaven´ı statistik m´a b´ yt variabiln´ı a obsahovat n´asleduj´ıc´ı moˇznosti: • granularita: spojov´an´ı ud´alost´ı do skupin podle dn˚ u, t´ ydn˚ u, mˇes´ıc˚ u a rok˚ u, • jednotka v´ ystupu: specifikace jednotky v´ ystupu (minuty, hodiny nebo dny), 3
Coma-separated values
24
Zad´an´ı
Funkˇcnosti aplikace
• zahrnut´ı jednotliv´ ych ud´ alost´ı: vyps´an´ı jednotliv´ ych ud´alost´ı v ˇcasov´e skupinˇe, – zahrnout datum: zobrazen´ı data ud´alosti, – zahrnout den: zobrazen´ı dne v t´ ydnu ud´alosti, – zahrnout od-do: zobrazen´ı ˇcasu zaˇca´tku a konce ud´alosti, • zahrnout pr´ azdn´ eˇ r´ adky: zobrazen´ı skupin spadaj´ıc´ıch do ˇcasov´eho intervalu neobsahuj´ıc´ıch ˇza´dnou ud´alost, • ˇ casov´ e obdob´ı: nastaven´ı ˇcasov´eho obdob´ı, z kter´eho se budou statistiky generovat, • v´ ystupn´ı form´ at: nastaven´ı v´ ystupn´ıho form´atu statistik. Export Veˇsker´e nastaven´ı zvolen´e v pˇredchoz´ıch kroc´ıch je nyn´ı aplikov´ano do generov´an´ı samotn´ ych statistik. Jelikoˇz statistick´e informace jsou strukturov´any do tabulky, je nejvhodnˇejˇs´ım form´atem uloˇzen´ı form´at aplikace Microsoft Excel XLS nebo XLSX. Souˇcasnˇe bude umoˇznˇen export do form´atu HTML. Po u ´spˇeˇsn´em vygenerov´an´ı do vybran´eho form´atu se statistiky bud’ uloˇz´ı na zvolen´e m´ısto, nebo pouze otevˇrou. Pokud by pˇri generov´an´ı nastala chyba, je o n´ı uˇzivatel informov´an a chyba je logov´ana.
25
5 Implementace 5.1
Architektura aplikace
Architektura aplikace je navrˇzena tak, aby byla aplikace jednoduˇse pˇrenositeln´a na jin´e platformy. J´adro se pˇri pˇrenosu na jinou platformu ˇci jin´ y typ aplikace (napˇr. webov´a aplikace) nemˇen´ı. Aplikace se ovl´ad´a grafick´ ym uˇzivatelsk´ ym rozhran´ım, kter´e je oddˇelen´e od aplikaˇcn´ı a datov´e vrstvy. Aplikaˇcn´ı vrstva pˇredstavuje jak´esi j´adro aplikace.
5.2
Popis architektury
Architektura je standardnˇe rozdˇelena na 3 ˇca´sti (viz obr´azek 5.1): j´adro, datov´a vrstva a vrstva uˇzivatelsk´eho rozhran´ı (prezentaˇcn´ı vrstva). Aplikace se ˇr´ıd´ı pˇr´ıkazy z prezentaˇcn´ı vrstvy, ve kter´e jsou prov´adˇeny hlavn´ı u ´kony uˇzivatele. Datov´a tˇr´ıda prov´ad´ı z´akladn´ı operace s iCal soubory a soubory s vygenerovan´ ymi statistikami. Souˇcasnˇe tato vrstva poskytuje standardn´ı n´astroje pro pr´aci se soubory (ukl´ad´an´ı, otev´ır´an´ı, vytv´aˇren´ı stream˚ u apod.). J´adro aplikace tvoˇr´ı tˇr´ıdy zajiˇst’uj´ıc´ı responzivnost uˇzivatelsk´eho rozhran´ı pˇri d´eletrvaj´ıc´ıch operac´ıch a tˇr´ıdy pro generov´an´ı samotn´ ych statistik.
5.2.1
Technologie
Aplikace byla vyv´ıjena v programovac´ım jazyce Java verze 7 a pouˇz´ıv´a dalˇs´ı zn´am´e souvisej´ıc´ı technnologie, napˇr´ıklad Swing pro tvorbu uˇzivatelsk´ ych rozhran´ı a r˚ uzn´e knihovny umoˇzn ˇuj´ıc´ı integraci jin´ ych komponent. Pouˇ zit´ e knihovny V aplikaci vytvoˇren´e v r´amci t´eto bakal´aˇrsk´e pr´ace byla pro pr´aci s kalend´aˇrov´ ymi daty zvolena knihovna iCal4j1 verze 1.0.5. V oblasti zpracov´an´ı 1
iCal4j: http://wiki.modularity.net.au/ical4j/index.php?title=Main_Page
26
Implementace
Popis architektury
Obr´azek 5.1: Z´akladn´ı design architektury aplikace iCal soubor˚ u je jednou z nejpouˇz´ıvanˇejˇs´ıch. Jej´ı dokumentace, byt’ nen´ı pˇr´ıliˇs rozs´ahl´a, obsahuje uk´azkov´e pˇr´ıklady a n´avody, jak knihovnu pouˇz´ıvat. Ve srovn´an´ı napˇr´ıklad s knihovnou biweekly je iCal4j m´ırnˇe sloˇzitˇejˇs´ı, zato podporuje ˇsirˇs´ı spektrum moˇznost´ı, kter´e lze nad kalend´aˇrov´ ymi daty prov´adˇet. Licence knihovny je dostupn´a zde: http://m2.modularity.net.au/ projects/ical4j/license.html. Ke generov´an´ı v´ ystupu do form´at˚ u XLS a XLSX byla pouˇzita knihovna 2 Apache POI verze 3.10. Tato Java knihovna se skl´ad´a z komponent poskytuj´ıc´ıch API pro ˇcten´ı a z´apis soubor˚ u ve form´atu aplikac´ı spoleˇcnosti Microsoft z bal´ıku Microsoft Office. Pouˇzit´e komponenty v t´eto aplikaci jsou HSSF3 (pro souborov´ y form´at XLS) a XSSF4 (pro souborov´ y form´at XLSX). Obˇe komponenty pracuj´ı se seˇsity aplikace Microsoft Excel. Knihovna d´ale podporuje OOXML5 , coˇz je souborov´ y form´at navrˇzen´ y spoleˇcnost´ı Microsoft pro ukl´ad´an´ı kancel´aˇrsk´ ych bal´ık˚ u. Licence t´eto knihovny je dostupn´a 2
Apache POI: http://poi.apache.org/ HSSF = Horrible SpreadSheet Format 4 XSSF = XML SpreadSheet Format 5 OOXML = Office Open XML 3
27
Implementace
Popis architektury
zde: http://www.apache.org/licenses/. Aplikace d´ale ke sv´emu bezchybn´emu bˇehu potˇrebuje dalˇs´ı knihovny (knihovny jsou jiˇz pˇribalen´e v souboru aplikace .jar ). Vˇcetnˇe iCal4j a Apache POI se jedn´a o tyto knihovny: • backport-util-concurrent-3.1.jar, • commons-codec-1.8.jar, • commons-io-1.4.jar, • commons-lang-2.6.jar, • commons-logging-1.1.3.jar, • dom4j-1.6.1.jar, • ical4j-1.0.5.jar, • jcalendar-1.4.jar, • joda-time-2.3.jar, • poi-3.10-FINAL-20140208.jar, • poi-ooxml-3.10-FINAL-20140208.jar, • poi-ooxml-schemas-3.10-FINAL-20140208.jar, • xmlbeans-2.3.0.jar.
5.2.2
Pr˚ uchod architekturou
Nejprve je nutn´e vysvˇetlit v´ yznam tˇr´ıd KeywordBackgroundWorker a ExportBackgroudWorker. Obˇe tˇr´ıdy jsou potomky tˇr´ıdy SwingWorker a umoˇzn ˇuj´ı prov´adˇet d´eletrvaj´ıc´ı operace ve vedlejˇs´ıch vl´aknech. To zaruˇc´ı responzivnost uˇzivatelsk´eho rozhran´ı, kter´e d´ıky tomu v poˇra´dku reaguje na poˇzadavky uˇzivatele, zat´ımco ve vedlejˇs´ı vl´aknech se v pˇr´ıpadˇe tˇr´ıdy KeywordBackgroundWorker parsuj´ı kl´ıˇcov´a slova a v pˇr´ıpadˇe tˇr´ıdy ExportbackgroundWorker se generuj´ı statistiky. Aplikace nen´ı na tˇechto tˇr´ıd´ach z´avisl´a. Jsou pˇr´ıtomny jen proto, aby byla prezentaˇcn´ı vrstva responzivn´ı, jelikoˇz generov´an´ı nˇekter´ ych statistik m˚ uˇze trvat dlouhou dobu. 28
Implementace
Zpracov´an´ı dat
Pr˚ uchod architekturou pro z´ısk´an´ı statistik je n´asleduj´ıc´ı. Nejprve je nutn´e pˇridat kalend´aˇre, ze kter´ ych se budou statistiky generovat. Po pˇrid´an´ı tˇechto referenc´ı se pomoc´ı tˇr´ıdy KeywordBackgroundWorker vyparsuj´ı kl´ıˇcov´a slova. To prob´ıh´a naˇcten´ım kalend´aˇre, kter´ y byl zvolen jako zdroj dat. Instanci tˇr´ıdy ICalFile reprezentuj´ıc´ı kalend´aˇr vytvoˇr´ı tˇr´ıda ICSFilemanager bud’ ze zadan´e URL nebo z lok´aln´ı cesty. Po naˇcten´ı kalend´aˇre zavol´a backgroundworker metodu kalend´aˇre, kter´a podle uˇzivatelsk´eho filtru vyparsuje kl´ıˇcov´a slova a vr´at´ı je prezentaˇcn´ı vrstvˇe k zobrazen´ı. (Pozn´amka: kl´ıˇcov´a slova nen´ı nutn´e parsovat, lze je vloˇzit z jiˇz existuj´ıc´ıho souboru). Po nastaven´ı v´ ystupn´ıch statistik uˇzivatel vybere zdrojov´e kalend´aˇre. Ty jsou dle architektury pˇred´any tˇr´ıdˇe ExportBackgroundWorker, jej´ıˇz v´ yznam je vysvˇetlen v´ yˇse. Tato tˇr´ıda komunikuje s tˇr´ıdou Exporter zaˇrizuj´ıc´ı export statistik. Tˇr´ıda Exporter (dle nastaven´ı uˇzivatele) zvol´ı v´ ystupn´ı form´at a pˇred´a ˇr´ızen´ı tˇr´ıdˇe pro pˇr´ısluˇsn´ y form´at. Tˇemito tˇr´ıdami jsou HTMLOutputFormat a ExcelOutputFormat maj´ıc´ı spoleˇcn´eho pˇredka, abstraktn´ı tˇr´ıdu AOutputFormat s abstraktn´ı metodou generateStatistics(). Vygenerovan´e statistiky v podobˇe instance tˇr´ıdy File jsou vr´aceny tˇr´ıdou Exporter zpˇet do ExportBackgroundWorkeru, kter´ y soubor nakonec vr´at´ı aˇz do prezentaˇcn´ı vrstvy. T´ımto je cel´ y proces generov´an´ı statistik dokonˇcen´ y.
5.3 5.3.1
Zpracov´ an´ı dat Ud´ alosti
Pro pr´aci s ud´alostmi z iCal souboru je potˇreba vytvoˇrit jejich programovou reprezentaci. Touto reprezentac´ı je tˇr´ıda MyEvent funguj´ıc´ı jako wrapper6 tˇr´ıdy VEvent (z knihovny iCal4j) pˇredstavuj´ıc´ı samotnou ud´alost. Tento wrapper byl vytvoˇren z d˚ uvodu implementace rozhran´ı Comparable umoˇzn ˇuj´ıc´ı ˇrazen´ı objekt˚ u definovan´ ym zp˚ usobem. V pˇr´ıpadˇe ud´alost´ı se objekty ˇrad´ı podle data a ˇcasu zaˇca´tku ud´alosti. Dalˇs´ım u ´kolem wrapperu je pˇridat tˇr´ıdˇe VEvent v podobˇe metod funkcionalitu, kter´a bude velmi ˇcasto pouˇz´ıv´ana a kter´a usnadn´ı pr´aci s t´ımto objektem. Pˇr´ıkladem m˚ uˇze b´ yt napˇr´ıklad metoda getDuration(), kter´a vr´at´ı trv´an´ı ud´alosti v zadan´ ych jednotk´ach. 6
wrapper = obalen´ı ˇci zapouzdˇren´ı funkˇcnosti jin´e tˇr´ıdy
29
Implementace
Zpracov´an´ı dat
public double getDuration(Units unit) throws IllegalArgumentException{ Calendar from = null, to = null; double duration = 0; from = Calendar.getInstance(); to = Calendar.getInstance(); from.setTime(event.getStartDate().getDate()); to.setTime(event.getEndDate().getDate()); duration = to.getTime().getTime() / MILISECONDS_PER_MINUTE; duration -= from.getTime().getTime() / MILISECONDS_PER_MINUTE; switch(unit){ case Minutes: ; break; case Hours: duration = duration / MINUTES_PER_HOUR; break; case Days: duration = duration / MINUTES_PER_HOUR / HOURS_PER_DAY; break; default: throw new IllegalArgumentException("Unknow unit: "+unit); } return duration; } Prvn´ım zpracov´an´ım tedy projdou vˇsechny ud´alosti ihned po vytvoˇren´ı objektu kalend´aˇre (instance tˇr´ıdy ICalFile). Tato tˇr´ıda m´a priv´atn´ı atribut events typu TreeSet<MyEvent>. Po vloˇzen´ı vˇsech ud´alost´ı do t´eto kolekce jsou vˇsechny ud´alosti seˇrazeny podle data zaˇc´atku a sn´aze se s nimi pot´e pracuje. Na obr´azku 5.2 je vidˇet struktura tˇr´ıdy MyEvent. Zvl´aˇstn´ı pozornosti se dost´av´a ud´alostem, kter´e maj´ı nastaven´e nˇejak´e pravidlo opakov´an´ı. Po naˇcten´ı vˇsech ud´alost´ı doch´az´ı k filtraci tˇech, kter´e nemaj´ı nastaven´ y konec opakov´an´ı nebo poˇcet opakov´an´ı. Tyto ud´alosti jsou ze seznamu vyjmuty a nejsou do statistik zahrnuty. Naopak ud´alosti, kter´e maj´ı nastaven´ y poˇcet opakov´an´ı nebo datum, kdy opakov´an´ı konˇc´ı, do statistik zahrnuty jsou. Takov´e ud´alosti mus´ı proj´ıt tzv. rozbalovac´ım procesem. Jelikoˇz opakovan´a ud´alost je v iCal souboru reprezentov´ana pouze jedn´ım z´aznamem, je nutn´e takovou ud´alost rozbalit do tolika ud´alost´ı, kolik jich definuje jej´ı pravidlo opakov´an´ı. N´asleduje uk´azka metody 30
Implementace
Zpracov´an´ı dat
Obr´azek 5.2: Struktura tˇr´ıdy MyEvent unwrapRepeatedEventsCOUNT() tˇr´ıdy ICalFile, kter´a rozbaluje opakovan´e ud´alosti s definovan´ ym poˇctem opakov´an´ı. private TreeSet<MyEvent> unwrapRepeatedEventsCOUNT (MyEvent repEvent, int count) throws ParseException, IOException, URISyntaxException{ Property propRRULE = null; Recur recurrence = null; VEvent copy = null; VEvent repeatedEvent = repEvent.getEvent(); TreeSet<MyEvent> events = new TreeSet<>(); net.fortuna.ical4j.model.Date seedSTART = repeatedEvent.getStartDate().getDate(); 31
Implementace
Zpracov´an´ı dat
net.fortuna.ical4j.model.Date seedEND = repeatedEvent.getEndDate().getDate(); net.fortuna.ical4j.model.Date start = repeatedEvent.getStartDate().getDate(); net.fortuna.ical4j.model.Date end = repeatedEvent.getEndDate().getDate(); propRRULE = repeatedEvent.getProperty(Property.RRULE); recurrence = new Recur(propRRULE.getValue()); for(int i = 0 ; i < count-1 ; i++){ start = recurrence.getNextDate(seedSTART, start); end = recurrence.getNextDate(seedEND, end); copy = (VEvent) repeatedEvent.copy(); copy.getStartDate().setDate(start); copy.getEndDate().setDate(end); events.add(new MyEvent(copy)); } return events; } Nyn´ı doch´az´ı ke zpracov´an´ı pˇredmˇetu ud´alosti. Pˇredmˇet ud´alosti je rozdˇelen na slova a dle volby uˇzivatele je aplikov´ano nastaven´ı diakritiky nebo velk´ ych a mal´ ych p´ısmen. Pokud si uˇzivatel pˇreje velk´a a mal´a p´ısmena ignorovat, je cel´ y pˇredmˇet ud´alosti pˇreveden na mal´a p´ısmena. Nejprve se odstran´ı z´avorky, teˇcky, ˇc´arky a jin´e znaky, kter´e nesouvis´ı se slovem, a pot´e se zbyl´ y text rozdˇel´ı podle mezery. Vznikl´a slova se uloˇz´ı ke kaˇzd´e ud´alosti a jsou pozdˇeji vyuˇzita pˇri parsov´an´ı kl´ıˇcov´ ych slov nebo pˇri hled´an´ı, zda ud´alost nˇejak´e kl´ıˇcov´e slovo obsahuje. Posledn´ım m´ıstem, kde se s ud´alostmi pracuje, je generov´an´ı statistik. Ud´alosti vyhovuj´ıc´ı uˇzivatelsk´emu filtru (napˇr. obsahuj´ıc´ı hledan´e kl´ıˇcov´e slovo) jsou zahrnuty do generov´an´ı a z dob jejich trv´an´ı se poˇc´ıtaj´ı v´ ysledn´e souˇcty.
32
Implementace
5.3.2
Zpracov´an´ı dat
Kl´ıˇ cov´ a slova
Kl´ıˇcov´e slovo je takov´e slovo, kter´e se opakuje v pˇredmˇetech ud´alost´ı a z pohledu uˇzivatele hraje nˇejak´ ym zp˚ usobem d˚ uleˇzitou roli. Oznaˇcov´an´ı pˇredmˇet˚ u ud´alost´ı kl´ıˇcov´ ymi slovy umoˇzn ˇuje ud´alosti pomyslnˇe tˇr´ıdit do urˇcit´ ych skupin (ˇci kategori´ı), kdy kaˇzd´a skupina je definov´ana pr´avˇe nˇejak´ ym kl´ıˇcov´ ym slovem. To se hod´ı napˇr´ıklad u aplikace Google Calendar, kter´a sama o sobˇe kategorizaci ud´alost´ı neumoˇzn ˇuje. Kl´ıˇcov´e slovo d´ale neobsahuje b´ıl´e znaky a je omezeno zleva i zprava mezerou (nebo zaˇca´tkem a koncem vˇety apod.).
Zpracov´ an´ı kl´ıˇ cov´ ych slov Parsov´an´ı kl´ıˇcov´ ych slov z pˇredmˇet˚ u ud´alost´ı neprob´ıh´a ihned, ale aˇz po zavol´an´ı metody getKeywordsList() tˇr´ıdy ICalFile, kter´e je souˇcasnˇe pˇred´an filtr kl´ıˇcov´ ych slov. Filtr obsahuje nastaven´ı ohlednˇe diakritiky, datov´eho intervalu ˇci ignoraci velk´ ych a mal´ ych p´ısmen. Pot´e se proch´az´ı vˇsechny ud´alosti a zjiˇst’uje se, jestli ud´alost patˇr´ı do ˇcasov´eho intervalu. Pokud ne, pˇreskoˇc´ı se, pokud ano, slova vygenerovan´a pˇri naˇcten´ı ud´alosti se postupnˇe uloˇz´ı do mapy, jej´ımˇz kl´ıˇcem je slovo a hodnotou je v´ yskyt tohoto slova. Jakmile je v´ yskyt roven minim´aln´ımu v´ yskytu, je slovo vloˇzeno do mnoˇziny kl´ıˇcov´ ych slov. Pˇred vr´acen´ım seznamu s kl´ıˇcov´ ymi slovy se kaˇzd´e kl´ıˇcov´e slovo otestuje proti regul´arn´ımu v´ yrazu (pokud nˇejak´ y uˇzivatel zadal). Pokud slovo v´ yrazu odpov´ıd´a, z˚ ust´av´a v seznamu. Neodpov´ıdaj´ıc´ı slova jsou odebr´ana. Nakonec je seznam se zbyl´ ymi kl´ıˇcov´ ymi slovy vr´acen jako n´avratov´a hodnota metody. Uk´azka metody getKeywordsList() tˇr´ıdy ICalFile vracej´ıc´ı seznam kl´ıˇcov´ ych slov vyhovuj´ıc´ıch filtru. Po zaˇca´tku metody je vol´ana metoda parseWordsInEvents() s 2 parametry z filtru. Tato metoda zajist´ı zpracov´an´ı pˇredmˇetu kaˇzd´e ud´alosti ve smyslu vytvoˇren´ı pole slov s odstranˇenou diakritikou (v pˇr´ıpadˇe ignorace diakritiky) a pˇreveden´ım na mal´a p´ısmena (v pˇr´ıpadˇe ignorace velk´ ych a mal´ ych p´ısmen). public List
getKeywordsList(KeywordsFilter filter){ HashMap<String, Keyword> map = new HashMap<>(); Set keywords_set = new HashSet<>(); Pattern pattern = null; Keyword keyword; 33
Implementace
Zpracov´an´ı dat
List<String> words = null; parseWordsInEvents(filter.case_sensitive, filter.ignore_diacritics); for(MyEvent event: events){ words = event.getWords(); if(filter.isWholeCalendar() || (event.getStartDate().after(filter.getStartDate()) && event.getStartDate().before(filter.getEndDate()))){ //date is OK for (String word : words) { if(word.equals("")) continue; keyword = map.get(word); if (keyword != null) keyword.setOccurrence (keyword.getOccurrence() + 1); else keyword = new Keyword(word, 1); map.put(word, keyword); if(keyword.getOccurrence() >= filter.getOccurrence()) keywords_set.add(keyword); } } } //check if keywords matches to regex if((pattern = filter.getPattern()) != null){ Iterator it = keywords_set.iterator(); while(it.hasNext()) if(!pattern.matcher(((Keyword) it.next()) .getKeyword()).matches()) it.remove(); } return new ArrayList<>(keywords_set); }
34
Implementace
5.4
Generov´an´ı v´ystupu
Generov´ an´ı v´ ystupu
Jelikoˇz obsah a strukturu statistik nejv´ıce ovlivˇ nuje zvolen´a granularita, je pro kaˇzd´ y jej´ı typ vytvoˇrena speci´aln´ı metoda. Kaˇzd´ y typ granularity souˇcasnˇe potˇrebuje data v m´ırnˇe odliˇsn´em form´atu. K tomu je pˇripravena tˇr´ıda DataTransformer zajiˇst’uj´ıc´ı pˇred´an´ı dat statistick´e tˇr´ıdˇe ve vhodn´e struktuˇre. DataTransformer funguje tedy jako jak´asi datov´a nadstavba statistick´e tˇr´ıdy poskytuj´ıc´ı poˇzadovan´a data. Pˇri vytv´aˇren´ı jej´ı instance se j´ı pˇred´a seznam vˇsech ud´alost´ı a pot´e je podle volan´e metody seznam zpracov´an a data jsou vr´acena v pˇr´ısluˇsn´e struktuˇre. Metody tˇr´ıdy DataTransformer jsou n´asleduj´ıc´ı (podle n´azv˚ u je zˇrejm´e, jak´a data metoda vrac´ı): • getDataPerIndividualEvents(DateRange date_range) - n´avratovou hodnotou metody je seznam ud´alost´ı, kter´e vyhovuj´ı ˇcasov´emu intervalu. Jelikoˇz jsou ud´alosti odeb´ır´any z kolekce TreeSet (kde jsou seˇrazeny) a zpracov´av´any sekvenˇcnˇe, jsou i ve v´ ysledn´em seznamu seˇrazeny. • getDataPerDays(DateRange date_range) - n´avratovou hodnotou metody je mapa s ud´alostmi po dnech. Jedn´a se o instanci TreeMap<String, List<MyEvent> >, kde kl´ıˇcem je datum v podobˇe ˇretˇezce ve form´atu dd.MM.yyyy. Mapa m´a pˇrekryt´ y kompar´ator pro spr´avn´e ˇrazen´ı podle kl´ıˇce. Pˇri pr˚ uchodu vˇsech ud´alost´ı se zjist´ı datum zaˇca´tku ud´alosti a dle nˇeho je ud´alost vloˇzena do pˇr´ısluˇsn´eho seznamu. • getDataPerWeeks(DateRange date_range) - n´avratovou hodnotou metody je opˇet mapa s ud´alostmi po t´ ydnech. Opˇet se jedn´a o TreeMap, kde kl´ıˇcem je vˇzdy pondˇeln´ı datum dan´eho t´ ydne. Pˇri pr˚ uchodu vˇsech ud´alost´ı se zjist´ı pondˇeln´ı datum t´ ydne, kdy ud´alost zaˇc´ın´a, a podle toho se ud´alost vloˇz´ı do pˇr´ısluˇsn´eho seznamu. • getDataPerMonths(DateRange date_range) - opˇet se jedn´a o TreeMap, kde kl´ıˇcem je mˇes´ıc a rok, napˇr´ıklad June 2014“. Ud´alosti vyhovuj´ıc´ı ” datov´emu intervalu se opˇet dle mˇes´ıce zaˇca´tku zaˇrad´ı do pˇr´ısluˇsn´eho seznamu. • getDataPerYears(DateRange date_range) - kl´ıˇcem mapy tentokr´at nen´ı ˇretˇezec ale Integer (proto u t´eto mapy nen´ı nutn´e pˇrekr´ yvat kompar´ator), pˇredstavuj´ıc´ı rok. Ud´alosti se zaˇrazuj´ı do seznam˚ u podle roku jejich zaˇca´tku. 35
Implementace
Generov´an´ı v´ystupu
T´emˇeˇr ve vˇsech metod´ach, kde jsou pouˇzity mapy, jsou pˇrekryty speci´aln´ı kompar´atory, aby bylo ˇrazen´ı dle kl´ıˇce mapy vˇzdy spr´avn´e. Souˇcasnˇe kaˇzd´a metoda filtruje ud´alosti nevyhovuj´ıc´ı ˇcasov´emu intervalu. Pˇri v´ ystupu z metod jsou granularitn´ı skupiny seˇrazeny od nejstarˇs´ı po nejnovˇejˇs´ı. Ve statistik´ach jsou tak´e obsaˇzeny souˇcty trv´an´ı ud´alost´ı, kter´e vybran´a kl´ıˇcov´a slova neobsahuj´ı. Jelikoˇz je ud´alost´ı obecnˇe mnoho, nen´ı v´ yhodn´e, aby se nejdˇr´ıve zjiˇst’ovaly ud´alosti, kter´e kl´ıˇcov´e slovo obsahuj´ı, a nˇekdy pot´e ud´alosti, kter´e kl´ıˇcov´e slovo neobsahuj´ı. Toto je v aplikaci vyˇreˇseno zp˚ usobem, kdy se ud´alosti vr´acen´e tˇr´ıdou DataTransformer proch´azej´ı znovu (DataTransformer totiˇz vr´at´ı pouze poˇzadovanou strukturu a ud´alosti vnˇe ˇcasov´eho intervalu, o kl´ıˇcov´a slova se nezaj´ım´a) a rozdˇeluj´ı se do dvou seznam˚ u; na ud´alosti, kter´e nˇejak´e kl´ıˇcov´e slovo obsahuj´ı a kter´e ˇza´dn´e takov´e slovo neobsahuj´ı. Potom uˇz jsou vˇsechny potˇrebn´e skupiny ud´alost´ı vytvoˇreny a jsou pouˇzity v metod´ach poˇc´ıtaj´ıc´ıch souˇcty. Statistick´e tˇr´ıdy souˇcasnˇe ˇreˇs´ı zahrnut´ı pr´azdn´ ych ˇra´dk˚ u, kter´e m˚ uˇze uˇzivatel poˇzadovat. Jedn´a se o zobrazen´ı granularitn´ı skupiny ud´alost´ı, kter´a je pr´azdn´a (tj. nem´a ˇza´dn´e ud´alosti). Ve statistik´ach budou pot´e na pˇr´ısluˇsn´em ˇra´dku zobrazeny 0. Na to je ve tˇr´ıdˇe pro kaˇzd´ y typ granularity pˇripravena metoda, kter´a zjiˇst’uje, jestli je n´asleduj´ıc´ı kl´ıˇc pˇr´ım´ ym n´asledovn´ıkem pˇredchoz´ıho. Pokud nen´ı, metoda vytvoˇr´ı pr´azdn´ y list a vloˇz´ı ho do mapy. Metoda tak´e zohledˇ nuje ˇcasov´ y interval statistik a za posledn´ı ud´alost´ı jiˇz pr´azdn´ y list nevytvoˇr´ı, i kdyˇz je koncov´e datum intervalu jeˇstˇe pozdˇejˇs´ı. Pˇr´ıklad: posledn´ı ud´alost m´a zaˇca´tek 13.5.2014 a uˇzivatel zvol´ı jako koncov´e datum denn´ıch statistik 15.5.2014. Skupina ud´alost´ı odpov´ıdaj´ıc´ı dat˚ um 14.5. a 15.5. jiˇz v mapˇe nebude. D´ıky tˇemto pr´azdn´ ym list˚ um se v metod´ach generuj´ıc´ıch v´ ystup nemus´ı ˇreˇsit, zda jsou pro n´asleduj´ıc´ı skupinu data ˇci nikoli a k´od metod tak z˚ ust´av´a stejn´ y.
5.4.1
Poˇ c´ıt´ an´ı souˇ ct˚ u
Po z´ısk´an´ı pˇr´ısluˇsn´ ych dat si uˇz statistick´a tˇr´ıda poˇc´ıt´a souhrny sama. Jelikoˇz vˇzdy dostane pro danou granularitu uˇz pˇripraven´e skupiny ud´alost´ı, je velmi jednoduch´e souˇcty spoˇc´ıtat. Ke zjiˇstˇen´ı trv´an´ı ud´alosti je pouˇzita metoda getDuration() tˇr´ıdy ExcelOutputFormat (internˇe volaj´ıc´ı metodu getDuration() tˇr´ıdy MyEvent). Ta m´a dva parametry, z nichˇz jedn´ım je ud´alost (MyEvent) a druh´ ym je kl´ıˇcov´e slovo, pro kter´e se trv´an´ı aktu´alnˇe poˇc´ıt´a 36
Implementace
Generov´an´ı v´ystupu
(ud´alost m˚ uˇze obsahovat v´ıce kl´ıˇcov´ ych slov). Pokud ud´alost kl´ıˇcov´e slovo neobsahuje, vr´at´ı metoda 0, jinak vr´at´ı trv´an´ı ud´alosti ve specifikovan´ ych jednotk´ach. Ke zjiˇstˇen´ı celkov´eho trv´an´ı skupiny ud´alost´ı dan´e granularity se tato metoda vol´a pro kaˇzdou ud´alost opakovanˇe a souˇcty se sˇc´ıtaj´ı. Ud´alost trvaj´ıc´ı pˇres p˚ ulnoc je zapoˇc´ıt´ana do dne, kdy zaˇcala. To m˚ uˇze b´ yt matouc´ı, jelikoˇz napˇr´ıklad ud´alost zaˇc´ınaj´ıc´ı v 23:55 a trvaj´ıc´ı 5 hodin trv´a vˇetˇsinu sv´eho ˇcasu n´asleduj´ıc´ı den. Jej´ı trv´an´ı je ovˇsem zapoˇc´ıt´ano do dne, kdy zaˇcala. To uˇz je pouze vˇec´ı n´azoru, jak chce uˇzivatel tento probl´em ˇreˇsit. Aplikace ho ˇreˇs´ı popsan´ ym zp˚ usobem. Rozdˇelen´ı ud´alosti podle p˚ ulnoci m˚ uˇze b´ yt dalˇs´ım t´ematem moˇzn´eho rozˇs´ıˇren´ı aplikace. P˚ uvodnˇe bylo zam´ yˇsleno nepoˇc´ıtat hlavn´ı souˇcty v aplikaci, ale pouze vytvoˇrit vzorec do buˇ nky v Excelu, kter´ y by souˇcet spoˇc´ıtal s´am. Zde bohuˇzel nastal probl´em kv˚ uli internacionalizaci. Jelikoˇz ne vˇsichni uˇzivatel´e pouˇz´ıvaj´ı stejnou lokalizaci Excelu, nen´ı moˇzn´e napˇr´ıklad vzorec pro souˇcet pouˇz´ıt. V ˇcesk´e lokalizaci se vzorec naz´ yv´a SUMA, v anglick´e SUM.
5.4.2
V´ ystupn´ı form´ aty
Generov´an´ı v´ ystupu prob´ıh´a ve tˇr´ıde reprezentuj´ıc´ı v´ ystupn´ı form´at statistik. Na zaˇca´tek je d˚ uleˇzit´e ˇr´ıci, ˇze aplikace podporuje pouze form´aty XLS, XLSX a HTML. Form´aty XLS a XLSX jsou zahrnuty v jedn´e tˇr´ıdˇe a jedin´e rozliˇsen´ı mezi nimi je vol´an´ı jin´eho konstruktoru. Knihovna Apache POI definuje rozhran´ı Workbook, kter´e implementuj´ı tˇr´ıdy HSSFWorkbook (pro form´at XLS) a XSSFWorkbook (pro form´at XLSX). D´ale se pˇri pr´aci se seˇsitem t´emˇeˇr nerozliˇsuje, zda se jedn´a o seˇsit typu XLS nebo XLSX. Form´at si knihovna ˇreˇs´ı internˇe. Jedin´e rozliˇsen´ı, na kter´e se musel br´at ohled, bylo ve stylov´an´ı seˇsitu, konkr´etnˇe pˇri nastavov´an´ı pozad´ı buˇ nky. Ke generov´an´ı form´atu HTML jsou pouˇzity tak´e tˇr´ıdy z knihovny Apache POI. Za pomoci tˇechto tˇr´ıd lze konvertovat existuj´ıc´ı Excel soubor do form´atu HTML, a to vˇcetnˇe kask´adov´ ych styl˚ u. Proto pˇri zvolen´em v´ ystupn´ım form´atu HTML nejdˇr´ıve dojde k vygenerov´an´ı statistik do form´atu XLS a z toho n´aslednˇe do HTML. Knihoven pro pr´aci s tˇemito form´aty je mnoho. Apache POI bylo pouˇzito na z´akladˇe mnoha pˇr´ıklad˚ u, n´avod˚ u a zejm´ena uˇzivatelsk´ ych recenz´ı, napˇr´ıklad: http://stackoverflow.com/questions/14980717/.
37
Implementace
5.5
Uˇzivatelsk´e rozhran´ı
Uˇ zivatelsk´ e rozhran´ı
Grafick´e uˇzivatelsk´e rozhran´ı vyuˇz´ıv´a pouze Swingov´e technologie a komponenty. Jedinou v´ yjimkou, kter´a standardnˇe nepatˇr´ı do Swingu, ale je v aplikaci vyuˇzita, je komponenta pro v´ ybˇer data. Jelikoˇz Swing takovou komponentu nenab´ız´ı, bylo potˇreba pouˇz´ıt nˇejakou alternativu. Touto alternativou je knihovna jCalendar 7 , jej´ımˇz autorem je Kai T¨odter. Knihovna poskytuje komponenty pro v´ ybˇer cel´eho data nebo jen roku apod. a doplˇ nuje zmiˇ novan´ y nedostatek technologie Swing. Ke tvorbˇe uˇzivatelsk´eho rozhran´ı byl pouˇzit editor ve v´ yvojov´em prostˇred´ı 8 NetBeans 8.0 , ve kter´em je tvorba uˇzivatelsk´ ych rozhran´ı snadn´a. Vˇsechny komponenty v uˇzivatelsk´em rozhran´ı, kter´e spolu nˇejak souvis´ı, jsou vkl´ad´any do skupin v podobˇe instanc´ı tˇr´ıdy JPanel. Kaˇzd´ y tento panel v aplikaci m´a rozvrˇzen´ı GridBagLayout, se kter´ ym se velmi snadno pracuje. Cel´a aplikace je um´ıstˇena do komponenty JTabbedPane umoˇzn ˇuj´ıc´ı pouˇz´ıvat karty (z´aloˇzky). V pˇr´ıpadˇe t´eto aplikace m´a tato komponenta 4 karty: pro kalend´aˇre, kl´ıˇcov´a slova, statistiky a export.
5.5.1
Modely a renderery
Modely a renderery [4] neboli vykreslovaˇce hraj´ı pˇri tvorbˇe prezentaˇcn´ı vrstvy velmi d˚ uleˇzitou roli. Modely definuj´ı co“ se m´a zobrazit a renderery definuj´ı ” jak“ se to m´a zobrazit. Modelem je tˇr´ıda implementuj´ıc´ı rozhran´ı, pˇres kter´e ” grafick´a komponenta pˇristupuje k dat˚ um. V´ yhodou tˇechto model˚ u je oddˇelen´ı prezentaˇcn´ı vrstvy od aplikaˇcn´ı vrstvy. Renderery se pouˇz´ıvaj´ı ve chv´ıli, kdy je poˇzadov´ana nˇejak´a zmˇena v zobrazov´an´ı dat oproti standardn´ımu zobrazen´ı. Vykreslovaˇc˚ u je v´ıce typ˚ u. Existuj´ı vykreslovaˇce pro tabulky (JTable), pro seznamy (JList), pro rozj´ıˇzdˇec´ı pole (JComboBox) a dalˇs´ı. Podobnˇe jako u model˚ u m´a kaˇzd´a komponenta sv´e rozhran´ı definuj´ıc´ı jak“ se budou data vykreslovat. Pokud chce uˇzivatel ” nˇeco zobrazit jinak neˇz standardnˇe, staˇc´ı implementovat rozhran´ı dan´e komponenty. Pot´e staˇc´ı uˇz jen instanci t´eto tˇr´ıdy nastavit komponentˇe jako jej´ı renderer.
7 8
jCalendar: http://toedter.com/jcalendar/ NetBeans: https://netbeans.org/
38
Implementace
Uˇzivatelsk´e rozhran´ı
Modely v aplikaci Aplikace obsahuje 3 modely k zobrazov´an´ı dat. Prvn´ım modelem je CalendarsComboBoxModel, kter´ y je zdrojem dat pro rozj´ıˇzdˇec´ı menu s v´ ybˇerem kalend´aˇre. Druh´ ym modelem je ICalRepresentationTableModel, kter´ y obsahuje data pro tabulku s vloˇzen´ ymi kalend´aˇri v aplikaci. Posledn´ım modelem je KeywordsTableModel, kter´ y je zdrojem dat pro dvˇe tabulky zobrazuj´ıc´ı kl´ıˇcov´a slova. Jelikoˇz obˇe tabulky zobrazuj´ı stejn´a data, je instance tohoto modelu pˇred´ana obˇema tabulk´am a nen´ı nutn´e vytv´aˇret modely dva. Renderery v aplikaci V aplikaci je pouze 1 renderer, a to pro rozj´ıˇzdˇec´ı menu pro v´ ybˇer kalend´aˇre pˇri parsov´an´ı kl´ıˇcov´ ych slov. V ostatn´ıch pˇr´ıpadech nebyla implementace jin´eho vykreslovaˇce nutn´a, nebot’ k vykreslov´an´ı dat v jin´ ych komponent´ach staˇcilo z´akladn´ı nastaven´ı. T´ım jedin´ ym vykreslovaˇcem je CalendarsComboBoxCellRenderer pro v´ ybˇer kalend´aˇre z komponenty JComboBox. Ten definuje, jak´ y text bude uveden v rozj´ıˇzdˇec´ım poli pˇri v´ ybˇeru kalend´aˇre.
5.5.2
Integrace s aplikaˇ cn´ı vrstvou
Dvˇe hlavn´ı m´ısta, kde prezentaˇcn´ı vrstva komunikuje s vrstvou aplikaˇcn´ı, jsou pˇri parsov´an´ı kl´ıˇcov´ ych slov a pˇri generov´an´ı statistik. Parsov´an´ı kl´ıˇcov´ ych slov se spouˇst´ı stisknut´ım tlaˇc´ıtka PARSE. Po jeho stisknut´ı aplikace vytvoˇr´ı instanci tˇr´ıdy KeywordsFilter a nastav´ı jej´ı atributy podle uˇzivatelsk´eho nastaven´ı v aplikaci. Souˇcasnˇe se prov´ad´ı testy spr´avnosti tohoto uˇzivatelsk´eho nastaven´ı. Pokud nˇeco nen´ı nastaveno nebo vyplnˇeno spr´avnˇe, zobraz´ı se chybov´a hl´aˇska. N´asleduje vytvoˇren´ı instance tˇr´ıdy KeywordBackgroundWorker, kter´e se pˇred´a tento filtr, d´ale model kl´ıˇcov´ ych slov, do kter´eho budou vyparsovan´a kl´ıˇcov´a slova vloˇzena a samozˇrejmˇe instance tˇr´ıdy ICalRepresentation jako zdrojov´ y kalend´aˇr pro parsov´an´ı. Nyn´ı se jen zavol´a metoda execute() tˇr´ıdy KeywordBackgroundWorker, kter´a ve vedlejˇs´ım vl´aknˇe provede parsov´an´ı. Podobnˇe funguje generov´an´ı statistik. Po stisknut´ı tlaˇc´ıtka Export se vytvoˇr´ı instance tˇr´ıdy ExportConfiguration reprezentuj´ıc´ı nastaven´ı statistik a nastav´ı se podle voleb uˇzivatele v aplikaci. Nyn´ı se vytvoˇr´ı instance tˇr´ıdy ExportBackgroundWorker, kter´e se pˇred´a seznam zvolen´ ych kalend´aˇr˚ u, ze kter´ ych se bude generovat, d´ale seznam vyparsovan´ ych kl´ıˇcov´ ych slov a samozˇrejmˇe zmiˇ novan´e nastaven´ı statistik. Zavol´an´ım metody execute() tˇr´ıdy
39
Implementace
Uˇzivatelsk´e rozhran´ı
ExportBackgroundWorker dojde ke spuˇstˇen´ı samotn´eho generov´an´ı. Tomuto workeru je tak´e pˇrid´an posluchaˇc ud´alosti PropertyChange; tato ud´alost je vyvol´ana uvnitˇr workeru po dokonˇcen´ı generov´an´ı. V obsluze ud´alosti se soubor s v´ ysledn´ ymi statistikami dle nastaven´ı uˇzivatele bud’ otevˇre nebo uloˇz´ı.
5.5.3
Vyuˇ zit´ı ud´ alost´ı
Kaˇzd´a komponenta definuje sv˚ uj seznam ud´alost´ı, kter´e mohou pˇri jej´ım pouˇz´ıv´an´ı nastat. Tyto ud´alosti mohou m´ıt nˇejakou obsluhu v podobˇe posluchaˇc˚ u (listener˚ u), jejichˇz k´od se provede pˇri nast´an´ı dan´e ud´alosti. Jelikoˇz je toto t´ema velmi rozs´ahl´e, jsou zde pops´any jen nˇejak´a konkr´etn´ı vyuˇzit´ı ud´alost´ı v t´eto aplikaci. Ud´alosti jsou vyuˇzity napˇr´ıklad pˇri r˚ uzn´em povolov´an´ı a zakazov´an´ı tlaˇc´ıtek ˇci jin´ ych komponent. Napˇr´ıklad tlaˇc´ıtko PARSE pˇri parsov´an´ı kl´ıˇcov´ ych slov je aktivn´ı pouze tehdy, je-li zvolen´ ym zdrojem kalend´aˇr a rovnou je nˇejak´ y vybran´ y. Ud´alost´ı je tedy volba (nebo zmˇena) kalend´aˇre v rozj´ıˇzdˇec´ım poli a obsluhou je aktivace ˇci deaktivace tlaˇc´ıtka. Nastaven´ı aktivity pol´ı Include dates, Include Day of Week names a Include from-to je opˇet podm´ınˇeno zaˇskrtnut´ım pole Include events, kde ud´alost´ı je zmˇena zaˇskrtnut´ı a obsluhou je aktivace ˇci deaktivace zm´ınˇen´ ych 3 pol´ı. Ostatnˇe cel´e nastaven´ı statistik velmi hojnˇe vyuˇz´ıv´a ud´alosti, kde zmˇena kaˇzd´e hodnoty provede aktualizaci t´eto hodnoty na kartˇe Export, aby zobrazovala vˇzdy aktu´aln´ı nastaven´ı generov´an´ı. Zde je uk´azka vyvol´an´ı ud´alosti po dokonˇcen´ı generov´an´ı statistik v aplikaˇcn´ı vrstvˇe a jej´ı n´asledn´a obsluha v prezentaˇcn´ı vrstvˇe. Vyvol´ an´ı ud´ alosti po dokonˇ cen´ı @Override protected void done(){ if(ex == null){ try { if(isCancelled()) firePropertyChange ("generation_finished", null, null); else 40
Implementace
V´ysledn´a podoba aplikace
firePropertyChange ("generation_finished", null, get()); } catch (Exception _ex) { ex = _ex; } } . . . } Obsluha ud´ alosti po dokonˇ cen´ı Cel´ y k´od obsluhy je obsaˇzen v metodˇe generationFinished() tˇr´ıdy hlavn´ıho okna aplikace. V tomto posluchaˇci je tato metoda z d˚ uvodu pˇrehlednˇejˇs´ıho k´odu pouze zavol´ana. ExportBackgroundWorker ebw = new ExportBackgroundWorker(this); ebw.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if(evt.getPropertyName().equals("file_changed")){ generationFinished((File) evt.getNewValue()); } } });
5.6
V´ ysledn´ a podoba aplikace
V´ yslednou aplikaci tvoˇr´ı jedin´ y .jar9 soubor nazvan´ y ical statistics.jar. K jeho bˇehu nen´ı potˇreba dalˇs´ıch knihoven, protoˇze veˇsker´e potˇrebn´e knihovny jsou jiˇz zabaleny v archivu. Pˇreklad zdrojov´ ych k´od˚ u a vytvoˇren´ı spustiteln´eho 10 souboru je moˇzn´e n´astrojem Ant . Aplikace se spouˇst´ı pˇr´ıkazem java -jar ical_statistics.jar a jej´ı uk´azka je na obr´azku 5.3. Cel´ y projekt byl veden v n´astroji Assembla11 za pomoci verzovac´ıho sys9
JAR: Java Archive http://ant.apache.org/ 11 https://www.assembla.com/home 10
41
Implementace
V´ysledn´a podoba aplikace
t´emu Subversion12 .
Obr´azek 5.3: Uk´azka grafick´eho uˇzivatelsk´eho rozhran´ı aplikace
12
http://subversion.apache.org/
42
6 Ovˇeˇren´ı aplikace Tato kapitola se t´ yk´a ovˇeˇrov´an´ı funkˇcnosti aplikace. Byla provedena ovˇeˇren´ı nejen spr´avn´e funkˇcnosti modul˚ u pro zpracov´an´ı ud´alost´ı a generov´an´ı statistik, ale tak´e spr´avnost vypoˇcten´ ych statistik. Testov´an´ı rychlosti aplikace je souˇca´st´ı tohoto ovˇeˇrov´an´ı.
6.1
Ovˇ eˇ ren´ı hlavn´ıch modul˚ u
Uk´azkov´e v´ ystupy a ovˇeˇrov´an´ı bylo prov´adˇeno na testovac´ıch netrivi´aln´ıch datech. Tato data nebyla pˇr´ıliˇs rozs´ahl´a a byla vytvoˇrena pouze pro tyto u ´ˇcely. Testy dob bˇehu byly prov´adˇeny jiˇz na re´aln´ ych datech, kter´e poskytl vedouc´ı t´eto bakal´aˇrsk´e pr´ace. Tato data jiˇz byla velice rozs´ahl´a a bylo nutn´e zvolit obdob´ı, na kter´em se bude testov´an´ı prov´adˇet. Obdob´ı bylo zvoleno v rozsahu 4 mˇes´ıc˚ u a obsahovalo necel´ ych 500 ud´alost´ı. Testov´an´ı nad cel´ ym kalend´aˇrem by trvalo pˇr´ıliˇs dlouho. (Pozn.: bylo by nutn´e zpracovat 3750 ud´alost´ı).
6.1.1
Ovˇ eˇ ren´ı naˇ c´ıt´ an´ı dat
Prvn´ı d˚ uleˇzitou ˇca´st´ı podl´ehaj´ıc´ı testov´an´ı bylo spr´avn´e naˇc´ıt´an´ı ud´alost´ı a jejich filtrace. Testov´an´ım proˇsly metody filtruj´ıc´ı ud´alosti jdouc´ı do nekoneˇcna a tak´e metody, kter´e prov´adˇely rozbalov´an´ı opakovan´ ych ud´alost´ı. Na toto testov´an´ı nemohlo b´ yt pouˇzito ˇza´dn´eho n´astroje, nebot’ ˇza´dn´ y podobn´e akce nenab´ız´ı. Testov´an´ı bylo nutn´e prov´est ruˇcnˇe s vizu´aln´ı kontrolou, ˇze ud´alosti, kter´e maj´ı b´ yt naˇcteny, se naˇcetly a ud´alosti, kter´e maj´ı b´ yt rozbaleny, se povedlo korektnˇe rozbalit a jejich ˇcasy zaˇc´atku a konce odpov´ıdaj´ı ˇcas˚ um v kalend´aˇri. Testov´an´ı d´ale podstoupila kl´ıˇcov´a slova a spr´avn´e v´ ypoˇcty jejich v´ yskyt˚ u. Opˇet bylo nutn´e vizu´alnˇe kontrolovat a poˇc´ıtat kl´ıˇcov´a slova v kalend´aˇri a srovn´avat je s v´ ysledky aplikace.
43
Ovˇeˇren´ı aplikace
6.1.2
Testy dob bˇehu
Ovˇ eˇ ren´ı statistik a exportu
Ovˇeˇren´ı spr´avnosti v´ ysledn´ ych statistik nebylo pˇr´ıliˇs jednoduch´e. Je jasn´e, ˇze form´at HTML nen´ı nutn´e testovat, protoˇze je konverz´ı z form´atu XLS. Form´aty XLS a XLSX jsou na druhou stranu generov´any t´emˇeˇr stejn´ ym k´odem, takˇze pozornosti se dost´av´a pouze tˇr´ıdˇe generuj´ıc´ı statistiky aplikace Microsoft Excel. Nejvˇetˇs´ı testov´an´ı bylo prov´adˇeno nad statistick´ ymi v´ ypoˇcty. Bylo kontrolov´ano, zda se ud´alosti spr´avnˇe tˇr´ıd´ı do sv´ ych skupin dan´e granularity, zda se spr´avnˇe vypoˇc´ıt´av´a doba jejich trv´an´ı pro dan´e kl´ıˇcov´e slovo a zda souˇcty za skupiny odpov´ıdaj´ı. Ty uˇz bylo moˇzn´e otestovat napˇr´ıklad vzorcem v Excelu funkc´ı SUMA. Oproti tomu jednotliv´a trv´an´ı za kl´ıˇcov´a slova bylo nutn´e kontrolovat s u ´daji v kalend´aˇri ruˇcnˇe a srovn´avat, zda trv´an´ı souhlas´ı. Posledn´ı kontrolou proˇsla samotn´a struktura statistik a vizualizace, jestli je vˇse zobrazeno spr´avnˇe na sv´em m´ıstˇe, jestli ˇz´adn´a informace nechyb´ı a zda je veˇsker´e nastaven´ı uˇzivatele aplikov´ano spr´avnˇe. Napˇr´ıklad zahrnut´ı dat ud´alost´ı, dn˚ u a ˇcasy zaˇc´atku a konce by mˇelo b´ yt ignorov´ano, pokud nen´ı nastaveno zahrnut´ı samotn´ ych ud´alost´ı. Bylo kontrolov´ano tak´e vkl´ad´an´ı pr´azdn´ ych ˇra´dk˚ u, pokud si tak uˇzivatel zvolil. Granularita, jednotky v´ ystupu a ˇcasov´ y interval statistik byl nepochybnˇe testov´an tak´e.
6.2
Testy dob bˇ ehu
N´asleduj´ıc´ı grafy zobrazuj´ı orientaˇcn´ı doby bˇeh˚ u generov´an´ı statistik pˇri r˚ uzn´em nastaven´ı. Testov´an´ı prob´ıhalo na n´asleduj´ıc´ım hardware: AMD A65400K APU 3600MHz, 4GB RAM 1600MHz. Kaˇzd´e testov´an´ı bylo provedeno 3x a v´ ysledn´e ˇcasy byly zpr˚ umˇerov´any. (Pozn.: liˇsily se pr˚ umˇernˇe o 1s). Graf na obr´azku 6.1 zobrazuje dobu generov´an´ı statistik pˇri n´asleduj´ıc´ım nastaven´ı: 7 kl´ıˇcov´ ych slov s v´ yskytem vˇetˇs´ım neˇz 50. Granularita statistik nastavena na denn´ı, zahrnuto vloˇzen´ı data, dne, zaˇca´tku a konce ud´alosti. V´ ystupn´ım form´atem byl form´at XLSX. Pˇri tomto testu se jiˇz poˇc´ıt´a s vyˇ parsovan´ ymi kl´ıˇcov´ ymi slovy. Casovaˇ c byl spuˇstˇen pˇred zavol´an´ım metody export() tˇr´ıdy Exporter a zastaven po jej´ım vykon´an´ı. Graf na obr´azku 6.2 zobrazuje dobu generov´an´ı statistik pˇri zmˇenˇe poˇctu kl´ıˇcov´ ych slov. Poˇcet ud´alost´ı je konstantn´ı - jejich poˇcet je 250. Kl´ıˇcov´a 44
Ovˇeˇren´ı aplikace
Testy dob bˇehu
Obr´azek 6.1: Z´avislost doby bˇehu na poˇctu ud´alost´ı slova jsou parsov´ana ze stejn´eho obdob´ı, ze kter´eho je pouˇzito zmiˇ novan´ ych 250 ud´alost´ı. Nejprve se provedl v´ ypoˇcet doby pro nejˇcetnˇejˇs´ı kl´ıˇcov´e slovo (jeho v´ yskyt byl 97), d´ale se v kaˇzd´em v´ ypoˇctu jedno kl´ıˇcov´e slovo pˇrid´avalo. Nastaven´ı v´ ystupu bylo stejn´e jako u pˇredchoz´ıho testov´an´ı.
Shrnut´ı v´ ysledk˚ u V pˇr´ıpadˇe prvn´ıho testu trvalo zpracovat 50 ud´alost´ı 3,201s. Nejvyˇsˇs´ı poˇcet ud´alost´ı, 500, trvalo zpracovat 70,435s. D´a se tedy ˇr´ıci, ˇze pˇri 10x vˇetˇs´ım poˇctu ud´alost´ı se v´ ypoˇcetn´ı ˇcas zv´ yˇsil pˇribliˇznˇe 22x. V tom pˇr´ıpadˇe lze line´arn´ı z´avislost na poˇctu ud´alost´ı vylouˇcit a pro pˇresnˇejˇs´ı vyj´adˇren´ı z´avislosti by bylo potˇreba prov´est dalˇs´ı mˇeˇren´ı pˇri zvyˇsov´an´ı poˇctu ud´alost´ı. Z proveden´ ych experiment˚ u se zd´a, ˇze pˇri vyˇsˇs´ım poˇctu mˇeˇren´ı se m˚ uˇze z´avislost bl´ıˇzit z´avislosti exponenci´aln´ı. Ve druh´em testu byl poˇcet ud´alost´ı konstantn´ı (250). Generov´an´ı statistik s 1 nejˇcetnˇejˇs´ım kl´ıˇcov´ ym slovem trvalo 5,308s. 10 nejˇcetnˇejˇs´ıch kl´ıˇcov´ ych slov zabralo pˇri generov´an´ı 25,579s. V´ ypoˇcetn´ı doba se pˇri zdesetin´asoben´ı poˇctu kl´ıˇcov´ ych slov zv´ yˇsila pouze 5x. Z v´ ysledn´ ych ˇcas˚ u je tedy zˇrejm´e, ˇze se nejedn´a o ˇz´adnou exponenci´aln´ı ˇci kvadratickou z´avislost. Nen´ı zjevn´a ani line´arn´ı z´avislost (napˇr. mezi body 4, 5 a 6). Pˇr´ıˇcin m˚ uˇze b´ yt hned nˇekolik. 45
Ovˇeˇren´ı aplikace
Uk´azka v´ystupu
Obr´azek 6.2: Z´avislost doby bˇehu na poˇctu kl´ıˇcov´ ych slov, pˇri poˇctu ud´alost´ı 250 D˚ uleˇzitou roli mohl hr´at napˇr´ıklad velk´ y rozd´ıl v poˇctu v´ yskyt˚ u mezi 4., 5. a 6. nejˇcetnˇejˇs´ım kl´ıˇcov´ ym slovem nebo jejich odliˇsn´a d´elka. Negativn´ım vlivem mohlo b´ yt tak´e doˇcasn´e vyt´ıˇzen´ı procesoru jin´ ym procesem. Ke zpˇresnˇen´ı v´ ysledk˚ u a pˇresnˇejˇs´ımu odeˇcten´ı z´avislosti (alespoˇ n pˇribliˇznˇe) by bylo takt´eˇz potˇreba prov´est v´ıce mˇeˇren´ı vˇcetnˇe minimalizace okoln´ıch vliv˚ u (v´ ykon poˇc´ıtaˇce, v´ yskyt kl´ıˇcov´ ych slov line´arnˇe rostouc´ı apod.). Je vidˇet, ˇze aplikaci lze pouˇz´ıt i na velk´e kalend´aˇre.
6.3
Uk´ azka v´ ystupu
Na obr´azc´ıch 6.4 a 6.5 je vidˇet moˇzn´ y uk´azkov´ y v´ ystup aplikace. Jelikoˇz v´ ystup je pˇr´ıliˇs ˇsirok´ y, je obr´azek rozdˇelen´ y na dvˇe ˇca´sti. V uk´azkov´ ych statistik´ach je zvolena t´ ydenn´ı granularita s jednotkou v minut´ach. D´ale je zahrnuto zobrazen´ı ud´alost´ı, jejich datum a den. Zahrnuty jsou i pr´azdn´e ˇr´adky.
46
Ovˇeˇren´ı aplikace
Uk´azka v´ystupu
Na obr´azku 6.4 jsou zobrazen´e t´ ydenn´ı skupiny. Sloupec sum popisuje bud’ trv´an´ı konkr´etn´ı ud´alosti nebo souˇcet trv´an´ı ud´alost´ı v dan´e skupinˇe (v tomto pˇr´ıpadˇe t´ ydnu). Prvn´ı 4 sloupce tabulky na obr´azku 6.5 symbolizuj´ı vybran´a kl´ıˇcov´a slova a trv´an´ı ud´alost´ı s obsaˇzen´ ym kl´ıˇcov´ ym slovem. Sloupec others popisuje dobu trv´an´ı ud´alost´ı ve skupinˇe, kter´e neobsahuj´ı ˇz´adn´e kl´ıˇcov´e slovo. Sloupec total je souˇctem sloupc˚ u sum a other a popisuje trv´an´ı vˇsech ud´alost´ı ve skupinˇe. Z obr´azk˚ u je zˇrejm´e, ˇze t´ yden od 24.3.2014 - 30.3.2014 obsahuje sam´e 0 a je jedn´ım z pr´azdn´ ych ˇra´dk˚ u (nastaveno pˇred generov´an´ım). V t´ ydnu od 7.4.2014 do 13.4.2014 jsou pouze ud´alosti, kter´e neobsahuj´ı ˇza´dn´e kl´ıˇcov´e slovo a v souˇctu trvaj´ı 300 minut. V t´ ydnu od 14.4.2014 do 20.4.2014 byla ˇ ud´alost s pˇredmˇetem Pracovn´ı cesta“ trvaj´ıc´ı 60 minut, d´ale ud´alost Skolen´ ı ” ” NodeJS 2“ trvaj´ıc´ı takt´eˇz 60 minut a souˇcasnˇe nˇejak´a jin´a ud´alost (nebo ud´alosti) trvaj´ıc´ı 630 minut. Celkov´ y souˇcet trv´an´ı ud´alost´ı v tomto t´ ydnu je tedy 750 minut a lze je vidˇet v re´aln´em kalend´aˇri na obr´azku 6.3.
Obr´azek 6.3: Uk´azka re´aln´eho kalend´aˇre v aplikaci Google Calendar
47
Ovˇeˇren´ı aplikace
Uk´azka v´ystupu
Obr´azek 6.4: Uk´azka souboru se statistikami, ˇca´st 1
Obr´azek 6.5: Uk´azka souboru se statistikami, ˇca´st 2 48
7 Z´avˇer Zad´an´ım bakal´aˇrsk´e pr´ace bylo vytvoˇrit n´astroj generuj´ıc´ı statistick´e informace z kalend´aˇrov´ ych dat. V´ ysledkem je aplikace s n´azvem iCal statistics, kter´a um´ı zpracov´avat kalend´aˇrov´a data ve form´atu iCalendar a n´aslednˇe z nich vypoˇc´ıt´avat poˇzadovan´e statistick´e souˇcty. Aplikace umoˇzn ˇuje parsovat kl´ıˇcov´a slova a souˇcasnˇe podporuje ˇsirok´e moˇznosti nastaven´ı v´ ystupn´ıch statistik vˇcetnˇe nastaven´ı zmiˇ novan´eho parsov´an´ı kl´ıˇcov´ ych slov. Pokud v aplikaci nastane chyba, je tato chyba uloˇzena do logu s ˇcasem a m´ıstem, kde k chybˇe doˇslo. Veˇsker´e operace proˇsly testov´an´ım u ´spˇeˇsnˇe a aplikace funguje spr´avnˇe na operaˇcn´ıch syst´emech Linux a Windows. V´ ystupy z aplikace mohou b´ yt vyuˇzity jako podklady pro v´ ykazy ˇcasu, jako prostˇredky pro sledov´an´ı spotˇrebovan´eho ˇcasu (napˇr´ıklad na nˇejak´em projektu) ˇci jako pˇrehledy o osobn´ım ˇcasov´em vyt´ıˇzen´ı.
7.1
Zhodnocen´ı
Zad´an´ı bakal´aˇrsk´e pr´ace bylo v pln´em rozsahu splnˇeno. Cel´a pr´ace se vztahuje k ˇcasu, ˇcasov´ ym informac´ım a jejich zpracov´an´ı. Vysvˇetleny jsou principy ˇr´ızen´ı sv´eho ˇcasu, jak´ ym zp˚ usobem lze ˇcas vyuˇz´ıvat, aby jeho vyuˇzit´ı bylo efektivn´ı a ztr´aty byly minim´aln´ı. D´ale jsou pops´any kalend´aˇrov´e aplikace slouˇz´ıc´ı k pl´anov´an´ı a rozvrhov´an´ı ˇcasu. Tyto aplikace poskytuj´ı dalˇs´ı n´astroje, kter´e mohou b´ yt v praxi velice uˇziteˇcn´e a mohou v mnoha pˇr´ıpadech usnadnit pr´aci a uˇsetˇrit ˇcas. Tato teoretick´a ˇca´st je obsaˇzena v prvn´ı polovinˇe pr´ace. Druh´a polovina obsahuje popis aplikace, kter´a jiˇz s kalend´aˇrov´ ymi daty pracuje a zpracov´av´a je. Po cel´ y v´ yvoji aplikace byl vyuˇz´ıv´an verzovac´ı syst´em Subversion, kter´ y velmi pomohl v pochopen´ı verzov´an´ı projekt˚ u a vyuˇz´ıv´an´ı potenci´alu verzovac´ıch syst´em˚ u. Mnoho n´astroj˚ u, kter´e Subversion nab´ız´ı, bylo pouˇzito. Bakal´aˇrsk´a pr´ace pˇrinesla mnoho nov´ ych informac´ı, zkuˇsenost´ı a vytvoˇrila pˇrehled o efektivn´ım vyuˇz´ıv´an´ı ˇcasu, kter´e je zajist´e st´ale aktu´alnˇejˇs´ım t´ematem.
49
Z´avˇer
7.2
Moˇzn´a rozˇs´ıˇren´ı
Moˇ zn´ a rozˇ s´ıˇ ren´ı
ˇ Casto se st´av´a, ˇze se pˇri v´ yvoji aplikace nebo po jej´ım dokonˇcen´ı objev´ı n´apady ˇci n´avrhy na zlepˇsen´ı. Uveden´e n´avrhy nejsou v aplikaci implementov´any, ale jsou oznaˇceny jako nice-to-have1 rozˇs´ıˇren´ı. • Ukazatel postupu zpracov´ an´ı - pˇri generov´an´ı statistik nebo parsov´an´ı kl´ıˇcov´ ych slov je zobrazen uˇzivateli dialog pˇredstavuj´ıc´ı informaci, ˇze se nˇeco vykon´av´a na pozad´ı. V dialogu je zobrazen nekoneˇcn´ y progressbar (komponenta ukazuj´ıc´ı postup pˇri vykon´av´an´ı nˇejak´e delˇs´ı u ´lohy), kter´ y by mohl b´ yt pˇredˇel´an na procentu´aln´ı. • Dˇ elen´ı ud´ alost´ı pˇ res p˚ ulnoc - sp´ıˇse moˇznost nastaven´ı pˇri generov´an´ı. Nyn´ı je trv´an´ı ud´alost´ı zapoˇc´ıt´ano do dne, kdy ud´alost zaˇcala. T´ımto rozdˇelen´ım by statistiky byly z urˇcit´eho pohledu pˇresnˇejˇs´ı. • Pr´ azdn´ eˇ r´ adky - pokud v souˇcasn´e verzi aplikace nastav´ı uˇzivatel nˇejak´e poˇca´teˇcn´ı nebo koncov´e datum statistik a zaˇskrtne vloˇzen´ı pr´azdn´ ych ˇra´dk˚ u, dojde k vloˇzen´ı pouze do oblasti pˇred posledn´ı ud´alost. Novˇe by mohly b´ yt pr´azdn´e ˇra´dky vkl´ad´any na z´aˇc´atek ˇci konec zvolen´eho obdob´ı. M˚ uˇze b´ yt opˇet nastaveno pˇri generov´an´ı. • Form´ at PDF - form´at PDF by mohl b´ yt zaˇrazen do seznamu voliteln´ ych v´ ystupn´ıch form´at˚ u. Jelikoˇz statistiky ale vˇetˇsinou zab´ıraj´ı na ˇs´ıˇrku mnoho m´ısta, nemuselo by v´ ysledn´e zobrazen´ı v PDF vypadat rozumnˇe. • Lemmatizace2 kl´ıˇ cov´ ych slov - pokud by byla kl´ıˇcov´a slova lemmatizov´ana na sv˚ uj z´akladn´ı tvar, nemusely by se ve statistik´ach vyskytovat duplicity kl´ıˇcov´ ych slov liˇsic´ıch se v nˇekolika p´ısmenech (za pˇredpokladu absence vizu´aln´ı kontroly uˇzivatele). • Optimalizace rychlosti - j´adro aplikace by proˇslo d˚ ukladnou anal´ yzou za u ´ˇcelem odhalen´ı slab´ ych m´ıst, jejichˇz oprava by pˇrispˇela k rychlejˇs´ımu ˇreˇsen´ı n´aroˇcnˇejˇs´ıch u ´loh. • Google API - pokud uˇzivatel vyuˇz´ıv´a pro spr´avu kalend´aˇr˚ u aplikaci Google calendar, nab´ız´ı se vyuˇzit´ı Google API k z´ısk´an´ı kalend´aˇr˚ u uˇzivatele po zad´an´ı pˇr´ıstupov´ ych u ´daj˚ u. 1
nice-to-have = doplˇ nkov´e rozˇs´ıˇren´ı aplikace, kter´e nen´ı k jej´ımu bezchybn´emu chodu nezbytn´e 2 lemmatizace = proces pˇreveden´ı slova do jeho z´akladn´ıho tvaru
50
Pˇ r´ıloha 7.3
Uˇ zivatelsk´ a dokumentace
Zde je pops´an uk´azkov´ y postup generov´an´ı statistik a vysvˇetlen´ı veˇsker´eho nastaven´ı. Prvn´ı podm´ınkou je m´ıt v aplikaci pˇridan´e kalend´aˇre. Kalend´aˇr lze pˇridat bud’ z lok´aln´ıho um´ıstˇen´ı nebo z adresy URL. V z´aloˇzce Calendars stiskneme tlaˇc´ıtko New. Zobraz´ı se okno pro detail kalend´aˇre neboli reprezentaci kalend´aˇre. Vypln´ı se jm´eno a n´aslednˇe se bud’ vybere cesta nebo vloˇz´ı URL. Kaˇzd´ y kalend´aˇr m´a v prvn´ım sloupci zaˇskrt´avac´ı pole, kter´e ˇr´ık´a, ˇze tento kalend´aˇr bude zdrojem dat pˇri generov´an´ı statistik. Tyto reference na kalend´aˇre je moˇzn´e ukl´ad´at tlaˇc´ıtkem Save do souboru u nˇejak´e zmˇeny, je nutn´e data icr.xml. Pokud se provedou v tabulce kalend´aˇr˚ je uloˇzit, aby se pˇri pˇr´ıˇst´ım spuˇstˇen´ı aplikace projevily. N´asleduj´ıc´ım u ´kolem je z´ısk´an´ı kl´ıˇcov´ ych slov. Kl´ıˇcov´a slova je moˇzn´e do aplikace nahr´at ze souboru CSV, ve kter´em je na kaˇzd´e ˇra´dce uloˇzeno slovo a jeho v´ yskyt oddˇelen´e stˇredn´ıkem. Dalˇs´ı moˇznost´ı je parsov´an´ı kl´ıˇcov´ ych slov z kalend´aˇre. V menu From calendar vybereme kalend´aˇr, kter´ y bude zdrojem dat a nastav´ıme poˇzadovan´e vlastnosti parsov´an´ı. Proces spust´ıme stiskem tlaˇc´ıtka PARSE. Po stisku se zobraz´ı okno informuj´ıc´ı uˇzivatele o prob´ıhaj´ıc´ı ˇcinnosti. Aplikace umoˇzn ˇuje parsov´an´ı kl´ıˇcov´ ych slov z kalend´aˇre a souˇcasnˇe jejich vloˇzen´ı ze souboru. Nastaven´ı parsov´an´ı zahrnuje volbu minim´aln´ıho v´ yskytu kl´ıˇcov´eho slova. D´ale regul´arn´ı v´ yraz, kter´ y se zad´av´a do pole Matches regexp, proti kter´emu se budou vyparsovan´a slova testovat (nevyhovuj´ıc´ı budou odstranˇena). Dalˇs´ım nastaven´ım je ˇcasov´ y interval. Pokud si uˇzivatel pˇreje parsovat z cel´eho 51
Z´avˇer
Uˇzivatelsk´a dokumentace
Obr´azek 7.1: Vkl´ad´an´ı kalend´aˇr˚ u do aplikace kalend´aˇre, nech´a nastaveno Whole calendar, v opaˇcn´em pˇr´ıpadˇe pˇrepne na Date from a nastav´ı datum od a do. D´ale je moˇzn´e zaˇskrtnout odstranˇen´ı diakritiky a ignoraci velk´ ych a mal´ ych p´ısmen. Po skonˇcen´ı parsov´an´ı se v´ ysledn´a kl´ıˇcov´a slova zobraz´ı s jejich v´ yskytem v tabulce. Nad tabulkou je informace o jejich poˇctu a pod tabulkou jsou tlaˇc´ıtka na smaz´an´ı vybran´ ych slov a na jejich uloˇzen´ı do souboru. Sloupce tabulky lze ˇradit a oznaˇcen´e z´aznamy lze mazat kl´avesou Delete. Posledn´ı v´ yznam hraje pole Other keywords. Tam uˇzivatel m˚ uˇze vloˇzit kl´ıˇcov´a slova (oddˇelen´a stˇredn´ıkem), kter´a pˇri parsov´an´ı neproˇsla filtrem, ale z nˇejak´eho d˚ uvodu jsou v seznamu poˇzadov´ana. N´asleduj´ıc´ım krokem je nastaven´ı statistik na kartˇe Statistics. Prvn´ı poloˇzkou je granularita. Ta ˇr´ık´a, po jak´ ych skupin´ach budou ud´alosti ve statistik´ach dˇeleny. Moˇznosti jsou: jednotliv´e ud´alosti, dny, t´ ydny, mˇes´ıce a roky. N´asleduje jednotka v´ ypoˇct˚ u statistik ˇr´ıkaj´ıc´ı, ˇze veˇsker´e souˇcty a veˇsker´a trv´an´ı ud´alost´ı ve statistik´ach budou bud’ v minut´ach, hodin´ach nebo dnech. N´asleduj´ıc´ı pole Include events zobraz´ı jednotliv´e ud´alosti v dan´e granularitn´ı skupinˇe. Include dates zobraz´ı datum zaˇca´tku ud´alosti, Include Day of Week names zobraz´ı den ud´alosti, Include from-to zobraz´ı ˇcas zaˇca´tku a konce a Include empty rows zobraz´ı granularitn´ı skupiny spadaj´ıc´ı do zvolen´eho ˇcasov´eho intervalu neobsahuj´ıc´ıho ˇz´adnou ud´alost. N´asleduje zvolen´ı v´ ystupn´ıho form´atu a pot´e ˇcasov´ y interval statistik: bud’ cel´ y kalend´aˇr, nebo jen uveden´e obdob´ı. 52
Z´avˇer
Uˇzivatelsk´a dokumentace
Obr´azek 7.2: Parsov´an´ı kl´ıˇcov´ ych slov
Obr´azek 7.3: Nastaven´ı statistik
53
Z´avˇer
Uˇzivatelsk´a dokumentace
Posledn´ım krokem je kontrola nastaven´ı a export statistik, k ˇcemuˇz slouˇz´ı karta Export. Po kontrole vybran´ ych kalend´aˇr˚ u, kl´ıˇcov´ ych slov a zvolen´eho nastaven´ı m˚ uˇze uˇzivatel zvolit, jestli chce v´ ystupn´ı soubor otevˇr´ıt, uloˇzit nebo oboj´ı. Podm´ınkou spuˇstˇen´ı generov´an´ı je: zvolen´ y alespoˇ n jeden zdrojov´ y kalend´aˇr, ˇcasov´ y rozsah nastaven bud’ na cel´ y kalend´aˇr, nebo alespoˇ n datum od nebo datum do a alespoˇ n jedno kl´ıˇcov´e slovo. Pokud toto nebude splnˇeno, bude o tom uˇzivatel informov´an chybovou hl´aˇskou. Pˇred spuˇstˇen´ım generov´an´ı je nutn´e db´at na zvolen´ y rozsah generov´an´ı statistik a na velikost obsahu kalend´aˇre, protoˇze pokud kalend´aˇr obsahuje velk´e mnoˇzstv´ı ud´alost´ı a rozsah je zvolen na cel´ y kalend´aˇr, m˚ uˇze generov´an´ı trvat dlouhou dobu. Tot´eˇz plat´ı pro parsov´an´ı kl´ıˇcov´ ych slov, kde se m˚ uˇze doba v´ ypoˇctu takt´eˇz prodlouˇzit. Samotn´ y export se spouˇst´ı stisknut´ım tlaˇc´ıtka Export.
Obr´azek 7.4: Export statistik
54
Literatura [1] Stephen Covey, A. Roger Merrill, and Rebecca R. Merrill. First Things First. Simon and Schuster, New York, 1994. [2] Bernard Desruisseaux. Internet Calendaring and Scheduling Core Object Specification. https://tools.ietf.org/html/rfc5545, 2009. [3] Ulrika Hedlund. Effective Calendar Management. http://www.businessproductivity.com/effective-calendar\ -management/, 2012. [4] Pavel Herout. Java - grafick´e uˇzivatelsk´e prostˇred´ı a ˇceˇstina. KOOP, ˇ e Budˇejovice, 2007. Cesk´ [5] Bill Hoberecht. Calendar Management: Getting Control of Your Appointments and Meetings. http://www.pinnacleprojects.com/index.php/time-management/ 147-calendar-management-getting-control-of-your-appointments\ -and-meetings, 2014. [6] Jiˇr´ı Kolaˇr´ık. Jak na time management v 10 bodech. http://www.jiri-kolarik.cz/clanek/jak-na-time-management/, 2011. [7] Heinz Tschabitscher. Google Calendar - Free Online Calendar. http://email.about.com/od/bestfreeonlinecalendars/gr/Google_ Calendar_ReviewFree_Online_Calendar.htm.
55