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 ...
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.
- Page 3 and 4: Mentor rada: doc. dr. sc. Mario Ku
- Page 5 and 6: Uvod Napretkom pokretnih mreža i u
- Page 7 and 8: Vrijeme dolaznog signala (TOA) je m
- Page 9 and 10: zapisivati pomoću posebnih program
- Page 11 and 12: kodiranje (reverse geocoding). Prim
- Page 13 and 14: 2. Java na malim uređajima Posljed
- Page 15 and 16: U nastavku su detaljnije opisane ko
- Page 17 and 18: • dubina prikaza boja od 1 bita,
- Page 19 and 20: Da bi JAR datoteka bila izvršna, u
- Page 21 and 22: odgovarajuće metode zadužene za o
- Page 23 and 24: 3.2. SailFin SailFin [11] je aplika
- Page 25 and 26: primjer.SIPServlet2 SIPServlet1
- Page 27 and 28: formatu potrebno definirati koordin
- Page 29 and 30: svojoj blizini korištenjem Flickr
- Page 31 and 32: 000005fab4534d05api_key9a0554259914
- Page 33 and 34: • hidden - 1 da se može pretraž
- Page 35 and 36: 4.3. Implementacija Preduvjet za ko
- Page 37 and 38: Nakon što nađe lokaciju korisnika
- Page 39 and 40: o SettingsList - izbornik postavki,
- Page 41 and 42: izbora snimanja nove fotografije ko
- Page 43 and 44: 1 -----------------------------84b1
- Page 45 and 46: Prvi upit sadržava koordinate i ra
- Page 47 and 48: Prikaz je dobiven tako da je upuće
- Page 49 and 50: 5. Korištenje usluge Da bi se isko
- Page 51 and 52: Pregled fotografija Prilikom pregle
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¶meter=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