• Nebyly nalezeny žádné výsledky

Bc.JanKabela EasyPacking Diplomov´apr´ace

N/A
N/A
Protected

Academic year: 2022

Podíl "Bc.JanKabela EasyPacking Diplomov´apr´ace"

Copied!
73
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Ing. Michal Valenta, Ph.D.

vedoucí katedry doc. RNDr. Ing. Marcel Jiřina, Ph.D.

děkan

ZADÁNÍ DIPLOMOVÉ PRÁCE

Název: EasyPacking

Student: Bc. Jan Kabela

Vedoucí: doc. RNDr. Josef Kolář, CSc.

Studijní program: Informatika

Studijní obor: Webové a softwarové inženýrství Katedra: Katedra softwarového inženýrství Platnost zadání: Do konce zimního semestru 2019/20

Pokyny pro vypracování

1. Seznamte se s existujícími aplikacemi, které umožňují záznam, doporučování a hodnocení různých variant "balicích" seznamů (typicky např. pro účely cestování).

2. Vytvořte vhodný matematický model, formulujte smysluplné problémy nad tímto modelem a určete složitost jejich řešení.

3. Navrhněte a realizujte mobilní aplikaci pro Android (včetně backend serveru) podporující záznam

"balicích" seznamů s těmito funkcionalitami:

Běžný uživatel - vytvoření účtu, vytvoření a úpravy "balicích" seznamů, vyhledávání v seznamech ostatních uživatelů na základě věku, pohlaví, destinace a činností spojené s cestou (chození po horách, dovolená u moře atd.). Při zobrazení seznamu se jednotlivé položky zobrazují seskupeny podle svého typického umístění v domě.

Správce - přidávání položek do číselníků destinací, předmětů, lokalit předmětů a činností spojených s cestou, dále vše, co může běžný uživatel.

Jednotlivé funkcionality řádně otestujte.

Seznam odborné literatury

Dodá vedoucí práce.

(2)
(3)

Diplomov´ a pr´ ace

EasyPacking

Bc. Jan Kabela

Katedra softwarov´eho inˇzen´yrstv´ı

Vedouc´ı pr´ace: doc. RNDr. Josef Kol´aˇr, CSc.

5. kvˇetna 2019

(4)
(5)

Prohl´ sen´ı

Prohlaˇsuji, ˇze jsem pˇredloˇzenou pr´aci vypracoval(a) samostatnˇe a ˇze jsem uvedl(a) veˇsker´e pouˇzit´e informaˇcn´ı zdroje v souladu s Metodick´ym pokynem o etick´e pˇr´ıpravˇe vysokoˇskolsk´ych z´avˇereˇcn´ych prac´ı.

Beru na vˇedom´ı, ˇze se na moji pr´aci vztahuj´ı pr´ava a povinnosti vypl´yvaj´ıc´ı ze z´akona ˇc. 121/2000 Sb., autorsk´eho z´akona, ve znˇen´ı pozdˇejˇs´ıch pˇredpis˚u.

V souladu s ust.§46 odst. 6 tohoto z´akona t´ımto udˇeluji nev´yhradn´ı opr´avnˇen´ı (licenci) k uˇzit´ı t´eto moj´ı pr´ace, a to vˇcetnˇe vˇsech poˇc´ıtaˇcov´ych program˚u, jeˇz jsou jej´ı souˇc´ast´ı ˇci pˇr´ılohou, a veˇsker´e jejich dokumentace (d´ale souhrnnˇe jen

”D´ılo“), a to vˇsem osob´am, kter´e si pˇrej´ı D´ılo uˇz´ıt. Tyto osoby jsou opr´avnˇeny D´ılo uˇz´ıt jak´ymkoli zp˚usobem, kter´y nesniˇzuje hodnotu D´ıla, a za jak´ymkoli

´

uˇcelem (vˇcetnˇe uˇzit´ı k v´ydˇeleˇcn´ym ´uˇcel˚um). Toto opr´avnˇen´ı je ˇcasovˇe, teri- tori´alnˇe i mnoˇzstevnˇe neomezen´e. Kaˇzd´a osoba, kter´a vyuˇzije v´yˇse uvedenou licenci, se vˇsak zavazuje udˇelit ke kaˇzd´emu d´ılu, kter´e vznikne (byt’ jen zˇc´asti) na z´akladˇe D´ıla, ´upravou D´ıla, spojen´ım D´ıla s jin´ym d´ılem, zaˇrazen´ım D´ıla do d´ıla souborn´eho ˇci zpracov´an´ım D´ıla (vˇcetnˇe pˇrekladu), licenci alespoˇn ve v´yˇse uveden´em rozsahu a z´aroveˇn zpˇr´ıstupnit zdrojov´y k´od takov´eho d´ıla ale- spoˇn srovnateln´ym zp˚usobem a ve srovnateln´em rozsahu, jako je zpˇr´ıstupnˇen zdrojov´y k´od D´ıla.

V Praze dne 5. kvˇetna 2019 . . . .

(6)

c 2019 Jan Kabela. Vˇsechna pr´ava vyhrazena.

Tato pr´ace vznikla jako ˇskoln´ı d´ılo na ˇCesk´em vysok´em uˇcen´ı technick´em v Praze, Fakultˇe informaˇcn´ıch technologi´ı. Pr´ace je chr´anˇena pr´avn´ımi pˇredpisy a mezin´arodn´ımi ´umluvami o pr´avu autorsk´em a pr´avech souvisej´ıc´ıch s pr´avem autorsk´ym. K jej´ımu uˇzit´ı, s v´yjimkou bez´uplatn´ych z´akonn´ych licenc´ı a nad r´amec opr´avnˇen´ı uveden´ych v Prohl´aˇsen´ı na pˇredchoz´ı stranˇe, je nezbytn´y sou- hlas autora.

Odkaz na tuto pr´aci

Kabela, Jan.EasyPacking. Diplomov´a pr´ace. Praha: ˇCesk´e vysok´e uˇcen´ı tech- nick´e v Praze, Fakulta informaˇcn´ıch technologi´ı, 2019.

(7)

Abstrakt

Tato diplomov´a pr´ace se zab´yv´a aplikac´ı EasyPacking pro OS Android. Tato aplikaci by mˇela napom´ahat uˇzivatel˚um nezapomenout si ˇz´adnou vˇec pˇri cest´ach. V t´eto aplikaci bude moci uˇzivatel vytv´aˇret seznamy vˇec´ı, kter´e si na cestu bere. Z´aroveˇn bude tyto seznamy uˇzivatel popisovat za pomoci c´ılov´e destinace, aktivit s cestou spojen´ych, vˇeku a pohlav´ı. Takto vytvoˇren´e seznamy budou ostatn´ı uˇzivatel´e moci vyhled´avat a pˇredmˇety si sbalit. Jednotliv´e pˇredmˇety budou rozdˇeleny podle m´ıstnost´ı, kde se obvykle v bytˇe nach´azej´ı.

Pro realizaci aplikace bude nutn´e vytvoˇrit aplikaˇcn´ı server. Na tomto serveru se budou zpracov´avat data potˇrebn´a pro chod aplikace. Z´aroveˇn server bude spolupracovat s datab´az´ı pro ukl´ad´an´ı jednotliv´ych seznam˚u. Pro komunikaci mezi serverem a aplikac´ı je pouˇzit protokol HTTPS. Data se pˇren´aˇsej´ı ve struktuˇre JSON. Pro datab´azi je zvolena technologie PostgreSQL. Aplikace je vytvoˇren´a pomoc´ı jazyku Kotlin. Server je vytvoˇren v jazyku Ruby on Rails.

V´ysledkem t´eto pr´ace je otestovan´a aplikace EasyPacking spolu s aplikaˇcn´ım serverem a datab´az´ı.

Kl´ıˇcov´a slova Kotlin, Ruby on Rails, Postgresql, JSON, JSONWebToken

(8)

This diploma thesis’s goal is to develop and aplication EasyPacking for OS Android. This application should help users with packing. In this aplication will users be able to create packing lists with items they are going to pack.

Users will add criteria to these packing lists. The criteria consist of destination, activities that users will be doing on there vacation, age and sex. Users will be able to search packing list based on these criteria. Each item in packing list will be devided into rooms in flat where thet can be usually found. It will be necessary to develop an aplication server for this aplication. This aplication server will be will be providing the aplication with data. Also it is necessary to create a databse for storing this data. For communication between apli- cation server and aplication will be used HTTPS protocol. The data will be transferred in JSON structure. Database will be created using PostgreSQL.

Aplication will be developed in Kotlin. The result of this thesis will be tested aplication EasyPacking with aplication server and database.

Keywords Kotlin, Ruby on Rails, Postgresql, JSON, JSONWebToken

(9)

Obsah

Uvod´ 1

1 C´ıl pr´ace 3

2 Anal´yza a n´avrh 5

2.1 Souˇcasn´a ˇreˇsen´ı . . . 5

2.2 Matematick´y model . . . 6

2.3 Anal´yza moˇznost´ı ˇreˇsen´ı . . . 10

3 Realizace 15 3.1 Datab´aze . . . 15

3.2 Diagramy . . . 21

3.3 MockUps . . . 36

3.4 Testov´an´ı . . . 47

Z´avˇer 55

Literatura 57

A Seznam pouˇzit´ych zkratek 59

B Obsah pˇriloˇzen´eho CD 61

(10)
(11)

Seznam obr´ azk˚ u

3.1 Norm´aln´ı formy. . . 15

3.2 Sch´ema datab´aze. . . 20

3.3 Use case. . . 21

3.4 Activity diagram registrace. . . 22

3.5 Activity diagram pˇrihl´aˇsen´ı. . . 24

3.6 Activity diagram Vytvoˇren´ı nov´eho seznamu. . . 27

3.7 Activity diagram Vytvoˇren´ı nov´eho seznamu. . . 29

3.8 Activity diagram Pˇrid´an´ı hodnocen´ı. . . 30

3.9 Activity diagram zobrazen´ı vlastn´ıch seznam˚u. . . 31

3.10 Activity diagram smaz´an´ı. . . 32

3.11 Activity diagram editace. . . 33

3.12 Activity diagram zobrazen´ı. . . 35

3.13 Mockup pˇrihl´aˇsen´ı. . . 36

3.14 Mockup menu. . . 37

3.15 Mockup aktivity. . . 38

3.16 Mockup destinace. . . 39

3.17 Mockup doplˇnuj´ıc´ı informace. . . 40

3.18 Mockup M´ıstnosti nov´y seznam. . . 41

3.19 Mockup pˇredmˇety nov´y seznam. . . 42

3.20 Mockup m´ıstnosti zobrazit. . . 43

3.21 Mockup zobrazen´ı vlastn´ıch seznam˚u. . . 44

3.22 Mockup menu seznamy. . . 45

3.23 Mockup zobrazen´ı vlastn´ıch seznam˚u. . . 46

3.24 Mockup vyhled´av´an´ı seznam˚u. . . 47

(12)
(13)

Uvod ´

Tato diplomov´a pr´ace ˇreˇs´ı aplikace pro vytv´aˇren´ı seznam˚u pˇredmˇet˚u, kter´e si uˇzivatel´e berou s sebou na cesty. Z´aroveˇn tato pr´ace obsahuje n´avrh a imple- mentaci takov´eto aplikace.

Pˇrijde mi zbyteˇcn´e vytv´aˇret si pro kaˇzdou cestu nov´y seznam. Je pravdˇepodobn´e, ˇ

ze pokud se rozhodnu pro jakoukoli cestu a s n´ı spojen´e aktivity, nebudu prvn´ı, kdo takovou tu cestu podnikl. Rozhodl jsem se tedy pro vytvoˇren´ı aplikace, do n´ıˇz budou uˇzivatel´e moci seznamy ukl´adat a vz´ajemnˇe je sd´ılet.

Dnes existuje nˇekolik aplikac´ı s t´ımto ´uˇcelem. V ˇc´asti anal´yza dosavadn´ıch ˇreˇsen´ı, nˇekter´e z tˇechto aplikac´ı zkouˇs´ım a popisuji jejich v´yhody a nev´yhody.

Aplikace jsem vybral podle jejich poˇctu staˇzen´ı a hodnocen´ı. Na z´akladˇe toho pak analyzuji, jak aplikaci EasyPacking navrhnout.

D´ale v t´eto pr´aci analyzuji matematick´e modely pro ˇreˇsen´ı aplikace Ea- syPacking. Zamˇeˇruji se zde na poˇcet dat potˇrebn´ych pro plnou funkˇcnost aplikace. Nalezen´e matematick´e modely n´aslednˇe pouˇz´ıv´am pro zjiˇstˇen´ı poˇctu potˇrebn´ych seznam˚u pro naplnˇen´ı aplikace.

D´ale jsem v t´eto pr´aci ˇreˇsil moˇznosti, jak jednotliv´e ˇc´asti implementovat a jak´e technologie k tomu pouˇz´ıt. ˇReˇsil jsem zde moˇznosti pro aplikaˇcn´ı ser- ver, datab´azi a samotnou aplikaci. Zde jsou hodnoceny technologie a postupy, kter´e se v dneˇsn´ı dobˇe pouˇz´ıvaj´ı. Na z´akladˇe jejich hodnocen´ı a vhodnosti pro aplikaci jsem si jednotliv´e technologie zvolil.

V neposledn´ı ˇradˇe jsme popisoval samotnou implementaci jednotliv´ych ˇ

c´ast´ı. Tato podkapitola obsahuje n´avrh datab´aze zohledˇnuj´ıc´ı pˇredchoz´ı pr˚uzkum poˇzadavk˚u. D´ale popis implementace aplikaˇcn´ıho serveru v Ruby on Rails a v´yvoj aplikace v jazyku Kotlin. Spolu s popisem n´avrhu aplikace jsou zde

(14)

n´avrhy jednotliv´ych obrazovek aplikace.

Na konci pr´ace je pops´ano, jak byly jednotliv´e ˇc´asti testov´any. Pro tes- tov´an´ı aplikace jsou zde uvedeny testovac´ı sc´en´aˇre. Aplikaˇcn´ı server byl tes- tov´an pomoc´ı testov´an´ı chovan´ı. V z´avˇeru jsem uvedl moˇzn´e dalˇs´ı funcionality, kter´e by mohly b´yt do aplikace implementov´any.

(15)

Kapitola 1

C´ıl pr´ ace

C´ılem t´eto pr´ace je vytvoˇrit aplikace pro OS Android s n´azvem EasyPacking.

Tato aplikace by mˇela usnadnit uˇzivatel˚um balen´ı na cesty. Z´aklad aplikace tvoˇr´ı seznamy vˇec´ı, kter´e uˇzivatel´e v r´amci aplikace vytv´aˇrej´ı sv´ym potˇreb´am na m´ıru. N´aslednˇe jsou seznamy archivov´any, takˇze jsou nad´ale dostupn´e jak autoru balic´ıho seznamu, tak i ostatn´ım uˇzivatel˚um aplikace. Koneˇcn´ym c´ılem je pak postupn´e ustupov´an´ı od vytv´aˇren´ı vlastn´ım seznam˚u, ale vyuˇz´ıv´an´ı jiˇz vytvoˇren´ych. Jelikoˇz se jednotliv´e seznamy v´aˇzou k dan´ym pr´azdninov´ym lo- kac´ım, u ˇcasto navˇstˇevovan´ych destinac´ı je pˇredpokl´ad´ano, ˇze c´ıl opakovan´eho pouˇz´ıv´an´ı jiˇz vytvoˇren´ych nastane dˇr´ıve neˇz u ne tolik obl´ıben´ych turistick´ych m´ıst.

Kromˇe dan´e c´ılov´e destinace budou jednotliv´e seznamy bl´ıˇze specifikov´any pomoc´ı, pl´anovan´ych aktivit, vˇeku a pohlav´ı. Ohlednˇe vˇeku je jasn´e, ˇze napˇr´ıklad v intervalu 10 let se seznam skoro liˇsit nebude, ale pokud budeme br´at napˇr´ıklad rozpˇet´ı 30 let m˚uˇze nastat jiˇz velk´a zmˇena. Pro co nejvˇetˇs´ı usnadnˇen´ı balen´ı budou seznamy pˇrirazovat jednotliv´e pˇredmˇety k jejich pravdˇepodobn´ym lo- kac´ım pˇr´ımo v obydl´ı uˇzivatele. V ide´aln´ım pˇr´ıpadˇe pak uˇzivatel projde sv˚uj domov pr´avˇe jednou, v kaˇzd´e m´ıstnosti si sbal´ı potˇrebn´y pˇredmˇet a bude pˇripraven odcestovat.

Jedn´ım z c´ıl˚u je naleznout matematick´y model, kter´y bude diskutovat funk- cionalitu aplikace.

Kv˚uli zm´ınˇen´e archivaci a vyhled´av´an´ı bude nutn´e vytvoˇrit pro aplikaci i serverovou ˇc´ast. Cel´a implementace aplikace se bude skl´adat z tˇechto ˇc´ast´ı.

1. Vytvoˇren´ı datab´aze

2. Vytvoˇren´ı serveru napojen´eho na datab´azi s n´asleduj´ıc´ı funkcionalitou

(16)

a) Uˇzivatel

i. Vytvoˇren´ı ´uˇctu ii. Vytv´aˇren´ı seznam˚u iii. Editace sv´ych seznam˚u iv. Maz´an´ı sv´ych seznam˚u

v. Vyhled´av´an´ı seznam˚u na z´akladˇe vˇeku, pohlav´ı, c´ılov´e desti- nace a aktivit

(17)

Kapitola 2

Anal´ yza a n´ avrh

2.1 Souˇ casn´ a ˇ reˇ sen´ı

2.1.1 PackPoint travel packing list

V aplikaci uˇzivatel na zaˇc´atku zad´a lokalitu kam cestuje, datum odjezdu, d´elku pobytu a typ cesty (dovolen´e nebo pracovn´ı cesta), zda se jedn´a o dovo- lenou nebo pracovn´ı cestu. N´aslednˇe vybere aktivity, kter´e pl´anuje prov´adˇet v c´ılov´e destinaci. Na v´ybˇer je 15 aktivit. Pokud uˇzivatel pouˇzije premium verzi za 90 Kˇc, tak m˚uˇze zadat i vlastn´ı aktivitu. Na z´akladˇe tohoto v´ybˇeru je uˇzivateli vygenerov´an seznam doporuˇcen´ych vˇec´ı, kter´e si s sebou m´a vz´ıt.

Uˇzivatel postupnˇe projde seznam a bud’ se rozhodne pˇredmˇet vz´ıt s sebou nebo pomoc´ı posunut´ı na stranu pˇredmˇet ze seznamu odstran´ı. V premium verzi m˚uˇze uˇzivatel pˇridat i nov´e vˇeci. Uˇzivatel m˚uˇze takto upraven´y seznam sd´ılet pomoc´ı e-mailu, soci´aln´ıch s´ıt´ı nebo cloudov´ych ´uloˇziˇst’.

Nev´yhoda aplikace je, ˇze uˇzivatel mus´ı vˇzdy seznam vytvoˇrit. Dalˇs´ı nev´yhoda je absence jin´ych jazyk˚u neˇz angliˇctiny. Mnoho funkcionalit je moˇzno vyuˇz´ıt aˇz pˇri koupi premium verze.

2.1.2 PacKing

Pro vytvoˇren´ı seznamu v t´eto aplikaci, uˇzivatel na zaˇc´atku zad´a d´elku pobytu, pohlav´ı, dopravn´ı prostˇredek, kter´ym bude cestovat, poˇcas´ı, kter´e pˇredpokl´ad´a bˇehem pobytu, a nakonec vybere aktivity, jeˇz bude bˇehem pobytu prov´adˇet.

Aplikace na z´akladˇe tˇechto parametr˚u vygeneruje seznam vˇec´ı, kter´e si uˇzivatel m´a sbalit s sebou. Jednotliv´e vˇeci jsou rozdˇeleny do kategori´ı, jako napˇr´ıklad obleˇcen´ı, hygiena nebo dokumenty. Uˇzivatel se n´aslednˇe rozhodne, zda si dan´y pˇredmˇet vz´ıt s sebou nebo nikoliv. Je moˇzn´e editovat jednotliv´e vˇeci, mˇenit jejich poˇcet nebo zmˇenit kategorii.

(18)

Nev´yhodou je, ˇze seznam nen´ı moˇzn´e sd´ılet. Sd´ılen´ı je moˇzn´e pouze v premium verzi. D´ale aplikace generuje ohromn´e mnoˇzstv´ı pˇredmˇet˚u, kter´ym mus´ı uˇzivatel proj´ıt a rozhodnout se, zda si je sbalit ˇci nikoliv. Toto proch´azen´ı zabere tolik ˇcasu, ˇze by dle m´eho n´azoru bylo rychlejˇs´ı si seznam napsat ruˇcnˇe.

Uˇzivatel si m˚uˇze v z´akladn´ı verzi vytvoˇrit jen jeden seznam.

2.1.3 Packing List Lite

V t´eto aplikaci si uˇzivatel m˚uˇze vytvoˇrit seznamy, tak, jako by to dˇelat na pap´ıˇre. Je moˇzn´e pˇridat kategorie. Do kategori´ı se pak vkl´adaj´ı jednotliv´e poloˇzky. Takto vytvoˇren´e seznamy jsou uloˇzeny v aplikaci.

Aplikace nijak nenapom´ah´a vytv´aˇren´ı seznam˚u. Vˇse si uˇzivatel mus´ı na- psat s´am. Jednotliv´e seznamy nen´ı moˇzn´e sd´ılet. Z uveden´ych aplikac´ı je tato nejslabˇs´ı.

2.1.4 Shrnut´ı souˇcasn´ych ˇreˇsen´ı

Budu se vˇenovat pouze prvn´ım dvou zm´ınˇen´ym aplikac´ım. V r´amci koment´aˇr˚u uˇzivatel˚u je hlavn´ı nedostatek absence jin´ych jazyk˚u neˇz angliˇctiny. Z m´eho pohledu je tak´e nedostatkem, ˇze uˇzivatel mus´ı seznam pro kaˇzdou novou desti- naci vytv´aˇret. Popˇr´ıpadˇe i pro jiˇz navˇst´ıvenou destinaci, ale s jin´ymi aktivi- tami. Jelikoˇz se pˇredmˇety, kter´e si uˇzivatel´e berou na dovolenou, m˚uˇzou liˇsit, tak se v obou aplikac´ıch generuje velk´e mnoˇzstv´ı doporuˇcen´ych pˇredmˇet˚u, a to i s ohledem na rozliˇsen´ı na aktivity. I pˇres tyto nedostatky jsou tyto aplikace jedny z nejlepˇs´ıch v t´eto dobˇe. Z tohoto d˚uvodu se velmi hod´ı pro inspiraci vytv´aˇren´ı nov´e aplikace.

2.2 Matematick´ y model

2.2.1 Poˇcet z´aznam˚u v datab´azi

Podle poˇctu jednotliv´ych krit´eri´ı je moˇzn´e pˇribliˇznˇe urˇcit, kolik seznam˚u by mˇelo minim´alnˇe existovat, aby byly pokryty vˇsechny moˇznosti. Z tohoto ´udaje je pak moˇzn´e odhadnout probl´emy, kter´e by mohly nastat.

Krit´eria m˚uˇzeme rozepsat jako:

K1, K2, K3, K4....Kn, J1, J2, J −3, ..., Jn

Pro kaˇzd´e krit´erium Ki bude zvolen´a konkr´etn´ı hodnota krit´eria pˇredstavov´ana podmnoˇzinou nab´ızen´ych hodnot, tedykiKi. Pokud je zn´am celkov´y poˇcet moˇznost´ı|Ki| krit´eria Ki, je celkov´y poˇcet moˇzn´ych hodnot tohoto krit´eria

(19)

2.2. Matematick´y model d´an celkov´ym poˇctem podmnoˇzin, tedy mohutnost´ı potenˇcn´ı mnoˇziny

2|Ki|

Pokud neuvaˇzuji vˇsechny podmnoˇziny, ale napˇr´ıklad jen podmnoˇziny ob- sahuj´ıc´ı 1...r moˇzn´ych hodnot, pak pouˇziji vzorec

|Ki| 1

+ |K2i|+ |K3i|+...+ |Kri|

Druh´a skupina krit´eri´ıJ1, J2, J3, ..., Jmpˇredstavuje takov´a, kde z nab´ızen´e mnoˇziny hodnot Ji mohu vˇzdy zvolit pouze jedinou, m´am tedy pˇresnˇe |Ji| moˇznost´ı. Tak celkov´y poˇcet moˇzn´ych kombinac´ı lze zapsat jako:

[ |K1i|+ |K2i|+ |K3i|+...+ |Kri|]∗ |J1| ∗ |J2| ∗ |J3| ∗...∗ |Jm|

T´ımto vzorce jsem schopen zjistit jak velk´y poˇcet seznam˚u je potˇreba k obs´ahnut´ı vˇsech moˇzn´ych kombinac´ı krit´eri´ı.

Je nutn´e ovˇsem poˇc´ıtat s t´ım, ˇze nˇekter´e zadan´e seznamy budou m´ıt stejn´a krit´eria a t´ım se zv´yˇs´ı poˇcet potˇrebn´ych seznam˚u pro obsaˇzen´ı vˇsech krit´eri´ı.

Tento probl´em popisuje Cupon collector problem.

Cupon collector problem se zab´yv´a ot´azkou, kolik je potˇreba zakoupit unik´atn´ıch pˇredmˇet˚u, abychom z´ıskali vˇsechny. Pˇr´ıkladem m˚uˇze b´yt zaku- pov´an´ı sbˇeratelsk´ych kartiˇcek, kter´e jsou prod´av´any v bal´ıˇck´ach po nˇekolika kart´ach. Karty jsou v tˇechto bal´ıˇcc´ıch n´ahodnˇe um´ıstˇeny. M˚uˇze se st´at, ˇze pˇri zakoupen´ı dvou bal´ıˇck˚u budou nˇekter´e karty stejn´e. ˇReˇsen´ım tohoto probl´emu mohou sbˇeratel´e urˇcit, kolik takov´ychto bal´ıˇck˚u budou muset koupit, aby z´ıskali celou kolekci. Jak vypl´yv´a z tohoto zdroje [1]

D´ıky tomuto probl´emu lze urˇcit, kolik seznam˚u je skuteˇcnˇe potˇreba pro naplnˇen´ı vˇsech krit´eri´ı. Pomoc´ı poˇctu moˇzn´ych kombinac´ı krit´eri´ı a pouˇzit´ı aproximaˇcn´ıho vzorce pro v´ypoˇcet tohoto probl´emu, kter´y je n´asleduj´ıc´ı,

E[X] =y(ln(y) + Γ) + 1/2

,se tento poˇcet potˇrebn´ych seznam˚u dozv´ım.

Do tohoto vzorce za y dosad´ım vypoˇcten´e ˇc´ıslo moˇzn´ych kombinac´ı krit´eri´ı.

Za Γ dosad´ım Euler-Mascherovu konstantu, kter´a je rovna pˇribliˇznˇe 0.577216.

Pro objasnˇen´ı jak je moˇzn´e, ˇze nˇekter´e seznamy budou stejn´e z pohledu matematiky, pouˇziji Narozeninov´y paradox.

(20)

Narozeninov´y paradox se zab´yv´a ot´azkou, pˇri jak´em poˇctu osob v m´ıstnosti je pravdˇepodobnost pro n´ahodn´e dvˇe osoby, aby mˇeli narozeniny ve stejn´y den.

Pokud napˇr´ıklad osob v m´ıstnosti je 23, tak pravdˇepodobnost, ˇze tento jev na- stane je rovna 50%. Tento paradox se vyuˇz´ıv´a napˇr´ıklad v bezpeˇcnosti. [2]

K z´ısk´an´ı pravdˇepodobnosti shody je pouˇzit opaˇcn´y numerick´y proces.

Nejprve vypoˇctu, jak´a je pravdˇepodobnost, ˇze vˇsechny seznamy jsou odliˇsn´e.

N´aslednˇe zbyl´a pravdˇepodobnost do 100%, je pravdˇepodobnost pro shodu ale- spoˇn dvou seznam˚u. V t´eto pr´aci budu uvaˇzovat jak´a je pravdˇepodobnost, ˇze shoda je 50%.

Prvn´ı je nutn´e vypoˇc´ıtat poˇcet moˇzn´ych dvojic seznam˚u. Pro tento v´ypoˇcet vyuˇziji n´asleduj´ıc´ı vzorec.

z=s∗(s–1)

kde s je poˇcet seznam˚u. D´ale vypoˇctu pravdˇepodobnost, ˇze jeden p´ar je unik´atn´ı. Za pomoci n´asleduj´ıc´ıho vzorce

p(t) =c∗(c–1)

Promnˇen´a c zde oznaˇcuje poˇcet vˇsech moˇzn´ych krit´eri´ı. ˇSance, ˇze vˇsechny seznamy budou unik´atn´ı, je:

p(u) =p(t)z

P(u) je pravdˇepodobnost, ˇze vˇsechny p´ary budou unik´atn´ı, jelikoˇz se snaˇz´ım zjistit poˇcet nutn´ych seznam˚u, pro urˇcitou pravdˇepodobnost. P(u) se bude rovna t´eto pravdˇepodobnosti. Jak jsem dˇr´ıve zm´ınil tato pravdˇepodobnost se bude rovnat 50%. Zn´am tedy p(u) a mohu si tak´e spoˇc´ıtat p(t). Z posledn´ıho vzorce spoˇc´ıt´am z, z dosad´ım do prvn´ıho vzorce a vypoˇctu s. S pak oznaˇcuje mnou hledan´y poˇcet seznam˚u, kter´y je potˇreba pro 50% pravdˇepodobnost, alespoˇn 2 stejn´ych seznam˚u.

Tuto anal´yzu nyn´ı aplikuji na pˇredpokl´adan´e poˇcty krit´eri´ı v aplikaci Ea- sypacking

Na pˇr´ıkladu aplikace EasyPacking se budu snaˇzit uk´azat, ˇze d´ıky uve- den´ym probl´em˚um nestaˇc´ı pouze urˇcit poˇcet kombinac´ı jednotliv´ych krit´eri´ı.

Je tak´e nutn´e uvaˇzovat jak pravdˇepodobn´e je, ˇze uˇzivatel´e zadaj´ı seznam se stejn´ymi krit´erii. Pro jednoduchost nebudu uvaˇzovat ve v´ypoˇctech, ˇze nˇekter´e destinace nebo aktivity jsou v´ıce vyuˇz´ıv´any.

(21)

2.2. Matematick´y model M˚uˇzu poˇc´ıtat, ˇze na svˇetˇe je pˇribliˇznˇe 200 st´at˚u. D´ale pro utvoˇren´ı pˇredstavy o poˇctu potˇrebn´ych seznam˚u uvaˇzujme 50 moˇzn´ych aktivit, kter´e uˇzivatel´e aplikace budou provozovat na sv´ych cest´ach. Posledn´ımi dvˇema krit´erii je vˇek a pohlav´ı. Pohlav´ı tvoˇr´ı dvˇe moˇznosti. Co se t´yˇce vˇeku, aplikace vyhled´av´a v rozsahu +-5 let od uˇzivatelem zadan´eho vˇeku. Pokud budu uvaˇzovat uˇzivatele v rozpˇet´ı vˇeku 10 – 60 let. Tedy uˇzivatele co jiˇz cestuj´ı a pouˇz´ıvaj´ı chytr´y telefon. Mˇelo by postaˇcit d´ıky intervalu +-5 let 6 z´aznam˚u, kter´e budou rov- nomˇernˇe rozm´ıstˇeny v intervalu 10-60 let.

Z pˇredeˇsl´e ´uvahy vych´az´ı n´asleduj´ıc´ı poˇcty jednotliv´ych krit´eri´ı

• 50 aktivit

• 200 st´at˚u

• 2 pohlav´ı

• 6 odliˇsn´ych vˇekov´ych kategori´ı

Nen´ı pravdˇepodobn´e, ˇze by uˇzivatel zaˇskrtl vˇsechny aktivity. Budu poˇc´ıtat s t´ım, ˇze rozumn´e ˇc´ıslo pro maxim´aln´ı poˇcet aktivit pro jednu cestu je 4. Takto se dostaneme, pomoc´ı dosazen´ı do dˇr´ıve zmiˇnovan´eho vzorce na

[ 501+ 502+ 503+ 504]∗200∗2∗6 = 602820000

D´ale se pouˇziji Cupon collector problem pro zjiˇstˇen´ı poˇctu potˇrebn´ych seznam˚u, tak aby byly vˇsechny krit´eria obs´ahnuta. Dosad´ım do pˇredeˇsl´eho vzorce.

602820000∗(ln(602820000) + 0.577216) + 1/2 = 1.2535247∗1010

Z pˇredeˇsl´eho v´ypoˇctu je vidˇet, ˇze pro naplnˇen´ı vˇsech krit´eri´ı je potˇreba pˇribliˇznˇe dvacetkr´at v´ıce z´aznam˚u.

Jak je vidˇet z v´ysledku v´ypoˇctu, takov´yto poˇcet z´aznam˚u je skoro nemoˇzn´e uchov´avat v datab´azi. Z´aroveˇn vyhled´av´an´ı v takov´em to objemu dat by bylo opravdu pomal´e. Je nutn´e omezit poˇcet tˇech nejvˇetˇs´ıch kriteri´ı. T´ım je jak destinace, tak aktivity.

Ohlednˇe destinac´ı m˚uˇzu poˇc´ıtat s t´ım, ˇze nˇekter´e destinace nejsou navˇstˇevov´any, napˇr´ıklad s ohledem na situaci v tˇechto zem´ıch. D´ale ne v kaˇzd´e destinaci lze prov´adˇet vˇsech 50 aktivit. Ovˇsem ani tento pˇredpoklad nesn´ıˇz´ı poˇcet seznam˚u dostateˇcnˇe.

(22)

M˚uˇzu ovˇsem ˇr´ıci, ˇze nˇejak´e seznamy budou velice podobn´e popˇr´ıpadˇe do- konce shodn´e. Pˇr´ıkladem m˚uˇze b´yt lyˇzov´an´ı v Alp´ach nebo dovolen´a u moˇre v jiˇzn´ı Evropˇe. Je tedy zbyteˇcn´e uchov´avat takto shodn´e seznamy. Bylo by tedy v´yhodn´e vytvoˇrit ”slovn´ık”spoleˇcn´ych destinac´ı a aktivit, kde je pˇredpoklad, ˇze seznamy budou stejn´e. Na z´akladˇe tohoto omezit poˇcet podobn´ych seznam˚u.

2.3 Anal´ yza moˇ znost´ı ˇ reˇ sen´ı

Pro realizaci aplikace je nutn´e zvolit typ datab´aze a jej´ı distribuci. D´ale je nutn´e realizovat serverovou ˇc´ast. U serverov´e ˇc´asti je zapotˇreb´ı analyzovat moˇzn´a ˇreˇsen´ı a zvolit to nejvhodnˇejˇs´ı. V r´amci realizace aplikace jako takov´e nen´ı mnoho moˇznost´ı, ale st´ale je zaj´ımav´e zanalyzovat moˇznosti.

2.3.1 Datab´aze

Prvn´ı bych se zamˇeˇril na ˇreˇsen´ı datab´aze ˇc´asti. Koncept aplikace je takov´y, ˇze vˇetˇsinu aplikace budou tvoˇrit ˇc´ıseln´ıky. D˚uvod pro toto ˇreˇsen´ı je minimalizovat duplicitu a objem dat v datab´azi. Napˇr´ıklad pˇredmˇety se budou u mnoho seznam˚u opakovat.

Na zaˇc´atku je d˚uleˇzit´e se rozhodnout mezi relaˇcn´ımi a nerelaˇcn´ımi da- tab´azemi. Vˇetˇsina dotaz˚u do datab´aze bude jednoduch´ych. I kdyˇz se d´ıky ˇc´ıseln´ık˚um nebude jednat o velk´e mnoˇzstv´ı z´aznam˚u, bude potˇreba velice rychl´e dotazov´an´ı. Rychlost dotazov´an´ı je velice d˚uleˇzit´a, jelikoˇz v dneˇsn´ı dobˇe rozhoduje, zda aplikace bude ´uspˇeˇsn´a nebo nikoliv. ˇZ´adn´y uˇzivatel nechce na v´ysledky ˇcekat dlouho.

Strukturovan´a data se skl´adaj´ı z jasnˇe definovan´ych datov´ych typ˚u a d´ıky jejich sch´ematu se v nich snadno vyhled´av´a. [3].

V aplikace je jasnˇe d´ano, jak´a data budou u jednotliv´ych seznam˚u zad´av´ana.

Typ tˇechto dat bude pˇredem definovan´y. Budou tedy vznikat strukturovan´a data. Mohu ˇr´ıci, ˇze pˇredeˇsl´e poˇzadavky, kter´e aplikace klade na datab´azi, splˇnuj´ı relaˇcn´ı datab´aze. Jak je pops´ano v tomto zdroji [4] Pro rychl´e naˇc´ıt´an´ı z datab´aze je nutn´e pouˇz´ıt indexy.

D˚uvod pro vytvoˇren´ı index˚u na dan´e tabulce v datab´azi je zrychlen´ı pro- hled´av´an´ı tabulky a nalezn´ı z´aznam˚u, kter´e hled´ame. Cena za zrychlen´ı vy- hled´av´an´ı pomoc´ı index˚u je zpomalen´ı vkl´adan´ı z´aznam˚u. Vkl´ad´an´ı nov´ych z´aznam˚u do tabulky bez indexu je jednoduch´e. Datab´aze nalezne dalˇs´ı pr´azdn´y prostor a na nˇej z´aznam vloˇz´ı. Pokud je z´aznam vkl´ad´an do indexovan´e ta- bulky, datab´aze vloˇz´ı nov´y z´aznam do tabulky, n´aslednˇe vloˇz´ı nov´y z´aznam do kaˇzd´eho indexu v tabulce. Vloˇzen´ı indexu mus´ı b´yt na spr´avn´e m´ısto [5].

Hlavn´ı funkc´ı aplikace je vyhled´av´an´ı seznam˚u. Ohlednˇe vkl´ad´an´ı a maz´an´ı

(23)

2.3. Anal´yza moˇznost´ı ˇreˇsen´ı z´aznam˚u a s t´ım spojen´a pr´ace s indexy nen´ı tak d˚uleˇzit´a. D˚uvodem ned˚uleˇzitosti vkl´ad´an´ı je, ˇze uˇzivatel bude sp´ıˇse vyhled´avat seznamy v aplikaci, neˇz je ukl´adat.

Ohlednˇe distribuce datab´aze, toto rozhodnut´ı nech´am aˇz po anal´yze ser- verov´e ˇc´asti. Pro r˚uzn´e ˇreˇsen´ı serverov´e ˇc´asti mohou b´yt r˚uzn´e distribuce pˇr´ıvˇetivˇejˇs´ı.

2.3.2 Backend 2.3.2.1 API

SOAP vyuˇz´ıv´a form´atu XML, zat´ım co REST m˚uˇze vyuˇz´ıvat menˇs´ı form´aty.

Je nez´avisl´ı na platformˇe i jazyku, REST um´ı pouˇz´ıvat pouze HTTP. U SOAP je poˇzadavek i odpovˇed’ zabalen´a do ob´alky, na druhou stranu REST pos´ıl´a ˇ

cist´a data. SOAP se v´ıce hod´ı do enterprise syst´em˚u jako finance nebo tele- komunikace. REST je nejuˇziteˇcnˇejˇs´ı, pokud se jedn´a o aplikace, kter´e pouze vyb´ıraj´ı data z datab´aze nebo data v datab´azi ukl´adaj´ı. V tomto pˇr´ıstupu je rychlejˇs´ı neˇz SOAP, kde jsou poˇzadavky zabaleny. [6]

Aplikace bude slouˇzit pouze pro zobrazov´an´ı dat z datab´aze, pro jejich ukl´ad´an´ı nebo editaci. Jelikoˇz se jedn´a o pˇrenos dat v mobiln´ım zaˇr´ızen´ı, je lepˇs´ı pouˇz´ıt REST s menˇs´ımi objemem dat, co se t´yˇce poˇzadavk˚u a odpovˇed´ı.

Z´aroveˇn je jednoduˇsˇs´ı parsov´an´ı JSON struktury neˇz XML. Aplikace bude komunikovat pomoc´ı HTML, takˇze s t´ımto omezen´ım nen´ı probl´em.

2.3.2.2 Framework

V dneˇsn´ı dobˇe jsou nejpouˇz´ıvanˇejˇs´ı Node.js a Ruby on Rails.

Ruby od Rails je framework vyuˇz´ıvaj´ıc´ı jazyk ruby. Ruby jako takov´e m´a velkou podporu, co se t´yˇce testov´an´ı. Testov´an´ı je moˇzn´e pomoc´ı knihoven Minitest nebo pokroˇcilejˇs´ı knihovny Rspec. Nejen, ˇze se d´ıky tˇemto modul˚um jednoduˇseji p´ıˇs´ı testy, ale je zde moˇzn´e jednoduˇse pouˇz´ıt test driven deve- lopment. V Ruby on Rails je dodrˇzov´an princip jednoduchosti. Kaˇzd´y k´od je lehce ˇciteln´y, udrˇzovateln´y i testovateln´y. Jelikoˇz Ruby on Rails obsahuje mnoho modul˚u, je moˇzn´e je znovu vyuˇz´ıvat, a tak urychlit v´yvoj. Z´aroveˇn komunita okolo Ruby on Rails je velk´a, d´ıky ˇcemuˇz se st´ale objevuj´ı nov´e moduly. [7]

Node.js je dnes na vzestupu. Hlavn´ı pod´ıl na tom m´a jeho rychlost. Mnoho velk´ych spoleˇcnost´ı v ned´avn´e dobˇe pˇreˇslo z Ruby on Rails na Node.js. Node.js m´a stejnˇe jako Ruby on Rails mnoho bal´ık˚u, kter´e ˇreˇs´ı nejr˚uznˇejˇs´ı probl´emy a v´yvoj´aˇr je m˚uˇze jednoduˇse pouˇz´ıt. Node.js je moˇzn´e pouˇz´ıt jak na stranˇe klienta, tak i serveru. [7]

I pˇres to, ˇze Node.js je dnes preferovanˇejˇs´ı, rozhodl jsem se pouˇz´ıt Ruby on Rails. Jeden z d˚uvod˚u je, ˇze bych si ho r´ad vyzkouˇsel a bl´ıˇze pochopil. D´ale je velice rychl´y, co se t´yk´a psan´ı k´odu. Neposledn´ım d˚uvodem je jednoduch´e testov´an´ı pomoc´ı test driven development.

(24)

2.3.2.3 Aplikace

Pro tuto pr´aci jsem se rozhodoval mezi jazykem Java a Kotlin. Hlavn´ım d˚uvodem byla podpora tˇechto jazyk˚u v IDE AndroidStudio. AndroidStudio, jak uˇz n´azev napov´ıd´a, je vytvoˇreno hlavnˇe pro v´yvoj aplikac´ı pro OS An- droid. Proto zde najdeme n´astroje, kter´e s v´yvojem pro OS Android pˇr´ımo souvisej´ı. Jak uˇz emul´ator telefonu, kter´y umoˇzn´ı testov´an´ı aplikace pˇr´ımo v IDE, tak i moˇznost vytv´aˇren´ı obrazovek pomoc´ı designu. V designu obrazovek je moˇzn´e vytv´aˇret jednotliv´e objekty na obrazovce pomoc´ı pˇretahov´an´ı tˇechto objekt˚u z menu. Emul´ator jako takov´y je vcelku n´aroˇcn´ı pro syst´em poˇc´ıtaˇce a bere velk´e mnoˇzstv´ı pamˇeti. Je tedy st´ale lepˇs´ı m´ıt u sebe telefon, kter´y se s IDE propoj´ı, ˇc´ımˇz se testov´an´ı zrychl´ı.

V dneˇsn´ı dobˇe IDE AndroidStudio jiˇz plˇne podporuje jazyk Kotlin. Nen´ı tomu ovˇsem dlouho co Kotlin nebyl ´uplnˇe podporov´an a v´yvoj´aˇri se mohli se- tkat s nˇejak´ymi probl´emy. S t´ım tak´e souvis´ı menˇs´ı poˇcet ˇreˇsen´ı probl´emu na internetov´ych f´orech nebo bloc´ıch. Toto ovˇsem netvoˇr´ı tak velk´y probl´em. Je- likoˇz pokud vyv´ıj´ım v IDE AndroidStudio a vyberu, ˇze budu pouˇz´ıvat Kotlin, tak pokud do tohoto souboru zkop´ıruji java k´od, tak samo IDE mi nab´ıdne, zda nechci k´od pˇrev´est do jazyku Kotlin. Z´aroveˇn, jelikoˇz Kotlin je postaven na jazyku Java, dok´aˇze zpracovat i k´od psan´y v jazyku Java.

2.3.2.4 Zabezpeˇcen´ı

Je d˚uleˇzit´e kontrolovat pˇr´ıstup uˇzivatel˚u na server a to at’ uˇz ovˇeˇren´ım, zda je uˇzivatel pˇrihl´aˇsen a j´ım zaslan´y poˇzadavek na server m´a b´yt zpracov´an, tak ochrana proti ´utok˚um na datab´azi a to zejm´ena ´utoky typu SQL Injection.

2.3.2.5 Autentikace

Pro ovˇeˇren´ı, zda je uˇzivatel pˇrihl´aˇsen a j´ım zaslan´e poˇzadavky se maj´ı zpra- covat, jsem pouˇzil JSONWebToken.

JWTs carry information (called “claims”) via JSON, hence the name JSON Web Tokens. JWT is a standard and has been implemented in almost all popular programming languages. Hence, they can be easily used or exchan- ged in systems implemented in diverse platforms. JWTs are comprised of plain strings, so they can be easily exchanged in a URL or a HTTP header. They are also self-contained and carry information such as payload and signatures.[8]

JsonWebToken je text, kter´y se d´a poslat v hlaviˇcce HTML. Samotn´y to- ken se pak skl´ad´a ze tˇr´ı ˇc´ast´ı hlaviˇcka, obsah a podpis. Hlaviˇcka obsahuje typ tokenu, tady je to JWT a hashovac´ı algoritmus, kter´y byl pouˇzit. Obsah m˚uˇze m´ıt n´asleduj´ıc´ı tˇri typy soukrom´y, veˇrejn´y a registrovan´y. Posledn´ı ˇc´ast´ı je podpis. Podpis je hash z hlaviˇcky, obsahu a tajemstv´ı. Jelikoˇz pouze server

(25)

2.3. Anal´yza moˇznost´ı ˇreˇsen´ı zn´a dan´e tajemstv´ı, nen´ı moˇzn´e, aby s obsahem nˇekdo manipuloval. [8]

Tuto moˇznost jsem zvolil kv˚uli jej´ı jednoduchosti pouˇzit´ı. Ale z´aroveˇn je velice jednoduch´a na implementaci v Ruby on Rails. Ovˇsem mnoho ostatn´ıch jazyk˚u tuto metodu autentikace podporuje a ani tam nen´ı sloˇzit´e ji implemen- tovat. Jako hashovac´ı algoritmus jsem pouˇzil Bcrypt.

bcrypt was designed by Niels Provos and David Mazi`eres based on the Blow- fish cipher: b for Blowfish and crypt for the name of the hashing function used by the UNIX password system.[9]

JSONWebToken pro aplikaci v t´eto pr´aci, kde obsah je id uˇzivatele, pak vypad´a napˇr´ıklad takto:

Hlavicka eyJhbGciOiJIUzI1NiJ9

Obsah eyJ1c2VyX2lkIjoxLCJleHAiOjE1NTQ3MzMwMDB9 Podpis VqJRuX7x6b9ExKkGNyLcSdD6zQaJ cy-Iz6tz2p3rRk 2.3.2.6 SQL Injection

SQL injection is a code injection technique that might destroy your database.

SQL injection is one of the most common web hacking techniques. SQL in- jection is the placement of malicious code in SQL statements, via web page input.[10]

Co se t´yˇce t´eto pr´ace, nejedn´a se o webovou str´anku, ale o aplikaci. Ovˇsem at’ uˇz ˇreˇs´ıme webovou str´anku, aplikaci nebo jak´ykoliv frontend, kter´y komu- nikuje se serverem potaˇzmo s datab´az´ı. A to na z´akladˇe uˇzivatelsk´eho inputu.

Je nutn´e tento probl´em nepˇrehl´ıˇzet, ale zamyslet se zda nem˚uˇze nastat.

Pˇr´ıkladem m˚uˇze b´yt:

”Select * FROM Users WHERE UserId =”

jako id na server pˇrijde ”105;DROP TABLE Users”

Pˇr´ıkaz je validn´ı a provede se. Ovˇsem nen´ı to to co bylo zam´yˇsleno a nam´ısto vyhled´an´ı uˇzivatele se cel´a tabulka vymaˇze, a to at’ uˇz uˇzivatel s id 105 existuje nebo ne.

(26)

Ohlednˇe t´eto pr´ace probl´em m˚uˇze nastat pouze pˇri pˇrihlaˇsov´an´ı nebo re- gistraci uˇzivatele. Jelikoˇz je to jedin´e m´ısto, kde uˇzivatel zad´av´a text, kter´y je n´aslednˇe kontrolov´an s datab´az´ı nebo props´an do datab´aze.

Moˇzn´e ˇreˇsen´ı je pouˇz´ıvat SQL parametry. Kde pokud napˇr´ıklad zjiˇst’uji zda uˇzivatel s dan´ym id existuje v datab´azi nepouˇziji

”SELECT * FROM Users WHERE UserId = 1“

ale

”SELECT * FROM Users WHERE UserId = @0“

n´aslednˇe pˇri prov´adˇen´ı dotazu k nˇemu pˇrid´am hodnoty, kter´e jsem obdrˇzel.

SQL pak kontroluje kaˇzd´y parametr a zajiˇst’uje, jestli je spr´avn´y pro dan´y sloupec. Z´aroveˇn kaˇzd´y parametr pouˇz´ıv´a jako celek a ne jakou ˇc´ast dotazu, kter´a by se mohla prov´est.[10]

Jelikoˇz v t´eto pr´aci pouˇz´ıv´am Ruby on Rails, tak tento probl´em ˇreˇsit ne- mus´ım. To z d˚uvodu, ˇze Ruby on Rails samo vytv´aˇr´ı dotazy a kaˇzd´y dotaz tvoˇr´ı s parametry. Zde je pˇr´ıklad, jak vypad´a dotaz, kter´y Ruby on Rails vy- generuje pˇri hled´an´ı uˇzivatele v datab´azi

”SELECT ”users”.* FROM ”users”WHERE ”users”.”email-$1 LIMIT $2 [[”email”, ”user@gmail.com”], [”LIMIT”, 1]]”

(27)

Kapitola 3

Realizace

3.1 Datab´ aze

Aby byla datab´aze dobˇre udrˇzovateln´a a jednoduˇse se s n´ı pracovalo, je nutn´e dodrˇzet z´akladn´ı principy n´avrhu datab´aze s dodrˇzen´ım norm´aln´ıch forem.

Norm´aln´ıch forem je celkem 6.

Norm´aln´ı formy jsou pak pravidla, kter´a by data v relaci mˇela splˇnovat. ˇC´ım vyˇsˇs´ı norm´aln´ı forma, t´ım lepˇs´ı a jednoduˇsˇs´ı by pr´ace s daty, jejich vyb´ır´an´ım a aktualizacemi mˇela b´yt. Formy jdou postupnˇe od niˇzˇs´ıch k vyˇsˇs´ım, kdy kaˇzd´a vyˇsˇs´ı v sobˇe zahrnuje formy niˇzˇs´ı.“ [11]

Obr´azek 3.1: Norm´aln´ı formy.

Z tohoto ˇcl´anku a z pˇripojen´eho obr´azku vypl´yv´a, ˇze spr´avn´y n´avrh by mˇel dodrˇzovat vˇsechny norm´aln´ı formy.

(28)

Ovˇsem v praxi se ˇcasto pouˇz´ıv´a denormalizace. Denormalizece spoˇc´ıv´a v tom, ˇze v r´amci zrychlen´ı dotaz˚u se zanedbaj´ı nˇekter´e normativn´ı formy.

Rozhodnut´ı ohlednˇe deromlizace jsou sloˇzit´a, jelikoˇz je nutn´e zamyslet se, nad dopadem zrychlen´ı v´ybˇeru dat nad jejich vkl´ad´an´ım. Z´aroveˇn je moˇzn´e, ˇze dojde k redundanci dat.

Ale v pˇr´ıkladu, kter´y jsem pouˇzil v n´avrhu samotn´e datab´aze, se m˚uˇze st´at, ˇze data nejsou z´avisl´a, na prim´arn´ım kl´ıˇci a z´aroveˇn se opakuj´ı. Ovˇsem pokud bychom tato data dali do samostatn´e tabulky, museli bychom z´aroveˇn pouˇz´ıt ciz´ı kl´ıˇc pro nav´az´an´ı dat na danou tabulku. N´aslednˇe pouˇziji pˇr´ıklad t´ykaj´ıc´ı se datab´aze, kter´a je souˇc´ast´ı t´eto diplomov´e pr´ace.

Pokud chci ukl´adat pˇreklady k jednotliv´ym z´aznam˚um, mus´ım u nich uv´adˇet, kter´eho jazyka se t´ykaj´ı. Jazyk dok´aˇzi definovat pomoc´ı tˇr´ı znak˚u.

Ovˇsem vˇsechny z´aznamy v jednom jazyce budou m´ıt stejn´e tyto tˇri znaky.

Nyn´ı je ot´azka, zda nevytvoˇrit novou tabulku nebo ˇc´ıseln´ık, kter´y bude obsa- hovat jednotliv´e zkratky jazyk˚u a t´ım omezit redundanci dat. T´ımto zp˚usobem bych dodrˇzel norm´aln´ı formy pro datab´azi.

Pokud se na to pod´ıv´am z hlediska rychlosti v´ybˇer˚u, vkl´ad´an´ı a velikosti uloˇzen´ych dat. Tak mohu diskutovat tyto zlepˇsen´ı. Pro uloˇzen´ı ciz´ıho kl´ıˇce, kter´y bude u kaˇzd´eho z´aznamu budu pouˇz´ıvat integer, kter´y m´a velikost je 32 bit˚u. Pokud z´aznam o jazyce vloˇz´ım ke kaˇzd´emu z´aznamu, jsou to tˇri p´ısmena tedy varchar velikosti 3, a to je 24 bit˚u. T´ımto zp˚usobem nejen uˇsetˇr´ım m´ısto, ale z´aroveˇn pˇri v´ybˇerech uˇsetˇr´ım ˇcas, jelikoˇz nemus´ım spojovat tabulky.

3.1.1 Tabulky

Jednotliv´e tabulky datab´aze budou n´asleduj´ıc´ı.

• Uˇzivatel - User

• Seznamy - PackingList

• Pˇredmˇety – Item

• Lokality pˇredmˇet˚u - Locations

• Destinace - Destination

• Pˇreklad aktivit - Translation Criterion

• Pˇreklad pˇredmˇet˚u – Translation Item

• Pˇreklad lokalit – Translation Location

• Pˇreklad destinac´ı – Translation Destination Atributy tabulky Uˇzivatel

• Prim´arn´ı kl´ıˇc – id – bigint

(29)

3.1. Datab´aze

• Heslo – password – varchar

• e-mailov´a adresa – email – varchar

• rozpozn´an´ı mezi administr´atorem a bˇeˇzn´ym uˇzivatelem – role – varchar Atributy tabulky seznam

• Prim´arn´ı kl´ıˇc – id – bigint

• Uˇzivatelsk´e hodnocen´ı – rating – integer

• Pohlav´ı – sex – varchar

• Vˇek – age – integer Atributy tabulky destinace

• Prim´arn´ı kl´ıˇc – id – bigint Atributy tabulky pˇredmˇet

• Prim´arn´ı kl´ıˇc – id – bigint Atributy tabulky lokality pˇredmˇet˚u

• Prim´arn´ı kl´ıˇc – id – bigint Atributy tabulky aktivit

• Prim´arn´ı kl´ıˇc – id – bigint Atributy tabulky pˇreklad aktivit

• Prim´arn´ı kl´ıˇc – id – bigint

• Jazyk pˇrekladu – language- varchar

• Pˇreklad – name - varchar Atributy tabulky pˇreklad pˇredmˇet˚u

• Prim´arn´ı kl´ıˇc – id – bigint

• Jazyk pˇrekladu – language- varchar

• Pˇreklad – name - varchar Atributy tabulky pˇreklad lokalit

• Prim´arn´ı kl´ıˇc – id – bigint

• Jazyk pˇrekladu – language- varchar

(30)

• Pˇreklad – name - varchar Atributy tabulky pˇreklad destinac´ı

• Prim´arn´ı kl´ıˇc – id – bigint

• Jazyk pˇrekladu – language- varchar

• Pˇreklad – name - varchar 3.1.2 Relace

Propojen´ı jednotliv´ych tabulek bude n´asleduj´ıc´ı.

• Uˇzivatel - seznam

Uˇzivatel m´a sv´e seznamy, kter´e vytvoˇril. Uˇzivatel m˚uˇze m´ıt v´ıce se- znam˚u, proto spojen´ı Uˇzivatele a seznamu bude relac´ı n:1. Kv˚uli tomu bude tabulka seznam˚u obsahovat ciz´ı kl´ıˇc uˇzivatele.

• Seznam / aktivity

Seznam je spojen s aktivitami. Kaˇzd´y seznam m˚uˇze m´ıt v´ıce aktivit, ale z´aroveˇn kaˇzd´a aktivita m˚uˇze b´yt obsaˇzena ve v´ıce seznamech. Z tˇechto d˚uvod˚u bude mezi tˇemito tabulkami relace n:m. Toto spojen´ı znamen´a vytvoˇren´ı relaˇcn´ı tabulky List Criterion. Tato tabulka bude obsahovat dva atributy. Prvn´ı bude ciz´ı kl´ıˇc dan´eho seznamu. Druh´y atribut bude ciz´ı kl´ıˇc aktivity.

• Aktivita - pˇreklad aktivity

Kaˇzd´a aktivita bude spojena se sv´ymi pˇreklady do r˚uzn´ych jazyk˚u.

Kaˇzd´a aktivita bude m´ıt v´ıce pˇreklad˚u. To znamen´a spojen´ı 1:n. Proto bude do tabulky pˇreklad aktivity vloˇzen ciz´ı kl´ıˇc z tabulky aktivita.

• Seznam - destinace

Seznam je d´ale spojen s tabulkou destinace. Kaˇzd´y seznam m´a pr´avˇe jednu destinaci. To zaˇr´ıd´ı relace 1:n. Pro takov´eto spojen´ı, bude nutn´e, aby tabulka seznam obsahovala ciz´ı kl´ıˇc tabulky destinace.

• Destinace - pˇreklad destinace

Destinace m´a tak´e sv˚uj pˇreklad, stejnˇe jako bylo u aktivity. Bude stejnˇe jako tam pˇrid´an ciz´ı kl´ıˇc destinace do tabulky pˇreklad destinace.

• Seznam - pˇredmˇet

Kaˇzd´y seznam mus´ı obsahovat jednotliv´e pˇredmˇety, kter´e si uˇzivatel bude br´at s sebou. Je zˇrejm´e, ˇze v jednotliv´ych seznamech bude v´ıce pˇredmˇet˚u. Z´aroveˇn u jednotliv´ych seznam˚u se budou pˇredmˇety opako- vat. Situace je tedy stejn´a jako u relace tabulky seznam a aktivity. Z

(31)

3.1. Datab´aze ˇ

cehoˇz plyne relace n:m. Vznikne nov´a tabulka list item obsahuj´ıc´ı ciz´ı kl´ıˇce jak z tabulky seznam, tak z tabulky pˇredmˇet.

• Pˇredmˇet - pˇreklad pˇredmˇetu

Pˇredmˇety mus´ı b´yt nav´az´any na svoje pˇreklady. Nav´az´an´ı bude reali- zovat relace 1:n. Bude tedy opˇet pˇrid´an ciz´ı kl´ıˇc z tabulky pˇredmˇet do tabulky pˇreklad pˇredmˇet˚u.

• Pˇredmˇet - lokalita

Jak bylo v anal´yze zm´ınˇeno, kaˇzd´y pˇredmˇet m´a svou lokalizaci, kde se nach´az´ı. Z tohoto d˚uvodu je nutn´a relace mezi pˇredmˇetem a lokac´ı. Na jedn´e lokaci se m˚uˇze nach´azet v´ıce pˇredmˇet˚u. Proto se tato relace bude typu 1:n. Bude tedy pˇrid´an ciz´ı kl´ıˇc z tabulky lokace do tabulky pˇredmˇet.

• Lokalita - pˇreklad lokality

Posledn´ı z relac´ı bude relace mezi lokalitami a pˇrekladem lokalit. Opˇet jako u pˇredchoz´ıch pˇr´ıpad˚u se bude jednat o relaci 1:n. Coˇz zaˇr´ıd´ı pˇrid´an´ı ciz´ıho kl´ıˇce z tabulky lokace do tabulky pˇreklad lokace.

(32)

3.1.3 Sch´ema

Obr´azek 3.2: Sch´ema datab´aze.

(33)

3.2. Diagramy

3.2 Diagramy

3.2.1 UseCase

Obr´azek 3.3: Use case.

Jak bylo dˇr´ıve zm´ınˇeno, uˇzivatel bude moc prov´adˇet n´asleduj´ıc´ı aktivity:

• Registrace

• Pˇrihl´aˇsen´ı

• Vytvoˇren´ı nov´eho seznamu

• Vyhled´av´an´ı seznam˚u

• Pˇrid´an´ı hodnocen´ı k seznamu

• Zobrazen´ı sv´ych seznam˚u

• Editovat sv´e seznamy

• Mazat sv´e seznamy

• Zobrazit si sv´e seznamy

(34)

3.2.2 Popis jednotliv´ych aktivit 3.2.2.1 Registrace

Pˇri otevˇren´ı aplikace se uˇzivatel dostane na obrazovku pˇrihl´aˇsen´ı. Zde vypln´ı email. D´ale zad´a sv´e heslo. Nakonec stiskne tlaˇc´ıtko registrovat. Aplikace zkon- troluje, zda je email ve spr´avn´em tvaru, popˇr´ıpadˇe neobsahuje ˇz´adn´e speci´aln´ı znaky.

Aplikace poˇsle poˇzadavek na server s uˇzivatelov´ym emailem a heslem.

Server pˇrevede heslo na bcrypt hash. N´aslednˇe uloˇz´ı uˇzivatelsk´e ´udaje do datab´aze a vygeneruje JSONWebToken pro authorizaci uˇzivatele na dalˇs´ı poˇzadavky. Tento token n´aslednˇe odeˇsle zpˇet do aplikace. N´aslednˇe je uˇzivatel pˇresmˇerov´an do aktivity menu.

Obr´azek 3.4: Activity diagram registrace.

3.2.2.2 Pˇrihl´aˇsen´ı

Pˇri otevˇren´ı aplikace se uˇzivatel dostane na obrazovku pˇrihl´aˇsen´ı. Zde vy- pln´ı email, kter´ym se dˇr´ıve registroval. D´ale zad´a sv´e heslo. Nakonec stiskne

(35)

3.2. Diagramy tlaˇc´ıtko pˇrihl´aˇsen´ı. Aplikace zkontroluje, zda je email ve spr´avn´em tvaru, popˇr´ıpadˇe neobsahuje ˇz´adn´e speci´aln´ı znaky.

Aplikace poˇsle poˇzadavek na server s uˇzivatelem zadan´ym emailem a hes- lem. Server pˇrevede heslo na bcrypt hash. N´aslednˇe zkontroluje, zda v da- tab´azi existuje uˇzivatel s danou emailovou adresou a heslem. Pokud takov´yto uˇzivatel existuje, vygeneruje JSONWebToken pro authorizaci uˇzivatele na dalˇs´ı poˇzadavky. Tento token n´aslednˇe odeˇsle zpˇet do aplikace.

V pˇr´ıpadˇe, ˇze uˇzivatel neexistuje, server odeˇsle zpˇet zpr´avu o ˇspatn´ych pˇrihlaˇsovac´ıch ´udaj´ıch. Pokud byl uˇzivatel ovˇeˇren, aplikace ho pˇresmˇeruje do aktivity menu. V opaˇcn´em pˇr´ıpadˇe se uˇzivateli zobraz´ı upozornˇen´ı, ˇze zadal ˇspatn´e pˇrihlaˇsovac´ı ´udaje.

(36)

Obr´azek 3.5: Activity diagram pˇrihl´aˇsen´ı.

3.2.2.3 Menu

V menu je seznam moˇzn´ych aktivit v aplikaci. Vyhledat seznam, vytvoˇrit seznam, zobrazit m´e seznamy a zobrazit informace o aplikaci.

3.2.2.4 Vytvoˇren´ı nov´eho seznamu

Uˇzivatel se pˇrihl´as´ı nebo registruje. N´aslednˇe v aktivitˇe menu zvol´ı Vytvoˇrit nov´y.

Zobrazen´ı aktivit Aplikace zaˇsle poˇzadavek na obdrˇzen´ı vˇsech aktivit, kter´e m˚uˇze uˇzivatel na sv´e cestˇe uskuteˇcnit. V r´amci tohoto poˇzadavku je pˇripojen JSONWebToken, kter´y dˇr´ıve obdrˇzel. Pokud dan´y JSONWebToken na serveru existuje a je st´ale validn´ı, server vybere vˇsechny aktivity z datab´aze a zaˇsle je zpˇet do aplikace. Pokud JSONWebToken neexistuje nebo nen´ı jiˇz validn´ı, server zaˇsle informaci o nepoveden´em ovˇeˇren´ı.

(37)

3.2. Diagramy Pokud aplikace obdrˇzela seznam aktivit, pˇresmˇeruje uˇzivatele na zobra- zen´ı aktivit. V pˇr´ıpadˇe, ˇze se ovˇeˇren´ı nezdaˇrilo, je uˇzivateli zobrazena zpr´ava o chybˇe a n´aslednˇe je pˇresmˇerov´an na aktivitu pˇrihl´aˇsen´ı.

V seznamu aktivit uˇzivatel vybere vˇsechny aktivity spojen´e s jeho ces- tou. Pak sv˚uj v´ybˇer odsouhlas´ı stisknut´ım tlaˇc´ıtka ok. Aplikace si zapamatuje aktivity, kter´e uˇzivatel zvolil. N´aslednˇe je pˇresmˇerov´an na zobrazen´ı destinac´ı.

Zobrazen´ı destinac´ı Aplikace zaˇsle poˇzadavek na server ohlednˇe z´ısk´an´ı vˇsech destinac´ı. Tento poˇzadavek opˇet obsahuje JSONWebToken pro ovˇeˇren´ı uˇzivatele. Pokud je JSONWebToken validn´ı, server vybere z datab´aze vˇsechny destinace a zaˇsle je zpˇet do aplikace.

V opaˇcn´em pˇr´ıpadˇe zaˇsle zpr´avu o chybn´em ovˇeˇren´ı. Pokud ovˇeˇren´ı probˇehlo v poˇr´adku a aplikace obdrˇzela seznam destinac´ı, je uˇzivatel pˇresmˇerov´an na aktivitu zobrazen´ı destinac´ı. V pˇr´ıpadˇe opaˇcn´em se uˇzivateli zobraz´ı zpr´ava o ne´uspˇeˇsn´em ovˇeˇren´ı a je pˇresmˇerov´an na aktivitu pˇrihl´aˇsen´ı.

V aktivitˇe zobrazen´ı destinac´ı si uˇzivatel vybere jednu ze zobrazen´ych destinac´ı, podle toho, kam cestuje. Sv˚uj v´ybˇer potvrd´ı stisknut´ım tlaˇc´ıtka Ok. Aplikace si jeho v´ybˇer pˇrid´a k zapamatovan´ym aktivit´am. N´aslednˇe je uˇzivatel pˇresmˇerov´an na aktivitu zad´an´ı doplˇnuj´ıc´ıch informac´ı.

Doplˇnuj´ıc´ı informace Pˇri zad´av´an´ı doplˇnuj´ıc´ıch informac´ı uˇzivatel vypˇn´ı sv˚uj aktu´aln´ı vˇek a vybere zda je muˇz nebo ˇzena. Po vyplnˇen´ı tˇechto informac´ı uˇzivatel stiskne tlaˇc´ıtko Ok. Aplikace si zadan´e ´udaje pˇrid´a k jiˇz zapamato- van´ym aktivit´am a destinaci. Uˇzivatel je pˇresmˇerov´an na zobrazen´ı m´ıstnost´ı.

Zobrazen´ı m´ıstnost´ı Aplikace se dot´aˇze na server pro z´ısk´an´ı vˇsech m´ıstnost´ı.

Poˇzadavek opˇet obsahuje JSONWebToken. Pokud je JSONWebToken validn´ı, server vybere vˇsechny m´ıstnosti z datab´aze a zaˇsle je zpˇet do aplikace. V opaˇcn´em pˇr´ıpadˇe zaˇsle zpr´avu o chybn´em JSONWebTokenu.

V pˇr´ıpadˇe, ˇze ovˇeˇren´ı bylo ´uspˇeˇsn´e a aplikace z´ıskala seznam m´ıstnost´ı, je uˇzivatel pˇresmˇerov´an na aktivitu zobrazen´ı m´ıstnost´ı. Pokud ovˇeˇren´ı ´uspˇeˇsn´e nebylo, je uˇzivateli zobrazena chybov´a zpr´ava o ne´uspˇeˇsn´em ovˇeˇren´ı a je uˇzivatel pˇresmˇerov´an na aktivitu pˇrihl´aˇsen´ı.

Zobrazen´ı pˇredmˇet˚u Pˇri zobrazen´ı m´ıstnost´ı uˇzivatel projde jednotliv´e m´ıstnosti. Po kliknut´ı na danou m´ıstnost se aplikace dot´aˇze na server pro z´ısk´an´ı vˇsech pˇredmˇet˚u, kter´e jsou s danou m´ıstnost´ı sv´az´any. Opˇet je spolu s poˇzadavkem zasl´an JSONWebToken pro ovˇeˇren´ı. Pokud je JSONWebTo- ken spr´avn´y, server vybere z datab´aze vˇsechny pˇredmˇety sv´azan´e s danou

(38)

m´ıstnost´ı a odeˇsle je zpˇet do aplikace. V opaˇcn´em pˇr´ıpadˇe je zpˇet odesl´ana chybov´a zpr´ava.

V pˇr´ıpadˇe ´uspˇeˇsn´eho ovˇeˇren´ı je uˇzivatel pˇresmˇerov´an na aktivitu vkl´ad´an´ı pˇredmˇet˚u. V opaˇcn´em pˇr´ıpadˇe se uˇzivateli zobraz´ı chybov´e upozornˇen´ı a je pˇresmˇerov´an na aktivitu pˇrihl´aˇsen´ı.

U zobrazen´ı pˇredmˇet˚u jsou uˇzivateli zobrazeny vˇsechny pˇredmˇety z dan´e m´ıstnosti spolu s ˇc´ıslem oznaˇcuj´ıc´ım poˇcet dan´ych pˇredmˇet˚u potˇrebn´ych pro cestu. Pokud uˇzivatel pˇredmˇet nepotˇrebuje, nic nevyplˇnuje a ponech´a v´ychoz´ı hodnotu 0. Pokud uˇzivatel tuto m´ıstnost jiˇz navˇst´ıvil, aplikace si dˇr´ıve vy- plnˇen´e ´udaje pamatuje a pˇri naˇc´ıt´an´ı pˇredmˇet˚u zmˇen´ı v´ychoz´ı hodnotu poˇctu na j´ım jiˇz vyplnˇenou.

Vyplnˇen´ı cel´eho seznamu Uˇzivatel projde vˇsechny m´ıstnosti a postupnˇe si pˇrid´a do seznamu vˇsechny pˇredmˇety potˇrebn´e pro cestu. Kdyˇz je uˇzivatel spokojen se vˇsemi j´ım pˇridan´ymi pˇredmˇety, stiskne tlaˇc´ıtko Save list.

N´aslednˇe pak aplikace zaˇsle poˇzadavek na z´ısk´an´ı id uˇzivatele. Ten se na serveru dek´oduje z jeho JSONWebTokenu a zaˇsle se zpˇet do aplikace. Pot´e aplikace zaˇsle poˇzadavek na vytvoˇren´ı seznamu vˇcetnˇe id uˇzivatele, pohlav´ım a vˇeku uˇzivatele, id destinace a JSONWebTokenu. Na serveru se vytvoˇr´ı dan´y seznam a do aplikace je zasl´ano id takto vytvoˇren´eho seznamu.

Dalˇs´ım krokem je pˇrid´an´ı vˇsech aktivit k seznamu. Zde aplikace zaˇsle na server poˇzadavek pro pˇrid´an´ı aktivit s id seznamu, id vˇsech zvolen´ych aktivit a JSONWebTokenu. Server podle id seznamu pˇrid´a vˇsechny obdrˇzen´e aktivity.

Nakonec pak aplikace poˇsle poˇzadavek na pˇrid´an´ı vˇsech pˇredmˇet˚u s id seznamu, id vˇsech pˇredmˇet˚u a JSONWebTokenem. Server opˇet pomoc´ı id se- znamu pˇrid´a jednotliv´e pˇredmˇety.

Pˇri kaˇzd´em poˇzadavku se opˇet ovˇeˇruje JSONWebToken stejnˇe, jak tomu bylo u pˇredchoz´ıch poˇzadavk˚u. Pokud nen´ı platn´y je uˇzivatel pˇresmˇerov´an na aktivitu pˇrihl´aˇsen´ı.

Po ´uspˇeˇsn´em uloˇzen´ı vˇsech ˇc´ast´ı seznamu je uˇzivatel pˇresmˇerov´an na zob- razen´ı j´ım vytvoˇren´eho seznamu.

(39)

3.2. Diagramy

Obr´azek 3.6: Activity diagram Vytvoˇren´ı nov´eho seznamu.

(40)

3.2.2.5 Vyhled´av´an´ı

Vyhled´av´an´ı jiˇz existuj´ıc´ıho seznamu je velice podobn´e vytv´aˇren´ı nov´eho se- znamu. Uˇzivatel se pˇrihl´as´ı nebo registruje. N´aslednˇe zvol´ı v menu Vyhledat.

Pot´e, stejnˇe jako pˇri vytv´aˇren´ı, zad´a aktivity spojen´e s cestou a c´ılovou desti- naci. D´ale vypln´ı doplˇnuj´ıc´ı informace.

Zobrazen´ı seznam˚u Aplikace n´aslednˇe zaˇsle poˇzadavek na z´ısk´an´ı seznam˚u dle zadan´ych informac´ı. Server z datab´aze vybere vˇsechny seznamy splˇnuj´ıc´ı krit´eria. Akor´at vˇek si server uprav´ı na interval zadan´y vˇek +-5 let. Takto nalezen´e seznamy seˇrad´ı podle jejich hodnocen´ı a odeˇsle je zpˇet.

Opˇet server kontroluje, zda m´a uˇzivatel platn´y JSONWebToken. Pokud tomu tak nen´ı je s chybou pˇresmˇerov´an na pˇrihl´aˇsen´ı. V opaˇcn´em pˇr´ıpadˇe se mu zobraz´ı nalezen´e seznamy.

Uˇzivatel si zvol´ı jeden z uveden´ych seznam˚u. Stejnˇe jako pˇri vytv´aˇren´ı je pˇresmˇerov´an na seznam m´ıstnost´ı, pod kter´ymi nalezne pˇredmˇety. Kter´e se tam nach´azej´ı. Rozd´ıl oproti aktivitˇe vytv´aˇren´ı je v tom, ˇze se pˇri rozkliknut´ı zobraz´ı pouze pˇredmˇety, jenˇz jsou v seznamu pˇridan´e a ne vˇsechny pˇredmˇety, kter´e se v m´ıstnosti nach´azej´ı. Dalˇs´ı rozd´ıl je, ˇze pˇredmˇety nelze editovat, ale pouze oznaˇcit jako jiˇz sbalen´e. Aplikace si opˇet pamatuje, jak´e pˇredmˇety uˇzivatel jiˇz oznaˇcil jako sbalen´e a pˇri opˇetovn´em navˇst´ıven´ı m´ıstnosti se mu dan´e pˇredmˇety oznaˇc´ı.

(41)

3.2. Diagramy

Obr´azek 3.7: Activity diagram Vytvoˇren´ı nov´eho seznamu.

(42)

3.2.2.6 Pˇrid´an´ı hodnocen´ı

Po dokonˇcen´ı sbalen´ı vˇsech pˇredmˇet˚u v aktivitˇe vyhled´av´an´ı. Je uˇzivatel dot´az´an na zvolen´ı hodnocen´ı dan´eho seznamu. Uˇzivatel vybere hodnocen´ı od 1 do 5 a odsouhlas´ı ho. Aplikace pak n´aslednˇe zaˇsle poˇzadavek na pˇrid´an´ı hodno- cen´ı. Server pˇrid´a hodnocen´ı k dan´emu seznamu a odeˇsle odpovˇed’ o ´uspˇechu.

N´aslednˇe je uˇzivatel pˇresmˇerov´an do menu.

Obr´azek 3.8: Activity diagram Pˇrid´an´ı hodnocen´ı.

3.2.2.7 Spr´ava vlastn´ıch seznam˚u

Seznamy jsou uloˇzen´e s n´avaznost´ı na uˇzivatele, kter´y je vytvoˇril. T´ım p´adem m´a vlastn´ık moˇznost sv´e seznamy spravovat.

3.2.2.8 Zobrazen´ı vlastn´ıch seznam˚u

Pokud uˇzivatel po pˇrihl´aˇsen´ı zvol´ı v menu tlaˇc´ıtko M´e, aplikace odeˇsle poˇzadavek na server k z´ısk´an´ı vˇsech seznam˚u, kter´e kdy dan´y uˇzivatel vytvoˇril. Server vyhled´a v datab´azi seznamy, kter´e tomuto vyhovuj´ı, a odeˇsle je zpˇet do apli- kace. Opˇet zde prob´ıh´a kontrola JSONWebTokenu. Pokud je ´uspˇeˇsn´a, jsou

(43)

3.2. Diagramy uˇzivateli zobrazeny vˇsechny jeho seznamy. V opaˇcn´em pˇr´ıpadˇe je odk´az´an na pˇrihl´aˇsen´ı.

Obr´azek 3.9: Activity diagram zobrazen´ı vlastn´ıch seznam˚u.

3.2.2.9 Smaz´an´ı

Po pˇrihl´aˇsen´ı, zvolen´ı zobrazen´ı sv´ych seznam˚u, vybr´an´ı nˇekter´eho ze seznam˚u a kliknut´ı smaz´an´ı v menu. Je odesl´an poˇzadavek na server pro smaz´an´ı dan´eho seznamu. Server dan´y seznam smaˇze a odeˇsle odpovˇed’ o ´uspˇechu. Prob´ıh´a zde kontrola JSONWebTokenu. Pˇri ne´uspˇechu je uˇzivatel odk´az´an na pˇrihl´aˇsen´ı.

Po ´uspˇeˇsn´em smaz´an´ı aplikace pˇresmˇeruje uˇzivatele zpˇet do aktivity sv´ych seznam˚u.

(44)

Obr´azek 3.10: Activity diagram smaz´an´ı.

3.2.2.10 Editace

Uˇzivatel se pˇrihl´as´ı, nech´a si zobrazit sv´e seznamy, zvol´ı seznam, kter´y chce editovat, a klikne editovat. N´aslednˇe je aplikac´ı pˇresmˇerov´an do aktivity zob- razen´ı m´ıstnost´ı se stejnou funkcionalitou, jako pˇri vytv´aˇren´ı nov´eho seznamu.

Ovˇsem rovnou si aplikace od serveru vyˇz´ad´a jiˇz pˇridan´e pˇredmˇety, takˇze po navˇst´ıven´ı m´ıstnosti nalezne uˇzivatel u jiˇz pˇridan´ych pˇredmˇet˚u jejich poˇcet a nikoliv 0. Postupnˇe zedituje vˇsechny pˇredmˇety, kter´e si pˇreje. Nakonec zmˇeny odsouhlas´ı kliknut´ım uloˇzit seznam. Jako pˇri vytv´aˇren´ı je pot´e pˇresmˇerov´an na zobrazen´ı dan´eho seznamu. Opˇet zde prob´ıh´a kontrola pomoc´ı JSONWeb- Tokenu.

(45)

3.2. Diagramy

Obr´azek 3.11: Activity diagram editace.

(46)

3.2.2.11 Zobrazen´ı

Je moˇzn´e pro uˇzivatele si pouze zobrazit nˇekter´y ze sv´ych seznam˚u. Zejm´ena, aby nemusel proch´azet celou aktivitou vyhledat, ale mohl rovnou pouˇz´ıt sv˚uj seznam. Pokud tedy nam´ısto smaz´an´ı ˇci editace uˇzivatel zvol´ı zobrazit. Do- stane se do aktivity zobrazen´ı m´ıstnost´ı, kter´a je shodn´a s aktivitou zobrazen´ı m´ıstnost´ı pˇri vyhled´av´an´ı a n´asledn´em zobrazen´ı pˇredmˇet˚u, kde uˇzivatel za- klik´av´a jiˇz sbalen´e pˇredmˇety. Opˇet v jednotliv´ych kroc´ıch prob´ıh´a kontrola JSONWebTokenu.

(47)

3.2. Diagramy

Obr´azek 3.12: Activity diagram zobrazen´ı.

(48)

3.3 MockUps

Kaˇzd´a obrazovka obsahuje z´ahlav´ı. Z´ahlav´ı obsahuje n´azev aplikace. Jak bude vidˇet pozdˇeji kromˇe obrazovky pro pˇrihl´aˇsen´ı/registrace obsahuje nav´ıc jeˇstˇe tlaˇc´ıtko menu. Toto tlaˇc´ıtko odkazuje na obrazovku menu. Tlaˇc´ıtko tam je proto, aby se uˇzivatel mohl z jak´ekoliv aktivity dostat zpˇet na obrazovku menu a t´ım zapoˇc´ıt jinou aktivitu.

3.3.1 Pˇrihl´aˇsen´ı

Obrazovka pˇrihl´aˇsen´ı obsahuje logo aplikace. Pod t´ımto logem je um´ıstˇeno pole pro zad´an´ı emailu uˇzivatele a n´asleduje pole pro zad´an´ı hesla. Pak jsou zde vidˇet dvˇe tlaˇc´ıtka, a to Pˇrihl´asit nebo Registrovat. Jejich zobrazen´ı z´avis´ı na tom, zda je uˇzivatel jiˇz registrov´an nebo ne.

Obr´azek 3.13: Mockup pˇrihl´aˇsen´ı.

3.3.2 Menu

Menu je hlavn´ım rozcestn´ıkem aplikace. Zde se uˇzivatel rozhoduje za jak´ym

´

uˇcelem do aplikace pˇriˇsel. Pro jasnost aktivity je tu nadpis Menu. D´ale se menu skl´ad´a ze ˇctyˇr tlaˇc´ıtek. Prvn´ı je Vytvoˇrit nov´y seznam. N´asleduje Vyhledat

(49)

3.3. MockUps seznam. V neposledn´ı ˇradˇe zde uˇzivatel najde Moje seznamy. V pˇr´ıpadˇe, ˇze by se uˇzivatel chtˇel dozvˇedˇet nˇeco o aplikaci tak je zde tlaˇc´ıtko O aplikaci.

Obr´azek 3.14: Mockup menu.

3.3.3 Aktivity

Zde se uˇzivatel rozhoduje, jak´e ˇcinnosti bude v r´amci sv´e cesty podnikat. Ilu- strativnˇe je zde zobrazeno 16 ˇcinnost´ı. Pole s ˇcinnostmi bude moˇzn´e posouvat.

To hlavnˇe proto, ˇze ˇcinnost´ı bude pravdˇepodobnˇe v´ıce neˇz se na obrazovku vejde. Kaˇzd´a ˇcinnost je opatˇrena zaˇskrt´avac´ım polem s popiskem ˇcinnosti.

Nakonec tato obrazovka obsahuje tlaˇc´ıtko Ok pro potvrzen´ı v´ybˇeru.

(50)

Obr´azek 3.15: Mockup aktivity.

3.3.4 Destinace

Zde uˇzivatel zad´a do jak´e destinace bude cestovat. Tato obrazovka se po- dob´a obrazovce Aktivity. Rozd´ıl je v tom, ˇze nam´ısto zaˇskrt´avac´ıch pol´ı, m˚uˇze uˇzivatel zvolit pouze jednu destinaci. Opˇet bude pole s destinacemi posouvac´ı, jelikoˇz nyn´ı je ve svˇetˇe okolo 200 zem´ı.

(51)

3.3. MockUps

Obr´azek 3.16: Mockup destinace.

3.3.5 Doplˇnuj´ıc´ı informace

Pro pˇresnˇejˇs´ı vyhled´av´an´ı je nutn´e, aby uˇzivatel zadal sv˚uj vˇek a pohlav´ı.

Proto na t´eto obrazovce je jak pole pro vyplnˇen´ı vˇeku, jenˇz je omezen´e pouze na ˇc´ıseln´y vstup, tak dva pˇrep´ınaˇce a to bud’ muˇz nebo ˇzena. Opˇet je zde tlaˇc´ıtko pro potvrzen´ı v´ybˇeru.

(52)

Obr´azek 3.17: Mockup doplˇnuj´ıc´ı informace.

3.3.6 M´ıstnosti nov´y seznam

Zde jiˇz uˇzivatel nalezne jednotliv´e m´ıstnosti, pod kter´ymi se ukr´yvaj´ı jednot- liv´e pˇredmˇety. Jsou zde tedy m´ıstnosti v podobˇe tlaˇc´ıtka ve dvou sloupc´ıch.

A n´aslednˇe tlaˇc´ıtko pro uloˇzen´ı seznamu.

(53)

3.3. MockUps

Obr´azek 3.18: Mockup M´ıstnosti nov´y seznam.

3.3.7 Pˇredmˇety nov´y seznam

V t´eto obrazovce uˇzivatel pˇrid´av´a do seznamu vˇeci z urˇcit´e m´ıstnosti, kter´e si bude br´at s sebou. Je zde vidˇet seznam vˇsech vˇec´ı, kter´e si uˇzivatel m˚uˇze sbalit.

Vedle kaˇzd´eho pˇredmˇetu je pole pro zad´an´ı poˇctu jednotliv´ych pˇredmˇet˚u. Toto pole bude na zaˇc´atku inicializovan´e na 0. Nakonec je zde potvrzovac´ı tlaˇc´ıtko.

Opˇet je pole s pˇredmˇety posuvn´e.

(54)

Obr´azek 3.19: Mockup pˇredmˇety nov´y seznam.

3.3.8 M´ıstnosti zobrazit

Tato obrazovka je stejn´a, jako obrazovka m´ıstnosti pro vytvoˇren´ı seznamu, aˇz na ten rozd´ıl, ˇze zde nenajdeme tlaˇc´ıtko pro uloˇzen´ı seznamu.

(55)

3.3. MockUps

Obr´azek 3.20: Mockup m´ıstnosti zobrazit.

3.3.9 Zobrazen´ı vlastn´ıch seznam˚u

Zde se uˇzivateli zobraz´ı jeho vlastn´ı seznamy. Jedn´a se o tlaˇc´ıtka pod sebou, kter´e jsou oznaˇcena n´azvem destinace, pro n´ıˇz je seznam vytvoˇren.

(56)

Obr´azek 3.21: Mockup zobrazen´ı vlastn´ıch seznam˚u.

3.3.10 Menu seznamy

Na t´eto obrazovce si uˇzivatel vyb´ır´a, co chce se sv´ym vybran´ym seznamem dˇelat. Jedn´a se o tˇri tlaˇc´ıtka a to zobrazit seznam, upravit seznam nebo smazat seznam.

(57)

3.3. MockUps

Obr´azek 3.22: Mockup menu seznamy.

3.3.11 O aplikaci

Zde uˇzivatel nalezne informace o aplikaci

(58)

Obr´azek 3.23: Mockup zobrazen´ı vlastn´ıch seznam˚u.

3.3.12 Vyhled´av´an´ı seznam˚u

Pˇri vyhled´av´an´ı seznam˚u se uˇzivateli zobraz´ı seznam seznam˚u, kter´e splˇnuj´ı j´ım zadan´a krit´eria. Jednotliv´e seznamy jsou seˇrazeny podle hodnocen´ı

(59)

3.4. Testov´an´ı

Obr´azek 3.24: Mockup vyhled´av´an´ı seznam˚u.

3.4 Testov´ an´ı

Pro testov´an´ı bylo nutn´e pouˇz´ıt server, abych mohl aplikaci testovat na mo- biln´ım telefonu a ne na emul´atoru v Android studiu. Kter´y jak jsem jiˇz dˇr´ıve popisoval je pomal´y a n´aroˇcn´y na v´ykon. Z tohoto d˚uvodu jsem pouˇzil server Heroku.

Heroku focuses relentlessly on apps and the developer experience around apps. Heroku lets companies of all sizes embrace the value of apps, not the distraction of hardware, nor the distraction of servers - virtual or otherwise.

[12]

Heroku je tedy cloudov´e ˇreˇsen´ı pro v´yvoj i produkci aplikaˇcn´ıch server˚u.

Podporov´any jsou tyto jazyky

• Node

• Ruby/ Ruby on Rails

• Java

• PHP

(60)

• Python

• Go

• Scala

• Closure

Pro tuto pr´aci jsem vyuˇzil podporu Ruby on Rails spolu s podporou da- tabaze PostgreSQL. Pˇri pouˇz´ıv´an´ı Heroku staˇc´ı pouze nahr´at aplikaˇcn´ı server na Heroku git. Server se n´aslednˇe pˇreloˇz´ı a spust´ı. Pomoc´ı jednoho pˇr´ıkazu pak lze vytvoˇrit datab´azi. Pokud aplikaˇcn´ı server obsahuje i data pro vloˇzen´ı do datab´aze, tak pomoc´ı dalˇs´ıho pˇr´ıkazu heroku nahraje vˇsechny tyto data do datab´aze.

Jelikoˇz i tak toto nahr´an´ı nˇejakou dobu trv´a, pouˇz´ıval jsem z´aroveˇn pro- gram Insomnia. Jedn´a se REST api clienta. T´ımto programem jsem testo- val aplikaˇcn´ı server pro jednotliv´e dotazy, pˇred implementov´an´ım funkcionalit vyuˇz´ıvaj´ıc´ı tyto metody do aplikace.

3.4.1 Testov´an´ı aplikaˇcn´ıho serveru

Pro tetov´an´ı aplikaˇcn´ıho serveru jsem vyuˇzil n´asleduj´ıc´ı RubyGems. Z´aroveˇn jsem pouˇzil test driven development. Pˇred implementac´ı nov´e funkcionality jsem prvn´ı napsal testy, jak by se mˇela dan´a funkcionalita chovat a pak po- stupnˇe funkcionalitu implementoval, aby splˇnovala vˇsechny dan´e testy.

• Rspec

• FactoryGirl

• Faker

Rspec je testovac´ı framework. Jedn´a se o testov´an´ı chov´an´ı aplikace. Ne- zamˇeˇruje se tedy na to, jak aplikace funguje, ale na to jak se m´a chovat.

Na tomto pˇr´ıkladˇe je vidˇet pouˇzit´ı FactoryGirl a Faker. FactoryGirl defi- nuje jak se m´a dan´y objekt vytvoˇrit. M´ame zde objekt translation criterion.

Prvn´ı zde je definov´an jazyk, jenˇz je pro vˇsechny n´aslednˇe vytvoˇren´e instance nastaven na angliˇctinu. N´aslednˇe je zde n´azev krit´eria. Zde je pouˇzit Faker.

Aby byl kaˇzd´y vytvoˇren´y objekt odliˇsn´y je zde nastaveno vytvoˇren´ı n´ahodn´eho slova pomoc´ı Faker. Posledn´ım parametrem je id krit´eria, to je pro testovac´ı

´

uˇcely nastaveno na nil.

FactoryGirl.define do

factory :translation criterion do

Odkazy

Související dokumenty

Informaˇ cn´ı syst´ em je implementov´ an jako webov´ a aplikace a je pˇ ripraven na dalˇ s´ı implementaci, at’ uˇ z v podobˇ e implementov´ an´ı m´ enˇ e podstatn´

Prezentace v´ ysledk˚ u by byla pˇ rehlednˇ ejˇ s´ı, pokud by pr´ ace obsahovala kromˇ e hromadn´ eho porovn´ an´ı vˇ sech pouˇ zit´ ych kombinac´ı tak´ e v´ıce

reˇ sen´ı. Zn´ azornˇ ete pokles chyby v tabulce nebo graficky i ve srovn´ an´ı s ide´ aln´ım poklesem. zde m˚ uˇ zeme poˇ c´ıtat chybu pˇ resnˇ e, protoˇ ze um´ıme

uˇ ctech. Kliknut´ım na jm´ eno ´ uˇ ctu se dostanou na seznam transakc´ı. Vpravo vedle seznamu transakc´ı je filtr, pomoc´ı nˇ ehoˇ z lze omezit seznam jen na poˇ zadovan´

Student splni´l zad´ an´ı bakal´ aˇ rsk´ e pr´ ace a dle pˇ riloˇ zen´ eho dopisu jsou uˇ zivatel´ e jeho pr´ ace v´ıce neˇ z spokojeni.. Ot´ azky k

Vstupem bloku balancov´ an´ı napˇ et´ı pro jednu vˇ etev jsou normalizovan´ a napˇ et´ı na vˇ sech kondenz´ atorech v dan´ e vˇ etvi, proud vˇ etve, poˇ zadovan´ y poˇ

V t´ eto sekci pop´ıˇ su moˇ zn´ e ˇ reˇ sen´ı pouˇ zit´ı akcelerometru pro ´ uˇ cel ovl´ ad´ an´ı auta pomoc´ı n´ aklonu, zvolen´ e ˇ reˇ sen´ı a schematick´

Reˇ ˇ sen´ı: Aplikace nebude podporovat stahov´ an´ı a vyplˇ nov´ an´ı formul´ aˇr˚ u na inter- netu, uˇ zivatel bude smˇ et vyplˇ novat formul´ aˇre pouze pˇr´ımo