You are on page 1of 12

Labrapport i TTM4175

Kommunikasjonsteknologi, intro
Lab 1
Gruppe 1

Gruppemedlemmer:
Erlend S. Stenberg
Mathias Iden

2
Innholdsfortegnelse
1 Introduksjon ............................................................................................................................................... 3
2 Hoveddel .................................................................................................................................................... 4
2.1 Forberedelser........................................................................................................................................ 4
2.2 Bli kjent med Reactive Blocks Hello World & Speech and Buffer ......................................................... 4
2.3 GUI: Events og Updates Click and Wait ............................................................................................... 4
2.4 Overvking av WiFi-tilkobling Wifi State ............................................................................................. 5
2.5 Enkel kommunikasjon Generic Subscription Server ............................................................................ 5
2.6 A Simple Chat ........................................................................................................................................ 7
2.7 Serialisering av data Serializing data ................................................................................................... 7
2.8 Location and Maps Console Tracking .................................................................................................. 9
2.9 The final application Maps Tracking and Landmarks MQTT .............................................................. 10
3 Konklusjon ................................................................................................................................................ 11
4 Referanser ................................................................................................................................................ 12

3
1 Introduksjon

I Lab 1 har vi laget en mobilapplikasjon til Android gjennom flere trinn (deloppgaver). Formlet bak laben er
belyse faget som er kommunikasjonsteknologi og dets mange, varierte aspekter, og ikke minst skape
interesse og motivasjon for kunnskapstilegning om en programmerers hverdag og utfordringer.
For kunne lage en mobilapplikasjon til Android, trengte vi lese oss opp p et antall forskjellige ting:
o Eclipse
o Java
o GPS-funksjonalitet
o Reactive Blocks
o Google Maps /-API
Vi vet i tillegg at applikasjonen vil trenge flgende funksjonalitet:
o Reagere p brukerinput
o Skaffe egen posisjon via GPS
o Sende og motta data
o Overvke egen WiFi-tilkobling
o Kommunisere med en server
Denne rapporten vil ta for seg hver deloppgave seperat, og med bilder og figurer forklare hva vi har tenkt og
gjort under hvert trinn. Deloppgaver deles inn i hoveddelen med respektivt 1,2,3... nummerert for indikere
hvilken deloppgave vi tar for oss.

S for runde av en kort introduksjon;
Hvordan lager man en mobilapplikasjon?


4
2 Hoveddel

2.1 Forberedelser
I dette trinnet fulgte vi slavisk instruksjoner og gjorde alt klart til pflgende oppgaver. Vi gjorde blant annet:
o Brukte Google konto til anskaffe en Google Maps API key
o Ble med i TTM4175 sitt team for f tilgang til blokkene som brukes senere
o Forberedte Android nettbrettet ved legge inn WiFi-tilgang, oppdatere firmware, og skru p USB
Debugging.
Akkurat denne deloppgaven bestr av svrt enkle steg som foregikk uten komplikasjoner. Det var ndvendige
steg for senere oppgaver.

2.2 Bli kjent med Reactive Blocks Hello World & Speech and Buffer
Vi skal bygge en svrt enkel applikasjon som printer Hello World. Blokken lastes ned, og vi foretar
ndvendige endringer ved legge til noder og en operasjon. Deretter legges koden System.out.printIn(Hello
World!) til under helloWorld() funksjonen. Vi implementerer og kjrer applikasjonen som Java Application.
Console spytter ut Hello World!.
1. helloWorld() blir kalt av fireInitial()
a. Vi utvider component.java og hyreklikker p funksjonen vr og velger References i
workspace og fr opp p skjermen at fireInitial() er funksjonen som kjrer helloWorld()
2. fire() kalles i klassen Scheduler.
a. Vi navigerer oss til fireInitial(), gjr det samme som i steg a, og finner at funksjonen kjres av
klassen Scheduler. (Vi har ikke hatt objekt-orientert programmering s vi kan ikke svare p
dette).
b. Klassens funksjon henger nok sammen med navnet p klassen, alts planlegge og utfre
funksjonene.

Vi kjrer raskt gjennom neste oppgave, Speech and Buffer. Applikasjonen skal f datamaskinen til si noen
setninger med noen hundre millisekunders pause mellom hver setning. Vi laster ned blokken, foretar
(u)ndvendige endringer, implementerer og kjrer.

Datamaskinen snakker.

1. fireInitial(): definerer state i forskjellige blokker og variabler, setter lengden (i ms) p timerene og ber
scheduler kjre frste timer med verdi 100 ms i vrt eksempel.
2. fireTimer(): bestemmer hvilken timer som skal kjres.
3. fire(): sjekker om det er riktig tid returnere speech(taledelen av programmet).

2.3 GUI: Events og Updates Click and Wait
Applikasjonen skal ha et input felt, et output felt og en knapp Enter. Teksten i input skal returneres i output
nr knappen Enter trykkes p. Vi laster ned og implementerer p vanlig mte. Kjrer p nettbrettet som
Android Application, og vi noterer oss at vi m velge riktig target-API, det vil si, 15.

5
Vi husket konvertere til object-flows etter hvert som vi uforstelig s p nettbrettet i mange minutter. S
finner vi ut at vi manglet initial node. Det var for vrig derfor ingenting fungerte da vi startet programmet.
Hva skjer nr vi skriver tekst inn i feltet og trykker p knappen:
Input: heihei
Output: halloheihei
Vi fr hallo fordi i SimpleConsoleActivity.java settes text til hallo som default i blokken.
Run() kjres nr vi trykker p knappen Enter og den legger til teksten vi skrev inn med linjeskift etterp.
Input: ellers?
Output: ellers?

2.4 Overvking av WiFi-tilkobling Wifi State
Applikasjonen skal periodisk sjekke om WiFi-tilkoblingen er aktiv eller ikke, og indikere resultatet av hver sjekk
til bruker.
Vi hentet prosjektet som vanlig. Implementerte, og etter et antall restarter av Eclipse, fr vi applikasjonen til
kjre. Det noteres at det magisk fungerte straks vi skrudde Minimum SDK level til 8, dog kan dette like s
gjerne vre en uavhengig tilfeldighet. Vi ser p output mens vi er koblet til WiFi:
S = 3eduroam 919774386
o Nr tilkoblingen er aktiv fr vi opp S = 3eduroam 919774386.
o Nr tilkoblingen brytes str det GrrWifi disconnected
o Nr tilkoblingen kommer tilbake str det Yes! Wifi connected.
Foruten en noe uinformativ print nr vi er koblet til Wifi, fungerer applikasjonen fint.

2.5 Enkel kommunikasjon Generic Subscription Server
Applikasjonen skal fungere som en server for et meldingssystem i senere oppgaver. I denne oppgaven vil vi kun
f output IP:Port, men dens funksjonalitet str likefullt. Den fungerer som en buffer for sessions, og
videresender (behandler) meldinger som sendes samt tilkoblinger som er aktive (sessions).
1. Kjrer getPort (int) og sessionIdentifier
2. Starter TCP Transport og Allocator.
3. In: Message fra TCP Transport gr til in:Message i Allocator. Create:Message i Allocator gr til create:
Message i Server Session [0..*].
4. Out:message fra Server Session[0..*] gr til send:Message i TCP Transport.
5. In:Message i TCP Transport gr til in:Message i Allocator. Existing:Message i Allocator gr til
in:Message i Server Session [0..*]
6. Failed: som resultat fra TCP Transport
a. Fjerner message fra allocator og lukker overfring ift TCP Transporter.
7. toAll:Message fra Server Session [0..*] til fromOther:Message i Server Session[0..*]
a. kan out:Message fra Server Session[0..*] til send:Message i TCP Transport.
8. end:Message i Server Session[0..*] til remove:Message i Allocator og close:Message i TCP transport.
Vi implimenterer programmet og kjrer som java application. Output: Server listening at
129.241.209.32:12345
6

Highlight the flow when a message arrives from a client that is already known:
Alle stier er mulig her:
1 til 2 (bunn)
1 til 1 til 3
1 til 3
1 til 2

Highlight the flow when a message arrives from a client that is already known:
Her er ogs alle stier mulig.
7

Highlight the flow for the case that a client sends a message that that is forwarded to all other clients:
Her fr vi stien 1 til 1 til 2.

2.6 A Simple Chat
Applikasjonen er en utvidelse av Click and Wait kombinert med server-kommunisering. Vi konfigurerer den til
snakke med serveren vi satte opp i 2.5, og kjrer applikasjonen.
1. Skrev inn tekst i input, og fikk opp teksten i console i Eclipse fra serveren.
2. Da vi slo av wifi fikk vi ingenting opp i console. Da vi slo p igjen WiFi fikk vi opp alle beskjedene som ikke
hadde blitt sendt tidligere. Meldingene ble ket.
3. Programmet fungerer likt som fr, men forskjellen er at alle meldingene havner p samme server.
4. En reaktiv blokk behandler innkommende meldinger og sender dem videre til en blokk som forsker sende
dem. Dersom det ikke gr forskes det p nytt fra Retry-blokken. Nr Reactive buffer behandler noe, settes
den til busy og da vil all flyt inn til denne blokken settes i k. Retry-blokken kan ogs pause. Utifra det vi kan se
klarer vi ikke finne noe tilfelle hvor Retry-blokken feiler og bryter flyten.

2.7 Serialisering av data Serializing data
For sende data mellom enheter, trenger vi omkode dataen slik at andre enheter forstr den. Dette er ikke
s vanskelig med strenger, men med objekter er det litt mer omfattende. Slik som vi tolker koden i
oppgaveteksten gjr den objektet om til en streng, for s gjre strengen om til et objekt igjen. Eksempel p
tankegangen vr: li.split(,) som serialisering, og deserialiseringen blir i s tilfelle en lkke som appender
elementene og deretter reverserer rekkeflgen.
For kjre programmet trengte vi legge til litt basic og godt forklart Java-kode. Vi ble bekjent med
constructors, classes, og metoden this.var. Vi gjorde endringene for gi noen funksjoner mening (dvs: en
retur-verdi).
8
Vi implementerer og kjrer, og tolker output.
JSON-Streng:
{"type":"landmark","group":"group1","label":"Magneten","description":"Here you can buy
food.","coordinates":{"latitude":6.3418016E7,"longitude":1.040188E7}}
JSON konverterer informasjonen til en tabellignende streng som inneholder variablene og deres datainnhold.
Manuell serializing (hvis det er snakk om print-funksjonen av landmark-objektet):
Heres the landmark object:
Hashcode: 3434740
Label: Magneten
Description: Here you can buy food
Group: group1

Highlight the data ow that a string for a landmark and the string for an update follow:

isLandmark() og isUpdate():
Sannhetsfunksjoner som sjekker om de respektive funksjonene inneholder det de skal, alts at landmark
inneholder landmark og update inneholder update. Dersom dette stemmer returneres True. Verdien som er
True kjres videre igjennom merge-noden. Vi ser p vedlagt bilde hvor enkelt dette er. P bildet som suppleres
i oppgaven er stien som velges nyaktig det samme. Hvis en av disse funksjonene returneres sann, gr den til
respektive videre oppgaver. Hvis ikke, gis error.



9
2.8 Location and Maps Console Tracking
Vi gjr alt som vanlig, men husker legge til google-play-services_lib som en referanse. Vi kjrer
applikasjonen. Det tar ikke lang tid fr vi fr posisjonen vr fra GPS.
Del 1:
Vi implementerer og kjrer appen p nettbrettet.
Output nr vi gr ut:
Lat: 63.4235834573485 Long: 10.402349534985 Accuracy: 128.0
Lat: 63.4235834573485 Long: 10.402349534985 Accuracy: 8.0
Lat: 63.4235834573485 Long: 10.402349534985 Accuracy: 10.0
Lat: 63.4235834573485 Long: 10.402349534985 Accuracy: 14.0
Lat: 63.4235834573485 Long: 10.402349534985 Accuracy: 10.0
Lat: 63.4235834573485 Long: 10.402349534985 Accuracy: 12.0
Fra nettsiden
1
ser vi at Constant used to specify formatting of a latitude or longitude in the form "[+-
]DDD.DDDDD where D indicates degrees.
Alts formatet DDD.DDDDD, hvor D er grader.
Del 2:
Vi starter appen og observerer at GPS-ikonet blinker samt et flott kart over vr herlige klode. Vi holdt
nettbrettet ut av et vindu og appen fant vr posisjon og oppdaterte kompasset da vi snudde p den.















1
http://developer.android.com/reference/android/location/Location.html
10
2.9 The final application Maps Tracking and Landmarks MQTT
Vi implementerer, legger til google-play-services_lib, sjekker at API-nkkelen stemmer og kjrer p
nettbrettet. Vi zoomer inn p Glshaugen, gr utenfor og legger til punkter. Vi noterer oss at punktene ser ut til
forsvinne straks vi trykker Share.
Under er det markert hvordan det ser ut nr det kommer nye updates p location fra GPSen:

Starter frst Preferences, nr man trykker tilbake bekreftes innstillingene. Da starter Map UI-,Location Updates
og Data Transport-blokkene. MapTouch i Map UI-blokken lar brukeren trykke p et sted og legge inn
informasjon om det punktet. Dette lager et landmark i Data Transport og skal videre legge inn dette
landmarket p kartet. I vrt tilfelle skjedde ikke dette. Location Updates oppdateres fortlpende slik at vi fr
posisjonen vr p kartet.
Etterhvert som vi fant ut at det var grunnet serverkonfigurasjonen vi ikke fikk lagret punkter eller sett andre
gruppers punkter, rettet vi opp i dette ved bruke en stud.ass-supplert serveradresse. Deretter lagret vi en del
nye punkter p kartet, og s andre gruppers favoritt-steder.
Noen tydelige svakheter ved systemet:
1. Burde vrt en felles server
2. Burde vrt mulig fjerne vre egne favoritt-steder
3. Se hvem som la inn andre punkter
4. Bedre preferences GUI, evt knapp for bekrefte og g videre.
For implementere disse tingene trenger man nok ikke gjre de aller strste endringene.
11
3 Konklusjon

Vi konkluderer med si at dette var et lrerikt og morsomt prosjekt. Det var god hjelp f fra stud.asser, til
tross for utfordrende Eclipse-sprsml og generelle svakheter ved Eclipse. Det er ikke tvil om at prosjektet har
kt bde kunnskap, motivasjon og interesse for oss i lpet av denne perioden. Vi har blant annet lrt at det
ikke er fullt s vanskelig som tidligere antatt lage en mobilapplikasjon dersom man baserer den p noe andre
har laget/templates/ferdige kode-fundamenter. derimot kode en mobilapplikasjon fra scratch (fra null),
kan det tenkes er ytterst krevende, da det krever kunnskap p et bredt felt.
Selve analyseringsprosessen og tolkning av sm kode-biter og output er alltid morsomt, - og det er frst n en
ser viktigheten av simplistisk, enkel og godt kommentert kode.
Hvordan lager man en mobilapplikasjon?
En kan laste ned ferdige maler, typisk la nettside-templates, hvor en i praksis fyller inn og legger til egen
funksjonalitet, samt benytter seg av ferdigkodede funksjoner eller, en kan starte fra intet, og bygge seg
planvis fram til et fundament, og g videre deretter. Hvis en har kompetanse til sistnevnte, tror jeg ikke
sprsmlet hvordan lager man en mobilapplikasjon? er srlig relevant. Dog for oss ungdom, er dette
prosjektet verdt mye.
Arbeidet i forbindelse prosjektet har vrt tidkrevende, og tidvis hardt. Sistnevnte spesielt i de stunder hvor en
har mest lyst til spise middag og ta en blund, men blir sittende og se p en loading-bar fra Eclipse bevege seg
tregere enn et ddt dyr som lper maraton. Men det var en digresjon. Alt i alt et svrt lrerikt prosjekt.


12
4 Referanser

1. http://developer.android.com/reference/android/location/Location.html - Supplert side som forklarer
formatforskjeller p JSON-streng-output.
2. http://www.item.ntnu.no/~kraemer/ttm4175/ttm4175-lab1.pdf - Oppgavetekst samt mange gode
referanser iht. vre forklaringer. Kan i utgangspunktet tenkes som en global referanse til det meste vi
skriver.

You might also like