Det här är hemtentan som går lördag 18 januari 2014 i kursen Mobila applikationer med Android.
Ansvarig lärare är
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se),
telefon 070-73 47 013.
Instruktioner
-
Skriv och provkör programmet som beskrivs i uppgiften,
och skicka sen in det färdiga programmet till mig
(thomas.padron-mccarthy@oru.se)
senast klockan 08:00 söndag 19 januari 2014.
-
Uppgiften ska lösas enskilt, dvs inga grupper av två eller flera studenter.
-
Du får använda dator, böcker och vilka andra hjälpmedel som helst, men
du får inte samarbeta eller fråga någon (utom mig).
-
Om du behöver fråga något, så kontakta gärna mig.
Det är nog bäst att ringa eller SMS:a,
för jag kommer kanske inte att sitta vid datorn.
-
Packa ihop hela katalogen med applikationen i en Zip-fil, och skicka den som en bilaga.
(Även rar- och tar-filer fungerar.)
APK-filen (Androids kompilerade installationsfil) ska vara med.
Men döp först om Zip-filen från nånting.zip till exempelvis nånting.info för att överlista överambitiösa virusfilter.
-
Om du inte senast under måndagen får e-post från mig med en bekräftelse
på att du skickat in uppgiften,
bör du kontakta mig, enklast genom att ringa eller SMS:a mig
(ifall det är e-posten som inte fungerar).
-
Godkänt resultat på den här hemtentan ger betyget G på teoridelen av kursen.
För att få hela kursen godkänd krävs dessutom godkända inlämningsuppgifter.
Uppgiften
Vanliga persondatorer i hem och på kontor står den allra mesta tiden still och gör ingenting.
SETI@home
och
Folding@home
är exempel på
"Volunteer computing",
som är projekt där månniskor upplåter sina datorers lediga kapacitet till att jobba med olika beräkningsprojekt.
Nu ska vi göra samma sak med Android-enheter.
Det ska fungera genom att telefonen (eller vad man nu har för Android-enhet)
kopplar upp sig mot en server och laddar ner ett beräkningsproblem,
utför beräkningen,
och slutligen kopplar upp sig mot servern igen och meddelar resultatet.
Jag kör en server på basen.oru.se.
Kommunikationsprotokollet
Klienten kopplar upp sig med en socket mot serverns port 2006.
Servern svarar då med
"DistributedCalculationsServer version",
till exempel
"DistributedCalculationsServer 0.1".
Därefter kan klienten skicka två olika kommandon.
Alla data mellan klient och server skickas som strängar,
med varje kommando och varje svar på en egen rad.
Klienten skickar | Servern svarar | Exempeldialog |
GET
|
SOLVE problemnummer problemet
|
Klienten: GET
Servern: SOLVE 4711 3.8 + 2.5
|
SOLVED problemnummer resultat
|
THANKS
|
Klienten: SOLVED 4711 6.3
Servern: THANKS
|
något annat
|
ERROR
|
Klienten: hej hej
Servern: ERROR
|
Efter att servern skickat sitt svar, kopplar den ner förbindelsen.
På riktigt skulle det vara ganska stora och tidskrävande beräkningar som delades ut av servern
för klienterna att lösa, men här nöjer vi oss med de fyra räknesätten
(+, -, * och /)
som ska användas på två tal.
Krav
-
Appen ska koppla upp sig mot port 2006 på basen.oru.se
och hämta ett problem med GET-kommandot.
-
Appen ska beräkna svaret, koppla upp sig mot servern en andra gång, och skicka svaret till servern med SOLVED-kommandot.
-
Appen ska kunna hantera de beräkningar som servern skickar:
addition, subtraktion, multiplikation och division
av två tal med decimaler.
-
Det finns inga krav på hur appens användargränssnitt ska se ut.
Tips
-
Glöm inte android.permission.INTERNET i AndroidManifest.xml.
-
För kommunikationen med servern bör man skapa (minst) en separat tråd
(eller motsvarande).
Gör man alltihop i GUI-tråden får man, på moderna Android-versioner, NetworkOnMainThreadException.
På äldre Android-versioner ser det i stället ut som att appen hängt sig.
-
Man kan ladda ner DistributedCalculationsServer och köra på sin egen dator:
DistributedCalculationsServer.zip
-
String.split kan användas för att dela upp en sträng i delar.
-
Även om den aktuella implementationen av DistributedCalculationsServer gör mycket dåliga kontroller
av formatet på de kommandon som skickas till den,
måste kommandona ändå stämma med kommunikationsprotokollet.
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se),
17 januari 2014