Design and implement user interface for robotics network of telesocpes with RTS2

64  Download (0)

Full text

(1)

ˇ

Cesk´

e vysok´

e ´

cen´ı technick´

e

v Praze

Fakulta elektrotechnick´

a

Katedra poˇ

c´ıtaˇ

u

avrh a implementace uˇzivatelsk´eho

rozhran´ı s´ıtˇe robotick´

ych dalekohled˚

u

ˇr´ızen´

ych syst´emem RTS2

Diplomov´

a pr´

ace

Autor: Bc. Radek Meˇciar

Studijn´ı obor: Otevˇren´

a informatika

Zamˇeˇren´ı: Poˇc´ıtaˇcov´e inˇzen´

yrstv´ı

(2)
(3)

Czech Technical University in Prague Faculty of Electrical Engineering

Department of Control Engineering

DIPLOMA THESIS ASSIGNMENT

Student: Mečiar Radek

Study programme: Open Informatics Specialisation: Computer Engineering

Title of Diploma Thesis: Design and implement user interface for robotics network of telesocpes with RTS2

Guidelines:

1. Get knowledge about RTS2

2. Design and implement modular user interface according these conditions (a) Distinguish access level for every telescope and user

(b) Allow real-time controll telescope

(c) Planning of observations in whole telescope network

(d) Implement data access interface considering data flow optimalization (e) Notifications for client (WebSocekt)

3. Implement missing functionalities in RTS2 4. Evaluate capability and usability of application

Bibliography/Sources:

[1] Petr Kubánek, "RTS2: The Remote Telescope System," Advances in Astronomy, vol. 2010, Article ID 902484, 9 pages, 2010. doi:10.1155/2010/902484

[2] Kubánek, Petr, et al. "RTS2: meta-queues scheduling and its realisation for FLWO 1.2 m telescope." SPIE Astronomical Telescopes+ Instrumentation. International Society for Optics and Photonics, 2012.

[3] Pérez-del-Pulgar, Carlos Jesús, et al. "GLORIA: The First Free Access e-Infrastructure of Robotic Telescopes for Citizen Science." Advances in Information Systems and Technologies. Springer Berlin Heidelberg, 2013. 293-304.

Diploma Thesis Supervisor: Ing. Stanislav Vítek, Ph.D. Valid until the summer semester 2017/2018

prof. Ing. Michael Šebek, DrSc. Head of Department

prof. Ing. Pavel Ripka, CSc. Dean

(4)
(5)

Prohl´

sen´ı

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

(6)
(7)

Podˇ

ekov´

an´ı

Zde bych r´ad podˇekoval sv´emu vedouc´ımu pr´ace Ing. Stanislavu V´ıtkovi, Ph.D pˇredevˇs´ım za zaj´ımav´e t´ema a za pomoc s ˇreˇsen´ım, hlavnˇe pˇri hled´an´ı informac´ı.

(8)
(9)

Abstrakt

Pr´ace se zab´yv´a n´avrhem a implementac´ı softwaru pro sjednocen´ı pˇr´ıstupu k ob-servatoˇr´ım vyuˇz´ıvaj´ıc´ıch syst´em RTS2. C´ılem pr´ace je zpˇrehlednit a ulehˇcit ovl´ad´an´ı observatoˇr´ı z jednoho m´ısta, spoleˇcnˇe s n´ahradou konzolov´eho pˇr´ıstupu ovl´ad´an´ı. Hlavn´ım v´ysledkem pr´ace je software. Konkr´etnˇe se jedn´a o webovou aplikaci, kter´a se skl´ad´a z JavaScriptov´e klientsk´e ˇc´asti a serveru napsan´eho v jazyce Java. Pr´ace d´ale shrnuje z´akladn´ı informace o syst´emu RTS2, kter´e jsou potˇrebn´e k implemen-taci. Hlavn´ı anal´yza RTS2 syst´emu se t´yk´a HTTP metod, kter´e umoˇzˇnuj´ı vz´ajemnou komunikaci mezi servery. V´ysledkem pr´ace je serverov´e ˇreˇsen´ı, kter´e je schopn´e ko-munikovat s v´ıce syst´emy RTS2. Vytvoˇren´y server pouˇz´ıv´a protokol HTTP, jako klient, tak jako server pro pˇr´ıstup. Pro serverovou ˇc´ast byl implementov´an Web-Socket server a zprovoznˇena uk´azkov´a funkce. Klientsk´a ˇc´ast je schopna se pˇripojit a komunikovat s vytvoˇren´ym serverem. Je urˇcena k pˇrehledn´emu pod´an´ı informac´ı uˇzivateli. Vytvoˇren´a aplikace umoˇzˇnuje spr´avu uˇzivatel˚u a syst´em˚u RTS2, jejich c´ıl˚u pozorov´an´ı, zaˇr´ızen´ı a jednotliv´ych parametr˚u, front pro pl´anov´an´ı a umoˇzˇnuje pˇr´ıstup k napozorovan´ym dat˚um.

Key words

rts2, SPA, ovl´ad´an´ı, dalekohled, observatoˇr, teleskop, web, server, klient, remote telescope system, JavaScript, AngularJS, Bootstrap, Java, PostgreSQL

(10)
(11)

Abstract

The thesis deals with design and implementation of a software for a control uni-fication with observatories using the RTS2 system. The objective of the thesis is to facilitate and simplify the control of an observatory from one web application together with a console access control replacement. The main result of the thesis is the software. Specifically, the software is a web solution that consists of a JavaScript client and a Java server. The thesis also analyzes basic inforamtions about the RTS2 system in volume needed for the implementation. The analysis of the RTS2 system concerns HTTP methods that allow communication between servers. The created server uses HTTP as a client as well as an server and it is able to communicate with multiple RTS2 systems. Basic WebSocket protocol was implemented for the server part and also with a demonstartion of use. The client part is able to communicate with server part and provide informations for users. Created solution enables an administration of users, observatories, targets, devices and their properties, queues management for planing of observations and pictures access considering data flow optimalization.

Key words

rts2, SPA, control, telescope, observatory, web, server, client, remote telescope sys-tem, single page application, JavaScript, AngularJS, Bootstrap, Java, PostgreSQL

(12)
(13)

Obsah

Obsah

1 Uvod´ 17

1.1 Popis poˇzadavk˚u pr´ace . . . 17

1.2 Motivace . . . 19

1.3 Zdroje pro pr´aci . . . 19

2 Anal´yza 21 2.1 Remote Telescope System 2 . . . 21

2.1.1 JSON API . . . 21

2.1.2 Pˇr´ıstup k napozorovan´ym dat˚um . . . 21

2.2 Anal´yza souˇcasn´ych projekt˚u . . . 22

2.3 V´ybˇer technick´eho pozad´ı . . . 23

2.3.1 Typ komunikace server - klient . . . 23

2.3.2 V´ybˇer konkr´etn´ıch technologi´ı . . . 24

2.3.3 Datab´aze . . . 25

2.3.4 Administrace projektu . . . 25

3 Popis zvolen´eho ˇreˇsen´ı 27 3.1 Klientsk´a ˇc´ast RTS2 UI . . . 27

3.1.1 Hlavn´ı soubor klienta - index.html . . . 27

3.1.2 Hlavn´ı soubor JS - app.js . . . 28

3.1.3 Kontrolery . . . 30

3.1.4 Rozloˇzen´ı . . . 31

3.1.5 Servisy . . . 31

3.2 Serverov´a ˇc´ast RTS2 UI . . . 32

3.2.1 Konfigurace serveru . . . 33

3.2.2 Hlavn´ı logika aplikace . . . 33

3.2.3 HTTP rozhran´ı serverov´e ˇc´asti . . . 35

3.3 Datab´aze RTS2 UI . . . 39

4 Popis funkce 41 4.1 Spr´ava observatoˇr´ı . . . 41

4.2 Ovl´adan´ı zaˇr´ızen´ı . . . 43

4.3 Spr´ava c´ıl˚u pozorov´an´ı . . . 48

4.3.1 Seznam c´ıl˚u . . . 48

4.3.2 Editace a vytvoˇren´ı c´ıle . . . 49

4.4 Pl´anov´an´ı . . . 50

4.4.1 Pˇrid´an´ı c´ıle do fronty . . . 51

4.4.2 Zobrazen´ı fronty . . . 52

4.4.3 Zobrazen´ı pl´anu . . . 53

(14)

Obsah

4.5.1 Podle data pozorov´an´ı . . . 53 4.5.2 Podle c´ıle pozorov´an´ı . . . 54 4.6 Spr´ava uˇzivatel˚u a opr´avnˇen´ı . . . 55

5 Zhodnocen´ı a z´avˇer 57

A CD 60

B Seznam pouˇzit´ych zkratek 61

C N´avod na pouˇzit´ı projektu 62

(15)

Seznam obr´azk˚u

Seznam obr´

azk˚

u

1.1 Diagram projektu RTS2 UI. . . 18

3.1 Diagram vrstev navrˇzen´eho serveru. . . 28

3.2 Sch´ema datab´aze RTS2 UI. . . 39

4.1 Rozhran´ı RTS2 UI - seznam teleskop˚u. . . 41

4.2 Rozhran´ı RTS2 UI - seznam teleskop˚u pro veˇrejnost. . . 41

4.3 Rozhran´ı RTS2 UI - formul´aˇr pro spr´avu teleskopu. . . 42

4.4 Rozhran´ı aplikace rts2-mon. . . 43

4.5 Rozhran´ı RTS2 UI. . . 44

4.6 Rozhran´ı RTS2 UI - zobrazen´ı ˇcasu. . . 45

4.7 Rozhran´ı RTS2 UI - zobrazen´ı bˇeˇzn´ych datov´ych typ˚u. . . 45

4.8 Rozhran´ı RTS2 UI - zobrazen´ı logick´eho typu. . . 45

4.9 Rozhran´ı RTS2 UI - zobrazen´ı parametru typu pole. . . 46

4.10 Rozhran´ı RTS2 UI - zobrazen´ı parametru typu obd´eln´ık. . . 46

4.11 Rozhran´ı RTS2 UI - zobrazen´ı parametru typu objekt Alt Az souˇradnic. 46 4.12 Rozhran´ı RTS2 UI - zobrazen´ı aktu´aln´ıho sn´ımku. . . 47

4.13 Rozhran´ı RTS2 UI - seznam pozorovac´ıch c´ıl˚u. . . 49

4.14 Rozhran´ı RTS2 UI - editace pozorovac´ıho c´ıle. . . 50

4.15 Rozhran´ı RTS2 UI - formul´aˇr pro pˇrid´an´ı c´ıle do fronty. . . 52

4.16 Rozhran´ı RTS2 UI - tabulka pro zobrazen´ı front. . . 53

4.17 Rozhran´ı RTS2 UI - tabulka pro zobrazen´ı pl´anu. . . 53

4.18 Rozhran´ı RTS2 UI - zobrazen´ı obr´azk˚u podle z urˇcit´eho dne. . . 54

4.19 Rozhran´ı RTS2 UI - zobrazen´ı sn´ımk˚u podle pozorovac´ıho c´ıle. . . 55

4.20 Rozhran´ı RTS2 UI - seznam uˇzivatel˚u. . . 55

4.21 Rozhran´ı RTS2 UI - formul´aˇr uˇzivatele. . . 56

(16)

Seznam k´od˚u

Seznam K´

od˚

u

3.1 Oblast pro zobrazen´ı layout˚u. . . 28

3.2 Definice modulu ’app’. . . 28

3.3 Centr´aln´ı ˇreˇsen´ı poˇzadavk˚u a odpovˇed´ı klientsk´e ˇc´asti. . . 29

3.4 Smˇerov´an´ı v klientsk´e ˇc´asti. . . 30

3.5 Definice modulu. . . 30

3.6 Rozˇs´ıˇren´ı modulu. . . 30

3.7 Pouˇzit´ı kontroleru. . . 31

3.8 Uk´azka metody servisu. . . 32

3.9 Zapouzdˇren´ı obsluhy HTTP ˇz´adosti. . . 36

3.10 Metoda pro obsluhu poˇzadavku na uloˇzen´ı uˇzivatele. . . 36

3.11 Hlavn´ı metoda filtru pro tokenovou autorizaci poˇzadavku. . . 37

4.1 Pˇr´ıkaz pro pˇrid´an´ı pozorovac´ıho c´ıle do fronty. . . 51

(17)

Seznam tabulek

Seznam tabulek

3.1 Seznam z´avislosti na ostatn´ıch knihovn´ach. . . 33

4.1 Metoda pro z´ısk´an´ı seznamu zaˇr´ızen´ı syst´emu RTS2. . . 44

4.2 Metoda pro z´ısk´an´ı parametr˚u zaˇr´ızen´ı. . . 44

4.3 Metoda pro uloˇzen´ı parametru zaˇr´ızen´ı. . . 47

4.4 Metoda pro z´ısk´an´ı souˇcasn´eho sn´ımku. . . 48

4.5 Metoda pro spuˇstˇen´ı expozice u zaˇr´ızen´ı typu kamera. . . 48

4.6 Metoda pro z´ısk´an´ı seznamu vˇsech pozorovac´ıch c´ıl˚u. . . 49

4.7 Metoda pro z´ısk´an´ı seznamu specifick´ych pozorovac´ıch c´ıl˚u. . . 49

4.8 Metoda pro z´ısk´an´ı informac´ı o konkr´etn´ım pozorovac´ım c´ıli. . . 50

4.9 Metoda pro vytvoˇren´ı pozorovac´ıho c´ıle. . . 51

4.10 Metoda pro ´upravu pozorovac´ıho c´ıle. . . 51

(18)
(19)

Kapitola 1 - ´Uvod

1. ´

Uvod

Jiˇz nˇekolik let pracuji pro komerˇcn´ı sf´eru jako webov´y v´yvoj´aˇr, i se s´am o webov´e technologie zaj´ım´am. Jsem tedy r´ad za moˇznost uplatnˇen´ı tˇechto znalost´ı v z´avˇereˇcn´e pr´aci, kter´a se t´yk´a tohoto smˇeru a jeˇstˇe zaj´ımavˇejˇs´ıho prvku, a t´ım je pozorov´an´ı vesm´ıru.

´

Uˇcelem t´eto pr´ace je vytvoˇren´ı webov´eho rozhran´ı, kter´e zpˇr´ıstupn´ı moˇznosti ob-servatoˇre. Observatoˇr´ı bude moˇznost do syst´emu pˇridat v´ıce a centr´alnˇe je spravovat. Bude moˇzn´e prov´adˇet z´akladn´ı ´ukony, kter´e potˇrebuj´ı vˇedci pro obsluhu observatoˇre, jako spr´ava zaˇr´ızen´ı a nastavov´an´ı parametr˚u, spr´ava c´ıl˚u pozorov´an´ı, moˇznost po-zorovat, pˇr´ıstup k napozorovan´ym dat˚um a dalˇs´ı. Observatoˇre, kter´e p˚ujdou do centr´aln´ıho syst´emu pˇridat, mus´ı pouˇz´ıvat syst´em RTS2 [6].

Protoˇze n´azev pr´ace je trochu delˇs´ı, tak jsem tuto pr´aci, ˇci softwarov´y projekt, nazval RTS2 UI, jako nav´az´an´ı na projet RTS2, kter´y podrobnˇeji popisuji v sekci 2.1 a zkratka UI znamen´a uˇzivatelsk´e rozhran´ı z anglick´eho User Interface. Konkr´etnˇe se bude jednat o webov´e uˇzivatelsk´e rozhran´ı, o kter´e se RTS2 UI snaˇz´ı p˚uvodn´ı projekt RTS2 rozˇs´ıˇrit.

Pr´ace m´a za ´ukol praktickou implementaci rozhran´ı pro uˇzivatele, kter´e bude umoˇzˇnovat snadnou spr´avu a ovl´ad´an´ı, tak´e nab´ıdne vyˇsˇs´ı nadhled. Pro zaˇc´atek bych uvedl, ˇze projekt RTS2 je zjednoduˇsenˇe ˇreˇseno software, kter´y zajiˇst’uje chod observatoˇre jak z pohledu hardwaru, tak s moˇznost´ı pl´anovat a vzd´alenˇe pozorovat chov´an´ı observatoˇre. Nechyb´ı mu ani moˇznost autonomn´ıho pozorov´an´ı. Projekt RTS2 umoˇzˇnuje mnoho vˇec´ı, ale chyb´ı mu centr´aln´ı jednoduch´y nadhled nad v´ıce observatoˇremi.

1.1

Popis poˇ

zadavk˚

u pr´

ace

Samotn´y projekt RTS2 je veden´y pod licenc´ı LGPL. Ovladaˇce, kter´e jiˇz tento pro-jekt zahrnuje jsou vedeny pod GPL licenc´ı. I softwarov´y projekt RTS UI mus´ı m´ıt otevˇren´y zdrojov´y k´od.

Pokusy o vytvoˇren´ı obdobn´eho softwaru v minulosti jiˇz byly, napˇr´ıklad ve zdroji [5]. Podle dostupn´ych informac´ı a proveden´e anal´yzy jim chyb´ı flexibiln´ı generov´an´ı poˇzadavk˚u. Umoˇzˇnuj´ı uˇzivatel˚um mˇenit jist´e zpˇr´ıstupnˇen´e parametry, ale obvykle jen pomoc´ı specifick´ych metod, coˇz nen´ı moc praktick´e. Pokud by se napˇr´ıklad zmˇenil n´azev promˇenn´e zaˇr´ızen´ı nebo cel´e zaˇr´ızen´ı, tak by jiˇz takto ruˇcnˇe napsan´y k´od ne-mohl fungovat a musel by se opˇet pˇrizp˚usobit nov´e zmˇenˇe dalˇs´ım ruˇcn´ım pˇreps´an´ım. Z toho vypl´yv´a, ˇze jedn´ım z hlavn´ıch poˇzadavk˚u softwarov´eho projektu RTS2 UI je, aby umˇel generovat poˇzadavky podle dostupn´ych dat o zaˇr´ızen´ı pˇrizp˚usobivˇe, dle aktu´aln´ıch informac´ı.

Dalˇs´ım bodem je opr´avnˇen´ı uˇzivatel˚u. Projekt RTS2 samotn´y poskytuje auto-rizace k poˇzadavk˚um pomoc´ı protokolu HTTP. Ovˇeˇren´ı funguje pouze na lok´aln´ı observatoˇr a m˚uˇze nastavit uˇzivateli opr´avnˇen´ı zach´azet se zaˇr´ızen´ımi. Pro potˇreby

(20)

Kapitola 1 - ´Uvod

Obr´azek 1.1: Diagram projektu RTS2 UI.

centralizovan´eho pˇr´ıstupu jako u projektu RTS2 UI bude potˇreba vytvoˇrit r˚uzn´a opr´avnˇen´ı a spr´avu uˇzivatel˚u. Uvaˇzovan´a opr´avnˇen´ı jsou administr´ator, vˇedec a ve-ˇrejn´y ´uˇcet. Kdy administr´ator m´a m´ıt moˇznost prov´adˇet vˇsechny akce. Opr´avnˇen´ı vˇedce by umoˇzˇnovalo prov´adˇet ´ukony t´ykaj´ıc´ı se jednotliv´ych dalekohled˚u. A veˇrejn´y ´

uˇcet by umoˇznil pl´anovat pozorov´an´ı pouze v ˇcasech, kdy si observatoˇr vyhl´as´ı veˇrejnˇe pˇr´ıstupn´e hodiny.

Aby uˇzivatel´e mohli pl´anovat pozorov´an´ı, bude nutn´e zpˇr´ıstupnit spr´avu pozo-rovac´ıch c´ıl˚u. Pozorovac´ı c´ıl je bod na obloze, jehoˇz souˇradnice se uloˇz´ı spoleˇcnˇe s pojmenov´an´ım a dalˇs´ımi parametry do datab´aze. Pozorovac´ı c´ıle jsou na kaˇzd´e ob-servatoˇri vedeny jinak, tj. stejn´e souˇradnice na obloze mohou m´ıt jinou identifikaci v datab´azi, ˇci jin´y n´azev.

Observatoˇre se syst´emem RTS2 umoˇzˇnuj´ı automatick´e vykon´avan´ı pl´anu. Spr´ava pl´anu bude pˇr´ıstupn´a i z projektu RTS2 UI. Pl´an je realizov´an za pomoc´ı pˇr´ıstupu front, z kter´ych se podle priority a vhodnosti c´ıle vyb´ır´a. Centr´aln´ı syst´em mus´ı umˇet tyto fronty spravovat.

Nakonec je potˇreba umˇet k uˇzivateli dostat v´ysledek pozorov´an´ı. Sn´ımky jsou uchov´av´any v kaˇzd´e observatoˇri zvl´aˇst’. Nˇekter´e observatoˇre, vzhledem k jejich po-loze, maj´ı pomalejˇs´ı pˇripojen´ı k internetu. Bude tedy vhodn´e vytvoˇrit centr´aln´ı pˇr´ıstup k napozorovan´ym sn´ımk˚um s ohledem na odlehˇcen´ı toku dat mezi observatoˇr´ı a centr´aln´ım serverem.

(21)

Kapitola 1 - ´Uvod

1.2

Motivace

Syst´em RTS2 nab´ız´ı spr´avu observatoˇre pomoc´ı HTTP protokolu, konzolov´ych apli-kac´ı a jednoduch´eho webu, kter´y sp´ıˇse ukazuje informace o stavu. Vzhledem k asoci-ativn´ımu myˇslen´ı lid´ı je lepˇs´ı, kdyˇz vid´ı moˇznosti, neˇz ruˇcn´ı psan´ı pˇr´ıkaz˚u z pamˇeti. Douf´am v praktick´e pouˇzit´ı projektu vˇedci a dalˇs´ımi lidmi, kter´ym takov´yto interface m˚uˇze ulehˇcit pr´aci.

D´ale pak centralizovan´y pˇr´ıstup m˚uˇze nab´ıdnout lepˇs´ı pˇrehled nad jiˇz napo-zorovan´ymi daty nebo nad celkov´ym pl´anem s´ıtˇe observatoˇr´ı. Coˇz m˚uˇze otevˇr´ıt cestu dalˇs´ım modul˚um projektu, kter´e mohou prov´adˇet napˇr´ıklad statistick´e anal´yzy sn´ımk˚u nebo vylepˇsovat metody pl´anov´an´ı pozorov´an´ı centr´alnˇe v s´ıti observatoˇr´ı.

V neposledn´ı ˇradˇe je zaj´ımavou motivac´ı zpˇr´ıstupnˇen´ı observatoˇre veˇrejnosti. Protoˇze jsou nˇekter´e observatoˇre financov´any z veˇrejn´ych penˇez, maj´ı povolen´y pˇr´ıstup pro veˇrejnost v urˇcit´ych hodin´ach.

1.3

Zdroje pro pr´

aci

Hlavn´ım zdrojem pro pr´aci je dokumentace a zdrojov´y k´od projetu RTS2. Vˇse je dostupn´e ve zdroj´ıch [6] a [1]. Zdroj [6] je webov´a str´anka projektu, kde je k nalezen´ı popis a zdrojov´y k´od. Zdroj [1] je dokument popisuj´ıc´ı r˚uznou funkcionalitu a hlavnˇe HTTP rozhran´ı.

Pro tvorbu softwaru vyuˇziji sv´e znalosti. Protoˇze jsou hlavnˇe z komerˇcn´ı sf´ery, budu muset naj´ıt vhodn´e alternativy, kter´e mi umoˇzn´ı vytvoˇrit podobn´e ˇreˇsen´ı.

(22)
(23)

Kapitola 2 - Anal´yza

2. Anal´

yza

2.1

Remote Telescope System 2

Remote Telescope System 2 (RTS2) je projekt, na kter´y navazuji. Zajiˇst’uje stan-dardn´ı rozhran´ı pro komunikaci s observatoˇr´ı. Je velmi rozs´ahl´y. Zahrnuje abstraktn´ı tˇr´ıdy pro zaˇr´ızen´ı, modul´arn´ım pˇr´ıstupem implementuje r˚uzn´e servisn´ı sluˇzby jako pl´anovaˇc, vykon´avaˇc pozorov´an´ı, sluˇzba BigBrother zajiˇst’uje pl´anov´an´ı mezi v´ıce te-leskopy z´aroveˇn a dalˇs´ı sluˇzby. A hlavnˇe je navrˇzen pro samostatn´y bˇeh observatoˇre. Tato pr´ace nejv´ıce vyuˇzije HTTP server, kter´y poskytuje komunikaˇcn´ı rozhran´ı mezi observatoˇr´ı a standardn´ım HTTP klientem. Projekt RTS2 m´a otevˇren´y zdro-jov´y k´od, tedy je dostupn´y a d´a se volnˇe rozˇsiˇrovat a upravovat. Jazyk tohoto pro-jektu je hlavnˇe C/C++. D´ale jsou r˚uzn´e doplˇnkov´e skripty naps´any v Pythonu. A pouAhaˇzit´a datab´aze je PostgreSQL. Projekt je velice rozs´ahl´y, a proto d´ale uvedu pouze informace, kter´e budu vyuˇz´ıvat. V´ıce informac´ı o projektu se nach´az´ı na webov´e str´ance ze zdroje [6].

2.1.1

JSON API

Projekt RTS2 UI bude komunikovat s jednotliv´ymi observatoˇremi, kter´e pouˇz´ıvaj´ı RTS2 syst´em pomoc´ı HTTP protokolu. RTS2 zajiˇst’uje komunikaci pomoc´ı HTTPD servisu. Servis oˇcek´av´a poˇzadavky vyuˇz´ıvaj´ıc´ı metodu GET, neboli snadno for-mulovateln´e pomoc´ı URL adresy. Kaˇzd´y poˇzadavek mus´ı b´yt autorizov´an HTTP ovˇeˇren´ım uˇzivatele, a to pomoc´ı jm´ena a hesla. Pokud je poˇzadavek ´uspˇeˇsn´y, server odpov´ıd´a k´odem 2XX, v opaˇcn´em pˇr´ıpadˇe se pouˇzije k´od 4XX. Server vrac´ı data ve form´atu JSON v tˇele odpovˇedi, kde m˚uˇze b´yt v´ysledek dotazu nebo chybov´a hl´aˇska. Informace, jak spr´avnˇe formulovat poˇzadavky pro RTS2 observatoˇr, jsou z ˇc´asti ve zdroji [1]. Dokument je vˇsak ne´upln´y, obsahuje ˇradu chyb a neaktu´alnost´ı. Dalˇs´ım zdrojem je pak samotn´y zdrojov´y k´od, kter´y je dostupn´y na serveru GitHub a od-kaz je ve zdroji [10]. Ten nen´ı obvykle opatˇren koment´aˇri a ani intuitivn´ımi n´azvy vstupn´ıch promˇenn´ych do poˇzadavk˚u, coˇz zp˚usobuje probl´em pˇri napojen´ı dalˇs´ıch projekt˚u jako RTS2 UI. Konkr´etn´ı metody pouˇzit´e k realizaci budou pops´any v ka-pitole 4, kde je i vysvˇetlen´ı pouˇzit´ı.

2.1.2

r´ıstup k napozorovan´

ym dat˚

um

Napozorovan´a data, jsou dostupn´a pomoc´ı protokolu HTTP. Soubory jsou uloˇzeny na disku a RTS2 syst´em umoˇzˇnuje proch´azet ´uloˇziˇstˇe observatoˇre, na kter´em soft-ware bˇeˇz´ı.

Zp˚usoby vyˇcten´ı dat jsou r˚uzn´e. Je moˇznost zobrazit pˇr´ımo data fyzicky v ad-res´aˇrov´e struktuˇre, kter´a je tvoˇrena podsloˇzkami pojmenovan´ymi podle dat, kdy jsou sn´ımky, kter´e se ve sloˇzce nach´az´ı, poˇr´ızeny. Dalˇs´ı zp˚usoby jsou zobrazen´ı sn´ımku konkr´etn´ıho pozorovac´ıho c´ıle nebo sn´ımk˚u konkr´etn´ıho jiˇz probˇehl´eho pozorov´an´ı.

(24)

Kapitola 2 - Anal´yza

Syst´em RTS2 disponuje rozˇs´ıˇren´ım, kter´e podle souˇradnic sn´ımku dok´aˇze urˇcit, jestli je sn´ımek dobr´y. Automaticky pak tˇr´ıd´ı sn´ımky, kter´e jsou pˇreexponovan´e nebo rozmazan´e.

Syst´em RTS2 poskytuje nˇekolik form´at˚u sn´ımku. Pˇri dotazu na souˇcasn´y sn´ımek je form´at bin´arn´ı a struktura byla nalezena ve zdrojov´em k´odu. D´ale standardn´ı form´at JPEG, jak pro n´ahledy, tak pro sn´ımky pln´eho rozliˇsen´ı. A hlavn´ım astro-nomick´ym form´atem je FITS [9], kter´y obsahuje i r˚uzn´a metadata o pozorov´an´ı. Sn´ımky sou ˇcernob´ıl´e s vˇetˇs´ı bitovou hloubkou na jeden pixel, konkr´etnˇe 12 bit, coˇz se pˇrevede do 16 bit promˇenn´eshort.

2.2

Anal´

yza souˇ

casn´

ych projekt˚

u

Podobn´e softwarov´e ˇreˇsen´ı jiˇz vzniklo v r´amci diplomov´e pr´ace. Pr´ace byla v´ıce zamˇeˇrena na ovl´ad´an´ı jedn´e observatoˇre se syst´emem RTS2 pomoc´ı mobiln´ı aplikace. N´azev pr´ace je

”Mobiln´ı aplikace pro ˇr´ızen´ı v re´aln´em ˇcase“ a autorem je Jan ˇS´ara. Lze ji naj´ıt v referenci [5].

Pr´ace vol´ı jako hlavn´ı jazyk JavaScript. Ten je vyuˇzit jak pro klientskou ˇc´ast, tak pro serverovou ˇc´ast. Pro projekt RTS2 UI nepovaˇzuji tuto volbu pro serve-rovou ˇc´ast za vhodnou. Nev´ım, jestli se v JavaScriptu daj´ı ˇreˇsit r˚uzn´e probl´emy, napˇr´ıklad v´ıce vl´aknov´a obsluha nebo r˚uzn´e servisy. Jazyk Java toto urˇcitˇe um´ı a nen´ı probl´em jej vyuˇzit. Disponuje mnoˇzstv´ım knihoven, d´ıky kter´ym si program´ator m˚uˇze ulehˇcit pr´aci. JavaScript na serverov´e ˇc´asti urˇcitˇe nen´ı tak rozˇs´ıˇren´y. To zna-men´a, ˇze i mnoˇzstv´ıˇreˇsen´ych probl´em˚u bude menˇs´ı a v pˇr´ıpadˇe nˇejak´eho specifick´eho poˇzadavku to m˚uˇze b´yt neˇreˇsiteln´e za pomoci standardn´ıho postupu. V neposledn´ı ˇradˇe bych odhadoval, ˇze Java bude i efektivnˇejˇs´ı neˇz JavaScript z hlediska v´ykonu.

D´ale pr´ace pouˇz´ıv´a MongoDB datab´azi. Je to zˇrejmˇe v´yhodn´a volba pˇri pouˇzit´ı pr´avˇe s programovac´ım jazykem JavaScript. Datab´aze MongoDB ukl´ad´a data ve form´atu JSON v bin´arn´ı podobˇe. JavaScript nepotˇrebuje pˇretypov´avat nebo vytv´aˇret dotazy, ale staˇc´ı data jen naˇc´ıtat a ukl´adat. Zˇrejmˇe pr´ace nevyuˇz´ıv´a ani referenˇcn´ı integrity dat, protoˇze MongoDB nen´ı relaˇcn´ı datab´az´ı. Projekt RTS2 UI bude m´ıt urˇcitˇe pevnou strukturu dat s potˇrebou zachov´an´ı referenˇcn´ı integrity. Proto byla radˇeji vybr´ana relaˇcn´ı datab´aze PostgreSQL.

Pˇri anal´yze pouˇzit´ych HTTP metod od syst´emu RTS2, kter´e vyuˇz´ıv´a pr´ace, bych odhadoval, ˇze nen´ı realizov´ana s ohledem na generov´an´ı formul´aˇr˚u a poˇzadavk˚u podle aktu´aln´ıch informac´ı. Zpˇr´ıstupnˇen´e kontroln´ı prvky v´ysledn´e aplikace tak´e napov´ıdaj´ı, ˇze umoˇzˇnuje jen proveden´ı nˇekter´ych ´ukon˚u. V pˇr´ıpadˇe zmˇeny parametr˚u se pravdˇepodobnˇe bude muset pˇrepsat znovu. Proto jsem se nemohl inspirovat ani v klientsk´e ˇc´asti aplikace pro generov´an´ı formul´aˇr˚u. Robustnost ˇreˇsen´ı je jedn´ım z hlavn´ıch c´ıl˚u RTS2 UI.

Pr´ace mˇe inspirovala okrajovˇe v tom, ˇze i RTS2 UI m˚uˇze b´yt mobiln´ı aplikac´ı. Vzhledem ke zvolen´e vzhledov´e knihovnˇe Bootstrap je toto realizov´ano snadno, ale nen´ı na to br´an prim´arn´ı ohled. Je moˇzn´e, ˇze nˇeco nebude spr´avnˇe zarovnan´e. Hlavn´ı myˇslenka mobiln´ı verze je, ˇze se prvky, kter´e jsou v ˇr´adku vedle sebe, maj´ı schopnost

(25)

Kapitola 2 - Anal´yza

pˇri z´uˇzen´ı obrazovky pˇreskupit pod sebe. To ulehˇc´ı pr´aci uˇzivateli, kter´y pak nebude muset posouvat okno v horizont´aln´ım smˇeru, ale pouze ve vertik´aln´ım. Rovnˇeˇz se t´ımto prvek nepatrnˇe zvˇetˇs´ı a je pak snadnˇeji ovladateln´y na menˇs´ı obrazovce.

2.3

ybˇ

er technick´

eho pozad´ı

2.3.1

Typ komunikace server - klient

Aktu´aln´ıch dostupn´ych webov´ych technologi´ı je dnes spousta. Daj´ı se pouˇz´ıt r˚uzn´e architektury a styl komunikace mezi klientem a serverem. Nejzn´amˇejˇs´ımi technikami jsou pravdˇepodobnˇe MVC nebo SPA+BackEnd, kter´e jsem tak´e uvaˇzoval a d´ale je rozeberu.

MVC

MVC je zkratka z anglick´eho Model View Controller a znamen´a styl, kdy je propo-jen pohled uˇzivatele pˇr´ımo s k´odem serveru. Hlavn´ımi z´astupci tohoto pˇr´ıstupu jsou skriptovac´ı jazyk PHP, pro jazyk Java je to pak technologie JSP a napˇr´ıklad pro C# ˇci VisualBasic je to technologie ASP.NET. Nev´yhodou tohoto pˇr´ıstupu jsou hlavnˇe v minulosti naprogramovan´e aplikace, kter´e v jednom zdrojov´em k´odu kombinovaly v´ıce jazyk˚u. Napˇr´ıklad PHP vygeneruje HTML str´anku s JavaScriptem a CSS sty-lem. Dneˇsn´ı n´azor je, ˇze je to nepˇrehledn´e a zastaral´e. Existuj´ı r˚uzn´e pˇripraven´e knihovny ˇci r´amce (frameworks), kter´e pr´aci usnadˇnuj´ı a snaˇz´ı se tento pˇr´ıstup co nejv´ıce zjednoduˇsit. Pro jazyk PHP je to napˇr´ıklad projekt Laravel.

SPA + BackEnd

Druh´y uvaˇzovan´y pˇr´ıstup je SPA + BackEnd. SPA znaˇc´ı klientskou ˇc´ast aplikace a BackEnd je serverov´a ˇc´ast. Tyto dvˇe ˇc´asti mezi sebou vz´ajemnˇe komunikuj´ı. Na prvn´ı pohled moˇzn´a zd´anlivˇe m˚uˇzou naznaˇcovat sloˇzitˇejˇs´ı pˇristup, pˇreci jen v´yvoj dvou aplikac´ı m´ısto jedn´e by mˇel b´yt sloˇzitˇejˇs´ı. Nen´ı to ale tak moc znateln´e a nab´ız´ı to v´ıce v´yhod neˇz MVC pˇr´ıstup.

SPA je z anglick´eho Single Page Application. Pˇreklad z angliˇctiny, tj. aplikace v samostatn´e str´ance, je v´ystiˇzn´y. Vztahuje se to pouze na klientskou ˇc´ast webov´e aplikace. Ta funguje tak, ˇze pˇri poˇzadavku od uˇzivatele na server se jako prvn´ı krok provede posl´an´ı pr´avˇe t´eto klientsk´e SPA ˇc´asti aplikace. Klientskou ˇc´ast m´a uˇzivatel naˇctenou pouze jednou a pak uˇz m˚uˇze pˇristupovat k dalˇs´ım informac´ım pouze prostˇrednictv´ım klientsk´e ˇc´asti. Pˇr´ıstup SPA m´a nˇekolik hlavn´ıch v´yhod. Prvn´ı je, ˇze se nemusej´ı neust´ale pos´ılat zbyteˇcn´e informace jako HTML form´atov´an´ı, CSS styly ˇci JavaScriptov´e ˇc´asti, ale poˇzaduj´ı se po serveru pouze ˇcist´a data. Coˇz je v´yhodn´e z hlediska rychlosti naˇc´ıtan´ı a objemu pˇren´aˇsen´ych dat. Druh´a hlavn´ı v´yhoda je, ˇze se tatoSPAˇc´ast napojuje pomoc´ı HTTP protokolu a napˇr´ıklad REST API, coˇz umoˇzn´ı napojen´ı jin´ych klient˚u v budoucnu. Pokud se projekt rozˇs´ıˇr´ı a bude potˇreba vytvoˇrit napˇr´ıklad aplikaci pro mobiln´ı platformu, nemus´ı se cel´a logika ser-veru programovat znovu, ale vyuˇzije se st´avaj´ıc´ı. Staˇc´ı pouze schopnost klientsk´e

(26)

Kapitola 2 - Anal´yza

ˇ

c´asti komunikovat pomoc´ı protokolu HTTP, coˇz zvl´ad´a prakticky kaˇzd´y jazyk. Dalˇs´ı v´yhodou je zamˇenitelnost ˇc´ast´ı aplikace. Jak jiˇz bylo zm´ınˇeno, klientsk´a ˇc´ast m˚uˇze b´yt zpˇr´ıstupnˇena pro r˚uzn´e jazyky, a t´ım i pro jin´e platformy, at’ uˇz web, Android, Windows, Mac a dalˇs´ı.

BackEndov´a neboli serverov´a ˇc´ast aplikace je potom realizovan´a samostatnˇe, a to jednoduch´ym pˇr´ıstupem, kdy se definuje pouze zp˚usob autorizace, vstupn´ı data pro poˇzadavek a pak v´ystupn´ı data poˇzadavku. Serverov´a ˇc´ast m˚uˇze b´yt opˇet v jak´emkoliv jazyce, kter´y um´ı poskytovat komunikaci pˇres HTTP protokol pro ser-ver. Dobr´y v´ybˇer jazyka pro tuto ˇc´ast je vcelku podstatn´y. Bylo by sice hezk´e m´ıt co nejmenˇs´ı n´aroky na server a zvolit pokud moˇzno jazyk C, ale bohuˇzel to znaˇcnˇe znepˇrehledn´ı k´od a neposkytuje takov´e v´yhody jako ostatn´ı, napˇr´ıklad interpreto-van´e jazyky.

2.3.2

ybˇ

er konkr´

etn´ıch technologi´ı

Klient

Jak pro klientskou ˇc´ast, tak i pro serverovou existuj´ı komerˇcn´ı i nekomerˇcn´ı ˇreˇsen´ı. Vzhledem k tomu, ˇze projekt RTS2 UI by mˇel b´yt otevˇren´y, vyuˇziji pouze otevˇren´e knihovny. Pro v´ybˇer webov´e klientsk´e ˇc´asti jsem zvolil framework AngularJS. Je to JavaScriptov´y framework, kter´y poskytuje snadnou a srozumitelnou architekturu a na v´yvoji se pod´ıl´ı komunita v´yvoj´aˇr˚u spoleˇcnˇe s firmou Google. JavaScript sa-motn´y poskytuje HTTP rozhran´ı pro komunikaci se serverem. A dneˇsn´ı webov´e prohl´ıˇzeˇce podporuj´ıc´ı HTML 5 standard umoˇzˇnuj´ı mnoho dalˇs´ıho. Podpora HTML 5 bude urˇcitˇe hlavn´ı pˇredpoklad pro korektn´ı funkci aplikace. Pouˇziji styl knihovny Boostrap, kter´y zajist´ı, ˇze aplikace bude m´ıt estetick´y a standardn´ı vzhled. Pro uzp˚usoben´ı vzhledu jsou dostupn´e r˚uzn´e styly v pˇr´ıpadˇe potˇreby. Tato stylov´a kni-hovna nen´ı pouze o jednoduchosti vzhledu, ale pˇri spr´avn´em pouˇzit´ı um´ı zajistit korektn´ı zobrazen´ı na r˚uzn´ych zaˇr´ızen´ıch jako tablety a mobiln´ı telefony.

Server

U serverov´e ˇc´asti webov´ych aplikac´ı se d´a s v´yhodou pouˇz´ıt pˇr´ıstup aplikaˇcn´ıch server˚u, kter´e implementuj´ı kontejnerovou logiku. Tento pˇr´ıstup m´a nˇekolik v´yhod a nev´yhod. Protoˇze se aplikace publikuje po ˇc´astech, m˚uˇze na jednom serveru a stej-n´em portu bˇeˇzet v´ıce r˚uzn´ych aplikac´ı. R˚uzn´e ˇc´asti budou m´ıt pak pouze jin´e smˇerov´an´ı na zaˇc´atku URL adresy napˇr´ıklad jako

h t t p : / / app1 . s e r v e r / nebo h t t p : / / s e r v e r / app1 / h t t p : / / app2 . s e r v e r / nebo h t t p : / / s e r v e r / app2 / .

Tak´e u produkˇcn´ıho prostˇred´ı jsou zˇrejm´e v´yhody v tom, ˇze nen´ı nutn´e vypnout dalˇs´ı ˇ

c´asti ˇci cel´e aplikace, pokud potˇrebujete nahr´at novou verzi aplikace. V neposledn´ı ˇradˇe tento pˇr´ıstup umoˇzˇnuje centralizovanou spr´avu konfigurace serveru pro vˇsechny aplikace. Spr´ava SSL certifik´at˚u a r˚uzn´e dalˇs´ı nastaven´ı se ˇreˇs´ı pomoc´ı konfigurace serveru a nemus´ı se o to starat program´ator aplikace.

(27)

Kapitola 2 - Anal´yza

Nev´yhodou tohoto pˇr´ıstupu je, ˇze mus´ıte m´ıt aplikaˇcn´ı server a mus´ıte jej spr´avnˇe nakonfigurovat. Aplikace mus´ı b´yt kompatibiln´ı s verz´ı serveru. Jsou zde jak ko-merˇcn´ı ˇreˇsen´ı jako je ISS server od Microsoftu, tak otevˇren´e ˇreˇsen´ı jako je TomCat server od Apache. Urˇcit´y probl´em je tak´e v tom, ˇze pokud je server otevˇren´y, m˚uˇze b´yt lehce zkoum´an ´utoˇcn´ıky. Na starˇs´ı a neaktualizovan´e verze serveru se objevuj´ı bˇeˇznˇe ´utoky, kter´e dok´aˇzou zpˇr´ıstupnit ´utoˇcn´ıkovi data a kontrolu nad serverem. Pro pouˇzit´ı aplikaˇcn´ıho serveru je nutn´e jej udrˇzovat neust´ale aktu´aln´ı.

Pro projekt RTS2 UI jsem zvolil jednoduch´y HTTP server bez kontejnerov´e lo-giky. D˚uvody jsou takov´e, ˇze pˇred pouˇzit´ım projektu nemus´ıte instalovat a konfigu-rovat jin´y software. Obvykle neb´yv´a u takov´ychto projekt˚u potˇreba, aby na jednom poˇc´ıtaˇci a jednom portu fungovalo nˇekolik aplikac´ı najednou a tud´ıˇz nen´ı nutn´e m´ıt v´yhody aplikaˇcn´ıho serveru. Projekt RTS2 implementuje server stejn´ym zp˚usobem, tj. vyuˇz´ıv´a jen z´akladn´ıho objektu pro HTTP komunikaci a smˇerov´an´ı, naˇc´ıt´an´ı vstupn´ıch dat a dalˇs´ı ˇreˇs´ı k´od aplikace.

Pro serverovou ˇc´ast projektu RTS2 UI jsem se snaˇzil naj´ıt jednoduch´e ˇreˇsen´ı v jazyce C/C++. V tomto jazyce je napsan´y projekt RTS2. Vyhledal jsem nˇekolik ˇreˇsen´ı v podobnˇe knihoven, protoˇze napˇr´ıklad smˇerov´an´ı poˇzadavk˚u se d´a vyˇreˇsit elegantn´ım zp˚usobem a program´ator to nemus´ı s´am ˇreˇsit pomoc´ı anal´yzy textov´eho parametru cesty poˇzadavku. Nejlepˇs´ı byla knihovna POCO [12], kter´a umˇela z´aklad protokolu HTTP a mnoho dalˇs´ıho, ale nezd´alo se mi to z hlediska pˇrehlednosti dobr´e. Nakonec jsem se rozhodl zvolit jazyk Java. Projekt RTS2 UI je oddˇelen´ym syst´emem a nen´ı tak podstatn´e, jak´y bude m´ıt jazyk, hlavnˇe kdyˇz bude k´od pˇrehledn´y. Pˇrehlednost k´odu zajist´ı i v´yvojov´e prostˇred´ı NetBeans, kter´e ulehˇcuje pohyb v hi-erarchii metod a dalˇs´ı program´atorsk´e ´ukony.

2.3.3

Datab´

aze

Mezi datab´azov´ymi syst´emy jsou aktu´alnˇe dvˇe hlavn´ı volby, a to NoSQL datab´aze, kter´e se pouˇz´ıvaj´ı pro velk´a data, a pak klasick´e relaˇcn´ı datab´aze. Protoˇze neoˇcek´av´am od projektu RTS2 UI zpracov´an´ı velk´eho objemu dat a je zˇrejm´y datab´azov´y model, vyuˇziji radˇeji klasick´eho relaˇcn´ıho pˇr´ıstupu datab´az´ı. Relaˇcn´ı pˇr´ıstup nab´ız´ı i oˇsetˇren´ı vazeb mezi entitami, kter´e bude u projektu RTS2 UI potˇreba. Konkr´etnˇe byla vybr´ana datab´aze PostgreSQL, kterou vyuˇz´ıv´a i projekt RTS2. Je volnˇe pouˇziteln´a za dodrˇzen´ı podm´ınek licence MIT.

2.3.4

Administrace projektu

Pro jednoduch´y v´yvoj projektu budou pouˇzity dvoje v´yvojov´a prostˇred´ı, a to NetBe-ans a Visual Studio Code. NetBeNetBe-ans umoˇzˇnuje pˇrehlednou tvorbu aplikac´ı v jazyce Java, um´ı i HTML 5 a JavaScript, ale pro tyto dva webov´e jazyky jsem radˇeji zvolil Visual Studio Code.

Kaˇzd´y rozs´ahlejˇs´ı projekt se neobejde bez syst´emu na spr´avu verz´ı. Pro tento ´

uˇcel jsem pouˇzil program git. Aby byl projekt dostupn´y, vyuˇziji sluˇzby GitHub, kter´y umoˇzn´ı veden´ı repozit´aˇre projektu zdarma.

(28)

Kapitola 2 - Anal´yza

Pro spr´avu a vyuˇzit´ı ostatn´ıch knihoven potˇrebn´ych k projektu vyuˇziji pro ser-verovou ˇc´ast Maven [16] a pro klientskou bower [17]. Obˇe aplikace jsou podobn´e. Umoˇzˇnuj´ı jednoduch´a pˇrid´an´ı knihovny z repozit´aˇre aplikace do projektu, tak´e snad-nou zmˇenu na novˇejˇs´ı verzi a ˇreˇs´ı i z´avislosti jednotliv´ych knihoven.

(29)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

3. Popis zvolen´

eho ˇ

reˇ

sen´ı

Cel´y softwarov´y projekt je rozdˇelen do mnoha vrstev. Kaˇzd´a z vrstev zajiˇst’uje urˇcitou specifickou funkcionalitu, kterou d´ale podrobnˇe vysvˇetl´ım. Z´akladn´ı pˇred-stavu o rozvrˇzen´ı projektu lze z´ıskat z diagramu 3.1. Prvn´ı dva ˇr´adky diagramu jsou pro vytvoˇren´ı nadhledu. Posledn´ı ˇr´adek obsahuje jednotliv´e podbloky, kter´e jsou podrobnˇeji rozkresleny. Ale kaˇzd´y ˇr´adek diagramu pˇredstavuje to sam´e.

Cel´y softwarov´y projekt je dostupn´y na sluˇzbˇe port´alu GitHub a konkr´etn´ı odkaz naleznete v referenci [11] nebo lze vyuˇz´ıt tento pˇr´ıkaz:

g i t c l o n e h t t p s : / / g i t h u b . com/Ramese/ r t s 2 u i . g i t

Repozit´aˇr je rozdˇelen na sloˇzku Database,Documentation aProject. Sloˇzka Da-tabase obsahuje SQL skript pro vytvoˇren´ı nov´e datab´aze k softwarov´emu projektu RTS2 UI. SQL skript by mˇel b´yt kompatibiln´ı s PostgreSQL a byl vygenerov´an pomoc´ı programu pgAdmin. Sloˇzka Documentation obsahuje hlavnˇe text t´eto pr´ace a d´ale napˇr´ıklad dokumentaci k RTS2 JSON API ve form´atu PDF, kter´a ale nen´ı plnˇe korektn´ı, nicm´enˇe je to nejlepˇs´ı dostupn´a verze a byla pouˇzita pro vytvoˇren´ı nˇekter´e funkcionality. Sloˇzka Project obsahuje zdrojov´y k´od softwarov´eho projektu RTS2 UI. Sloˇzku je moˇzno otevˇr´ıt ve v´yvojov´em prostˇred´ı Netbeans s nainstalo-van´ym rozˇs´ıˇren´ım Maven. Pro zkompilov´an´ı je nutn´e st´ahnout z´avislosti projektu. Adres´aˇrWeb, kter´y se nach´az´ı v adres´aˇri Project, obsahuje soubory klientsk´e ˇc´asti projektu.

3.1

Klientsk´

a ˇ

ast RTS2 UI

Jak bylo zm´ınˇeno v kapitole t´ykaj´ıc´ı se anal´yzy pr´ace, pro klientskou ˇc´ast projektu byl vybr´an JavaScriptov´y framework AngularJS, kter´y je dostupn´y ze zdroje [13]. D´ale klientsk´a ˇc´ast vyuˇz´ıv´a r˚uzn´e pˇridan´e knihovny jako projektUI Bootstrap, kter´y doplˇnuje framework AngularJS o mnoho komponent, jako kalend´aˇr, posuvn´ık atd. a je dostupn´y ze zdroje [15]. A dalˇs´ı pˇridan´e knihovny jakoFont-Awesome, Angular-Cookies, Angular-Route, atd.

Adres´aˇrProject/Web nen´ı adres´aˇrem, kter´y by obsahoval metadata pro konkr´etn´ı v´yvojov´e prostˇred´ı, lze pouˇz´ıt jak´ekoliv. Jedin´a metadata, kter´a klientsk´a ˇc´ast obsa-huje, jsou z´avislosti knihoven pro spr´avu aplikac´ıbower aJSHint [18] pro udrˇzitelnost JavaScriptov´eho k´odu. Vˇsechny pouˇzit´e knihovny jsou pak k nalezen´ı v adres´aˇri

Web/bower components.

3.1.1

Hlavn´ı soubor klienta - index.html

Hlavn´ım souborem, kter´y naˇcte celou SPA aplikaci je soubor index.html. Ten naˇcte ze serveru vˇsechny skripty a styly, kter´e pak vyuˇz´ıv´a a nepotˇrebuje je stahovat znovu. D´ale obsahuje z´akladn´ı rozvrˇzen´ı str´anky tj. vrchn´ı menu a kontejner n´ahled˚u pro

(30)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

Obr´azek 3.1: Diagram vrstev navrˇzen´eho serveru.

vloˇzen´ı obsahu podle poˇzadavku. Obsah se vkl´ad´a do elementu div s definovan´ym atributem

”ng-view“ ve v´ypisu k´odu 3.1.

1 < div data - ng - v i e w c l a s s=" c o n t a i n e r - f l u i d "> </ div >

K´od 3.1: Oblast pro zobrazen´ı layout˚u.

3.1.2

Hlavn´ı soubor JS - app.js

Zaˇc´atek JavaScriptov´e aplikace lze naj´ıt v souboruScripts/app.js. Ten definuje nov´y modul Angularu, a to modul nazvan´y ’app’, pod kter´ym cel´a klientsk´a ˇc´ast bˇeˇz´ı a navazuje dalˇs´ı ˇc´asti aplikace. Specifikuje z´avislosti pˇridan´ych knihoven a dalˇs´ıch vytvoˇren´ych ˇc´ast´ı, jak je vidˇet v ´useku k´odu 3.2. Pouˇzit´ı tohoto modulu jako hlavn´ıho modulu klientsk´e ˇc´asti aplikace, je deklarov´ano v souboruindex.html v tagu

”<html data-ng-app=”app”>“.

1 var app = a n g u l a r . m o d u l e (’ app ’, [

2 // A N G U L A R S M O D U L E S : 3 ’ n g R o u t e ’, 4 ... 5 // 3 TH P A R T M O D U L E S : 6 ’ ui . b o o t s t r a p ’, 7 ... 8 // O U R S M O D U L E S : 28

(31)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

9 ’ s e r v i c e s ’,

10 ’ c o n t r o l l e r s ’

11 ...

12 ]) ;

K´od 3.2: Definice modulu ’app’.

Aby JavaScriptov´y klient mohl b´yt obslouˇzen serverem, mus´ı se spr´avnˇe identifi-kovat. Identifikace prob´ıh´a pomoc´ı tokenu. Kaˇzd´y jeden poˇzadavek na server nejprve projde klientsk´a ˇc´ast, kter´a je vidˇet ve v´ypisu k´odu 3.3. Tato ˇc´ast je zodpovˇedn´a za pˇrid´an´ı hlaviˇckov´e informace do HTTP poˇzadavku, a to konkr´etnˇe

”Token“ a ” User-Name“. Tyto dvˇe informace jsou pouˇz´ıv´any m´ısto neust´al´eho pos´ıl´an´ı uˇzivatelsk´eho jm´ena a hesla. Klient je z´ısk´a pˇri prvotn´ım pˇrihl´aˇsen´ı do aplikace. Token je serve-rovou ˇc´ast´ı vygenerovan´y ˇretˇezec, kter´y se nach´az´ı v datab´azi a jeho platnost je osm hodin od posledn´ıho proveden´eho ´ukonu, aneb pˇri kaˇzd´em poˇzadavku, kter´y je platn´y, se jeho platnost prodluˇzuje o dalˇs´ıch osm hodin.

Tato technika autorizace je lepˇs´ı z d˚uvodu moˇznosti odchycen´ı zpr´avy mezi klien-tem a serverem. Pˇri pouˇzit´ı tokenov´e autorizace bude m´ıt ´utoˇcn´ık pouze token, kter´y je platn´y po urˇcitou dobu. Samozˇrejmˇe hroz´ı odchycen´ı samotn´eho hesla, a proto by se mˇel pouˇz´ıt protokol HTTPS, kter´y pouˇz´ıv´a asymptotick´e ˇsifrov´an´ı.

Token je spoleˇcnˇe s dalˇs´ımi informacemi uloˇzen v cookies souborech prohl´ıˇzeˇce. V´yhodou uloˇzen´ı pouze tokenu a nikoliv jm´ena a hesla je, ˇze tento mechanizmus zabraˇnuje i pˇr´ıpadn´ym ´utok˚um s anal´yzou dat v cookies, kdy ´utoˇcn´ık pˇreˇcte sou-bor cookies z lok´aln´ı stanice. M˚uˇze z´ıskat omezen´y pˇr´ıstup na konkr´etn´ı dobu, ale napˇr´ıklad pˇri odhl´aˇsen´ı se token znehodnot´ı a ´utoˇcn´ık pˇr´ıstup ztrat´ı.

1 $ h t t p P r o v i d e r . i n t e r c e p t o r s . p u s h (f u n c t i o n ( $q , $ r o o t S c o p e , $window , $ t r a n s l a t e , C O N S T A N T S ) { 2 r e t u r n { 3 ’ r e q u e s t ’: f u n c t i o n ( c o n f i g ) { 4 if ( $ r o o t S c o p e . u s e r !== u n d e f i n e d ) { 5 c o n f i g . h e a d e r s . T o k e n = $ r o o t S c o p e . u s e r . T o k e n ; 6 c o n f i g . h e a d e r s . U s e r N a m e = $ r o o t S c o p e . u s e r . U s e r N a m e ; 7 } 8 r e t u r n c o n f i g ; 9 10 } , 11 ’ r e s p o n s e E r r o r ’: f u n c t i o n ( r e s p o n s e ) { 12 ... 13 // r e s p o n s e e r r o r c e n t r a l h a n d l e r 14 ... 15 } 16 }; 17 }) ;

K´od 3.3: Centr´aln´ı ˇreˇsen´ı poˇzadavk˚u a odpovˇed´ı klientsk´e ˇc´asti.

A dalˇs´ı ˇc´ast souboruapp.jsˇreˇs´ı smˇerov´an´ı pro klienta. Ve v´ypisu k´odu 3.4 je vidˇet jedna definice smˇerov´an´ı. Kaˇzd´a takov´a definice je pro jednu akci respektive jeden pohled do aplikace a urˇcuje cestu (

(32)

Views/inter-Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

face.html“), kontrol´er (

”InterfaceCtrl“), pˇr´ıstup (”freeAccess: false“) a nadpis (” In-terface RTS2 Web“). Specifikace cesty m˚uˇze obsahovat parametry jako je vidˇet zde ”:id“, kdy se pˇred´a parametr do kontrol´eru ”InterfaceCtrl“ pomoc´ı servisu $

route-Params.

Pˇr´ıstup ˇreˇs´ı toto smˇerov´an´ı pouze z´akladnˇe, a to na ´urovni jestli je uˇzivatel pˇrihl´aˇsen. Pokud nen´ı, odfiltruje rovnou zbyteˇcn´y poˇzadavek na server a poˇz´ad´a uˇzivatele o pˇrihl´aˇsen´ı. Smˇerov´an´ı v klientsk´e ˇc´asti ˇreˇs´ı komponenta Angular-route

dostupn´a ze zdroje [14]. 1 $ r o u t e P r o v i d e r 2 . w h e n (’ / i n t e r f a c e /: id ’, { 3 t e m p l a t e U r l : ’ V i e w s / i n t e r f a c e . h t m l ’, 4 c o n t r o l l e r : ’ I n t e r f a c e C t r l ’, 5 f r e e A c c e s s : false, 6 t i t l e : " I n t e r f a c e R T S 2 Web " 7 })

K´od 3.4: Smˇerov´an´ı v klientsk´e ˇc´asti.

Klientsk´a ˇc´ast obsahuje jeˇstˇe dva dalˇs´ı hlavn´ı soubory a to Scripts/controllers.js

a Scripts/services.js. Z´avislost na tˇechto modulech je deklarov´ana v ˇc´asti k´odu 3.2. Kaˇzd´y modul m˚uˇze b´yt rozˇs´ıˇren v separ´atn´ıch souborech. Napˇr´ıklad modul

” con-trollers“ je definov´an v souboruScripts/controllers.js (viz k´od 3.5), ale jeho rozˇs´ıˇren´ı se nach´az´ı v kaˇzd´em ze soubor˚u nach´azej´ıc´ıch se ve sloˇzce Scripts/Controllers (viz k´od 3.6), tj. InterfaceCtrl.js,TelescopeCtrl.js, UserCtrl.js apod.

1 a n g u l a r . m o d u l e (’ c o n t r o l l e r s ’, [])

K´od 3.5: Definice modulu.

1 a n g u l a r . m o d u l e (’ c o n t r o l l e r s ’)

K´od 3.6: Rozˇs´ıˇren´ı modulu.

Hranat´e z´avorky znaˇc´ı definici modulu a z´aroveˇn deklaraci z´avislost´ı, pokud by byly pouˇzity na v´ıce m´ıstech nebo v r˚uzn´ych souborech, budou neust´ale modul definovat znovu a ztrat´ı pˇredchoz´ı funkcionalitu. V projektu RTS2 UI jsou takto vytvoˇreny pouze dva moduly, a to moduly

”services“ a ”controllers“.

3.1.3

Kontrolery

Klientsk´e kontrolery pˇredstavuj´ı v diagramu 3.1 blok s n´azvem

”Controllers“. Tato ˇ

c´ast obsahuje logiku, kter´a je ukryt´a na pozad´ı kaˇzd´eho n´ahledu, tj. pˇri zobrazen´ı formul´aˇre pro pˇrid´an´ı teleskopu, logika pro obslouˇzen´ı ud´alost´ı formul´aˇre je pr´avˇe v jednom z kontroler˚u. V tomto pˇr´ıpadˇe je to kontrolerControllers/TelescopeCtrl.js. Kontrolery jsou v projektov´e sloˇzce webov´e ˇc´asti obsaˇzeny ve sloˇzce Scripts/Cont-rollers a v souboruScripts/controllers.js.

Kaˇzd´y kontroler obsahuje sv´e pamˇet’ov´e m´ısto v promˇenn´e$scope, kter´e je obou-smˇernˇe prov´az´ano s pohledem uˇzivatele. Kontrolery umoˇzˇnuj´ı hierarchick´e uskupen´ı

(33)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

pod sebe do stromov´e struktury. Nejvyˇsˇs´ı kontroler v t´eto aplikaci je NavCtrl, kter´y je definovan´y pro cel´y dokument HTML v tagu body, jak je vidˇet v ´useku k´odu 3.7.

NavCtrl zajiˇst’uje spoleˇcn´e funkce pro aplikaci, jako urˇcen´ı role uˇzivatele, a jeho prostor je dostupn´y ze vˇsech pod kontroler˚u. Pˇr´ıstup do kontroleru, kter´y je v hi-erarchii v´yˇse, je realizov´an pomoc´ı poskytovan´eho servisu $scope. Ten pˇri zavol´an´ı na neexistuj´ıc´ı promˇennou nebo funkci v m´ıstn´ım pamˇet’ov´em prostoru automaticky zkus´ı zjistit, jestli nadˇrazen´y kontroler implementuje tuto funkci, a pokud ano, rov-nou ji vykon´a.

1 < b o d y data - ng - c o n t r o l l e r =" N a v C t r l ">

K´od 3.7: Pouˇzit´ı kontroleru. ´

Ukolem kontroleru je zpracov´an´ı dat od uˇzivatel˚u. Jsou v nˇem definov´any funkce pro oˇsetˇren´ı ˇspatn´ych vstup˚u nebo pˇr´ıpadnˇe transformace dat do vhodn´eho objektu JSON. N´aslednˇe komunikuje s nˇekter´ym z jin´ych kontroler˚u nebo pouˇzije servis pro komunikaci se serverovou ˇc´ısti, kde opˇet m˚uˇze z´ıskan´a data zpracovat do podoby pro uˇzivatele, jako napˇr´ıklad pˇreveden´ı poˇctu sekund od data 1.1.1970 na klasick´y datov´y form´at.

Jedn´ım z kontroler˚u je Error404Ctrl obsaˇzen´y v souboru Scripts/controllers.js. Tento zajiˇst’uje odpovˇed’ na ˇspatn´e vol´an´ı neexistuj´ıc´ıch cest aplikace, tedy server nemus´ı obsluhovat ani takov´eto vol´an´ı.

3.1.4

Rozloˇ

zen´ı

Rozloˇzen´ı aktu´aln´ıho pohledu je definov´ano v klasick´ych souborech HTML. Ad-res´aˇr Views obsahuje vˇsechny rozvrˇzen´ı aplikace. Podle cesty v adresov´em ˇr´adku se pouˇzije vhodn´e rozvrˇzen´ı dle definice v souboru app.js jako je ve v´ypisu k´odu 3.4. Poˇzadovan´e rozvrˇzen´ı se um´ıst´ı do tagu v k´odu 3.1 nebo pˇr´ıpadnˇe do konkr´etn´ı specifick´e ˇc´asti aplikace jako m˚uˇze b´yt definovan´a direktiva nebo atributng-include. Kaˇzd´e rozloˇzen´ı definuje vzhled dan´e ˇc´asti a pouˇzit´ı promˇenn´ych z prostoru kon-troleru. Rozloˇzen´ı je s kontrolerem prov´az´ano pomoc´ı servisu $scope. Tak´e definuje omezen´ı vstupu uˇzivatele a pˇr´ıpadn´e varov´an´ı, ˇze by vstup mˇel b´yt opraven. K tˇemto definic´ım se vyuˇz´ıvaj´ı atributy frameworku AngularJS zaˇc´ınaj´ıc´ı na

”ng-...“ nebo ”data-ng-...“ a tak´e vzhledov´e knihovny Bootstrap. Je i moˇzn´e definovat a pouˇz´ıt sv´e atributy nebo tˇr´ıdy.

3.1.5

Servisy

Servis v t´eto aplikaci zajiˇst’uje pˇrev´aˇznˇe komunikaci se serverovou ˇc´ast´ı, ale m˚uˇze zajiˇst’ovat komunikaci mezi kontrolery nebo napˇr´ıklad jako zde pouˇzit´y servis Au-thService spravu cookies soubor˚u. Definice modulu services se nach´az´ı v souboru

Scripts/services.js a ostatn´ı ˇc´asti jsou pak um´ıstˇeny ve sloˇzce Scripts/Services. ´

Uˇcelem servisu je definovat jednoduch´e obalov´e metody pro z´ısk´an´ı nebo uloˇzen´ı dat. Metoda pˇrijme objekt, kter´y obsahuje parametry poˇzadavku, a vytvoˇr´ı poˇzadavek podle vzoru. N´aslednˇe vr´at´ı takzvan´y objekt promise, kter´y je n´avrhov´ym vzorem

(34)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

pro asynchronn´ı zpracov´an´ı ud´alost´ı. Tento objekt m˚uˇze definovat ud´alost vyvola-nou, pokud se podaˇr´ı poˇzadavek dokonˇcit ´uspˇeˇsnˇe, anebo ud´alost, kter´a se vyvol´a pˇri ne´uspˇechu.

Uk´azka takov´eto metody je vidˇet ve v´ypisu k´odu 3.8. Metoda definuje klasick´y HTTP poˇzadavek, konkr´etnˇe metodou POST, cestu poˇzadavku, hlaviˇckov´e infor-mace a pˇr´ıpadn´a data, poslan´a v obsahu poˇzadavku jako je to specifikov´ano v me-todˇe POST. Obdobnˇe se daj´ı vyuˇz´ıt i jin´e druhy HTTP metod jako GET, PUT, DE-LETE atd. Objekt $http je opˇet servis definovan´y frameworkem AngularJS a jeho v´ysledkem je objektpromise.

1 t h i s. g e t T e l e s c o p e s = f u n c t i o n ( p a g i n a t i o n ) { 2 r e t u r n $ h t t p ({ 3 m e t h o d : " P O S T ", 4 url : C O N S T A N T S . A P I _ P R E F I X + " / t e l e s c o p e s ", 5 h e a d e r s : { ’ Content - T y p e ’: ’ a p p l i c a t i o n / j s o n ’ } , 6 d a t a : p a g i n a t i o n 7 }) . e r r o r (f u n c t i o n ( d a t a ) { 8 c o n s o l e . log ( d a t a ) ; 9 c o n s o l e . log (" T e l e s c o p e S e r v i c e e r r o r ") ; 10 }) ; 11 };

K´od 3.8: Uk´azka metody servisu.

Ne´uspˇeˇsn´e dokonˇcen´ı poˇzadavku je obsluhov´ano centr´alnˇe v souboru app.js. M˚uˇze b´yt vˇsak obslouˇzeno na v´ıce m´ıstech. Ale snahou tohoto navrˇzen´eho ˇreˇsen´ı je obsluha ˇspatn´e ud´alosti na jednom m´ıstˇe. Podle pˇr´ıznaku, proˇc doˇslo k ne´uspˇechu, se vykon´a akce. Napˇr´ıklad server m˚uˇze odpovˇedˇet, ˇze je identifikaˇcn´ı token ne-platn´y a uˇzivatel mus´ı z´ıskat nov´y, tedy se provede akce odhl´aˇsen´ı uˇzivatele spoleˇcnˇe s vymaz´an´ım soubor˚u cookies a zobrazen´ım rozvrˇzen´ı str´anky pro pˇrihl´aˇsen´ı. Nebo v pˇr´ıpadˇe chyby se vyp´ıˇse uˇzivateli, proˇc k chybˇe doˇslo.

´

Uspˇeˇsn´e vol´an´ı poˇzadavku pak skonˇc´ı obsluhou v kontroleru a vhodn´ym zpra-cov´an´ım dat s n´aslednou prezentac´ı v´ysledk˚u.

3.2

Serverov´

a ˇ

ast RTS2 UI

Repozit´aˇr obsahuje projekt v´yvojov´eho prostˇred´ı Netbeans s pluginem Maven ve sloˇzceProject. Zdrojov´y k´od je pak obsaˇzen ve sloˇzceProject/src. Projekt m´a nˇekolik z´avislost´ı na ostatn´ıch knihovn´ach. Vyuˇz´ıv´a se platforma Javy verze 1.8. To je spe-cifikov´ano v nastaven´ı projektu v kompilaci pomoc´ı zvolen´ı JDK 1.8. Dalˇs´ı z´avislosti jsou na r˚uzn´ych knihovn´ach, a to pomoc´ı n´astroje Maven. Tyto z´avislosti jsou spe-cifikov´any v souboru Project/pom.xml a jejich seznam je vidˇet v tabulce 3.1.

Serverov´a ˇc´ast softwaru je koncipov´ana tak, aby nebylo tˇreba instalovat a kon-figurovat ˇz´adn´e jin´e doplˇnky a servery pro funkci. Jedin´e, co je tˇreba, je datab´aze PostgreSQL. Staˇc´ı spustit program s dostateˇcn´ym opr´avnˇen´ım.

(35)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

Knihovna Verze Autor Popis

gson 2.8.0 Google Pro pr´aci s JSON form´atem. httpclient 4.5.2 Apache Pro HTTP klienta.

postgresql 9.4.1212.jre7 PostgreSQL Pro komunikaci s DB.

commons-io 2.5 Apache Pro standardn´ı knihovn´ı funkce. Tabulka 3.1: Seznam z´avislosti na ostatn´ıch knihovn´ach.

3.2.1

Konfigurace serveru

Konfiguraˇcn´ı ˇc´ast serveru je obsaˇzena v souboru rts2ui/Config.java. Je zde moˇzn´e uzp˚usobit z´akladn´ı nastaven´ı serveru.

Parametr GLOBAL WEB API PATH urˇcuje virtu´aln´ı cestu na serveru k do-taz˚um pro HTTP klienta a jej´ı pˇrednastaven´a hodnota je

”/API“. Pokud napˇr´ıklad bude server poskytovat sluˇzbu na cestˇe

”/getUsers“ pro z´ısk´an´ı uˇzivatel˚u, bude m´ıt tato sluˇzba, stejnˇe jako vˇsechny ostatn´ı, obsaˇzenu pˇredponu ve sv´em smˇerov´an´ı a to

”/API“, tedy cel´a cesta bude ”/API/getUser“. Tento princip m´a v´yhodu jed-noduch´eho pˇresunu cel´e aplikaˇcn´ı vrstvy v pˇr´ıpadˇe nutnosti, kter´a m˚uˇze nastat napˇr´ıklad pokud se bude pˇrekr´yvat s nˇejak´ym statick´ym kontextem nebo jinou kom-ponentou s podobn´ym smˇerov´an´ım.

Parametr GLOBAL WEB PATH je obdobn´y parametr, kter´y ale nastavuje vir-tu´aln´ı sloˇzku na serveru pro poˇzadavky na statick´y kontext. Vˇsechny statick´e texty, ikony, styly atd. jsou dotazov´any s touto pˇredponou, aby se opˇet dalo jednoduˇse pˇresmˇerovat v pˇr´ıpadˇe kolize. Pˇrednastaven´a hodnota tohoto parametru je

”rts2“. Tedy hlavn´ı webov´y interface se zobraz´ı po zad´an´ı poˇzadavku

”http://server/rts2“. Parametr GLOBAL WEB FOLDER PATH urˇcuje, kde se fyzicky na serveru nach´az´ı sloˇzka se statick´ym kontextem webu, tj. klientsk´a ˇc´ast. Uˇzivatel je pak odst´ınˇen i od informace, kde se tato ˇc´ast re´alnˇe na serveru nach´az´ı. Obdobnˇe je spe-cifikov´an parametr

”GLOBAL WEB INDEX PATH“ pro urˇcen´ı hlavn´ıho souboru klientsk´e ˇc´asti. T´ımto souborem se potom odpov´ıd´a i na neexistuj´ıc´ı poˇzadavky. Pˇrednastaven´a hodnota pro hlavn´ı soubor je

”index.html“ a sloˇzka klientsk´e ˇc´asti je ”./Web“.

D´ale jsou jeˇstˇe vytaˇzeny parametry pro zmˇenu port˚u. Jak pro klasick´y HTTP protokol, kter´y vyuˇz´ıv´a hlavn´ı server, tak i pro WebSocket server.

Vˇse je nastaveno podle souˇcasn´eho rozloˇzen´ı projektu. Pokud je potˇreba zmˇenit nˇekterou ˇc´ast, je nutn´e, aby nastaven´ı odpov´ıdalo. Klient se mus´ı dozvˇedˇet o zmˇenˇe. Napˇr´ıklad pokud se zmˇen´ı cesta pro poˇzadavky, kter´a je nyn´ı

”/API“, mus´ı se na-stavit tato skuteˇcnost i u klienta, a to v souboru Web/Scripts/app.js v ˇc´asti CON-STANTS.

3.2.2

Hlavn´ı logika aplikace

Logika je rozdˇelena na nˇekolik vrstev. Z´akladnˇe jsou to BusinessObjects, DataOb-jects,ValueObjectsaClients. Kaˇzd´a vrstva m´a za ´ukol konkr´etn´ı ˇcinnost, kterou d´ale

(36)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

vysvˇetl´ım. Tento zp˚usob usnadˇnuje orientaci v projektu a d´ale umoˇzˇnuje snadnˇejˇs´ı nahraditelnost jedn´e ˇc´asti v pˇr´ıpadˇe nutnosti.

ValueObjects

Je nejjednoduˇsˇs´ı vrstvou. Jsou to pamˇet’ov´e objekty, kter´e pˇren´aˇs´ı data v r´amci aplikace. Jsou tak´e zn´amy jako DTO neboli z anglick´eho Data Transfer Object. Objekt je pak z hlavn´ı ˇc´asti obrazem datab´azov´e tabulky, ale m˚uˇze obsahovat i jin´e pˇridan´e informace. Nemˇel by vˇsak obsahovat ˇz´adnou logiku. Zdrojov´e k´ody jsou obsaˇzeny v bal´ıku

”VO“ a maj´ı tuto zkratku obsaˇzenu i v n´azvu objektu, jako napˇr´ıklad

”TelescopeVO“ je objekt uchov´avaj´ıc´ı z´akladn´ı informace o teleskopu. Obvykle se tato ˇc´ast generuje pomoc´ı objektovˇe relaˇcn´ıho datab´azov´eho n´astroje (viz zdroj [7]) jako projekt Hibernate [20]. Ale rozsah datab´aze projektu nen´ı tak velk´y a byl radˇeji zvolen zp˚usob roˇcn´ıho naps´an´ı.

DataObjects

Tato vrstva objekt˚u zajiˇst’uje ukl´ad´an´ı a z´ısk´av´an´ı objekt˚u z datab´aze pomoc´ı Value-Objects vrstvy. Vrstva disponuje pˇripojen´ım na datab´azi. Mapov´an´ı objekt˚u z vrstvy

ValueObjects zajiˇst’uje mapovac´ımi a pln´ıc´ımi funkcemi. Mapovac´ı funkce (Map) jsou pouˇzity ke konverzi mezi Java objektem a datab´azov´ym dotazem. Pln´ıc´ı funkce (Fill) jsou pouˇzity pro z´ısk´an´ı dat z dotazu na Java objekt.

Pˇredpokladem t´eto vrstvy je, ˇze data jsou jiˇz oˇsetˇrena na jin´e ´urovni a vrstva je pouze uloˇz´ı, jak je dostane. Vrstva pˇrid´av´a pouze informaci o posledn´ım uloˇzen´ı entity, kter´a se nach´az´ı ve sloupci UpdateDate, a dobˇe vzniku entity uloˇzen´e ve sloupciCreateDate. V pˇr´ıpadˇe ne´uspˇechu uloˇzen´ı nebo naˇcten´ı vrac´ı vrstva v´yjimku, nesnaˇz´ı se jakkoliv napravovat situaci nebo nevrac´ı nelogicky null.

Pouˇzit´ı vrstvy by mˇelo b´yt omezeno na nadˇrazenou vrstvu, kter´a se star´a o logic-kou ˇc´ast. Vyuˇzit´ı v jin´em projektu nebo rozˇs´ıˇren´ı aplikace je moˇzn´e, ale mˇelo by b´yt pamatov´ano na to, ˇze vrstva pouze ukl´ad´a a vrac´ı data. Osobnˇe bych zvolil pˇr´ıstup, ˇ

ze by jin´a rozˇs´ıˇren´ı aplikace nemˇela moˇznost k vrstvˇe pˇristoupit a mˇela by pouˇz´ıvat nadˇrazenou aplikaˇcn´ı vrstvu i pro ucelen´ı logiky v jednom m´ıstˇe. Tuto skuteˇcnost lze dos´ahnout metodou pˇripojen´ı datov´e vrstvy jako priv´atn´ı k vrstvˇe logick´e. Vyuˇzit´ı priv´atn´ı dostupnosti ale zak´aˇze pˇristup k datab´azi pomoc´ı z´akladn´ıch metod i v pˇr´ıpadˇe vygenerov´an´ı knihovny. Radˇeji jsem zamezov´an´ı pˇr´ıstupu nepouˇzil a vrstva je dosaˇziteln´a z cel´e ˇc´asti aplikace jako statick´a knihovna.

Zdrojov´y k´od t´eto vrstvy se pak nach´az´ı v bal´ıku

”DO“ a jednotliv´e objekty obsahuj´ı zkratku i v n´azvu. Pˇr´ıkladem objektu z t´eto vrstvy je objekt UserDO, kter´y se star´a o pr´ace s daty ohlednˇe datab´azov´e tabulky User.

Pro pˇripojen´ı do datab´aze se pouˇz´ıv´a PostgreSQL komponenty ze standardn´ı knihovny.

(37)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

Clients

Vrstva Clients zajiˇst’uje komunikaˇcn´ı rozhran´ı mezi serverem RTS2 UI a ostatn´ımi sluˇzbami. V pˇr´ıpadˇe projektu RTS2 UI je to pˇripojen´ı na dalˇs´ı observatoˇre se syst´emem RTS2. Obecnˇe to pak m˚uˇze b´yt napˇr´ıklad veˇrejnˇe dostupn´y insolvenˇcn´ı registr ˇCR, ˇci jin´e sluˇzby. Komunikace je pak dostupn´a pˇres standardn´ı protokol.

U vˇetˇsiny tˇechto webov´ych servis˚u se vyuˇz´ıv´a mechanismus WSDL, kter´y jed-noduˇse zajist´ı klientsk´e ˇc´asti vygenerov´an´ı datov´ych typ˚u, objekt˚u a metod pro komunikaci. Projekt RTS2 pouˇz´ıv´a HTTP protokol pro poskytov´an´ı a z´ısk´av´an´ı dat a z toho se ned´a jednoduˇse vygenerovat klientsk´y k´od. Klientsk´y k´od pro komuni-kaci s RTS2 observatoˇr´ı byl realizov´an ruˇcn´ım pˇreps´an´ım, a to konkr´etnˇe v souboru

client/RTS2Client.java. ´

Uˇcelem klientsk´eho objektu je poskytnut´ı standardn´ıch metod pro vol´an´ı sluˇzby. Objekt pak n´aslednˇe podle poˇzadovan´ych informac´ı zformuluje dotaz podle proto-kolu HTTP a dokumentace [1] a vr´at´ı odpovˇed’. Vˇsechny realizovan´e metody funguj´ı synchronn´ım pˇr´ıstupem. Aby se nemusel implementovat protokol HTTP pro komu-nikaci, byla vyuˇzita knihovna httpclient od Apache (viz zdroj [19]).

BusinessObjects

Vstupn´ı bod logick´e ˇc´asti aplikace je vrstvaBusinessObjects. Vrstvu lze pak pˇripojit k jednotliv´ym ´ukon˚um uˇzivatele, at’ uˇz z grafick´eho rozhran´ı nebo HTTP poˇzadavku.

´

Uˇcelem t´eto vrstvy je pˇrevzet´ı ´udaj˚u a n´asledn´eho logick´eho zpracov´an´ı sloˇzen´eho tˇreba i z nˇekolika menˇs´ıch ´ukon˚u z niˇzˇs´ıch vrstev. K realizaci ´ukon˚u m˚uˇze vrstva vyuˇz´ıt datab´azovou vrstvuDataObjects neboClients za pomoc´ı vrstvy hodnotov´ych objekt˚uValueObjects.

Vrstva by mˇela oˇsetˇrovat v´yjimky na ´urovni vr´acen´ı zmˇen, pokud nˇeco nefun-guje, jak m´a. Pˇr´ıpadnˇe nahl´as´ı stav, ve kter´em byla ˇcinnost neoˇcek´avanˇe ukonˇcena. V´yjimky pak pˇred´av´a vyˇsˇs´ım vrstv´am pro prezentaci uˇzivateli a pˇr´ıpadn´y z´aznam pro opravu chyb. Zdrojov´y k´od vrstvy se nach´azi v bal´ıku

”BO“ a objekty obsahuj´ı v n´azvu stejnou zkratku.

Pˇr´ıkladem objektu vrstvy je ImageBO. Tento objekt se star´a o pr´aci z obr´azky a je na nˇem vidˇet vyuˇzit´ı logick´e vrstvy. Pˇri poˇzadavku od uˇzivatele na konkr´etn´ı obr´azek se provede nejprve dotaz do datab´aze RTS2 UI. Podle v´ysledku se provede dalˇs´ı akce. Pokud obr´azek jiˇz v datab´azi existuje, pˇred´a se uˇzivateli bez nutnosti kontaktovat RTS2 observatoˇr. Pokud obr´azek nen´ı v datab´azi jeˇstˇe obsaˇzen, poˇz´ad´a se o nˇej u observatoˇre. Data novˇe z´ıskan´eho obr´azku se pak ukl´adaj´ı do RTS2 UI datab´aze pro budouc´ı poˇzadavky a pˇredaj´ı se uˇzivateli.

3.2.3

HTTP rozhran´ı serverov´

e ˇ

asti

Protoˇze je aplikace webov´a a byla zvolena architektura SPA + BackEnd, nebude serverov´a aplikace pˇripojena na grafick´e rozhran´ı pˇr´ımo, ale pomoc´ı definovan´ych metod HTTP protokolu. Server je jednoduch´y, vyuˇz´ıv´a pouze objektu ze standardn´ı knihovny Javy. Konkr´etnˇe se jedn´a o HttpServer.

(38)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

Hlavn´ı tˇr´ıda, kter´a ˇr´ıd´ı a inicializuje serverovou ˇc´ast, se naz´yv´a MainServer

a nach´az´ı se v bal´ıku webcontroller. Je sloˇzena z HTTP a WebSocket serveru. Sa-motn´a tˇr´ıda MainServer prov´ad´ı inicializaci a nezbytn´e ´ukony pro spuˇstˇen´ı ˇc´ast´ı serveru.

HTTP server

HTTP server je ˇc´ast k´odu, kter´a vyuˇz´ıv´a objekt HttpServer. Ten je definov´an jako seznam obsluh ud´alost´ı na jednotliv´a vol´an´ı. Kaˇzd´a obsluha je pak samostatnˇe obsaˇzena v objektuController, kter´y implementuje rozhran´ıHttpHandler.

Rozhran´ıHttpHandler obsahuje metodu handle(), kterou je nutno nadefinovat spoleˇcnˇe s cestou poˇzadavku. ObjektController pak pˇrepisuje tuto metoduhandle()

na koneˇcnou (final), kv˚uli zapouzdˇren´ı chyt´an´ı v´yjimek, kter´e neˇcekanˇe nastanou. ObjektController umoˇzˇnuje nadefinovat obsluhu poˇzadavku v metodˇeinerHandle(), kterou internˇe vol´a metoda rozhran´ıhandle(). Tento mechanismus je zvolen z d˚uvodu stability serveru a definice z´aznamu chyb na jednom m´ıstˇe. Pˇreps´an´ı metody objektu

Controller je vidˇet ve v´ypisu k´odu 3.9.

1 @ O v e r r i d e 2 p u b l i c f i n a l v o i d h a n d l e ( H t t p E x c h a n g e he ) t h r o w s I O E x c e p t i o n { 3 try { 4 i n e r H a n d l e ( he ) ; 5 } c a t c h ( E x c e p t i o n ex ) { 6 // log ... 7 } 8 }

K´od 3.9: Zapouzdˇren´ı obsluhy HTTP ˇz´adosti.

Pro definice jednotliv´ych obsluh ud´alosti jsem pak zvolil objekty, kter´e pouze vyrob´ı objekt typuController, a jsou to objekty obsaˇzen´e v bal´ıku webcontroller.con-trollers. Jejich struktura je voln´a, ale snahou je, aby spoleˇcn´e t´ema, jako je napˇr´ıklad uloˇzen´ı nebo naˇcten´ı stejn´eho typu objektu, bylo obsaˇzeno v jednom souboru. Pˇr´ı-kladem je spoleˇcn´a definice obsluh ud´alost´ı pro datab´azov´y objekt uˇzivatele, kter´a je definov´ana v souboru UserController. Obsahuje obsluhu pro poˇzadavek k dost´an´ı dat vˇsech uˇzivatel˚u

”/getUsers“, jednoho uˇzivatel ”/getUser“ a uloˇzen´ı dat uˇzivatele ”/saveUser“. Definice obsluhy pro uloˇzen´ı uˇzivatele je vidˇet ve v´ypisu k´odu 3.10.

1 p r i v a t e C o n t r o l l e r S a v e U s e r C t r l () { 2 r e t u r n new C o n t r o l l e r (" / s a v e U s e r ", t r u e) { 3 @ O v e r r i d e 4 p u b l i c v o i d i n e r H a n d l e ( H t t p E x c h a n g e t ) t h r o w s E x c e p t i o n { 5 if( G L O B A L _ D E B U G ) 6 S y s t e m . out . p r i n t l n (" S a v e U s e r C t r l : ") ; 7 8 U s e r V O u s e r F r o m J S O N = ( U s e r V O ) G e t O b j e c t F r o m B o d y ( t . g e t R e q u e s t B o d y () , U s e r V O .c l a s s) ; 9 10 U s e r V O u s e r = ( U s e r V O ) t . g e t A t t r i b u t e (" u s e r ") ; 36

(39)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı 11 12 U s e r B O . U p d a t e U s e r ( u s e r F r o m J S O N ) ; 13 14 C o n t r o l l e r . S e n d G o o d R e s p o n s e (true, t ) ; 15 } 16 }; 17 }

K´od 3.10: Metoda pro obsluhu poˇzadavku na uloˇzen´ı uˇzivatele.

Vˇsechny poˇzadavky na server jsou realizov´any pomoc´ı HTTP metody POST. V tˇele HTTP poˇzadavku je obsaˇzen JSON objekt, kter´y obsahuje potˇrebn´e data pro realizaci poˇzadavku na stranˇe serveru. Data z form´atu JSON jsou pˇrevedena na klasick´y objekt pomoc´ı knihovny gson. To je zapouzdˇreno do metody GetOb-jectFromBody(), kde je pˇrevod definov´an.

Obsluha tedy naˇcte data, pokus´ı se prov´est poˇzadovan´y ´ukon, a pokud bylo vˇse ´

uspˇeˇsn´e, vr´at´ı kladnou odpovˇed’. Odpovˇed’ obsahuje opˇet data ve form´atu JSON a o konverzi z Java objektu do JSON form´atu se tak´e star´a knihovna gson, konkr´etnˇe v metodˇe SendGoodResponse().

Pokud poˇzadavek nen´ı z nˇejak´eho d˚uvodu ´uspˇeˇsnˇe zpracov´an, jsou definovan´e standardn´ı odpovˇedi pˇr´ımo jako metody obsluhy, na kter´e patˇriˇcnˇe reaguje klientsk´a strana. Napˇr´ıklad pˇri zavol´an´ı metody NotLoggedIn() z objektu Controller, m´a kli-entsk´a strana definov´ano v souboru Scripts/app.js, ˇze se mus´ı odhl´asit a smazat soubory cookies, protoˇze uˇzivatel nen´ı pˇrihl´aˇsen nebo nem´a platn´y token pro iden-tifikaci.

Z objektu Controller se tvoˇr´ı objekt HttpContext, kter´y je podobjekt objektu

HttpServer. HttpContext m˚uˇze m´ıt definovan´y ˇretˇez obsluh poˇzadavku, kter´y je prov´azan´y a n´asleduje v ˇradˇe za sebou. Jak´ykoliv ˇcl´anek v ˇretˇezu m˚uˇze pˇreruˇsit vykon´av´an´ı poˇzadavku a vr´atit chybu nebo odpovˇed’. Tento ˇretˇez vyuˇz´ıv´am pro z´ısk´an´ı dat o uˇzivateli. Je definov´an filtr, kter´y se pˇredˇrad´ı pˇred obsluhy, kter´e to vyˇzaduj´ı. N´azev objektu obsahuj´ıc´ı filtrovac´ı metodu je TokenFilter a je obsaˇzen v bal´ıku webcontroller.filter. Hlavn´ı metodu je moˇzn´e vidˇet ve v´ypisu k´odu 3.11.

1 @ O v e r r i d e 2 p u b l i c v o i d d o F i l t e r ( H t t p E x c h a n g e he , C h a i n c h a i n ) { 3 try { 4 // ... 5 if(!( h e a d e r s . c o n t a i n s K e y (" T o k e n ") && h e a d e r s . c o n t a i n s K e y (" U s e r N a m e ") ) ) { 6 C o n t r o l l e r . T o k e n U n p a r s a b l e (" No t o k e n i n f o in h e a d e r . ", he ) ; 7 r e t u r n; 8 } 9 S t r i n g t o k e n = h e a d e r s . get (" T o k e n ") . get (0) ; 10 S t r i n g u s e r N a m e = h e a d e r s . get (" U s e r N a m e ") . get (0) ; 11 U s e r V O u s e r = U s e r B O . I s L o g g e d I n ( token , u s e r N a m e ) ; 12 13 if( u s e r == n u l l) { 14 C o n t r o l l e r . N o t L o g g e d I n (" T o k e n e x p i r e d . ", he ) ; 15 r e t u r n;

(40)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı 16 } e l s e { 17 he . s e t A t t r i b u t e ( U S E R _ O B J E C T _ S T R I N G , u s e r ) ; 18 } 19 c h a i n . d o F i l t e r ( he ) ; 20 } c a t c h ( E x c e p t i o n ex ) { 21 // ... 22 // r e t u r n s e r v e r f a i l e d 23 } 24 } 25 }

K´od 3.11: Hlavn´ı metoda filtru pro tokenovou autorizaci poˇzadavku.

´

Uˇcelem tohoto filtru je pˇreˇc´ıst hlaviˇcku poˇzadavku, pod´ıvat se jestli obsahuje token ve spr´avn´e podobnˇe. Pokud neobsahuje, rovnou odpov´ıd´a klientovi chybou, a ten n´aslednˇe smaˇze cookies a zobraz´ı uˇzivateli moˇznost se znovu pˇrihl´asit. Pokud obsahuje poˇzadavek token, provede se pot´e dotaz do datab´aze a v pˇr´ıpadˇe platnosti tokenu se jeho platnost opˇet prodlouˇz´ı o nˇejak´y konstantn´ı ˇcas (konkr´etnˇe 8 hodin). Pokud token jiˇz nen´ı platn´y, neumoˇzn´ı se uˇzivateli pˇristup k dalˇs´ı ˇc´asti poˇzadavku a odpov´ı se klientovi tak, aby uˇzivatele identifikoval znovu.

V pˇr´ıpadˇe platn´eho tokenu se vytaˇzen´y z´aznam dat uˇzivatele z datab´aze rovnou pouˇzije jako atribut v objektuHttpExchange, kter´y si jednotliv´e obsluhy mezi sebou vz´ajemnˇe pˇred´avaj´ı a mohou do nˇej ukl´adat jin´e podobjekty. Konkr´etnˇe se tento objekt uloˇz´ı pod n´azvem

”user“ a ostatn´ı obsluhy poˇzadavk˚u jej mohou pˇreˇc´ıst bez vol´an´ı z datab´aze. Obsluhy za tokenov´ym filtrem mohou pˇredpokl´adat, ˇze je uˇzivatel ovˇeˇren, a pracovat se z´ıskan´ymi daty bez nutnosti znovuovˇeˇren´ı. T´ımto zp˚usobem je realizov´ano ovˇeˇren´ı uˇzivatele na stranˇe HTTP serveru.

HTTP server je obsluhov´an v´ıcevl´aknovˇe. Konkr´etnˇe byl zvolen pˇr´ıstup vytvoˇren´ı poˇctu vl´aken, kter´e se staraj´ı o obsluhu klienta, podle aktu´aln´ı potˇreby. Pokud je vl´akno ukonˇceno, z˚ust´av´a po dobu jedn´e minuty v pamˇeti. Pokud do t´e doby nen´ı vyuˇzito, tak zanik´a, aby uvolnilo syst´emov´e prostˇredky.

WebSocket server

Druhou serverovou ˇc´asti je WebSocket server. Ten je implementov´an z´akladnˇe podle dokumentace ve zdroji [8]. Z´akladem je klasick´a soketov´a komunikace, kter´e eviduje jednotliv´e klienty. Kaˇzd´y klient nejprve nav´aˇze komunikaci pomoc´ı HTTP proto-kolu a poˇz´ad´a v nˇem o zmˇenu komunikace na z´akladn´ı soketovou komunikaci. Tato zmˇena tzv.handshake je implementov´an podle dokumentace a vyzkouˇsen v souboru

Web/websocket.html, kter´y obsahuje JavaScriptov´eho klienta.

V´yhoda WebSoketov´e komunikace oproti HTTP komunikaci je moˇznost kontak-tovat klienta pˇr´ımo ze serveru. Server pak nemus´ı b´yt pˇretˇeˇzov´an poˇzadavky, at’ uˇz periodick´ymi nebo pozastaven´ymi, kter´e daj´ı odpovˇed’ v dobˇe zmˇeny.

(41)

Kapitola 3 - Popis zvolen´eho ˇreˇsen´ı

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

3.3

Datab´

aze RTS2 UI

Datab´aze projektu RTS2 UI je navrˇzena, aby zbyteˇcnˇe netvoˇrila duplicity. Pokud je moˇzn´e z´ıskat informaci z observatoˇre, z´ısk´a se z observatoˇre. Ukl´adaj´ı se pouze data, kter´a souvis´ı pˇr´ımo s aplikac´ı.

Potˇreba je uloˇzit informace o uˇzivatel´ıch, kteˇr´ı budou syst´em vyuˇz´ıvat, jejich identifikace a pˇr´ıpadnˇe dalˇs´ı ´udaje. A kaˇzd´y uˇzivatel bude m´ıt evidovanou roli, pod kterou v syst´emu vystupuje.

D´ale se mus´ı uloˇzit informace o observatoˇr´ıch, kter´e syst´em RTS2 UI m˚uˇze vyuˇz´ıt. Je potˇreba uloˇzit jejich veˇrejnˇe dostupn´a internetov´a adresa a ´udaje pro pˇrihl´aˇsen´ı.

´

Udaje pro pˇrihl´aˇsen´ı se ukl´adaj´ı pouze v textov´e podobˇe, protoˇze je potˇreba zn´at heslo. A dalˇs´ı atributy, jako napˇr´ıklad veˇrejn´e ˇcasy observatoˇre nebo pojmenov´an´ı.

Protoˇze opr´avnˇen´ı scientist m´a m´ıt moˇznost pˇristupovat pouze k pˇridˇelen´ym observatoˇr´ım, je tato informace uchov´ana v datab´azi RTS2 UI. Informace se ukl´ad´a v jednoduch´e tabulce, kter´e nahrazuje vazbu N:M a skl´ad´a se pouze z identifikace uˇzivatele a teleskopu.

Data obr´azk˚u se uchov´avaj´ı v datab´azi RTS2 UI. Je to z d˚uvodu odlehˇcen´ı toku dat mezi observatoˇr´ı a serverem RTS2 UI. Pro jednoduchost je uloˇzen form´at JPEG i FITS. Form´at JPEG by se dal z´ıskat z FITS form´atu, ale syst´em zat´ım nepracuje s knihovnou, kter´a by tuto konverzi umoˇznila.

Datab´aze je navrˇzena s ohledem na relaˇcn´ı vazby. Software nemus´ı nutnˇe hl´ıdat, jestli je integrita dat v poˇr´adku.

(42)

Figure

Updating...

References

Related subjects :