poroilo praktinega izobraŽevanja - praksa homepraksa.uni-mb.si/porocila/e1010653.pdf · modul z...
TRANSCRIPT
VISOKOŠOLSKI STROKOVNI ŠTUDIJ
Računalništvo in informacijske tehnologije
POROČILO PRAKTIČNEGA IZOBRAŽEVANJA
v
TFStoritve d.o.o., Nazarje
Čas opravljanja od 1.8.2012 do 3.10.2012
Mentor v GD dr. Matej Črepinšek
Študent David Jager
Vpisna številka E1010653
E pošta [email protected]
Telefon 031 485 284
KAZALO
1 Uvod ........................................................................................................................ 1
2 TFStoritve d.o.o. ..................................................................................................... 2
3 Opis projektnega dela ............................................................................................. 3
3.1 Eclipse ............................................................................................................. 3
3.2 Android SDK ................................................................................................... 3
3.3 ADT vtičnik za Eclipse.................................................................................... 4
3.4 SQLite .............................................................................................................. 4
4 Projekt »whatsUp« .................................................................................................. 5
5 Sklep ..................................................................................................................... 15
6 Zaključek .............................................................................................................. 16
7 Spletni viri ............................................................................................................. 17
KAZALO SLIK
Slika 1: ER model podatkovne baze med razvojem .............................................................. 5
Slika 2: XML datoteka z zapisom postavitvi elementov na enem delu strani ...................... 7
Slika 3: Vizualni izgled XML datoteke prikazan na sliki 2 .................................................. 7
Slika 4: Del izvorne kode v enem izmed razredov ................................................................ 8
Slika 5: Struktura tabele "business" napisana v SQLite notaciji ........................................... 9
Slika 6: Tri SQL sintakse, s katerimi se izvajajo operacije nad podatki v podatkovni bazi 10
Slika 7: Prikaz seznama restavracij in gostiln, glede na trenutno geografsko lokacijo ....... 12
Slika 8: Primer iskalne poizvedbe vseh kuponov, ki so trenutno aktivni ............................ 13
1
1 Uvod
Študijsko prakso sem opravljal pri podjetju TFStoritve d.o.o. kjer sem si nabral
ogromno delovnih izkušenj in novega strokovnega znanja. Vse to mi bo zagotovo
pomagalo pri iskanju zaposlitve.
Moje delo je bilo projektno usmerjeno, zato sem večino časa delal samostojno. Med
opravljanjem prakse sem tako izjemno nadgradil svoje znanje razvoja Android mobilnih
aplikacij, ter osvežil svoje znanje o podatkovnih bazah. Spoznal sem se tudi z drugimi
tehnologijami, ki so trend sodobnega razvoja računalniških aplikacij.
2
2 TFStoritve d.o.o.
TFStoritve, programske in strojne rešitve ter svetovanje, d.o.o. je mlado podjetje, ki se
primarno ukvarja z razvojem aplikacij za mobilne telefone in tablične računalnike. Poleg
tega se podjetje ukvarja tudi z razvojem spletnih strani, namiznih aplikacij, z razvojem
storitev v oblaku, strojnimi rešitvami, ter svetovanjem.
Njihov trenutno najbolj uspešnen produkt je mobilna aplikacija »Weatherlove«, izdana
za operacijski sistem Android in jo lahko najdemo na Google-ovi spletni »Trgovini Play«.
Aplikacija je naletela na izjemno pozitiven vtis in je za slovenske razmere izjemno
razširjena, saj jo uporabljajo že v 128 državah po vsem svetu. V prihodnosti bo aplikacija
izdana tudi za operacijski sistem iOS, tako da bo na voljo tudi na mobilnikih iPhone.
Podjetje je v svoji kratki dobi realiziralo tudi več drugih manjših in srednje velikih
projektov.
3
3 Opis projektnega dela
V delo mi je bil zaupan projekt, oziroma del projekta, ki se je razvijal pod kodnim
imenom »whatsup«. Gre za sistem, ki na enem mestu združuje podatke o vseh picerijah,
restavracijah, gostilnah, itn. v Sloveniji. Sistem je razdeljen na tri večje module; glavni
modul z bazo podatkov, spletna stran, ter mobilna aplikacija. Moje delo se je osredotočalo
na razvoj mobilne aplikacije, ter na razvoj sistema za komuniciranje z glavnim modulom
oziroma natančneje z podatkovno bazo. Spletne strani in glavnega modula zatorej ne bom
podrobneje opisoval.
Naj na začetku na kratko opišem nekaj programskih paketov in tehnologij, ki sem jh
uporabljal tekom izvajanja študijske prakse, ter jih dodobra spoznal in osvojil.
3.1 Eclipse
Eclipse je orodje za razvoj programskih aplikacij, ki vsebuje integrirano okolje za
razvoj programov in ima obsežen sistem raznih vtičnikov. Ti vtičniki omogočajo razvijanje
v najrazličnejših programskih jezikih, kot so C, C++, PHP, Fortran, COBOL, Pyton, Ruby
in še mnogih drugih. Primarno je Eclipse namenjen za razvoj aplikacij v programskem
jeziku Java. Velika večina Eclipsa je napisana v Javi, orodje vključno z vsemi vtičniki pa
je odprtokodno, torej zastonjsko.
3.2 Android SDK
Android SDK (Software Development Kit) je skupek orodij za razvoj Android
aplikacij. Nekatera od teh orodij so nujno potrebna za razvoj aplikacij, med najbolj
pomembne spadajo razvojne knjižnice. Ostala orodja nam povečini delo zelo olajšajo, pa
naj tu omenim razhroščevalnik za aplikacije, ki je zelo pomembno in tudi zelo uporabno
orodje. Ostala orodja so tudi emulator, ki vzpostavi virtualni operacijski sistem Android na
našem računalniku. Potem imamo zraven še dokumentacijo, primere izvore kode, ter demo
primere aplikacij, vse to za lažje in hitrejše razvijanje Android aplikacij.
4
3.3 ADT vtičnik za Eclipse
ADT(Android Development Tools) je vtičnik za Eclipse in ponuja močno integrirano
okolje za razvoj Android aplikacij. ADT razširja možnosti Eclipse samega in ponuja več
stvari. Med drugimi omogoča hitro postavitev novega projekta, vključuje prirejen
urejevalnik za XML datoteke, ter ponuja enostaven in močan sistem za upravljanje z
razhroščevalnikom. Vtičnik omogoča celo izvoz izvršljive datoteke (.apk) iz projekta, ki je
potrebna za distribucijo aplikacije.
3.4 SQLite
SQLite je sistem za upravljanje z relacijskimi podatkovnimi bazami. Njegova prednost
je, da je združen v izjemno majhni programski knjižnici (jezika C). Zato je pogosto
uporabljen kot integrirana podatkovna baza za lokalno shranjevanje podatkov. Uporabljajo
ga predvsem spletni brskalniki. Android za lokalno shranjevanje podatkov uporablja med
drugim tudi integriran podatkovno bazo sistema SQLite. Sistem povzema večino
standarda SQL, ne pa vsega. Torej so vidne določene podobnosti med sistemoma SQL in
SQLite.
Na začetku projekta se je na podlagi dokumentacije in naročnikovih želja naredil
podroben projektni načrt, razdeljen na posamezne izvedljive module. V projekt so bili
vključeni tudi datumskimi roki izvedbe.
5
4 Projekt »whatsUp«
Moja prva zaposlitev je bila izris enititetno-relacijskega (ER) modela podatkovne baze.
Po končanem delu, z vmesnimi posvetovanji, spremembami in kompromisi (tudi z
naročnikom), je sledila potrditev ER modela z strani mentorja. Slika 1 prikazuje ER model
med samim razvojem, saj se je do konca projekta model na naročnikovo željo še
spreminjal.
Slika 1: ER model podatkovne baze med razvojem
Preden pa sem sploh lahko ustvaril nov projekt v orodju Eclipse, pa sem moral seveda
namestiti program Eclipse, ADT vtičnik za Eclipse, ter paket Android SDK.
Pred začetkom razvoja mobilne aplikacije sem dobil modulsko razdelan načrt mobilne
aplikacije, ki sem ga dobro preučil. Aplikacija je morala imeti podporo od najnovejše
verzije Android 4.1, pa nazaj vse do verzije Android 2.1. Po skrbnem premisleku, ter po
nekaj na papir izrisanih korakih, sem na podlagi načrta začel implementirati prvi modul
imenovan »ActionBarCompat«. ActionBar je v OS Android menijska vrstica in je na
integrirana v verzijah Android 3.0 in novejših. Starejše verzije Androida uporabljajo
spustne menije namesto dotične menijske vrstice.
6
Modul »ActionBarCompat« je v resnici skupek razredov, ki omogočajo uporabo
menijske vrstice tudi v verzijah, ki so starejše od Android 3.0 in sicer vse tja do različice
1.6. Integracija modula ni bila zahtevna, saj Google modul ponuja zastonj za vse razvijalce
Android sistemov. Vse kar je bilo potrebno storiti, je kopiranje vseh razredov in priloženih
XML datotek v moj projekt, malenkost popraviti XML dateoteko imenovano »Android
Manifest«, ter glavni razred v mojem projektu.
Sledila je implementacija modula Fragment, ki omogoča uporabo tako imenovanih
»flingerjev«. Z drugimi besedami v primeru, da imamo več strani, nam modul omogoča
prehod na naslednjo ali prejšnjo stran drsenjem levo ali desno po ekranu. Modul je novejši
in nadomešča uporabo klasičnih gumbov za prehod med stranmi. Implementacija slednjega
modula je bila nekoliko zahtevnejša, a še vseeno dokaj enostavna. V projekt je bilo
potrebno dodati knjižnico »android compatibility«, ki podpira uporabo fragmentov v
starejših verzijah OS Android. Nato je sledila dejanska implementacija modula
»Fragment« na podoben način kot je zgoraj opisana implementacija modula
»ActionBarCompat«, le da je tukaj veliko več paketov z razredi, ter XML datotek, ki jih je
bilo treba pravilno povezati da je modul začel delovati.
V tej točki je bil projekt pripravljen za začetek implementacije glavne strani, ki bo
vidna, ko bo uporabnik odprl aplikacijo. Seveda je bilo potrebno predhodno izrisati
postavitev elementov na strani. To postavitev sem dobil pred začetkom dela, ampak zgolj
na sliki. Potrebno je bilo napisati XML datoteko, v kateri sem elemente razporedil tako,
kot je bilo narisano na sliki. Sliki 2 in 4 prikazujeta razliko med postavitvijo elementov
strani v XML datoteki in dejanskim vizualnim izgledom le-te na zaslonu.
7
Slika 2: XML datoteka z zapisom postavitvi elementov na enem delu strani
Slika 3: Vizualni izgled XML datoteke prikazan na sliki 2
8
Po istem postopku sem kasneje napisal XML datoteke postavitve elementov, tudi za
ostale strani oziroma bolje rečeno podstrani v aplikaciji. Za vsako stran v aplikaciji za
katero sem napisal XML datoteko, sem moral napisati tudi razred v katerem sem
postavljene elemente, iz XML datoteke, povezal z izvršljivo kodo. Tako sem lahko v teh
elementih tekom izvajanja aplikacije spreminjal podatke. Slika 3 prikazuje del izvorne
kode iz razreda glavne strani. Dotična izvorna koda poveže razred z XML datoteko v kateri
ja zapisana postavitev elementov na strani.
Slika 4: Del izvorne kode v enem izmed razredov
Podatki, ki jih aplikacija uporablja so shranjeni na oddaljenem strežniku v podatkovni
bazi. Ker je bila naročnikova želja da je možno aplikacijo uporabljati tudi v načinu brez
internetne povezave, smo morali v aplikaciji na telefonu ustvariti lokalno podatkovno
bazo, ki je kopija glavne baze podatkov. Naša lokalna podatkovna baza se zatorej večkrat
dnevno sinhronizira z glavno podatkovno bazo na oddaljenem strežniku.
9
Glavna podatkovna baza temelji na sistemu SQL. Android pa ima podatkovno bazo, ki
temelji na sistemu SQLite. Čeprav sta si sistema podobna, imata vsak svoje prvine in se v
določenih segmentih razlikujeta. Zaradi te težave se strukture baze iz strežnika na telefon
ni dalo enostavno izvoziti in je bilo potrebno na telefonu celotno strukturo podatkovne
baze napisati ročno. Med to strukturo je spadalo pisanje vseh tabel v vsemi atributi ter
njihovimi lastnosti, kakor tudi pisanje vseh relacij med tabelami vključno z primarnimi in
tujimi ključi. Del te strukture prikazuje spodnja slika.
Slika 5: Struktura tabele "business" napisana v SQLite notaciji
Postavitev podatkovne baze na telefonu je bil le majhen del. Potrebno je bilo bazo
seveda tudi napolniti z podatki. Tukaj mi je bil v veliko pomoč mentor, s katerim sva
skupaj razvila način sinhronizacije z oddaljenim strežnikom. Celotna realizacija
sinhronizacije je bila dokaj zapletena, saj je bilo potrebno pomisliti na vse možne napake,
ki bi se lahko zgodile in jih zaobiti. Vključiti je bilo potrebno kar nekaj zunanjih
dejavnikov, ki bi lahko vplivali na samo sinhronizacijo. Veliko je bilo tudi odvisno tudi od
trenutnih stanj tako telefona, kot tudi strežnika. Morebitna izguba podatkov med
sinhronizacijo bi bila izjemno nezaželena ali bolje rečeno skoraj nedopustna.
10
Naročnik je sicer zahteval, da je sinhronizacija podatkovne baze opravljena čim bolj
enostavno in nezapleteno. Ker spletni strežnik, na katerem je spletna stran in podatkovna
baza, ne omogoča spletnih servisov, je celotna komunikacija z mobilno aplikacijo potekala
preko protokola HTTP in sicer po sledečem postopku.
Spletna stran omogoča registracijo uporabnikov, v tem primeru so to podjetja, ki jih
aplikacija oglašuje (picerije, gostilne, itn.). Vsak uporabnik lahko za svoje podjetje doda in
spreminja opise, delavnik, dnevne in stalne ponudbe, posebne ponudbe, slike, itn. Vsi ti
podatki se shranjujejo v podatkovno bazo na spletnem strežniku. Postopek poteka na način,
da za vsako spremembo podatkov, s strani uporabnika, spletni strežnik izvede niz SQL
stavkov, ki v bazi podatkov shranijo oziroma spremenijo dotične podatke.
V podatkovni bazi na spletnem strežniku obstajajo še dodatne tabele namenjene
sinhronizaciji. Za vsako spremembo podatkov, ki mora biti vidna tudi na mobilni
aplikaciji, spletni strežnik ob izvedbi SQL stavka na svoji podatkovni bazi, tak SQL stavek
skupaj z trenutno časovno značko shrani tudi v tabele, namenjene sinhronizaciji. Tako
imamo v spletni podatkovni bazi v tabelah za sinhronizacijo seznam vseh SQL stavkov, ki
prikazujejo spremembe podatkov v spletni podatkovni bazi.
Sintakse zapisovanja SQL stavkov se sicer med podatkovno bazo SQL in SQLite
malenkost razlikujejo, zato spletni strežnik pred zapisom SQL stavka v tabelo za
sinhronizacijo, le-tega po potrebi malenkost preuredi, za zadošča SQLite sintaksi. Sintaksa
glavnih treh SQL stavkov, ki so namenjeni sami obdelavi podatkov, se med sistemoma
SQL in SQLite ne razlikuje. To so stavki INSERT INTO, ki je namenjen vnašanju novih
podatkov v tabelo, stavek UPDATE, namenjen spremembi že obstoječih podatkov v tabeli
in pa stavek DELETE FROM, ki je namenjen brisanju podatkov iz tabele. Sintaksa teh treh
stavkov je prikazana na spodnji sliki. Razlike med sistemoma se pokažejo pri sintaksah za
ustvarjanje tabel, relacij med njimi, manipulaciji tabel, itn.
Slika 6: Tri SQL sintakse, s katerimi se izvajajo operacije nad podatki v podatkovni bazi
11
Na mobilni aplikaciji je postopek sinhronizacije sledeč in se izvaja vsakih 15 min če je
aplikacija zagnana, oziroma kadar uporabnik zažene aplikacijo. Ta v primeru, da je
omogočen dostop do interneta pošlje HTTP zahtevo na spletni strežnik skupaj s sledečima
atributoma; časovno značko zadnje posodobitve ('0' v primeru prvega zagona aplikacije),
ter številko verzije podatkovne baze na mobilnem telefonu. Spletni strežnik nato na
podlagi atributa verzije podatkovne baze poišče tabelo, namenjeno sinhronizaciji za točno
to verzijo mobilne podatkovne baze. Iz slednje nato prebere vse zapise, ki imajo novejšo
časovno značko od posredovane, ter jih zapiše v vnaprej dogovorjen XML format. Podatke
nato vrne aplikaciji. V primeru, da aplikacija posreduje časovno značko z vrednostjo 0,
spletni strežnik posreduje vse podatke iz tabele.
Ko mobilna aplikacija prejme podatke, v ozadju razbere XML format, ter poskuša vse
stavke, enega za drugim izvesti na svoji lokalni bazi podatkov. Ob vsakem uspešnem
zapisu SQL stavka v podatkovno bazo, aplikacija prepiše atribut časovna značka z časovno
značko, ki je skupna le-temu SQL stavku. Ob kakršni koli napaki se sinhronizacija takoj
prekine, ter poskuša z delom nadaljevati ob naslednji sinhronizaciji. V tem primeru se
postopek sinhronizacije ponovi od samega začetka z poslano zahtevo na spletni strežnik, a
z najnovejšo časovno značko, tako, da se postopek nadaljuje od zadnjega uspešnega zapisa
SQL stavka naprej. Seveda se ob vsakršni napaki pošlje sporočilo, skupaj z opisom napake,
nazaj na spletni strežnik, ta pa sporočilo posreduje tudi odgovornim na elektronsko pošto.
Z malo sreče je lahko napaka odpravljena še pred naslednjo sinhronizacijo, v veliki večini
pa zagotovo še isti dan.
Naslednji modul ki sem ga implementiral je bil imenovan »LocationProvider«. Ta
modul lahko določi trenutno lokacijo telefona, torej geografsko dolžino in širino. Načina
pridobivanja podatkov o trenutni lokaciji sta dva; prvi je preko GPS modula v telefonu in
je bolj natančen. Drugi pa je preko vzpostavljene internetne povezave. Če gre za mobilno
internetno povezavo govorimo o triangulaciji mobilnega signala preko mobilnih
oddajnikov. V primeru brezžične lokalne omrežne povezave ali WLAN, pa je ta dobljena
lokacija, lokacija modema, na katerega je telefon povezan.
Ta modul smo implementirali zaradi naročnikovih želja, da se podatki v seznamu
razvrstijo od najbližjega do najbolj oddaljenega glede na uporabnikovo trenutno lokacijo.
Na ta način se je aplikacija nekoliko lokalizirala, saj uporabniku na začetku prikaže
restavracije in gostilne, ki so mu trenutno najbližje. Spodnja slika prikazuje glavno stran
12
aplikacije, z seznamom restavracij, gostiln, itn. Na seznamu je lepo vidna lokalizacija
aplikacije, nad seznamom pa lahko vidimo primer menijske vrstice, ki sem jo
implementiral kot modul »ActionBarCompat«.
Slika 7: Prikaz seznama restavracij in gostiln, glede na trenutno geografsko lokacijo
Med zahtevnejšimi moduli za implementacijo je bil zagotovo modul za iskanje.
Aplikacija namreč omogoča tudi poljubno iskanje po nazivu, naslovu, opisu, ponudbi, itn.
Zahtevnejše opravilo pri tem modulu je bila povezava iz katerekoli strani v aplikaciji na
iskalno stran. Povezava je bila mogoča ob pritisku na gumb »išči« v menijski vrstici ali
13
preko sistemskega gumba (na telefonu) »iskanje«, ki ga imajo vsi telefoni z operacijskim
sistemom Android tovarniško vključenega. Sam iskalni algoritem ni bil pretirano zahteven,
saj je celotno iskanje po podatkih potekalo z poizvedovalnim jezikom SQLite direktno na
lokalni podatkovni bazi. Spodnja slika prikazuje primer iskalne poizvedbe.
Slika 8: Primer iskalne poizvedbe vseh kuponov, ki so trenutno aktivni
Kar se tiče vizualnega izgleda aplikacije, je bil ta že v naprej izbran s strani naročnika,
tako da tu razen izdelave le-tega, nisem imel nobenega vpliva. Barve ozadij, velikosti pisav
in ostali vizualni popravki, so v veliki večini zapisani v XML datotekah, kjer so zapisane
postavitve elementov. Ostali vizualni popravki pa so zapisani v drugih datotekah, ki so
namenjene stilom in so prav tako v obliki XML.
Tekom izvajanja študijske prakse, tudi med razvijanjem projekta »whatsUp«, sem
dobival tudi druge, manjše zaposlitve. Tu govorimo o manjših modulih uporabljenih pri
drugih projektih. Tega dela ne bom posebej opisoval, saj je bilo to sprotno, rutinsko delo,
14
naj pa za primer navedem eno izmed teh del. Med delom na projektu »whatsUp«, sem
dobil nalogo, da napišem majhen modul (dve ali tri metodi) za aplikacijo Weatherlove, ki
preračuna kdaj bo sončni vzhod oz zahod v katerem koli delu sveta po naši uri. Sama
izvedba modula ni bila zahtevna, razvojni čas pa zelo kratek. Takšnih in podobnih
zaposlitev sem dobil kar nekaj, tako da moje delo ni bilo omejeno striktno na projekt
»whatsUp«, je pa bil slednji projekt glavnina moje študijske prakse, zato sem ga tudi
opisal.
15
5 Sklep
Zame osebno je bil to najobsežnejši projekt kar sem jih opravljal do sedaj. Tukaj sem
uvidel zakaj je potrebno pred vsakim projektom le-tega razdeliti na več modulov, ter
narediti terminski načrt. Brez tega bi bil projekt preveč obsežen in slej kot prej bi se
»izgubil« v zmedi vsega dela, ki ga je potrebno opraviti.
Moja končna ocena projekta je pozitivna in zadovoljen sem sam s sabo. Vsekakor moje
delo ni bilo optimalno, niti ni bil končni produkt. A pri vsakem naslednjem projektu se
bom bolj potrudil, obenem pa bom imel vedno več znanja, kar mi bo zagotovo samo
koristilo.
16
6 Zaključek
Med študijsko prakso sem si nabral ogromno izkušenj in novega znanja. Veliko znanja
sem tudi nadgradil, nekaj pa sem ga po dolgem času znova osvežil ter dopolnil. V veliko
pomoč mi je bil mentor dr. Matej Črepinšek, saj mi je vseskozi stal ob strani. Od njega sem
prejel tudi zelo veliko nasvetov, ki mi bodo prav prišli pri moji nadalnji poklicni poti. Za
vse se mu najlepše zahvaljujem. Zahvalil bi se tudi podjetju TFStoritve d.o.o., saj so mi
omogočili opravljanje študijske prakse, ki je potekala v sproščenem, umirjenem, ter
prijaznem vzdušju.