ORGANIZATOR

CASE d.o.o.

ORGANIZACIJSKI I PROGRAMSKI ODBOR

TOMISLAV BRONZIN mag. ing. el. ANTE POLONIJO MISLAV POLONIJO IVAN POGARČIĆ mr.sc. ZLATKO SIROTIĆ univ.spec.inf. ZLATKO STAPIĆ mag.inf.

Izdavač: CASE d.o.o., Rijeka

Urednik: Mislav Polonijo

Priprema za tisak: CASE d.o.o., Rijeka

Tisak: CASE d.o.o., Rijeka

ISSN 1334-448X UDK 007.5 : 621.39 : 681.324 Copyright "Case", Rijeka, 2015

Sva prava pridržana. Niti jedan dio zbornika ne smije se reproducirati u bilo kojem obliku ili na bilo koji način, niti pohranjivati u bazu podataka bez prethodnog pismenog dopuštenja izdavača, osim u slučajevima kratkih navoda u stručnim člancima. Izrada kopija bilo kojeg dijela zbornika zabranjena je.

Case d.o.o., Antuna Barca 12, 51000 Rijeka tel: 051/217-875, tel/fax: 051/218-043, e-mail: [email protected], internet: www.case.hr 2 UVOD

27. KONFERENCIJA CASE - UVOD

Prvi dan – CASEdev Panel: PRIMJENA CLOUDA (moderator: Mladen Maras, Combis) Panel: UNAPREĐENJE PROCESA (moderator Miroslav Današnje tvrtke imaju pred sobom dva izazova: smanjiti Mađarić, KBC Zagreb) troškove poslovanja i povećati svoju konkurentnost. Konferencija CASE već 27 godina bavi se razvojem Jedan od najboljih načina povećanja konkurentnosti je softvera, tj projektiranjem IS i aplikacija. Posljednjih upotreba informatičke tehnologije (IT). Kako uz desetak godina uspješno se širi agilni pristup razvoja minimalne troškove male i srednje tvrtke mogu dobiti (Agile). Najpoznatija i najraširenija metoda razvoja SW je informatičku infrastrukturu koju imaju velike tvrtke, a da Scrum. Scrum se preporuča svakome tko se bavi za to (relativno) malo plate? Odgovor na to pitanje je aktivnim projekt managementom u razvoju SW. Smatra CLOUD i primjena Office365 skupa servisa koji se da veći dio Agile-a je zapravo Scrum, tako da se ta unapređuje poslovne procese u malim, srednjim i velikim dva pojma i brkaju i poistovjećuju.Scrum je fokusiran organizacijama. Veliki broj korisnika Microsoft Office samo na software development dok Agile ima proizvoda je dovoljan razlog zašto razmisliti o razvoju potencijalno daleko širu primjenu. Iako ga njegovi tvorci Apps for Office aplikacija, a posebno za Office365, nazivaju frameworkom, Scrum je zapravo jedna od budući je sve više korisnika koji Office koriste na Apple i metoda kojom se provodi Agile. Scrum je svoju Android platformi, bilo kao nativne ili web (on-line) popularnost stekao vjerojatno što ga je jednostavno aplikacije. razumjeti ali ga je u isto vrijeme teško savladati. Razvoj poslovno kritičnih rješenja za velike sustave Kako razviti informatički sustav za prihvaćanje ljudskog uvijek je predstavljao poseban izazov, a postavljanje pitanja korisnika u prirodnom jeziku i davanje točnih takvog rješenja na cloud (interni ili eksterni) otvara cijeli odgovora (i time osigurati rješenje poznatog Turingovog niz tehničkih, pravnih i poslovnih problema. testa za mjerenje umjetne inteligencije). Takav sustav je U predavanju će biti govora o svim tim problemima i dio većega sustava za upravljanje znanjima temeljenoga rješenjima istih u stvarnim poslovnim situacijama i na konceptualnom okviru Node of knowledge (NOK). iskustvima iz prakse. Višejezičnost, Integracijski procesi, Prikazati ćemo dio NOK konceptualnog okvira i u sklopu samoinstalacija i konfiguracija, podržavanje različitih njega novu metodu prikaza znanja iskazanoga tekstom – državno pravnih pravila i postupaka samo su neki od formalised NOK (FNOK). Dakle kako nad FNOK izazova koje treba planirati u projektiranju i izvedbi formaliziranim znanjem uspostaviti modul za prihvaćanje poslovnih rješenja u oblaku za ovaj najzahtjevniji korisničkih pitanja na prirodnome jeziku i na prirodnome segment tržišta jeziku davati odgovore? Izlaskom nove verzije Kinect for Windows v2 senzora i Kako unaprijediti poslove procese? Razvojem IT pripadajućeg SDK, Microsoft omogućio razvojnim industrija je dobila priliku dodatnu mogućnost. Ali ako inženjerima mogućnost kreiranja Windows Store analiziramo učinke IT na unapređenje poslovnih procesa aplikacija koje će koristiti Kinect senzor. Navedeno je do kakvih zaključaka dolazimo? Zašto proizvodna omogućeno kroz razvoj tzv. Univerzalnih Windows industrije najmanje koristi IT u svojoj core djelatnosti (2% aplikacija i za Kinect for Windows, čime se Microsoft još ulaganja) dok recimo servisna industrija (6-9% bliže primaknuo obećanom - kreiranju jedinstvene ulaganja)? Zašto je autoindustrija efikasnija od drugih razvojne platforme za sve Windows uređaje i iako manje ulaže u IT podršku procesima? Želimo popularizaciji sintagme: "Devices-and-Services"? Kako prikazati i objasniti smjernice u pristupu unaprjeđenju napraviti Windows Store aplikaciju koja koristi Microsoft poslovnih procesa na temelju originalnog Toyota Kinect v2, te kako je uklopiti u Univerzalnu Windows Production System (R) - KAI-ZEN (continious change); aplikaciju? Kako iskoristiti Microsoft Azure u pojedinim povezati TPS metodu s modelom upravljanja tvrtkom i sa scenarijima ovakvih aplikacija te širenje i na Linux i na načinom primjene informacijskih tehnologija. Mac okolinu? A sve ovo nosi nam brže izvršavanje, Sustavi za verzioniranje već dugo predstavljaju sastavni potpuno modularnu gradnju gdje uzimamo samo ono što dio razvojnog procesa. Međutim, uporaba takvih sustava i trošimo, izvršavanje u istim uvjetima na razvojnim i i izbor odgovarajućeg načina rada u početku može serverskim računalima i ubrzani "in-memory compile" predstavljati izazov. Programeri i timovi često ne ulože razvoj. dovoljno vremena da upoznaju mogućnosti ovih sustava, Internet stvari (IoT) obuhvaća različite aspekte što na kraju rezultira time da ne iskoriste mogućnosti povezanosti života; od pametnih domova i gradova sustava za verzioniranje u punom smislu. Pokušati ćemo pametnih automobila i cesta do uređaja koji prate doprinijeti rješavanju ovog problema identificiranjem i ponašanje pojedinca te koristi tako prikupljene podatke sistematiziranjem korisnih alata i dobrih praksi za za usluge davanja (push usluga). Cisco predviđa 50 korištenje sustava za verzioniranje. Rad se temelji na milijardi uređaja spojenih na Internet do 2020. godine. Git-u, jednom od najpopularnijih sustava za McKinsley Global Institute predviđa milijardu uređaja verzioniranje. spojenih na Internet do 2025. godine, te mobilni telefon kao finalnu platformu aplikacija koje povezuju sve "stvari". Da bi IoT zaživio kao globalni eko sustav, on mora biti siguran, i što je jednako važno, transparentan za javnost. Širenje IoT-ia je uvjetovano povjerenjem UVOD 3 javnosti u očuvanje privatnosti pojedinaca tj. osobnih - … podataka za vrijeme života tih podataka. Dakle dođite na radionice da čujete odgovore na ta, kao i Upravo se dovršava Strategija e-Hrvatska 2020. Cilj je na mnoga druga pitanja. stvaranje IS države za pružanje elektroničkih usluga na nacionalnoj i na europskoj razini. Strategija se odnosi na Drugi dan CASEmobile tijela javnog sektora s obzirom da su ona obuhvaćena Zakonom o državnoj informacijskoj infrastrukturi. U fokusu ove Strategije je osigurati interoperabilnost Panel: RAZVOJNE PLATFORME (Moderator: Andrej između postojećih i novih IKT sustava u javnoj upravi, Radinger, Mobendo) ujedno eliminirajući dupliciranje njihovih funkcionalnosti. Višestruko nasljeđivanje klasa je dugo vremena Ostvarenje ciljeva mjerit će se na temelju postotka neopravdano držano kao kompleksno i nepotrebno. građana i tvrtki koje koriste javne e-usluge, kao i razinom Vjerojatno je jedan od glavnih razloga taj što je zadovoljstva korisnika. Ciljevi: Poboljšana poslovna višestruko nasljeđivanje u jeziku C++ relativno loše produktivnost javne uprave korištenjem IKT-a i novih riješeno. vještina. Višestruko nasljeđivanje u C++ uvedeno je naknadno, Podaci u vlasništvu javne uprave čine resurs koji 1989., tj. nije uvedeno od početka. Na temelju takvih zahtijeva učinkovito upravljanje. Korištenje loših iskustava, dizajneri jezika Java (a poslije i C#) vjerodostojnih, ažuriranih, umreženih, kompetentno odlučili su da ne podrže višestruko nasljeđivanje klasa. prikupljenih i obrađenih podataka čine temelj za No, jezik Eiffel je imao višestruko nasljeđivanje od učinkovito državno upravljanje i donošenje politika početka (1986.) i smatra se da od svih OOPL-a najbolje temeljeno na činjenicama. Svi podaci moraju biti podržava višestruko nasljeđivanje. U Javi 8 krenulo se u obrađeni u skladu sa sigurnosnim mjerama uzimajući u pravcu uvođenja višestrukog nasljeđivanja klasa. obzir privatnost i povjerljivost. Direktiva EU iz 2013 Prikazati ćemo kako je višestruko nasljeđivanje nalaže da se podaci (koja objavljuju tijela javne vlasti) podržano u jezicima Eiffel, C++, Scala i Java 8. objavljuju u formatu strukturirane datoteke kako bi Xamarin je u proteklim godinama davao naglasak na otvorena ili zatvorena SW aplikacija mogla izvući razvojne alate za mobilne platforme za c# (.net) podatke (i njihovo „strojno čitanje“). Portal data.gov.hr programere. Budući da su alati ušli u stabilnu fazu omogućuje: pristup setovima podataka (u njihovom razvoja, težište Xamarina se pomiče prema cjelokupnom originalnom obliku - zasad 102) koje objavljuju hrvatska procesu razvoja, od designa, preko razvoja / tijela javne vlasti/institucije, distribuciju tih podataka i implementacije do automatiziranog procesa testiranja. U katalogiziranje javnih aplikacije koje koriste te podatke. U sklopu ove prezentacije biti ce opisan kompletan razvojni Hrvatskoj već postoji 30-40 aplikacija na tržištu (App proces mobilnih aplikacija kako je to zamišljeno u store i Play, …) namijenjene npr. turistima Xamarin-u. (kampovi, vremenske prognoze, promet, zdravstvo,..). Razvoj za sve Windows uređaje konačno je omogućeno Osobni podaci nisu dostupni (jer su zakonom zaštićeni). dolaskom Windows 10. Razvoj univerzalnih aplikacija, Osobni podaci se mogu koristiti kao statistički podaci ili bez potrebe da za svaku platformu imamo zasebni ako su anonimizirani (zaštićen je identitet). projekt, ili dijeljeni projekt. Prikazati ćemo osnove razvoja za Windows 10 za sve uređaje (tablet, PC, Phone, 1. Radionica: "Unapređenje procesa" razmatrala bi XBox), novitete u Windows 10 razvojnim alatima, nove primjenu TPS metodologije na konkretnom vrlo kontrole, unificirano objavljivanje aplikacija na Windows i uspješnom primjeru iz servisne industrije primijenjeno u Windows Phone Store, te migraciju postojećih aplikacija Hrvatskoj. Prikazano ćemo kako u 6 mjeseci povećati na Windows (Phone) 10. Moći ćete vidjeti uživo razvoj produktivnost 3 puta, kako osigurati održivost uvedenih univerzalnih Windows 10 aplikacija u Visual Studiu 2015 promjena u poslovanje i pri tome povećati zadovoljstvo Aplikacije i podaci dostupni su na svim vrstama i djelatnika. Poseban naglasak će biti o načinu primjene IT oblicima mobilnih uređaja i koristimo ih ma gdje god se podrške u cilju ostvarenja ovih rezultata. nalazili. Svi su spojeni, svi su "online", tvrtke i korisnici, Kako je u ovom konkretnom slučaju primijenjena zaposlenici i obitelji, učenici i učitelji ... I sve je ORIGINALNA TPS metoda, a ne njene zapadna inačica isprepleteno: platforme, proizvođači, programske Lean Six SIgma, pojasnit ćemo ključne razlike između okoline. Od razvojnih timova očekuje se da izrađuju ove dvije metode, odnosno dat ćemo jasan odgovor na aplikacije koje rade na svim platformama, koje se mogu pitanje "Moraš li biti Japanac da bi primijenio TPS?" U spojiti na postojeće sustave i naravno da budu uvijek diskusiji ćemo pojasniti je li TPS primjenjiv u konkretnim dostupne, elastične i skalabilne. Azure App Service je slučajevima u Hrvatskoj - zdravstvo, proizvodnja, javna novi servis za izradu mobilnih i web aplikacija i čini ga uprava, državna uprava, komunalne usluge i slično. nekoliko integriranih servisa: - Mobile Apps za podršku razvoju mobilnih aplikacija za 2. Radionica: Cloud usluge izlaze iz faze tranzicije i više platformi, postaju (logičan) izbor u kompanijama koje broje od - Web Apps za razvoj web aplikacija koje rastu sa jednog do nekoliko desetaka, stotina, ili čak i više, poslovnim izazovima, zaposlenika. Druga radionica će obraditi temu: - Logic Apps za automatiziranje izvršavanja poslovnih „Upravljanje IT uslugama u Cloud-u koristeći ITIL procesa i najbolju praksu“. Masovnom pojavom i upotrebom cloud - API Apps za brzi razvoj aplikativnih sučelja na usluga slijede i mnoga pitanja a sežu u sferu upravljanja otvorenim standardima. IT uslugama u cloud-u: Automatizacija doma jedan je od dijelova Internet Stvari - Kako definirati IT usluge u cloudu za razliku od (eng. Internet Of Things). Pojavom malih uređaja poput konvencionalnih rješenja? Raspberry Pi-a "Sam Svoj Majstor" automatizacija doma - Da li se isplati prijeći na cloud usluge? sve je popularnija. Korištenjem Raspberry Pi uređaja, - Kako iskoristiti postojeće znanje i iskustvo u prototipne pločice i nekoliko senzora (npr. senzor upravljanju IT uslugama? temperature, vlage, vlažnosti zemlje, senzor pokreta) - Kako aplicirati najbolju praksu na cloud usluge? moguće je na različite načine automatizirati dom. - Što je ITIL i što on ima s cloud uslugama? Iskorištena je, uz same senzore, infracrvena kamera za 4 UVOD snimanje po noći i napravljen kućni video nadzor. Od inteligentne mrežne sustave. Ovaj koncept omogućuje starog televizora, radio prijemnika iskorišten je interakciju ljudi s uređajima i uređaja s uređajima, infracrveni senzor i tv daljinski upravljač kako bi se integrirajući ih u jedinstvenu mrežu kojom se upravlja olakšalo upravljanje automatiziranim kućnim nadzorom. putem web aplikacija. Povezivanje bežičnog senzorskog Kao programski jezik za osnovno testiranje i čvora s poslužiteljem u oblaku predstavlja veliki izazov podešavanje rada senzora korišten je Python, dok je jer čvor ne posjeduje tradicionalna korisnička sučelja konačno rješenje razvijeno u Javi. (tipkovnica, serijsko ili ethernet mrežno sučelje, zaslon). Velik broj današnjih mobilnih aplikacija često ima Prezentirati ćemo aplikaciju za povezivanje bežičnog potrebu za dohvaćanjem ili spremanjem podataka senzorskog čvora s poslužiteljem u oblaku. pohranjenih na udaljenim mrežnim lokacijama. Aplikacija Proširena stvarnost je vrsta tehnologije koja nam zapravo komunicira s web servisom koji prima zahtjeve i omogućava da se digitalni sadržaji (poput videa, slike, vraća odgovore. Popularna softverska arhitektura za animacije, 3D modela i dr.) integriraju sa realnim implementaciju web servisa je REST (eng. svijetom te na taj način proširimo (obogatimo) doživljaj Representational State Transfer). Implementacija stvarnosti koja nas okružje. Primjer takvih informacija nativnih REST klijentskih aplikacija u Android može biti prepoznavanje objekata te prikaz dodatnih operacijskom sustavu obično oduzima dosta vremena. informacije o promatranom objektu (visina, boja, Industrija je prepoznala Retrofit, razvojni okvir koji klasifikacija itd.). Današnji pametni mobiteli i tableti su olakšavaju i ubrzavaju implementaciju spomenutih opremljeni sa brzim procesorima, jakim grafičkim klijenata, kako bi razvojni inženjeri mogli više vremena komponentama, velikim ekranima osjetljivim na dodir, posvetiti drugim važnijim aktivnostima tijekom procesa kamerom visoke rezolucije, GPS senzorima, kompasom, razvoja. Kako bi smanjio količinu potrebnog koda i akcelerometrom, i drugim senzorima te su idealni za dodatno ubrzao razvoj, Retrofit koristi Java anotacije. proširenu stvarnost bilo na otvorenom ili u zatvorenom Prikazat ćemo prednosti korištenja Retrofit razvojnog prostoru. Prikazati ćemo i opisati projekt izrade aplikacije okvira i usporediti taj pristup s onim u kojem se ne koristi s proširenom stvarnošću za grad Varaždin. Aplikacija je nikakav pomoćni razvojni okvir prilikom implementacije razvijena za iPhone / iPad uređaje te koristi Metaio REST klijentskih Android aplikacija. razvojni okvir za razvoj elemenata proširene stvarnosti. Aplikacija omogućava pretraživanje ključnih točaka od Panel: MOBILNA RJEŠENJA (moderator: Adis interesa (engl. Points of Interest) i integraciju multimedije Mustedanagić, Infinum) za svaku ključnu točku, te prepoznavanje slika i prikaz multimedijalnih objekata. Najrašireniji način prikaza vizualnih podataka na mobitelima je putem mapa koristeći geolokacije. Primjena može biti raznolika, od prikazivanja točno 3. Radionica: kao dio Xamarin procesa pokazati ćemo definiranih i odabranih podataka (poput pozicija alate za Testiranje mobilnih aplikacija po Xamarin autobusnih stanica, bolnica, poštanskih ureda), prikaza procesu i metodologiji. rute i kalkulacije udaljenosti za odabrani način prijevoza (npr. do odabranog bankomata) pa sve do složenijih 4. Radionica: Automatizacija doma jedan je od dijelova aplikacija koje imaju integrirane mape i servise sa Internet Stvari (eng. Internet Of Things). Pojavom malih mapama. Demonstrirati ćemo mobilnu iOS i Android uređaja poput Raspberry Pi-a "Sam Svoj Majstor" aplikaciju koja, koristeći geolokacije, na mapi vizualno automatizacija doma sve je popularnija. Korištenjem predstavlja pozicije ljekarni u Hrvatskoj zajedno sa Raspberry Pi uređaja, prototipne pločice i nekoliko njihovim relevantnim javnim informacijama. Detaljnije će senzora (npr. senzor temperature, vlage, vlažnosti se usporediti i objasniti razlike implementacija za iOS i zemlje, senzor pokreta) moguće je na različite načine za Android platformu. automatizirati dom. U ovom radu iskorištena je, uz same Kroz nekoliko jednostavnih primjera prikazati ćemo senzore, infracrvena kamera za snimanje po noći i razvoj mobilnih aplikacija za iOS i Android upotrebom napravljen kućni video nadzori od dijelova koje je Embarcadero Delphi razvojne okoline. Prezentacija će moguće na inovativan način iskoristiti u automatizaciji se dotaknuti problema „jednog izvornog koda za različite doma (iskorišten je infracrveni senzor i tv daljinski platforme“ odnosno problema upotrebe „vizualnih upravljač) kako bi se olakšalo upravljanje elemenata OS-a“ ili „grafički renderiranih vizualnih automatiziranim kućnim nadzorom. Kao programski jezik elemenata“. Na kraju prezentacije bit će prikazana za osnovno testiranje i podešavanje rada senzora mobilna aplikacija razvijena za potrebe medicinsko- korišten je Python, dok je konačno rješenje razvijeno u biokemijskih laboratorija. Javi.

Koncept Interneta stvari (eng. Internet of Things, IoT) Tajnik organizacijskog i programskog odbora predstavlja novu paradigmu koja se odnosi na unapređenje tradicionalnog Interneta međusobnim Ante Polonijo povezivanjem različitih objekata iz fizičkog svijeta u

Podaci o autoru:

Ante Polonijo, dipl.ing., dipl.oecc. CASE d.o.o., Šet. XIII divizije 28, 51000 Rijeka, Croatia tel. +385 51 217 875, 098/260 509, fax. +385 51 218 043, e-mail: [email protected] SADRŽAJ

 SUSTAV ZA ODGOVARANJE NA PITANJA PRIRODNIM JEZIKOM Mile Pavlić, Zdravko Dovedan Han, Alen Jakupović, Sanja Čandrlić, 5 Martina Ašenbrener Katić, Jasminka Tomljanović, Marina Rauker Koch

 SUSTAVI ZA VERZIONIRANJE, ALATI I DOBRA PRAKSA: SLUČAJ GIT 17 Igor Tepavac, Krešimir Valjevac, Stefano Kliba, Marko Mijač

 VIŠESTRUKO NASLJEĐIVANJE - SAN ILI JAVA 8? 25 Zlatko Sirotić

 XAMARIN PROCES 33 Miljenko Cvjetko

 AUTOMATIZACIJA DOMA KORIŠTENJEM RASPBERRY PI-A 41 Dragutin Kermek, Matija Novak

 KORIŠTENJE RETROFIT RAZVOJNOG OKVIRA PRI IMPLEMENTACIJI ANDROID REST KLIJENTA 49 David Ante Macan, Zlatko Stapić, Milan Pavlović

 MOBILNA APLIKACIJA ZA PRONALAZAK LJEKARNI 57 Jasmin Abou Aldan, Mario Lončar, Marina Ivašić – Kos

 POVEZIVANJE BEŽIČNOG SENZORSKOG ČVORA S POSLUŽITELJEM U OBLAKU 65 Tonko Kovačević, Mario Čagalj, Toni Perković, Ivan Vuković

 APLIKACIJA S PROŠIRENOM STVARNOŠĆU ZA GRAD VARAŽDIN 73 Ana Ćorić Samardžija

 OPTIMIZACIJA RAČUNARSTVA U OBLAKU ZA BYOD 77 Vlatka Davidović, Dijana Liverić, Daniele Milani

CASE27 5

SUSTAV ZA ODGOVARANJE NA PITANJA PRIRODNIM JEZIKOM

QUESTION ANSWERING SYSTEM IN NATURAL LANGUAGE

Mile Pavlić, Zdravko Dovedan Han, Alen Jakupović, Sanja Čandrlić, Martina Ašenbrener Katić, Jasminka Tomljanović, Marina Rauker Koch

SAŽETAK

Rad opisuje razvoj sustava za prihvaćanje ljudskog pitanja u prirodnom jeziku od korisnika i pružanje jednog ili više točnih odgovora. Opisani sustav je dio većega sustava za upravljanje znanjima temeljenoga na Node of knowledge (NOK) konceptualnom okviru. Prikazan je dio NOK konceptualnog okvira i u sklopu njega nova metoda prikaza znanja iskazanoga tekstom – formalised NOK (FNOK). Člankom se odgovorilo na pitanje je li moguće nad FNOK formaliziranim znanjem uspostaviti dio koji će prihvaćati korisnička pitanja na prirodnome jeziku i na prirodnome jeziku davati odgovore. Algoritmi su testirani na posebno definiranome skupu rečenica uz pitanja na engleskome jeziku. Keywords: pitanja i odgovori, sustavi upravljanja znanjem, NOK

1. INTRODUCTION prikazuje u prirodnome jeziku. Potom od korisnika u prirodnome jeziku prihvaća odgovor kojega formalizira i Node of Knowledge (NOK) je konceptualni okvir za za zatim provjerava njegovu točnost pomoću baze znanja razvoj baza znanja kojega su razvili autori ovoga članka. ili proširuje bazu znanja novim rečenicama. Sustav 8. Početak njegova razvoja kreće krajem 2011. godine ovaj podsustav kao ulaz prihvaća korisničko pitanje kada su autori počeli s razvojem nove grafičke metode iskazano prirodnim jezikom. Pomoću podsustava prikaza tekstom iskazanoga znanja. Prva verzija nove formalizira postavljeno pitanje i odgovor traži u bazi grafičke metode prikaza znanja nazvane Node of znanja. Odgovor se u prirodnome jeziku dostavlja Knowledge, prikazana je u Pavlić et al. (2013a). korisniku. Ovaj podsustav je opisan u ovome radu. Usporedba nove metode NOK s nekim drugim grafičkim Sustav 4. ovaj podsustav temeljem mehanizama metodama prikaza znanja dana je u Jakupović et al. zaključivanja (indukcijom, dedukcijom, analogijom, itd.) (2013) i Pavlić et al. (2013b). U Rauker et al. (2014) a uz korištenje formaliziranoga teksta iz baze znanja prikazana je primjena metode NOK u modeliranju istoga predlaže nove rečenice. Ove rečenice se u prirodnome teksta pisanoga na dva različita jezika – hrvatskom i jeziku prikazuju korisniku koji ih validira. Ako rečenice engleskom jeziku. prođu validaciju, one se spremaju u bazu znanja Temeljem grafičke metode prikaza znanja NOK povezujući se s ostalim formaliziranim tekstovima. razvijena je formalizirana metoda za prikaz znanja u Tijekom razvoja opisanoga konceptualnoga modela i obliku teksta (FMTEK) koja je detaljno opisana u početnih načina razvoja njegovih podsustava, Node of Jakupović et al. (2014). U tom članku je prikazana i prva Knowledge iz grafičke metode prikaza znanja prerasta u verzija računalnog modela za obradu tekstualnih znanja konceptualni okvir za razvoj sustava zasnovanih na kojega autori dalje razvijaju. tekstualnim znanjima. Ovaj konceptualni okvir definira Ovaj “knowledge based system” se sastoji iz 9 osnovne koncepte i njihove međusobne odnose, a koji podsustava (Jakupović et al., 2014): Sustav 1. ovaj su bitni u razvoju takvih sustava. podsustav omogućava ekspertu ažuriranje mehanizma Svrha provedenoga i ovdje opisanoga istraživanja je za formalizaciju tekstom iskazanoga znanja. pronaći i prikazati jedan od načina na koji se može Sustav 2. ovaj podsustav kao ulaz prihvaća tekst kojega razviti podsustav "Primanje pitanja od korisnika i segmentira na rečenice. Segmentirane rečenice se pružanje odgovora" (vidi sliku 1). Zahtjeve koje ovaj privremeno spremaju u kontejner rečenica. Sustav 7. podsustav treba zadovoljiti su: ovaj podsustav kao ulaz dohvaća rečenicu koja se  Primanje pitanja od korisnika prirodnim jezikom nalazi u kontejner rečenica te ju obogaćuje – rečenicu  Traženje odgovora u formaliziranoj bazi znanja prikazuje na poseban način koji je pogodan za  Pružanje odgovora u prirodnom jeziku računalnu obradu znanja. Sustav 9. ovaj podsustav Osnovni cilj rada je prikazati podsustav "Primanje omogućava dodavanje znanja u bazu znanja uz pitanja od korisnika i pružanje odgovora" i njegove povezivanje formaliziranoga teksta koji je izlaz iz rezultate. Ovim člankom autori žele odgovoriti na pitanje podsustava formalizacije teksta s postojećim je li moguće razviti podsustav uz ograničenu vrstu formaliziranim tekstom (znanjem) iz baze znanja. pitanja, primjenom NOK konceptualnog okvira za razvoj Sustav 3. ovaj podsustav kao ulaz uzima formalizirani sustava baza znanja. tekst iz baze znanja postavlja pitanje korisniku te temeljem mehanizma u podsustavu formalizacije pitanje 6 CASE27

1. Ažuriranje formaliziranog teksta 7. Formalizacija teksta - FMTEK Gramatika i leksikon 2. Prilagodba teksta:podejla teksta u rečenice, Ekspert obogaćivanje, ... 8. Primanje pitanja od korisnika i pružanje odgovora – QANOK Tekst Pitanja korisnia 3. Postavljanje pitanja korisniku i primanje odgovora od korisnika

4. Predlaganje novih Formatiranje rečenice na temelju pitanja - rasuđivanja i validacije TtoF Pružanje odgovora – PROA Formatiranje odgovora - FtoT

5. Predlaganje novih rečenice na temelju leksikona i / ili postojećih Korisnik znanja

Baza znanja - 9. Dodavanje formaliziranog teksta u Vanjske baze 6. Predlaganje novih rečenice na DBNOK bazu znanja znanja temelju drugih baza znanja

Slika 1. Računalni sustav zasnovan na NOK

2. RAZVOJNI OKVIR "NODE OF KNOWLEDGE" The girl who? writes what? a letter

U (1) je prikazana jednostavna PSG gramatika Slika 2. Grafički prikaz rečenice sa semantičkim (Chomsky 1957) i njeni dijelovi koja opisuje odnos riječi identifikatorima (wh-questions) u rečenici "The girl writes a letter." (Ona opisuje i neke Na slici 2. se vide dva osnovna koncepta koja se koriste druge rečenice koje se mogu tvoriti s riječima iz u opisu semantičke veze među riječima rečenice – čvor leksikona). (node) i link with wh question. Čvor predstavlja word or word phrase i kao takav ima neko značenje. Kada ga se rule semantičkom vezom poveže s nekim dugim čvorom dobiva se bogatije značenje. Zbog toga su autori ovaj  pristup u prikazu semantičke veze među riječima → girl  letter rečenice općenito nazvali Node of Knowledge (NOK). → writes (1)Grafički prikaz rečenica koji u sebi čuva semantički → the  a odnos među riječima primjenom wh-pitanja autori nazivaju Diagram of Node of Knowledge (DNOK). U Pavlić et al. (2013b) opisana je jedna grafička metoda lexicon prikaza rečenica koja spada u DNOK, te je prikazan način na koji se neformalizirani jednostavni tekst engleskoga jezika (autori ga nazivaju TENG) prevodi u PSG gramatika se može koristiti za provjeru sintaktičke zapis DNOK. ispravnosti neke rečenice (parsing or syntactic analysis), odnosno za provjeru ispravnoga sintaktičkoga Osim grafičkoga prikaza, rečenica sa semantičkim odnosa među riječima koje tvore neku rečenicu unutar odnosima među riječima (primjenom wh-pitanja) se nekoga jezika. S druge strane, PSG gramatika se može može prikazati i tekstualno. Ovakav način prikaza koristiti za generiranje sintaktički ispravnih rečenica u rečenica autori nazivaju Formalised Node of Knowledge nekome jeziku, odnosno rečenica koje se sastoje iz (FNOK). U Jakupović et al. (2014) prikazana je jedna riječi u ispravnome sintaktičkome odnosu (Aho et al., metoda tekstualnoga prikaza rečenica s identificiranim 1972; Dovedan, 2012a; Dovedan, 2012b; Jakupović et semantičkim odnosima među riječima koja nosi naziv al., 2014). Primjera radi, PSG pod (1) generira rečenicu FMTEK (Formalised Method for Text Expressed "A girl writes.", ali i "The letter writes.". Knowledge). Prema toj metodi, grafički prikaz rečenice prikazane u (1) bi glasio: Rečenica "The girl writes a letter." obogaćena semantičkim identifikatorima (wh-questions) može se writes(who? The girl, what? a letter) (2) grafički prikazati kako slijedi: CASE27 7

U istome članku izvedena je PSG prema kojoj se zaključivanja (npr. indukcijom, dedukcijom i analogijom). prevodi neformalizirani jednostavni tekst engleskoga Prijedlozi pravila zaključivanja se preko MNOKa jezika (TENG) u njegov formalizirani zapis FNOK. prezentiraju ekspertu koji ih validira. Primjera radi, PSG za rečenicu prikazanu u (2) a prema U ovome radu su opisani dijelovi sljedećih podsustava (1) bi izgledala kako slijedi: KB sustava KBSNOK: QANOK, FNOK i KBNOK. ( , ) 3. METODOLOGIJA ISTRAŽIVANJA Osnovni proces koji se odvija u podsustavu "Primanje → girl  letter (3) pitanja od korisnika i pružanje odgovora" → writes prikazan na slici 1., odnosno u podsustavu sustava QANOK preko kojega korisnik postavlja pitanja → the  a KBSNOK-u na koja ovaj daje odgovore, sastoji se iz → who?  what? sljedećih aktivnosti:  prihvaćanej pitanja u prirodnom engleskom jeziku Baza znanja koja se sastoji iz FNOK autori nazivaju (qTENG) KBNOK (NOK based Knowledge Base). Njezin  prevođenje pitanja s prirodnoga engleskog jezika u integralni dio je i mehanizam zaključivanja nad FNOK formalizirani oblik (qFNOK) kojega autori nazivaju RNOK (NOK based Reasoning).  usporedba qFNOK s FNOK rečenicama u KBNOK- KB sustav koji se temelji na FNOK prikazu znanja i u RNOK mehanizmu zaključivanja autori nazivaju KBSNOK (NOK based KB System). Interakcija korisnika Prije provedbe opisanoga osnovnog procesa potrebno i KBSNOK odvija se preko sučelja kojega autori je bazu znanja KBNOK napuniti formaliziranim znanjem. nazivaju QANOK (Question Answering NOK). Osim To znači da u KBNOK trebaju postojati FNOK ovoga sučelja, postoji i posebno sučelje za eksperte koji formalizirane rečenice koje se dobivaju prevođenjem iz održavaju KBNOK. Autori ovo sučelje nazivaju MNOK njihova TENG oblika. Za potrebe razvoja sustava (Maintenance NOK). QANOK razvit će se sustav koji se sastoji iz dva pretvarača: Definicija koncepata i njihov međusobni odnos tvore NOK konceptualni okvir za razvoj sustava baze znanja i  FNOK transducer koji ulaznu rečenicu napisanu u on je prikazan na slici 3. jeziku TENG prevodi u rečenicu u jeziku FNOK.  qFNOK transducer koji ulaznu rečenicu (pitanje), U interakciji sa sustavom KBSNOK, korisnik i ekspert napisanu u jeziku qTENG prevodi u rečenicu u koriste TENG (tekst na prirodnom engleskom jeziku). jeziku qFNOK. Korisnik je u interakciji sa KBSNOK preko sučelja QANOK koje koristi FNOK radi formalizacije odnosno i evaluatora koji na temelju prevedenog teksta i pitanja u deformalizacije teksta. U pružanju odgovora korisniku, FNOK i qFNOK notaciju i njihovog uparivanja pronalazi QANOK koristi RNOK (pravila zaključivanja) i/ili odgovor (slika 4). qFNOK pretvarač i evaluator formalizirano znanje iz KBNOK. Također KBSNOK predstavljaju dijelove QANOK sustava. koristi QANOK kako bi korisniku postavio pitanja. U nastavku slijede definicije pojmova “recognizing i KBSNOK ima posebno sučelje i skup programskih alata translation” koji su bitni u razvoju FNOK i qFNOK za eksperta MNOK koje koristi u oblikovanju sustava transducera. KBSNOK. MNOK može ažurirati mehanizme u FNOKu i 3.1. Prepoznavač QANOKu. MNOK može ažurirati mehanizme u RNOKu kao i znanje u KBNOKu. RNOK može koristiti RNOK iz Osim parsiranja (parsing), sintaksne analize jezika L(G) drugoga KB sustava KBSNOKx, ali i znanje iz svoje definiranog gramatikom postoji i sintaksna analiza KBNOK, kako bi izveo prijedloge novih pravila

TENG KBSNOK QANOK

User

DNOK FNOK RNOK KBNOK

TENG MNOK

Expert

KBSNOKx

Slika 3. Razvojni okvir za razvoj sustava baze znanja 8 CASE27

FNOK TRANSDUCER

sentential sentential sentence RECOGNIZER form form (TENG) tFNOK (TENG) (FNOK)

qFNOK TRANSDUCER EVALUATION ANSWER Transition (matching) Lexicon table

sentential sentential sentence RECOGNIZER form form (qTENG) tqFNOK (qTENG) (qFNOK)

QANOK Slika 4. Model sustava QANOK nazvana prepoznavanje (recognizing) (Aho et al., 1972). prevedena su u qFNOK oblik (Dodatak B stupac Ovdje je definiran prepoznavač primjenljiv na sve tipove qFNOK). formalnih jezika, nazvanih languages with the properties Rezultat primjene QANOK sustava na KBNOK prikazan (jezici sa svojstvima) (Dovedan, 2012b; Dovedan, je u Dodatku C. Tablica iz dodatka C se sastoji iz tri 2013). stupca: postavljeno pitanje na engleskom jeziku Recognizer jezika sa svojstvima je a 7-tuple (qTENG), dobiveni odgovor QANOK sustava (Answer) i rečenica na engleskom jeziku u kojoj je odgovor J = (Q, V , , q0, F, , M ) where pronađen (TENG). Q konačan skup stanja V rječnik, V  + 5. ZAKLJUČAK funkcija prijelaza, definirana kao : Q V {@}  U radu je pokazano kako QANOK sustav „razumijeva“ P(Q) gdje je P(Q) particija od Q ; @ je oznaka kraja jednostavne rečenice engleskog jezika sa leksikonom ulaznog niza od odabranih stotinjak riječi i izvođenjem odgovora na početno stanje,  q0 q0 Q postavljena pitanja. Prvo su učitane rečenice i skup završnih stanja,  F F Q prevedene u FNOK jezik. Rečenice engleskoga jezika skup akcija pridruženih svakom paru TENG opisane su beskontekstnom gramatikom ili, još (qi,sj), qiQ , sjV, za koji je definirana preciznije, regularnom gramatikom i ekvivalentnim funkcija prijelaza regularnim izrazima. Potom je definirano sintaksno- M pomoćna memorija upravljano prevođenje u jezik FNOK. Definiran je i jezik 3.2 Prevodioc za postavljanje pitanja, qTENG. I njega smo opisali regularnim izrazima. Da bismo mogli dobiti odgovor na Općenito se proces prevođenja sastoji od nekoliko faza: postavljeno pitanje, prvo smo upitnu rečenicu qTENG leksičke i sintaksne analize ulaznog niza (rečenice x) i jezika preveli sintaksno-upravljenim prevođenjem u generiranje izlazne rečenice, y. Program za prevođenje qFNOK oblik. Struktura jezika qFNOK jednaka je strukturi naziva se translator. Ako se u fazi sintaksne analize jezika FNOK sa varijablama X i Y na mjestima prevodioca koristi recognizer (prepoznavač), takav se nepoznanica – riječi koje predstavljaju odgovor na translator naziva transducer (pretvarač). pitanje. Time smo pojednostavili problem i sveli ga na jednostavno uparivanje (maching) dvaju nizova (stringova). Ako rečenica jezika qFNOK ne sadrži 4. REZULTATI ISTRAŽIVANJA varijable, odgovor je YES, ako se može uprati s nekom rečenicom jezika , inače je odgovor . Razvijeni sustav QANOK testiran je na 42 jednostavne FNOK NO rečenice prirodnog jezika (Dodatak A stupac TENG). Prirodni jezik nije beskontekstan, ali smo ga mi u Sustav je razvijan metodom indukcije tako da su se prethodnom članku „beskontekstirali“ uvođenjem TENG rečenice analizirale u smjeru od jednostavnijih ka svojstava, tj. pridružujući svakoj riječi rečenice složenijima i prema njima su se razvijali mehanizmi odgovarajuća svojstva pa smo takav jezik nazvali “jezik QANOK sustava. Razvoj je usmjeren na glagolsko sa svojstvima”. Pritom nismo išli previše „po dubini“ vrijeme Simple Present Tense. Nakon toga algoritmi su pojedinih vrsta riječi, pa je, na primjer, Nc bila testirani na rečenicama Simple Past Tense, te su se zajednička, a Np vlastita imenica, ne ulazeći u druga time pokazale mogućnosti i načini njihova širenja u svojstva (rod, broj, živo-neživo, itd). druga glagolska vremena. Za definirane TENG rečenice To vrijedi kako za riječi, tako i za pitanja. Imali smo načinjena je KBNOK baza znanja koja se sastoji iz 42 ukupno 18 vrsta riječi u fazi sintaksne analize, a treba ih jednostavne FNOK formalizirane rečenice (vidi Dodatak biti puno više. Kod pitanja treba, na primjer za početak, A stupac FNOK). Potom je za svaku TENG rečenicu razgraničiti pitanja QN na QNc i QNp, kao i QA. Uveli smo i definirano nekoliko pitanja čime se dobilo ukupno 88 šest podklasa pridjeva s novim skupovima pitanja, QA1, pitanja (vidi Dodatak B stupac qTENG). Sva pitanja QA2 do QA6. Na primjer, pitanja 'how much?', 'how CASE27 9 many?' i 'what kind?' postavljala su se za pridjeve odgovorima kod kojih postoji djelomično poklapanje različitih skupina svojstava. i kada je to djelomično poklapanje značajno a kako Daljnja će istraživanja biti fokusirana na: bi se odgovor ponudio korisniku.  proširenje mehanizma "izračuna" odgovora tako da  proširenje semantičkih svojstava riječi – glagoli, se u obzir uzimaju "skrivene" veze među imenice, zamjenice, uvođenje veznika, sinonima itd. rečenicama (npr. jedna rečenica je povezana s  proširenje sintaksne strukture – npr. za glagole: dijelom druge preko zamjenice). lica, glagolska vremena itd.; uvođenje složenih  odgovaranje na pitanje do koje mjere tolerirati rečenica gramatičke pogreške u korisničkim pitanjima i što  uvođenje sematike rečenica: obrada dvoznačnosti, uopće učiniti s takvim pitanjima. međusobno povezane rečenice itd.  odgovaranje na pitanje čiji se dijelovi odgovora Pored navedenoga daljnja istraživanja će obuhvatiti i nalaze na različitim mjestima u rečenici. trenutno uočena problemska područja QANOK sustava kao što su: 6. ZAHVALA  kod dan/ne osim odgovora "YES" ili "NO" generirati širi odgovor. (npr. "No. Girls are on the beach") The research has been conducted under the project  kod wh-questions koji sadrži glagol u trećem licu "Extending the information system development jednine generirati i odgovor s glagolom u množini methodology with methods"  trenutno se daju odgovori kod kojih postoji potpuno (reference number 13.13.1.2.01.) supported by poklapanje između FNOK rečenica i qFNOK University of Rijeka (Croatia). pitanja. Pitanje koje se postavlja je što učiniti s References:

1 Aho, A. V., & Ullman, J. D. (1972). The Theory of Parsing, Translation and compiling. Vol. 1.Parsing, Prentice-Hall. 2 Ašenbrener, M., Pavlić, M., & Tomljanović, J. (2014, January). Intelligent Question–Answering Systems: Review of research. In 1847-3946. Hrvatska znanstvena bibliografija i MZOS-Svibor. 3 Biber, D., Hohansson, S., Leech, G., Conrad, S., & Finegan, E., (1999). Longman Grammar of Spoken and Written English. London: Longman. 4 Chomsky, N. (1956). Three models for the description of language. IRE Transactions on Information Theory. Volume 2. 113 - 124. 5 Dovedan, H. Z. (2012a). Formalni jezici i prevodioci – regularni izrazi, gramatike, automati. Zagreb: Element. 6 Dovedan, H. Z. (2012b). Formalni jezici i prevodioci – sintaksna analiza i primjene. Zagreb: Element. 7 Dovedan, H. Z. (2013). Formalni jezici i prevodioci – prevođenje i primjene. Zagreb: Element. 8 Erjavec, T. (Eds.) (2010a). MULTEXT-East - Morphosyntactic Specifications (Version 4). from: http://nl.ijs.si/ME/V4/msd/html/index.html 9 Erjavec, T. (2010b). MULTEXT-East Version 4: Multilingual Morphosyntactic Specifications, Lexicons and Corpora. Proceedings of the LREC 2010. Malta: European Language Resources Association. 2544-2547 10 Jakupović, A., Pavlić, M., & Dovedan, H. Z. (2014). Formalisation method for the text expressed knowledge. Expert systems with applications. 41 (11). 5308-5322. 11 Jakupović, A., Pavlić, M., Meštrović, A., & Jovanović, V. (2013).Comparison of the Nodes of Knowledge method with other graphical methods for knowledge representation. Proceedings of the 36th international convention. Rijeka: Croatian Society for Information and Communication Technology, Electronics and Microelectronics – MIPRO. 1276-1280. 12 Jespersen, O. (1964). Essentials of English Grammar. Tuscaloosa: The University of Alabama Press. 13 Katic, M. A., Pavlic, M., & Candrlic, S. (2015). The Representation of Database Content and Structure Using the NOK Method. Procedia Engineering,100, 1075-1081. 14 Koch, M. R., Pavlić, M., & Katić, M. A. (2015). Homonyms and Synonyms in NOK Method. Procedia Engineering, 100, 1055-1061. 15 Koch, M. R., Pavlic, M., & Jakupovic, A. (2014, May). Application of the NOK method in sentence modelling. In Information and Communication Technology, Electronics and Microelectronics (MIPRO), 2014 37th International Convention on (pp. 1176-1181). IEEE. 16 MULTEXT (1996). Multilingual Text Tools and Corpora. from: http://aune.lpl.univ-aix.fr/projects/multext/ 17 MULTEXT-East (1996).Multilingual Text Tools and Corpora for Central and Eastern European Languages - Project COPERNICUS 106.from: http://aune.lpl.univ-aix.fr/projects/multext-east/ 18 Pavlić, M., Jakupović, A., & Meštrović, A. (2013a). Nodes of knowledge method for knowledge representation. Informatologia. 46 (3). 206-214. 19 Pavlić, M., Meštrović, A., & Jakupović, A. (2013b). Graph-Based Formalisms for Knowledge Representation. Proceedings of the 17th World Multi-Conference on Systemics Cybernetics and Informatics (WMSCI 2013), Volume 2. Orlando: IIIS. 200-204 20 Pavlić, M., Jakupović, A., & Čandrlić, S. (2014). Modeliranje procesa.Sveučilište u Rijeci, 2015. 21 Pavlić, M., Han, Z. D., & Jakupović, A. (2015). Question answering with a conceptual framework for knowledge- based system development “Node of Knowledge”. Expert Systems with Applications, 42(12), 5264-5286. 10 CASE27

22 Pavlić, M., Sistem analiza i modeliranje podataka, Naučna knjiga, Beograd, 1990. 23 Pavlić, M., Razvoj informacijskih sustava – projektiranje, praktična iskustva, metodologija, Znak, Zagreb, 1996. 24 Pavlić, M., Informacijski sustavi, Školska knjiga, Zagreb, 2011. 25 Pavlić, M., Oblikovanje baza podataka, Odjel za informatiku Sveučilišta u Rijeci, Rijeka, 2011. 26 Quirk, R., Greenbaum, S., Leech, G., & Svartvik, J. (1985). A comprehensive grammar of the English language. New York: Longman Inc. 27 Rauker, K. M., Pavlić, M., Jakupović, A. (2014). Application of the NOK method in sentence modelling.. Proceedings of the 37th international convention. Rijeka: Croatian Society for Information and Communication Technology, Electronics and Microelectronics – MIPRO. 1426-1431. 28 Stivers, T. (2010). An overview of the question-response system in American English conversation. Journal of Pragmatics, 42, 2772-2781. 29 Srića, V., Treven, S., Pavlić, M., Menadžer i informacijski sustavi, Poslovna knjiga, Zagreb, 1994. 30 Strahonja, V., Varga, M., Pavlić, M., Projektiranje informacijskih sustava – metodološki priručnik, ZID i INAINFO, Zagreb, 1992. 31 Tomljanović, J., Krsnik, M., & Pavlić, M. (2014). QUESTION ANSWERING SYSTEMS. Zbornik Veleučilišta u Rijeci, 2(1), 177-196. 32 Tomljanovic, J., Pavlic, M., & Katic, M. A. (2014, May). Intelligent question—Answering systems: Review of research. In Information and Communication Technology, Electronics and Microelectronics (MIPRO), 2014 37th International Convention on (pp. 1228-1233). IEEE. Podaci o autorima: Mile Pavlić RIS - Odjel za informatiku, Sveučilište u Rijeci e-mail: [email protected]

Prof. dr. sc. Mile Pavlić bavi se metodologijom projektiranja i razvojem informacijskih sustava. Direktor je tvrtke RIS osnovane 1993. za razvoj informacijskih sustava. Aktivno izučava metode za projektiranje informacijskih sustava. Predavač predmeta o projektiranju informacijskih sustava na Odsjeku za informatiku na Filozofskom fakultetu u Rijeci. Bio je pročelnik Odsjeka od 1995. do 1998. Aktivno sudjeluje na razvoju niza projekata u privredi (MOHV, HRT, CROATIA i dr.). Stalni predavač metoda za projektiranje IS od 1986. za projektante. Član programskog odbora za organiziranje CASE - alati i metode savjetovanja. Završio studij Fizika s matematikom na Pedagoškom fakultetu u Rijeci 1980. godine. Na poslovima analitičara/programera u ERC-u, radio od rujna 1982. godine u brodogradilištu 3. Maj u Rijeci. Prvi informacijski sustav o praćenju stanja skladišta završio 1983. godine. Radio na nizu projekata, bilo na projektiranju bilo na fizičkoj realizaciji, kao voditelj, projektant, analitičar ili programer. Održavao predavanja o: arhitekturi operativnih sustava računara, radu prevoditelja, bazi podataka, ekspertnim sustavima, DSS, modeliranju procesa i podataka, organizaciji informatike, informacijskim sustavima i dr. Radio na radnom mjestu projektanta i direktora INFO centra u RiAdria banci d.d. Rijeka. Biran za područje informacijskih znanosti u znanstvenoistraživačko zvanje znanstvenog asistenta 17. ožujka 1992. a u zvanje znanstvenog suradnika 9. studenog 1994. te u docenta 1997. godine. Objavio niz znanstvenih i stručnih radova. Magistrirao na usporedbi raznih metoda za modeliranje podataka, a doktorirao na temi izučavanja procesa praktične primjene informatičkog inženjeringa u poduzećima.

Zdravko Dovedan Han Filozofski fakultet Zagreb

Alen Jakupović Jasminka Tomljanović Veleučilište u Rijeci

Martina Ašenbrener Katić Sanja Čandrlić Marina Rauker Koch Odjel za informatiku, Sveučilište u Rijeci CASE27 11

Appendix A: Skup definiranih TENG jednostavnih rečenica i njihov FNOK zapis No. TENG FNOK 1. They stare. stare("who?" they) 2. Everything glows. glows("what?" everything) 3. Tom swims. swims("who?" Tom) 4. Pencil writes. writes("what?" a pencil) 5. The car drives. drives("what?" the car) 6. A boy stares. stares("who?" a boy) 7. This girl sings. sings("who?" girl("which?" this)) 8. Someone's lamp glows. glows("what?" lamp("whose?" someone's)) 9. Tom's brother swims. swims("who?" brother("whose?" Tom's)) 10. Student's pencil writes. writes("what?" pencil("whose?" student's)) 11. My car drives. drives("what?" car("whose?" my)) 12. The red car drives. drives("what?" the car("which?" red)) 13. A tall boy stares. stares("what?" a boy("which?" tall)) 14. Several girls sing. sing("who?" girls("how_many?" several)) Someone's electrical lamp glows("what?" lamp("whose?" someone's, "what_kind?" electrical)) 15. glows. 16. This artificial system works. works("what?" system("which?" this, "what_kind?" artificial)) 17. Enough information remains. remains("what?" information("how_much?" enough)) 18. American's very tall boy stares. stares("who?" boy("whose?" American's, "which?" tall("how?" very))) 19. My incredibly tall boy stares. stares("whose?" my "how?" incredibly "who?" boy("which?" tall)) Julia's very incredibly tall boy stares("who?" boy("whose?" Julia's, "which?" tall("how?" incredibly("how?" 20. stares. very)))) 21. The red car on the road drives. drives("what?" the car("which?" red) "where?" on "what?" the road) Several girls from behind the sing("who?" girls("how_many?" several) "where?" from "where?" behind "what?" 22. green door sing. the door("what?" green)) Julia's very incredibly tall boy stares("who?" boy("whose?" Julia's, "which?" tall("how?" incredibly("how?" 23. two feet behind me stares. very))) "how_many?" two "what?" feet "where?" behind "who?" me) Enough information right on the remains("what?" information("how_much?" enough) "how?" right "where?" on 24. paper remains. "what?" the paper) This artificial system two feet works("what?" system("which?" this, "what_kind?" artificial) "how_many?" two 25. from behind the table works. "what?" feet "where?" from "where?" behind "what?" the table) American's very tall boy right stares("who?" boy("whose?" American's, "which?" tall("how?" very)) "how?" 26. from behind the door stares. right "where?" from "where?" behind "what?" the door) 27. I look myself. look("who?" I, "whom?" myself) The student reads a wonderful reads("who?" the student, "what?" a book("what?" wonderful)) 28. book. 29. Julia writes a letter to a friend writes("who?" Julia, "what?" a letter "where?" to "what?" a friend) He drove my red car on drove("who?" he, "what?" car("whose?" my, "which?" red) "when?" on "who?" 30. Monday. Monday) A boy gives an apology to the gives("who?" a boy, "what?" an apology "where?" to "who?" the girl) 31. girl. 32. She makes the room red. makes("who?" she, "what?" the room "which?" red) The view makes him incredibly is("what?" the toy, "what?" old("how?" very)) 33. happy on the hill. 34. The toy is very old. swims("who?" Julia, "how?" fast "where?" on "what?" the pool) 35. Julia swims fast on the pool. are("who?" girls, "where?" on "what?" the beach) 36. Girls are on the beach. talk("who?" I, "where?" with "whose?" my book) talk("who?" I, "where?" about "what?" the solution "where?" with "whose?" my 37. I talk with my book. colleague) I talk about the solution with my has("who?" Tom, "how_many?" two "what?" cars) 38. colleague. 39. Tom has two cars. drives("who?" Tom, "what?" a car "when?" today) 40. Tom drives a car today. drove("who?" Tom, "what?" car("which?" red) "when?" on "who?" Monday) drove("who?" Tom, "what?" car("whose?" Mery's, "which?" red) "when?" on 41. Tom drove red car on Monday. "who?" Monday) Tom drove Mery's red car on makes("what?" the view, "who?" him "how?" incredibly "what?" happy "where?" 42. Monday. on "what?" the hill)

12 CASE27

Appendix B: Skup jednostavnih qTENG pitanja i njihov qFNOK zapis No. qTENG qFNOK 1. Are girls on the beach? are (_ girls, _ on _ the beach 2. Who is on the beach? is ("who?" X, & _ on _ the beach 3. Who are on the beach? are ("who?" X, & _ on _ the beach 4. Where are girls? are (_ girls, & "where?" X 5. To whom does Julia write a letter? write (_ Julia, _ a letter _ to _ X 6. Who writes a friend a letter? writes ("who?" X, _ a friend _ a letter 7. Who write a letter to a friend? write ("who?" X, _ a letter _ to _ a friend 8. What does Julia do to a friend? X (_ Julia & _ to _ a friend 9. What does Julia do on the pool? X (_ Julia & _ on _ the pool 10. Where does Julia swim? swim (_ Julia & "where?" X 11. How does Julia swim? swim (_ Julia, "how?" X 12. Who swim fast on the pool? swim ("who?" X, _ fast _ on _ the pool 13. What does Julia's very incredibly tall boy do X (_ boy (_ Julia's, _ tall (_ incredibly (_ very))) two feet behind me? _ two _ feet _ behind _ me 14. What does Julia's very incredibly tall boy do? X (_ boy (_ Julia's, _ tall (_ incredibly (_ very))) 15. Who swim? swim ("who?" X 16. Does a tall boy stare? stare (_ a boy (_ tall) 17. How old is the toy? is (_ the toy, _ old ("how?" X) 18. Is the toy very old? is (_ the toy, _ old (_ very) 19. What did Tom do with Mery's red car on X (_ Tom & _ car (_ red) _ on _ Monday Monday? 20. What did Tom do with red car? X ( _ Tom & _ car (_ red) 21. What do I do about the solution with my X (_ I, _ about _ the solution _ with _ my colleague colleague? 22. With whose colleague I talk about the talk (_ I, & with _ X & _ about _ the solution solution? 23. What do I do with my book? X (_ I, _ with _ my book 24. What do I do? X (_ I 25. What do several girls do? X (_ girls (_ several) 26. What do several girls from behind the green X (_ girls (_ several) _ from _ behind _ the door (_ door do? green) 27. What do they do? X (_ they 28. What does someone's electrical lamp do? X (_ lamp (_ someone's, _ electrical) 29. How many cars has Tom? has (_ Tom, "how_many?" X _ cars 30. What does Tom do today? X (_ Tom & _ today 31. What does Tom do with a car today? X (_ Tom & _ a car _ today 32. What does Tom do? X (_ Tom 33. What does Tom's brother do? X (_ brother (_ Tom's 34. Who give an apology to the girl? give ("who?" X, _ an apology _ to _ the girl 35. What does a boy do to the girl? X ( _ a boy , _ Y & _ to _ the girl 36. What does a boy do? X (_ a boy 37. What does a pencil do? X (_ a pencil 38. What does a tall boy do? X (_ a boy (_ tall) 39. What does American's very tall boy do? X (_ boy (_ American's, _ tall (_ very) 40. What does American's very tall boy right X (_ boy (_ American's, _ tall (_ very)) _ right _ from behind the door do? from _ behind _ the door 41. What does enough information do? X (_ information (_ enough) 42. What does enough information right on the X (_ information (_ enough) _ right _ on _ the paper paper do? 43. What does everything do? X (_ everything 44. What does my car do? X (_ car (_ my 45. What does my incredibly tall boy do? X (_ my _ incredibly _ boy (_ tall) 46. What does she do to the room red? X (_ she & _ the room _ red 47. What does someone's lamp do? X (_ lamp (_ someone's 48. What does the car do? X (_ the car 49. What does the red car do? X (_ the car (_ red) CASE27 13

50. What does the red car on the road do? X (_ the car (_ red) _ on _ the road 51. What does the student do? X (_ the student 52. What does student's pencil do? X (_ pencil (_ student's 53. What does this artificial system do? X (_ system (_ this, _ artificial) 54. What does this girl do? X (_ girl (_ this 55. What drives on the road? drives ("what?" X, & _ on _ the road 56. What drives? drives ("what?" X 57. What glows? glows ("what?" X 58. What is very old? is ("what?" X, _ old (_ very) 59. What makes him incredibly happy? makes ("what?" X & _ incredibly _ happy 60. What remains? remains ("what?" X 61. Which system works two feet from behind works ( _ system ( _ X ) & _ two _ feet _ from _ the table? behind _ the table 62. What works? works ("what?" X 63. What writes? writes ("what?" X 64. Who drove Mery's red car? drove (_ X, _ car (_ Mery's, _ red) 65. When did Tom drove Mery's red car? drove (_ Tom, _ car (_ Mery's, _ red) "when?" X 66. When does Tom drive a car? drive (_ Tom, _ a car "when?" X 67. Who drive today? drive ("who?" X & _ today 68. Who drive? drive ("who?" X 69. Where does enough information remain? remain (_ information (_ enough) & "where?" X 70. Which girl sings? sings (_ girl, "which?" X 71. Who drove my red car on Monday? drove ("who?" X, _ car (_ my, _ red) _ on _ Monday 72. Who make the room red? make ("who?" X, _ the room _ red 73. Who read a wonderful book? read ("who?" X, _ a book (_ wonderful) 74. Who sing? sing ("who?" X 75. Who stare? stare ("who?" X 76. Who talk about the solution with my talk ("who?" X, & _ about _ the solution _ with _ my colleague? colleague 77. With what I talk? talk (_ I, _ with _ X 78. Whose brother swims? swims (_ brother, "whose?" X 79. Whose car drives? drives (_ car, "whose?" X 80. Whose lamp glows? glows (_ lamp, "whose?" X 81. Whose pencil writes? writes (_ pencil, "whose?" X 82. Are girls on the pool? are (_ girls, _ on _ the pool 83. Whom do I look? look (_ I, _ X) 84. Who looks himself? looks ("who?" X, _ himself 85. Who look myself? look ("who?" X, _ myself 86. Who is him? is (_ him & "who?" X 87. Whose red car did he drive on Monday? drive (_ he, _ car (_ X, _ red) _ on _ Monday 88. Whose red car did Tom drive on Monday? drive (_ Tom, _ car (_ X, _ red) _ on _ Monday

Appendix C: qTENG pitanja i odgovori QANOK sustava No. qTENG Answer TENG 1. Are girls on the beach? YES (Girls are on the beach) 2. Who is on the beach? I DO NOT NO 3. Who are on the beach? girls (Girls are on the beach) 4. Where are girls? on the beach 5. To whom does Julia write a letter? a friend (Julia writes a letter to a friend) 6. Who writes a friend a letter? I DO NOT NO 7. Who write a letter to a friend? Julia (Julia writes a letter to a friend) 8. What does Julia do to a friend? writes 9. What does Julia do on the pool? swims 10. Where does Julia swim? on the pool (Julia swims fast on the pool) 11. How does Julia swim? fast 12. Who swim fast on the pool? Julia 14 CASE27

What does Julia's very incredibly tall boy (Julia's very incredibly tall boy two 13. stares do two feet behind me? feet behind me stares) (Julia's very incredibly tall boy stares What does Julia's very incredibly tall boy stares) 14. do? (Julia's very incredibly tall boy two stares feet behind me stares) Tom (Tom swims) 15. Who swim? Tom's brother (Tom's brother swims) Julia (Julia swims fast on the pool) 16. Does a tall boy stare? YES (A tall boy stares) 17. How old is the toy? very (The toy is very old) 18. Is the toy very old? YES What did Tom do with Mery's red car on (Tom drove Mery's red car on 19. drove Monday? Monday) What did Tom do with red car? drove (Tom drove red car on Monday) 20. drove (Tom drove Mery's red car on Monday) What do I do about the solution with my 21. talk colleague? (I talk about the solution with my With whose colleague I talk about the colleague) 22. my colleague solution? 23. What do I do with my book? talk (I talk with my book) look (I look myself) talk (I talk with my book) 24. What do I do? (I talk about the solution with my talk colleague) sing (Several girls sing) 25. What do several girls do? (Several girls from behind the sing green door sing) What do several girls from behind the (Several girls from behind the 26. sing green door do? green door sing) 27. What do they do? stare (They stare) 28. What does someone's electrical lamp do? glows (Someone's electrical lamp glows) 29. How many cars has Tom? two (Tom has two cars) 30. What does Tom do today? drives (Tom drives a car today) 31. What does Tom do with a car today? drives swims (Tom swims) has (Tom has two cars) drives (Tom drives a car today) 32. What does Tom do? drove (Tom drove red car on Monday) (Tom drove Mery's red car on drove Monday) 33. What does Tom's brother do? swims (Tom's brother swims) 34. Who give an apology to the girl? a boy (A boy gives an apology to the 35. What does a boy do to the girl? gives an apology girl) stares (A boy stares) stares (A tall boy stares) 36. What does a boy do? (A boy gives an apology to the gives girl) 37. What does a pencil do? writes (A pencil writes) 38. What does a tall boy do? stares (A tall boy stares) stares (American's very tall boy stares) 39. What does American's very tall boy do? (American's very tall boy right stares from behind the door stares) What does American's very tall boy right (American's very tall boy right 40. stares from behind the door do? from behind the door stares) remains (Enough information remains) 41. What does enough information do? (Enough information right on the remains paper remains) CASE27 15

What does enough information right on (Enough information right on the 42. remains the paper do? paper remains) 43. What does everything do? glows (Everything glows) 44. What does my car do? drives (My car drives) 45. What does my incredibly tall boy do? stares (My incredibly tall boy stares) 46. What does she do to the room red? makes (She makes the room red) glows (Someone's lamp glows) 47. What does someone's lamp do? glows (Someone's electrical lamp glows) drives (The car drives) 48. What does the car do? drives (The red car drives) drives (The red car on the road drives) What does the red car do? drives (The red car drives) 49. drives (The red car on the road drives) 50. What does the red car on the road do? drives (The red car on the road drives) (The student reads a wonderful 51. What does the student do? reads book) 52. What does student's pencil do? writes (Student's pencil writes) works (This artificial system works) 53. What does this artificial system do? (This artificial system two feet works from behind the table works) 54. What does this girl do? sings (This girl sings) 55. What drives on the road? the red car (The red car on the road drives) the car (The car drives) my car (My car drives) 56. What drives? the red car (The red car drives) the red car (The red car on the road drives) everything (Everything glows) 57. What glows? someone's lamp (Someone's lamp glows) someone's electrical lamp (Someone's electrical lamp glows) 58. What is very old? the toy (The toy is very old) (The view makes him incredibly 59. What makes him incredibly happy? the view happy on the hill) enough information (Enough information remains) 60. What remains? (Enough information right on the enough information paper remains) Which system works two feet from behind (This artificial system two feet 61. this artificial the table? from behind the table works) this artificial system (This artificial system works) 62. What works? (This artificial system two feet this artificial system from behind the table works) a pencil (A pencil writes) 63. What writes? student's pencil (Student's pencil writes) 64. Who drove Mery's red car? Tom (Tom drove Mery's red car on 65. When did Tom drove Mery's red car? on Monday Monday) 66. When does Tom drive a car? today 67. Who drive today? Tom (Tom drives a car today) 68. Who drive? Tom (Enough information right on the 69. Where does enough information remain? on the paper paper remains) 70. Which girl sings? this (This girl sings) 71. Who drove my red car on Monday? he (He drove my red car on Monday) 72. Who make the room red? she (She makes the room red) (The student reads a wonderful 73. Who read a wonderful book? the student book) this girl (This girl sings) several girls (Several girls sing) 74. Who sing? (Several girls from behind the several girls green door sing) 16 CASE27

they (They stare) a boy (A boy stares) American's very tall boy (American's very tall boy stares) Julia's very incredibly (Julia's very incredibly tall boy 75. Who stare? tall boy stares) Julia's very incredibly (Julia's very incredibly tall boy two tall boy feet behind me stares) (American's very tall boy right American's very tall boy from behind the door stares) Who talk about the solution with my (I talk about the solution with my 76. I colleague? colleague) 77. With what I talk? my book (I talk with my book) 78. Whose brother swims? Tom's (Tom's brother swims) 79. Whose car drives? my (My car drives) someone's (Someone's lamp glows) 80. Whose lamp glows? someone's (Someone's electrical lamp glows) 81. Whose pencil writes? student's (Student's pencil writes) 82. Are girls on the pool? NO 83. Whom do I look? myself (I look myself) 84. Who looks himself? I DO NOT NO 85. Who look myself? I (I look myself) 86. Who is him? I DO NOT NO 87. Whose red car did he drive on Monday? I DO NOT NO Whose red car did Tom drive on 88. I DO NOT NO Monday? CASE27 17

SUSTAVI ZA VERZIONIRANJE, ALATI I DOBRA PRAKSA: SLUČAJ GIT

VERSION CONTROL SYSTEMS, TOOLS AND BEST PRACTICES: CASE GIT

Igor Tepavac, Krešimir Valjevac, Stefano Kliba, Marko Mijač

SAŽETAK

Sustavi za verzioniranje već dugo predstavljaju sastavni dio razvojnog procesa i neizostavan alat kako individualnim programerima tako i programerskim timovima. Međutim, uporaba takvih sustava i izbor odgovarajućeg načina rada u početku može predstavljati izazov. Programeri i timovi često ne ulože dovoljno vremena da upoznaju mogućnosti ovih sustava, što na kraju rezultira time da ne iskoriste mogućnosti sustava za verzioniranje u punom smislu. U ovom radu pokušati ćemo doprinijeti rješavanju ovog problema identificiranjem i sistematiziranjem korisnih alata i dobrih praksi za korištenje sustava za verzioniranje. Rad će se temeljiti na Git-u, jednom od danas najpopularnijih sustava za verzioniranje.

ABSTRACT

Version Control Systems for quite some time present an integral part of development process and a must have tool for both individual developers and teams as well. However, use of version control systems and choice of proper workflow can at first be challenging. Developers and teams often do not invest enough time to get to know the possibilities of such systems, which results in these systems not being used to their full potential. In this paper we will try to mitigate this problem by identifying and systematizing useful tools and best practices in using version control systems. We will cover the case of Git – one of today’s most popular version control system.

1. INTRODUCTION using Git. In section four several useful tools and services for Git are presented, including client Version control systems for quite some time present an applications, service providers and other utilities. Finally integral part of development process and a must have in section five we discussed our findings and presented tool for both individual developers and teams as well. conclusion remarks. Today, there is probably no serious developer or a company which doesn’t use some sort of version control system on their daily basis. Indeed, these systems are 2. GIT VERSION CONTROL SYSTEM relieving developers of tedious and error prone work of Git version control system allows us to easily manage managing source code versions. Indeed, they bring to changes and versions of different files. We can Git as a table a lot of features that now make us wonder how we special database or repository containing snapshots managed to survive without them. (versions) of our files taken at different point in time. Git One of the most popular version control systems, and other version control systems are especially useful initially developed in 2005 for versioning Linux kernel, is in software development because most files we want to Git. Its popularity is owed to it being free, open-source, keep track of are source code files. Since source code fast, highly flexible distributed version control system. Its files are basically textual files, version control systems flexibility is reflected in the fact that it is used by both can understand changes happening to particular file individual developers for small scale projects and huge throughout various versions. This allows you to rather companies such as Google, , Microsoft, easily roll back to any recorded point in your project Twitter, Eclipse for large projects. However, it also history, or only inspect what the project or any file means that in order to use Git, both individuals and looked like at some point. Although not its primary goal, teams may have to invest significant time to master its this makes version control systems a great backup tool. possibilities and to use it to its full potential. Learning a Version control system is also a great way to track syntax of few commands is not going to guarantee you contributions of individual team members, it makes it are doing version control properly. There is also easier to find or at least narrow down bug sources, and multitude of written and unwritten patterns, anti-patterns, it promotes code review and team member do’s and don’ts, best practices, workflows, communication. recommendations etc. One of the most important features version control In this paper we will try to mitigate this problem by systems offer is collaboration between team members. identifying some useful tools and some best practices in This is usually done by setting up shared central using Git. All this practices should be considered as repository, by which team members share and rules of thumb, and applied if make sense to your synchronize their work. Also, in a more distributed particular environment and situation. Second section manner, version control systems such as Git allow team introduces Git version control system and its basic members to exchange their work directly with each concepts. Then in third section we list best practices in other, without setting a dedicated central repository. 18 CASE27

However, even in distributed workflows there are usually that can at least serve as a starting point for your own special team members which are proclaimed project customized workflow. maintainers/managers, and their repository represent A team's decision on appropriate Git workflow can official codebase. This is often done in very large teams depend on several factors: e.g. size and experience of or open source projects in order to increase security and team, location of team members, type of project, retain control over project. followed development process and methodology, Git has quite a number of different concepts and implementation technology etc. For example, a team commands. Some of these can even be used for with a lot of experience in using SVN will be more different purposes, so using Git can sometimes be comfortable using some of the centralized workflows. puzzling. However, most of your daily work with Git will For an open source project in which practically anyone revolve around only a few commands. can participate a distributed workflows would suit better, In Git every team member besides working directory so a more restrictive policy for changing official (working copy) has his own local repository to which he codebase can be employed. Teams which follow commits changes from working directory. Local prescribed development proces with strongly repository allows member to privately work without emphasized phases, can profit by specifying a workflow disturbing other team members, or to be disturb by which mirrors their development process. others. Of course, since team members do work on the Centralized workflow same project, eventually they need to share and Centralized workflow assumes there is one central synchronize their work. If this collaboration is done repository which serves as a collaboration medium, and through shared central repository, each team member possibly multiple local user repositories. Members must pull other member’s changes from central commit regularly in their local repository, and when they repository and, when ready, push his own changes to want to synronize with others they pull other member's central repository. Following picture describes basic flow work from central repository and push their own work. In between user’s working directory, local repository and centralized workflow this is usually the only way to central repository. collaborate. Central repository is configured as „bare“ repository, which means that unlike members' local repositories, it doesn't have a working copy. This workflow employs very simple branching strategy. It requires only one branch (master) to exist, so members commit their work directly to master branch.

Figure 1 Basic flow in Git

There are two scenarios how we can obtain local Git repositories: we can create new local repository using git init command, or we can join existing project and fetch this project’s repository from central server using command git clone. At his moment our working directory’s state corresponds to the state of project in local repository. After we make some changes in Working directory and want to save them as a new version (snapshot) of our project, we prepare these changes by adding them to Staging area, and commit them to Local repository. In Figure 2 Centralized workflow order to make these changes available to other team member, we push them to Central repository. If other team members have done the same, we can fetch or Feature branch workflow pull their contribution from Central repository to our local Feature Branch workflow is based on Centralized repository. workflow so members continue to collaborate through central repository. However, the difference is in 3. BEST PRACTICES branching strategy. In this workflow, instead of committing directly to master branch, members create 3.1 Common Git workflows new branch for each new feature they start to work on, hence the name. This means that the main codebase in One of the best features of Git is ability to use it in a way master branch will remain clean, and will get new it suits your team or company best. Its flexibility allows features when they are fully completed by merging their one to define and use various different workflows, so it branches. can be hard to decide which is the most appropriate In this workflow all development happens in feature one. Before inventing your own workflow there are some branches. They are usually pushed to central repository common workflows that we think you should consider, in order to back up one's work, and to collaborate and CASE27 19 discuss with other members. Ofcourse, feature branch integrated using pull-requests. E.g. when one of the can also exist only locally. If we want to discuss members finishes new feature, he makes it available by changes made in a branch, or we need an approval to pushing it to his public repository. Then by issuing pull merge new feature to official codebase, we can utilize request, member notifies project maintainer that new mechanism called pull requests. Such workflow is used feature is ready to be integrated to official codebase. even in Github development. The project maintainer pulls new feature from member's Gitflow workflow public repository into his local repository. After the project maintainer makes sure the new feature is GitFlow workflow continues to use central repository as correct, he can push it and make it the part of official a primary means for collaboration, and builds upon codebase repository. Since this workflow introduces Centralized and Feature Branch workflow. However, higher level of security and control over official besides master branch, it introduces one additional codebase, it is often used in open-source projects. long-running branch – develop branch. Here, the master branch contains only official codebase, while the Dictator and Lieutenants workflow develop branch is used to branch off and integrate the Some projects can be so large and complex, that one new features in. No feature branch is merged directly to project maintainer cannot be in charge of managing master branch. Rather, when completed, the feature complete codebase. In such situations Dictator and branch is merged into develop branch, and then develop Lieutenants workflow can be applied. Here, multiple branch can bi merged into master branch. maintainers (called Lieutanants) are assigned with some Forking workflow (Integration-manager workflow) part of codebase for which they handle pull requests. Additionally all lieutenants answer to member with Forking workflow is more of distributed nature. It does Dictator role, who only has access to official not prescribe setting up one central repository to which codebase.The example of using this workflow can be members individually push their changes from their local found in linux kernel development. repositories. Rather, every member has two repositories, one local (private) and one server-side Development process workflow (public) repository. Members make their changes in their Some teams set up their Git workflow in such way it local repositories, and when they want to make these mirrors and simulates their development process. Such changes available to others they push it to their public workflows usually contain long-running branches which repository. Only the owner of public repository can push depict important phases in development process, e.g. to that repository, others can only pull. development, testing, quality assurance, staging, In order to collaborate, one of the members is production, release etc. This perhaps forces or makes proclaimed as project maintainer or a manager, and his easier for team members to follow prescribed public repository as an official codebase (canonical methodology, and gives each role (developers, testers, repository). Note however, that any member can be integrators, stakeholders) a place to do their job, before project maintainer and his repository official codebase. It moving on to next phase. However, such approach can is only a matter of convention who will have that role. besides complexity, introduce additional levels of indirection and burden to development process. 3.2 Using branches

Coding in branches is a simple practice that keeps you and your work more organized. Branches let you easily maintain your “in-progress” work separately from your completed, tested, and stable code. This is an effective way to collaborate with others, it will also allow you to automate the deployment of updates and fixes to your servers. There are two cases of coding: you’re either building new features or fixing bugs in an existing codebase. We could imagine you launched a big Feature X. Things are working nicely together at first and you decide that everything is alright slowly moving on to your next item of business, Feature Y. You start coding and completing the Feature Y, but somewhere along the way you realize that there is a problem with Feature X and its fixing is urgent. If you were working in your default working branch of your repository, you will need to figure out how to save the work you've done so far on Feature Y, rollback the repository to the state where it was when you deployed Feature X, make your fix to the problem we mentioned earlier, do your fix and then re- introduce your work from Feature Y. This is a messy approach and you will most definitely lose some of your work. Instead, what you could do is make a feature or bug-fix branches and let the VCS do the hard work for Figure 3 Distributed workflow you. Once you've finished the deployment of Feature X, you could make a branch that is made for sole purpose Since official codebase can only be modified by owner of deployment of Feature Y. This allows you to work on (project maintainer), contributions of other members are a separate history in your features without code overwriting one another. Once you're completely sure 20 CASE27 that Feature Y is ready and working and could be wasn't intended, and can also help with writing released, you merge the branch for Feature Y with the release notes. working branch of Feature X. This of course means you  Merges should only flow in one direction: first from can switch and work on one of the branches whenever feature to staging for testing; then from feature to you want and create more branches from any point in stable once tested; then from stable to production time, perchance a bug-fix? Making a branch for every to ship. small bug-fix might be unnecessary but following this pattern of work you could avoid making a big mistake of 3.3 Committing changes not making a branch for big bug-fixes, potentially leaving One should commit his work often. This can prevent your working branch in a messy state. unsaved work being lost. Comments to your commits Some of the most important practices to follow using should be meaningful and self-explanatory, because in branches that represent features or bug fixes: the end, these comments represent a handbook to your  Try to avoid committing unfinished work to your project's making process. Also, commit should be repository’s default working branch. atomic, meaning they contain changes related to one  Create a branch any time you begin non-trivial work particular issue, task or functionality. including features and complex bug-fixes. Proper commits ease things up for you, your team  Don’t forget to delete feature branches once they members and others, by requiring less time to spend were merged into stable branch. This will keep your figuring out what actually happend in particular project. repository clean. If a bug is found in the later stages of the project and it’s Another reason to use version control is so that you can concluded on what commit this bug was made, good use your repository as the source to deploy code to your comments make things easier to understand what the servers. Much like feature and bug-fix branches, purpose of that commit was. In order to isolate exact environment branches make it easy for you to separate revision which introduced a bug, we can use bisect your in-progress code from your stable code. Using command. environment branches and deploying from them means Good commenting does not only help your team, but you will always know exactly what code is running on also helps you. If you have to rework some part of the your servers in each of your environments. project that you worked on months ago, good comments We’ve mentioned “default working branch” – but you will save you time spent figuring out what you intended can also think of this as your development environment to do back then. branch. It’s a good idea to keep this branch clean – this Commit your work often and give some meaning to your is easily done by using feature and bug-fix branches comments. This does not take much time, but helps you and only merging them back to your development and your colleagues and can save your team a lot of branch once they are tested. In other words, at any time later on. point in time your development branch should contain only stable code, as stated above several times. 3.4 Resolving conflicts When your development environment has been updated Although conflicts are not something to be feared (at with features and bug-fixes that are tested, you can use least in Git), resolving conflicts can require careful your VCS to do a diff between your stable (master) analysis and discussion with other team members, branch and staging branch to see what would be which in the end can be quite time consuming. So one deployed that’s not currently on staging. This is a great of the strategies in dealing with conflicts is to try to opportunity to look for low quality or incomplete code, actually avoid conflicts. This means that one should debug code, and other development leftovers that concentrate on much more frequent and smaller shouldn’t be deployed. This diff can also be helpful in commits in order to avoid merging conflicts. Of course, writing release notes. In order to keep your environment that merely depends on the situation and thus we will branches in sync with the environments, it’s a best share a few of the best gathered practices tied with practice to only execute a merge into an environment solving conflicts – not counting the one mentioned in the branch at the time you intend to deploy. If you complete beginning. a merge without deploying, your environment branch will One of the most advised methods is to share the work be out of sync with your actual production environment. you've done with your teammates. If commits are being With environment branches, you never want to commit done on a more frequent scale – conflicts will be easier changes directly to the branch. By only merging code to track and in the end, to resolve. Conflicts are tied with from your stable branch into staging or production the local machine on which the work is being done, so branches, you ensure that changes are flowing in one one shouldn't stop sharing on a more frequent basis due direction: from feature and bug-fix branches to stable to being afraid of breaking the project. So, commit often and staging environments, and from stable to and resolve conflicts as soon as you see them. Having production. This keeps your history clean, and again, frequent commits helps with resolving conflicts because lets you be confident about knowing what code is in small scale commits there won't be as many conflicts running in which environments. as it would be in large scale commits. Some of best practices in environment branches are So far we have been talking about avoiding conflicts and following: not letting them swarm you or the team. But let's say  Use your repository’s default working branch as that conflicts just can't be avoided and that you are sure your “stable” branch. that there will be some. One of the most important  Create a branch for each environment, including things is that you think about the documentation. Not staging and production. only with fixing conflicts, but with overall process of  Never merge into an environment branch unless pushing your code on Git. Once you've successfully you are ready to deploy to that environment. resolved a specific conflict, make a note – say what  Perform a diff between branches before merging— exactly was fixed, how, what was changed, and what this can help prevent merging something that the source of the error was. CASE27 21

Let's say that two members of a certain team are editing services which offer hosting and managing these public the same file, the same lines of code, and at the same repositories. Most popular ones are listed in Error! time. Changes will be made, obviously different, and we Reference source not found.. will face a conflict. The best possible way to resolve that conflict, without relying that much on the software itself 4.2 Client applications is to see who else has been modifying the file. That way through a discussion and a bit of backtracking – Command line interface is primary way of interacting conflicts can be resolved without much trouble coming with Git, allowing access to all Git's commands and from pin-pointing the issue. options. However, many users choose to work with Git through GUI client applications, which may provide Git itself already says a lot to us when we step into a better user experience and easier access to some conflict. But, what if we wanted to make it even better functionalities (such as browsing history, merging, and a bit easier to read and handle? The answer lies in resolving conflicts etc). Error! Reference source not merging tools. Using the git config command, one can found. presents some of the most popupar GUI set up the merging tool mostly to his liking. So, what do standalone and IDE integrated client applications: we actually get with a tool like that? Well, it shows us the changes that were made on a particular file, but also 4.3 Other utilities provides us with an option to merge one of the shown files into the final version of the file that will be stored Table 2 presents several Git standalone and integrated into the project tree. Depending on which tool one utilities for Git such as: merging tools, scripting tools, decides to use, the code that was merged into the final user statistics generators etc. Name Platform Cost Type Popularity GitHub for Mac OS X Free Interface tool Client ***** GitHub for Windows Win Free Interface tool Client ***** Gitbox OS X Free / 14.99$ Interface tool Client *** GitX-dev OS X Free Interface tool Client **** Git Extensions Win Free Windows explorer integration **** Tower OS X Trial / 59$ Git Client ***** SourceTree OS X, Win Free Interface tool Client *** git-cola All Free Interface tool Client ** SmartGit All Free (non commercial) / 79$ Interface tool Client **** GitEye All Free Integrated interface tool *** gitg Linux Free Gnome Shell Integration ** TortoiseGit Win Free Windows Shell Extension **** IDEs supporting Git Microsfot Visual studio, Android studio, Eclipse, Netbeans, IntelliJ, Ninja-IDE Table 1 Git client applications file can be edited even further. After that's done, changing the file is as easy as closing the tool which will Name Type Platform Cost then trigger the git add command and resolve the Meldl Merge tool All Free conflict. JavaGit Library All Free Considering the above described scenario – let's say Diffmerge Merge tool All Free that you take one of the given options and whilst doing Gitolite Authorization Layer All Free so you actually end up making the code being worse, Git Hooks Scripting tool All Free slower or overall not as good as it was before. Luckily Git merge tool Merge tool All Free merging tools also come with the undo option which enables it's user to backtrack to the previous state of the Gitinspector User statistics All Free affected file. Diffuse Text file comparison Win Free EGit Team provider interface All Free Lastly – we want to note that Git is extremely helpful and offers us a lot of options with solving conflicts and Flashbake Commit message generator Linux, OS X Free editing the code itself. It helps no matter if we are Table 2 Other useful tools for Git working in large teams and on large, medium or actually small projects. However we would like to stress that 5. CONCLUSION benefits of using Git are limited when combined with bad team coordination and overall bad project Git's flexibility allows vast number of different workflows management. What does that actually mean? Well, it and ways to use it. You can customize it to suit your means that git as good as the team which uses the needs. However this flexibility and customizability software is. comes with price in a form of Git's complexity. Indeed, in order to explore Git's full potential one needs to invest significant time and effort. Unfortunately, a large number 4. TOOLS of developers pressed with their everyday activities and 4.1 Service providers project deadlines do not have enough time to set aside. Nevertheless, we strongly believe that no serious For users to collaborate, depending on workflow, Git individual developer and especially developer teams assumes either setting up a public central repository or should perform their every day jobs without version a public repository for each user. There is a number of control system such as Git. For this reason, in this 22 CASE27

Free Plan Pricing Plans Code Time Provider Private Public Price Private Users Users Review Tracking Repos Repos ($/month) Repos Assembla 1 1 Unlimited $24 - $199 Unlimited 12 - 100 No Yes 10 - Bitbucket Unlimited Unlimited 5 $10 - $200 Unlimited Yes Yes Unlimited Unlimited Unlimited Unlimited $2 per-user - CloudForge Unlimited Unlimited No Yes (trial) (trial) (trial) $10 per-user 10 - Codebase 1 1 2 $8 - $65 3 - 40 No Yes Unlimited $30 - $10 25 - GitEnterprise Unlimited Unlimited 10 Unlimited No Yes per-user/year Unlimited

GitHub None Unlimited Unlimited $7 - $200 5 - 125 Unlimited Yes Yes

GitLab None None None $20 - $249 Unlimited 20 - 100 Yes Yes Unlimited Unlimited Unfuddle 10 (trial) $19 - $249 Unlimited 10 - 50 No Yes (trial) (trial) $20 per-user Visual Studio Unlimited Unlimited 5 - $60 per- Unlimited Unlimited Yes Yes Online user Table 3 Popular service providers paper, we reported several best practices and useful to team members. Nevertheless, we bring few tools which provide help in using Git. recommendation when dealing with conflicts. One of the most important things, which determins Quite a number of tools and services exist which can overall strategy in using Git, is chosen workflow. We help you in using Git. They range from GUI client listed several common workflows which can be applied applications which tend to replace Git command line, to as they are, or they can provide a solid base for various utility applications for Git statistics, scripting, developing customized workflows. Also, we indicated a merging and conflict resolution. Also, since a centralized few recommended practices in using branches, which Git workflows are quite popular, we listed several are one of the most advocated Git's features and services which provide Git hosting. inseparable part of Git workflows. During the writting of this paper a few interesting topics In order to collaborate with others and contribute to a for further exploration and research came up: project, user wraps his work in a form of commits.  Further systematization of best practices in using Because commits represent a fundamental part of version control systems, versioning process and influence the quality of this  Formalization of these practices in a form of process, we provided a several useful guidelines. patterns, If two team members simultaneously make changes in  Impact of various factors on choosing proper the same part of the same file, a conflict will occur. In version control system workflow, Git, conflicts are nothing to be afraid off, and are quite  Supporting various software development common. However, if they are too frequent, one should methodologies with version control system. question wheather project tasks are properly distributed References:

1 S. Chacon and B. Straub, Pro Git: [everything you need to know about Git], 2. ed. New York, NY: Apress, 2014. 2 R. Hodson, “Ry’s Git Tutorial,” RyPress, Dec-2012. [Online]. Available: http://rypress.com/tutorials/git/index. 3 “Git Workflows That Work | End Point Blog.” . 4 T. Günther, Learn Version Control with Git. 2015. 5 “Git Tutorials and Training,” Atlassian Git Tutorial, May-2015. [Online]. Available: https://www.atlassian.com/git/tutorials/. [Accessed: 24-May-2015]. 6 “Git Best Practices: Workflow Guidelines,” Lullabot. [Online]. Available: https://www.lullabot.com/blog/article/git-best- practices-workflow-guidelines. [Accessed: 24-May-2015]. 7 “A successful Git branching model,” nvie.com. [Online]. Available: http://nvie.com/posts/a-successful-git-branching- model/. [Accessed: 24-May-2015]. 8 S. Robertson, “Commit Often, Perfect Later, Publish Once: Git Best Practices,” 2012. [Online]. Available: https://sethrobertson.github.io/GitBestPractices/. 9 M. Mijač, I. Švogor, and B. Tomaš, Odabrana poglavlja programskog inženjerstva. Varaždin: FOI, 2014. 10 E. Pidoux, Git Best Practices Guide. Packt Publishing, 2014. 11 B. Binkovitz, “Branching, Merging, Commits, and Tagging: Basics and Best Practices.”

CASE27 23

Information on authors:

Igor Tepavac [email protected] Faculty of Organization and Informatics Igor Tepavac is currently a second year undergraduate student of Information Systems at the Faculty of Organization and Informatics in Varaždin. He is interested in software development for desktop, web and mobile platforms. Also, he is consistently learning about new development technologies which are upgrading his knowledge and experience.

Krešimir Valjevac [email protected] Faculty of Organization and Informatics Krešimir Valjevac is a third year undergraduate student of Information Systems studying at Faculty of Organization and Informatics. He is consistently learning new technologies and his main point of interests are Mobile, Web and desktop development. He has participated on SEETech hackathon in 2015. where he attained the sixth place. He has been working as a volunteer for the past 7 years for a German company named Gameforge where he developed his soft skills.

Stefano Kliba [email protected] Faculty of Organization and Informatics Stefano Kliba is a regular third year college student at Faculty of Organization and Informatics, University of Zagreb, in Varaždin. He is working towards my bachelor's degree in Information systems. He's primary interest is in mobile development, particulary Android. He has participated in several competitions, such as Hamag Bicro's Hackathon where he and his team were placed 6th out of 20 competitors, App Start Contest which is currently in progress. Currently working on several mobile development projects. He is also a member of Laboratory for mobile technologies (MT Lab) at Faculty of Organization and Informatics.

Marko Mijač [email protected] Faculty of Organization and Informatics Pavlinska 2 42000 Varaždin tel: +385 42 390 853 fax: +385 42 213 413

Marko Mijač, as of July 2011 works at the Faculty of Organization and Informatics in Varaždin as a project KI Expert 2012, project MEDINFO associate, and as a teaching assistant on courses related to software engineering and information systems. Prior to his current employment he worked as a developer of intranet production planning system at Boxmark Leather d.o.o. He is interested in web, desktop and mobile applications development in various platforms and technologies. 24 CASE27 CASE27 25

VIŠESTRUKO NASLJEĐIVANJE - SAN ILI JAVA 8?

MULTIPLE INHERITANCE - EIFFEL, C++, SCALA, JAVA 8

Zlatko Sirotić

SAŽETAK

Višestruko nasljeđivanje klasa je dosta dugo vremena neopravdano držano kao kompleksno i nepotrebno. Vjerojatno je jedan od glavnih razloga taj što je višestruko nasljeđivanje u jeziku C++ relativno loše riješeno. Višestruko nasljeđivanje u C++ uvedeno je naknadno, 1989., tj. nije uvedeno od početka. Na temelju takvih loših iskustava, dizajneri jezika Java (a poslije i C#) odlučili su da ne podrže višestruko nasljeđivanje klasa. No, jezik Eiffel je imao višestruko nasljeđivanje od pocetka (1986.) i smatra se da od svih OOPL-a najbolje podržava višestruko nasljeđivanje. U Javi 8 krenulo se u pravcu uvođenja višestrukog nasljeđivanja klasa. U radu se prikazuje kako je višestruko nasljeđivanje podržano u jezicima Eiffel, C++, Scala i Java 8. ABSTRACT

Multiple inheritance has been kept as complex and unnecessary, quite a long time. Probably one of the main reasons is that multiple inheritance in C++ is relatively poorly designed. Multiple inheritance in C++ was not introduced from the beginning, it was introduced later, in 1989. Based on these bad experiences, the designers of Java (and later C#) decided not to support multiple inheritance of classes. However, the Eiffel language has multiple inheritance from the beginning (1986), and of all OOPLs, Eiffel is the best in supporting multiple inheritance. Java 8 has moved in the direction of introducing multiple inheritance of classes. The paper shows how is multiple inheritance supported in languages Eiffel, C++, Scala and Java 8.

1. UVOD

Već dugo vremena u praksi objektnog programiranja uvriježeno je mišljenje da je višestruko nasljeđivanje "loša stvar". Vjerojatno je jedan od glavnih razloga za takvo razmišljanje taj što je višestruko nasljeđivanje u jeziku C++, jeziku koji je uveo objektno orijentirano programiranje u "široke mase" početkom 80-ih godina (ali, ne zaboravimo da je prvi OOPL nastao 1967. - Simula 67), relativno loše riješeno. Višestruko nasljeđivanje u C++ uvedeno je naknadno, 1989., tj. nije uvedeno od početka. Nije pomoglo niti to što postoji jedan jezik u kojem je višestruko nasljeđivanje izuzetno dobro riješeno od početka (1986.) – to je jezik Eiffel. Nažalost, dizajneri jezika Java (a poslije i C#) odlučili su da ne podrže višestruko nasljeđivanje klasa. Istina, postoji višestruko nasljeđivanje sučelja (interface), ali sučelja su samo potpuno apstraktne klase, bez ikakve implementacije (točnije, tako je bilo do Slika 1. Autori knjige kao da pitaju: Jave 8 i pojave default metoda). "Valjda ne mislite da nam je potrebno višestruko Evo primjera kako autori u poznatoj (i izuzetno dobroj) nasljeđivanje?"; Izvor: [6] knjizi o Javi [6] objašnjavaju kako nam se samo čini da nam treba višestruko nasljeđivanje (slika 1.): slici je to metoda burn), pa se onda postavlja pitanje koju Glavno opravdavanje tog svog stava vide u poznatom će varijantu nadjačane metode pozivati najdonja klasa (ComboDrive). problemu, tzv. "dijamantne smrti", koji se javlja kod tzv. ponovljenog nasljeđivanja (repeated inheritance), kad Kako ćemo vidjeti u 3. točki, jezik Eiffel ima vrlo učinkovit jedna klasa (u primjeru na slici 2. to je klasa ComboDrive) mehanizam za rješavanje tog problema, pa taj problem nasljeđuje od dvije klase (na slici su to CDBurner i (sam po sebi) ne može biti opravdanje za odustajanje od DVDBurner), koje obje nasljeđuju jednu te istu klasu (na višestrukog nasljeđivanja. slici je to DigitalRecorder), a obje klase su nadjačale Evo što o višestrukom nasljeđivanju kažu neki drugi (override) metodu koju su naslijedile od vršne klase (na znanstvenici. Prvo Luca Cardelli u "A Semantic of Multiple Inheritance" (1988.): 26 CASE27

"Algol je bio toliko ispred svog vremena da je predstavljao poboljšanje ne samo u odnosu na sve svoje prethodnike, nego i u odnosu na skoro sve svoje nasljednike". Jedan od "Algol-oidnih" jezika bio je i Simula 1, koji je bio namijenjen uglavnom za simulacije. Kasnija verzija, Simula 67 (nastala 1967. godine, a autori su Kristen Nygaard i Ole-Johan Dahl), je jezik opće namjene i toprvi OOPL u povijesti! Svaki jezik ima svoj stil za pisanje imena klasa, atributa, metoda, parametara i lokalnih varijabli. Eiffel nije osjetljiv na velika/mala slova,dok C++, Java i Scala jesu (case-sensitive). Klasa, a ne objekt, je osnovni element objektno- orijentiranih programskih jezika (možda bi se trebali zvati COPL, umjesto OOPL). Klasa je dio programskog koda,takav da ima osobine i modula i tipa.

Pojednostavljeno se može reći da vrijedi formula: Slika 2. Kako autori "opravdavaju" zašto je višestruko KLASA = MODUL + TIP. Klasa definira podatke (atribute) i nasljeđivanje loše; Izvor: [6] ponašanje (metode, rutine, funkcije). Zbog jednostavnije usporedbe četiri OOPL jezika, koristit ćemo pojmove "atribut" i "metoda". "A class can sometimes be considered a subclass of two incompatible superclasses; then an arbitrary decision has Nasljeđivanje je jedna od tri osnovne operacije računa to be made to determine which superclass to use. This klasa (class calculus). Ostale dvije su agregacija i problem leads naturally to the idea of multiple generičnost. Klasa od koje se nasljeđuje je nadklasa, a inheritance.Multiple inheritance occurs when an object can klasa koja nasljeđuje je podklasa. Podklasa može imati belong to several incomparable superclasses: the subclass nove metode i atribute (koje nadklasa nema), ali može i relation is no longer constrained to form a tree, but can nadjačati (overriding) metode iz nadklase. Eiffel ima ključnu form a dag. Multiple inheritance is more elegant than riječ redefine, a Scala override, kojom programer simple inheritance in describing class hierarchies, but is eksplicitno kaže da nadjačava određenu metodu. C++ i more difficult to implement." Java ne koriste ključne riječi (Java ima anotaciju), nego se nadjačavanje izražava tako da se u podklasi deklarira Evo što kaže Bertrand Meyer u "Object Oriented Software metoda sa istom signaturom kao što je metoda u nadklasi. Construction" (1997.): Eiffel i Scala (eksplicitan) način izražavanja je bolji, jer "Multiple inheritance is indispensable when you want to smanjuje mogućnost programerske greške. state explicitly that a certain class possesses some Stog (stack) i gomila ili hrpa (heap) su vrlo važne strukture properties beyond the basic abstraction that it represents. podataka i za ne-OOPL i za OOPL. I kod ne-OOPL i kod Consider for example a mechanism that makes object OOPL se stog koristi za spremanje lokalnih varijabli i structures persistent (storable on long-term storage)… argumenata (neko kaže parametara) funkcija / procedura. The discussion of inheritance methodology will define it as C++ i Eiffel mogu na stogu imati i objekte, koji nestaju inheritance of the structural kind. Without multiple nakon što završi funkcija / procedura koja ih je kreirala. inheritance, there would be no way to specify that a certain Naravno, mogu imati objekte i na gomili. Java i Scala mogu abstraction must possess two structural properties — imati objekte samo na gomili, a na stogu Java može držati numeric and storable, comparable and hashable. Selecting samo varijable primitivnog tipa, ili reference na objekte koji one of them as the parent would be like having to choose su na gomili (Java i Scala). C++ objekti na gomili se ne between your father and your mother." brišu automatski kad više nema referenci na njih, za razliku U nastavku se u točkama od 3. do 6. daje prikaz rješenja od Eiffela, Jave i Scale, gdje ih automatski briše garbage višestrukog nasljeđivanja u jezicima Eiffel, C++, Scala i collector. Java (verzije 8). Redoslijed prikaza nije odabran na temelju "Pjesnički rečeno", polimorfizam omogućava da objektima starosti jezika (jer bi onda bio ovakav: C++, Eiffel, C++, različitog tipa pošaljemo istu poruku i da oni na tu poruku Java, Scala), već na temelju pojave višestrukog reagiraju na odgovarajući način. Riječ je o tome da nasljeđivanja u određenom jeziku (Eiffel 1986. C++ 1989., možemo varijabli određenog tipa pridružiti ne samo Scala 2003., Java 2014.). U sljedećoj (2.) točki daje se varijablu istog tipa, nego i varijablu podtipa (polimorfično kratka usporedba nekih osobina navedenih jezika. pridruživanje). Što će se desiti ako imamo neku metodu koja je nadjačana 2. KRATKA USPOREDBA PROMATRANIH u podklasi i ako nakon polimorfičnog pridruživanja JEZIKA (EIFFELL, C++, SCALA, JAVA) pozovemo tu metodu naredbom "varijabla_nadklase.metoda" - da li će se izvršiti verzija Sva četiri jezika imaju zajedničkog pretka – Algol metode iz nadklase ili verzija iz podklase? Odgovor je – (ALGOrithmic Language), kojeg su napravili Backus i Naur metoda iz podklase, zahvaljujući tzv. dinamičkom daleke (za informatiku) 1958. godine. Algol je ostavio povezivanju - dynamic binding(ili dynamic method ogroman utjecaj na programske jezike koji su došli nakon dispatch). Za C++ to vrijedi samo ako je metoda u nadklasi njega. Poznati informatičar C.A.R. Hoare duhovito je rekao: označena sa virtual i ako koristimo dinamičke objekte (na heapu). Eiffel kod nadjačavanja metoda podržava tzv. covariance i za parametre metoda i za povratnu (return) vrijednost CASE27 27 funkcije i za atribute, tj. oni ne moraju biti istog tipa kao u U Eiffel "ekosustavu" često se umjesto UML grafičke izvornoj metodi, već mogu biti podtipa. C++ ima novariance notacije koristi BON (Bussines Object Notation; Jean-Marc pristup za parametre, ali po Standardu od 1997. podržava Nerson i Kim Waldén, 1989.) grafička notacija za prikaz covariance za povratne vrijednosti funkcije. Java se klasa, koja ima slične mogućnosti kao UML notacija, ali je ponaša kao C++ od verzije Java 5. Scala ima isto jednostavnija. Slika 4. prikazuje primjer u kojem efektivne ponašanje. Nekad je logičan izbor covariance, a nekad klase TAXI i TRAM nasljeđuju apstraktnu klasu VEHICLE, contravariance, pogotovo kod tzv. nasljeđivanja pri čemu klasa TAXI nadjačava metodu take, pa ona implementacije. Međutim, covariance i contravariance nad postaje efektivna, a klasa DISPATCH_TAXI, podklasa od parametrima mogu dovesti i do određenih problema, koje TAXI, redefinira tu metodu. kompajler treba pokušati spriječiti (npr. Eiffel kompajler).

3. EIFFEL

Eiffel je 1985. godine dizajnirao (a 1986. je napravljen prvi compiler) Bertrand Meyer, jedan od najvećih autoriteta na području OOPL-a. Eiffel je od početka podržavao višestruko nasljeđivanje, generičke klase, obradu iznimaka, garbage collection i metodu Design by Contract (DBC). Kasnije su mu dodani agenti, nasljeđivanje implementacije (uz nasljeđivanje tipa) i metoda za konkurentno programiranje Simple Concurrent Object-Oriented Programming (SCOOP). Slika 4. BON (Bussines Object Notation) grafička notacija za prikaz klasa U široj je javnosti daleko manje poznat nego C++ i Java, ali (kao UML, ali jednostavnija); Izvor: [4] ga mnogi autoriteti smatraju danas najboljim OOPL jezikom. Eiffel je od 2005. godine ECMA standardiziran, a od 2006. ISO standardiziran. U nastavku je primjer U sljedećem primjeru klasa TROLLEY nasljeđuje klase programskog koda u jeziku Eiffel. Klasa ZIVOTINJA ima TRAM i BUS, pri čemu redefinira metode add_station i metodu-konstruktor, koja se u ovom slučaju zove kao i remove_station iz klase TRAM: klasa (ali u Eiffelu to ne mora biti tako), dva atributa, jednu class TROLLEY inherit metodu-proceduru (prikazi_podatke) i jednu metodu- TRAM funkciju (visina_inch): redefine add_station, remove_station end class ZIVOTINJA BUS create zivotinja feature feature {ANY} ... ime: STRING end visina_cm: DOUBLE Slika 5. prikazuje primjer u kojem klasa C nasljeđuje dvije zivotinja (p_ime: STRING; p_visina_cm: klase A i B, koje imaju metodu istog imena f. Kako riješiti REAL) is taj problem? do ime := p_ime; visina_cm := p_visina_cm end

prikazi_podatke is do print (" Ime: "); print (ime); ...

end Slika 5. Nasljeđivanje dvije klase koje imaju metodu istog visina_inch: REAL is imena; Izvor: [4] do Result := visina_cm / 2.54 end end Sljedeći primjer pokazuje kako se u jeziku Eiffel rješava taj problem. Jednostavno, jedna od metoda (ili obje) iz Eiffel poznaje četiri oblika redeklaracije nadjačane metode nadklase se preimenuje. U ovom slučaju preimenuje se u podklasi (slika 3.). I efektivna (effective) i apstraktna metoda f iz klase A: (deferred) metoda nadklase se može redefinirati (redefinition) u podklasi. Apstraktna metoda iz nadklase class C inherit može se u podklasi učiniti efektivnom (effecting). Suprotno A tome, efektivna metoda iz nadklase može se u podklasi rename f as first_f učiniti apstraktnom (undefinition). B feature ... end

Slika 6. prikazuje primjer ponovljenog nasljeđivanja (repeated inheritance). Klasa DRIVER ima tri atributa (i Slika 3. Različiti načini redeklaracije metoda u jeziku Eiffel; dvije metode), a nju nasljeđuju klase FRANCH_DRIVER i Izvor: [4] US_DRIVER. Obje klase nasljeđuje klasa FRANCH_US_DRIVER. Postavlja se pitanje – koje atribute ima ta klasa (FRANCH_US_DRIVER)? 28 CASE27

Slika 8. Što se desilo sa atributima kod ponovljenog nasljeđivanja; Izvor: [3]

Pretpostavimo da klase B i C nasljeđuju klasu A,te klasa D nasljeđuje obje klase. Što ako je metoda f iz A redeklarirana u (npr.) klasi B, a obje su varijante efektivne Slika 6. Primjer ponovljenog nasljeđivanja (repeated (nisu deferred, tj. apstraktne), kao što pokazuje slika 9.? inheritance); Izvor: [3]

Slika 7. daje odgovor na prethodno pitanje. U klasi FRANCH_US_DRIVER preimenovat ćemo dva atributa (i jednu metodu) naslijeđena iz klase FRANCH_DRIVER, i dva atributa (i jednu metodu) naslijeđena iz klase US_DRIVER.

Slika 9. Primjer ponovljenog nasljeđivanja, sa redeklariranjem i bez replikacije; Izvor: [3]

Tada moramo koristiti ključnu riječ undefine, kako bismo jednu od njih učinili apstraktnom (ovdje onu iz C). Slijedi Slika 7. Preimenovanje atributa kod ponovljenog odgovarajući programski kod: nasljeđivanja (repeated inheritance); Izvor: [3] class D inherit B Slijedi odgovarajući programski kod: C undefine f end

feature class FRENCH_US_DRIVER inherit ... FRENCH_DRIVER end rename address as french_address, violation_count as Pretpostavim da imamo situaciju sličnu prethodnoj, ali je french_violation_count, sada metoda f iz A istovremeno i redeklarirana u klasi B, i pay_fee as pay_french_fee mijenjano joj je ime iz f u bf, kako pokazuje slika 10. end US_DRIVER rename address as us_address, violation_count as us_violation_count, pay_fee as pay_us_fee end feature ... end -- class FRENCH_US_DRIVER

Slika 10. Primjer ponovljenog nasljeđivanja, sa Slika 8. pokazuje kako izgledaju atributi klase redeklariranjem i sa replikacijom; Izvor: [3] FRANCH_US_DRIVER, u odnosu na vršnu klasu DRIVER. Vidi se da atribut age nije dupliran (u klasi FRANCH_US_DRIVER), dok su duplirani atributi address i Sada imamo replikaciju (te metode), pa u klasi D moramo violation_count. odabrati koju od te dvije varijante želimo koristiti, pomoću ključne riječi select (ovdje onu iz C). Slijedi odgovarajući programski kod:

CASE27 29 class D inherit mehanizam. Između ostalog, C++ nema preimenovanje B (rename) metoda. Ako se od dvije klase naslijede dvije C funkcije istog imena, mora se koristiti scope resolution select f end operator za rješavanje dvosmislenosti, kako prikazuje feature ... end sljedeći kod:

class A {void f() {…}}; 4. C++ class B {void f() {…}}; class C : public A, public B {…}; Početkom 70-ih godina napravljen je programski jezik C (autor je Dennis Ritchie), također Algol-ov potomak, kao void test() jezik za sistemsko programiranje operativnog sustava { UNIX. U isto vrijeme nastao je i Pascal, isto potomak Algol- C∗ p = new C(); a. Za većinu kasnijih programskih jezika možemo reći da (barem po sintaksi) pripadaju C ili Pascal "struji". // p–>f(); This call would be ambiguous - Nadograđujući C sa objektno orijentiranim mogućnostima invalid; (uz zadržavanje kompatibilnosti), Bjarne Stroustrup je p–>A::f(); 1983. godine napravio C++ (1986. godine je objavio knjigu p–>B::f(); "The C++ Programming Language"). } Tokom vremena je C++ dobivao neke vrlo značajne mogućnosti, koje na početku nije imao: višestruko Ako se kod ponovljenog nasljeđivanja želi raditi replikacija nasljeđivanje, generičke klase (predloške), obradu člana vršne klase, opet se koristi scope resolution operator, iznimaka (exceptions) i dr. 1997. godine donesen je ISO kako pokazuje sljedeći primjer: standard. U standardu C++11 uvedene su npr. i lambda funkcije. Najnoviji je C++14 (koji donosi manja class D {int n;}; poboljšanja). class E : public D {}; Slijedi primjer C++ programskog koda, koji je ekvivalentan class F : public D {}; programskom kodu koji je prethodno prikazan kod jezika class G : public E, public F {}; Eiffel. Da bismo postigli što veću sličnost primjera u svim jezicima, sljedeća C++ klasa ima javne atribute i metode, void f() iako bi u C++ stilu bilo bolje napraviti privatne atribute i { odgovarajuće "get/set" metode za čitanje/postavljanje G∗ p = new G(); atributa: // p–>n = 0; // This would be invalid: #include which n? #include using namespace std; // Valid, assigns to version replicated class Zivotinja { in E public: p–>E::D::n = 0; string ime; double visina_cm; // Valid, assigns to version replicated Zivotinja(string p_ime, double in F p_visina_cm); p–>F::D::n = 0; virtual void prikazi_podatke(); } virtual double visina_inch(); }; Međutim, ako želimo da se oba člana naslijeđena iz vršne klase spoje u jedan, onda se javljaju dodatne komplikacije // definicija klase (koje ovdje nećemo iznositi). Zivotinja::Zivotinja(string p_ime,double p_visina_cm) { ime = p_ime; visina_cm = p_visina_cm; 5. SCALA } void Zivotinja::prikazi_podatke() { Programski jezik Scala kreirao je Martin Odersky, profesor cout << "Ime: " << ime << ...; na Ecole Polytechnique Fédérale de Lausanne (EPFL). } Krajem 80-ih doktorirao je na ETH Zürich kod profesora double Zivotinja::visina_inch() { Niklausa Wirtha (kreatora Pascala i Module-2). Nakon toga return visina_cm / 2.54; naročito se bavio istraživanjima u području funkcijskih } jezika, zajedno sa kolegom Philom Wadlerom (jednim od // ovaj kod nije dio nijedne klase dva glavna kreatora funkcijskog jezika Haskell). void main() { Kada je izašla Java, Odersky i Wadler su 1996. napravili Zivotinja* l_dz = new Zivotinja("FIFI", jezik Pizza nad JVM-om. Na temelju projekta Pizza, 20); napravili su 1997./98. Generic Java (GJ), koji je uveden u l_dz->prikazi_podatke(); Javu 5 (malo ga je nadopunio Gilad Bracha, sa delete l_dz; wildcardsima). Dok je za primjenu GJ-a Sun čekao skoro 6 } godina, odmah su preuzeli Java kompajler koji je Odersky napravio za GJ. Taj se kompajler koristi od Jave 1.3. Kako je već prije rečeno, višestruko nasljeđivanje je u C++ Odersky je 2002. počeo raditi novi jezik Scala. Tako je uvedeno naknadno, 1989. godine. Mehanizam višestrukog nazvana kako bi se naglasila njena skalabilnost. Prva javna nasljeđivanja u C++ nije tako fleksibilan kao Eiffel verzija izašla je 2003.; trenutačna verzija je 2.11, a 30 CASE27 sljedeća verzija 2.12 radit će isključivo na JVM 8! Od tada, val jakoPametnaMacka = new Macka("Mica Scala se sve više koristi u praksi. Došla je među prvih 50 maca") with Programer najkorištenijih jezika, sa tendencijom da se probije među prvih 20. Zanimanje za Scalu naročito se povećalo kada je Slijedi primjer rezolucije (rješavanja) konflikta kod Twitter prebacio glavne dijelove svojih programa iz jezika nasljeđivanja dvije metode istog imena. To programer Ruby u Scalu. rješava eksplicitno (za razliku od Eiffela): Scala je čisti objektno-orijentirani jezik (sa statičkom provjerom stipova). Osim toga, na temelju objektno- trait Hodor { orijentiranih mogućnosti izgrađene su i brojne funkcijske def speak = "Hodor!" mogućnosti, tako da je Scala i funkcijski jezik (ali nije čisti). } Sa funkcijskim osobinama došle su i neke osobine koje su vrlo pogodne za konkurentno programiranje. Scala je trait Stark { izvrstan jezik i za pisanje DSL-ova (Domain-Specific def speak = "Winter is coming" Language), jezika za specifičnu problemsku domenu. No, } važno je da se može programirati u Scali bez da se napusti Java, jer se Java i Scala programski kod mogu jako dobro class StarkHodor extends Hodor with Stark { upotpunjavati. override def speak = "Hodoris coming!" // we can also use super[Hodor].speak Vezano za višestruko nasljeđivanje, Scala nema potpuno } višestruko nasljeđivanje kao npr. Eiffel. U Scali, klasa može naslijediti samo jednu (direktnu) nadklasu, ali zato može naslijediti više traitova. Može izgledati da je trait nešto kao Java sučelje sa konkretnim metodama. No, trait može imati 6. JAVA 8 skoro sve što ima i klasa, npr. može imati i polja, a ne Java 1.0 se pojavila 1996. i (u pravo vrijeme!) reklamirana samo metode. Trait se, zapravo, kompajlira u Java sučelje i je kao jezik za Internet, čime je odmah stekla ogromnu pripadajuće pomoćne klase koje sadrže implementaciju metoda i atributa. slavu. Počeci Jave sežu u 1992., kada se zvala Oak i bila namijenjena za upravljanje uređajima za kabelsku televiziju Iako traitovi sliče na klase, razlikuju se u dvije važne stvari. i slične uređaje. Prvo, trait nema parametre klasa. Drugo, kod višestrukog Sami autori su rekli da je Java = C++--, tj. da je to nasljeđivanja klasa, metoda koja se poziva sa super može pojednostavljeni (u pozitivnom smislu) C++. Nije stoga se odrediti tamo gdje se poziv nalazi. Kod traitova se to, međutim, određuje metodom koja se zove linearizacija čudno da Java i C++ imaju sličnu sintaksu. Eiffel sintaksa je inspirirana jezikom ADA 83. Scala je negdje između. (linearization) klase i traitova (koji su miksani s tom klasom). Slijedi primjer programskog koda za linearizaciju. Međutim, Java nije podskup C++ jezika. Također, iako jednostavniji nego C++, Java nije baš jednostavan jezik. Eiffel i Scala su "čisti" OOPL jezici. C++ nije, jer je morao class Animal zadržati (potpunu) kompatibilnost sa jezikom C. Java je trait Furry extends Animal negdje između. trait HasLegs extends Animal trait FourLegged extends HasLegs Evo Što je nakon pojave Jave rekao Bertrand Meyer u [3]: class Cat extends Animal with Furry with "Java is one of the most innovative developments in the FourLegged software field, and there are many reasons to be excited about it. Java’s language is not the main one. As an O-O Slika 11 prikazuje na tom primjeru hijerarhiju klasa i extension of C, it has missed some of the lessons learned traitova, te linearizaciju. Nasljeđivanje se prikazuje pomoću since 1985 by the C++ community; as in the very first tradicionalne UML notacije: strelice sa bijelim, trokutastim version of C++, there is no genericity and only single vrhovima označavaju nasljeđivanje (strelice pokazuju inheritance is supported. Correcting these early oversights prema nadtipu). Strelice sa crnim vrhovima označavaju in C++ was a long and painful process, creating years of linearizaciju. Te strelice kreću se u smjeru u kojem se havoc as compilers never quite supported the same dešavaju pozivi super metoda: language, books never quite gave accurate information, trainers never quite taught the right stuff, and programmers never quite knew what to think." Slijedi primjer C++ programskog koda, koji je ekvivalentan programskom kodu koji je prethodno prikazan kod jezika Eiffel.

public class Zivotinja { public String ime; public double visina_cm; public Zivotinja(String p_ime, double p_visina_cm) { ime = p_ime; visina_cm = p_visina_cm;

} Slika 11. Hijerarhija nasljeđivanja i linearizacija klase Cat; public void prikazi_podatke() { Izvor: [5] System.out.println(" Ime: " + ime ...); Trait se može koristiti i selektivno na razini objekta. Npr., } pretpostavimo da klasa Macka ne nasljeđuje trait public double visina_inch() {...} Programer. Instanca (objekt) ipak može naslijediti taj public static void main(String[] args) { trait: Zivotinja l_dz = new Zivotinja("FIFI", 20); CASE27 31

l_dz.prikazi_podatke(); Za razliku od dosadašnjih kolekcija, koje sadrže sve svoje } elemente u memoriji, Streamse možemo shvatiti kao } "vremenske kolekcije", čiji se elementi (kojih teoretski može biti i beskonačan broj) stvaraju po potrebi. "Stare" Java Java je već odavno mogla imati nešto kao lambda izraze, kolekcije koriste eksternu (eksplicitnu) iteraciju, koju piše koji su uvedeni tek u Javu 8. Evo što kaže Bertrand Meyer programer. Streamsi imaju internu iteraciju. Streamsima se u [4]: može poslati naš kod, kao lambda izraz, za definiranje obrade elemenata, kako pokazuje slika 12. "Java has no equivalent to the notion of agent as used in this book or to similar mechanisms in other languages, Java 8 Streams programiranje je deklarativno (što, a ne such as C#’s “delegates” studied in the next appendix. kako), slično kao SQL, kako pokazuje i sljedeći programski kod: ... Java of course offers alternatives for such needs ... for most other cases the recommended Java solution is to use // 1. "klasična" obrada "klasične" inner classes (as detailed, for the example of GUI kolekcije - for petlja programming, in the next section). private static void For a long time, the Java community denied that anything checkBalance(List accList) { else was necessary ... which (delegates) were then being for (Account a : accList) proposed for Java, but only made their way into the future if (a.balance() < a.threshold) C# ... a.alert(); Almost a decade and a half later the designers finally } relented: it has been announced that Java 7 will include an agent-like mechanism known as closures." (zapravo, kako // 2. primjena lambda izraza za obradu sada znamo, to je napravljeno u Javi 8). "klasične" kolekcije private static void Na temelju onoga što čitamo i čujemo, mogli bismo checkBalance(List accList) { zaključiti da je najvažnija nova mogućnost u Javi 8 lambda accList.forEach( izraz (ili kraće, lambda). Inače, lambda izraz je (u Javi) (Account a) -> { if (a.balance() < naziv za metodu bez imena. U pravilu je ta metoda a.threshold) a.alert(); } funkcija, a ne procedura. Zato možemo reći da je lambda ); izraz anonimna funkcija, koja se može javiti kao parametar } (ili povratna vrijednost) druge funkcije (koja je, onda, funkcija višeg reda). // 3. primjena Streamsa za paralelizaciju U Javi 8 pojavile su se i tzv. default metode u Java "klasične" kolekcije sučeljima (interfaces). One, zapravo, predstavljaju private static void uvođenje višestrukog nasljeđivanja implementacije u Javu. checkBalance(List accList) { Međutim, lambda izrazi i default metode su, na neki način, accList.parallelStream().forEach( posljedica uvođenja treće važne mogućnosti u Javi 8, a to (Account a) -> { if (a.balance() < su Streamsi, koji nadograđuju dosadašnje Java kolekcije. a.threshold) a.alert(); } ); Pojava masivno višejezgrenih procesora traži bolji i lakši } način izrade paralelnih programa od dosadašnjih načina. Jedan (dobar) način je da se koristi funkcijsko Kako je već rečeno, default metode su u Javi 8 trebale programiranje, a naročito paralelne kolekcije. Java nema prvenstveno zbog uvođenja Stream API-a, iako su default paralelne kolekcije (collections), ali su zato uvedeni metode korisne i za ostale svrhe (ne samo tvorcima API-a). Streamsi, kako bi se postojeće kolekcije "zaogrnule" u Kod uvođenja Streamsa, bilo je potrebno nadograđivati (paralelne) Streamse i mogle (indirektno) paralelizirati. brojna postojeća Java sučelja, tj. dodavati im nove metode. Kako bi se olakšalo korištenje Streamsa, bilo je potrebno Međutim, kad dodajemo nove metode u sučelje, moramo uvesti i lambda izraze i default metode. Međutim, lambda mijenjati sve klase koje ga (direktno ili indirektno) izrazi i default metode mogu biti korisni i za ostale svrhe, nasljeđuju, što može značiti izmjenu milijuna redaka ne samo tvorcima API-a, već i "običnim" programerima. programskog koda. Default metode su riješile taj problem. Sučelje sada može imati i implementaciju metode, a ne samo deklaraciju, kako pokazuje sljedeći programski kod:

// 1. ako bismo postojeće sučelje Iterable // htjeli proširiti sa novom metodom forEach, // morali bismo mijenjati svaku klasu // koja (direktno ili indirektno) nasljeđuje to sučelje public interface Iterable { public Iterator iterator();

public void forEach(Consumer consumer); } Slika 12. Razlika između obične kolekcije i Stream kolekcije // 2. default metode rješavaju taj problem 32 CASE27

public interface Iterable { Vjerojatno je jedan od glavnih razloga taj što je višestruko public r iterator(); nasljeđivanje u jeziku C++ relativno loše riješeno.

Realizacija višestrukog nasljeđivanja u programskom jeziku public default void Eiffel je dokazala da se višestruko nasljeđivanje može forEach(Consumer consumer) { riješiti puno bolje. Nažalost, ta saznanja nisu primijenjena u for (T t : this) { Javi od početka. consumer.accept(t); } U zadnjih desetak godina sve se više govori (i) o tome da } bi programiranje trebalo biti multiparadigmatsko, tj. da } bismo trebali koristiti onu jezičnu paradigmu koja je najprirodnija za rješavanje određenog problema. Dakle, Java 8 sučelje sa default metodom nije tako moćno kao dobro je koristiti i funkcijsko, a ne samo imperativno Scala trait. Scala trait može imati i ne-default metode, programiranje. Osim toga, masivno višejezgreni procesori može imati stanje (atribute), može se komponirati za traže bolji i lakši način izrade paralelnih programa. Jedan vrijeme runtimea, može pristupati instanci klase koja ga (dobar) način je da se koristi funkcijsko programiranje. nasljeđuje. Ništa od toga Java 8 sučelje (sa default U Javi 8 je olakšavanje paralelnog programiranja potaknulo metodama) ne može. uvođenje Streamsa, što je "poguralo" (i) realizaciju lambda izraza i default metoda, čime je višestruko nasljeđivanje 7. ZAKLJUČAK "na mala vrata" ušlo i u Java svijet. Nadamo se da će se te nove mogućnosti pokazati kao dobre, i da će se dalje Višestruko nasljeđivanje klasa je dosta dugo vremena razvijati. neopravdano držano kao kompleksno i nepotrebno.

LITERATURA

1 Joyner, I. (1999): Objects unencapsulated – Java, Eiffel and C++??, Prentice Hall 2 Langer A., Kreft K. (2013): Lambda Expressions in Java (Tutorial), Angelika Langer Training/Consulting, www.AngelikaLanger.com (travanj 2015.) 3 Meyer, B. (1997): Object-Oriented Software Construction, Prentice Hall 4 Meyer, B. (2009): Touch of Class - Learning to Program Well with Objects and Contracts, Springer 5 Odersky, M., Spoon, L., Venners, B. (2010): Programming in Scala (2.izdanje), Artima Press 6 Sierra K, Bates B. (2005): Head First Java, O’Reilly 7 Šribar, J., Motik, B. (2010): Demistificirani C++ (3.izdanje), Element Podaci o autoru:

Zlatko Sirotić, univ.spec.inf. ISTRA TECH d.o.o., Pula e-mail: [email protected]

Autor radi više od 30 godina na informatičkim poslovima, uglavnom u poduzeću ISTRA TECH d.o.o., Pula (ISTRA TECH je novo ime poduzeća Istra informatički inženjering, osnovanog prije 25 godina). Oracle softverske alate (baza, Designer CASE, Forms 4GL, Reports, JDeveloper IDE, Java) koristi 20 godina. Objavljivao je stručne radove na kongresima / konferencijama HrOUG, CASE, KOM, "Hotelska kuća", u časopisima "Mreža", "InfoTrend" i "Ugostiteljstvo i turizam", a neka njegova programska rješenja objavljivana su na web stranicama firmi Oracle i Quest (danas dio firme Dell).

CASE27 33

XAMARIN PROCES

Miljenko Cvjetko

1. XAMARIN DANAS 2015-05

Xamarin tehnologije dobijaju sve veći i veći zamah među programerima, naročito onima koji dolaze iz .net svijeta. U poslijednjih nekoliko mjeseci došle su i potvrde iz nezavisnih izvora o performansama Xamarin aplikacija. Potražnja za Xamarin vještinama raste iz mjeseca u mjesec i trenutaćno se nalazi na 4. mjestu po Dice portalu.

iOS Harry Chenug - bivši google developer (jedan od prvih) napravio je jedan od prvih i dubljih benchmark testova za alate za razvoj mobilnih aplikacija. https://medium.com/@harrycheung/cross-platform- mobile-performance-testing-d0454f5cd4e9 https://medium.com/@harrycheung/mobile-app- performance-redux-e512be94f976 Po tim analizama Xamarin tehnologije ravnopravno se bore sa “nativnim” tehnologijama (java i objective-c), a u nekima su čak i bolje. Android

34 CASE27

2. KRONOLOGIJA XAMARIN STRATEGIJE (MonoTouch). Ti alati donose mogućnost nativnog razvoja u c# i f# programskim jezicima koristeći .net i U razdoblju od 2010.-2013. strategija Xamarin-a je bila pristup 100% nativnim API-u platforme koju se targetira. razvoj alata za višeplatformski razvoj aplikacija, sa Faza integracije (Integrate) donosi alate za publiciranje naglaskom na mobilne aplikacije. U tom razdoblju radilo aplikacija, te stavljanje aplikacija u proces beta testing-a se prvenstveno na alatima koji povezuju (toolchain) i monitoring-a. mono-.net svijet sa nativnim Android i iOS ekosistemima. Testiranje kao faza postala je jedan od bitnijih koraka u procesu i ovdje su se pojavili mnogobrojni alati i usluge U periodu od 2013.-2014. izdane su nove tehnologije za: koje su bile usmjerene na povečanju produktivnosti i smanjenju vremena izdavanja aplikacija (time to  TDD alati bazirani na NUnit framework-u koji su market), kao što su Xamarin.Forms. Ideja iza prilagođeni pojedinim platformama i omogućuju Xamarin.Forms-a je bila i ta da se tehnologije prisutne u testiranje Business Logic sloja aplikacije (Domain .net ekosustavu dovedu i u Android i iOS svijet i time Logic). U te alate pripadaju Xamarin.Android NUniti olakša .net i c# programerima ulazak u nove Xamarin.iOS NUnit projekti. tehnologije.  BDD alati koji se koriste za testiranje korinisčkog U 2014. godini Xamarin prebacuje strategiju na kvalitetu sučelja UI odn. Acceptance testing. Ovi alati su aplikacija, a i svojih proizvoda kroz neke nove namjenjeni pokrivanju što većeg broja use-case proizvode, te kroz integraciju starih proizvoda u niz alata slučajeva i eliminaciju manualnog testiranja koje su za višeplatformski razvoj. mnogi korisnici Xamarin ekosustava primjenjivali, a U tom razdoblju naglasak je na konceptima testiranja: na njih se nadograđuju servisi u oblaku za test na  TDD (Test Driven Development) sa konceptima urešajima. Unit Testing-a U ove alate spadaju:  BDD (Behaviour Driven Development) sa o konceptima User Interface odn. Acceptance Xamarin.UITest kao alat (framework) za UI Testing-a Acceptance testing na bazi Calabsh tehnologije.  Monitoring o Xamarin.Test.Cloud kao usluga u oblaku Analizom povratnih informacija od kupaca i korisnika Posljednja faza monitoring donosi alat Xamarin.Insights došlo se je do zaključka da je kvaliteta aplikacija vrlo za praćenje: bitan faktor u uspjehu i monetizaciji, te su dodatne  problema u aplikaciji (crash and issue reporting) snage i resursi prebačeni na testiranje aplikacija, alata,  korisničkih navika i interakcija (session and user te integraciju testnih alata u Xamarin ekosustav. monitoring) U jesen 2014. Xamarin team definira proces razvoja koji je napisan u potpunosti u .net-u, sa naglaskom na mobilnih višeplatformskih aplikacija. privatnost podataka i sigurnost, te omogućuje integraciju sa mnogim servisima (github, Visual Studio Online, HipChat, Campfire, Slack, jira ...). 3. XAMARIN PROCES

U Xamarin procesu definirano je 5 faza: 4. RAZVOJ (DEVELOPMENT) I 1. Design INTEGRACIJA (INTEGRATION) 2. Development 3. Integracija U samom procesu razvoja nije dolazilo do velikih 4. Test promjena, a naglasak je bio prvenstveno na podizanju 5. Monitoring kvalitete postojećih alata. Jedini novitet je Xamarin.Profiler. Faza dizajna omogućena je kroz Android i iOS Designer alate koji su integrirani u Xamarin Studio i Visual Studio. 4.1 Xamarin.Profiler Ti alati omogućuju kreiranje nativnih korisničkih sučelja u alatima poznatim .net programerima, bez potrebe za Xamarin.Profiler je programerski alat koji pruža podršku dubljim poznavanjem Apple-ovog XCode-a za iOS, odn. u procesu razvoja i implementecaije aplikacija, a alata Android Studio i Eclipse za Android razvoj. namjena mu je pružanja detaljnih informacja o Faza razvoja (development) pokrivena je već 5-6 godina resursima uređaja: memoriji i procesoru, što je vrlo bitno kroz razvojne alate Xamarin.Android (nekada Mono for zbog karakteristika Xamarin tehnologija. Android, odn. Monodroid), te Xamarin.iOS

CASE27 35

Testovi se mogu izvršavati lokalno na uređaju ili emulatoru, ili pak u Xamarin.Test.Cloud-u na 1400+ uređaja (2015-05). Calabash 5. FAZA TESTIRANJA Calabash framework je automatizirani UI Acceptance Testing sustav koji korisnicima omogućuje izvršavanje Fazi testiranja pružena je najveća pažnja i ovdje su se automatskih testova za iOS i Android. Ovaj framework desili najveći noviteti i tehnološki napredak. uvodi koncepte Behavior Driven Development-a i vrlo je usko povezan sa Xamarin.Android i Xamarin.iOS 5.1 Xamarin.UITest proizvodima, no omogućava testiranje i aplikacija Xamarin.UITest je automatizirani “UI Acceptance pisanih u objective-c i java za iOS i Android sustave. Testing framework” baziran na Calabasj tehnologiji i Automatiziranost ovog framework-a omogućuje mu omogućava korisnicima izvršavanje NUnit testova integraciju u CI (Continuous Integration) sustave. pisanih u c# jeziku u cilju validiranja funkcionalnosti Test Cloud Agent sadrži: Android i iOS aplikacija. ● Testove pisane u Gherkin-u (Feature i Step Framework je usko povezan sa Xamarin.Android i Definitions) Xamarin.iOS tehnologijama, no može biti korišten i za skupu gramatičkih pravila za specifikaciju testova aplikacije pisane u objective-c za iOS i java za Android Feature: Credit card validation. programskim jezicima. Credit card numbers must be exactly 16 Xamarin.UITest je biblioteka za automatizaciju characters. interakcije sa korisničkim sučeljem za unos podataka, akcije na sučelju (events - button tap, itd.), geste (gestures - swipes itd.). Scenario: Credit card number is too short Xamarin.UITest oslanja se na Xamarin Test Cloud Given I use the native keyboard to Agent, biblioteku koja sadrži HTTP server koji sa Calabash odn. Xamarin.UITest testovima komunicira enter "123456" into text field number preko JSON-a.i Sam agent ubacuje (injektira) se u 1 testiranu aplikaciju za iOS. And I touch the "Validate" button Then I see the text "Credit card number is too short."

Scenario: Credit card number is too long Given I try to validate a credit card number that is 17 characters long Then I should see the error message "Credit card number is too long." ● Cucumber framework koji radi parsing i izvršavanje testova preko poziva API-a Calabash framework-a koji je pisan u Ruby-u ● Calabash framework koji izvršava testove

Kod Android sustava agent se ne injektira u aplikaciju Calabash je open source projekt, no Xamarin ga je nego se instalira kao posebna serverska aplikacija koja prilagodio .net svijetu i pretvorio u proizvod. na uređaju ili emulatoru komunicira sa testiranom Koncepti testiranja aplikacijom. Testovi se izovde u pattern-u Arrange-Act-Assert Instalacija na Androidu nije potrebna, dok za iOS klasičnim za većinu testing frameworka, počevši od unit- instalra se preko NuGet paketa “Xamarin Test Cloud testinga. Agent”. 1. Arrange - priprema testa i uvjeta (podaci u korisničkom sučelju) 36 CASE27

2. Act - simulacija korisničke interakcije (button press, .StartApp(); swipe…) 3. Assert - provjera akcija koje su odrađene i stanja Sam Xamarin.UITest framework ne kompajlira i pakira aplikacije, stoga to se mora prethodno napraviti. podataka kao i korisničkog sučelja. Na višem nivou proces se opisuje kroz slijedeće korake: IApp objekt korisiti AppQuery za lociranje UI elemenata (Views).

1. razvoj aplikacije (Android ili iOS) 2. pisanje testova i izvršenje testova lokalno na app.Tap(c=>c.Text("Save")); emulatoru-simulatoru ili manjem broju uređaja app.Tap(c=>c.Marked("SaveUserDataButton") 3. upload i izvršenje testova u Xamarin.Test.Cloud-u ); na velikom broju uređaja app.Tap(c=>c.Marked("Pending").Parent().C 4. ispravljanje grešaka lass("AppointmentListCell").Index(0));

5. ponavljanje lokalni i Test.Cloud testova Priprema Testova AppResult[] results = app.Query(c=>c.All()) Aplikacije su apstrahirane kroz klase

Xamarin.UITest.iOS.iOSApp app.Query(c=>c.Class("UILabel")); Xamarin.UITest.Android.AndroidApp app.Query(c=>c.Id("txtUserName")); Ovi objekti su kreirani kroz ConfigureApp klasu koja app.Query(c=>c.Class("UILabel").Text("Hel instancira iOSApp i AndroidApp objekte i inicijalizira ih lo, World")); kroz NUnit metode dekorirane slijedećim atributima: ● SetUp results = app.Query(c=>c.Marked("ValidateButton")); priprema logičke grupe testova (recimo na jednom

ekranu) IApp metoda Repl otvoriti će REPL podsustav (Read, Preporuka - odvojeni IApp objekti Evaluate, Print, Loop) za interakciju sa aplikacijom - ● TestFixtureSetup nešto slično kao primitivan shell za operativne sustave. priprema sitnijih detalja za pojedine testove ● Test app.Repl();

izvršenje testa Primjer izdavanja komandi (tree): app.Tap(c=>c.Button("ValidateButton")) ; inicijalizacija: string path_apk1 = "/Users/nb/sample.iOS/bin/Debug/Sample.Dr oid.apk"; ConfigureApp .Android .ApkFile(path_apk1) .Debug() .WaitTimes(new HolisticWare.XamarinUITest.WaitTimes()) //.ApiKey(api_key) .StartApp();

string path_app1 = "/Users/nb/sample.iOS/bin/iPhoneSimulator /Debug/SampleXamarinFormsiOS.app"; ConfigureApp .iOS .AppBundle(path_app1) //.ApiKey("")

CASE27 37

App has been initialized to the 'app' 5.2 Xamarin.Test.Cloud variable. Exit REPL with ctrl-c or see help for Xamarin.Test.Cloud je komercijalna usluga za testiranje more commands. mobilnih aplikacija na preko 1000 uređaja (2015-04 broj je oko 1400 većinom Android uređaja).

>>> tree http://xamarin.com/test-cloud [UIWindow > UILayoutContainerView] https://www.youtube.com/watch?v=PQMBCoVIABI&feat [UINavigationTransitionView > ... > ure=youtu.be&t=57m30s UIView] Xamarin.Test.Cloud Continuous Integration [UITextView] id: Zbog svoje automatske prirode Xamarin.Test.Cloud se "CreditCardTextField" vrlo lako integrira u procese Continous Integration. [_UITextContainerView] Xamarn.Test.Cloud se po svojim karakteristikama [UIButton] id: "ValidateButton" razlikuje od ostalih rješenja, prvenstveno paralelnog [UIButtonLabel] text: "Validate testiranja aplikacija, na velikom broju uređaja, što je Credit Card" prednost, jer se rezultati testiranja dobijaju daleko brže. [UILabel] id: "ErrorrMessagesTestField"

[UINavigationBar] id: "Credit Card Validation" [_UINavigationBarBackground] [_UIBackdropView > _UIBackdropEffectView]

[UIImageView]

[UINavigationItemView] [UILabel] text: "Credit Card Validation" >>>

38 CASE27

Screenshots

Error reporting

Device DrillDown

CASE27 39

6. MONITORING - XAMARIN.INSIGHTS 7. ZAKLJUČAK

Xamarin.Insights je alat koji omogućava monitoring Xamarn je kroy novi proces donio nove alate za aplikacije, te mnogobrojna izvješća o stanju aplikacije korisnike Xamarin tehnologije, no i za ostale koji (greškama, performansama - memorija i procesor). razvijaju nativne i hibridne mobilne aplikacije. Proizvod prati i korisnike, njihove demografske podatke Sam proces je samo prijedlog za “best practice” prema (geolokaciju i sl), njihovu interakciju sa aplikacijom do dosadašnjim iskustvima u razvoju aplikacija, koji se vrlo sitnih detalja ili kumulativno. temelji na “feedback-u” samih korisnika alata i Uz korisnike dostupna su i izvješća po geografskim aplikacija. lokacijama.

40 CASE27

Podaci o autoru:

Miljenko Cvjetko [email protected] [email protected] http://holisticware.net http://xamarin.com

HolisticWare je startup firma koja se bavi razvojem mobilnih aplikacija sa .net tehnologijom. U 2011. godini dali smo naglasak na razvoj sa Mono-om (open source portom) .net tehnologije na ne-Windows platforme, pa tako i iOS i Android. CASE27 41

AUTOMATIZACIJA DOMA KORIŠTENJEM RASPBERRY PI-A

HOME AUTOMATION USING RASPBERRY PI

Dragutin Kermek, Matija Novak

SAŽETAK:

Automatizacija doma jedan je od dijelova Internet Stvari (eng. Internet Of Things). Pojavom malih uređaja poput Raspberry Pi-a "Sam Svoj Majstor" automatizacija doma sve je popularnija. Korištenjem Raspberry Pi uređaja, prototipne pločice i nekoliko senzora (npr. senzor temperature, vlage, vlažnosti zemlje, senzor pokreta) moguće je na različite načine automatizirati dom. U ovom radu iskorištena je, uz same senzore, infracrvena kamera za snimanje po noći i napravljen kućni video nadzor. Iako sam uređaj i senzori nisu skupi kako bi još više uštedjeli primijenili smo tako zvani „zeleni pristup“. U svakom domu nalaze se uređaji poput televizora, radio prijemnika i sl. čiji se popravak ne isplati. No sami uređaji sadrže dijelove koje je moguće na inovativan način iskoristiti u automatizaciji doma. U ovom radu iskorišten je infracrveni senzor i tv daljinski upravljač kako bi se olakšalo upravljanje automatiziranim kućnim nadzorom. Kao programski jezik za osnovno testiranje i podešavanje rada senzora korišten je Python, dok je konačno rješenje razvijeno u Javi.

ABSTRACT:

Home automation is one part of Internet of Things. With the appearance of small devices such as raspberry Pi "Do It Yourself" home automation is becoming increasingly popular. Using the Raspberry Pi device, breadcrumb board and several sensors (e.g. Temperature sensor, moisture, humidity Earth, motion sensor) home automation can be done in different ways. In this paper, an infrared night vision camera is used with the sensors and home video surveillance was made. Although the device itself and the sensors are not expensive to further save some money so called "green approach" was used. In every home there are devices such as TVs, radios and so on whose repair is not profitable. But, the devices contain parts that can be sued in an innovative way when doing home automation. In this paper the infrared sensor and TV remote controller were used to facilitate the management of automated home surveillance. As for programing languages Python was used for basic testing and sensor configuration, and the final solution was developed in Java.

1. UVOD uređaji poput televizora, radio prijemnika i sl. čiji se popravak ne isplati. No sami uređaji sadrže komponente Automatizacija doma obično je značila uključivanje i dijelove koje je moguće na inovativan način iskoristiti u profesionalca i nabava skupocjene opreme. Naravno automatizaciji doma. takva automatizacija je još uvijek prisutna u slučajevima U ovom radu prezentiran je primjer izrade vlastitog većih i složenijih oblika automatizacije doma. Danas noćnog kućnog video nadzora. Također prezentirane su postoje i druge mogućnosti, u kojima pojedinci mogu tehnologije i problemi koji su nastali u toku rada. Kao automatizirati svoj dom primjenom vlastitih vještina i programski jezik za osnovno testiranje i podešavanje rješenja. Pojavom malih uređaja poput Raspberry Pi-a rada senzora korišten je Python, dok je konačno (dalje u tekstu samo Raspberry), Banana Pi, Arduino i rješenje razvijeno u Javi. Ostatak rada strukturiran je na sl. „Sam svoj majstor“ automatizacija sve je popularnija. sljedeći način. Poglavlje 2 govori općenito o Raspberry i slični uređaji ne samo da su potaknuli automatizaciji doma i samom Raspberry Pi uređaju. samostalnu automatizaciju doma već su omogućili vrlo Poglavlje 3. opisuje prve korake u radu sa Raspberry jeftinu automatizaciju. Za samo 30 dolara moguće je Pi-om i GPIO sučeljem Poglavlje 4. daje složeni primjer nabavit Raspberry uređaj i krenuti s vlastitim razvojem. kućnog video nadzora korištenjem zelenog pristupa. U Razni senzori, elektronički elementi i komponente mogu Poglavlju 6. dan je zaključak. se nabaviti preko online trgovina (npr. eBay, Amazon, i sl.) od jedan do dva dolara pa do nekoliko desetaka dolara. Također online zajednica korisnika Raspberry 2. AUTOMATIZACIJA DOMA I uređaja prezentira na Web-u i u obliku knjiga vlastita RASPBERRY PI rješenja uz detaljne upute i sheme za izgradnju vlastitih elektroničkih sklopova vrlo velike širine primjene. Internet Stvari (eng. Internet of Things) [1] govore da se Naravno, uz njih su priloženi i programski kodovi svi uređaju međusobno povezuju preko interneta od potrebni za upravljanje tim sklopovima. Vlastita naravno računala, tableta, mobitela i sl. pa sve do imaginacija i sposobnost kombiniranja postojećih mikrovalne, kuhala, frižidera i sl. U tom kontekstu rješenja otvaraju neograničene mogućnosti. Ukoliko se korištenje različitih senzora na uređajima daje posebnu želi ići u smjeru uštede novca moguće je primijeniti dimenziju integraciji i interoperabilnosti. Automatizacija takozvani „zeleni pristup“. „Zeleni pristup“ govori nam da doma jedan je od dijelova Internet Stvari. Kako bi iskoristimo postojeće uređaje, komponente i dijelove koji kontrolirati dom možemo uzeti stolno računalo, no ono se nalaze u našem domu. U svakom domu nalaze se je prilično veliki potrošač električne energije stoga je 42 CASE27 puno pogodniji manji uređaji koji maje troše. Jedan da ima široku zajednicu i gotovo sav programski kod je primjer dosadašnje prakse smanjivanja potrošnje je otvoren (eng. open source). Raspberry također električne energije u vlastitom domu ide u smjeru podržava razne programske jezike kao što su Python i zamjene stolnog računala s medijskim centrom, NAS- Java. U nastavku opisat će se osnovni koraci i počeci u om (eng. Network-attached storage) i sl. Time se radu s Raspberry koristeći Python i Java programske omogućava 24/7 pristup do multimedijskih sadržaja i jezike. datoteka uz malu potrošnju električne energije. Stoga nije čudno da kao centralnu jedinicu za automatizaciju doma odabran Raspberry kao malen potrošač. Ideja da se iskoristi Raspberry Pi za automatizaciju doma nije nova. U članku “Raspberry Pi based interactive home automation system through E-mail” [2] autor daje primjer korištenja Raspberry-a u svrhu automatizacije doma. U članku „A comparison of the popular home automation technologies“ [3] autori su usporedili razne tehnologije za automatizaciju doma. No te tehnologije su previše napredne i složene za početnika. Pod početnikom smatramo nekoga tko ima barem malo Slika 1 Raspberry Pi znanja o programiranju, radu sa elektroničkim sklopovima i računalima, ali dosad nije radio sa malim 3. PRVI KORACI uređajima poput Raspberry-a. Stoga u ovom radu prikazane su tehnologije koje su dostupne početnicima i Kako bi se započelo korištenje Raspberry-a potrebno je koje se mogu lako shvatiti. Prije nego se opišu same najprije instalirati OS i spojiti se na njega na neki način. tehnologije opisat će se odabrani uređaj. Upute kako napraviti instalaciju te kako se spojiti mogu * Raspberry Pi je računalo na jednoj ploči veličine se pronaći u dokumentaciji na službenim stranicama. Najjednostavnija varijanta je korištenjem instalacijskog kreditne kartice, čiji je vanjski spremnik SD kartica † (standardna ili Micro), koje se može nabaviti za 30 managera NOOBS (eng. new out of the box software). dolara. Malen je potrošač (približno 1.5W, a ovisi o Za spajanje u ovom radu koristio se SSH pristup za rad priključenim komponentama poput kamere, senzora i sl. na uređaju i FTP za prebacivanje datoteka na sam [4]) no ima velike mogućnosti. Slika 1 prikazuje sam uređaj. Napredniji način je korištenje integrirane uređaj Model B+ koji je korišten u ovom radu, više o razvojne okoline (npr. NetBeans) i njenih mogućnosti raznim modelima, ali i puno drugih mogućnosti moguće udaljenog upravljana Raspberry-em. Također korištena je pronaći na službenoj stranici [5]. Model B+ ima: 4 je USB wireless adapter kako bi se uređaj mogao lakše USB priključka, LAN priključak, 40 GPIO pinova, HDMI koristiti bez fizičkog povezivanja na lokalnu mrežu. Sam priključak, kombinirani 3.5mm audio i kompozitni video, Raspberry ima i grafičko sučelje ukoliko se HDMI sučelje za kameru i sučelje za display, utor za Micro priključkom spoji na monitor može se doći do grafičkog SD karticu, 512 MB RAM-a i 1GHz procesor. Zadnja sučelja i raditi preko njega. verzija je Raspberry Pi 2 Model B koji ima brži procesor 3.1 GPIO i više RAM-a. Jako koristan priključak je GPIO (eng. General pourpose input output interaface) koji Nakon uspješne instalacije i spajanja može se krenuti s omogućuje komunikaciju sa bilo kakvim vanjskim radom. Kako je ideja ovog rada da se napravi kućno modulima, senzorima i njihovo kontroliranje. video nadzor korištenjem „zelenog pristupa“ potrebno Sam uređaj je otvoren za razne operacijske sustave se upoznati sa GPIO sučeljem. Na slici 2 prikazan je (OS) no na službenim stranicama pripremljene su razne raspored pinova preuzet sa službene stranice, no Linux verzije. Dobra stvar kod samog Raspberry-a jest moguće je pronaći na internetu razne sheme koje

Slika 2 Raspored pinova GPIO sučelja za Raspberry Pi Model B+*

* https://www.raspberrypi.org/documentation/ † https://www.raspberrypi.org/documentation/installation/noobs.md CASE27 43 možda na prikladniji način (bojama) prikazuju raspored pokretanje programa “pin4stop.py“ pokrećemo pinova. ovako: Kako bi se koristili pinovi oni su preko paralelnog kabla i sudo python pin4stop.py proširenja GPIO ploče spojeni na samu prototipnu pločicu. Na slici 3 prikazan je jednostavan primjer 3.3 Java SE Embedded & Java ME Embedded prototipne pločice koja je napravljena prema [6]. U tom primjeru koristi se jedna dioda, dva otpornika, jedno Programski jezik Java korišten je za krajnji projekt u tipkalo i četiri preskočna kabla. Ideja je da se na pritisak ovom radu. Instalacija Jave nešto je složenija od tipke dioda pali i gasi. Sam primjer napravljen je u Javi. Pythona, također sam rad je nešto složeniji. Iako je No prije nego se krene sa javom dobro je krenuti sa moguće direktno pisati Java program na uređaju ipak je jednostavnijim primjerima i Python. lakše pisati Java program na računalu u razvojnoj okolini i zatim prebaciti na Raspberry. Mogu se koristiti dvije verzije Jave na Raspberry-u. Java ima svoju pripremljenu verziju za male uređaje Java ME Embedded‡ (kasnije u tekstu samo Java ME). No da bi se programiralo u Java ME potrebno je instalirati Java ME SDK§ na računalo. Za instalaciju Java ME potrebno je samo prebaciti na uređaj i pokrenuti komandu: sudo unzip oracle-jmee-8-1-rr- raspberrypi-linux-bin.zip -d /usr/lib/jvm/javame8 Nakon što se instalira SDK i može se krenuti programiranjem. Kao razvojno okruženje korišten je NetBeans 8.0.2. Za kreiranje projekta jednostavno se Slika 3 Primjer korištenja prototipne pločice i GPIO ide na kreiranje novog Java ME projekta (Java ME SDK sučelja mora biti instaliran). Primjer jednostavnog Java ME programa sastoji se od dvije klase. Prva klasa proširuje 3.2 Python klasu MIDLet i izgleda na primjer ovako: public class LedBlik extends MIDlet { Iako je krajnji projekt napravljen u Javi sva testiranja private LedBlinkTest pinTest; prvo su rađena u Pythonu. Python je odabran za @Override testiranja jer je on preinstaliran programski jezik na protected void startApp() throws Raspberry-u i jednostavno se instaliraju dodatni moduli MIDletStateChangeException { potrebni za rad. Također direktno se može raditi sa System.out.println("Pokretanje GPIO sučeljem bez nekakvih posebnih sigurnosnih programa"); mehanizama. Osim toga može se direktno na samom pinTest = new LedBlinkTest(); uređaju korištenjem omiljenog editora direktno pisati try { pinTest.start(); } catch python programi. Za instalaciju potrebno je pokrenuti (IOException ex) sljedeću komadnu: { … notifyDestroyed(); } sudo apt-get install python-dev python3- } dev @Override python-rpi.gpio python3-rpi.gpio protected void destroyApp(boolean unconditional) Nakon toga može se započeti s radom. Programski kod throws MIDletStateChangeException { za recimo upravljanje pinom broj 4 izgleda ovako: if (pinTest != null) { import RPi.GPIO as GPIO try { pinTest.close(); } catch GPIO.setwarnings(False) (Exception ex) {…} GPIO.setmode(GPIO.BCM) } } } GPIO.setup(4,GPIO.OUT) Druga klasa implementira sučelje PinListener i GPIO.output(4,False) AutoClosable koja služi za upravljanje događajima na Iz prve linije primjera može se vidjeti da je potrebno nekom pinu i izgleda ovako: učitati GPIO biblioteku. Javljanje grešaka može se public class LedBlinkTest implements uključiti ili isključiti no nije obavezno. Zatim je postavljen PinListener, AutoCloseable { način rada na koji će se pozivati pinovi. Način rada public void start() throws GPIO.BOARD omogućuje da se pinovi referenciraju IOException { prema fizičkom redoslijedu kako se pojavljuju na GPIOPinConfig pinConfig = new samoj pločici, a GPIO.BCM znači da se pinovi GPIOPinConfig(DeviceConfig.DEFAULT, referenciraju prema logičkom nazivlju. Tako je GPIO4 logički naziv za fizički pin 7. Detaljnije se 18,GPIOPinConfig.DIR_OUTPUT_ONLY, mogu vidjeti veze na slici 2. Nakon toga postavlja se dali pin radi kao ulazni ili izlazni pin i na kraju se GPIOPinConfig.MODE_OUTPUT_PUSH_PULL, postavlja vrijednost na true/false. Postavljanje ove zadnje vrijednosti znači dali ima ili nema napona na GPIOPinConfig.TRIGGER_NONE, false); samom pinu. I to je u principu sve što je potrebno GPIOPin pin = null; da bi se kontrolirala većina pinova. Daljnji rad ovisi o idejama programera i što želi napraviti.

Samo pokretanje programa potrebno je napraviti ‡ http://www.oracle.com/technetwork/java/embedded/javame/embed- kao root korisnik jer samo on ima pravo pisanja po me/downloads/java-embedded-java-me-download-2162242.html datotekama vezane uz GPIO sučelje. Tako § http://www.oracle.com/technetwork/java/embedded/javame/javame- sdk/downloads/index.html 44 CASE27

pin = (GPIOPin) GPIOPinConfig.TRIGGER_NONE, false); DeviceManager.open( pinConfig); Nakon toga inicijalizira objekt GPIOPin klase preko System.out.println("Blinking kojeg se radi sva komunikacija. Klasa DeviceManager LED"); služi da bi se otvorio željeni pin. Sa komandama for (int x = 0; x < 10; x++) { setValue može se postaviti vrijednost pina na true/false pin.setValue(x % 2 == 0); koji kao i u python programu znači dali ima ili nema try { Thread.sleep(1000); napona na pinu. Na kraju obavezno treba zatvoriti pin. } catch (InterruptedException Taj dio koda prikazan je ovdje: ex) {…} GPIOPin pin = null; } pin = (GPIOPin) pin.close(); DeviceManager.open(GPIOPin.class, } pinConfig); //GPIOPin pin = (GPIOPin) @Override DeviceManager.open(18); public void valueChanged(PinEvent System.out.println("Blinking LED"); event) { … } pin.setValue(true); Thread.sleep(500); @Override pin.setValue(false); public void close() throws Exception pin.close(); {…} Ukoliko se ne zatvori pin on ostaje otvoren i onda } prilikom sljedećeg pokretanja se dobiva error, te je S druge strane Java ima Java SE Embedded verziju potrebno pin ručno zatvoriti. U nastavku rada koristi se koju je moguće koristiti. Prednosti ove verzije jest da isključivo Java SE Embedded. Za pokretanje Java SE ima više mogućnosti na primjer klasa Runtime nije Embedded potrebno je uključiti sljedeće opcije podržana u Java ME. No nedostatak je da je složeniji virtualnog stroja: način rada. Dok Java ME u pravilu ne zahtjeva posebnu - konfiguraciju sigurnosne politike da bi se radilo sa GPIO Djdk.dio.registry=/home/pi/dev/config/dio sučeljem, Java SE to treba. Također Java ME ima .properties-raspberrypi direktno virtualno okruženje koje je moguće koristiti za - testiranje programa prije prebacivanja na uređaj, dok Djava.security.policy=/home/pi/JavaProjec Java SE to nema. Prema iskustvu savjet je da se koristi ts/Pi/gpio.policy Java ME, a da se prebaci na Java SE tek kada su -Djava.library.path=/home/pi/dev/build/so potrebne neke klase koje Java ME ne podržava. Također Java ME se preporučuje za početnike u radu Prva opcija služi da se uključi konfiguracija potrebna za sa malim uređajima. rad sa GPIO sučeljem, koja se dobiva kloniranjem DIO projekta. Druga opcija uključuje sigurnosnu politiku koja Instalacija Java SE verzije vrši se sljedećom se definirala za projekt. Treća daje putanju do komandom: kompiliranog c koda koji omogućuje komunikaciju sa sudo tar zxvf jdk-8u6-linux-arm-vfp- GPIO sučeljem na najnižoj razini. Kao i kod Python hflt.tar.gz -C /usr/lib/jvm programa i Java program mora se pokretati kao root Kako bi Java SE mogla koristiti GPIO sučelje potrebno korisnik. U sljedećem poglavlju opisat će se kako je je koristiti DIO (eng. device input output) biblioteku. Da izgrađen kućni video nadzor primjenom „zelenog bi se skinuo dio.jar potrebno izvršiti sljedeću komandu: pristupa“. hg clone http://hg.openjdk.java.net/dio/dev 4. KUĆNI (NOĆNI) VIDEO NADZOR i preuzeti dio.jar iz /dev/build/jar direktorija. Nakon toga može se kreirati klasična Java aplikacija u koju se Kao pokazni primjer odlučeno je da će se napraviti uključi dio.jar biblioteka. No da bi Java SE mogla kućni video nadzor koristeći NoIR (eng. no infra red) pristupiti GPIO sučelju potrebno je još podesiti kameru. NoIR kamera omogućuje snimanje po noći, a sigurnosnu politiku. Sigurnosna politika definira se u Raspberry ima predviđen poseban priključak za novoj datoteci na primjer „gpio.policy“ sa sadržajem: spajanje kamere. Na slici 4 prikazana je kamera. Da bi grant { se olakšalo upravljanje kamerom ideja je da se primjeni permission infracrveni daljinski upravljač. No kako bi se uštedjelo jdk.dio.gpio.GPIOPinPermission "*:*"; uzet je daljinski upravljač sa starog Sony televizora čiji permission jdk.dio.DeviceMgmtPermission popravak više nije bio isplativ. "*:*","open"; }; Nakon toga može se kreirati program u koji se importiraju sljedeće klase: import jdk.dio.gpio.GPIOPin; import jdk.dio.gpio.GPIOPinConfig; Nakon toga može se kreirati instanca GPIOPinConfig klase koja služi za definiranje pina koji se koristi. GPIOPinConfig pinConfig = new GPIOPinConfig( DeviceConfig.DEFAULT,18, GPIOPinConfig.DIR_OUTPUT_ONLY, Slika 4 NoIR kamera za noćno snimanje GPIOPinConfig.MODE_OUTPUT_PUSH_PULL, CASE27 45

4.1 Zeleni pristup 4.2 Infracrveni daljinski upravljač

Danas postoji brdo elektroničkog otpada. Svatko ima u Da bi se mogao koristiti infracrveni daljinski upravljač svome domu nekakvi uređaj koji se pokvario i čiji korišten je LIRC projekt [7]. LIRC se može preuzeti popravak nije isplativ. Umjesto da se takav uređaj baci izvršavanjem sljedeće komande: on se može jako dobro iskoristiti za kućnu sudo apt-get install lirc automatizaciju. Dijelovi unutar uređaja: kondenzatori, otpornici, transformatori i sl. su i dalje funkcionalni, nakon toga potrebno je programirati tipke na daljinskom barem većina njih. Tako su ovom primjeru izvađeni upravljaču pokretanjem sljedećih komandi i praćenjem dijelovi iz starog Sony televizora (prikazani na slici 5), a uputa koje se jave na ekranu: senzor za infracrveno upravljanje je iskorišten kako bi sudo kill $(pidof lircd) se upravljalo Raspberry uređajem i kamerom. irrecord -d /dev/lirc0 ~/lircd2.conf H1 ploča na vrhu slike 5 sadrži spomenuti senzor. Taj sudo mv lircd2.conf /etc/lirc/lircd.conf senzor prikazan je uvećano na slici 6. A na slici 7 sudo /etc/init.d/lirc restart prikazano je finalno rješenje spojeno na Raspberry. Sa slike 7 vidljivo je da je H1 ploča uzeta sa televizora Nakon što je upravljač konfiguriran može se krenuti s spojena na prototipnu pločicu i preko nje spojena na programiranjem. Za rad korištena je Java LIRC Raspberry uređaj. Klikom na tipku na daljinskom biblioteka**. Da bi se ona mogla koristiti potrebno je upravljaču aktivira se senzor koji šalje signal na pin na kreirati datoteku npr. „command.lirc“ koja opisuje što se Raspberry uređaju. Zatim se taj signal obrađuje i hvata dešava kad se pritisne koja tipka: u aplikaciji koja onda pali/gasi kameru. U sljedećem begin poglavlju opisano je detaljnije kako je riješen dio za rad button = KEY_MUTE sa daljinskim upravljačem. config = mute repeat = 1 End U danom primjeru kada se pritisne tipaka “Mute” daljanski upravljač šalje signal „KEY_MUTE“ kojeg hvata IR senzor, a Java LIRC biblioteka na temelju opisa u datoteci šalje u aplikaciju opis „mute“. Opcija „repeat“ služi da se osigura da se u aplikaciju pošalje samo jedan signal da je tipka pritisnuta. Kada se pritisne tipka signal se generira više puta. Da bi se uhvatio signal u Java aplikaciji kositi se sljedeći kod koji koristi SimpleLIRCClient klasu: private static SimpleLIRCClient client; client = new SimpleLIRCClient("/home/pi/JavaPro jects/Pi/command.lirc"); Slika 5 Izvađeni dijelovi pokvarenog Sony televizora client.addIRActionListener(new ButtonListener());

Klijent treba novu klasu koja služi kao slušač pritiska tipke ButtonListener i ona izgleda ovako: private static class ButtonListener implements IRActionListener { … public void action(String command) { System.out.println(command); //npr. mute Slika 6 Infracrveni senzor za daljinsko upravljanje televizorom Date now = new Date(); long interval = now.getTime()- last_time.getTime(); last_time=now; System.out.println(interval); if(interval<(long)3000) { return; } … GPIO dio kako bi zasvijetlila LED dioda kad se pritisne tipka … if(command.equalsIgnoreCase(„mute")) { … } }}

Obrada koja se vrši nakon pritiska tipke može biti bilo koja funkcionalnost. U ovom slučaju ubačen je kod za paljenje i gašenje LED diode kako bi se pokazalo da je Slika 7 Kompletno rješenje upravljana Raspberry Pi-om korištenjem „zelenog pristupa“ ** http://jlirc.sourceforge.net/ 46 CASE27 tipka pritisnuta. Za taj dio koristi se kod koji se prikazan svijetla pale se IR diode i uključuje zelena dioda kao u prošlom poglavlju. U prethodnom kodu ima mala indikator rada IR dioda. Ukoliko ima svijetla IR diode se specifičnost sa datumom koja osigurava da se tipka gase kao i zelena dioda. Uključena crvena dioda može pritisnuti svake tri sekunde. To je potrebno jer pokazuje da je temperatura previše porasla i opet se IR startanje kamere traje jednu do dvije sekunde pa kako diode gase. IR diode su spojene preko releja na ne bi došlo do preklapanja i pada sustava. U idućem prototipnu pločicu čime se omogućava da se njima poglavlju prikazat će se dio kako je pokrenuta sama upravlja preko GPIO sučelja i da se koristi vanjsko kamera. napajanje električnom energijom bez Raspberry uređaja. Na taj način rasterećuje se Raspberry uređaj. 4.3 Upravljanje kamerom Senzor temperature ima potenciometar kojim se može regulirati na kojoj temperaturi se IR diode gase. Za samo pokretanje i zaustavljanje kamere koriste se klasične Linux komande. Za startanje koristi se sljedeće komande preuzete sa bloga [8]: raspivid -o - -t 9999999 -w 800 -h 600 -- hflip --vflip | cvlc –www stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:808 0}' :demux=h264 raspivid -o - -t 9999999 -w 800 -h 600 -- hflip --vflip | tee test_video.h264 | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:808 0}' :demux=h264 Prva komanda samo starta tok podataka na Internet i pokreće snimanje, dok druga komanda radi i spremanje u datoteku. Pristup do snimke moguć je preko URL Slika 8 Kontroliranje infracrvenih senzora preko GPIO adrese koja pokreće HTML dokument u kojem su sučelja i senzora svijetlosti i temperature potrebni parametri za gledanje snimke u realnom vremenu. Za samo pokretanje korišten je sljedeći Java 5. ZAKLJUČAK kod: private void executeCommand(String cmd) { U ovom radu prikazan je primjer i tehnologije za izradu Runtime r = Runtime.getRuntime(); vlastite automatizacije doma korištenjem Raspberry Pi Process p = null; uređaja. Time prikazuje da automatizacija doma ne p = r.exec(cmd); mora nužno značiti veliku investiciju. Primjenom InputStream stdout = „zelenog pristupa“ sam iznos automatizacije može se p.getErrorStream(); još više umanjiti. /* Scanner scanner = new U prikazanom primjeru napravljen je noćni kućni video Scanner(stdout); nadzor koji se može upravljati putem infracrvenog while (scanner.hasNextLine()) { daljinskog upravljača preuzetog sa starog Sony System.out.println(scanner.nextLine()+ televizora i pratiti putem Web preglednika. Same diode "\n"); za infracrveno svijetlo kontrolirane su preko senzora }*/ svijetlosti i time se štedi na potrošnji električne energije } kada ima dovoljno vanjskog svijetla i ujedno se Ovaj kod ne služi da bi se izvršila neka Linux komanda. produljuje vijek IR dioda. Moguće proširenje prikazanog Dio sa ispisom greški je komentiran jer u toku rada sustava jest da se omogući upravljanje video nadzorom konstanto se generiraju neke greške koje u stvarnosti preko Web-a. nisu greške već samo posljedica programa koji se Automatizacija doma jest jedan dio Internet stvari i time koristi za snimanje. Kako se aplikacija ne bi zaustavila pridonosi povezivanju svih uređaja preko interneta. na tom dijelu ovaj dio se koristiti samo za test, a u Realizacija većih projekata automatizacije doma (npr. produkciji je isključen. upravljanje garažnim vratima, klima uređajem, zvučnom U toku rada kamere dvije infracrvene (IR) diode koje su sirenom, uređajima za navodnjavanje itd.) zahtjeva montirane na kameru se konstantno zagrijavaju kako bi uključivanje složenijih sklopova (npr. modul sa većim se to ispravilo ideja je da se stave hladnjaci. No po brojem releja, motora, i sl.), senzora (npr. senzora danu ionako ne trebaju IR diode zbog toga je odlučeno kontakta, detekcije dima, detekcije pokreta, i sl.) i da će se uz pomoć senzora svijetlosti kontrolirati te IR korištenje izmjenične električne struje. Zbog toga diode. IR diode su zato odvojene od kamere i spojene realizacija takvih projekata traži dodatna znanja i preko GPIO sučelja. U sljedećem poglavlju će se opisati vještine kako bi se izbjegle ozbiljne nezgode. taj dio. Primjenom u projektima različite složenosti automatizacije doma uređaji poput Raspberry-a sve više 4.4 Uključivanje senzora dobivaju na značaju. Što dalje znači da programiranje Senzori koji su korištenje za upravljanje IR diodama, za male platforme postaje sve više značajno. spojene preko releja, su senzor temperature i senzor Programski jezici poput Jave već su to prepoznali i svijetlosti. Sustav je prikazan na slici 8. Senzor imaju svoju ediciju za male uređaje poput Java ME. svijetlosti reagira dali ima ili nema svijetla. Ukoliko nema

CASE27 47

Literatura

1 J. Gubbi, R. Buyya, S. Marusic, and M. Palaniswami, “Internet of Things (IoT): A vision, architectural elements, and future directions,” Futur. Gener. Comput. Syst., vol. 29, no. 7, pp. 1645–1660, Sep. 2013. 2 S. Jain, A. Vaibhav, and L. Goyal, “Raspberry Pi based interactive home automation system through E-mail,” in Optimization, Reliabilty, and Information Technology (ICROIT), 2014 International Conference on, 2014, pp. 277– 280. 3 C. Withanage, R. Ashok, C. Yuen, and K. Otto, “A comparison of the popular home automation technologies,” in Innovative Smart Grid Technologies - Asia (ISGT Asia), 2014 IEEE, 2014, pp. 600–605. 4 “How Much Less Power does the Raspberry Pi B+ use than the old model B?,” 2014. [Online]. Available: http://raspi.tv/2014/how-much-less-power-does-the-raspberry-pi-b-use-than-the-old-model-b. [Accessed: 21-May- 2015]. 5 Raspberry Pi Foundation, “Raspberry Pi,” 2014. [Online]. Available: https://www.raspberrypi.org/. [Accessed: 17-Apr- 2015]. 6 T. McGinn and E. A. M. Cruz, “Working with GPIO by Using Java ME Embedded and a Raspberry Pi,” 2014. [Online]. Available: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/RaspberryPi_GPIO/RaspberryPi_GPIO.html. [Accessed: 17-May-2015]. 7 A. Leamas, Christoph Bartelmus, Heinrich Langos, Karsten Scheibler, Jim Paris, and Milan Pikula, “LIRC - Linux Infrared Remote Control,” 2015. [Online]. Available: http://www.lirc.org/. [Accessed: 11-Mar-2015]. 8 M. Horne, “Stream the #RaspberryPi camera module through your browser,” 2013. [Online]. Available: http://www.recantha.co.uk/blog/?p=4165. [Accessed: 17-May-2015].

Podaci o autorima: dr.sc. Dragutin Kermek Redoviti profesor Fakultet Organizacije i Informatike, Pavlinska 2, 42000 Varaždin. E-Mail: [email protected]

Iskustvo i važniji projekti.: Dragutin Kermek doktorirao je 1999. godine u društvenom području, grana informacijske znanosti, na Fakultetu organizacije i informatike Sveučilišta u Zagrebu. Trenutno radi kao redoviti profesor na istom fakultetu. Nositelj je kolegija: Web dizajn i programiranje, Napredne Web tehnologije i servisi, Sustavi za elektroničko učenje, Uzorci dizajna. Objavio je više od 60 znanstvenih i stručnih članaka u različitim međunarodnim i domaćim časopisima, knjigama i konferencijama. Sudjelovao je na više znanstvenih projekata. Bio je voditelj više stručnih projekata dizajna, programiranja i uvođenja sustava za upravljanje sadržajem (CMS), za e-učenje (LMS), informacijskih sustava za evidenciju, planiranje i praćenje nastavnih programa (NPP) i sl. Član je predsjedništva vijeća korisnika CARNet-a od 2005. godine u 4 uzastopna mandata. Član je uređivačkog odbora časopisa Journal of Information and Organization Sciences (JIOS) od 2006. godine. Bio je član programskog odbora konferencije CARNet User Conference (CUC) od 2007. do 2013. godine. mr.inf. Matija Novak Asistent Fakultet Organizacije i Informatike, Pavlinska 2, 42000 Varaždin. E-Mail: [email protected]

Iskustvo i važniji projekti.: Matija Novak 2010. stekao je akademski naziv „Magistar Informatike“ sa visokom pohvalom na Fakultetu Organizacije i Informatike. U studenom 2013. upisuje doktorski studij na Fakultetu Organizacije i Informatike i radi kao asistent na istom fakultetu na predmetima: Web dizajn i programiranje, Napredne web tehnologije i servisi i Razvoj web aplikacija. Autor je nekoliko stručnih i znanstvenih članaka iz područja skladišta podatka na temu Web ETL alati. Po završetku diplomskog studija radio je dvije godine u NTH Grupi u Varaždinu kao Voditelj razvoja za produkte i poslovni savjetnik za mobilne aplikacije za švicarsko i njemačko tržište. Nakon toga, radio je jednu godinu u tvrtki MCS d.o.o u Strahonincu kao arhitekt programskih sustava za mobilne i web platforme. U toku rada u navedene dvije tvrtke stekao je iskustvo, znanje i razumijevanje u razvoju Web i mobilnih aplikacija te samom procesu potrebnom za njihov razvoj.

48 CASE27

CASE27 49

KORIŠTENJE RETROFIT RAZVOJNOG OKVIRA PRI IMPLEMENTACIJI ANDROID REST KLIJENTA

USING RETROFIT FRAMEWORK IN IMPLEMENTATION OF ANDROID REST CLIENT

David Ante Macan, Zlatko Stapić, Milan Pavlović

SAŽETAK

Velik broj današnjih mobilnih aplikacija često ima potrebu za dohvaćanjem ili spremanjem podataka pohranjenih na udaljenim mrežnim lokacijama. U većini slučajeva aplikacija zapravo komunicira s web servisom koji prima zahtjeve i vraća odgovore. Jedna od danas popularnih softverskih arhitektura za implementaciju web servisa je REST (eng. Representational State Transfer). Implementacija nativnih REST klijentskih aplikacija u Android operacijskom sustavu obično oduzima dosta vremena, a u slučaju da nije korišten nikakav uzorak dizajna vrijeme potrebno za naknadnu nadogradnju proporcionalno raste sa složenošću aplikacije. Industrija je prepoznala Retrofit, jedan od razvojnih okvira koji olakšavaju i ubrzavaju implementaciju spomenutih klijenata, kako bi razvojni inženjeri mogli više vremena posvetiti drugim važnijim aktivnostima tijekom procesa razvoja. Kako bi smanjio količinu potrebnog koda i dodatno ubrzao razvoj, Retrofit koristi Java anotacije. U ovom radu prikazat ćemo prednosti korištenja Retrofit razvojnog okvira i usporediti taj pristup s onim u kojem se ne koristi nikakav pomoćni razvojni okvir prilikom implementacije REST klijentskih Android aplikacija.

ABSTRACT

Most of today’s mobile applications use one or more communication technologies to send and retrieve data stored online. In majority of these cases applications actually communicate with backend web service which sends and receives the data. Today’s most popular architecture that deals with this functionality, is called REST (Representation State Transfer) architecture, but, implementing REST client in native Android applications usually takes a lot of time, and if it is not implemented by using some architectural pattern, time needed to modify the implementation grows proportionally with application complexity. Industry recognized one helpful framework, Retrofit, which aims to speed up the process and leaves developers more time to focus on the other important activities in the system development process. To reduce even more boilerplate code, Retrofit uses Java annotations which speed up the development process even more. Thus, in this paper we present Retrofit framework and we compare it with native implementation of Android REST client.

1. INTRODUCTION games and many other functionalities are requiring internet connection. Today’s mobile applications are Internet dependent. It Although there are different mechanisms that can be doesn’t matter what kind of mobile application one used, the most common way of supporting the app’s would observe, the outcome is almost always the same: functionality with backend server is by using push the app needs Internet connection to work properly. The notifications [4], [5] and web services. In this paper we newest statistics on mobile apps usage [1]–[3] do not will focus on web services. include information on percentage of mobile apps using the Internet as this number is expected to be more than According to W3Schools [6], web service can be 90% in 2017 [3]. In 2014 we experienced the point in defined as self-contained and self-describing application time when the global number of mobile users exceeded component that can be used by other applications and the number of desktop users. can be communicated with by using open protocols. Combining the two mentioned information, it is clear that After service oriented architectures became widely used companies are now focusing on publishing mobile apps for mobile and other applications, the dominant way of that can count on available Internet connection. This exchanging the data with web services was by using brings different and new opportunities and nobody SOAP protocol (eng. Simple Object Access Protocol) wants to lose portion of this big cake. [7]. Although SOAP is extensible and standardized protocol, the XML used to make requests and receive The reasons for publishing Internet enabled mobile responses was rather complex and in some languages applications are different, but include important drivers (including Android) the requests had to be built that make publishers use web services to support manually which was problematic due to protocols mobile application functionalities. First of all, all intolerance on any errors. On the other hand, REST monetization models are highly internet dependent. (eng. Representational State Transfer) provides a light- Thus, either you count on having commercials or selling weight alternative [8], and instead of using XML to make in-app products, you would need internet connection. a request it relies on simple URL approach that can Also, gathering some information on mobile app usage, output the data in any format (for example in CSV, synchronizing data among different users, creating JSOJ or RSS. social component in the app, having score table in 50 CASE27

The SOAP and REST-full services have their it should explicitly or implicitly include that information advantages and disadvantages (see e.g. [9] or [10]) and so the client could know when to cache the response there are many sources available describing when to [8], [11]. use first or second, this debate is out of scope of this Client-server separation is the fourth constraint which paper. fits with separation of client and server concern In this paper we will focus on possibilities in described in uniform interface constraint. This constraint implementing mobile clients communicating web enables independent development of client and server, services by using REST architecture style. Second as long as uniform interface is not changed. Client can chapter describes REST architecture, in third chapter be portable across multiple platforms, not concerned, we describe demo system (mobile application and web for example, about data storage which is located on and service) developed for the purpose of this work. In maintained by the server. On the other side, server is fourth chapter we bring details of web service not aware of user interface or state on the client, which consumption by native Android implementation while in is good for improving scalability and lowering required fifth chapter we do the same by using industry standard, number of server components. third-party, Retrofit framework. Finally in the last chapter Fifth constraint says that between client and server we discuss both implementations and conclude our may be more layers, so the client can never know is it work. communicating with end server or some component between them. Layered systems may also improve 2. REST ARCHITECTURE scalability with the help of shared caches and load balancers. Security policies can also be realized REST stands for Representational State Transfer, an through layers. Although it can improve performance, architectural style for distributed hypermedia systems, there should also be some caution because a lot of as Roy Fielding originally described it in his doctoral intermediary components may increase latency to the dissertation in 2000 [8]. The style is derived from processing of data. several network based styles, such as client-server or Last and according to [11], only optional constraint is peer-to-peer, and includes six main constraints. These code on demand. This means that clients can constraints were and should be applied in order to build download generated and/or compiled code for local REST style Web architecture. execution. Scripts and applets can be used as an First constraint is the uniform interface, which defines example. According to [8], allowing features to be the interface between clients and servers. This downloaded after deployment improves system constraint makes the architecture flexible in a way that extensibility, but also reduces visibility. This is the main each participant can be developed independently. reason why only this constraint is optional. There are four guiding principles defining the uniform 2.1 HTTP requests semantic interface constraint [11]. First one defines that it should be resource-based, which means that individual HTTP request methods, or verbs, as it is written in [11], resources should be identified in requests using URIs are used for describing how a server needs to process as their identifiers. For example, a server receives received request. HTTP POST, GET, PUT and DELETE request sent from the client to some URI which requests are used the most, since any REST client is identifies a database resource. After processing the able to send such requests. Moreover, that four request, server sends response to the client in the form methods are enough for implementing CRUD (create, of JSON (Javascript Object Notation) string, which is retrieve, update, delete) operations respectively. It is actually a representation of some database record. important to notice that GET requests must not be used REST conceptually separates the resources themselves for changing any resource data, only to retrieve it. and their representations that are returned to the client. These verbs also fulfill the uniform resource constraint. Second principle is manipulation of resources through OPTIONS and HEAD methods are used less frequently, representations. If a client owns some representational but more often than others. metadata about particular resource and has permission, As it is mentioned in [11], GET method is used for it can modify or delete resource on the server. retrieving (or read) a representation of a resource. If Third principle is the usage of self-descriptive everything works, HTTP GET response contains a messages, which include enough information on how to representation in XML or JSON with response code of process themselves. Fourth principle of uniform 200 (OK). If an error occurs, 404 (NOT FOUND) or 400 interface constraint is hypermedia as the engine of (BAD REQUEST) error message is returned. application state. Servers deliver state to the clients via HTTP PUT request method is very often used for body content, response codes and headers, while update operations. Request body should contain newly- clients send state representations via request headers, updated representation of the original resource which is query based parameters, body content and the identified by a known resource URI. In rare cases POST requested URI [11]. can be used for updating resources and this is when the Second major constraint is statelessness. All resource ID is chosen on the client, not on the server. communication between client and the server should be Response on POST request should contain 200 or 204 stateless, which means that every client’s request (if body is empty) response codes. Response body is should contain enough information for server’s not strictly defined, but returning a lot of data may affect understanding of the request, without any need for the network bandwidth [11]. retrieving data stored in server context. Consequently, For creation of new resources HTTP POST request client keeps entire session state. [8] method is most often used. It is actually used to create Third constraint is caching. Clients can cache subordinate or child resource of some other (parent) responses in order to improve network efficiency, resource. When server receives POST request, it performance and scalability. If a response is cacheable, creates new resource and assigns it a new ID. CASE27 51

Response code “201” should be returned for successful Creation of new address is enabled by sending HTTP creation, as well as a Location header with a link to the POST request to http://tinyurl.com/case27-locations newly-created resource [11]. URL. One form parameter named “location” is required Finally, DELETE verb is used to delete URI-identified and must contain a name of the place. Although not resource. HTTP status 200 (OK) along with response strictly by the recommendations in [11], POST response body can be returned (again, with the influence on body contains JSON object with all data about newly bandwidth) or 204 (NO CONTENT) is returned [11]. created resource, such as {"id":1,"location":"Ivanec","lat":"46.2228422","lon": "16.1246793"}. Latitude and longitude should not be 3. EXAMPLE SYSTEM sent as they are automatically fetched from third-party web service before new address is created. 3.1 System functionality and architecture A client can update address by sending HTTP PUT request to http://tinyurl.com/case27-locations/id URI. Id For the purpose of this paper we developed simple in the URI path is a path parameter, and request should demo Android application called “Address Manager”. contain another “location” form parameter. This The screenshots of final version of the mobile parameter is new name of the address which wants to application are shown in Figure 1. Address manager be updated. A whole JSON object is returned by the consists of mobile application and supporting web server, including new location and coordinates: service. The functional requirement of the application is {"id":1,"location":"Ivanec to enable users to get geographical location (latitude New","lat":"47.2228422","lon":"15.1246793"}. and longitude) of any user defined address. The geographical location is determined by backend 4. ANDROID CLIENT IMPLEMENTATION service which also feeds the application with data (returning all addresses stored in remote database). 4.1 Native Android web-service consumption Mentioned web service is implemented in REST architectural style. The implementation of REST-full service consumption in The mobile application has modular architecture and for Android includes development of web-service the purpose of this paper we developed two modules communication layer, the response parsing layer and communicating the backend services: Native module to manual threading. Although all of these requirements communicate web services natively and Retrofit module are supported by native set of Java or Android classes, which uses Retrofit framework [12] for communicating in web-service consumption intensive applications the the web service. Both modules are capable of executing developers should put serious amount of time in GET, PUT and POST requests. developing the communication and parsing algorithms. The experienced Android developers usually tend to help themselves by developing their own set of reusable classes (or even framework) or using design patterns in communicating with web services. However, as the web communication in Android should be performed in separate thread, and should be executed asynchronously, the necessity of creating callback mechanism makes this problem even more complex. The Figure 2 shows our solution that proved to be very handy in several of our projects. Our plugin architecture is composed of four main classes: Repository, Service, Callback and Parser.

Figure 4. Address manager application screenshots

3.2 Web service specification

The main resources stored on server’s database were geographical addresses. Each address has an ID, name (i.e. location), latitude and longitude. Our service supports creation, retrieval and update of addresses. Services were implemented on Java EE platform, with the help of JAX-RS API. A client can retrieve current addresses (or locations) by sending the HTTP GET request to base URL http://tinyurl.com/case27-locations. Server will return JSON array with all locations and their geographical coordinates stored in database: [{"id":1,"location": "Ivanec","lat":"46.2228422","lon":"16.1246793"},…]. Figure 5 – Native plugin class diagram 52 CASE27

- Repository – consists of set of methods that are The previous code fragment implicitly shows the leaning on web services definition of the NativeCallback interface, but to - Service – represents web-service communica-tion remove any doubts, this simple interface is presented in layer. This class should be flexible to be able to the following code: execute any web service request. public interface NativeCallback { - Callback – interface to be implemented by any void acceptNotification(String callback object containing logic for receiving web- result); service response. - Parser – static class containing knowledge on } parsing the responses. Other classes presented in Figure 2 are part of Depending on the complexity of application and web- application architecture and actually use described service layer, it is good to consider making implementation. acceptNotification method capable of receiving more parameters from web-service layer, including In our example, NativeRepositoy class realizes response code or other information. defined interface in order to implement requests for communication with web services. The following code The class that asynchronously contacts backend fragment executes POST request and receives service is NativeService. Due to its complexity it is not response in nativePostCallback object. possible to put its whole content here, but the most important part is below: public class NativeRepository implements public class NativeServices extends AddressRepository { AsyncTask { private String ServiceURL = @Override "http://tinyurl.com/case27-locations"; protected Object[]

doInBackground(Object... params) { private OnAddressCreatedListener //parse input parameters onAddressCreatedListener = null; ...... HttpURLConnection urlConnection;

try { @Override URL url = new URL(serviceName); public void createAddress(Address urlConnection = (HttpURLConnection) address, OnAddressCreatedListener url.openConnection(); onAddressCreatedListener,

OnErrorListener onErrorListener) { urlConnection.setRequestMethod this.onAddressCreatedListener = (serviceMethod); onAddressCreatedListener;

NativeServices ws = new if (serviceMethod.equals("POST") || NativeServices(); serviceMethod.equals("PUT")){ String data = address.getLocation();

ws.execute(ServiceURL, "POST", urlConnection.setDoOutput(true); nativePOSTCallback, data); String content = "location=" + } URLEncoder.encode (location, "utf- private NativeCallback 8"); nativePOSTCallback

= new NativeCallback() { urlConnection.setRequestProperty @Override ("Content-Type", "application/x- public void acceptNotification(String www-form-urlencoded"); result) {

urlConnection.setRequestProperty try { ("Content- onAddressCreatedListener. Length",Integer.toString onAddressCreated (( (content.getBytes().length)); NativeParser.getAddresses (result)).get(0)); OutputStream output = } catch (Exception e) { urlConnection.getOutputStream(); e.printStackTrace(); } output.write(content.getBytes()); } output.close(); }; }

... //get response } InputStream in = new CASE27 53

BufferedInputStream(urlConnection. getInputStream()); address.setId(jsonObj.getLong("id")); BufferedReader rd = new ... BufferedReader addresses.add(address); (new InputStreamReader(in)); } String line; return addresses; StringBuilder response = new } StringBuilder(); } while((line = rd.readLine()) != Once completed and if implemented correctly, the null){ Service class will probably not grow if dements on layer response.append(line); will increase. However, supporting classes including our response.append('\r'); Repository and Parser will grow rapidly and will demand } lots of developers’ time. rd.close(); Event by taking into account that presented implementation is created highly modularly and is result[0] = response.toString(); partially resistant on increase of application complexity we can conclude that this approach is not easy to } catch (IOException e) { understand, implement or adjust to other necessities. //notify on exception Thus, the next chapter will bring the much simpler } finally { implementation with Retrofit framework. if (urlConnection != null) { urlConnection.disconnect(); 5. RETROFIT IMPLEMENTATION } } Retrofit is a Type-safe REST client for Android and Java by Square, Inc. It turns your REST API into a Java return result; interface to achieve maximum simplicity. This library } makes downloading JSON or XML data from a web API @Override fairly straightforward. Once the data is downloaded then protected void onPostExecute(Object[] it is parsed into a Plain Old Java Object (POJO) which result) { must be defined for each "resource" in the response if (result[1] != null) { [12]. ((NativeCallback) result[1]).acceptNotification( (String) result[0]); } } }

As it can be seen, we used AsyncTask to implement asynchronous execution of communication. This determined the class as a whole, as AsyncTask received only one Object (in our case set of values in array) and also returns only one object. We used these two objects to encapsulate all information necessary for request and response functionality. Finally, NativeParse is the last class we used to interpret the web-service response in JSON format. public class NativeParser { public static List

getAddresses(String jsonString) throws Exception { List
addresses = new Figure 6. Retrofit plugin class diagram ArrayList<>(); //ensure object is json array Unlike native approach, Retrofit allows developers to ... focus more on functionalities than on REST client JSONArray jsonArr = new implementation itself. By default, Retrofit uses JSON formatted messages and GSON [13], [14] for JSONArray(jsonString); serialization and deserialization of those messages. Of int size = jsonArr.length(); course, those preferences can be changed. Retrofit is for (int i = 0; i < size; i++) { flexible enough to allow developers to use different JSONObject jsonObj = message formats, as well as different parsers for jsonArr.getJSONObject(i); serialization and deserialization of those messages. Address address = new Address();

54 CASE27

5.1 Concept case27-locations").build();

Retrofit uses compile-time annotation processor for AddressAPI api = simpler declaration and boilerplate code reduction of REST client implementation. Simple GET-consuming restAdapter.create(AddressAPI.class); method can be declared using only @GET annotation This approach may seem strange at first, but it is the above that method. The same thing goes for other preferred approach in Android development community. REST type services (POST, PUT, etc.). If additional It is noteworthy that this approach is highly flexible. If parametrization is needed (for instance, setting content developers need to add more methods for the client, type to x-www-form-urlencoded, there is annotation for they only need to update their API interface with those that as well. methods and use them throughout the application. Sample retrofit service and method for adding a 5.2 Example new address to the repository from our API: @FormUrlEncoded In order to explain how simple Retrofit usage is, we @POST("/locations") have implemented REST client in our sample public Address application using it. REST service provides us with three postAddress(@Field("location") methods: GET addresses, POST address and PUT String address); address. For start, we have defined our API interface for This sample shows how straightforward service and Retrofit: method declaration could be. The postAddress public interface AddressAPI { method uses POST to send a String with address name public static final String ENDPOINT = (key “location”) to the server and in return retrieves an "http://tinyurl.com/case27- Address POJO with geolocation data for that address. locations"; POJO Address contains attributes from JSON object „address“. Developers have to create POJO object @GET("/locations") classes for every such response if needed. Fortunately, public void there are services that can generate POJO objects from JSON response. One of such services is getAddresses(Callback> „jsonschema2pojo“. Method above can POST address callback); name anywhere it is called within the code. Since Android forbids usage of such methods within the main @FormUrlEncoded thread, developers would need to create new thread @POST("/locations") (usually by using AsyncTask, RxJava task etc.) in order public void to perform wanted operation. Fortunately, Retrofit has postAddress(@Field("location") an answer for that as well. String address, Callback

callback); If the application needs to be modified to add new address and get response in a callback method, using Retrofit it is very simple: @FormUrlEncoded @FormUrlEncoded @PUT("/locations/{id}") @POST("/locations") public void public void putAddress(@Field("location"), postAddress(@Field("location") @Path("location") String String address, Callback
address, Callback
callback); callback); } Now the method has a void return type and takes another parameter. Callback parameter above is If we were to add some other functionality (service actually an interface that developers need to implement methods) for our Address API, best practice would be to somewhere in their code where they wish to receive add those methods in the interface above as well. address POJO response. The Callback interface has After we have defined the interface, we have to two methods: onSuccess and onError. If instantiate our RestAdapter object. It is common to communication with REST service goes wrong, the create custom RetrofitHelper utility class for second method is triggered. Otherwise, first method is instantiation of adapter and interfaces. But to keep it triggered and it has two arguments: generic (T) object simple, we will show only the code snippets we need. for our POJO and Response which is actually a Retrofit Instantiation of such RestAdapter would look response class, containing body, header, status etc. something like this: But the question that remains here is: how can we call RestAdapter restAdapter = new those methods if they are defined within an interface RestAdapter.Builder() without actually implementing that interface?. The .setEndpoint(AddressAPI.ENDPOINT) answer is very simple: Retrofit uses OkHttp library for .build(); HTTP protocol communication. Developers first have to } define RestAdapter class instance and then create the AddressAPI using reflection from that adapter. After We have used RestAdapter with standard the service has been instantiated, REST services are a configurations, but thanks to the Builder design pattern simple method call away. Example: by which the RestAdapter class is defined, we can RestAdapter restAdapter = put additional configuration settings such as: custom new RestAdapter.Builder() converter / parser, custom logging settings etc. .setEndpoint("http://tinyurl.com/ CASE27 55

After the adapter has been defined, we only need to goes here ... instantiate our defined interface and call the methods } we need. We have instantiated our API interface like } this: AddressAPI api = As it can be seen, Callback interface has two restAdapter.create(AddressAPI.class); methods: success and error. After the method from API interface is called, Retrofit handles all request and Now it is only a matter of calling those methods when response mapping, thread execution etc. After the we need them via API object. For that, we have defined response is returned from the service, Retrofit calls a our RetrofitRepository class which handles all method from the provided callback object. If the method calls for Retrofit. Snippets from that class are response was successful (status code correct, whole below: response received within the timeout range etc.), public class RetrofitRepository success method is called and the developers can implements AddressRepository { implement their further functionality within that method. //... Likewise, if an error has occurred with service @Override communication or an error response has been received, public void createAddress(String Retrofit calls the error method from callback object. address, Callback

callback) { That is basically it regarding our REST client api.postAddress(address, implementation with Retrofit. As you can see, a lot of callback); unnecessary boilerplate is reduced and developers only } need to write the code they need. //... @Override 6. CONCLUSION public void updateAddress(String address, Callback
callback) In this paper we presented REST application { architectural style and two approaches in implementing api.putAddress(address, web-service communication layer in Android callback); applications. } //... First approach we used was implementation of web- @Override service layer with native Java and Android classes, public void particularly HttpURLConnection class and connected getAddresses(Callback> specific classes to handle writing the request, reading callback) { the responses, handing threading and asynchronous api.getAddresses(callback); callback. } Second approach we used was implementation with the } help of third party framework – Retrofit. This framework is currently recognized as industry standard, is used in The only remaining mystery with this implementation many development teams and is actively developed and remains with Callbacks. We have used Retrofit's improved. Retrofit covers almost all web-service callback approach. For that, we have to define our communication use cases and specific requirements, callbacks somewhere. To improve modularity, we have and above all it is very easy to use. created separate callback classes which implement In the paper we presented architectural design for both Retrofit Callback interface as needed. Simple example approaches and we consider it as the main contribution of a Callback which receives Address object as a of this paper. response is implemented like this: public class AddressCallback implements Although native approach is robust, it is also hard to Callback
{ adapt to other requirements. On the other hand, //... approach with Retrofit is very easy to adapt and use. @Override Above all, the quantity of code in second approach will public void success(Address address, not increase dramatically not even for very demanding Response response) { and complex applications in terms of web-service // Success response handling communication. The native approach behaves rather implementation goes here ... oppositely and the quantity of code could increase } significantly in demanding applications. //... The full source code of this project is available at @Override http://tinyurl.com/case27-code. public void error(RetrofitError error){ // Error handling implementation References

1 D. Bosomworth, “Mobile marketing statistics 2015” Smart Insights, 2015. Available at: http://www.smartinsights.com/mobile-marketing/mobile-marketing-analytics/mobile-marketing-statistics/ [Accessed: May-2015] 2 ComScore Inc., “The U.S. Mobile App Report” 2014. Available at: http://www.comscore.com/Insights/Presentations- and-Whitepapers/2014/The-US-Mobile-App-Report 56 CASE27

3 Statista, “Statistics and facts on Mobile Internet Usage,” Statista.com, 2015. [Online]. Available at: http://www.statista.com/topics/779/mobile-internet/ [Accessed: May-2015]. 4 Android Developers, “Google Cloud Messaging for Android | Android Developers” Google Services, 2015. [Online]. Available at: https://developer.android.com/google/gcm/index.html [Accessed: May-2015]. 5 Apple inc., “Local and Push Notifications for Developers - Apple Developer” Developer Apple.com, 2015. [Online]. Available at: https://developer.apple.com/notifications/ [Accessed: May-2015]. 6 W3Schools.com, “Introduction to Web Services” Introduction to Web Services, 2015. [Online]. Available at: http://www.w3schools.com/webservices/ws_intro.asp [Accessed: May-2015]. 7 W3Schools.com, “SOAP Introduction”, 2015. [Online]. Available at: http://www.w3schools.com/ webservices/ws_soap_intro.asp [Accessed: May-2015]. 8 R. T. Fielding, “Architectural Styles and the Design of Network-based Software Architectures” UNIVERSITY OF , Irvine, 2000. 9 A. Nene, “Web Services Architecture – When to Use SOAP vs REST” Javalobby, 2014. [Online]. Available at: http://java.dzone.com/articles/web-services-architecture [Accessed: May-2015]. 10 J. Mueller, “Understanding SOAP and REST Basics” Software Quality Matters Blog, 2013. [Online]. Available at: http://blog.smartbear.com/apis/understanding-soap-and-rest-basics/ [Accessed: May-2015]. 11 F. Todd, “RESTful Service Best Practices, Recommendations for Creating Web Services” RestAPITutorial.com, 2013. 12 CodePath.com, “Consuming APIs with Retrofit” CodePath Android Cliffnotes, 2015. [Online]. Available at: https://guides.codepath.com/android/Consuming-APIs-with-Retrofit#setup [Accessed: May-2015]. 13 StudyTrials, “Java Google Json (Gson) Introduction” StudyTrials.com. [Online]. Available at: http://www.studytrails.com/java/json/java-google-json-introduction.jsp [Accessed: May-2015]. 14 “Google Gson” Google Gson Home, 2011. [Online]. Available at: https://sites.google.com/ site/gson/Home [Accessed: May-2015]. Information on authors: David Ante Macan, univ.bacc.inf. e-mail: [email protected] Student at Faculty of Organization and Informatics

David Ante Macan is a first year full time graduate student of Information and Software Engineering at Faculty of Organization and Informatics, University of Zagreb, Croatia. He worked as a junior software developer at Asseco SEE. He has also participated in various competitions, including the Croatian Microsoft Imagine Cup finals, won the best design award at IEEEmadC contest, won the third place at Infinum student Hackathon 2014, etc. His main area of interest is mobile development, especially Android. He is actively working on several projects, including the Personal Exam Assistant (PEAS) project at Faculty of Organization and Informatics. He is also a member of IEEE Institute and is one of the student coordinators and founders of the Group for mobile technologies at Faculty of Organization and Informatics.

Zlatko Stapić, Ph.D. e-mail: [email protected] Faculty of Organization and Informatics Pavlinska 2, 42000 Varaždin Tell: +385 42 390 820, Fax: +385 42 213 413

Zlatko Stapić is Head of Group for Development and Transfer of Mobile Technologies at University of Zagreb, Faculty of Organization and Informatics. Zlatko obtained his PhD in computer sciences from University of Alcalá (Spain) and in information sciences from University of Zagreb (Croatia) in cotutelled doctorate program. His scientific and research interests include software- and mobile applications development methodologies. He participated in more than 15 scientific and professional projects and published more than 30 scientific and professional papers. Zlatko is putting a special focus in bringing academia closer to industry with cooperation with industry and inclusion of students in his scientific and professional activities.

Milan Pavlović, univ.bacc.inf. e-mail: [email protected] Student at Faculty of Organization and Informatics

Milan Pavlović is a first year full time graduate student of Information and Software Engineering on Faculty of Organization and Informatics, University of Zagreb, Croatia. His main fields of interest are software engineering and development. He is also interested in Java application development and mobile application development (Android platform). His second field of interest is networking. Milan is a member of Group for Development and Transfer of Mobile Technologies at University of Zagreb, Faculty of Organization and Informatics. CASE27 57

MOBILNA APLIKACIJA ZA PRONALAZAK LJEKARNI

Jasmin Abou Aldan, Mario Lončar, Marina Ivašić – Kos

SAŽETAK

Vizualnim prikazom podataka se na jednostavan, lako razumljiv i zanimljiv način mogu predstaviti različiti sadržaji velikom broju korisnika. Jedan od u danas najraširenijih načina prikaza vizualnih podataka na mobitelima je putem mapa koristeći geolokacije. Primjena mapa i geolokacija može biti raznolika, od prikazivanja točno definiranih i odabranih podataka (poput pozicija autobusnih stanica, bolnica, poštanskih ureda), prikaza rute i kalkulacije udaljenosti za odabrani način prijevoza (npr. do odabranog bankomata) pa sve do složenijih aplikacija koje imaju integrirane mape i servise sa mapama. Problem koji se javlja u razvoju aplikacija koje podržavaju vizualni prikaz podataka je dostupnost i ažurnost informacija koje još uvijek nisu na zadovoljavajućoj razini, kao i činjenica da se ne ulaže dovoljno niti u njihov razvoj niti u održavanje i nadogradnju, a jasno je da je njihov cilje prikazivanje točnih podataka i ažurnih informacija. U prezentaciji ovoga rada demonstrirati će se mobilna iOS i Android aplikacija koja, koristeći geolokacije, na mapi vizualno predstavlja pozicije ljekarni u Hrvatskoj zajedno sa njihovim relevantnim javnim informacijama. Detaljnije će se usporediti i objasniti razlike implementacija za iOS i za Android platformu.

1. UVOD aplikacije i uspoređujemo razvoj na dvije platforme posebno se osvrčući na razliku između sučelja za Uvidjeli smo da je se za sve više različitih objekata u razvoj, programskog jezika, paketa koji sadrže klase prostoru osim adrese poznata i njihova geografska (API, Framework), te samog testiranja i distribucije širina i dužina. Podaci o geografskoj širini i dužini, npr. gotovog proizvoda. za Rijeku 45.3270630, 14.4421760 ili 14° 26' 31.83'' E, 45° 19' 37.43'' N uglavnom nisu praktični za direktno 2. OPIS APLIKACIJE korištenje pa smo takve podatke odlučili predočiti u obliku Geo lokacija na mapama kako bi omogučili Glavna funkcionalnost ove aplikacije je pružanje korisniku jdnostavnije i intuitivnije korištenje. U ovom korisniku korisnih informacija o ljekarnama u okolici na radu, demonstriramo aplikaciju koja na mapi prikazuje jednostavan i praktičan način i navigacija do odabrane lokaciju ljekarni u Rijeci i sve javno dostu pne ljekarne. Kako bi aplikacija bila jednostavna za informacije koje bi mogle biti relevantne za korisnika korištenje, na početku se prikazuje prikaz svih ljekarni u (brojevi telefona, email, radno vrijeme, itd.). Podaci o gradu Rijeci na mapi (Slika 1). ljekarnama preuzete su sa registra ljekarni u RH. Nakon što korisnik odabere neku ljekarnu, dobiva kratku Aplikacija je razvijena za dvije mobilne platforme – informaciju o nazivu te ljekarne i o adresi na kojoj se ta Android i iOS. U radu detaljnije opisujemo faze razvoja ljekarna nalazi (Slika 2).

Slika 1: Prikaz svih lokacija na mapi u verziji ua iOS i Android Slika 2: Prikaz naziva i adrese ljekarne za obje verzije aplikacije 58 CASE27

Ukoliko korisnika zanimaju neke detaljnije informacije, potrebno je odabrati "info gumb" nakon čega mu se otvara novi prozor. U novom prozoru korisnik može vidjeti fotografiju ljekarne, njen naziv i adresu. Nadalje, u tom istom prozoru prikazani su mu kontakt podaci (telefonski broj te e-mail adresa), radno vrijeme ljekarne i datumi kada su odabrane ljekarne dežurne (Slika 3). Unutar aplikacije, dodani su interaktivni gumbi koji korisniku daju mogućnost slanja e-maila, pozivanja kontakt broja, te pokretanja navigacije.

3. IMPLEMENTACIJA 3.1 Općenito

Platforme koje su korištene za izgradnju aplikacije su Apple-ov iOS i Google-ov Android. Glavna značajka ove aplikacije je manipulacija sa servisima mapa koji omogućavaju "turn-by-turn" navigaciju za automobile i pješake. Slika 3: Detaljan prikaz informacija o odabranoj ljekarni Za razliku od Androida, iOS ima podršku za Google i Apple mape. Iako su Google mape bile do nedavno Jezici koji su se koristili u izradi aplikacije bili su (za glavne i za iOS, odlučili smo ipak koristiti Apple mape Android) Java i (za iOS) Swift. Javu možemo koristiti za kako bismo mogli prikazati neke od razlika između ta razvoj aplikacija na raznim platformama, dok je Swift dva servisa. Google mape su jednostavnije za uporabu i namijenjen isključivo samo za Apple aplikacije. Swift je imaju podršku za glasovne naredbe. S druge strane, još uvijek novi programski jezik koji se razvija, no "turn-by-turn" navigaciju u Google mapama je potrebno svakom novom verzijom postaje sve bolja zamjena za doraditi. Apple mape imaju impresivan 3D pogled i dugogodišnji Objective-C. točnu "turn-by-turn" navigaciju. Nedostatak ovih dvaju U sintaksi postoje sitne razlike kao primjerice kod mapa je intenzivna potrošnja baterije. nasljeđivanje gdje kod Jave ono izgleda: class Child

Slika 4: Android Studio

Slika 5: Xcode CASE27 59

Slika 6: Layout editor extends Parent{//code}, dok je to kod Swift-a Glavni "core" framework koji se koristi kod izrade ove class Child: Parent{//code}. Deklaracija aplikacije, a odnosi se na iOS platformu je varijable je slična onoj kod C++: int myVariable;, FoundationKit unutar kojega se nalaze klase za kod Swifta je sintaksa: var myVariable: Int. No manipulaciju stringovima (klasa NSString), brojevima ima i sličnosti koje su izražene kod pozivanja metoda (klasa NSNumber), nizovima (klasa NSArray), itd. Sve gdje je to u oba slučaja: obj.doWork(arg). te klase su podklase klase NSObject i naslijeđuju njezina svojstva. Hijerarhija klasa prikazana je na slici 7. Okoline koje se koriste za programiranje su Android Studio i Xcode. Iako se do nedavno za programiranje Framework UIKit sadrži sve klase koje se koriste za Android aplikacija koristio Eclipse, zamijenio ga je novo izgradnju korisničkog sučelja. Taj framework daje predstavljeni Android Studio (Slika 4) kojeg smo koristili arhitekturu za izgradnju prozora (tj view controller-a) i u razvoju ove aplikacije. opcije pomoću kojih se korisniku prikazuju svi potrebni podaci na ekranu. On je zaslužan i za interakciju s Što se tiče okruženja Xcode (Slika 5) za iOS, ono daje korisnikom s obizom da prepoznaje korisnikov dodir u podršku za izgradnju aplikacija za iOS i Mac OS. Zbog interakciji sa sustavom. svoje brzine i jednostavnosti rada, kao i zbog činjenice da pomaže developerima oko certifikata i profila za MapKit je framework koji se koristi kako bi se dobila njihove aplikacije, smatra se jednim od najboljih puna funkcionalnost karata. Neke od funkcionalnosti okruženja za razvoj aplikacija. Jedna od razlika između koje ovaj framework pruža uključuju standardan prikaz navedenih okruženja, je u tome što developer gotovu (street-level) karata, evente za zumiranje mapa, prikaz aplikaciju unutar Xcode-a automatski može postaviti na pinova, itd., dok je CoreLocation framework zaslužan za App Store (Apple trgovina za aplikacije), dok se kod prikaz korisnikove pozicije, te za pokretanje GPS Android Studio-a cijeli postupak odvija na način da navigacije. okruženje izradi gotov .apk koji developer naknadno sam objavljuje. Za oba okružja možemo reći da imaju bogate alate za razvoj grafičkih sučelja (Slika 6), jednostavan drag and drop komponenata, pregled na različitim razlučivostima i dobru integraciju sa alatima poput GitHuba.

Slika 8: Android dijagram klasa

Slično tome kod Androida se koriste APIi (Slika 8) od kojih su u izradi ove aplikacije korišteni osnovni "java.lang" zaslužan za manipulaciju stringovima, integerima, float i double vrijednostima. Idući API je "android" unutar kojega se nalaze klase za upravljanje dozvolama i za dodavanje referenci na Slika 7: iOS dijagram klasa XMLu unutar kojega je definirano korisničko sučelje,

60 CASE27

kao i "android.content" za komunikaciju između standardu ima predodređene te opcije. Još jedna od aktivnosti. prednosti kod Google karata je što gumb koji zumira na Kod korištenja i manipulacijom Google mapama unutar korisnikovu lokaciju može biti jednostavno pozvan aplikacije (s obzirom da Google Maps- može biti na više pomoću: platformi), potrebno je importati njegov API mMap.setMyLocationEnabled(true); "com.google.android.gms.maps" zasebno (Slika 9). Kod Apple mapa, taj gumb mora biti dodan u obliku ImageButton-a koji se programira zasebno na način da uzima korisnikovu lokaciju, te dodatno zumira na nju, pa na kraju imamo i po nekoliko linija koda: @IBAction func myLocation(sender: AnyObject) { var newRegion = MKCoordinateRegion(center: mapView.userLocation.coordinate, span: MKCoordinateSpanMake(0.007, 0.007)) mapView.setRegion(newRegion, animated: true) } Na obje platforme, na početku je stavljeno da zumira na grad Rijeku. Kako bismo odredili područje oko kojega ide zumiranje, kod iOS-a pozivamo CLLocationCoordinate2DMake: Let zoomLocation = CLLocationCLLocationCoordinate2DMake(4 5.3375, 14.4262) Slika 9: Google Maps dijagram klasa dok kod Androida pozivamo LatLng: LatLng rijeka = new LatLng(45.335290, 3.2 Mape 14.425790); Na kraju da bismo izvršili zumiranje pozivamo: Za prikaz mapa i manipulaciju s njima koristila se klasa mMap.animateCamera(CameraUpdateFactory.n MapsActivity kod Androida, te MapsViewController kod ewLatLngZoom(rijeka, 12)); iOS-a. Kod iOS-a, na početku je potrebno odrediti kakvu mapu želimo koristiti te koje postavke želimo pridodati za Android, tj kod iOS-a: mapi (u našem primjeru stavili smo standardne mape sa mapView.setRegion(MKCoordinateRegion(cen mogućnošću prikazivanja 3D i zumiranja "pitch"): ter: zoomLocation, span: 0.15), mapView.mapType = MKMapType.Standard animated: true) mapView.showBuildings = true Prije samog crtanja pinova na mapi, potrebno je mapView.pitchEnabled = true predodređene pinove (crvena pribadača) promijeniti na Kod Androida to nije bilo potrebno s obzirom da po custom sličice (zeleni pin). Kod iOS-a pridodali smo ga

iOS Android for pharmacy in pharmacies{ for (String s : ljekarne){

//razlamanje svakog string elementa na //razlamanje svakog string elementa na pod niz pod niz let tmp = String[] s2 = s.split(";"); pharmacy.componentsSeparatedByString(";") final String naslov = s2[0]; let naziv = tmp[0] final String adresa = s2[1]; let adresa = tmp[1] let latitude = tmp[2] as NSString //pretvorba string u double vrijednost let longitude = tmp[3] as NSString final Double lat = Double.parseDouble(s2[2]); //pretvorba string u double vrijednost final Double lng = let lat = latitude.doubleValue Double.parseDouble(s2[3]); let lng = longitude.doubleValue final LatLng koo = new LatLng(lat, lng);

//inicijalizacija pin-a za kartu //inicijalizacija i crtanje pin-a za let pharm = MKPointAnnotation() kartu let pharm_coordinates = mMap.addMarker(new MarkerOptions(). CLLocationCoordinate2DMake(lat, lng) icon(BitmapDescriptorFactory.fromResourc pharm.title = naziv e(R pharm.subtitle = adresa .drawable.zeleni)) pharm.coordinate = pharm_coordinates .title(naslov) .snippet(adresa) //dodavanje pina na kartu .position(koo)); self.mapView.addAnnotation(pharm) } }

CASE27 61 preko UIImage na način Uri.fromParts("tel", tele, null)); pinView.image = UIImage(named: "green"), Na sličan način pokreće se i otvaranje programa za tj. slanje maila ukoliko korisnik odabere interaktivni gumb MarkerOptions().icon(BitmapDescriptorFac za slanje maila, jedina razlika je što se kod iOS-a tory.fromResource(R.drawable.zeleni))); umjesto tel:// koristi mailto:, a kod Androida umjesto za Android. Intent.ACTION_DIAL koristi se Na posljetku ide samo crtanje pinova na kartu. S Intent.ACTION_SENDTO. obzirom da se radi o demo aplikaciji sa malo podataka, podaci su spremljeni u niz i to u obliku ["Naziv 3.4 Navigacija ljekarne1; Adresa 1; lat1; lng1","Naziv ljekarne2; Adresa 2;la2;lng2"], no ukoliko bi Osim mogućnosti slanja e-maila i telefonskog poziva, korisnik ima mogućnost pokrenuti navigaciju do željene se radilo o većem broju podataka za verziju koja bi išla ljekarne. Za pokretanje navigacije koriste se programi u distribuciju, takvi podaci bi bili pohranjeni u nekoj bazi koje daje Apple (Apple Maps), odn. Google (Google podataka (primjer SQLite, tj CoreData). Crtanje se odradilo pomoću for-each petlje: Maps). API koji se koristi za pokretanje navigacije je Googleov 3.3 Informacije o lokaciji "google.navigation", dok se za iOS koristi MKDirections sadržan unutar MapKit framework-a. I jedan i drugi rade Nakon odabira željene ljekarne (odabir pin-a), korisnik tako da svojim serverima šalju koordinate korisnika i otvara novi prozor unutar kojega se nalaze sve koordinate pina, te od servera kao odgovor dobivaju informacije o odabranoj lokaciji. Klase koje se koriste u step-by-step rutu za pješaka ili automobil, vrijeme koje ovom dijelu su InfoViewController (iOS) i Info (Android). je potrebno da korisnik dođe do cilja, alternativne rute, Da bi klasa znala koje informacije mora otvoriti, iz itd. Razlika je u tome što taj odgovor kod Androida prijašnje klase MapsActivity/MapsViewController direktno dobiva Google Maps aplikacija pa se proslijeđuje se podatak naziva ljekarne, te koordinata pokretanje poziva jednostavno preko naredbe: pina u idući prozor i to na slijedeći način: Intent intent = new  Unutar MapsActivity/MapsViewController poziva Intent(Intent.ACTION_VIEW, se Uri.parse("google.navigation:q=" + lat  Proslijeđene vrijednosti, spremaju se u varijable u + ", " + lng)); idućem prozoru (klasi) InfoViewController/Info startActivity(intent); dok kod iOS-a taj odgovor dobiva aplikacija, te pomoću Novi prozor se otvara te se polja (UILabel (iOS), njega onda otvara Apple Maps. Da bi se izveo poziv, TextView(Android)) popunjavaju podacima koji su poziva se CLPlacemark unutar kojega su spremljene spremljeni unutar switch-a, ovisno o nazivu ljekarne koji koordinate: je odabran. let placemark = placemarks[0] as! Unutar tog prozora pridodani su i interaktivni gumbi CLPlacemark pomoću kojih korisnik može nazvati odabranu ljekarnu, let destinationCoordinates = korištenjem poziva: placemark.location.coordinate UIApplication.sharedApplication().openUR let destination = L(NSURL(string: MKPlacemark(coordinate: "tel://\(pharmacyTelefon)")!) destinationCoordinates, addressDictionary: nil) tj. za Android: var mapItem = MKMapItem(placemark: Intent intent = new destination) Intent(Intent.ACTION_DIAL, self.userLocation.setDestination(mapItem) iOS Android override func prepareForSegue(segue: mMap.setOnInfoWindowClickListener(new UIStoryboardSegue, sender: AnyObject?) { GoogleMap.OnInfoWindowClickListener() { @Override if segue.identifier == "pharmDetail"{ public void onInfoWindowClick(Marker let sender: InfoViewController = marker) segue.destinationViewController { as! Intent info = new InfoViewController sender.pharmacyName = sendObject Intent("com.jamaco.casepharmacy.INFO"); sender.pharmacyCoordinates = info.putExtra("naslov", destination sender.userLocation = userLoc marker.getTitle()); } Bundle extras = new Bundle(); } extras.putDouble("lat",

marker.getPosition().latitude); extras.putDouble("lng",

marker.getPosition().longitude); info.putExtras(extras); startActivity(info); } });

62 CASE27 zatim opcije za pokretanje mape (tip mape koji želimo Google-a. Jedina veća razlika može se vidjeti kod pokrenuti, te prijevozno sredstvo za koje želimo prikaz distribucije gotovog proizvoda kod kojega Apple rute): developer prvo mora pustiti aplikaciju na review od let launchOptions = strane Apple support tima, kako bi on dozvolio daljnju [MKLaunchOptionsDirectionsModeKey: prodaju aplikacije preko Apple App Store, što kod MKLaunchOptionsDirectionsModeDriving, Google-a nije slučaj, već developer odmah po završetku MKLaunchOptionsMapTypeKey: izrade aplikacije, istu može postaviti na Google Play MKMapType.Standard.rawValue] Store. da bismo na posljetku sve to proslijedili aplikaciji Apple Što se tiče otvorenosti podataka, ona nažalost još uvijek Maps i pokrenuli ju: nije na onoj razini koja bi trebala biti da bi se ovakvih MKMapItem.openMapsWithItems([response.de aplikacija radilo sve više. Većina podataka nalazi se u stination], launchOptions: formatima poput PDF-a ili tabličnih prikaza dostupnih launchOptions as preko web sučelja, manje ih ima u xls, dok ih u cvs [NSObject : AnyObject]) formatu koji bi bio najpoželjniji za korištenje unutar neke aplikacije, ima izrazito malo. Uz veću otvorenost, 4. ZAKLJUČAK vjerojatno bi i broj aplikacija ovoga tipa bio veći. Naravno, ovdje ne završava razvoj aplikacije, svaka Kako je demonstrirano u radu, razvoj jednostavnijih aplikacija u svom životnom ciklusu nastavlja svoj daljnji aplikacija za iOS i Android platforme se ne razlikuje razvoj, tako da bismo mogli reći i da ova aplikacija u previše. Slično su i jezik koji se koristi za razvoj nekim idućim verzijama može dobiti i podršku za crowd aplikacija i sučelje za razvoj. Neke stvari su sourcing kako bi sami korisnici mogli dodavati ili brisati jednostavnije za programirati kod Apple-a, a neke kod one lokacije i podatke koji su se izmijenile. Literatura:

1 Apple Inc.; About Location Services and Maps; Updated: 2014-03-10; https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/Introducti on/Introduction.html; (Accessed 2014-06) 2 Apple Inc.; The Swift Programming Language (Book 1,Swift Programming Series);2014-06-02; https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11; (Accessed 2014-06) 3 Apple Inc.; Cocoa Touch Framworks; https://developer.apple.com/technologies/ios/cocoa-touch.html; (Accessed 2014-06) 4 Apple Inc.; The Foundation Framework; 2013-10-22; https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html; (Accessed 2014-07) 5 Apple Inc.; The UIKit Framework Reference; 2014-09-17; https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKit_Framework/; (Accessed 2014-07) 6 Apple Inc.; The MapKit Framework Reference; 2013-09-18; https://developer.apple.com/library/ios/documentation/MapKit/Reference/MapKit_Framework_Reference/; (Accessed 2014-08) 7 Apple Inc.; The Core Location Framework Reference;2013-09-18; https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CoreLocation_Framework/; (Accessed 2014-08) 8 Apple Inc.;UIViewController Class Reference; 2014-09-17; https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/ ; (Accessed 2014- 08); 9 gis.stackexchange.com; questions; Geographic Information Systems; http://gis.stackexchange.com/questions; (Accessed 2014-12) 10 developers.google.com; Google Maps Android API v2; https://developers.google.com/maps/documentation/android/; (Accessed 2014-12) 11 developer.android.com; Tools; http://developer.android.com/sdk/index.html; (Accessed 2014-08) 12 IntelliJ IDEA, https://www.jetbrains.com/idea/ (Accessed 2014-12) 13 ArcGIS Runtime SDK for Android, https://developers.arcgis.com/android/ (Accessed 2014-12) 14 I. F. Darwin, Android Cookbook, http://androidcookbook.com/home.seam (Accessed 2014-12) Podaci o autorima:

Jasmin Abou Aldan [email protected]

Mario Lončar [email protected]

CASE27 63

Marina Ivašić – Kos [email protected]

Department of Informatics University of Rijeka, Rijeka, Croatia

64 CASE27 CASE27 65

POVEZIVANJE BEŽIČNOG SENZORSKOG ČVORA S POSLUŽITELJEM U OBLAKU

CONNECTING A WIRELESS SENSOR NODE TO THE SERVER IN THE CLOUD

Tonko Kovačević, Mario Čagalj, Toni Perković, Ivan Vuković

SAŽETAK

Koncept Interneta stvari (eng. Internet of Things, IoT) predstavlja novu paradigmu koja se odnosi na prožimajuće ili sveprisutno računarstvo koje nastoji unaprijediti tradicionalni Internet međusobnim povezivanjem različitih objekata iz fizičkog svijeta u inteligentne mrežne sustave. Ovaj koncept omogućuje interakciju ljudi s uređajima i uređaja s uređajima, integrirajući ih u jedinstvenu mrežu kojom se upravlja putem web aplikacija. Povezivanje bežičnog senzorskog čvora s poslužiteljem u oblaku predstavlja veliki izazov jer čvor ne posjeduje tradicionalna korisnička sučelja (tipkovnica, serijsko ili ethernet mrežno sučelje, zaslon). U ovom radu se prezentira aplikacija za povezivanje bežičnog senzorskog čvora ograničenih resursa s poslužiteljem u oblaku. Ključne riječi: Internet stvari, bežični senzorski čvor, korisnička sučelja, poslužitelj u oblaku.

SUMMARY

The concept of the Internet of things is a new paradigm related to pervasive and ubiquitous that seeks to enhance the traditional Internet by creating intelligent interconnections of diverse objects in the physical world. This concept allows people to interact with devices, and devices with devices, integrating them into a single network, controlled by a web application. Connecting a wireless sensor node to the server in the cloud is a major challenge because the sensor node does not have traditional user interfaces (keyboard, serial, or Ethernet network interface, screen). This paper presents an application for connection of a resource-constrained wireless sensor node to the server in the cloud. Key words: Internet of things, wireless sensor node, user interfaces, the server in the cloud.

1. UVOD razmjenjivati podatke s udaljenim web poslužiteljima izravno, primjerice pomoću GSM/UMTS/LTE Koncept Interneta stvari (eng. Internet of Things, IoT) tehnologije, ili neizravno pomoću različitih WiFi proksija predstavlja novu paradigmu koja se odnosi na (WiFi pristupne točke, hotspotovi na pametnim prožimajuće ili sveprisutno računarstvo koje nastoji telefonima itd.). Međutim, prije svake komunikacije unaprijediti tradicionalni Internet međusobnim potrebno je inicijalizirati senzorski čvor za pouzdanu i povezivanjem različitih objekata iz fizičkog svijeta u sigurnu komunikaciju s drugim uređajima. Ovdje se pod inteligentne mrežne sustave. Ovaj koncept omogućuje pojmom inicijalizacije senzorskog čvora misli na interakciju ljudi s uređajima i uređaja s uređajima, informacije koje je potrebno unijeti u sam čvor za integrirajući ih u jednu mrežu kojom se upravlja putem njegovo ispravno funkcioniranje (njegov identitet, vrste i web aplikacija. Ta se mreža sastoji od velikog broja broj senzora), na unos komunikacijskih parametara bežičnih uređaja ograničenih resursa koji ne posjeduju (adrese uređaja i poslužitelja) i tajnih informacija tradicionalna korisnička sučelja (tipkovnica, serijsko ili (zaporke, ključevi, certifikati). Ovaj proces je veoma ethernet mrežno sučelje, zaslon) i imaju ograničenja u bitan jer je u bežičnoj senzorskoj mreži bitno osigurati vidu proračunskih mogućnosti (procesorska snaga i pouzdanu i sigurnu komunikaciju kao i privatnost i veličina memorije) te ograničenu raspoloživu energiju integritet informacija [1]. (baterije su često izvori napajanja). Godine 2011. broj Problem inicijalizacije bežičnih senzorskih uređaja povezanih uređaja na Zemlji premašio je broj ljudi, a predstavlja veliki izazov, posebno za uređaje kao što su očekuje se da će taj broj doseći 50 milijardi do 2020. iBeacons [2] ili LIFX pametne žarulje [3], koji nemaju godine. Mogućnosti primjene Interneta stvari su široke i tradicionalna korisnička sučelja (tipkovnice ili zasloni). raznolike, a prožimaju gotovo svaki aspekt našeg života Pri tome metode za inicijalizaciju senzorskih uređaja i poput opskrbe, transporta i logistike, zrakoplovne, njihovo međusobno povezivanje, za povezivanje tih brodske i automobilske industrije, telekomunikacija, uređaja s pametnim telefonima/tabletima i/ili s udaljenim telemedicinskih sustava i zdravstvene njege, brige za poslužiteljima u oblaku (eng. remote cloud servers) starije i nemoćne, energetskih sustava, pametnih trebaju biti vrlo jednostavne i intuitivne za krajnje zgrada, kuća i ureda, pametnih gradova, poljoprivrede, korisnike. Ove metode ne smiju zahtijevati da krajnji alarmiranja katastrofa, praćenja stanja okoliša, korisnik obavlja složene i na pogreške osjetljive edukacije i drugo. konfiguracijske postupke (procedure) uključujući Bežični senzorski uređaji mogu komunicirati međusobno potrebu za dodatnom opremom, odabirom i upisivanjem i s osobnim uređajima (gadgetima) poput pametnih lozinki za svaki mrežni uređaj, čitanjem dugih uputa i sl. telefona, tableta, pametnih televizora itd., preko Skalabilnost je također jedan od bitnih zahtjeva koji bežičnih mrežnih tehnologija kratkog dometa kao što su trebaju zadovoljiti sigurne metode za inicijalizaciju Bluetooth, ZigBee ili WiFi. Ovi uređaji također mogu 66 CASE27 razumno velikog broja bežičnih uređaja (deseci, stotine sljedeća dva načina: ili čak tisuće uređaja).  ad-hoc – ne postoji središnji čvor, nego samo niz Osnovni koncepti koji se odnose na bežične senzorske ravnopravnih i međusobno povezanih čvorova, a mreže dani su u drugom poglavlju rada. U trećem direktna komunikacija je moguća samo s onim poglavlju se opisuje problem inicijalizacije bežičnog čvorovima koji se nalaze u dometu tog čvora, senzorskog čvora i njegovog povezivanja s drugim  infrastrukturni – podrazumijeva postojanje uređajima. Povezivanje bežičnog senzorskog čvora s središnjeg čvora s kojim su povezani svi ostali poslužiteljem u oblaku opisuje se u četvrtom poglavlju, a čvorovi u mreži, a ujedno ovaj čvor može služiti za zaključci su izvedeni u petom poglavlju rada. povezivanje s drugim mrežama (gateway). Za komunikaciju unutar bežične senzorske mreže 2. BEŽIČNE SENZORSKE MREŽE uglavnom se koriste ZigBee, Bluetooth i 6LoWPAN tehnologije, slika 2. Za povezivanje bežične senzorske Bežična senzorska mreža (BSM) se sastoji od prostorno mreže s javnom mrežom i Internetom uglavnom se distribuiranih autonomnih uređaja koji koriste različite koriste WiFi i GSM/UMTS/LTE tehnologije. vrste senzora (osjetila), a međusobno su povezani Iako karakteristike bežičnih senzorskih mreža ovise o komunikacijskom mrežom. Pod pojmom bežičnog konkretnoj primjeni mogu se izdvojiti sljedeće glavne senzorskog čvora podrazumijeva se uređaj koji se karakteristike: sastoji od 4 glavne komponente:  mala potrošnja energije (baterijska napajanja),  senzora (osjetila),  nedostatak korisničkih sučelja,  mikrokontrolera,  ograničena procesorska snaga i raspoloživa  komunikacijskog sustava i memorija,  sustava za napajanje (uglavnom baterije).  mobilnost čvorova, Bežični senzorski čvorovi prikupljaju različite informacije  mogućnost popravka kvara na čvoru, iz okoline ovisno o aplikaciji u kojoj se koriste. Tako se u  skalabilnost u velikom rasponu implementacije, senzorskoj mreži za nadzor kvalitete zraka prikupljaju  sposobnost rada u specifičnim uvjetima, podaci o temperaturi, vlažnosti, tlaku, raznim vrstama  sigurnost podataka i komunikacije i plinova (zagađivača). Na slici 1. je prikazana bežična  jednostavnost primjene za krajnjeg korisnika. senzorska mreža za nadgledanje stanja pacijenta. Senzori prikupljaju podatke o temperaturi, krvnom tlaku i razini glukoze u krvi. Na osnovu prikupljenih podataka inzulinska pumpa isporučuje određenu dozu inzulina u organizam. U isto se vrijeme prikupljeni podaci mogu slati putem javne telekomunikacijske mreže u telemedicinski sustav. Liječnik na osnovu tih podataka može poduzeti odgovarajuću akciju kao što je promjena doze inzulina. Bežična senzorska mreža omogućava prikupljanje raznih vrsta podataka u realnom vremenu, pohranjivanje prikupljenih podataka i poduzimanje odgovarajuće akcije na osnovu prikupljenih informacija. Jedna od bitnih prednosti bežičnih senzorskih mreža u odnosu na standardne ''žičane'' mreže je pružanje mobilnosti čime se omogućava kretanje korisnika unutar mreže. Slika 2. Radio tehnologije koje se koriste unutar BSM kao i za Bežične senzorske mreže su organizirane za rad na povezivanje s javnom telekomunikacijskom mrežom

Slika 1. Bežična senzorska mreža na tijelu pacijenta

CASE27 67

3. PROBLEM INICIJALIZACIJE BEŽIČNOG što napadač može jednostavnim promatranjem kanala SENZORSKOG ČVORA vidljive svjetlosti (primjenom video kamere) saznati tajne informacije, mala brzina prijenosa informacija preko Za pouzdanu i sigurnu komunikaciju unutar bežične kanala vidljive svjetlosti te potreba za primjenom senzorske mreže veoma je bitna ispravna konfiguracija specijaliziranog hardvera (imp module). senzorskog čvora. To znači da je prije same U radu [9] predstavljeno je rješenje LIRA koje rješava komunikacije potrebno unijeti odgovarajuće informacije problem inicijalizacije bežičnih senzorskih čvorova i u senzorski čvor koje se odnose na njegov identitet, sigurne komunikacije unutar bežične senzorske mreže, funkcionalnost, komunikacijske i sigurnosne parametre. a krajnje je jednostavno za primjenu i intuitivno za Kao što je već u uvodu napomenuto ovaj proces krajnjeg korisnika. Ovo rješenje također koristi kanal nazivamo inicijalizacijom senzorskog čvora. Pri tome vidljive svjetlosti za inicijalizaciju senzorskih čvorova i jedan od glavnih problema predstavlja nedostatak radio kanala za autentikaciju. Rješenje LIRA je vrlo korisničkih sučelja kao što su serijska ili mrežna jednostavno i intuitivno za krajnjeg korisnika. Korisnik (ethernet) sučelja, tipkovnice i zasloni za unos jednostavno postavi bežične senzorske uređaje na informacija u sam čvor. horizontalno postavljen zaslon i pokrene proceduru za Postoje brojna rješenja koja se bave ovom inicijalizaciju. Ostatak procesa se automatski odvija i problematikom, a neka od njih pretpostavljaju da su završetak procesa se signalizira korisniku pomoću senzorski čvorovi prethodno instalirani od strane upaljene zelene svjetleće diode (LED). U slučaju da je proizvođača što značajno umanjuje jednostavnost došlo do pogreške u procesu inicijalizacije određenog primjene za krajnje korisnike i ugrožava sigurnost cijele senzorskog čvora to se signalizira korisniku bljeskanjem mreže [4, 5]. Ova pretpostavka nije razumna i svjetleće diode i on treba jednostavno ponoviti predstavlja veliki rizik za sigurnost mreže što pokazuje i proceduru. Ovo rješenje dobro skalira u odnosu na broj primjer otkrivenih slabosti kod LIFX pametnih žarulja. senzorskih čvorova, a glavni nedostatak mu je mala Rješenja poput Message-in-a-Bottle [6] i KALWEN [7] bitska brzina prijenosa preko kanala vidljive svjetlosti temelje se na primjeni specijaliziranog hardvera koja iznosi 10 bit/s. Također ovo rješenje nije (Faradayev kavez) u fazi inicijalne konfiguracije mreže. prilagođeno za povezivanje senzorskog čvora s drugima Ova su rješenja dosta sigurna, ali su prilično skupa i čvorom putem javne telekomunikacijske mreže ili s zahtjevna za krajnjeg korisnika jer se oslanjaju na poslužiteljem u oblaku. primjenu specijaliziranog hardvera. Brojna su rješenja za sigurnu inicijalizaciju mreže bežičnih uređaja koja se 4. POVEZIVANJE SENZORSKOG ČVORA S temelje na primjeni višekanalnih protokola (multichannel protocols), gdje se komunikacija između mrežnih POSLUŽITELJEM U OBLAKU uređaja obavlja preko dva kanala. Jedan kanal je U ovom poglavlju se opisuje kompletno rješenje za nesigurni širokopojasni radio kanal, a drugi je specijalni inicijalizaciju bežičnog senzorskog čvora, povezivanje uskopojasni OoB (Out-of-Band) kanal kao što su kanal s na Internet i slanje podataka na poslužitelj u oblaku, vidljivom ili infracrvenom svjetlošću ili akustični kanal. slika 3. Ovo rješenje se sastoji od dva dijela. U prvom Međutim još uvijek ne postoji jedinstveno rješenje koje se dijelu inicijalizira senzorski čvor preko kanala vidljive zadovoljava korisničke zahtjeve kao što su: svjetlosti, a zatim putem radio kanala povezuje s  jednostavnost primjene za krajnjeg korisnika, poslužiteljem u oblaku. Na slici 4. Prikazan je izgled  skalabilnost u odnosu na relativno veliki broj razvijenog senzorskog čvora. čvorova, Za inicijalizaciju senzorskog čvora putem kanala vidljive  sigurnost informacija i komunikacije i svjetlosti razvijena je web aplikacija prikazana na slici 5.  robusnost na pogreške. Korisnik jednostavno unese informacije koje služe za Komercijalno rješenje BlinkUp razvijeno od strane inicijalizaciju senzorskog čvora. Nakon toga korisnik Electric Imp [8] koristi bljeskajući zaslon (flashing postavi senzorski čvor na označeno područje na ekranu screen) za prijenos informacija koje bežični uređaj prima i pokrene proceduru ''Start Flash'' prijenosa informacija preko fotodetektora. Glavni je nedostatak ovog rješenja putem bljeskajućeg zaslona, slika 6. Završetak

Slika 3. Inicijalizacija senzorskog čvora preko kanala vidljive svjetlosti i povezivanja s poslužiteljem u oblaku

68 CASE27

svjetlo traje dvije sekunde kao signalizacija korisniku, a u slučaju pogreške crveno svjetlo traje dvije sekunde. Nakon toga slijedi režim rada u kojem senzorski čvor periodički šalje podatke poslužitelju svaku minutu (slika 7.), a to je signalizirano korisniku bljeskanjem plavog svjetla.

Slika 4. Bežični senzorski čvor prijenosa informacija preko kanala vidljive svjetlosti je signaliziran korisniku pomoću svjetleće diode (LED) s tri plava bljeska.

Slika 7. Proces slanja informacija sa senzorskog čvora na poslužitelj

Aplikacija za prijenos informacija kanalom vidljive svjetlosti prikazana je na slici 5. Podaci koji služe za inicijalizaciju senzorskog čvora unose se u polje za unos podataka u formatu: X:id:ssid:pwd:API:IP:txt; Značenje pojedinih podataka je sljedeće:  X – vrsta čvora (samo senzorski čvor, WiFi gateway, GSM modul)  id – identitet čvora  ssid – ''service set identifier'' pristupne točke Slika 5. Aplikacija za inicijalizaciju senzorskog čvora  pwd – zaporka  API – ključ za slanje informacija na poslužitelj  IP – IP adresa poslužitelja  txt – tekst polje za unos podataka koji se odnose na senzore.

Slika 6. Proces inicijalizacije senzorskog čvora

Nakon toga slijedi procedura spajanja senzorskog čvora preko radio kanala (WiFi) na pristupnu točku koja je povezana s Internetom. Ako se senzorski čvor uspješno Slika 8. Primijenjene nijanse sive za kodiranje spoji na pristupnu točku to je signalizirano korisniku s informacija dva zelena bljeska, a ako povezivanje nije bilo uspješno to je signalizirano s dva crvena bljeska. Zatim slijedi prijenos podataka koji se pohranjuju na poslužitelju u Ovi podaci se prenosi senzorskom čvoru putem oblaku. Ukoliko su podaci uspješno preneseni zeleno bljeskajućeg zaslona. U razvijenoj aplikaciji ''Flash'' podaci se kodiraju s 8 razina za što se koristi spektar od CASE27 69

Slika 9. Primljeni signal na fotodetektoru

Slika 10. a) Prijem signala pomoću fotodiode; b) Ovisnost reverzne struje upotrijebljene fotodiode o reverznom naponu i osvjetljenju 8 nijansi sive boje prikazanih na slici 8. Informacija posljedicu da se trajanje simbola protegne na dva okvira predstavljena „crnom“ nijansom (delimiter) ne prenosi (33,32 ms) umjesto da traje jedan okvir (16,66 ms). podatke nego služi za razdvajanje pojedinih Prijemna strana bežičnog senzorskog čvora se sastoji podatkovnih simbola kako bi se smanjile greške u od vrlo jeftinog, jednostavnog i pouzdanog prijemnika prijenosu informacija kanalom vidljive svjetlosti. koji se sastoji od fotodiode i otpornika, slika 10.a). Većina zaslona današnjih računala, pametnih telefona ili Upotrijebljena PIN fotodioda BPW34 je vrlo lako tableta ima frekvenciju osvježavanja (refresh rate) od 60 dobavljiva i predstavlja komponentu COTS (Commercial Hz što znači da je moguće prenijeti 60 okvira (frames) u Off-The-Shelf). Ova fotodioda radi u području valnih sekundi, a trajanje jednog okvira iznosi 16,6 ms. Kada duljina vidljivog i infracrvenog svjetla (=430-1100 nm) i bi se koristile samo dvije razine signala maksimalna ima vrlo malo vrijeme porasta i pada signala (tr=tf=100 teoretska brzina prijenosa iznosila bi 60 bit/s. Međutim ns). Karakteristika ovisnosti reverzne struje fotodiode o zbog raznih ograničenja prouzrokovanih osvjetljenju i narinutom reverznom naponu prikazana je karakteristikama zaslona i uvjetima u kanalu vidljive na slici 10.b). svjetlosti (šum i intersimbolna interferencija ) realno je Naponski signal primljen pomoću fotodiode se vodi na očekivati brzinu od 30 bit/s. U razvijenoj aplikaciji analogni ulaz mikrokontrolera (Arduino platforma) koji korišteno je 8 razina (3 bita po simbolu) za kodiranje koristi 10 bitni analogno-digitalni konverter, slika 9. informacija. Maksimalna teoretska brzina prijenosa na ovaj način iznosi 90 bit/s a u primjeru na slici 9. Ovaj signal se uzrokuje s frekvencijom od 1kHz, ostvarena je brzina od 84 bit/s. Ostvarena bitska brzina odnosno uzorci se uzimaju svaku milisekundu. Nakon je manja od maksimalne teoretske zbog početne toga se signal kvantizira na osnovu sekvence za sekvence za ''učenje'' kao i zbog prelijevanja okvira ''učenje''. U razvijenoj aplikaciji se koristi osam kvantnih (frame overflow). Ovo prelijevanje okvira ima za razina prikazanih na slici 9. Za određivanje pojedinih razina i eliminaciju šuma primijenjen je filtar s pomakom 70 CASE27 sredine (moving average filter) s 16 članova dan poslužitelj u oblaku na kojem se pohranjuju i formulom: prezentiraju senzorski podaci. Rješenje prezentirano u ovom radu je korisnički orijentirano što znači da je vrlo jednostavno i intuitivno za krajnjeg korisnika. Osim toga rješenje je skalabilno i robusno na pogreške.

Nakon što su određene naponske razine za pojedine simbole vrši se dekodiranje primljenih informacija. Primijenjeni kanal vidljive svjetlosti je jednosmjerni komunikacijski kanal jer bljeskajući zaslon odašilje informacije koje se primaju pomoću fotodetektora. To znači da ukoliko je došlo do pogreške u prijenosu informacija preko ovoga kanala to se ne može detektirati, nego tek za vrijeme radio komunikacije prilikom povezivanja na bežičnu pristupnu točku ili prijenosa informacija na poslužitelj. Primijenjena metoda dekodiranja informacija je vrlo jednostavna i ''jeftina'', odnosno ne troši puno resursa senzorskog čvora i odvija se u stvarnom vremenu. Zbog navedenih razloga ne primjenjuje se zaštitno kodiranje (CRC kodovi, Hammingovi kodovi), nego ukoliko je došlo do pogreške prilikom prijenosa informacija preko kanala vidljive svjetlosti to se otkriva kasnije u procesu radio komunikacije. Ukoliko je došlo do pogreške to se signalizira korisniku pomoću bljeskanja crvene LED. U ovom slučaju korisnik treba ponoviti kompletnu proceduru inicijalizacije senzorskog čvora. Nakon što su informacije uspješno dekodirane senzorski čvor se povezuje s pristupnom točkom i zatim šalje informacije na poslužitelj u oblaku, slika 11.

5. ZAKLJUČAK

U radu je prezentirana aplikacija za inicijalizaciju bežičnog senzorskog čvora koja podrazumijeva unos podataka koji se odnose na samu funkcionalnost senzorskog čvora (identitet, vrsta senzora), komunikacijske parametre (IP adresa poslužitelja, adresa čvora u senzorskoj mreži) i sigurnost (SSID, lozinka, ključevi). Za prijenos navedenih podataka razvijena je web aplikacija s bljeskajućim zaslonom. Slika 11. Prikaz prikupljenih informacija na poslužitelju Nakon što je senzorski čvor inicijaliziran on se spaja na bežičnu pristupnu točku (WiFi), a nakon toga na Literatura:

1 U. R. Singh, S. Roy, and H. Mutum. A survey on wireless sensor network security and its countermeasures: An overview. International Journal of Engineering Science Invention, 2, 2013. 2 http://estimote.com/ [Online; accessed 10-April-2015] 3 http://www.lifx.com/ [Online; accessed 16-May-2015] 4 L. Eschenauer and V. D Gligor. A key-management scheme for distributed sensor networks. In Proceedings of the 9th ACM conference on Computer and communicationssecurity, pages 41–47. ACM, 2002. 5 A. Perrig, R. Szewczyk, JD Tygar, V. Wen, and D. E Culler. Spins: Security protocols for sensor networks. Wireless networks, 8(5), 2002. 6 C. Kuo, M. Luk, R. Negi, and A. Perrig. Message-in-a-bottle: user-friendly and secure key deployment for sensor nodes. In international conference on Embedded networked sensor systems. ACM, 2007. 7 Y. W. Law, G. Moniava, Z. Gong, P. Hartel, and M. Palaniswami. Kalwen: A new practical and interoperable key management scheme for body sensor networks. Security and Communication Networks, 4(11), 2011. 8 https://electricimp.com/ [Online; accessed 6-April-2015] 9 T. Kovacevic, T. Perkovic, M. Cagalj. LIRA: A New Key Deployment Scheme For Wireless Body Area Networks. SoftCOM 2013 (10.1109/SoftCOM.2013.6671884), Primošten, Croatia

CASE27 71

Podaci o autorima:

Tonko Kovačević, mr. sc. Mario Čagalj, dr. sc. Sveučilišni odjel za stručne studije, FESB Split, Sveučilište u Splitu Ruđera Boškovića 32 Livanjska 5, 21000 Split 21000 Split Mob. 091 33 44 199 e-mail: [email protected] e-mail: [email protected]

Toni Perković, dr. sc. Ivan Vuković, student FESB Split, Sveučilišni odjel za stručne studije Sarajevska 28, Ruđera Boškovića 32 21000 Split 21000 Split e-mail: [email protected] [email protected]

72 CASE27

CASE27 73

APLIKACIJA S PROŠIRENOM STVARNOŠĆU ZA GRAD VARAŽDIN

AUGMENTED REALITY APPLICATION FOR CITY VARAZDIN

Ana Ćorić Samardžija

SAŽETAK

Živimo u svijetu gdje su naše svakodnevne aktivnosti posredovane tehnologijom. Računalni hardver postaje svaki dan sve manji i snažniji, te kao posljedicu donosi temeljne promjene u načinu kako provodimo interakciju s tehnologijom. Proširena stvarnost je vrsta tehnologije koja nam omogućava da se digitalni sadržaji (poput videa, slike, animacije, 3D modela i dr.) integriraju sa realnim svijetom te na taj način proširimo (obogatimo) doživljaj stvarnosti koja nas okružje. Primjer takvih informacija može biti prepoznavanje objekata te prikaz dodatnih informacije o promatranom objektu (visina, boja, klasifikacija itd..). Današnji pametni mobiteli i tableti su opremljeni sa brzim procesorima, jakim grafičkim komponentama, velikim ekranima osjetljivim na dodir, kamerom visoke rezolucije, GPS senzorima, kompasom, akcelerometarom, i drugim senzorima te su stoga idealni za proširenu stvarnost bili vani na otvorenom ili u zatvorenom prostoru. Tehnologija proširene stvarnosti je popularna u vojnoj industriji, arhitekturi, medicini, marketingu, edukaciji i turizmu. U ovom radu biti će prikazan i opisan projekt izrade aplikacije s proširenom stvarnošću za grad Varaždin. Aplikacija je razvijena za iPhone/iPad uređaje te koristi Metaio razvojni okvir za razvoj elemenata proširene stvarnosti. Aplikacija omogućava pretraživanje ključnih točaka od interesa (engl. Points of Interest) i integraciju multimedije za svaku ključnu točku, te prepoznavanje slika i prikaz multimedijalnih objekata.

ABSTRACT

We live in a world where our daily activities are mediated by technology. Computer hardware is becoming every day smaller and more powerful, and as a result brings a fundamental change in the way we interact with technology. Augmented Reality is technology that allows us to merge digital content (such as video, images, animations, 3D models, etc.) with the real world and thus augments (expands) our experience of the reality that surrounds us. An example of such augmented information can be object recognition and additional information display about the observed object (height, colour, classification, etc.). Today's smartphones and tablets are equipped with a fast processor, powerful graphics components, a large touch screen, high resolution camera, GPS sensors, compass, accelerometer, and other sensors and therefore are ideal for the augmented reality for both indoor and outdoor. Augmented reality technology is popular in the defence industry, architecture, medicine, marketing, education and tourism. This paper will present and describe a project of tourist augmented reality application development for city Varazdin. The application is developed for iPhone/iPad users and uses Metaio development framework for the development of augmented reality elements. The application enables users to search the key points of interest (POI), and to see multimedia for each POI, and as well image recognition and integration of multimedia objects.

1. UVOD prostoru. Proširena stvarnost se može odnositi na sva ljudska osjetila ne samo na vizualne, grafičke elemente. Proširena stvarnost (engl. Augmented Reality AR) je Istraživanja i primjena proširene stvarnosti izrazito je varijacija virtualne stvarnosti. Korištenjem tehnologije aktualno u područjima vojne industrije, graditeljske virtualne stvarnosti gubimo osjećaj sa stvarnim svijetom industrije, arhitekture, medicine, marketinga, industrije (realnim okruženjem), dok s proširenom stvarnošću igara, edukacije i turizma. Uređaji koji podržavaju možemo iskusiti djeliće virtualne stvarnosti bez da proširenu stvarnost postali su znatno manji i dostupniji u gubimo osjećaj stvarnog svijeta u kojem se nalazimo odnosu na početke, od 1960.ih gdje su uglavnom [1]. Proširena stvarnost se može definirati kao dio korišteni unutar laboratorija [3]. Danas je tehnologija kontinuuma između stvarnog i virtualnog svijeta kao proširene stvarnosti moguća na svim pametnim dvije krajnosti . Proširena stvarnost nije alternativa [2] mobilnim uređajima (npr. pametni telefoni, pametni stvarnom svijetu već dodana vrijednost kako bi korisnik dlanovnici) te drugim nosivim uređajima (npr. doživio iskustvo stvarnog svijeta na drugačiji način. podatkovne naočale). Iako je primjena tehnologije Proširena stvarnost nam omogućava da vidimo stvarni proširene stvarnosti znatno u porastu u posljednjih svijet obogaćen sa računalom generiranim objektima. nekoliko godina, ipak ova tehnologija je još uvijek u fazi Tehnologija omogućuje kombiniranje fizičke (stvarne) razvoja i svoj puni potencijal nije u potpunosti ostvarila. okoline s virtualnim informacijama poput teksta, videa, S obzirom na specifičnosti potreba pojedinih grafike, podaci sa različitih senzora itd. Azuma je organizacija izrada sustava proširene stvarnosti definirao proširenu stvarnost kao sustave koji posjeduju zahtijeva heterogena znanja kao što su poznavanje ove tri karakteristike [1]: (1) kombiniraju stvarne i problemske domene, poznavanje programskih jezika, virtualne objekte; (2) interaktivni su u stvarnom dizajniranje grafičkih sučelja, modeliranje i teksturiranje vremenu; (3) smješteni su u trodimenzionalni prostor. virtualnih objekata, izrada animacija, obradu podataka Tehnologija proširene stvarnosti se može koristiti na prikupljenih pomoću raznih senzora itd. U industriji se različitim lokacijama bilo u otvorenom ili u zatvorenom sve više koriste tehnike virtualnog prototipiranja u 74 CASE27 izgradnji i/ili dizajnu zadataka pri čemu nastaju 2D ili 3D relevantnim sadržajima i informacijama. Prvi primjeri modeli (CAD). Stoga za integraciju funkcionalnosti upotrebe tehnologije proširene stvarnosti u turizmu su proširene stvarnosti u proizvodni kontekst organizacija se pojavili krajem 20og stoljeća. Columbia Touring ne predstavlja i ne zahtijeva posebne dodatne troškove, Machine je rani primjer sustava s proširenom jer organizacije već imaju razvijene modele i simulacije stvarnošću namijenjen za vanjska okruženja [4]. rada te ih jednostavno iskoriste i prikažu u stvarnom Sljedeći značajniji primjer je Archeoguide sustav iz 2001 vremenu vezano uz konkretne situacije. namijenjen istraživanju povijesno kulturoloških nalazišta stare Grčke [5]. U novije vrijeme imamo turistička 2. TEHNOLOGIJA PROŠIRENE rješenja s proširenom stvarnošću poput: (1) Philadelphijski odjel za povijesne zapise , (2) STVARNOSTI [6] Berlinski zid [7], (3) Londonski Muzej [8], (4) Nizozemski Glavne komponente koje su potrebne kako bi se Arhitektonski Institut [9] i Syndneyska elektrana [10]. omogućila proširena stvarnost su: (1) senzor za hvatanje stvarnosti (npr. kamera, senzori za 3.1 Aplikacija s proširenom stvarnošću za grad temperaturu, vlagu, pokrete, GPS itd.); (2) informacije o Varaždin sustavu praćenja (engl. tracking system), npr. markeri, VarazdinAR je AR platforma razvijena za iOS uređaje slike, 3D objekti, lokacija/pozicija itd.; (3) sučelje na (iPhone/iPad), te omogućuje turistu grada Varaždina da kojemu će se prikazati sloj zaprimljenih i kontekstu bolje upozna i istraži ljepote grada Varaždina. Sustav je prilagođenih informacija npr. pametni telefon, pametni razvijen korištenjem MetaioSDK razvojnog okvira. dlanovnici, podatkovne naočale i sl.; (4) komponente za Metaio je kompanija koja ima više od deset godina prikupljanje ulaznih instrukcija npr. ekran na dodir, iskustva u razvoja rješenje s proširenom stvarnošću. Za mikrofon ili kamera za praćenje pokreta očiju, korištenje ovog sustava potrebna je povezanost na podatkovne rukavice itd.; te (5) sadržaj npr. tekst, slika, besplatnu gradsku bežičnu mrežu ili mobilnu mrežu 2D/3D modeli, audio itd. uređaja. Sustav VarazdinAR je organizirana u četiri glavna modula (slika 1). Razlikujemo četiri platforme koje se koriste za prikaz proširene stvarnosti. Prva su osobna računala s web kamerom. Ovaj oblik je fiksan jer je vezan uz računalo. Marker se treba postaviti ispred web kamere kako bi se prepoznavanjem markera prikazao virtualni sadržaj na ekranu računala. Ovaj oblik se najčešće koristi za prikaz proširene stvarnosti oglasa magazina, dječjih kolekcionarskih kartica, poslovnih kartica i sl. Drugi skup platformi su digitalni kiosci i digitalni prozori. To su stanice gdje korisnici donose svoje predmete kako bi saznali više o njima pomoću proširene stvarnosti. Jedan od najpoznatiji primjera je Lego kiosk koji prikazuje kako izgledaju sastavljene lego kocke iz kutije. Treći skup platformi su pametni telefoni i dlanovnici. To je ujedno i najrašireniji način pristupa sadržajima proširene stvarnosti. Ovi uređaji osim kamere mogu koristiti i akcelerometar i GPS kako bi prikazali sadržaje zavisno o korisnikovoj trenutnoj lokaciji. Četvrta skupina platformi su nosivi prikazi kao što su naočale i kacige. U skoroj budućnosti ovaj oblik će biti najčešće korišten. Slika 1. Prikaz početnog zaslona sustava VarazdinAR Danas se tehnologija proširene stvarnosti najviše koristi u oglašavanju, igrama, edukaciji, turizmu, navigaciji, Prvi modul je prikaz točki od interesa (engl. Points of umjetnosti. Interest POI). Na temelju lokacije turista prikazuju se Najveći izazov za rad sustava s proširenom stvarnošću udaljenost i smjer pojedinih točki od interesa (slika 2). su registracija objekta u stvarnosti, točnost senzora te Turist može filtrirati informacije prema udaljenosti i veličina zaslona koji ukoliko nisu adekvatni smanjuju prema grupama: povijesni sadržaji, restorani, barovi, korisnikov doživljaj i iskustvo te mogu odbiti korisnika od prenoćišta. korištenja tih sustava.

3. MOTIVACIJA ZA IZRADU APLIKACIJE S PROŠIRENOM STVARNOŠĆU

Turizam je jedna od najvećih industrija u svijetu. Svaka država ulaže u razvoj i promociju turistički znamenitosti svoje zemlje. Svaki grad ima svoje posebnosti i zanimljive priče koje se isplati vidjeti i čuti. Većina turista prilikom razgledavanja nepoznatog grada želi jednostavan i brz pristup razumljivim, sažetim i kontekstu relevantnim informacijama (trenutna lokacija, naziv i kratki info o objektu itd.). Sve više se koriste razna informacijsko tehnološka rješenja kako bi se obogatila iskustva turista. Proširena stvarnost pokazala se obećavajućom tehnologijom koja turistima omogućuje pristup Slika 2. Prikaz točki od interesa kroz prvi modul CASE27 75

Drugi modul je prikaz točki od interesa na Apple kartama. Turist može jednostavno vidjeti gdje se trenutno nalazi na karti te što se nalazi oko njega (slika 3). Također prikaz točki na karti može filtrirati prema grupama: povijesni sadržaji, restorani, barovi, prenoćišta.

Slika 5. Prikaz sadržaja na temelju prepoznavanje vrata

točke od interesa Slika 3. Prikaz točki od interesa na karti Četvrti modul je otkrivanje dodatnih sadržaja kroz Odabirom pojedine točke možemo vidjeti više skeniranje brošure grada Varaždina (slika 6). Ovaj informacija o samoj točci, kako doći do nje, prikaz modul pored prikaza dodatnih sadržaja kao što su audio službene web stranice. Ukoliko je riječ o povijesno zapis o građevini, video zapisa, poveznica na službene relevantnoj točki od interesa, moguće su dvije dodatne stranice građevine, poveznica na povijesne slike o mogućnosti prepoznavanja vrata kulturnog spomenika i građevini, dodatna posebnost ovog modula je prikaz 3D prepoznavanje sadržaja brošure (slika 4). To su ujedno modela građevina (slika 7). treći (slika 5) i četvrti modul (slika 6) ovog sustava.

Slika 6. Prikaz sadržaja na temelju prepoznavanje stranica brošure grada Varaždina

Slika 4. Prikaz detaljnih informacija o značajnim točkama od interesa

Treći modul je otkrivanje dodatnih sadržaja kroz skeniranje ulaznih vrata povijesnih građevina grada Varaždina. Kada se vrata prepoznaju prikaže se naziv građevine te dodatni sadržaji prvenstveno audio zapis o građevini, ali pojedine građevine imaju i sadržaje poput video zapisa, poveznica na službene stranice građevine, poveznica na povijesne slike o građevini i sl. (slika 5).

Slika 7. Prikaz 3D objekta na temelju prepoznavanje slike 76 CASE27

Svi moduli su međusobno povezani i omogućuju da 4. ZAKLJUČAK turist npr. gledajući brošuru grada Varaždina odluči koju građevinu će posjetiti, s mogućnošću da se informira Kako tehnologija znatno napreduje svakog dana, tako i unaprijed o samoj građevini ili ako mu više paše na licu pametni uređaji postaju sve snažniji, te posjeduju bolje mjesta. višejezgrene procesore i imaju dostupno više radne Tekstualni opisi i multimedijski sadržaji (audio, video, memorije. Algoritmi za detekciju raznih objekata od slike, 3D modeli itd.) predstavljaju vrijednost za turista u interesa sve su napredniji, pa u budućnosti možemo njegovom kontekstu istraživanja/razgledavanja grada. očekivati sve veći broj ovakvih sustava. U turizmu ti Proces prikaza sadržaja proširene stvarnosti obuhvaća sustavi pomažu turistima da pristupe relevantnim i sljedeće: prvo kamera prikazuje stvarno okruženje, vrijednim informacijama te poboljšaju znanje o potom program hvata video slike i kreira binarni uzorak, turističkim atrakcijama u gradu ili okolici. A za posljedicu uzorak se uspoređuje s uzorkom iz baze te ukoliko se mogu pozitivno utjecati na turistički doživljaj, iskustvo i pronađe sličnost prikazuje se i pozicionira sadržaj zabavu tijekom procesa istraživanja/upoznavanja novih ovisno o uzorku (markeru). Informacije su pohranjene sredina. Stoga, najveća vrijednost informacijskih na Web server i sadržaji se pozivaju (dohvaćaju) prema sustava s proširenom stvarnošću je u tome što ti sustavi trenutnoj lokaciji turista. omogućuju personalizaciju sadržaja kontekstu i preferencijama korisnika tj. dodaje se novi interaktivni i dinamični sloj na realnost koja ga okružuje. Literatura:

1 R. Azuma, A Survey of Augmented Reality. 1997. 2 P. MILGRAM and F. KISHINO, “A Taxonomy of Mixed Reality Visual Displays,” Dec-1994. [Online]. Available: http://search.ieice.org/bin/summary.php?id=e77-d_12_1321. [Accessed: 03-Jun-2014]. 3 D. van Krevelen and R. Poelman, “A Survey of Augmented Reality Technologies, Applications and Limitations,” Int. J. Virtual Real., vol. 9, no. 2, pp. 1–20, Jun. 2010. 4 H. A. Karimi and A. Hammad, Telegeoinformatics: Location-Based Computing and Services. CRC Press, 2004. 5 V. Vlahakis, N. Ioannidis, J. Karigiannis, M. Tsotros, M. Gounaris, D. Stricker, T. Gleue, P. Daehne, and L. Almeida, “Archeoguide: an augmented reality guide for archaeological sites,” IEEE Comput. Graph. Appl., vol. 22, no. 5, pp. 52–60, Sep. 2002. 6 Weekly Linkfest « Games Alfresco, “Augmented Reality for Cultural Institutions | augmented.org,” 2011. . 7 Layar, “The Berlin Wall is back,” Layar, 2010. [Online]. Available: https://www.layar.com/news/blog/2010/04/16/the- berlin-wall-is-back/. [Accessed: 23-May-2015]. 8 “Museum of London Releases Augmented Reality App for Historical Photos,” PetaPixel, 2010. [Online]. Available: http://petapixel.com/2010/05/24/museum-of-london-releases-augmented-reality-app-for-historical-photos/. [Accessed: 23-May-2015]. 9 “Netherlands Architecture Institute - item - See what is not (yet) there,” NAi, 2009. [Online]. Available: http://en.nai.nl/museum/architecture_app/item/_pid/kolom2-1/_rp_kolom2-1_elementId/1_601695. [Accessed: 23- May-2015]. 10 S. Chan, “New version of Powerhouse Museum in Layar : augmented reality browsing of museum photos around Sydney,” Fresh & New(er), 2010. .

CASE27 77

OPTIMIZACIJA RAČUNARSTVA U OBLAKU ZA BYOD

Vlatka Davidović, Dijana Liverić, Daniele Milani

SAŽETAK

Računarstvo u oblaku je koncept koji se razvija i svakako predstavlja budućnost u poslovnom okruženju. Promjena u načinu razmišljanja korisnika, koji može s bilo kojim uređajem i s bilo kojeg mjesta pristupiti informacijama, utječe i na dosadašnji način rada, te prelaske na nove načine poslovanja. Vrlina računarstva u oblaku svakako je spremanje i dostavljanje informacija bilo kada i bilo gdje, pri čemu korisnici ne moraju voditi računa o tome gdje se te informacije nalaze. BYOD ili „Bring your own device“ odnosno „Donesi svoj uređaj“ odnosi se na trend koji je trenutno aktualan i predstavlja želje i zaposlenika i poslodavca za povezivanjem poslovne tehnologije sa privatnim uređajima, kako bi im se olakšao rad. Kroz rad se nastoje prikazati pozitivni i negativni aspekti računarstva u oblaku kod prelaska na BYOD okolinu, te kako oba koncepta zajedno utječu na poslovno okruženje. Ključne riječi: računarstvo u oblaku, BYOD, prijelaz na BYOD

ABSTRACT

Cloud computing is developing concept and represent the future of the business environment. Changing in mindset of user, who can access the information with any device and from anywhere, affects the current working process and the transition to new ways of doing business. The virtue of cloud computing certainly is storing and delivering information anytime and anywhere, where users do not need to be aware of where this information is located. BYOD or "Bring your own device" refers to a trend that is topical and represents the employers and employees wishes to connect business with private technology devices, to facilitate his work. This paper is trying to show the positive and negative aspects of cloud computing in the transition to BYOD environment, and how both concepts together affect the business environment. Keywords: Cloud computing, BYOD, transition to BYOD

1. UVOD velikog broja aplikacija na tržištu, jednostavnost instalacije, te razni mali ugrađeni hardverski dodaci Računarstvo u oblaku zajedno sa razvojem mobilnog omogućili su njihovu široku primjenu. BYOD (Bring your računarstva, u zadnjih nekoliko godina postali su, ne own device) poslovni model zaposlenicima omogućuje bez razloga, vodeći tehnološki trendovi. lakši rad jer rade u poznatom okruženju i sve im je Računarstvo u oblaku nudi resurse kojima je moguće dostupno korištenjem jednog uređaja. pristupiti s bilo koje lokacije i u bilo kojem trenutku, pri Prebacivanje poslovanja u oblak i povezivanje vlastitih čemu korisnici ne moraju voditi računa o tome gdje su ti mobilnih uređaja s poslovnim resursima u oblaku podaci nalaze – oni su negdje "u oblaku". zahtjeva strategiju razvoja, optimizaciju poslovanja u Jednostavnost smještanja podataka u oblak, njihovo oblaku za BYOD, te prilagodbu poslovnog okruženja. korištenje, činjenica da se podacima i aplikacijama u Potrebno je razmotriti prednosti i nedostatke oblaku može pristupiti s bilo koje lokacije, u bilo kojem prebacivanja poslovanja u oblak, kao i BYOD modela trenutku i s bilo kojeg uređaja, pridonijeli su razvoju poslovanja, sigurnosne rizike poslovanja u oblaku u oblačnog računarstva. Primjer softvera u oblaku je BYOD okruženju, te razvijanje softverskih rješenja. Google aplikacija, koja integrira razne aplikacije u oblaku u jedan proizvod. Uz kreiranje Google računa nude se i usluge hosting-a elektroničke pošte, kreiranja, 2. RAČUNARSTVO U OBLAKU - uređivanja i spremanja raznih vrsta dokumenata, PREDNOSTI I NEDOSTACI dostupna je i analiza podataka prometa na web stranici Prema NIST (National Institute of Standards and vezanoj uz račun, pristup mapama cijelog svijeta i još mnogo opcija. Technology) definiciji Cloud Computinga, to je model koji omogućuje odgovarajući mrežni pristup za dijeljenje Uz razvoj računarstva u oblaku, postoji i trend sve računalnih resursa na zahtjev (npr. mrežnih, serverskih, većeg korištenja mobilnih uređaja koji dolaze u svim smještajnih, aplikativnih i uslužnih), koji mogu biti brzo mogućim oblicima i veličinama – pametni telefoni, dodijeljeni i otpušteni uz minimalan trud oko upravljanja tableti, klasična prijenosna računala, razni hibridi. ili interakcije sa davateljima usluge. Mobilni uređaji su postali izuzetno moćni, lagani i jednostavni za korištenje, a brojne aplikacije pisane za Model oblaka sastoji se od 5 bitnih karakteristika: njih, interakciju su učinile ugodnom i brzom. Dostupnost  Samousluga na zahtjev – klijent može jednostrano odrediti računalna svojstva kao što su vrijeme 78 CASE27

poslužitelja i mrežno skladištenje podataka, prema  Nepredvidljivost performansi kao posljedica potrebi automatski, bez da kontaktira svakog dijeljenja resursa. davatelja usluge zasebno  Široki mrežni pristup – mogućnosti su dostupne 3. BYOD OKRUŽENJE - PREDNOSTI I preko mreže, pristupa im se preko standardnih mehanizama koji potiču korištenje heterogenih NEDOSTACI tankih ili debelih klijentskih platformi BYOD je poslovni model u kojem se na mobilni uređaj  Udruživanje resursa – računalni resursi se udružuju, te koriste i dinamički dodjeljuju fizičke i zaposlenika instaliraju poslovne aplikacije, odnosno virtualne resurse prema klijentskim zahtjevima njegovom uređaju se dopušta pristup poslovnim  Brza elastičnost – svojstva se mogu dodijeliti brzo i podacima. Ono što karakterizira ovakav pristup za elastično (ponekad automatski) kako bi se brzo zaposlenika je korištenje jednog uređaja za privatne i smanjila, odnosno otpustiti kako bi se brzo poslovne svrhe, odnosno on ne mora sa sobom nositi povećala. Krajnjem korisniku se svojstva dostupna više uređaja. Međutim, to ujedno briše granicu između za dodjeljivanje čine neograničena, te se mogu poslovnog i privatnog okruženja. Sa stajališta dohvatiti u bilo kojoj količini i bilo kojem trenutku poslodavca, manji su troškovi oko nabave uređaja i  Izmjerljivost usluga – sustav automatski kontrolira i edukacije zaposlenika vezano uz njegovo korištenje, no optimizira korištenje resursa iskorištavajući veći oko osiguravanja poslovnih aplikacija za različite vrste uređaja. sposobnosti mjerenja na nekoj razini apstrakcije koja odgovara tipu resursa. [9] Prednosti BYOD okruženja: U oblaku davatelji usluga iznajmljuju određene resurse.  Manji troškovi za firmu kod ulaganja u hardver i Firme potpisuju ugovor – SLA (Service level agreement) edukaciju zaposlenika sa davateljem usluga, te mogu koristiti resurse i platiti ih  Poznato okruženje uređaja - zaposlenik poznaje prema količini korištenja. Takav pristup ima određenih mogućnosti vlastitog uređaja, obzirom da ga koristi i prednosti i nedostataka. u privatne svrhe. Time se smanjuje već navedeni trošak oko edukacije Prednosti korištenja računarstva u oblaku:  Fleksibilnost – korištenje samo jednog uređaja za  Smanjivanje troškova vezanih uz IT – plaća se sve potrebe samo ono što se koristi od resursa. Troškovi vezani  Dostupnost informacija - zaposlenik ima uvijek uz održavanje i nadogradnju hardvera ili dostupne sve potrebne informacije za kvalitetnije programske podrške su reducirani, obzirom da se odrađivanje poslovnih procesa cijela infrastruktura, platforma ili softver mogu  Ažurnost – zaposlenik može brže saznati i koristiti u oblaku primijeniti promjene u poslovanju  Globalizacija informacijskog sustava - raspoloživost Nedostaci BYOD okruženja: i stalna dostupnost usluga s bilo kojeg računala koje ima pristup internetu. Također davatelji usluge  Trošak za djelatnika kod nabave uređaja. Pristup garantiraju kontinuiranu dostupnost kroz podacima i komunikacija mogu biti na trošak redundanciju podataka, te automatsko prebacivanje zaposlenika poslova na druge servere u slučaju greške.  Adekvatnost uređaja, odnosno dostupnost  Lakše upravljanje kroz analizu poslovanja u aplikacija – poslovne aplikacije bi trebale biti realnom vremenu – ovisno o performansama prilagođene širokom rasponu različitih uređaja sa sustava skaliranje se može izvršiti na zahtjev različitim karakteristikama i OS-ovima. Međutim, korisnika. Resursi se mogu brzo dodijeliti ili moguće je da neki djelatnici neće imati adekvatan otpustiti, ovisno o tome koliko je opterećenje uređaj za instalaciju poslovnog rješenja i pristup postojećih resursa. podacima.  Povećanje proizvodnje i produktivnosti sa manje  Sigurnost - obzirom da su podaci dostupni na svim ljudi – samim tim su i jednostavniji poslovni procesi. osobnim uređajima djelatnika, lako može doći do Također se smanjuje trošak ulaganja u edukaciju sigurnosnog propusta. [5] zaposlenika u IT službi  Napredniji sigurnosni sustav - potrebna ulaganja za  Uvijek je dostupna nova verzija programske unaprijediti sigurnosni sustav kod prijavljivanja i podrške spajanja na poslovne aplikacije  Strah zaposlenika od gubitka privatnosti – prema Nedostaci korištenja računarstva u oblaku: istraživanju koje je proveo AdaptiveMobile, među  Sigurnost, privatnost i pouzdanost podataka, te zaposlenicima koji ne koriste svoje uređaje za nadzor nad njima obavljanje posla, najveće prepreke su želja za  Dostupnost usluge - ukoliko postoje tehnički odvajanjem privatnog i poslovnog života(44%), te problemi (problemi sa opterećenjem servera, za nedostatak povjerenja u poslodavce kojima bi korisnika je potreban pristup internetu) usluga trebali dati dio kontrole nad uređajima. [4] možda neće biti dostupna. Poslovna politika mora voditi računa o nekoliko područja  Problem ovisnosti o jednom davatelju usluge u BYOD okruženju, : (migracija podataka iz jednog oblaka u drugi, ukoliko rade s različitim tehnologijama i  Sigurnosna politika koja naglašava prava i obaveze standardima, nije trivijalna) zaposlenika  Mogući veći troškovi ukoliko je potrebna  Nadzor i osiguranje poslovnih podataka - kontrola kompleksnija prilagodba aplikacija, ukoliko se one nad uređajem obično preko mobile device prebace u oblak management MDM softvera koji omogućuje  Usko grlo kod prijenosa podataka – mnoge poslodavcu kontrolu nad vitalnim komponentama aplikacije intenzivno rade s velikom količinom uređaja, ili ograničavanje kroz osobne ili podataka, pa je dobro smjestiti ih fizički što bliže aplikacijske omotače (wrappers) koji unutar tog tamo gdje su potrebni. okruženja omogućuju zaštitu na aplikacijskom nivou za jednu ili više aplikacija CASE27 79

 Firme mogu nuditi skup vlastitih atraktivnih alata za mogućnost hakiranja korisničkih računa), općenitost mobilne uređaje kako bi odvratili zaposlenika za prikaza podataka (ukoliko nije ugovorena mogućnost koristi neke druge aplikacije za poslovne filtriranja podataka po korisniku kako bi pojedinac vidio aktivnosti.[14] samo ono što i smije vidjeti), privatnost (ukoliko dođe do  Poštivanje zakona o radu koji regulira radno vrijeme neželjenog pristupa podacima, otkrivaju se poslovne ili – zaposlenik može raditi u bilo koje doba dana i privatne informacije/tajne).[12] [1] preko normalnog radnog opterećenja Rješenja ovih problema nalaze se u dijelom u SLA  Zaposlenici koriste više različitih uređaja, brže ih ugovoru s davateljima usluga, gdje će se jasno definirati mijenjaju, pa sustav treba osmisliti na način da prava i obaveze obje strane, edukaciji korisnika vezano bude dovoljno fleksibilan da može omogućiti uz čuvanje korisničkog imena i lozinke, te definiranju jednostavno preuzimanje aplikacija i konfiguraciju sigurnosne i poslovne politike o tome koji korisnik, kojeg MDM rješenja odjela smije pristupiti kojim podacima.  Podrška za razne vrste uređaja – treba voditi Sigurnosni rizici u poslovnom BYOD okruženju vezani računa o specifičnostima pojedinih uređaja, kao i o tome da se na tržište stalno izbacuju novi modeli. su uz nekoliko specifičnih područja: gubitak ili krađa fizičkog uređaja, proces autentikacije zaposlenika, pristup aplikacijama na uređaju i mrežni pristup. 4. SIGURNOST PODATAKA U OBLAKU Izgubljen ili ukraden uređaj može biti velika prijetnja PREKO BYOD sigurnosti informacijskog sustava. Aplikacije i osjetljivi podaci koji se nalaze na uređaju mogu biti Računarstvo u oblaku i BYOD su u osnovi kompleksni zloupotrijebljeni, pa bi zaposlenici trebali biti upućeni da koncepti koji svaki zasebno moraju rukovati mogućim odmah izvijeste firmu o gubitku/krađi uređaja. sigurnosnim problemima, no sad ih se promatra Zlouporaba uređaja može se spriječiti udaljenim zajedno. Problemi sigurnosti se obično povećavaju što brisanjem poslovnih aplikacija i podataka s uređaja. su informacijski sustavi kompleksniji. MDM (mobile device management) ima mogućnost Sigurnost podataka organizacije je puno širi aspekt u praćenja uređaja i udaljenog brisanja. Pristup i nadzor kojem se postavlja pitanja tko i na koji način može doći nad uređajem može otvoriti drugi problem: narušavanje do podataka. Bez obzira na napredne sustave za privatnosti zaposlenika. Najjednostavniji primjer je provjeru korisnika uvijek postoji mogućnost da će doći praćenje i bilježenje njegove lokacije.[11] Drugo rješenje do sigurnosnih propusta. je MAM (mobile application management) koji može Kod prebacivanja cijelog ili dijela informacijskog sustava odvojiti poslovne i privatne aplikacije i raditi nadzor na u oblak javljaju se novi sigurnosni rizici na koje bi aplikativnoj razini. trebalo obratiti pažnju. U oblaku su identificirane 3 šire Proces autentikacije zaposlenika prilikom korištenja klase rizika: tradicionalni sigurnosne prijetnje, prijetnje poslovnih aplikacija i pristupa osjetljivim informacijama, koji se odnose na dostupnost sustava i prijetnje vezane trebao bi imati jake sigurnosne mehanizme autentikacije uz kontrolu nad podacima od strane trećih pružatelja i enkripcije. Najčešći problem zaposlenicima je često usluga. unošenje lozinke, koja radi sigurnosti treba imati brojke, Tradicionalni sigurnosni problemi uključuju zaštitu velika i mala slova. Kod uređaja na dodir to iziskuje infrastrukture na strani korisnika, s posebnim naglaskom dosta strpljenja, pogotovo ukoliko su ti unosi česti. na konekciju izvan vatrozida, zaštitu procesa Navika brzog i jednostavnog korištenja uređaja mogla bi biti uzrok brisanja ili zaobilaženja postavljenih autentikacije i autorizacije, pri čemu se može voditi [11] računa o raznim nivoima privilegija, podijeljenim prema sigurnosnih mehanizama na uređaju. ulogama u organizaciji. Prijelazom u oblak, trebalo bi Korisnikova okolina može utjecati na aplikaciju. Npr. ažurirati i internu sigurnosnu politiku. Tradicionalni dijete uzme uređaj prijavljen u aplikaciju bez sigurnosni problemi pojavljuju se i za davatelje usluga korisnikovog znanja te izbriše bitne podatke. Aplikacije oblačnog računarstva. na uređajima koje se instaliraju u privatne svrhe mogu Prijetnje koje se odnose na dostupnost sustava vezane biti nesigurne i ugroziti i sigurnost poslovnih podataka. su uz moguće greške u sustave, ispade sustava, Također je pitanje da li učitani dokumenti ostaju pod katastrofe, te druge događaje zbog kojih usluge u kontrolom aplikacije, ili im se može pristupiti i izvan [13] oblaku neće biti dostupne duže vrijeme. Također kod nje. ogromnih kompleksnih sustava kao što je oblak, teže je Mrežni pristup bi morao osiguravati enkripciju prijenosa predvidjeti sve interakcije među komponentama kao i podataka između mobilnog uređaja i mreže, te je njihove performanse. Veće promjene, kao i dodavanje dodatno pitanje mogu li svi uređaji osigurati siguran novih komponenti, proširenje usluga ili transfer na noviju prijenos podataka. tehnologiju povećavaju rizik od greške. Edukacijom korisnika može se izbjeći dio sigurnosnih Kontrola nad podacima od strane trećih pružatelja propusta, te smanjiti mogućnost krađe uređaja. Stroga usluga je problematična zbog nedostatka sigurnosna pravila mogu značiti gubitak udobnosti i transparentnosti i limitirane korisnikove kontrole. brzinu rada na uređaju, pa ih treba pažljivo balansirati. Podugovori koje davatelji usluga međusobno ugovaraju nisu dostupni korisnicima i korisnici ne mogu kontrolirati Dobrom konfiguracijom uređaja mogu se zaštititi podaci: što se s podacima događa. Postavlja se pitanje jesu li provjera trajanja aktivnosti - ukoliko korisnik ne dira podaci stvarno izbrisani nakon odlaska kod novog uređaj određeno vrijeme onda se može napraviti davatelja i raskida ugovora s prethodnim. Uz to, automatsko odjavljivanje, instalacija aplikacija unutar nesigurni API-ji i curenje podataka samo su dio kontejnera nad kojim bi se mogla vršiti udaljena sigurnosnih rizika.[8] kontrola, te dopuštanje kontrole nad uređajem, tako da se udaljeno mogu kontrolirati i izbrisati vitalni podaci. Neki od primjera sigurnosnih problema u oblaku: gubitak podataka ukoliko nije ugovoren backup istih, dostupnost Sigurnost podataka u oblaku preko BYOD uključuje podataka od svuda i sa bilo kojeg uređaja (postoji veća promišljanje o zajedničkim faktorima rizika, a pogotovo treba promatrati onaj dio poslovanja gdje se ti koncepti 80 CASE27 spajaju. Pristup podacima u oblaku korištenjem vlastitog razvijanja ukoliko se aplikacija razvija u vlastitoj firmi, ili uređaja je rizičan u sljedećim dijelovima: se razvoj prebacuje na vanjsku firmu i programere, te  automatska prijava u oblak, gdje su osjetljivi podaci podržanost tehnologije na različitim platformama. odmah dostupni Mobilni uređaji imaju različite operacijske sustave,  prijava u sustav kroz aplikaciju – automatski različite veličine ekrana, različita svojstva i dodatke. spremljeni korisnički podaci za lakšu prijavu Razvoj mobilne aplikacije koja će se izvršavati na  odjava nije automatska nakon dužeg perioda mnogim uređajima, te platformama različitih mogućnosti neaktivnosti je opsežan posao. Ukoliko se radi aplikacija za svaki  krađa uređaja uređaj zasebno, postavlja se pitanje isplativosti, obzirom  prijenos podataka nije kriptiran da se stalno izbacuju nove verzije mobilnih uređaja.  podaci u oblaku nisu kriptirani Drugo rješenje je prebacivanje aplikacija i podataka koji  privatni i poslovni podaci na uređaju nisu odvojeni su inače pohranjeni na mobilnim uređajima, na servere  nisu osigurani različiti nivoi dopuštanja pristupa koji se izvršavaju u oblaku. Na taj način korisnici mogu podacima pristupiti aplikaciji i podacima preko preglednika koji se Navedeni rizici se mogu svesti na minimum uvođenjem izvršavaju na različitim mobilnim uređajima. Pri tom se sigurnosne politike u koju će se ugraditi ranije navedeni procesiranje i smještanje podataka događa izvan koraci zaštite. Kod prelaska na računarstvo u oblaku u mobilnih uređaja, a na mobilni uređaj se šalje samo [2] BYOD okruženju potrebno je prije svega sve rizike uzeti prikaz. u obzir, te, između ostalog, na temelju toga donijeti Postoji nekoliko mogućih strategija razvoja aplikacija: strategiju uvođenja.  razvoj nativnih mobilnih aplikacija – pišu se za svaki tip uređaja zasebno, te ovise o podržanom 5. MIGRIRANJE POSTOJEĆEG programskom jeziku i operativnom sustavu. Razvoj INFORMACIJSKOG SUSTAVA U takvog sustava je skuplji, ali svaka aplikacija može SUSTAV U OBLAKU U BYOD nuditi maksimalnu funkcionalnost i domaće okruženje (standardno ponašanje aplikacije u OKRUŽENJU okruženju operativnog sustava).  razvoj web aplikacija – obzirom da današnji mobilni Prilikom postupka prelaska na računarstvo u oblaku i uređaji imaju web preglednike, cijela strategija BYOD mogući su problemi. U prethodnom poglavlju su razvoja može se temeljiti na web aplikacijama za navedeni sigurnosni rizici o kojima treba voditi računa, a tanke klijente. Klijentsko sučelje se bazira na vezani su uz sigurnost poslovnih podataka u oblaku, te tehnologijama koje su podržane kroz sve ili većinu sigurnost podataka, aplikacija i prijenosa podataka operativnih sustava: HTML, CSS i Javascript.[10] prilikom pristupa podacima s nekog mobilnog uređaja. Postoje framework okruženja koja se koriste kako Jedan od većih problema na kojeg se može naići je bi se smanjio raskorak između web i mobilnih edukacija korisnika za nova pravila poslovanja, te za platformi. Ukoliko se mobilne aplikacije promatraju novi način korištenja sustava. Osim toga, brisanjem kao tanki klijenti, onda se razvija glavna centralna granica poslovnog i privatnog okruženja, pojavljuju se aplikacija koja će komunicirati sa ostalim dodatne komplikacije kao na primjer plaćanje troškova aplikacijama putem "json" ili "xml" datoteka. Danas osobnog računa telekomunikacija zaposlenika. Uz se većina startupova pokreću u tim tehnologijama potpisivanje ugovora sa zaposlenikom, dogovorno se baš zato što svaki uređaj može s njima jednostavno može odrediti tko plaća navedene troškove. surađivati, dovoljno je imati web preglednik. Struktura postojećeg informacijskog sustava kod  razvoj hibridnih aplikacija – kreiraju se jednom, te prelaska na oblak i BYOD, mora se prilagoditi novim postavljaju na različite mobilne uređaje. Nativna, tehnologijama. Klasičan pristup informacijskom sustavu mobilna aplikacija u oblaku, izvršava sve ili neke od i korištenje aplikacija zamijenit će se pristupom korisničkih sučelja u mobilnom pregledniku informacijama u oblaku preko mobilnih uređaja, tableta i Neki od pristupa koje se koriste u razvoju mobilnih raznih hibrida. aplikacija su: MCC (Mobile Cloud Computing), MEAP Sa financijskog aspekta, najčešće je prilagodba starih (Mobile Enterprise Application Platform), "prvo mobilni" rješenja veći trošak, nego razvoj novog projekta od nule. ("mobile-first"). Ukoliko se krene razvijati novo rješenje, nova strategija Mobile Cloud Computing (MCC) je paradigma koja nudi se može lakše primjenjivati. potpuno drugačiji pristup u kreiranju mobilnih aplikacija - Razvoj i prilagođavanje aplikacija različitim vrstama bogate mobilne aplikacije koje bi se dinamički mobilnih uređaja postaje izazov. Razvoj aplikacija za prilagođavale radnoj okolini prema značenju sadržaja. najčešće korištene uređaje, može uvjetovati Radije nego da se svi izračuni i podatkovne operacije zaposlenicima korištenje propisanih tipova uređaja. rade lokalno, MCC bi iskoristio prednosti oblačne Međutim, ukoliko se uvjetuju određene karakteristike platforme za prikupljanje, smještanje i procesiranje uređaja, potrebne za normalan rad sa poslovnim podataka za mobilne uređaje. Arhitektura MCC-a aplikacijama, organizacija bi trebala osigurati takav definira načine na koji su mobilni uređaji povezani i u uređaj zaposlenicima čiji postojeći uređaji ne interakciji su sa oblakom. Obzirom na to, spominje se zadovoljavaju te karakteristike. tradicionalni centralizirani oblak, zatim oblačić (server bogat resursima, s pristupom internetu i povezan s mobilnim uređajima kroz lokalnu mrežu (LAN)), te ad- 6. RAZVIJANJE SOFTVERSKIH RJEŠENJA hoc mobilni oblak, gdje susjedni mobilni uređaji skupa U OBLAKU ZA BYOD OKRUŽENJE dijele resurse. Računarstvo u oblaku proširuje mogućnosti mobilnih uređaja u tri aspekta: računanju, Softverska rješenja u oblaku moraju podržavati širok smještaju podataka i mreži. [7] raspon uređaja, ukoliko se radi u BYOD okruženju. Kod MEAP se koristi kao mobilni middleware koji povezuje razvoja aplikacija za BYOD treba definirati razvojne krajnji izvod podataka (velike aplikacije i baze) s alate i tehnologiju, financijski model - isplativost CASE27 81 mobilnim uređajem, te također nudi skup razvojnih alata povezanosti, te se taj razvoj odražava i na ostala HTML/CSS/Javascript i RAD alate 4.generacije. Mobilne područja ljudskog djelovanja, među ostalim i na aplikacije razvijene kroz MEAP mogu se isporučiti s područje poslovnog okruženja. Poslovni sustavi, kao i centralnog servera mobilnim uređajima bez obzira na njihovi informacijski sustavi prilagođavaju se navedenim OS, bez ponovnog prepravljanja koda za svaki uređaj. trendovima, maksimalno ih nastojeći iskoristiti u [3] poboljšavanju rezultata poslovanja. Pri tom, cjelokupno "Prvo mobilni" je i strategija i novi način pisanja koda. ili djelomično prebacivanje poslovanja u oblak nosi sa Umjesto pregleda desktop verzije web sjedišta na sobom određene tehnološke i financijske prednosti. mobilnim uređajima, s nekim prilagodbama, korisnici Računarstvo u oblaku i BYOD se međusobno pregledavaju web sjedišta specijalno kreirana za njihove nadopunjuju osiguravajući korisnicima ugodan rad bez mobilne uređaje. Radi se o novom načinu planiranja UX razmišljanja o tome odakle se pokreću aplikacije i gdje (user experience) dizajna, koji uređaje stavlja ispred se nalaze podaci, s koje lokacije i kad mogu pristupiti strategije i implementacije. Dizajneri moraju voditi podacima. Obzirom da zaposlenici mogu koristiti vlastite računa o korisnicima koji koriste različite kontekste. mobilne uređaje, te brzo pristupiti svježim Tekst bi trebao biti lakši za čitanje i navigaciju, informacijama, povećava se produktivnost i agilnost u fotografije i mape lako dostupne i sav sadržaj namješten poslovanju. da se ispravno prikazuje na uređaju s kojeg korisnik [6] Migracija na računarstvo u oblaku uz BYOD uz pristupa. postojeću tehnologiju ne mora biti preteška, ukoliko se Prilikom razvoja softverskih rješenja za BYOD i oblak, prvo napravi strategija prebacivanja poslovanja u oblak, treba voditi računa o prednostima i nedostacima jednog te odabere prikladna strategija razvoja aplikacija kojima i drugog koncepta, o sigurnosti, te o specifičnostima u bi trebale pristupati različite vrste uređaja. Jednostavno okvirima kojih oba koncepta trebaju zajedno egzistirati. rješenje je kreiranje aplikacije u oblaku kojoj se pristupa preko web preglednika. Kod navedene migracije 7. ZAKLJUČAK obavezno je donošenje sigurnosne politike koja bi trebala obuhvatiti zaštitu od novih sigurnosnih rizika koji Informacijska i komunikacijska tehnologija razvija se u se pojavljuju u specifičnim oblačnim i BYOD okvirima. smjeru iskorištavanja sve veće komunikacijske Literatura:

1 Chellakari,K., Developing a BYOD Strategy: Weigh the Risks, Challenges and Benefits, http://searchsecurity.techtarget.com/feature/Developing-a-BYOD-Strategy-Weigh-the-Risks-Challenges-and-Benefits (15.04.2015) 2 Claybrook,B., Cloud infrastructure for mobile application development, http://searchcloudapplications.techtarget.com/tutorial/Cloud-infrastructure-for-mobile-application-development, (2.05.2015.) 3 Claybrook,B., Using a MEAP to develop mobile applications, http://searchcloudapplications.techtarget.com/tip/Using-a-MEAP-to-develop-mobile-applications (6.05.2015.) 4 Coyle,A.,Fergusson,S., Top two barriers to mobility uncover employees’ lack of trust in employer and concern for privacy, http://www.adaptivemobile.com/press-centre/press-releases/top-two-barriers-to-mobility-uncover- employees-lack-of-trust-in-employer-an (16.04.2015) 5 Drayton,S., The Advantages and Disadvantages of BYOD, http://www.optimussourcing.com/learninghintsandtips/the-advantages-and-disadvantages-of-byod (20.04.2015) 6 Graham,R., Mobile First: What Does It Mean?, http://www.uxmatters.com/mt/archives/2012/03/mobile-first-what- does-it-mean.php, (6.05.2015.) 7 Liu,F., Shu.P. , Jin,H., Ding, L., Yu,J., Gearing resource-poor mobile devices with powerful clouds: architectures, challenges, and applications, University Of Science And Technology, 2013 8 Marinescu,D.C.: Cloud Computing,Theory and Practice, Elsevier Inc, 2013. 9 Mell,P., Grance,T.: The NIST Definition of Cloud Computing, NIST, Gaithersburg, MD 20899-8930, http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf, (20.3.2015.) 10 Nolle,T.: Optimizing the cloud for the BYOD movement, http://searchcloudcomputing.techtarget.com/tip/Optimizing- the-cloud-for-the-BYOD-movement (20.04.2015) 11 Phifer, L.: BYOD security strategies: Balancing BYOD risks and rewards, http://searchsecurity.techtarget.com/feature/BYOD-security-strategies-Balancing-BYOD-risks-and-rewards (30.04.2015) 12 Rhoton,J: Cloud computing Explained: Implementation handbook for enterprises, Velika Britanija, 2010. 13 Strom,D.: Bring your own device policy: Six questions to ask security providers, http://searchsecurity.techtarget.com/tip/Bring-your-own-device-policy-Six-questions-to-ask-security-providers (30.04.2015.) 14 Zumerle,D.: Security Think Tank: BYOD security: policy, control, containment, and management, http://www.computerweekly.com/opinion/Iscuriti-Think-Tank-BYOD-security-policy-control-containment-and- management (16.04.2015)

82 CASE27

Podaci o autorima:

Vlatka Davidović [email protected]

Dijana Liverić [email protected]

Poslovni odjel, Studij informatike, Veleučilište u Rijeci, Trpimirova 2/V 51000 Rijeka, Hrvatska

Daniele Milani [email protected] Fakultet ekonomije i turizma “dr. Mijo Mirković”, Studij informatike Sveučilište Jurja Dobrile u Puli, 52100 Pula, Hrvatska

Conference@Net inovativno rješenje za upravljanje organizacijom konferencija integrirano s društvenim mrežama i dostupno na uređajima upravljanim dodirom

www.conferenceatnet.com

Microsoft eMotion Interactive Motion and gesture PersonRecog Kinect detection controlled

CITUS d.o.o. Dragutina Golika 63, Zagreb http://www.citus.hr [email protected]