poroilo praktinega izobraŽevanja - praksa homepraksa.uni-mb.si/porocila/e1010653.pdf · modul z...

22
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

Upload: vudang

Post on 03-Mar-2019

214 views

Category:

Documents


0 download

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.

17

7 Spletni viri

- http://en.wikipedia.org/wiki/Eclipse_(software)

- http://en.wikipedia.org/wiki/Android_software_development

- http://developer.android.com/tools/sdk/eclipse-adt.html

- http://en.wikipedia.org/wiki/SQLite