usluge s lokacijski označenim sadržajem - FER-a - Sveučilište u ...

usluge s lokacijski označenim sadržajem - FER-a - Sveučilište u ... usluge s lokacijski označenim sadržajem - FER-a - Sveučilište u ...

06.04.2015 Views

SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 3117 USLUGE S LOKACIJSKI OZNAČENIM SADRŽAJEM Matej Gjurković Zagreb, srpanj 2009.

SVEUČILIŠTE U ZAGREBU<br />

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA<br />

DIPLOMSKI RAD br. 3117<br />

USLUGE S LOKACIJSKI OZNAČENIM<br />

SADRŽAJEM<br />

Matej Gjurković<br />

Zagreb, srpanj 2009.


Mentor rada: doc. dr. sc. Mario Kušek<br />

Voditelj rada: doc. dr. sc. Mario Kušek<br />

iii


Sadržaj<br />

Uvod........................................................................................................................................... 1<br />

1. Usluge s <strong>lokacijski</strong> označenim sadržajem.......................................................................... 2<br />

1.1. Pozicioniranje pokretnog uređaja............................................................................... 2<br />

1.2. Lokacijsko označavanje ............................................................................................. 4<br />

1.3. Lokacijsko kodiranje .................................................................................................. 6<br />

2. Java na malim uređajima.................................................................................................... 9<br />

2.1. Izvođenje Javinih aplikacija na malim uređajima ...................................................... 9<br />

2.2. Programska okolina J2ME ....................................................................................... 10<br />

2.2.1. Connected Device Configuration..................................................................... 11<br />

2.2.2. Connected Limited Device Configuration ....................................................... 12<br />

2.3. MIDlet ...................................................................................................................... 13<br />

3. Ostale korištene tehnologije............................................................................................. 16<br />

3.1. Servleti ..................................................................................................................... 16<br />

3.1.1. SIP servlet ........................................................................................................ 17<br />

3.2. SailFin ...................................................................................................................... 19<br />

3.3. IMS Location Server ................................................................................................ 22<br />

4. Realizacija <strong>usluge</strong>............................................................................................................. 24<br />

4.1. Programsko sučelje <strong>usluge</strong> Flickr ............................................................................ 25<br />

4.2. Programsko sučelje Google Static Maps.................................................................. 30<br />

4.3. Implementacija ......................................................................................................... 31<br />

5. Korištenje <strong>usluge</strong>.............................................................................................................. 45<br />

6. Zaključak.......................................................................................................................... 50<br />

Literatura .................................................................................................................................. 51<br />

Dodatak A: Instalacija programske podrške ............................................................................ 52<br />

iv


Uvod<br />

Napretkom pokretnih mreža i uređaja, kao i razvojem tehnologija pozicioniranja iste su<br />

postale pristupačnije širem broju korisnika i omogućile razvoj novih, inovativnih usluga.<br />

Bogate komunikacijske i višemedijske mogućnosti pokretnih uređaja s jedne strane i pokretne<br />

mreže nove generacije s druge strane omogućile su stvaranje, prijenos i prikazivanje bogatog<br />

višemedijskog sadržaja u pokretu. Informacije dodane sadržaju koje ga pobliže opisuju čine<br />

podlogu za stvaranje brojnih kontekstno zasnovanih usluga.<br />

Posebno zanimljiva kategorija takvih usluga su <strong>usluge</strong> s <strong>lokacijski</strong> označenim sadržajem koje<br />

omogućuju stvaranje i isporuku informacijskog sadržaja na temelju konteksta lokacije<br />

korisnika. Korisnici koji stvaraju sadržaj uglavnom ga žele podijeliti s drugim ljudima. Ta<br />

potreba je vrlo brzo uočena što je potaknulo stvaranje brojnih društvenih usluga i usluga za<br />

razmjenu višemedijskog sadržaja. Lokacijsko označavanje sadržaja je postalo sastavni dio<br />

takvih usluga.<br />

Cilj ovog rada je bio obraditi temu usluga s <strong>lokacijski</strong> označenim sadržajem, proučiti<br />

tehnologije koje se koriste u takvim uslugama te potom pokazati izvedivost <strong>usluge</strong> u<br />

praktičnom dijelu rada.<br />

U prvom poglavlju rada je pojašnjeno što su to <strong>usluge</strong> s označenim sadržajem, koji su načini<br />

dohvaćanja lokacije i kako se pomoću nje označuje ili pretražuje sadržaj. Drugo poglavlje je u<br />

potpunosti posvećeno J2ME (Java 2 Micro Edition) [1] tehnologiji koja omogućava razvoj i<br />

izvođenje klijentskih aplikacija na malim uređajima. Treće poglavlje obrađuje tehnologije<br />

korištene za izradu dijela <strong>usluge</strong> koji omogućuje lociranje korisnika od strane mreže<br />

korištenjem protokola SIP (Session Initiation Protocol) [2]. Zadnja dva poglavlja pružaju uvid<br />

u implementaciju konkretne <strong>usluge</strong> s <strong>lokacijski</strong> označenim sadržajem razvijene u sklopu rada<br />

te sve informacije potrebne za uspješno korištenje <strong>usluge</strong>.<br />

1


1. Usluge s <strong>lokacijski</strong> označenim sadržajem<br />

Usluge s <strong>lokacijski</strong> označenim sadržajem su <strong>usluge</strong> koje se služe lokacijom korisnika kao<br />

kontekstom za stvaranje i isporuku sadržaja. U nastavku rada će biti detaljnije pojašnjeni<br />

načini dobivanja lokacije te postupci lokacijskog označavanja sadržaja i lokacijskog kodiranja<br />

koji zajedno čine osnovnu usluga s <strong>lokacijski</strong> označenim sadržajem.<br />

1.1. Pozicioniranje pokretnog uređaja<br />

Osnovna informacija potrebna za pružanje <strong>lokacijski</strong>h usluga je pozicija korisnika odnosno<br />

njegovog pokretnog uređaja. Postoji više metoda pozicioniranja koje se koriste s obzirom na<br />

trenutnu lokaciju korisnika i mogućnosti koje posjeduje njegov pokretni uređaj [3]. Općenito<br />

se metode za pozicioniranje mogu podijeliti na:<br />

• mrežno-zasnovano pozicioniranje,<br />

• pozicioniranje uz pomoć pokretnog uređaja i<br />

• hibridno pozicioniranje.<br />

Mrežno-zasnovano pozicioniranje<br />

Mrežno-zasnovano pozicioniranje je temeljeno na proračunima vezanima uz mjerenje snage<br />

signala koje bazne stanice primaju, kutu dolaznog signala odnosno vremenu potrebnom za<br />

propagiranje signala. Osnovne metode pozicioniranja koje se koriste su:<br />

• metode zasnovane na identifikaciji ćelije (Cell-ID),<br />

• vrijeme dolaska signala (TOA – Time of Arrival) i<br />

• kut dolaznog signala (AOA – Angle of Arrival).<br />

Identifikacija ćelije koristi oznaku ćelije kao osnovnu lokacijsku informaciju u pokretnoj<br />

mreži. Metode zasnovane na njima pronalaze korisnika unutar određene ćelije što direktno<br />

znači da preciznost ovisi o veličini ćelije u kojoj se korisnik nalazi odnosno o gustoći baznih<br />

stanica. Zbog te činjenice osnovna metoda (Cell Global Identity) je izrazito neprecizna jer u<br />

slučaju ruralnih područja polumjer ćelije može iznositi i tridesetak kilometara. Preciznost<br />

metode može se poboljšati tako da se ćelija podijeli u više sektora koristeći usmjerene antene.<br />

2


Vrijeme dolaznog signala (TOA) je metoda koja za određivanje pozicije pokretne stanice<br />

koristi kašnjenje signala na nekoliko susjednih baznih stanica, a kojih mora biti minimalno tri.<br />

Za korištenje metode je potrebno nadograditi mrežu s pokretnim <strong>lokacijski</strong>m centrom (MLC-<br />

Mobile Location Centre) te opremiti bazne stanice s lokacijskom mjernom jedinicom (LMU –<br />

Location Measurement Unit). LMU se koristi za mjerenje dolaska signala. Na temelju<br />

izmjerenih vrijednosti u MLC-u se izračunava sjecište kružnica određenih kašnjenjem koje<br />

predstavlja lokaciju pokretne stanice. Preciznost TOA je mnogo bolja od Cell-ID metode pa<br />

se pokretna stanica može detektirati s pogreškom od 50-200 metara.<br />

Kut dolaznog signala (AOA) je metoda zasnovana na određivanju smjera propagacije signala<br />

dobivenog od pokretne stanice. Smjer se određuje koristeći razliku kašnjenja dobivenu<br />

pomoću TDOA (Time Difference Of Arrival) na susjednim baznim stanicama za svaku u nizu<br />

antena bazne stanice. TDOA metoda je zapravo TOA koja koristi razliku, a ne apsolutnu<br />

vrijednost kašnjenja. AOA metodom se može postići pogreška do 100 metara.<br />

Pozicioniranje uz pomoć pokretnog uređaja<br />

Pozicioniranje pokretnog uređaja je moguće i bez pokretne mreže tj. uporabom GPS-a<br />

(Global Positioning System). GPS mreža je sastavljena od 31 satelita koje je u orbitu na visinu<br />

od 20,163 km postavilo američko ministarstvo obrane originalno za svoje potrebe, a koja je<br />

danas stavljena na uporabu svima koji je žele koristiti.<br />

Pozicija se određuje triangulacijom temeljenom na vremenu potrebnom da signal dođe od<br />

satelita do pokretnog uređaja. Dakle, potrebno je da GPS prijemnik hvata signal od bar tri<br />

satelita.<br />

Pozicioniranje uz pomoć GPS-a je vrlo precizno s pogreškom koja iznosi od 4-40 metara no<br />

postoje i neke mane. Prva mana je potreba za čistim horizontom za nesmetano primanje<br />

signala što izaziva probleme u klancima ili gradovima s visokim neboderima, uskim<br />

prometnicama i raznim preprekama. Drugi problem je potreba za popriličnom procesorskom<br />

snagom za obradu informacija dobivenih od satelita što automatski znači i veću potrošnju<br />

energije na pokretnim uređajima.<br />

Hibridno pozicioniranje<br />

Hibridna rješenja koriste kombinaciju mrežno-zasnovanog pozicioniranja i pozicioniranja<br />

zasnovanog na pokretnom uređaju. Tri osnovna hibridna rješenja su:<br />

• CGI + TA (Cell Global Identity+ Timing Advance);<br />

3


• E-OTD (Enhaced Observed Time Difference);<br />

• A-GPS (Assisted GPS).<br />

CGI-TA je poboljšana verzija osnovne metode CGI u kojoj se koristi činjenica da kašnjenje<br />

signala ovisi o udaljenosti pokretnog uređaja od bazne stranice. Pomoću toga fizikalni kanal<br />

GSM-a omogućuje razlikovanje udaljenosti pokretnog uređaja od bazne stanice u prstenima<br />

širine 550 metara čime se povećava preciznost, prvenstveno u ruralnim područjima. Kao i kod<br />

CGI metode veća preciznost se može postići sektorizacijom ćelije.<br />

Kod metode E-OTD se koristi triangulacija slično kao kod TDOA metode no u ovom slučaju<br />

pokretni uređaj mjeri vrijeme potrebno signalu da dođe s bazne stanice i onda izmjereno<br />

vrijeme šalje natrag do bazne stanice koje to i vrijeme kad je signal odaslan šalje MLC-u koji<br />

izračunava lokaciju korisnika. Greška metode je od 50-125 metara.<br />

A-GPS donekle rješava problem velikog utroška energije i procesorske snage na pokretnom<br />

uređaju jer zahtjevno računanje prepušta MLC-u. Lociranje je moguće čak i ako nisu<br />

dostupna tri satelita nužna za GPS lociranje jer MLC u tom slučaju koristi informaciju o<br />

lokaciji bazne stanice.<br />

1.2. Lokacijsko označavanje<br />

Lokacijsko označavanje (geotagging) [4] je proces kojim se dodaju lokacijske informacije<br />

različitim medijima poput fotografija, videa, internetskih stranica ili RSS (Really Simple<br />

Syndication) izvora podataka. Lokacijske informacije služe za predočavanje smještaja<br />

pridijeljenih medija u prostoru. Najčešće korišteni <strong>lokacijski</strong> podaci su geografska širina i<br />

dužina, smjer, visina te nazivi mjesta (adresa).<br />

Postoji više standarada označavanja zbog raznolikosti medija, a neki od njih su:<br />

1. označavanje JPEG fotografija pomoću formata EXIF (Exchangeable image file<br />

format) ili XMP (Extensible Metadata Platform),<br />

2. standardi korišteni u uslugama zasnovanim na webu (ICMB, RDF, MicroFormat),<br />

3. standardi korišteni u sustavima zasnovanim na oznakama (tag based systems) i<br />

4. standardi korišteni u web-dnevnicima.<br />

1) EXIF je najčešće korišten format za oblikovanje meta podataka o fotografijama u formatu<br />

JPEG. Podaci zapisani unutar njega nisu vidljivi na fotografiji no moguće ih je čitati ili<br />

4


zapisivati pomoću posebnih programa. Danas u sve više uređaja poput fotoaparata i skenera<br />

postoji programska podrška koja omogućava upis podataka o lokaciji u EXIF formatu.<br />

Tipičan EXIF zapis <strong>lokacijski</strong>h podataka izgleda ovako:<br />

GPSVersionID = 2 2 0 0<br />

- Tag 0x0000 (4 bytes, int8u[4]):<br />

dump: 02 02 00 00<br />

GPSLatitudeRef = N<br />

- Tag 0x0001 (2 bytes, string[2]):<br />

dump: 4e 00 [ASCII "N\0"]<br />

GPSLatitude = 57 38 56.83 (57/1 38/1 5683/100)<br />

- Tag 0x0002 (24 bytes, rational64u[3]):<br />

dump: 00 00 00 39 00 00 00 01 00 00 00 26 00 00 00 01<br />

dump: 00 00 16 33 00 00 00 64<br />

GPSLongitudeRef = W<br />

- Tag 0x0003 (2 bytes, string[2]):<br />

dump: 57 00 [ASCII "W\0"]<br />

GPSLongitude = 10 24 26.79 (10/1 24/1 2679/100)<br />

- Tag 0x0004 (24 bytes, rational64u[3]):<br />

dump: 00 00 00 0a 00 00 00 01 00 00 00 18 00 00 00 01<br />

dump: 00 00 0a 77 00 00 00 64<br />

Program bi ovako zapisane podatke mogao prikazani na sljedeći način:<br />

GPSLatitude : 57.64911<br />

GPSLongitude : 10.40744<br />

2) Postoji više standarada za lokacijsko označavanje u web-zasnovanim uslugama, a izbor<br />

standarda koji će se koristiti ovisi o namjeni. Svima je zajedničko da su dizajnirani tako da bi<br />

se programski mogle detektirati lokacijske informacije zapisane pomoću njih.<br />

Metoda ICMB koju koristi standard GeoURL koristi se za lokacijsko označavanje<br />

standardnih web-stranica kodiranih u HTML-u koristeći oznaku ICMB koja sadrži geografske<br />

koordinate:<br />

<br />

Metoda RDF koju je definirala W3 grupa sadrži meta podatke o lokaciji unutar RDF oznaka,<br />

kao što se može vidjeti na sljedećem primjeru:<br />

<br />

50.123 12.345 <br />

<br />

5


Microformat također omogućava programsko prepoznavanje <strong>lokacijski</strong>h informacija unutar<br />

HTML stranica. Zapis lokacije pomoću Microformata izgleda ovako:<br />

<br />

50.123456;<br />

-12.345678<br />

<br />

3) U sustavima zasnovanim na oznakama još uvijek ne postoje industrijski standardi no<br />

većina takvih sustava koristi način označavanja predložen od strane web-stranice<br />

Geobloggers. Označavanje temeljeno na oznakama je pogodno za korištenje kod označavanja<br />

medija koji nisu producirani na uređajima koji imaju automatsko zapisivanje meta podataka<br />

poput npr. fotoaparata koji automatski zapisuju u EXIF meta podatke o lokaciji nakon<br />

slikanja. Tako je moguće npr. snimiti fotografije na pokretnom telefonu ili standardnom<br />

fotoaparatu i poslije ručno upisati lokaciju na kojima su te fotografije snimljene ili programski<br />

proslijediti podatke o lokaciji sustavu. Zbog toga je lokacijsko označavanje temeljeno na<br />

oznakama standardna mogućnost većine najpopularnijih usluga za razmjenu fotografija poput<br />

Flickra, Panoramia ili društvenih mreža poput del.icio.us.<br />

Takvi sustavi koriste takozvane strojne oznake (machine tags) koji geografske koordinate<br />

zapisuju u formatu WGS84 koji izgleda ovako:<br />

geotagged<br />

geo:lat=50.12345<br />

geo:lon=12.34567<br />

4) Lokacijsko označavanje u web-dnevnicima postaje sve popularnije u zadnje vrijeme.<br />

Napretkom tehnologije GPS ona postaje pristupačnija širem krugu korisnika. Sve češće<br />

korištenje GPS-a omogućuje korisnicima da sa svojih pokretnih uređaja vode web-dnevnike<br />

Ideja je da se omogući označavanje lokacije s koje je napisan neki unos. Glavna prednost<br />

lokacijskog označavanja dnevnika je da korisnici mogu pretraživati postojeće dnevnike po<br />

lokacijama koje ih zanimaju te ih prikazivati na interaktivnim kartama. Način označavanja je<br />

sličan prethodno navedenima, tj. koriste se lokacijske oznake.<br />

1.3. Lokacijsko kodiranje<br />

Lokacijsko kodiranje (geocoding) [5] je proces saznavanja geografskih koordinata na temelju<br />

različitih podataka o lokaciji poput adresa ili poštanskih brojeva. Postoji i suprotni proces u<br />

kojem se od geografskih koordinata saznaje adresa koji se naziva obrnuto lokacijsko<br />

6


kodiranje (reverse geocoding). Primjenjuju se u mnogobrojnim <strong>lokacijski</strong> zasnovanim<br />

uslugama, poput npr. saznavanja adresa benzinskih postaja najbližih trenutnoj lokaciji.<br />

Postoji više metoda lokacijskog kodiranja zbog različitih namjena, zahtjeva za preciznosti,<br />

odnosno zbog nemogućnosti primjene jedne metode s obzirom na postojeće podatke o<br />

određenim lokacijama. Primjerice, preciznost će biti vrlo bitna u slučaju da je potrebno brzo<br />

pronaći mjesto curenja plina iz plinovoda dok ona nije presudna kod prikaza označenih<br />

fotografija. Također nisu ni sve lokacije jednako dobro pokrivene mrežom ulica pa metode<br />

koje se koriste za gusto naseljena područja poput gradova nisu jednako primjenjive i za slabo<br />

naseljena područja.<br />

Svim metodama je zajedničko da je će biti preciznije ako se pruži što točnija adresa lokacije<br />

za koju se traže geografske koordinate. Npr. Zagrebačka ulica br. 3 postoji u više gradova pa<br />

ako se želi pronaći tu adresu u Velikoj Gorici mora se navesti i ime grada jer je inače moguće<br />

da se ne dobije očekivani rezultat. Analogno tome, neke ulice i gradovi postoje u više država<br />

pa je uputno navesti sve te podatke.<br />

Jedna od češće korištenih i jednostavnijih metoda je interpolacija adresa. Metoda koristi<br />

podatke geografskog informacijskog sustava (GIS) u kojem je mreža ulica označena<br />

geografskim koordinatnim sustavom. Ulice su podijeljene na segmente po grupama kućnih<br />

brojeva kojima su dodijeljeni određeni rasponi koordinata. Proces saznavanja koordinata se<br />

vrši na način da se od ulaznog podatka, adrese, uzme naziv ulice koji se uspoređuje s<br />

nazivima ulica u mreži ulica te kućni broj koji se uspoređuje s pojedinim segmentima ulice.<br />

Kad se pronađe segment tražene lokacije, interpolacijom položaja se dobiju geografske<br />

koordinate.<br />

Primjerice, ako jedan segment Ilice (ulica u Zagrebu) ima raspon adresa od 100 do 200 te<br />

uzmemo u obzir da su parne adrese na južnoj strani ulice, a neparne na sjevernoj i ako tražimo<br />

poziciju s adresom Ilica 151, koordinate dobivene interpolacijom adresa će smjestiti objekt s<br />

traženom adresom otprilike na sredinu segmenta sa sjeverne strane ulice.<br />

Metoda ima određene nedostatke koji izviru iz sljedećih pretpostavki koje direktno utječu na<br />

preciznost određivanja lokacije:<br />

• svi su parni brojevi s jedne strane ulice, a neparni s druge - u realnosti to često nije<br />

slučaj,<br />

• sve parcele su jednake veličine – u realnosti to skoro nikad nije točno,<br />

7


• postoje sve adrese iz maksimalnog raspona – npr. za zadnji segment ulice se računa<br />

da ima adrese od 500-600 no zadnja adresa koja se koristi je 512 te će se<br />

interpolirati kriva pozicija,<br />

• objekti su točkasto tijelo male površine – u realnosti je moguć slučaj npr. stadiona<br />

koji ima jednu adresu ali je jedan njegov kraj poprilično udaljen od drugog.<br />

Iz gore navedenog se može primjetiti da je metoda nedovoljno precizna za korištenje u<br />

aplikacijama na temelju kojih se donosi odluka o npr. spašavanju života unesrećenih ljudi,<br />

gdje i neznatno kašnjenje uzrokovano nepreciznošću može uzrokovati teške posljedice no za<br />

većinu drugih namjena je pogodna.<br />

Osim interpolacije adresa koriste se i druge metode poput npr. korištenja centralnih točaka<br />

parcela koje postoje u informacijskom sustavu u slučaju da je preciznost manje bitna ili<br />

preciznija podjela prometnica po segmentima koje odgovoraju tzv. kilometarskim oznakama<br />

na prometnicama za slučaj usluga za dojavu prometnih nesreća koje koriste ekipe hitne<br />

pomoći i vatrogasci.<br />

Postoje neki problemi u korištenju lokacijskog kodiranja koji proizlaze iz određenih namjena.<br />

Primjerice, u slučaju karata na kojima su pokazana mjesta zločina nepreciznost u određivanju<br />

lokacije može prouzročiti neugodnost ljudima koji sa samim zločinom nisu imali veze, a<br />

mjesto zločina je prikazano na njihovoj adresi.<br />

Danas postoji mnoštvo usluga za lokacijsko kodiranje, no s obzirom da se većina lokacijsko<br />

zasnovanih usluga nalazi na webu valja spomenuti Yahoo! GeoPlanet API i Google Maps API<br />

Geocoding Service koji se najviše koriste u takvim uslugama.<br />

8


2. Java na malim uređajima<br />

Posljedica naglog razvoja mobilnih tehnologija u posljednje vrijeme je nastanak mnoštva<br />

različitih malih uređaja prilagođenim svim vrstama korisnika i usluga. Upravo zbog te<br />

raznolikosti malih uređaja, njihovih mogućnosti i operacijskih sustava i činjenice da je<br />

neovisna o platformi Java je postala vodeći programski jezik za razvoj aplikacija za male<br />

uređaje. Pošto mali uređaji imaju ograničenu procesorsku moć, ograničenu količinu memorije<br />

te ograničenja ulazno-izlaznih jedinica, bilo je potrebno prilagoditi Java platformu da se može<br />

izvoditi na takvim uređajima. Reducirana verzija Jave za male uređaje je Java 2 Micro<br />

Edition (J2ME). Pod pojmom mali uređaji podrazumijevamo širok spektar uređaja s različitim<br />

mogućnostima, među kojima su npr. pokretni telefoni, ručna računala (PDA), pametni telefoni<br />

(engl. smart phones) i dr. S obzirom na raznolikost uređaja bilo je potrebno prilagoditi J2ME<br />

programsku okolinu, što se postiglo definirajući različite konfiguracije, profile i dodatne<br />

pakete koji su prilagođeni određenoj vrsti uređaja.<br />

2.1. Izvođenje Javinih aplikacija na malim uređajima<br />

Da bi se bolje razumjelo kako se Java izvodi na malim uređajima potrebno je prvo objasniti<br />

proces nastanka Java koda i izvođenja na Java 2 Standard Edition (J2SE) platformi. Kao<br />

vizualna pomoć može poslužiti Sl. 2.1.<br />

Sl. 2.1 Razvoj i izvođenje programa u Javi<br />

Vidimo da se prvo napiše izvorni kod u nekom uređivaču teksta. Prevodilac (engl. compiler)<br />

prevodi taj kod u međukod koji se u Javinom svijetu zove bajt-kod (engl. bytecode). Važnost<br />

međukoda je u činjenici da je prevodilac puno složeniji od pokretača aplikacija. Pošto se<br />

prevođenje odvija samo jednom dobiva se na brzini izvođenja aplikacija. Također, takav<br />

9


međukod je neovisan o platformi te se zbog toga može izvoditi na različitim operacijskim<br />

sustavima.<br />

Javin pokretač aplikacija (engl. Java Application Launcher) pokreće okolinu za izvršavanje<br />

aplikacija (engl. Java Runtime Environment, skraćeno JRE). JRE se sastoji od Javinog<br />

virtualnog stroja (engl. Java Virtual Machine), jezgrenih klasa i pratećih datoteka i pruža<br />

minimalnu okolinu potrebnu za izvođenje aplikacija. Zadaća pokretača aplikacija je da učita<br />

specificirane klase te poziva odgovarajuću metodu main koja pokreće aplikaciju. Prilikom<br />

učitavanja klasa Java virtualni stroj vrši verifikaciju međukoda.<br />

Upravo je u verifikaciji međukoda glavna razlika između izvođenja aplikacija na malom<br />

uređaju. Na Sl. 2.2 je prikazan proces razvoja Java aplikacije za mali uređaj. Može se<br />

primijetiti da se procesorski najzahtjevniji dio obavlja na osobnom računalu na kojem se<br />

razvija aplikacija. J2ME virtualni stroj vrši samo daleko jednostavnije, linearno pregledavanje<br />

međukoda prilikom učitavanja klasa.<br />

Sl. 2.2 Razvoj i izvođenje Javinih programa na malim uređajima<br />

2.2. Programska okolina J2ME<br />

Programsku okolinu J2ME čine konfiguracije, profili i dodatni paketi. J2ME konfiguracije su<br />

specifikacije koje definiraju programsku okolinu za skup uređaja sa zajedničkim<br />

karakteristikama poput:<br />

• vrste i brzine procesora,<br />

• vrste i količine memorije i<br />

• vrsta mrežnih konekcija dostupnih malom uređaju.<br />

Konfiguracija predstavlja minimalnu platformu za pojedinu skupinu uređaja, a sastoji se od<br />

kombinacije Java virtualnog stroja i osnovnih biblioteka funkcija koje čine osnovu za razvoj<br />

aplikacija namijenjenih nekoj vrsti uređaja.<br />

10


U nastavku su detaljnije opisane konfiguracije Connected Device Configuration (CDC) [6] i<br />

Connected Limited Device Configuration (CLDC) [7], te profili koji su dodani tim<br />

konfiguracijama. Profili dodaju specifične biblioteke funkcija konfiguraciji ovisno o<br />

konkretnoj vrsti uređaja i njegovoj namjeni.<br />

2.2.1. Connected Device Configuration<br />

Konfiguracija CDC je definirana u JSR-36 i namijenjena je grupi jačih malih uređaja koji<br />

imaju jači procesor, više memorije i bolji izbor konekcija. Ciljani uređaji kojima je<br />

namijenjen CDC moraju imati 32-bitni procesor, najmanje 2MB RAM-a i 2.5MB ROM-a<br />

raspoloživih za Java okolinu. Radi se o uređajima poput pametnih telefona, PDA uređaja,<br />

telematičkih sustava ugrađenih u vozila, kućne elektronike i dr.<br />

Java virtualni stroj je sličan onom iz J2SE platforme, no svojim zahtjevima prema resursima,<br />

performansama i pouzdanošću prilagođen malim uređajima.<br />

CDC ima bogatu biblioteku klasa koju minimalno čine:<br />

• java.lang – sadrži klase potrebne za funkcioniranje Java virtualnog stroja,<br />

• java.util – podskup općenitih metoda i sučelja iz J2SE ekvivalentnog paketa,<br />

• java.net – sadrži klase i sučelja za rukovanje TCP/IP i HTTP protokolima,<br />

• java.io – sadrži standardne klase za rukovanje ulazno-izlaznim jedinicama,<br />

• java.text – sadrži minimalne klase potrebne za lokalizaciju i internacionalizaciju<br />

aplikacije i<br />

• java.security – sadrži osnovne klase i sučelja za implementaciju sigurnosti.<br />

CDC podržava tri glavna profila i mnoštvo opcionalnih.<br />

Tri glavna profila su:<br />

• Foundation – biblioteka klasa zasnovanih na J2SE, ne sadrži podršku za GUI,<br />

• Personal Basis – sadrži Foundation profil uz dodatak podrške za lagane (engl.<br />

lightweight) komponente i Xlete koji su slični Java appletima no koji su dizajnirani<br />

za izradu aplikacija za digitalnu televiziju,<br />

• Personal – osim Personal Basis profila sadrži i punu podršku za GUI i applete.<br />

Opcionalni paketi uvode dodatne funkcionalnosti koje se ne pojavljuju u osnovnim profilima<br />

poput podrške za RMI (Remote Method Invocation) i JDBC (Java Database Connectivity).<br />

11


2.2.2. Connected Limited Device Configuration<br />

Konfiguracija CLDC je definirana u JSR-30 i JSR-139 i namijenjena je grupi slabijih malih<br />

uređaja koje karakterizira česti gubitak veze s mrežom, ograničena količina memorije, spori<br />

procesori i jako ograničene ulazno-izlazne jedinice. To su uređaji poput pokretnih telefona,<br />

pagera i manje naprednih ručnih računala. Minimalni uvjeti koje moraju zadovoljavati su:<br />

• 16 ili 32-bitni procesor brzine najmanje 16MHz,<br />

• 160KB na raspolaganju za Java virtualni stroj i njegove pripadajuće biblioteke, od<br />

kojih su 32KB izbrisive (engl. volatile) memorije, a ostalih 128KB neizbrisive<br />

(engl. non-volatile) ,<br />

• 192KB ukupno memorije dostupno Java okolini,<br />

• mogućnost spajanja na mrežu.<br />

Konfiguracija CLDC se sastoji od virtualnog stroja nazvanog Kilobytes Virtual<br />

Machine(KVM) veličine između 40 i 80KB, biblioteka osnovnih klasa iz J2SE, te dodatnih<br />

klasa koje ne postoje u J2SE. Može se reći da je CLDC konfiguracija podskup CDC<br />

konfiguracije, a sadrži sljedeće biblioteke klasa:<br />

• java.io – sadrži podskup osnovnih klasa iz ekvivalentnog J2SE paketa;<br />

• java.lang – sadrži klase potrebne za funkcioniranje Java virtualnog stroja;<br />

• java.util – podskup općenitih metoda i sučelja iz J2SE ekvivalentnog paketa ;<br />

• javax.microedition.io – klase za rukovanje ulazno-izlaznim jedinicama specifično<br />

napravljene za CLDC konfiguraciju.<br />

Za konfiguraciju CLDC postoji mnoštvo API-ja i profila, no detaljnije će biti opisan<br />

najpopularniji među njima – Mobile Information Device Profile (MIDP) [8].<br />

Trenutna verzija MIDP 2.0 definiran u JSR-118 je zamijenila MIDP 1.0 koji je bio definiran u<br />

JSR-37, dodajući mu nove funkcionalnosti poput poboljšanog korisničkog sučelja, podrške za<br />

multimediju i igre te bolju podršku za mrežne konekcije i sigurnost. MIDP podržavaju svi<br />

noviji pokretni uređaji pa postoji široka baza korisnika aplikacija zasnovanih na njemu.<br />

Razvijateljima aplikacija nudi mogućnosti manipuliranja kamerom, GPS-om, konekcijama<br />

preko GPRS/EDGE tehnologije te uz prije navedeno ne čudi što je upravo on danas<br />

najpopularniji profil.<br />

Uvjeti koje uređaj mora zadovoljavati da bi se na njemu mogle izvršavati MIDP aplikacije su:<br />

• ekran veličine 96x52 piksela,<br />

12


• dubina prikaza boja od 1 bita,<br />

• mora postojati tipkovnica ili ekran osjetljiv na dodir,<br />

• 128KB za MIDP aplikacije,<br />

• 8KB za trajno pohranjene podatke aplikacija,<br />

• 32KB memorije za izvršavanje i<br />

• dvosmjerna bežična mreža.<br />

MIDP se osim osnovnih CLDC paketa sastoji i od niže navedenih:<br />

• javax.microedition.lcdui – klase i sučelja za upravljanje prikazom,<br />

• javax.microedition.rms – Record Management System (RMS) koji služi za trajno<br />

pohranjivanje podataka,<br />

• javax.microedition.midlet – klase i sučelja namijenjene stvaranju MIDP aplikacija.<br />

2.3. MIDlet<br />

MIDlet (skraćeno od Mobile Information Device Application) je aplikacija koja se izvodi na<br />

uređajima koji podržavaju CLDC i MIDP. Jedan ili više MIDleta pakiranih u jedan JAR (Java<br />

Archive) čine MIDlet Suite.<br />

Razvojni ciklus MIDleta sastoji se od pet ili šest faza. To su redom:<br />

• pisanje koda – nužno je prvo proučiti dokumentaciju i naučiti se služiti<br />

bibliotekama dostupnim za razvoj MIDleta,<br />

• prevođenje koda u međukod – prevođenje vrši prevodilac (javac), rezultat<br />

prevođenja su .class datoteke,<br />

• predprovjera koda – traže se reference na klase koje MIDP ne podržava; cilj je<br />

smanjiti opterećenje KVM prilikom izvršavanja MIDleta jer on mora samo linearno<br />

provjeriti kod što ne traži puno resursa,<br />

• pakiranje u JAR – izvršne datoteke se pakiraju u jednu zajedničku datoteku u ZIP<br />

formatu,<br />

• stvaranje JAD datoteke – tekstualna datoteka koja služi za opis aplikacije,<br />

• potpisivanje MIDleta – uvedeno od verzije MIDP 2.0; olakšava definiranje<br />

sigurnosne politike izvršavanja MIDleta na malom uređaju, a korisniku olakšava<br />

korištenje jer ne mora svaki put iznova odobravati pristup zaštićenim API-jima.<br />

13


Svaki MIDlet nasljeđuje klasu javax.microedition.midlet.MIDlet koja definira tri apstraktne<br />

metode i koje definiraju njegov životni ciklus (Sl. 2.3):<br />

• pauseApp - MIDlet je inicijaliziran, no ne smije koristiti zajedničke resurse,<br />

• startApp – normalno fukncioniranje MIDleta,<br />

• destroyApp – završetak rada, oslobađanje svih resursa.<br />

Sl. 2.3 Životni ciklus MIDleta<br />

MIDlet se izvodi u okolini koju kontrolira aplikacijski upravitelj (engl. application manager).<br />

Aplikacijski upravitelj je zadužen za instalaciju, izvršavanje, pauziranje i uništavanje MIDleta<br />

te omogućavanje pristupa pojedinim MIDletima do izvršnih datoteka Javinog virtualnog<br />

stroja odnosno CLDC-a. Također je zadužen i za dojavljivanje MIDletu ako se dogodi neki<br />

događaj na što se onda u njemu pokreću određene metode.<br />

Jedan takav događaj je i samo pokretanje MIDleta nakon kojeg će se pokrenuti metoda<br />

startApp koja tipično pokreće početni prikaz za odabir opcija korisniku. Ako korisniku npr.<br />

zazvoni pokretni telefon, aplikacijski upravitelj će pozvati metodu pauseApp koja će<br />

zaustaviti izvršavanje MIDleta. Moguća je situacija da MIDlet više nije potreban ili da nekoj<br />

prioritetnijoj aplikaciji treba memorijski prostor – ukoliko se to dogodi, aplikacijski upravitelj<br />

će pozvati metodu destroyApp čime će životni ciklus MIDleta biti završen.<br />

MIDlet se distribuira na uređaj u JAR datoteci koja sadrži sve izvršne (.class) datoteke i ostale<br />

za aplikaciju potrebne datoteke poput npr. slika i konfiguracijskih datoteka, no u pravilu<br />

dolazi i sa JAD (Java Definition) datotekom koja opisuje MIDlet.<br />

14


Da bi JAR datoteka bila izvršna, uz gore navedene datoteke, dolazi i posebna manifest<br />

datoteka koja između ostalog govori koja je glavna izvršna datoteka. Manifest datoteka se<br />

sastoji od više parova ime-vrijednost kojih ima devet, ali samo je šest obavezno. Ovako<br />

izgleda jedna takva datoteka (manifest.mf):<br />

Manifest-Version: 1.0<br />

MIDlet-Vendor: Midlet Suite Vendor //isporučitelj<br />

MIDlet-Version: 1.0.0 //verzija<br />

MIDlet-1: TestMIDlet,,hr.tel.fer.primjer.midlet. TestMIDlet //paket<br />

MicroEdition-Configuration: CLDC-1.1 //vrsta konfiguracije<br />

MIDlet-Name: TestMIDlet Midlet Suite //ime<br />

MicroEdition-Profile: MIDP-2.0 //vrsta profila<br />

JAD datoteka se koristi za prosljeđivanje parametara MIDletu bez modificiranja JAR datoteke<br />

i za pružanje dodatnih informacija o JAR datoteci aplikacijskom upravitelju koje mu između<br />

ostaloga govore može li se MIDlet pokrenuti na dotičnom uređaju.<br />

Struktura unutar JAD-a je slična kao kod manifest datoteke, a neka polja poput imena, verzije<br />

i isporučitelja moraju odgovarati onima iz manifest datoteke.<br />

Jedna takva datoteka (TestMIDlet.jad) izgleda ovako:<br />

MIDlet-1: TestMIDlet,,hr.tel.fer.primjer.midlet.TestMIDlet t //paket<br />

MIDlet-Jar-Size: 4306 //veličina JAR datoteke<br />

MIDlet-Jar-URL: TestMIDlet.jar<br />

MIDlet-Name: TestMIDlet Midlet Suite<br />

MIDlet-Vendor: Midlet Suite Vendor<br />

MIDlet-Version: 1.0.0<br />

MicroEdition-Configuration: CLDC-1.1<br />

MicroEdition-Profile: MIDP-2.0<br />

Polje MIDlet-Jar-URL je zanimljivo jer omogućava da se na malom uređaju pokrene samo<br />

JAD datoteka, a da se JAR naknadno skine preko mreže.<br />

15


3. Ostale korištene tehnologije<br />

3.1. Servleti<br />

Servleti [9] su komponente napisane u Javi koje se izvode na poslužiteljskoj strani i koje<br />

dinamički obrađuju zahtjeve klijenata i stvaraju odgovarajuće odgovore na te zahtjeve.<br />

Ubrzo nakon što se web počeo koristiti za <strong>usluge</strong>, prepoznata je potreba za stvaranje<br />

dinamičkog sadržaja. Jedan od prvih pokušaja u ostvarivanju tog cilja su bili Java-appleti koji<br />

su se izvodili na klijentskoj strani i omogućavali interakciju s korisnicima. Otprilike u isto<br />

vrijeme su se počele koristiti CGI (Common Gateway Interface) skripte koje su se izvodile na<br />

poslužiteljskoj strani i omogućavale dinamičko generiranje sadržaja. Iako vrlo popularne,<br />

imale su mnogo nedostataka poput ovisnosti o platformi te loše skalabilnosti. Da bi se riješili<br />

ti problemi razvijeni su servleti koji pružaju dinamički sadržaj, a mogu su se izvoditi na<br />

različitim platformama.<br />

Kao i svaki drugi Java kod, da bi se mogao izvršavati servlet se mora prevesti u međukod.<br />

Servleti se izvršavaju na aplikacijskom poslužitelju koju učitava i pokreće datoteke servleta.<br />

Dio aplikacijskog poslužitelja koji upravlja životnim vijekom servleta, prihvaća zahtjeve od<br />

klijenata i šalje odgovore generirane u servletu naziva se servlet kontejner.<br />

Servlet kontejner može biti ugrađen u poslužitelj ili instaliran kao njegova dodatna<br />

komponenta, a izvoditi se može unutar istog procesa kao poslužitelj, drugog procesa unutar<br />

računala ili na nekom drugom računalu.<br />

Svaki servlet mora implementirati sučelje Servlet iz paketa javax.servlet. Sučelje propisuje<br />

metode koje definiraju životni vijek servleta, a koji se odvija u sljedećim koracima :<br />

1. Servlet se instancira i učitava u kontejner prilikom pokretanja kontejnera;<br />

2. Kontejner poziva init() metodu koja inicijalizira servlet. Metoda init() se pokreće<br />

samo jednom, a nužna je da bi servlet mogao početi primati zahtjeve;<br />

3. Normalni rad servleta. Servlet može primati zahtjeve koji se poslužuju u zasebnim<br />

nitima. Servletu zahtjeve prosljeđuje kontejner koji prilikom dolaska zahtjeva poziva<br />

metodu service() koja služi za razvrstavanje zahtjeva po tipu i koja zove<br />

16


odgovarajuće metode zadužene za obradu tih zahtjeva. Za implementaciju tih metoda<br />

je zadužen programer, a ukoliko to ne učini, pozvat će se metode nadklase što će<br />

rezultirati slanjem poruke o grešci klijentu koji je poslao zahtjev;<br />

4. Životni vijek servleta završava pozivanjem metode destroy() od strane kontejnera.<br />

Metoda destroy() se kao i metoda init() poziva samo jednom.<br />

Ilustraciju životnog ciklusa servleta možete vidjet na Sl. 3.1.<br />

Sl. 3.1 Životni ciklus servleta<br />

Tehnologija servleta je u početku razvijana za HTTP. Prvotna specifikacija servleta naglašava<br />

da servlet kontejner mora podržavati protokol HTTP. Pošto se u ovom radu koriste SIP<br />

servleti koji su slični HTTP servletima, objasnit će se njihov način rada, a eventualne razlike<br />

između njih će biti spomenute.<br />

3.1.1. SIP servlet<br />

SIP servlet [10] je komponenta temeljena na Javi kojom upravlja SIP servlet kontejner i koja<br />

se koristi SIP signalizacijom. SIP kontejner prihvaća zahtjeve klijenata te ih prosljeđuje do<br />

servleta koji generira odgovore i opet preko SIP kontejnera šalje natrag klijentima.<br />

SIP specifikacija zahtjeva da SIP elementi podržavaju TCP i UDP transportne protokole, no<br />

mogu podržavati i TLS, SCTP i ostale protokole za ugrađenim sigurnosnim mehanizmima.<br />

SIP servlet kontejner osluškuje SIP promet na svojim priključnicama (engl. socket) koje<br />

koriste gore navedene protokole te dobivene zahtjeve prosljeđuje servletu.<br />

17


SIP Servlet API, slično kao i HTTP Servlet API, nadograđuje generički servlet API<br />

javax.servlet, a nalazi se u javax.servlet.sip.<br />

Glavnu razliku HTTP i SIP aplikacija čini činjenica da se SIP aplikacije mogu ponašati i kao<br />

klijent i kao poslužitelj odnosno primati, ali i generirati zahtjeve, za razliku od HTTP<br />

aplikacija koje su isključivo u klijent-poslužitelj odnosu.<br />

SIP Servlet API između ostalog mora podržavati sljedeće mogućnosti:<br />

• primanje odgovora i zahtjeva,<br />

• slanje zahtjeva i odgovora – dodatno slanje višestrukih odgovora i<br />

• preusmjeravanje zahtjeva uz mogućnost odabira više odredišnih destinacija.<br />

SIP aplikacije se pokreću ako se dogodi događaj na koji su one registrirane. Ti događaji mogu<br />

biti zahtjevi ili odgovori koje kontejner predaje aplikaciji preko service() metode koja se<br />

nalazi u javax.servlet.Servlet sučelju. Metoda service() ustanovljuje radi li se o zahtjevu ili<br />

odgovoru te ih na temelju toga prosljeđuje do doRequest(SipServletRequest request) ili do<br />

doResponse(SIPServletResponse response) metode kako je prikazano na Sl. 3.2. Metode<br />

doRequest i doResponse na temelju vrste zahtjeva ili odgovora pozivaju metodu koja je<br />

zadužena za obradu tih događaja i koju je programer dužan implementirati. Metoda doRequest<br />

prima objekt SipServletRequest koji predstavlja zahtjev, a za odgovor, odnosno objekt tipa<br />

SipServletResponse se mora pobrinuti programer zbog zahtjeva komunikacije jedan na više.<br />

Sl. 3.2 Obrada događaja kod SIP servleta<br />

18


3.2. SailFin<br />

SailFin [11] je aplikacijski poslužitelj nastao spajanjem Ericssonove tehnolgije SIP Servlets i<br />

Sunovog aplikacijskog poslužitelja GlassFish.<br />

Sun GlassFish Enterprise Server [12] je aplikacijski poslužitelj otvorenog koda koji se razvija<br />

pod nadzorom Sun Microsystema za platformu Java Enterprise Edition. Projekt je pokrenut<br />

kada su Sun i Oracle donirali kod na kojem je temeljen razvoj GlassFisha. GlassFish je kao<br />

besplatan softver pod dvije licence, CDDL i GPL. On kao poslužitelja web-aplikacija koristi<br />

inačicu Apache Tomcata s dodatnom komponentom Grizzly koja je zadužena za skalabilnost i<br />

brzinu izvođenja, dok je sustav za perzistenciju podatka preuzet od sustava Oracle TopLink.<br />

Glavni cilj projekta SailFin je napraviti kontejner za SIP servlete koji će implementirati JSR-<br />

289 Java Specification Request (JSR) je dokument koji Java Community Process (JCP)<br />

podnosi Program Management Officeu (PMO), a u kojem se predlaže nova specifikacija ili<br />

znatno poboljšanje stare specifikacije. JSR-289 definira poboljšanja specifikacije SIP Servlet<br />

API-ja u skladu sa zahtjevima industrije te definira model međudjelovanja SIP Servleta s Java<br />

EE (Enterprise Edition) komponentama.<br />

U trenutnoj verziji SailFina je implementiran JSR-116 u kojem je definiran osnovni SIP<br />

Servlet API, a na implementaciji JSR-289 se još uvijek radi.<br />

SailFin omogućuje izvođenje konvergiranih aplikacija pošto njegov kontejner osim SIP<br />

servleta podržava i HTTP servlete. Pod pojmom konvergiranih aplikacija se misli na one<br />

aplikacije koje korištenjem više protokola omogućavaju telekomunikacijske <strong>usluge</strong>. Jedna<br />

takva usluga bi na primjer mogla biti mogućnost pozivanja zaposlenika prilikom kupovine u<br />

web-dućanu pritiskom na poveznicu u svrhu dobivanja dodatnih informacija o proizvodu.<br />

Da bi se aplikacije mogle izvoditi moraju se poštivati određena pravila smještaja tih aplikacija<br />

unutar strukture direktorija SailFina. Unutar direktorija SIP aplikacije mora postojati<br />

direktorij WEB-INF unutar kojeg se nalazi konfiguracijska datoteka sip.xml. Izvršne datoteke<br />

se smještaju u direktorij WEB-INF/classes, a sve ostale klase i biblioteke klasa koje aplikacija<br />

koristi se smještaju u direktorij WEB-INF/lib.<br />

Kako bi kontejner znao koji servlet treba pozvati nakon prispjelog zahtjeva, servleti se moraju<br />

mapirati. Mapiranje se vrši unutar sip.xml.<br />

Zahtjevi se razvrstavaju na temelju:<br />

• vrste zahtjeva,<br />

19


• razlikovanja početnih i naknadnih zahtjeva, te početnih i naknadnih odgovora i<br />

• korištenja logičkih operatora među poljima zaglavlja.<br />

Glavni dijelovi zahtjeva su:<br />

• method – definira metodu zahtjeva,<br />

• uri – URI zahtjeva,<br />

• from – sadržaj From polja zaglavlja i<br />

• to – sadržaj To polja zaglavlja.<br />

Glavni dijelovi se mogu sastoji od više unutarnjih dijelova. Npr. from može biti SIP URI koji<br />

se sastoji od scheme, user, host i port dijelova.<br />

Logički uvjeti koji se mogu koristiti nad tim poljima zaglavlja i njihovim dijelovima su:<br />

• equal – uspoređuje varijablu s nekim znakovnim nizom,<br />

• exists – provjerava postoji li neka varijabla,<br />

• contains – provjerava sadrži li neka varijabla određeni znakovni niz,<br />

• subdomain-of – provjerava je li neki znakovni niz poddomena određenog URI-ja,<br />

• and – provjerava jesu li svi uvjeti zadovoljeni,<br />

• or – provjerava je li neki od svih uvjeta zadovoljen i<br />

• not – negira vrijednost.<br />

Važno je napomenuti da SIP kontejner poziva servlete po određenim pravilima. Prvo pravilo<br />

je da se pozivaju svi servleti koji su mapirani na određenu vrstu zahtjeva ako oni<br />

zadovoljavaju uvjete. Drugo pravilo je da se pozivaju onim redom kojim su navedeni u<br />

konfiguracijskoj datototeci ako ih ima više koji zadovoljavaju uvjete.<br />

Primjer jedne konfiguracijske datoteke izgleda ovako:<br />

<br />

<br />

SIP Primjer <br />

primjer SIP konfiguracijske datoteke <br />

<br />

SIPServlet1 <br />

<br />

primjer.SIPServlet1<br />

<br />

<br />

<br />

SIPServlet2 <br />

<br />

20


primjer.SIPServlet2<br />

<br />

<br />

<br />

SIPServlet1 <br />

<br />

<br />

<br />

request.method<br />

MESSAGE<br />

<br />

<br />

request.method<br />

INVITE<br />

<br />

<br />

<br />

<br />

<br />

SIPServlet2 <br />

<br />

<br />

request.method<br />

INVITE<br />

<br />

<br />

<br />

<br />

U ovom primjeru može se vidjeti kako u praksi izgleda mapiranje. Elementi display-name i<br />

description služe za definiranje imena servleta koje će se pokazati i njegov opis. Unutar<br />

elementa servlet navodi se ime stvarnog servleta i njegova glavna klasa s punom putanjom do<br />

nje. Unutar elementa servlet-name potrebno je navesti točno ime servleta koje se mora slagati<br />

s onim koje je navedeno prije u elementu servlet, dok se unutar pattern elementa navodi<br />

uvjete koje zahtjev mora ispuniti da bi se pokrenuo dotični servlet. U ovom slučaju će se<br />

zahtjevi doći do servleta SIPServlet1 ako su oni tipa MESSAGE ili INVITE, a do SIPServlet2<br />

ako su oni tipa INVITE. Na ovom primjeru se može vidjeti i kako se primjenjuje pravilo<br />

pozivanja servleta u slučaju da više njih ima zadovoljava postavljene uvjete. Ako npr. dođe<br />

INVITE zahtjev morat će se pozvati oba servleta jer oba zadovoljavaju uvjet, no pozivat će se<br />

onim redom kojim su navedeni u konfiguracijskoj datoteci. Pošto je SIPServlet1 naveden prvi,<br />

u ovom slučaju će se prvo on pozvati, a tek nakon njega SIPServlet2.<br />

21


3.3. IMS Location Server<br />

IMS Location Server (ILS) je SIP aplikacijski poslužitelj razvijen u Ericsson Nikoli Tesli<br />

[13]. Njegova uloga u IMS-u je da služi kao spona sa sustavom za pozicioniranje. ILS nije<br />

odgovoran za pronalaženje krajnje lokacije korisnika, već za saznavanje lokacije korisnika<br />

slanjem zahtjeva do raspoloživog sustava za pozicioniranje.<br />

Drugi aplikacijski poslužitelji kojima trebaju <strong>lokacijski</strong> podaci ne trebaju tako izravno<br />

komunicirati sa sustavom za pozicioniranje već za njih to čini ILS koji zbog svojih ugrađenih<br />

funkcionalnosti ne ovisi o pojedinim pružateljima usluga. ILS je prema tome omogućitelj<br />

<strong>usluge</strong> (engl. service enabler).<br />

ILS se trenutno sastoji od dva glavna dijela:<br />

• Location Retrieval Function (LRF) – koristi se za dohvat <strong>lokacijski</strong>h informacija<br />

preko SIP sučelja<br />

• Position Manager – simulator sustava za pozicioniranje<br />

Lokacijske informacije se prenose preko SUBSCRIBE/NOTIFY SIP komunikacijskog<br />

mehanizma. IMS aplikacijski poslužitelji, klijenti i ostali IMS entiteti lokaciju korisnika<br />

mogu zatražiti na više načina slanjem SUBSCRIBE zahtjeva ILS-u te primiti lokaciju:<br />

• jednokratno – nakon primanja zahtjeva ILS šalje trenutnu lokaciju korisnika; Expire<br />

polje u zaglavlju zahtjeva se postavlja na 0,<br />

• periodično – nakon primanja zahtjeva ILS periodički šalje lokaciju korisnika;<br />

Expire polje se postavlja na broj sekundi koje predstavljaju interval između slanja<br />

lokacije korisnika i<br />

• uvjetno periodično – nakon primanja zahtjeva ILS periodički šalje lokaciju<br />

korisnika ako je ispunjen određeni uvjet određen filterom; Expire polje se također<br />

postavlja na broj sekundi koje predstavljaju interval između slanja lokacije<br />

korisnika.<br />

Prema preporuci IETF-a ILS koristi protokolno nezavisni format za prijenos <strong>lokacijski</strong>h<br />

informacija - Presence Information Data Format (PIDF) zasnovan na XML-u. PIDF koristi<br />

Geography Markup Language (GML) kao osnovni format zapisa <strong>lokacijski</strong>h informacija.<br />

Position Manager unutar LIS-a služi kao emulator sustava za pozicioniranje. Lokacija<br />

korisnika se može mijenjati pomoću miša, a moguće je dodavanje i brisanje korisnika te<br />

dodavanje različitih karata. Pri dodavanju karte je osim same karte u nekom slikovnom<br />

22


formatu potrebno definirati koordinatama gornju lijevu i donju desnu točku karte u posebnoj<br />

XML datoteci s ekstenzijom .map u direktoriju maps. Kako Position Manager izgleda, može<br />

se vidjeti na Sl. 3.3.<br />

Sl. 3.3 Grafičko sučelje Position Managera<br />

23


4. Realizacija <strong>usluge</strong><br />

U sklopu diplomskog rada je bilo potrebno napraviti uslugu s <strong>lokacijski</strong> označenim sadržajem<br />

te je stoga osmišljena usluga koja omogućuje mobilno korištenje usluga za pohranu<br />

fotografija na webu s mogućnošću lokacijskog označavanja Flickra. Korisniku je omogućeno<br />

snimanje fotografija na pokretnom uređaju neovisno gdje se zatekne i slanje tih fotografija na<br />

Flickr s podacima o lokacijama na kojima su snimljene te pregledavanje tuđih fotografija<br />

snimljenih blizu svoje ili neke druge lokacije. Osim tih glavnih mogućnosti, implementirane<br />

su i brojne druge koje će biti objašnjene u nastavku rada.<br />

Sl. 4.1 Arhitektura <strong>usluge</strong><br />

Arhitektura <strong>usluge</strong> je prikazana na Sl. 4.1. Klijentska aplikacija (FlickLoc) saznanje lokaciju<br />

korisnika na dva načina – od pokretne mreže ili putem GPS-a. Prvim načinom kontaktira<br />

putem protokola SIP poslužiteljsku aplikaciju (Location Servlet) na SailFinu koja preko IMS<br />

Location Servera saznaje korisnikovu lokaciju te ju vraća klijentu. Drugi način je direktno<br />

preko GPS prijemnika implementiranog na pokretnom uređaju za one uređaje koji posjeduju<br />

GPS prijemnik, a ne posjeduju mogućnost korištenja protokola SIP. Na temelju tako dobivene<br />

lokacije moguće je označiti fotografiju te ju poslati na Flickr ili pretraživati fotografije u<br />

24


svojoj blizini korištenjem Flickr API-ja. U slučaju pretraživanja fotografija omogućen je<br />

prikaz lokacija fotografija na mapi koja se dohvati preko Google Static Maps API-ja.<br />

U nastavku rada će prvo biti pojašnjeno što su i kako se koriste Flickr API [14] i Google<br />

Static Maps API [15] radi lakšeg razumijevanja konkretne implementacije <strong>usluge</strong> koja će<br />

potom biti detaljnije pojašnjena.<br />

4.1. Programsko sučelje <strong>usluge</strong> Flickr<br />

Flickr kao i većina sličnih usluga ima svoje programsko sučelje (API - Application<br />

Programming Interface) koje je dostupno svima koji žele raditi aplikacije, a koriste podatke s<br />

Flickra – prvenstveno fotografije ali i druge brojne mogućnosti koje Flickr posjeduje. Flickr<br />

API se sastoji od skupa metoda koje se mogu pozivati te različitih priključnih točaka. Metode<br />

se pozivaju slanjem upita na priključne točke u točno određenom formatu. Odgovor na njih se<br />

šalje pozivatelju u nekom od definiranih formata koji su stavljeni na izbor. Metode su<br />

mnogobrojne, a i svakodnevno se dodaju nove te će njihov broj u budućnosti biti sve veći.<br />

Preduvjet da bi se koristio API je posjedovanje aplikacijskog ključa koji Flickru omogućava<br />

praćenje poziva prema API-ju. Korištenje API-ja je slobodno za privatne, umjetničke i ostale<br />

nekomercijalne svrhe pa se stoga aplikacijski ključ za takve aplikacije dobije vrlo lagano.<br />

Nešto duži i neizvjesniji proces je prijava za korištenje Flickr API-ja u komercijalne svrhe jer<br />

se prijava detaljno provjerava i odobrava ili ne odobrava na temelju opisa aplikacije.<br />

Za korištenje Flickr API-ja najvažnije je poznavati:<br />

• autentikaciju korisnika,<br />

• formate zahtjeva i dogovora i<br />

• postupak slanja fotografija.<br />

Autentikacija korisnika<br />

Vrlo važan dio API-ja je autentikacija. Mnoštvo metoda koristi privatne podatke korisnika i<br />

nužno je da se nedvosmisleno utvrdi identitet korisnika. Postoje načini autentikacije za:<br />

• web aplikacije,<br />

• desktop aplikacije i<br />

• mobilne aplikacije.<br />

Detaljnije će biti opisan treći način – autentikacija za mobilne aplikacije.<br />

25


Prvi korak je posjedovanje aplikacijskog ključa koji se mora ispravno konfigurirati. Obavezna<br />

polja su naziv i opis aplikacije, a neobavezna polaj su logo i URL aplikacije. Navedene<br />

informacije će se prikazati korisniku kada aplikacija zatraži pristup njihovim privatnim<br />

podacima. Sljedeće je potrebno izabrati Mobile Application kao način autentikacije te odabrati<br />

dozvole koje će aplikacija posjedovati. Tri su mogućnosti:<br />

• read – aplikaciji se omogućava jedino čitanje podataka, npr. preuzimanje<br />

fotografija ili informacija o vlasniku ili fotografijama,<br />

• write – aplikaciji se dodatno omogućava i pisanje podataka, npr. postavljanje<br />

fotografija, promjenu imena vlasnika itd.,<br />

• delete – aplikaciji se dodatno omogućava i brisanje podataka.<br />

Nakon ispravne konfiguracije dobije se tzv. autentikacijski URL koji je oblika<br />

http://www.flickr.com/auth-123456.<br />

Aplikacija bi trebala prikazati korisniku dobiveni autentikacijski URL te ga zatražiti da ga<br />

posjeti. Korisniku će se tada u pregledniku pojaviti zahtjev kojim se traži pristup njegovim<br />

privatnim podacima. Ako korisnik pristane prikazat će mu se deveteroznamenkasti broj koji<br />

se u Flickr terminologiji naziva mini-token, a izgleda primjerice ovako: 123-456-789.<br />

Prikazani mini-token korisnik treba unesti u za to predviđeno polje u aplikaciji i tu prestaje<br />

njegov angažman oko autorizacije.<br />

Mini-token služi samo za jednokratno dobivanje trajnog tokena koji se dalje koristi za<br />

autentikaciju pri pozivu metoda. Trajni token se dobiva pozivom metode<br />

flickr.auth.getFullToken koja zahtijeva potpis. Način generiranja potpisa je definiran, a<br />

zahtijeva aplikacijski ključ, dijeljenu tajnu (shared secret) dobivenu zajedno s aplikacijskim<br />

ključem i token. U slučaju getFullToken metode mjesto tokena koristi se mini-token.<br />

Prvi korak u generiranju potpisa je da se svi argumenti abecedno poredaju. Pretpostavimo da<br />

aplikacijski ključ ima vrijednost 9a0554259914a86fb9e7eb014e4e5d52, dijeljena tajna<br />

000005fab4534d05, a mini-token 123-456-789. Poredani argumenti će izgledati ovako:<br />

• method = flickr.auth.getFullToken,<br />

• api_key = 9a0554259914a86fb9e7eb014e4e5d52 i<br />

• mini_token = 123-456-789.<br />

Od tako poredanih argumenata se napravi niz ispred kojeg se stavi dijeljena tajna. Takav niz<br />

bi trebao izgledati ovako:<br />

26


000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52methodflickr.au<br />

th.getFullTokenmini_token123-456-789<br />

Potpis se dobije generiranjem MD5 sume ovog niza znakova i predstavlja novi argument kod<br />

poziva metode koji se dodaje na kraj liste argumenata koja onda izgleda ovako:<br />

• method = flickr.auth.getFullToken,<br />

• api_key = 9a0554259914a86fb9e7eb014e4e5d52,<br />

• mini_token = 123-456-789 i<br />

• api_sig = fddd34ac63af89b1b73b144aef8ef3d5.<br />

Ako se ispravno generira potpis i navedu argumenti odgovor na getFullToken metodu će biti<br />

sljedećeg oblika:<br />

<br />

45-76598454353455<br />

read<br />

<br />

<br />

Aplikacija bi trebala trajno sačuvati dobiveni token jer se on koristi pri svakom slijedećem<br />

pozivu metode koja zahtjeva autentikaciju. Primjerice, ako želimo pozvati metodu<br />

flickr.favorites.getList lista argumenata za generiranje potpisa će izgledati ovako:<br />

• method = flickr.favorites.getList,<br />

• api_key = 9a0554259914a86fb9e7eb014e4e5d52 i<br />

• auth_token = 45-76598454353455.<br />

Daljnji postupak generiranja potpisa je isti kao u prethodnom slučaju.<br />

Formati zahtjeva i odgovora<br />

Flickr API omogućava više različitih formata zahtjeva i odgovora osiguravajući priključne<br />

točke za svaki od njih, a to su:<br />

• REST (Representational State Transfer),<br />

• XML-RPC (XML - Remote Procedure Calling) i<br />

• SOAP (Simple Object Access Protocol).<br />

Formati odgovora su predefirano isti oni u kojima je bio prenešen zahtjev, no omogućen je i<br />

proizvoljan izbor preko parametra format koji se u tom slučaju treba uključiti u popis<br />

argumenata. Formati odgovora na raspolaganju za korištenje osim gore navedenih su:<br />

• JSON (JavaScript Object Notation) ili<br />

27


• PHP.<br />

Format REST je najjednostavniji za uporabu pa je dobar primjer toga kako izgledaju i kako se<br />

upućuju zahtjevi prema Flickr API-ju i kako izgledaju odgovori na njih.<br />

REST zahtjev je zapravo obični HTTP GET ili POST zahtjev. Primjerice, URL zahtjeva bi<br />

izgledao ovako za metodu flickr.test.echo:<br />

http://api.flickr.com/services/rest/?method=flickr.test.echo&parameter=value.<br />

Iz URL-a se vidi da je priključna točka za REST zahtjeve na adresi<br />

http://api.flickr.com/services/rest/.<br />

REST odgovor je XML dokument koji u slučaju ispravnog poziva metode izgleda ovako:<br />

<br />

<br />

[xml-payload-here]<br />

<br />

Ako se dogodi pogreška odgovor će izgledati ovako:<br />

<br />

<br />

<br />

<br />

Postupak slanja fotografija<br />

Slanje fotografija na Flickr je specifično jer se šalju i binarni podaci osim argumenata. Sve<br />

fotografije se preko HTTP POST zahtjeva šalju na istu pristupnu točku s URL-om:<br />

http://api.flickr.com/services/upload/. Metoda zahtjeva autenticiranje s dozvolom za pisanje.<br />

U nastavku su navedeni parametri metode. S iznimkom parametra photo svi ostali su<br />

opcionalni i ako su odabrani koriste se pri generiranju potpisa. Argumenti su sljedeći:<br />

• photo – fotografija koja se šalje,<br />

• title – naziv fotografije,<br />

• description – opis fotografije,<br />

• tags – popis oznaka odvojenih zarezom,<br />

• is_public, is_friend, is_family – koriste se za određivanje tko smije vidjeti<br />

fotografije, vrijednosti 0 za ne i 1 za da,<br />

• safety_level – 1 za siguran, 2 za umjereno siguran i 3 za ograničen pristup,<br />

• content_type – 1 za fotografiju, 2 za screenshot i 3 za ostalo i<br />

28


• hidden – 1 da se može pretraživati, 2 da se ne može.<br />

Primjer jednog POST zahtjeva kojim se šalje na Flickr slika test.jpg pohranjena na disku na<br />

izgleda ovako:<br />

POST /services/upload/ HTTP/1.1<br />

Content-Type: multipart/form-data; boundary=---------------------------7d44e178b0434<br />

Host: api.flickr.com<br />

Content-Length: 35261<br />

-----------------------------7d44e178b0434<br />

Content-Disposition: form-data; name="api_key"<br />

3632623532453245<br />

-----------------------------7d44e178b0434<br />

Content-Disposition: form-data; name="auth_token"<br />

436436545<br />

-----------------------------7d44e178b0434<br />

Content-Disposition: form-data; name="api_sig"<br />

43732850932746573245<br />

-----------------------------7d44e178b0434<br />

Content-Disposition: form-data; name="photo"; filename="C:\test.jpg"<br />

Content-Type: image/jpeg<br />

{RAW JFIF DATA}<br />

-----------------------------7d44e178b0434--<br />

Dodavanje nekog od opcionalnih parametra se vrši umetanjem slijedećeg koda unutar<br />

zaglavlja POST zahtjeva:<br />

Content-Disposition: form-data; name="ime_parametra"<br />

vrijednost_parametra<br />

Važno je pripaziti da je boundary ispravno izgeneriran (na slučajan način) i da se ne<br />

pojavljuje unutar poslanih podataka, da se za kraj linije koristi '\r\n' i da podaci fotografije<br />

budu zapisani odnosno poslani u čistom (raw) formatu.<br />

Ako je fotografija uspješno poslana poslužitelj će vratiti identifikator fotografije zapisan<br />

pomoću XML-a u tijelu RESP odgovora:<br />

1234<br />

U slučaju pogreške, vratit će se RESP odgovor s kodom pogreške.<br />

29


4.2. Programsko sučelje Google Static Maps<br />

Programsko sučelje Google Static Maps omogućava korištenje Googleovih karata kada nije<br />

moguće koristiti JavaScript ili neki drugi način dinamičkog učitavanja. API se poziva preko<br />

standardnog HTTP zahtjeva navodeći određene parametre na temelju kojih se izgenerira karta<br />

i koja se u obliku slike vraća pozivatelju API-ja. Preduvjet za korištenje API-ja je<br />

posjedovanje aplikacijskog ključa kojim Google prati promet pojedinog korisnika. Svaki<br />

korisnik može najviše 1000 puta zatražiti kartu unutar 24 sata.<br />

Zahtjev upućen API-ju mora biti sljedećeg oblika:<br />

http://maps.google.com/staticmap?parameters<br />

API propisuje sljedeće parametre:<br />

• center (obavezan ako nema oznaka) – definira središnju točku karte pomoću<br />

zarezom odvojenih geografskih koordinata,<br />

• zoom (obavezan ako nema oznaka) – vrijednost od 0 do 19, redom od najmanje<br />

detaljne do najdetaljnije karte,<br />

• size (obavezan) – željena veličina karte u pikselima (x, y),<br />

• format (neobavezan) – format slike, može biti JPEG, PNG ili ako se ne navede<br />

parametar GIF,<br />

• maptype (neobavezan) – vrsta karte, moguće je izabrati karte prilagođene za prikaz<br />

na pokretnim telefonima (mobile), satelitske (satellite), terenske (terrain) karte ili<br />

kombinaciju prikaza (hybrid),<br />

• markers (neobavezan) – popis lokacija koje se žele označiti na karti,<br />

• path (neobavezan) – navode se koordinate točaka koje se na karti žele spojiti<br />

linijom,<br />

• span (neobavezan) – pomoću koordinata dviju točaka definira se pravokutnik<br />

zemljine površine koji se želi prikazati,<br />

• frame (neobavezan) – služi za uokviravanje slike plavim obrubom,<br />

• h1 (neobavezan) – služi za odabir jezika za prikaz natpisa na karti,<br />

• key (obavezan) – aplikacijski ključ i<br />

• senzor (obavezan) – ako se koristi uređaj koji može služiti kao senzor obavezno je<br />

staviti parametar na true, inače je false.<br />

30


4.3. Implementacija<br />

Preduvjet za korištenje većine mogućnosti <strong>usluge</strong> je točna lokacija na kojoj se korisnik nalazi.<br />

Stoga će prvo biti pojašnjen način dobivanja lokacije putem SIP-a jer u njemu osim klijentske<br />

aplikacije sudjeluje i poslužitelj, a nakon toga i način dobivanja lokacije putem GPS. Potom<br />

će detaljnije biti opisana implementacija klijentske aplikacije.<br />

Dohvaćanje lokacije putem protokola SIP<br />

Slijedni dijagram na Sl. 4.2 prikazuje izmjenu poruka između pojedinih entiteta.<br />

Sl. 4.2 Slijedni dijagram SIP komunikacije<br />

Komunikacija među entitetima realiziranim u usluzi zasniva se tek na malom podskupu<br />

mogućnosti protokola SIP. Zbog jednostavnosti <strong>usluge</strong> nije bilo potrebno koristiti ništa osim<br />

zahtjeva MESSAGE i SUBSCRIBE, obrade zahtjeva NOTIFY poslanih od strane IMS Location<br />

Servera te slanja i primanja odgovora. Sljedeći primjeri poruka koje se šalju će pojasniti kako<br />

je realizirana komunikacija.<br />

Upit klijentske aplikacije za lokacijom se prenosi SIP-ovim zahtjevom tipa MESSAGE:<br />

MESSAGE sip:127.0.0.1:6080 SIP/2.0<br />

Content-Length: 0<br />

From: ;tag=1982152035<br />

Max-Forwards: 70<br />

Cseq: 1 MESSAGE<br />

Event: geolocation<br />

To: <br />

Content-Type: text/plain<br />

Via: SIP/2.0/UDP<br />

192.168.1.2:5060;branch=z9hG4bKebf8eb1d4eeabb1cdcd2a96f0db5820f;receiv<br />

ed=127.0.0.1<br />

Call-Id: 78196c28baa627397d234a03753634b6@192.168.1.2<br />

31


Zahtjev se šalje poslužitelju SailFin koji se nalazi na adresi 127.0.0.1:6080 i na kojem se<br />

izvršava SIP aplikacija koja obrađuje zahtjeve što se vidi iz prve linije zahtjeva. Da bi<br />

poslužiteljska aplikacija znala da se radi o zahtjevu za lokacijom postavlja se polje zaglavlja<br />

Event na ključnu riječ geolocation. Osim toga, vrlo je bitno i polje From koje sadrži<br />

korisnikov SIP URI na temelju kojeg će se pronaći njegova lokacija posredstvom ILS-a.<br />

Kada zahtjev dođe do poslužitelja, on prepoznaje da se radi o zahtjevu za lokacijom korisnika,<br />

te konstruira novi SIP-ov zahtjev tipa SUBSCRIBE koji se šalje ILS-u. Taj zahtjev također<br />

ima polje Event postavljeno na geolocation da bi ILS mogao prepoznati kao zahtjev za<br />

lokacijom. Nakon što je prepoznao zahtjev, treba mu i korisnikov SIP URI na temelju kojeg<br />

će pronaći njegovu lokaciju, a koji se mora nalaziti u polju To zaglavlja SUBSCRIBE poruke.<br />

Zahtjev izgleda ovako:<br />

SUBSCRIBE sip:127.0.0.1:6090 SIP/2.0<br />

Max-Forwards: 70<br />

From: ;tag=fsuck844-1<br />

Expires: 0<br />

Cseq: 1 SUBSCRIBE<br />

Contact: <br />

Event: geolocation<br />

To: <br />

Call-Id: 5.28.254.69_1_5472694183377990708<br />

Kako je navedeno u poglavlju o ILS-u, polje Expire se postavlja na vrijednost 0, jer se tako<br />

lokaciju korisniku dostavlja samo jednom.<br />

ILS nakon SUBSCRIBE zahtjeva šalje dvije NOTIFY poruke kao što se može vidjeti u<br />

slijednom dijagramu. Prva NOTIFY poruka sadrži pending status jer ILS prvo provjerava<br />

postoji li korisnik s navedenim URI-jem i traži njegovu lokaciju. Poruka izgleda ovako:<br />

NOTIFY sip:5.28.254.69:6080;fid=server_1 SIP/2.0<br />

Content-Length: 0<br />

Max-Forwards: 69<br />

From: ;tag=643a35df<br />

Expires: 0<br />

Cseq: 1 NOTIFY<br />

Contact: "Location Server" <br />

Event: geolocation<br />

To: ;tag=fsuck844-1<br />

Subscription-State: Pending<br />

Call-Id: 5.28.254.69_1_5472694183377990708<br />

Via: SIP/2.0/UDP<br />

127.0.0.1:6090;branch=z9hG4bK9772bd67897c4b15ba21005490a6a4c2<br />

32


Nakon što nađe lokaciju korisnika šalje drugu NOTIFY poruku u kojoj se nalaze podaci o<br />

lokaciji korisnika zapisani u PIDF odnosno GML formatu.<br />

NOTIFY sip:5.28.254.69:6080;fid=server_1 SIP/2.0<br />

Content-Length: 499<br />

Max-Forwards: 69<br />

From: ;tag=643a35df<br />

Expires: 0<br />

Cseq: 2 NOTIFY<br />

Contact: "Location Server" <br />

Event: geolocation<br />

To: ;tag=fsuck844-1<br />

Content-Type: application/pidf+xml<br />

Subscription-State: terminated;reason=expired<br />

Call-Id: 5.28.254.69_1_5472694183377990708<br />

Via: SIP/2.0/UDP<br />

127.0.0.1:6090;branch=z9hG4bKb4b47f0eb0eb144c6f96c00f75d38675<br />

<br />

<br />

<br />

45.802499999999995<br />

15.9425manual<br />

Iz gore navedenog primjera druge poruke NOTIFY može se vidjeti kako se prenose<br />

informacije o lokaciji. Geografske koordinate korisnika nalaze se unutar taga .<br />

Poslužitelj izvlači podatke o lokaciji iz primljenog zahtjeva te konstruira odgovor koji sadrži<br />

te podatke i koji se šalje na adresu korisnika. Kako taj odgovor izgleda vidi se iz sljedećeg:<br />

SIP/2.0 200 OK<br />

From: ;tag=629134088<br />

Cseq: 1 MESSAGE<br />

Longitude: 15.9425<br />

To: <br />

Server: Glassfish_SIP_1.0.0<br />

Latitude: 45.802499999999995<br />

Call-Id: e10ee021ef75202baa3116618ad650fa@192.168.1.2<br />

Via: SIP/2.0/UDP<br />

192.168.1.2:5060;branch=z9hG4bK5c3cdbc865fb28e17e0b705af9999c31;receiv<br />

ed=127.0.0.1<br />

Dohvaćanje lokacije putem GPS-a<br />

Dohvaćanje lokacije putem GPS-a je realizirano korištenjem Location API-ja definiranog u<br />

JSR-179. Location API je opcionalni paket (javax.microedition.location) koji omogućuje<br />

33


dohvaćanje lokacije putem bilo koje osnovne metode dohvaćanja lokacija, a koje su navedene<br />

u poglavlju 1.1 ovog rada.<br />

Osnovno ograničenje u izboru metoda dohvaćanja lokacije su same mogućnosti mobilnog<br />

uređaja na kojima se aplikacija izvodi. Ograničenja je moguće provesti i aplikacijski navodeći<br />

kriterije koje metoda mora zadovoljavati poput preciznosti, vremena odziva, potrebom za<br />

određivanjem brzine ili visine i dr.<br />

Pošto za aplikaciju realiziranu u radu gore navedeno nije bilo nužno, kreiranje kriterija je vrlo<br />

jednostavno:<br />

Criteria criteria = new Criteria();<br />

Aplikacija tada dohvaća instancu LocationProvidera koja sadrži podatke tražene u kriteriju:<br />

LocationProvider provider = LocationProvider.getInstance( criteria );<br />

Vrijeme čekanja na lokaciju (10 s) se ograničava na sljedeći način:<br />

Location location = provider.getLocation( 10 );<br />

Zadnji korak je dohvaćanje koordinata trenutne lokacije:<br />

Coordinates coordinates = location.getQualifiedCoordinates();<br />

double latitude = coordinates.getLatitude();<br />

double longitude = coordinates.getLongitude();<br />

Klijentska aplikacija – paketi i klase<br />

Klijentska aplikacija se sastoji od sljedećih paketa i klasa:<br />

• hr.fer.tel.diplomski.flickloc.display – klase zadužene za prikaz:<br />

o ConnectionForm – izbor konekcija (SIP/GPS) te upis SIP podataka,<br />

o DisplayForm – postavke prikaza, izbor tipa karte te postavljanje broja slika,<br />

o DisplayPhotoList – odabir mogućnosti prikaza fotografija,<br />

o FlickrForm – upis tokena za autentikaciju,<br />

o InfoForm – forma koja prikazuje uvećanu fotografiju s detaljima o njoj,<br />

o InitialList – početni izbornik (snimanje nove fotografije, pregled te postavke),<br />

o InputPhotoData – forma za unos podataka o snimljenoj fotografiji,<br />

o MapCanvas – zaslon na kojem se prikazuju Googleove karte,<br />

o PhotoCanvas – zaslon na kojem se vidi ono što prikazuje kamera uređaja,<br />

o PhotoForm – forma za pokretanje kamere te prikaz snimljene fotografije,<br />

34


o SettingsList – izbornik postavki,<br />

o TagForm – forma za unos oznaka za pretraživanje fotografije te podatke o<br />

adresi lokacije u čijoj blizini se žele pregledati fotografije,<br />

• hr.fer.tel.diplomski.flickloc.main<br />

o FlicLoc – glavna klasa koja nasljeđuje MIDlet i sadrži metode za postavljanje<br />

oznaka temeljene na informacijama o fotografijama,<br />

• hr.fer.tel.diplomski.flickloc.properties – klase koje služe za opis fotografija:<br />

o ImageMarker – sadrži fotografije i podatke o oznakama te posjeduje metode za<br />

dohvat fotografija,<br />

o ImageProperties – sadrži informacije o fotografiji poput vlasnika, lokacije,<br />

tipa fotografije, oznaka, opisa, URL-a itd.,<br />

o MapProperties – opisuje kartu (visina, širina, središnja točka, razina uvećanja i<br />

dr.) i stanje u kojem se trenutno nalazi (početno, odabran prikaz fotografije);<br />

o SIPProperties – predefinirane vrijednosti SIP postavki,<br />

• hr.fer.tel.diplomski.flickloc.util – klase u kojima su implementirane osnovne<br />

funkcionalnosti koje aplikacija koristi:<br />

o FileConnector – sadrži metode za spremanje, učitavanje te brisanje datoteka,<br />

o FlickrManager – sadrži metode za komunikaciju s Flickrom (autentikacija,<br />

slanje fotografija, dohvaćanje fotografija, pretragu i dr.),<br />

o GoogleMaps – sadrži metode za dohvaćanje Googleovih karata te ostalu<br />

komunikaciju s Googleom (lokacijsko kodiranje),<br />

o GPSLocationEnabler – dohvaća lokaciju preko GPS-a,<br />

o HTTPConnector – sadrži metode za konstruiranje i slanje zahtjeva GET i<br />

POST,<br />

o ImageUtil – sadrži metodu za kreiranje umanjenih slika,<br />

o MD5 – služi za generiranje MD5 sažetka poruke,<br />

o RecordManager – sadrži metode za pohranu, brisanje i dohvaćanje podatka iz<br />

RMS baze podataka i<br />

o SIPLocationEnabler – služi za dohvaćanje lokacije preko protokola SIP.<br />

Klijentska aplikacija – način rada<br />

Rad aplikacije će radi jednostavnosti biti objašnjen kroz sljedeće slučajeve uporabe u kojima<br />

se koristi većina osnovnih operacija od kojih su sačinjene funkcionalnosti koje aplikacija<br />

nudi:<br />

35


1. korisnik se preko aplikacije autenticira s Flickrom, snimi fotografiju te je pošalje na<br />

Flickr i sačuva lokalno u memoriju mobilnog uređaja,<br />

2. korisnik izabere pregledavanje fotografija koje su snimljene u njegovoj blizini,<br />

odabere jednu te ju sačuva.<br />

Napomena: detaljniji opis uporabe će biti naveden u sljedećem poglavlju dok će se u ovom<br />

naglasak staviti na tehničku stranu rada aplikacije.<br />

1. Da bi se autenticirao korisnik treba otvoriti Flickr postavke. Kad uđe u njih pojavi se URL<br />

koji mora posjetiti i preko kojeg dobije mini-token koji se upiše kao na Sl. 4.3.<br />

Sl. 4.3 Postavke Flickr računa<br />

Nakon spremanja postavki preko FlickrManagera se šalje zahtjev za autentikacijom:<br />

GET/services/rest/?method=flickr.auth.getFullToken&api_key=b8d84838dd0<br />

342b92ecb89141dd17050&mini_token=217-812-<br />

334&api_sig=024572c208b4b200ae99fb3ae546a689<br />

HTTP/1.1\r\n<br />

Odgovor s Flickra u formatu RESP glasi ovako:<br />

<br />

<br />

<br />

72157620145514165-b9e0603bb75c7581<br />

delete<br />

<br />

<br />

<br />

Odgovor se parsira te se u lokalnu bazu podataka pohrani korisničko ime i token koji će se<br />

koristi pri pozivima metoda Flickr API-ja koje zahtijevaju autentikaciju. Koristi se RMS<br />

(Record Management System) kao lokalna baza kojoj se pristupa preko RecordManagera.<br />

Kad je obavio autenticiranje korisnik može snimiti fotografiju i poslati ju na Flickr. Nakon<br />

36


izbora snimanja nove fotografije korisniku se prikazuje zaslon (PhotoCanvas) na kojem je<br />

prikazano ono što kamera u tom trenutku „vidi“. Snimanje fotografija je omogućeno<br />

korištenjem Mobile Media API-ja (MMAPI) definiranog specifikacijom JSR-135. MMAPI<br />

osim fotografija ima podršku za video i zvuk. Uporaba kamere je relativno jednostavna. Prvi<br />

korak je instanciranje playera:<br />

mPlayer = Manager.createPlayer("capture://video");<br />

Da bi player mogao koristi podatke kamere nužna je sljedeća linija:<br />

mPlayer.realize();<br />

Video dobiven preko kamere se može prikazati na objektu tipa Form ili tipa Cavnas kao na<br />

Sl. 4.4. Da bi to bilo moguće potrebno je dohvatiti objekt tipa VideoControl kojim se upravlja<br />

kamerom te ga inicijalizirati, postaviti parametre prikaza te ga učiniti vidljivim.<br />

videoControl = (VideoControl) mPlayer.getControl("VideoControl");<br />

videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);<br />

videoControl.setDisplayLocation( xPos, yPos );<br />

videoControl.setDisplaySize( width, height);<br />

videoControl.setVisible( true );<br />

Slikanje fotografije u JPEG formatu se odvija na sljedeći način:<br />

byte[] raw = mVideoControl.getSnapshot( "encoding=jpeg" );<br />

Sl. 4.4 Prikaz kamere<br />

37


Nakon snimanja fotografije otvara se forma za unos podataka kao što je prikazano na Sl. 4.5.<br />

Sl. 4.5 Forma za unos podataka o fotografiji<br />

Kad korisnik odabere da se slika pošalje i sačuva pokrenut će se GPSLocationEnabler ili<br />

SIPLocationEnabler (ovisno je li u postavkama odabran SIP ili GPS) koji će dohvatiti<br />

lokaciju. Lokacija će se pridodati unesenim oznakama sa strane korisnika i to na način da<br />

bude u formatu strojnih oznaka:<br />

tags += " geotagged geo:lat=" + latitude.substring( 0, 9 ) + "<br />

geo:lon=" + longitude.substring( 0, 9 );<br />

Fotografija se zajedno s podacima o njoj predaje FlickManageru koji će je poslati na Flickr.<br />

Zahtjev tipa POST se konstruira pomoću HTTPConnectora. Polje zaglavlja Content-Type<br />

mora biti postavljeno na vrijednost multipart/form-data. Tijelo poruke izgleda ovako:<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="api_key"<br />

b8d84838dd0342b92ecb89141dd17050<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="auth_token"<br />

72157620255401188-27eff2f3a07fb10d<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="api_sig"<br />

e93bac93cfd5fadd814e06a8cb6fbf8c<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="title"<br />

naslov<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="description"<br />

opis<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="tags"<br />

FlickLoc geotagged geo:lat=46.00000 geo:lon=16.00000<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="is_public"<br />

1<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="is_friend"<br />

38


1<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="is_family"<br />

1<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="hidden<br />

1<br />

-----------------------------84b117036e5e<br />

Content-Disposition: form-data; name="photo"; filename="test.jpg"<br />

Content-Type: image/jpeg<br />

Nakon tijela poruke šalje se fotografija u čistom obliku, a zahtjev završava s:<br />

-----------------------------7d44e178b0434—<br />

Pošto je u odabranom scenariju korisnik odabrao spremanje fotografije stvara se novi objekt<br />

tipa ImageProperties u kojeg se zapisuju svi podaci koji su poslani Flickru i koji predstavlja<br />

potpuni opis fotografije tako da se može rekonstruirati pri prikazivanju pomoću karte. Podaci<br />

koji se unose su ime autora, geografska širina i dužina, popis oznaka, naslov i opis te tip<br />

datoteke. Svi ti podaci skupa s identifikatorom dobivenim od Flickra u odgovoru na zahtjev se<br />

pomoću RecordManagera zapisuju u bazu podataka dok se sama fotografija sprema pomoću<br />

FileManagera u direktorij fileconn.dir.photos koji može biti na memorijskoj kartici ili<br />

ugrađenoj memoriji uređaja.<br />

Odgovor na zahtjev s identifikatorom fotografije izgleda ovako:<br />

OK<br />

<br />

<br />

3651924962<br />

<br />

Da je odabrana opcija da se slika samo sačuva, a ne i pošalje na Flickr, identifikator<br />

fotografije bi bio postavljen na vrijeme kada je fotografija snimljena. Tako izgeneriranom<br />

identifikatoru dodaje se prefiks 'f' da bi se označilo da nije poslan na Flickr. Pošto to nije<br />

slučaj, naziv fotografije je 3651924962.jpg. Takav naziv je nužan da bi se moglo spariti<br />

fotografiju s njezinim podacima kad zatreba.<br />

39


2. U drugom scenariju uporabe korisnik odabire pregled fotografija najbližih njegovoj lokaciji<br />

čime mu se prikaže zaslon kao na Sl. 4.6.<br />

Sl. 4.6 Prikaz lokacija najbližih snimljenih fotografija<br />

Na primjeru ovog scenarija može se dobro pokazati postupak pronalaženja fotografija oko<br />

neke pozicije. Pošto je izabrano da se traži fotografije najbliže lokaciji na kojoj se korisnik<br />

nalazi potrebno je opet preko SIP ili GPS LocationEnablera dohvatiti lokaciju korisnika.<br />

Lokacija se predaje kao parametar FlickManageru koji na temelju nje zahtijeva najbliže<br />

fotografije putem metode flickr.photos.seach Flickr API-ja. Postupak traženja je sljedeći:<br />

1. Prvo se pretražuje u okolici od 32 km što je ujedno i maksimalni radijus koji Flickr<br />

trenutno dozvoljava. Ako nije pronađen dovoljan broj fotografija (definiran u<br />

postavkama) prelazi se na korak 2;<br />

2. Područje potrage se definira pravokutnikom na temelju koordinata koje su od<br />

središnje koordinate za neki iznos pomaknut u svim smjerovima (sjever i jug, istok i<br />

zapad). Pomak se određuje ovisno o broju nađenih fotografija – što je već broj<br />

fotografija nađen, šansa da u blizini ima još fotografija je veća te je stoga pomak<br />

manji. Ako nije pronađen zahtijevani broj fotografija, 2. korak se ponavlja sve dok<br />

nije obuhvaćen cijeli svijet. Ako ni tada nisu pronađene sve fotografije, prikazat će se<br />

one koje već jesu pronađene.<br />

Važan parametar zadovoljstva korisnika pri korištenju aplikacije je njen odziv. Stoga je<br />

algoritam podešen da u najviše sedam koraka obuhvati cijeli svijet tako da se smanji broj<br />

upita prema Flickru i samim time vrijeme odziva.<br />

Postupak pretrage u gore navedenom scenariju ako se traži pet fotografija je sljedeći.<br />

40


Prvi upit sadržava koordinate i radijus, kao i parametre has_geo i extras=geo kojima se<br />

zahtijeva da se u odgovor uključe fotografije koje su <strong>lokacijski</strong> označene:<br />

http://www.flickr.com/services/rest/?method=flickr.photos.search&api_k<br />

ey=b8d84838dd0342b92ecb89141dd17050&has_geo&extras=geo&per_page=5&lat=<br />

45.4&lon=16.0&radius=32&max_taken_date=2000-01-01<br />

Odgovor na prvi upit ne sadrži nijednu fotografiju:<br />

<br />

<br />

<br />

<br />

Drugi upit više ne sadržava radijus već četiri granične vrijednosti koordinata:<br />

http://www.flickr.com/services/rest/?method=flickr.photos.search&api_k<br />

ey=b8d84838dd0342b92ecb89141dd17050&has_geo&extras=geo&per_page=5&bbox<br />

=14.75,44.15,17.25,46.65<br />

Odgovor na drugi upit:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Pošto su nađene samo dvije fotografije (od pet) potrebno je poslati treći upit:<br />

http://www.flickr.com/services/rest/?method=flickr.photos.search&api_k<br />

ey=b8d84838dd0342b92ecb89141dd17050&has_geo&extras=geo&per_page=5&bbox<br />

=14.1875,43.5875,17.8125,47.2125<br />

Odgovor sada sadrži podatke o svih pet traženih fotografija:<br />

<br />

<br />

<br />

<br />


isfamily="0" latitude="47.064666" longitude="15.402833" accuracy="16"<br />

place_id="mLIF9EWcBZQe_2Q" woeid="548536" /><br />

<br />

<br />

<br />

<br />

<br />

Takav odgovor se tada parsira te se na temelju informacija o fotografijama kreira lista<br />

objekata tipa ImageProperties. Elementi liste se tada pridodaju novostvorenim objektima tipa<br />

ImageMarker koji se prosljeđuju GoogleMaps objektu koji na temelju njihove lokacije<br />

dohvaća kartu preko Google Static Maps API-ja. URL zahtjeva upućenog Googleu je sljedeći:<br />

http://maps.google.com/staticmap?maptype=hybrid&size=180x177&key=ABQIA<br />

AAAFu2YUf9FPRKqBVa4vCk8yhQdJm8fylpyJk38MBuYS2ILidqmyRRTpZY4xR1EYfYNhui<br />

Ht_ajV_gQZg&markers=45.4,16.0,redo|45.745122,15.379185,whiteo|45.74512<br />

2,15.379185,whiteo|47.064666,15.402833,whiteo|46.991509,15.908412,whit<br />

eo|46.05182,14.510348,whiteo&sensor=false<br />

Iz URL-a zahtjeva moće se vidjeti da je izabrana hibridna karta veličine 180x177 piksela s<br />

oznakama čije lokacije odgovoraju onima od dobivenih fotografija. Vidi se također da je<br />

odabrana boja oznaka bijela i da se u oznaci prikazuje slovo 'o' za sve markere osim jednog<br />

koji je crvene boje, a koji predstavlja korisnikovu trenutnu lokaciju.<br />

U sljedećem koraku scenariju korisnik stisne tipku '9' te se pojavi ekran prikazan na Sl. 4.7.<br />

Sl. 4.7 Prikaz jedne fotografije na njenoj lokaciji<br />

42


Prikaz je dobiven tako da je upućen novi zahtjev Googleu sa središnjom točkom postavljenom<br />

na lokaciju na kojoj je fotografija snimljena:<br />

http://maps.google.com/staticmap?center=45.745122,15.379185&maptype=hy<br />

brid&zoom=14&size=240x291&key=ABQIAAAAFu2YUf9FPRKqBVa4vCk8yhQdJm8fylpy<br />

Jk38MBuYS2ILidqmyRRTpZY4xR1EYfYNhuiHt_ajV_gQZg&markers=45.4,16.0,redo|<br />

45.745122,15.379185,whiteo|45.745122,15.379185,whiteo|47.064666,15.402<br />

833,whiteo|46.991509,15.908412,whiteo|46.05182,14.510348,whiteo&sensor<br />

=false<br />

Prikazana slika je učitana s Flickra pomoću podataka (farm, server, id, secret ) navedenim u<br />

ImageProperties koje svaki ImageMarker posjeduje. Slovo 's' u sljedećem zahtjevu označava<br />

da se traži mala slika veličine 75x75 piksela:<br />

http://farm3.static.flickr.com/2457/3651794794_da511c8603_s.jpg<br />

Korisnik prema scenariju sljedeće pritisne tipku '5' čime se otvara forma tipa InfoForm koja<br />

sadrži veću fotografiju i njezine podatke poput naslova, autora i adrese na kojoj je snimljena<br />

kao što se može vidjeti na Sl. 4.8.<br />

Sl. 4.8 Forma s prikazom veće fotografije s podacima o naslovu, autoru i adresi<br />

Veća slika (240 piksela po najdužoj stranici) se dohvaća sljedećim upitom:<br />

http://farm3.static.flickr.com/2457/3651794794_da511c8603_m.jpg<br />

Da bi se dobilo pravo ime ili nadimak autora fotografije mora se napraviti još jedan upit<br />

prema Flickru navodeći metodu flickr.people.getInfo te predajući identifikator autora:<br />

43


http://api.flickr.com/services/rest?method=flickr.people.getInfo&api_k<br />

ey=b8d84838dd0342b92ecb89141dd17050&user_id=81926941@N00<br />

Odogovor metode pruža mnogo podataka kao što se može vidjeti u primjeru pa je potrebno<br />

parsirati informaciju o imenu odnosno nadimku:<br />

<br />

<br />

<br />

elkarrde<br />

Zagreb, Croatia<br />

http://www.flickr.com/photos/elkarrde/<br />

http://www.flickr.com/people/elkarrde/<br />

http://m.flickr.com/photostream.gne?id=3692315<br />

<br />

2007-01-01 00:30:20<br />

1176756610<br />

107<br />

<br />

<br />

<br />

Adresu lokacije na kojoj je fotografija snimljena se saznaje putem Googleove <strong>usluge</strong> za<br />

lokacijsko kodiranje sljedećim upitom:<br />

http://maps.google.com/maps/geo?q=45.745122,15.379185&output=csv&oe=ut<br />

f8&sensor=true_or_false&key=ABQIAAAAFu2YUf9FPRKqBVa4vCk8yhQdJm8fylpyJk<br />

38MBuYS2ILidqmyRRTpZY4xR1EYfYNhuiHt_ajV_gQZg<br />

Iz URL-a se može primjetiti da se predaju koordinate fotografije te da se traži odgovor u<br />

formatu CSV (Comma Separated Value) zapisanom pomoću UTF-8 kodnih stranica. Tako<br />

formatirani odgovor izgleda ovako:<br />

200,6,"3273,<br />

Žumberak/Gorjanci, Croatia"<br />

Broj 200 predstavlja statusni kod koji znači uspješno dekodiranje, broj 6 razinu preciznosti na<br />

razini ulice, a ostatak je adresa krenuvši od kućnog broja do imena države.<br />

U predviđenom scenariju korisnik još samo treba sačuvati fotografiju što čini odabirom opcije<br />

Sačuvaj. Fotografija se sprema u trajnu memoriju uređaju pod nazivom 3651794794.jpg (ime<br />

fotografije je njezin identifikator) pomoću FileManagera, a informacije o dotičnoj slici u<br />

lokalnu bazu podataka putem RecordManagera.<br />

44


5. Korištenje <strong>usluge</strong><br />

Da bi se iskoristio puni potencijal <strong>usluge</strong> potrebno je detaljnije se upoznati s mogućnostima<br />

aplikacije. Stoga će u ovom poglavlju biti objašnjene sve funkcionalnosti koje aplikacija nudi.<br />

Postavke<br />

Prije početka rada s aplikacijom potrebno je unijeti aktivacijski broj u postavkama Flickr<br />

računa da bi aplikacija mogla pristupati korisnikovom računu (Sl. 5.1 lijevo). To je preduvjet<br />

za slanje fotografija na Flickr te dohvaćanje i brisanje vlastitih fotografija s Flickra.<br />

U postavkama konekcija (Sl. 5.1 u sredini) potrebno je odabrati način dohvaćanja lokacije<br />

ovisno o mogućnostima koje mobilni uređaj posjeduje. U slučaju da se izabere dohvaćanje<br />

lokacije preko protokola SIP nužno je navesti korisničku SIP adresu i adresu poslužitelja<br />

preko kojeg se lokacija dohvaća.<br />

U postavkama prikaza moguće je mijenjati tip karte i broj slika koje će se prikazati (Sl. 5.1<br />

desno). Predefinirano je da se koristi tip karte mobile jer je optimiziran za prikaz na zaslonu<br />

pokretnog uređaja. Broj slika je ograničen radi veće brzine učitavanja.<br />

Sl. 5.1 Postavke konekcija (lijevo), prikaza (u sredini) i Flickr računa (desno)<br />

45


Snimanje fotografija<br />

Primjer postupka snimanja fotografija može se vidjeti na slici Sl. 5.2. Svi parametri koji<br />

opisuju sliku moraju se upisati na za to predviđena mjesta. Dodatne oznake koje se upisuju<br />

moraju biti odvojene razmakom.<br />

Korisniku se nude tri moguće akcije nakon snimanja fotografije (Sl. 5.2 desno):<br />

1. Pošalji – fotografija se šalje na Flickr, ali se ne posprema lokalno u memoriju<br />

uređaja te stoga neće biti vidljiva pri pretrazi sačuvanih fotografija, ali će biti vidljiva<br />

pri pregledu korisnikovih fotografija na Flickru,<br />

2. Sačuvaj – fotografija se ne šalje na Flickr već se sprema lokalno u memoriju uređaja<br />

te je vidljiva pri pregledu sačuvanih fotografija, ali nije vidljiva pri pregledu<br />

korisnikovih fotografija na Flickru,<br />

3. Pošalji i sačuvaj – opcija omogućava slanje fotografije na Flickr i lokalno spremanje<br />

u memoriju uređaja te će biti vidljiva pri svim vrstana pregleda.<br />

Sl. 5.2 Snimanje fotografije (lijevo), unos podataka (u sredini) i izbor mogućih akcija (desno)<br />

Nakon što je fotografija snimljena prikazat će se na ekranu. Ako je odabrano slanje na Flickr<br />

ime fotografije će biti oblika id.jpg gdje id predstavlja identifikator slike dobiven od Flickra.<br />

Ako je odabrano da se fotografija samo lokalno sačuva ime fotografije će sadržavati brojčani<br />

identifikator s prefiksom 'f'. Ukoliko slika nema identifikator u svom nazivu, odabrana akcija<br />

nije završila uspješno.<br />

46


Pregled fotografija<br />

Prilikom pregledavanja fotografija potrebna je interakcija korisnika s aplikacijom. Navigacija<br />

po karti i odabir raznih akcija koje utječu na prikaz karte se vrše pritiskanjem pojedinih tipki<br />

na pokretnom uređaju. Akcije i tipke koje ih aktiviraju su sljedeće:<br />

• tipke 1 i 3 – udaljavanje (zoom out) i približavanje (zoom in);<br />

• tipka 5 – prikaz veće fotografije s detaljima koje ju opisuju;<br />

• tipke 7 i 9 – vraćanje na prethodnu ili prelazak na sljedeću fotografiju;<br />

• tipka 8 – vraćanje na zadnju odabranu fotografiju nakon pomicanja po karti;<br />

• tipka 0 – prikaz svih lokacija fotografija;<br />

• tipke lijevo, desno, gore i dolje – pomicanje u navedenim smjerovima;<br />

• tipka S (vidi Sl. 5.3) – označavanje lokacije prilikom razgledavanja.<br />

Sl. 5.3 Tipke pokretnog uređaja<br />

Aplikacija omogućava izbor između sljedećih funkcionalnosti:<br />

1. Sačuvane fotografije,<br />

2. Najbliže fotografije,<br />

3. Napredna pretraga,<br />

4. Moje fotografije i<br />

5. Razgledavanje.<br />

1. Prva funkcionalnost omogućava pregled i brisanje sačuvanih fotografija bilo da ih je<br />

korisnik snimio ili samo sačuvao njemu zanimljive fotografije prilikom pretraživanja po<br />

Flickru. Korisniku je također omogućeno da snimi fotografiju na području gdje nema signala<br />

47


pokretne mreže odnosno pristupa Internetu te da ju poslije pošalje na Flickr s lokacijom na<br />

kojoj je snimljena. Takav scenarij je pokazan na Sl. 5.4. Korisnik je primjerice snimio<br />

fotografiju u Barceloni, no zbog skupog pristupa Internetu pričekao je povratak u Hrvatsku te<br />

tada poslao fotografiju na Flickr. Najdesnija slika pokazuje kako fotografija izgleda prikazana<br />

na Flickru. Opcija slanja na Flickr je dozvoljena ako je fotografiju snimio korisnik te ju samo<br />

sačuvao nakon toga. Opcija brisanja je omogućena za sve fotografije.<br />

Sl. 5.4 Scenarij naknadnog slanja fotografije na Flickr<br />

2. Dohvaćanje najbližih fotografija je zapravo specijalni slučaj 3. funkcionalnosti - napredne<br />

pretrage. Napredna pretraga omogućuje pretraživanje fotografija po oznakama (tagovima) i/ili<br />

adresi lokacije u blizini koje se želi pogledati fotografije što se može vidjeti na Sl. 5.5. Ako se<br />

ne navede ni jedno ni drugo, dohvatit će se najbliže fotografije. Adresa će se smatrati<br />

valjanom ako je upisano ime države ili grada. Ako je upisana samo ulica unos će se<br />

zanemariti.<br />

Sl. 5.5 Forma za naprednu pretragu<br />

48


4. funkcionalnost je pregled vlastitih fotografija s Flickra. Te fotografije mogu biti snimljene<br />

na mobilnom uređaju, ali i ne moraju. Ideja koja stoji iza nje je da korisnik može vidjeti<br />

lokacije svih fotografija koje je dotad snimio. Omogućena je sva standardna navigacija, a<br />

dodatno je moguće brisanje fotografije. Nakon brisanja fotografije moguće je da će ona nakon<br />

osvježavanja i dalje biti dostupna jer Flickru treba neko kraće vrijeme (do 20 s) da je makne iz<br />

svoje baze podataka.<br />

5. Razgledavanje je funkcionalnost koja korisniku omogućava pretragu fotografija ako nema<br />

ideju kakve točno fotografije i oko koje lokacije želi pregledati. Početni pogled pokriva cijeli<br />

svijet, a korisnik onda navigacijom (tipkama smjera i približavanjem) sužava područje<br />

pretrage. Kada se odluči za određenu lokaciju označava ju pritiskom na tipku te dobiva<br />

fotografije najbliže toj odabranoj lokaciji. Postupak traženja je moguće ponoviti istim<br />

postupkom. Prilikom pregledavanja fotografije je moguće sačuvati.<br />

49


6. Zaključak<br />

U sklopu diplomskog rada su proučene tehnologije koje se koriste za pružanje informacijskih<br />

usluga temeljenih na kontekstu lokacije korisnika te su primijenjene pri izradi <strong>usluge</strong> s<br />

<strong>lokacijski</strong>m označavanjem sadržaja.<br />

Aplikacija FlicLoc razvijena kao dio <strong>usluge</strong> omogućuje korisniku snimanje <strong>lokacijski</strong><br />

označenih fotografija na njegovom pokretnom uređaju te slanje tako označenih fotografija na<br />

popularnu uslugu za razmjenu fotografija – Flickr. Količina i kvaliteta dostupnog sadržaja je<br />

nužna za zadovoljstvo korisnika pri korištenju <strong>usluge</strong>. Flickr je odabran kao usluga za<br />

pohranu i preuzimanje fotografija upravo zbog svoje popularnosti i velikog broja korisnika<br />

koji svakodnevno generiraju veliku količinu <strong>lokacijski</strong> označenog sadržaja.<br />

Aplikacija nudi i mogućnost dohvaćanja <strong>lokacijski</strong> označenih fotografija s Flickra i njihov<br />

pregled na pokretnom uređaju. Pregled fotografija se vrši preko intuitivnog sučelja koje<br />

koristi Googleove karte za prikaz lokacija na kojima su fotografije snimljene. Osim zadatkom<br />

zahtijevane mogućnosti lociranja od strane mreže putem protokola SIP dodana je i podrška za<br />

lociranje putem GPS-a čime se omogućava korisnicima snimanje <strong>lokacijski</strong> označenih<br />

fotografija čak i ako su izvan dohvata pokretne mreže odnosno ako nemaju mogućnost<br />

dohvatiti lokaciju preko SIP-a.<br />

Ograničenje pri uporabi <strong>usluge</strong> može biti brzina dostupne veze. Iako se pri izradi <strong>usluge</strong><br />

pazilo da se smanji generirani promet, vrijeme odziva aplikacije neće biti zadovoljavajuće u<br />

slučaju da se Internetu pristupa preko sporije veze poput GPRS-a. Čak i ako je to slučaj,<br />

korisniku ostaje mogućnost da snimi označenu fotografiju te ju pospremi lokalno.<br />

Izrađena usluga je uspješno testirana na stvarnim uređajima i izvediva je u laboratorijskim<br />

uvjetima u slučaju da se za lociranje koristi protokol SIP te izvan laboratorija u slučaju<br />

korištenja lociranja putem GPS-a.<br />

50


Literatura<br />

[1] JSR 30: J2ME TM Connected, Limited Device Configuration, Java Community<br />

Process, 2000, [http://jcp.org/en/jsr/detail?id=30, 29.5.2009.]<br />

[2] RFC 3261 - SIP: Session Initiation Protocol, [http://tools.ietf.org/html/rfc3261,<br />

29.5.2009.]<br />

[3] Hrvoje Vojnić, Ivan Malić, Ante Bronić: Sustav pozicioniranja mobilnih terminala,<br />

Revija - Časopis Dioničkog društva Ericsson Nikola Tesla, broj 2,<br />

2001.[http://www.ericsson.hr/etk/revija/Br_2_2001/mps.htm, 23.6.2009.]<br />

[4] Geotagging, [http://en.wikipedia.org/wiki/Geotagging, 23.6.2009.]<br />

[5] Geocoding, ]http://en.wikipedia.org/wiki/Geocoding, 23.6.2009.]<br />

[6] JSR 36: Connected Device Configuration, Java Community Process 2005,<br />

[http://jcp.org/en/jsr/detail?id=36, 23.6.2009.]<br />

[7] JSR 139: Connected Limited Device Configuration 1.1, Java Community Process<br />

2007, [http://jcp.org/en/jsr/detail?id=139, 23.6.2009<br />

[8] JSR 118: Mobile Information Device Profile 2.0, Java Community Process, 2006,<br />

[http://jcp.org/en/jsr/detail?id=118, 23.6.2009<br />

[9] JSR 154: Java Servlet 2.4 Specification, [http://jcp.org/en/jsr/detail?id=154,<br />

23.6.2009.]<br />

[10] JSR 289: SIP Servlet v1.1, [http://jcp.org/en/jsr/detail?id=289, 23.6.2009.]<br />

[11] SailFin: SIP Servlet Container, [https://sailfin.dev.java.net/, 23.6.2009.]<br />

[12] GlassFish – Open Source Application Server, [https://glassfish.dev.java.net,<br />

23.6.2009.]<br />

[13] Miran Mošmondor, "Enabler for location-aware services in IMS", M.S. thesis,<br />

University of Zagreb, Zagreb, Croatia, 2007.<br />

[14] Flick API, [http://www.flickr.com/services/api/, 23.6.2009.]<br />

[15] Google Static Maps API,<br />

[http://code.google.com/intl/hr/HR/apis/maps/documentation/staticmaps, 23.6.2009.]<br />

51


Dodatak A: Instalacija programske podrške<br />

Da bi se rad isprobao potrebno je slijediti sljedeće korake:<br />

1) Sa stranice SailFin projekta treba skinuti najnoviju verziju softvera (recimo da se<br />

radi o SailFin 1.0, a da se skinuta datoteka zove sailfin-installer-v1-b60gwindows.jar).<br />

Nakon toga se treba preko konzole (start->run pa upisati cmd i<br />

stisnuti ok) pozicionirati u direktorij gdje se nalazi datoteka te upisati sljedeću<br />

naredbu:<br />

java -Xmx256m -jar sailfin-installer-v1-b60g-windows.jar<br />

2) Nakon toga se otvara prozor u kojem je potrebno povući desni slider do kraja te<br />

označiti Enable autoupdate i stisnuti gumb Accept što će rezultirati otpakiravanjem<br />

sadržaja JAR datoteke u direktorij SailFin.<br />

3) Treba se pozicionirati u direktorij SailFin te upisati sljedeću naredbu da bi se SailFin<br />

instalirao na računalo:<br />

lib\ant\bin\ant -f setup.xml<br />

4) Sljedeće je potrebno integrirati SailFin u NetBeans razvojnu okolinu. To se radi tako<br />

što se pod oznakom services klikne desnom tipkom miša na Servers i tamo izabere<br />

Add server. Na popisu je potrebno izabrati SailFin te u sljedećem koraku odabrati<br />

direktorij u kojem je SailFin smješten pod Platform Location. Također, označite<br />

Register Local Default Domain. Na sljedećem ekranu je još samo potrebno upisati<br />

lozinku (npr. adminadmin) i stisnuti gumb Finish čime je integracija gotova.<br />

5) Za razvoj SIP servlet aplikacija postoji plug-in za NetBeans. Instalira se tako da se<br />

ode na Tools->Plugins i nađe na popisu dostupnih pluginova SIP Projects, označi i<br />

klike install.<br />

6) Sada je potrebno pokrenuti poslužiteljsku aplikaciju na SailFinu. Treba otići na File-<br />

>Open project te izabrati direktorij LocationServlet koji dolazi s ovim radom te<br />

desnim klikom na projekt izabrati opciju run. Time će se aplikacija prenesti na<br />

SailFin i automatski pokrenuti.<br />

52


7) Pod service->Servers kliknuti desnim klikom na SailFin te izabrati View Admin<br />

Console nakon čega se u browseru otvara sučelje za upravljanje SailFinom. Treba<br />

podesiti portove na kojima osluškuje SIP promet tako da se ode na Configuration-<br />

>SIP Container i postavi SIP port na 6080 (može i neki drugi, no onda se mora<br />

svugdje tako postaviti). Nakon toga treba postaviti isti port i pod Sip Service->SIP<br />

Listeners->sip-listener-1. Za lakše snalaženje može poslužiti Error! Reference<br />

source not found..<br />

Slika A Postavljanje SIP porta preko administratorskog sučelja<br />

8) Nakon što je SailFin podešen potrebno je instalirati i podesiti IMS Location Server.<br />

Instalacijsku datoteku koja dolazi uz rad potrebno je pokrenuti i slijediti korake dok<br />

instalacija nije završena. Nakon toga je i ILS-u potrebno promjeniti port na kojem<br />

osluškuje promet. Pozicionirajte se u direktorij /Ericsson Nikola Tesla/IMS Location<br />

Server/res gdje ste instalirati ILS te otvorite u uređivaču teksta datoteku<br />

configuration.properties. U njoj trebate naći javax.sip.PORT i postaviti ga na 6090.<br />

ILS se pokreće dvoklikom na runLS.bat.<br />

U slučaju da se klijentska aplikacija želi pokrenuti lokalno na računalu potrebno je na njemu<br />

imati instaliran Sun Wireless Toolkit (WTK) čija se instalacijska datoteka nalazi na CD-u koji<br />

dolazi s radom. Prije pokretanja aplikacije potrebno je pokrenuti WTK te postaviti vrijednost<br />

53


koja predstavlja veličinu memorije na raspolaganju za RMS tako da aplikacija pamti sačuvane<br />

postavke. Pod edit->preferences se izabere Storage i postavi na neku vrijednost. Aplikacija<br />

koristi relativno malo memorije pa zapravo nije bitan iznos koji se unese.<br />

Nakon što su provedeni svi gore navedeni koraci aplikacija se može koristiti ako se odabere<br />

dohvaćanje lokacije preko SIP-a u postavkama. Ako se želi na računalu simulirati GPS,<br />

potrebno je nakon pokretanja aplikacije u emulatoru pod MIDlet->External events postaviti<br />

vrijednosti geografske širine i dužine. Slika B može poslužiti za lakše snalaženje.<br />

Slika B Podešavanje GPS-a u emulatoru<br />

54

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!