Flextest Mobilapplikation för att testa, undersöka och förbättra kondition
|
|
- Jan-Olof Karlsson
- för 9 år sedan
- Visningar:
Transkript
1 Flextest Mobilapplikation för att testa, undersöka och förbättra kondition Jonathan Schultzberg 2014 Examensarbete, Grundnivå, 15hp Datavetenskap IngOnline 1 Handledare: Carina Pettersson Examinator: Fredrik Bökman 2
2
3 Flextest Mobilapplikation för att testa, undersöka och förbättra kondition av Jonathan Schultzberg Akademin för teknik och miljö Högskolan i Gävle S Gävle, Sweden jonathan@schultzberg.nu Abstrakt Rapporten beskriver arbetet med att utveckla en version av programmet Flextest för Android. Applikationen använder sig av en webbtjänst för den huvudsakliga logiken och för att lagra samt leverera data. Användandet av en webbtjänst kräver lösningar på autentisering och auktorisering av tjänstens användare vilket är en viktig aspekt som behandlas i rapporten. Rapporten beskriver såväl arbetsmetoder som lösningar. Resultatet är en fungerande Androidapplikation för att testa användarens konditionsläge, undersöka konditionen och hjälpa till med träning som är anpassad efter användarens individuella kondition.
4 Förord Jag vill ge min handledare och förebild Roger Larsson på Incrementa AB ett stort tack för all handledning med examensarbetet och stöd i övrigt. Du har en oerhört stor kunskap och har utfört din roll som handlare med perfektion. Jonathan Schultzberg Falun 30 maj 2014
5 Innehåll 1 Inledning Syfte Avgränsningar Frågeställningar Den mobila plattformen Molnet Terminologi Bakgrund Coopertestet Flextest Android Metod Arbetsmetodik SCRUM Team Foundation Server (TFS) Utvecklingsmiljö Genomförande Product backlog Sprint Sprint Sprint Sprint Sprint Sprint Prioritering av items Förutsättningar för lösning Plattformsval Beräkningar och funktionella krav Autentisering och auktorisering OAuth Liknande mobila applikationer Navigering och grafisk design Lösning Webbtjänst API Versionskontroll... 20
6 6.1.3 Autentisering Androidapplikationen Grafiskt gränssnitt Struktur Karta och GPS Hantering av tryck på hem- och bakåt-knapp Hantering av testvärden Autentisering Kommunikation med webbtjänst Dela på Facebook Publicering Resultat Diskussion Resultatdiskussion Grafiskt gränssnitt Autentiseringen Aktiviteter Service Testning Metoddiskussion Slutsatser Vidare utveckling Referenser Bilagor Bilaga 1: Skisser Bilaga 2: Kod AsyncTask Bilaga 3: Skärmbilder... 41
7 1 Inledning Som ett avslutande examensarbete på högskoleingenjörsprogrammet IngOnline vid Högskolan i Gävle har jag fått chansen att arbeta med att utveckla en applikation för Android hos Incrementa AB i Borlänge. Applikationen som ska utvecklas finns redan i en något enklare version för PC vid namn Flextest. Funktionen hos Flextest består i att beräkna konditionsinformation kring ett testresultat producerat av en version av Coopertestet. Idag finns det en mängd olika program för att övervaka träning och till viss del utvärdera kondition. Det som gör att Flextest sticker ut ur mängden är det antalet olika informationsparameterar som programmet presenterar samtidigt som varje parameter går att ändra och de övriga parametrarna beräknas om utifrån det ändrade värdet. Det gör att motionären eller den professionella löparen kan analysera sin kondition och ändra vissa värden efter önskemål för att sedan se vilka andra värden som måste förbättras för att uppnå detta. En applikation som Flextest lämpar sig mycket bra för en mobil plattform med tillgång till GPS. GPS underlättar konditionstestet och erbjuder möjlighet till en mycket exakt precision vid träning. Flextest som mobil applikation kommer därför att kunna erbjuda fler funktioner än det ursprungliga Flextest. En av de större funktionerna är möjligheten att sätta mål för konditionen och få hjälp att nå dit. Incrementa har som rekommendation och önskemål att flertalet av beräkningarna sker i molnet, med hjälp av en webbtjänst. Fördelarna med en sådan lösning är full kontroll av beräkningsalgoritmer och ökad säkerhet då ingen känslig kod finns hos användaren. Utförs beräkningar hos en central tjänst så förenklar det även eventuella klientprogram på andra plattformar som till exempel Apple ios eller Windows Phone. Hälsa och kondition är mer populärt än någonsin, Vasaloppet och många andra tävlingar kan vara fullbokade inom ett par timmar efter biljettsläpp. Att någon gång ha genomfört ett lopp som Vasaloppet, Lidingöloppet eller Göteborgsvarvet blir allt mer populärt och normalt för den genomsnittlige motionären. Samtidigt har utvecklingen hos mobiltelefoner exploderat och innehåller nu långt fler tekniska komponenter än en traditionell dator, bland annat GPS och konstant tillgång till internet oberoende av geografisk plats. Mobiltelefoner har blivit många människors största hjälpmedel vid dagliga sysslor bland annat att hålla koll på träningen. Det finns en uppsjö med appar som används för att övervaka kaloriförbrukning, distans och tid för ett träningspass. Någon app med den stora funktionalitet som Flextest kommer innehålla finns tycks dock inte gå att hitta. Incrementa AB ägs av Roger Larsson och det är Roger som utvecklat Flextest som idag finns för PC. Roger utvecklade den ursprungliga versionen av Flextest redan Motionskonsult är det företag som är ägare och försäljare av Flextest. Motionskonsult har länge önskat en mobil version av programmet för att öka användbarheten och nå till en bredare publik. Mobiltelefonen är även ett bra instrument för att mäta både tid och distans. På grund av tidsbrist så har Incrementa inte utvecklat någon mobil version tidigare. 1
8 1.1 Syfte Examensarbetet ska bestå i att portera och anpassa det befintliga programmet Flextest till/för den mobila plattformen Android. Syftet med denna rapport är att analysera, diskutera och presentera resultatet av examensarbetet samt sträva efter att besvara de frågeställningar som presenteras i avsnittet frågeställningar nedan. 1.2 Avgränsningar Då webbtjänsten inte utvecklas av mig utan av Roger Larsson på Incrementa så kommer inte någon djupare beskrivning av denna presenteras. Endast det mest relevanta som API-anrop, versionshantering av parametrarna och lösningsalternativ på autentisering och auktorisering kommer att beskrivas. 1.3 Frågeställningar Rapporten kommer förutom att beskriva det praktiska arbetet även att försöka besvara några frågeställningar Den mobila plattformen Mobiltelefoner har jämfört med PC en kraftigt minskad skärmstorlek vilket innebär att programmets nuvarande utformning inte kommer att fungera på en mobiltelefon. Även inmatning från användaren och navigering i applikationen skiljer sig. Andra viktiga aspekter är batteritid och nätverkskommunikation. Frågeställningarna kan sammanfattas som: - Hur bör Flextest anpassas för att fungera på en mobil plattform? - Vilka är fördelarna med en mobil version kontra den som finns idag? Molnet Flextest kommer till största delen att arbeta med att skicka och hämta data via ett API hos en webbtjänst. Vid kommunikationen mellan Androidenheten och webbtjänsten så uppstår ett antal problem och därmed frågeställningar. Frågeställningarna kan sammanfattas som: - Hur kan autentisering och auktorisering av användare se ut? - På vilket sätt ska webbtjänsten verifiera att användaren verkligen kommer från Flextest-appen? 2
9 1.4 Terminologi Molnet Molnet är en benämning för tjänster som erbjuds eller beräkningar som utförs på en icke lokal enhet, vanligtvis via internet. Det kan till exempel vara lagring på en server där åtkomst sker via internet från vilken internetansluten enhet som helst [1]. I Flextests fall så är molnet synonymt med dess webbtjänst. RESTful API REST, Representational State Transfer, är en arkitekturstil för kommunikation via protokollet HTTP. REST använder sig av HTTPs metoder (GET, POST, PUT, DELETE) för kommunikation. REST använder sig av en uniform resource identifier (URI) för att identifiera resurser hos webbtjänsten och är stateless inget anrop beror av något annat anrop [2]. Testvärde Vidare i rapporten så kommer ordet testvärde att användas. Testvärdet är i applikationen synonymt med syreupptagningsförmåga. Skärm Vidare i rapporten så kommer benämningen skärm att användas för att beskriva en sida, yta, avdelning i appen sett från ett användarperspektiv. Aktivitet Termen aktivitet nämns ett flertal gånger i rapporten och syftar då till Androidbegreppet Activity. Responsiv design Responsiv design kommer att också att beröras i rapporten. Responsiv design innebär att den grafiska layouten anpassar sig efter storleken på skärmen hos den enhet som appen körs på. 3
10 2 Bakgrund Kapitlet ger en bakgrund till det arbete som beskrivs i rapporten. De viktigaste teoretiska bitarna som används i arbetet och som beskrivs nedan är just Coopers konditionstest, plattformen Android och hur Flextest som finns i dagsläget ser ut. 2.1 Coopertestet Coopertestet utvecklades av Kenneth Cooper på 60-talet och syftar till att mäta konditionen hos personen som genomför testet. Testet går ut på att löpa så lång distans som möjligt på 12 minuter och det är just coopertestet som används som grund för att göra ett konditionstest i Flextest. Det data som erhålls från testet är syreupptagningsförmåga uttryckt i ml per kilo kroppsvikt gånger antalet minuter. För att erhålla syreupptagningsförmåga vid tolvminuters-test så krävs endast löpt distans som input. Teorin bygger kortfattat på att syreupptagningen ökar linjärt med löphastigheten. Snabbare löpning och därmed längre löpt distans efter 12 minuter innebär därför ökad syreupptagningsförmåga. Att löptestet utförs på just tolv minuter är för att eliminera störningsfaktorer som mjölksyra och glykogen [3]. Är löptiden för kort så använder sig kroppen av glykogen vilket ger en felaktig bild av konditionen. På motsvarande sätt kommer mjölksyran att påverka resultatet om löptiden är för lång. 2.2 Flextest Flextest är ett program för att beräkna olika faktorer kring en individs kondition. Till grund för beräkningarna ligger Coopers maxtest. Testet bygger i grunden på att individen springer så långt denne klarar av på tolv minuter. Flextest är dock modifierad för att öka användbarheten, istället för att ange avlagd distans på tolv minuter så får användaren även ange tiden. Istället för att hålla tiden statisk så kan då distansen vara statisk och lätt att identifiera. Tack vare modifieringen så kan till exempel en löparbana med en känd längd användas. Testpersonen kan då bli klockad vid löpning av ett antal varv vilket ger en känd distans. Att springa i exakt tolv minuter innebär vanligtvis svårigheter i att avgöra distansen. Användaren och testpersonen anger distans, tid, ålder, vikt och kön och får då direkt reda på testpersonens testvärde i form av syreupptagningsförmåga (ml/kg*min). 4
11 Andra intressanta parametrar som presenteras är bland annat kaloriförbrukning och syreomsättning. Programmet presenterar också en konditionsfaktor, estimerade sluttider för maraton och Lidingöloppet, fysisk ålder och träningsråd som baseras helt på testpersonens konditionsnivå. Konditionsfaktor och fysisk ålder är en jämförelse av konditionen med övriga befolkningen och kräver att användaren anger ålder och kön. För dem som inte klarar av att göra ett maxtest så finns möjligheten att istället göra ett submaxtest. Submaxtest bygger på en jämn hastighet och användandet av pulsen för att beräkna hur stor del av syreupptagningsförmågan som användes under testet. Det ger en uppskattning av den maximala syreupptagningsförmågan. 2.3 Android Figur 1. Skärmdump av Flextest för PC Android är ett operativsystem för mobiltelefoner och surfplattor som ägs av Google. Google köpte Android 2005 och en första kommersiell version släpptes 2008 [4]. Operativsystemet syftar till att skapa en gemensam plattform för ett stort antal olika enheter där applikationer kan utvecklas och köras på samtliga mobila enheter. Applikationsutveckling för Android sker i det objektorienterade programmeringsspråket Java men med tillägget att det grafiska gränssnittet kan definieras i XML. Även andra resurser som strängar och stilmallar kan i förhand definieras i XML. 5
12 Androidmanifest Filen AndroidManifest.xml är den viktigaste delen hos en Androidapplikation. Filen måste finnas hos alla applikationer och specificerar bland annat de aktiviteter och andra komponenter som appen består av och vilka tillåtelser applikationen kräver [5]. Aktivitet En aktivitet är hos Androidappar en komponent som ger appen ett användargränssnitt. En klass som ärver av Activity krävs alltså för att applikationen ska kunna presentera något på enhetens display. Applikationer består vanligtvis av minst en eller flera activities. Livscykeln för en Activity bestäms av användarens navigeringsval. Navigerar användaren bort från aktiviteten så blir aktiviteten pausad. En pausad aktivitet kan sedan dödas av Android-systemet [6]. Fragment Fragment är en del av ett användargränssnitt som endast kan existera inuti en aktivitet [7]. 6
13 3 Metod Kapitlet beskriver de metoder som använts för genomförandet. För teoretisk information kring programmering för Android har i huvudsak Android Developers använts [8]. Android Developers tillhandahåller en stor mängd information kring Androids API och designmönster för Androidapplikationer. Det programmeringsspråk som utveckling för Android bygger på är i huvudsak Java vilket gör att även tidigare kunskap från kurser i objektorienterad programmering och Java har tillämpats. Viss kurslitteratur som berör Java har således också använts. 3.1 Arbetsmetodik Arbetet kommer i huvudsak att utföras självständigt men med kontinuerliga sprintmöten för avstämning med handledare från Incrementa. För att genomföra arbetet så kommer ramverket SCRUM att användas i så stor utsträckning som möjligt. En backlog som listar applikationens funktioner med tillhörande tasks kommer att användas för att strukturera och planera arbetet. För att identifiera förutsättningarna för lösningen så kommer först en pappersprototyp att tas fram. Flödet mellan applikationens olika skärmar kommer att beskrivas med hjälp av ett diagram. Varje skärm kommer sedan att illustreras med hjälp av en skiss på papper. 3.2 SCRUM Scrum är ett ramverk för att effektivt genomföra projekt inom systemutveckling. Ramverket är tänkt att användas för projekt som genomförs i team. Fokus ligger på nyttan och målet är att hela tiden kunna leverera produkter med hösta möjliga värde [9]. Några av Scrums viktigaste beståndsdelar är: Backlog item En post som ur ett rollperspektiv beskriver en önskad funktion eller egenskap hos systemet. Product backlog Backlogen innehåller samtliga backlog items och ses som en levande lista som beskriver systemets funktioner och egenskaper. Sprint En sprint är en bestämd tidsperiod där bestämda backlog items ska genomföras. Vid sprintens utgång så ska ett användbart och fullt funktionell vidarebyggnad på systemet levereras. 7
14 Scrum har använts i arbetet med Flextest och finns vidare beskrivet under kapitlet Genomförande. Många andra delar ingår i Scrumkonceptet men dessa är de viktigaste för detta arbete Team Foundation Server (TFS) Team Foundation Server, TFS, är en webbaserad tjänst från Microsoft för bland annat källkodshantering och planering av projekt. TFS erbjuder en tjänst för att skapa och hantera en backlog. TFS har varit det primära verktyget för att planera arbetet med projektet. Handledaren från Incrementa har full tillgång till projektets TFS och kan således övervaka och hantera den backlog som styr arbetet. 3.3 Utvecklingsmiljö Programmets algoritmer för de olika beräkningarna placerades hos en webbserver och tillhandahålls via ett RESTful API. Utvecklingen har därför i huvudsak bestått av utveckling av applikationen för Android och dess klasser för att kommunicera med webbtjänsten. Androidapplikationen utvecklas i utvecklingsmiljön Eclipse med ett tillägg för Androids SDK, Software Development Kit. Verktyg för Androidutveckling, Android Development Tools och ett Bundle med Eclipse förinstallerat med Androids SDK har använts och finns att hämta på developer.android.com. Flextest har utvecklats med Android SDK Build Tools rev för API 19 Android KitKat. För att rita schema över navigationsflöde och designa databas så har programmet Diagram Designer att användas. Webbtjänsten publiceras hos Microsoft Azure. Azure är en molntjänst som används av stora aktörer som Telenor och Toyota och bör därför inte ha några som helst problem med att hantera framtida trafik från appen [10]. 8
15 4 Genomförande Den största delen av projektets tidsresurser har spenderats på arbete med programmering av applikationen mot backlogens tasks. I arbetets inledning så bestod dock arbetet av att identifiera och analysera appens funktion och design. Brainstorming mellan mig och Roger Larsson kring hur en mobilapplikation på bästa sätt kan använda sig av den konditionsinformation som erhålls från Flextests beräkningar resulterade i en lista på önskade funktioner som sedan reducerades, omformulerades och blev till en product backlog. Scrum har använts som arbetsformat i så stor utsträckning som möjligt. Då arbetet till den absolut största delen skett självständigt så har dock många delar av Scrums ramverk som daily scrum meeting och sprint retrospective har tonats ner. Sprintgenomgångar samt sprintplanering har dock genomförts varje vecka. 4.1 Product backlog Den product backlog som togs fram består av ett antal backlog items formulerade på formatet userstory där varje item beskriver en önskad funktion hos applikationen. Figur 2. Skärmdump av backlogen i projektets TFS Backlogen innehåller inte några items som rör utvecklandet av webbtjänsten. Implementeringen av webbtjänsten och utvecklingsarbetet med Androidapplikationen har pågått parallellt vilket till en viss grad har påverkat arbetsflödet i det olika sprintarna. Till exempel så finns behovet av att kunna kommunicera med webbtjänsten redan i sprint 2 för att få ett resultat av konditionstest. En tidig men fungerande version av webbtjänsten fanns tillgänglig först i sprint 3. Andra backlog items som Graf över utveckling och Sätta upp mål och få hjälp att nå dem är också beroende av speciella funktioner hos webbtjänsten: lagra resultat i databas och ett anrop för att beräkna mål. 9
16 För att planera arbetet så delades arbetet in i sprintar av längden sju dagar. Nedan presenteras backlogens innehåll uppdelat på sprintar. Många av lösningarna på projektets backlog items presenteras i kapitel Sprint 1 Den första sprinten bestod helt av förberedande arbete. Sprint 1 bestod av en backlog item: Skiss och prototyp Som utvecklare vill jag skapa en skiss över alla möjliga vyer och skärmar i appen för att få en överblick och ett sammanhang, så jag ser att de fungerar bra tillsammans. Det minskar risken att behöva göra om i efterhand Resultatet av sprinten presenteras i avsnitt 5.5 Navigering och grafisk design Sprint 2 I sprint nummer två så påbörjades programmeringen av applikationen. Sprinten innehöll två backlog items: Coopers 12-minuterstest Som motionär vill jag få hjälp att göra ett 12-minuterstest enligt Cooper därför att det ger störst noggrannhet. Det innebär att GPS behövs för att mäta sträckan och att appen ska meddela när testet är avslutat Konditionstest när löpningen redan är gjord Som motionär vill jag kunna registrera ett test i efterhand, när löpningen redan är gjord, därför att jag inte alltid har telefonen med mig. Förutom arbete med att lösa sprintens backlog items så krävdes en del grundläggande utvecklade av applikationen med navigering och menyer Sprint 3 Sprint 3 bestod av fortsatt mjukvaruutveckling mot backlogens items. Översikt av vad konditionen innebär i praktiken Som motionär vill jag veta vad min kondition innebär i praktiken därför att jag vill få en förståelse för hur bra eller dålig den är Resultatet av arbetet i sprint 3 är i stora drag den skärm som visar utvärdering av kondition. 10
17 4.1.4 Sprint 4 Sprinten ägnades åt att implementera möjligheten att dela testresultat på Facebook och den del av appen som kallas Labbet. Dela med sig av resultat Som användare av flextest vill jag kunna dela mina resultat av tester och träningspass på sociala medier för att visa mina vänner Laborera fritt Som intresserad motionär vill jag kunna undersöka hur olika värden påverkar varandra. Till exempel hur mycket bättre min kondition behöver vara för att jag ska uppnå en viss maratontid Sprint 5 Sätta upp mål och få hjälp att nå dem Som motionär vill jag kunna sätta upp vilka mål jag vill uppnå med min träning och när jag ska ha uppnått dem därför att jag vill ha träningsråd som hjälper mig uppnå målen och varnar mig när jag riskerar att missa målen Graf över utveckling Som motionär vill jag se en graf över min utveckling över tid därför att jag vill få återkoppling på hur min träning fungerar Sprint 6 Publicera i Google Play Som tillverkare vill jag publicera appen gratis i Google play så att användaren kan prova den under begränsad tid, därför att jag vill locka nya kunder Sälja prenumeration Som leverantör vill jag att användarna ska kunna prenumerera på funktionerna i appen därför att jag vill få löpande intäkter 11
18 4.2 Prioritering av items I arbetet mot en product backlog så ska en prioritet sättas på varje backlog item. Prioriteten ska spegla hur viktigt en implementation av funktionen är. I arbetet med Flextest så har vi prioriterat de olika backlog items genom att placera dem i sprintar där backlog items i den första sprinten har högst prioritet. De som placerats i senare sprintar kan därför ses som lägre prioriterade. Vissa backlog items placerades inte i någon sprint och kan därmed ses som lägst prioriterade och kommer inte att implementeras i en första version av applikationen. De backlog items som inte kommer att implementeras i första versionen är: Konditionstest på kuperad men känd sträcka Som motionär vill jag kunna testa min kondition på en känd sträcka därför att den är kuperad men śtart och mål ligger på samma höjd. Det innebär att löptiden inte är exakt 12 minuter och att jag därför behöver ange när testet är klart. GPS är inte nödvändig eftersom sträckan är känd men om den är aktiverad så kan testet avslutas automatiskt när man slutar springa. Konditionstest med hjälp av löpband Som motionär vill jag kunna göra konditionstest genom att ange hastighet eller sträcka, samt puls, därför att jag vill kunna använda löpband på gym Hjälp att nyttja så stor del av träningstiden som möjligt Som stressad människa så vill jag få hjälp att avsluta mitt träningspass i rätt tid därför att jag vill nyttja så mycket tid som möjligt av den tid jag har tillgänglig, och ändå hinna till nästa aktivitet. Jag behöver hjälp att veta när det är dags att avsluta träningspasset, eller kanske om det är dags att vända och springa tillbaka 12
19 5 Förutsättningar för lösning Kapitlet behandlar de förutsättningar som finns för den senare redovisade lösningen. Fokus ligger på Androidapplikationen men webbtjänsten nämns också. 5.1 Plattformsval Applikationen utvecklas med målet om att nå så många potentiella användare som möjligt. Med det målet så finns det idag i princip två mobila plattformar att välja mellan: Android eller ios. Utveckling för ios är i princip endast möjligt i en Mac-miljö och för en van Windowsanvändare som mig själv så var valet av Android enkelt [11]. Android var dessutom det överlägset vanligaste operativsystemet på mobiltelefoner som såldes i världen under 2013 [12]. Önskemålet från produktägaren var dock en applikation för både Android och ios men omfattning av arbetet innebar att applikationen fick begränsas till en plattform. Överenskommelsen blev att arbetet med examensarbetet skulle avgränsas till att utveckla Flextest till plattformen Android men med möjlighet till vidare arbete med en applikation för ios, speciellt om resultatet av Androidversionen faller väl ut. 5.2 Beräkningar och funktionella krav Flextest har algoritmer för att beräkna en rad olika parametrar som samtliga bygger på faktabaserade grunder. Den information som Flextest för PC presenterar är: Syreupptagningsförmåga (ml/kg*min) Syreomsättning (l/min) Syreförbrukning (liter) Kalorieffektivitet (cal/kg*min) Kaloriomsättning (kcal/min) Kaloriförbrukning (kcal) Konditionsfaktor (%) Fysisk ålder Estimerade sluttider Maraton Lidingöloppet Träningsråd (min:sek/km) Intervall 100 % Kortdistans 85 % Långdistans 70 % Lågintensiv 60 % Lågintensiv 50 % 13
20 Samtliga beräkningar ska även användas i den mobila applikationen och utöver dessa så ska den mobila applikationen även ge möjlighet att sätta mål och ge hjälp med träning för att uppnå dem, något som inte finns i den tidigare versionen. Användaren ska också kunna se sin utveckling vilket kräver att gamla testresultat lagrats och kan presenteras. Lösningen för att leverera beräkningar och erbjuda lagring ska vara en webbtjänst. Appen ska endast presentera beräkningarna för användaren och ha logik för att använda telefonspecifika funktioner som GPS och tidmätning. 5.3 Autentisering och auktorisering Ett problem som uppstår i och med centralisering av appens viktiga beräkningar till en webbtjänst, är att identifiera från vilken applikation och användare som anropet kommer ifrån. För just beräkningarna så finns inget direkt behov av att identifiera individuella användare men när testresultaten ska lagras så måste användare identifieras. Vid alla anrop så måste däremot webbtjänsten ha möjlighet att kontrollera att anropet verkligen kommer ifrån en legitim användare av Flextest-appen. Detta för att motverka otillåten användning av tjänstens API. Skulle ingen kontroll utföras så skulle en konkurrent lätt kunna använda sig av tjänsten i egna applikationer. En lösning för autentisering/identifiering av användare är att själv hantera användare där varje användare tvingas registrera sig. Att tvinga varje användare att med telefonen mata in uppgifter för att registrera ett konto avskräcker troligtvis en stor del användare. En annan möjlig lösning är att använda sig av det Google-konto som varje Androidanvändare måste koppla sin enhet till. Autentisering innebär alltså att verifiera att någon verkligen är den som denne utger sig för att vara. I webbtjänstens fall så måste både användare och klient för anropet kunna autentiseras. Auktorisering innebär att tillåta eller neka användare tillgång till tjänstens olika resurser. Det kan till exempel vara att neka icke betalande användare tillgång till resursen som sköter målsättning med kondition för att ge mervärde för de betalande användarna. Auktorisering av användare är däremot inte riktigt lika viktigt som autentisering och kommer troligtvis att bli en senare implementeringsfråga OAuth 2.0 OAuth 2.0 är ett protokoll för autentisering och auktorisering och ses i princip som standard för auktorisering hos mobila applikationer [13]. OAuth möjliggör tillgång till en användares resurser hos ett annat system än det egna, det egna systemet kan då använda sig av det andra systemets autentisering av användaren. Det hela sker med hjälp av godkännande från användaren och rent tekniskt med hjälp av hemligheter och access tokens. I fallet med Flextest så skulle systemet kunna ta hjälp med autentisering av användare via Google. 14
21 5.4 Liknande mobila applikationer I förberedelsearbetet så undersöks också befintliga applikationer på marknadsplatsen Google play som har liknande funktionalitet. Några befintliga appar med liknande funktionalitet är Runkeeper, Endomondo, Nike+ Running och Google-utvecklade Mina spår. Samtliga fokuserar på träning och håller koll på bland annat kaloriförbränning, distans och tid. Vid en sökning på coopertest i Google play så hittas även några enklare applikationer som helt bygger på att användaren gör ett Coopertest och får sin syreupptagningsförmåga presenterad tillsammans med en jämförelse med resten av världens befolkning. Resultatet av undersökningen visar att någon applikation med likvärdiga funktioner som de hos Flextest inte existerar. Att genomföra utveckligen av Flextest för Android måste därför ses som väl motiverad. 5.5 Navigering och grafisk design För att alla parter som var inblandade i projektet skulle få en gemensam bild över hur applikationens rent gränssnittsmässigt kunde och borde se ut så gjordes en skiss över de olika skärmarna och flödet mellan dessa. Att göra en inledande skiss var även viktigt för att få en bra angreppspunkt för att börja programmeringen. Den första sprinten bestod således helt av att ta fram en preliminär skiss över såväl gränssnitt med knappar, text och kartor som navigering och flöde mellan de olika skärmarna. Figur 3 visar det flödesschema för appens navigering som skapades under den första förberedande sprinten. Schemat visar att det tänkta flödet genom appen har sin början hos startskärmen och visar sedan de två planerade ingångarna till att genomföra ett test. Det ena läget är då användaren vill göra ett test med hjälp av GPS, det andra läget är då användaren tidigare genomfört ett test utan telefonens GPS och endast vill föra in resultatet i appen. Efter skärmarna för att genomföra/genomfört ett test så slussas användaren vidare till en skärm som enkelt presenterar resultatet i form av ett testvärde. Här får användaren ange sin ålder och sitt kön för att sedan få en fullständig utvärdering av sin kondition på utvärderingsskärmen. Från utvärderingsskärmen så uppmanas användaren att navigera vidare till antingen träningsskärmen, utvecklingsskärmen eller laborationskärmen. Laborationsskärmen ska motsvara funktionaliteten som finns i Flextest för PC där värden går att ändra för att se hur de påverkar andra värden. Från startskärmen så går det även att navigera direkt till träning, labbet eller utvecklingsskärmen. 15
22 Figur 3. Schema för att visualisera flödet genom appen 16
23 Skärmskisser Resultatet av skisserna blev ett dokument med tolv olika skärmar som presenterades för Incrementa och Motionskonsult. Efter en del omarbetande så godkändes skisserna av de samma. Samtliga skisser finns bifogade i denna rapport i Bilaga 1: Skisser. Figur 4. Konditionstest och utvärdering av konditionen Den genomgående tanken med den grafiska layouten var att upplägget skulle vara: Intuitivt Användaren ska intuitivt förstå hur appen används och hur flödet genom de olika skärmarna är tänkt. Tröskelfritt För att motverka att tappa användare på grund av hinder från att komma igång med appen. Ett exempel på tröskel är registrering och inloggning. Vi valde därför att lösa autentiseringen av användare på ett sätt som inte kräver att användaren registrerar sig. Logiskt och enkel Hur appen presenterar informationen ska vara logisk. Till exempel så presenterar inte appen all möjlig konditionsinformation direkt efter ett genomfört test utan presenterar endast det som är relevant vilket gör informationen mer överskådlig och användbar. Träningstider presenteras till exempel först när användaren navigerar till träningsskärmen. 17
24 6 Lösning Kapitlet presenterar de lösningar som har använts vid implementering av systemet bakom Flextest. Som tidigare nämnt så kommer inte webbtjänsten beskrivas mer ingående utöver hur tjänsten fungerar, hur dess API ser ut och hur tjänsten autentiserar och auktoriserar användare. I de fall där en lösning inte finns implementerad så kommer planerade lösningar att presenteras. 6.1 Webbtjänst I det system som Flextest bygger på så består molndelen helt av den webbtjänst som utför beräkningarna som krävs för att presentera konditionsparametrarna. Webbtjänsten tillhandahåller också en databas för att spara användares testresultat. Möjligheten för användare att sätta individuella mål ska också hanteras hos webbtjänsten även om det är möjligt att lösa lokalt i applikationen. Detta för att upprätthålla en kontinuitet i systemet och för att underlätta vid utveckling av applikationer för andra plattformar än Android API Algoritmer för alla beräkningar finns redan hos den befintliga PC-versionen och dessa har av Incrementa överförts till.net och publicerats som en webbtjänst. Webbtjänstens huvudsakliga funktion är att tillhandahålla beräkningar och lagra genomförda tester. Det svar som returneras från tjänstens API är på formatet XML eller JSON beroende på vad som efterfrågas i anropet. Kommunikationen med webbtjänstens API ska vara krypterad i den version av systemet som släpps för allmänheten. I versionen som finns idag är dock kommunikationen inte krypterad. Calc För beräkningar av konditionsparametrarna används tjänstens kalkylator. Parametrar som distans och tid skickas med som input till resursen. Ett anrop med distans och tid returnerar till exempel det mest väsentliga som syreupptagningsförmåga och kaloriförbränning men också sluttider och träningsråd. Skickas även kön och ålder med i anropet så returneras också konditionsfaktor och fysisk ålder. I anropet så kan samtliga existerande parametrar skickas med, och tjänsten returnerar en uppsättning med modifierade värden. Hur webbtjänsten vet vilka värden som ska räknas om och vilka som ska behållas beskrivs under rubriken Versionskontroll. 18
25 Figur 5. Exempel på anrop till API via webbläsare med svar på XML-format API-anropet calc är således den enda resursen som används för att beräkna och omkalkylera de olika värdena. Resursen returnerar ett svar med en komplett uppsättning parametrar kring konditionen, även distans, tid, kön och ålder som alla är inputparametrar. Dessa returneras också eftersom tjänsten även räknar om dessa parametrar om de andra parametrarna har prioriterats högre. Anropet till Calc görs med HTTP metoden GET. Users För att kunna lagra användares testresultat så lagrar webbtjänsten även användare. Användarhantering sköts via tjänstens resurs Users och användare identifieras med hjälp av dess -adress vilket är anropets enda krav på input. För att hämta information om en användare så används metoden GET och för att registrera en ny användare så används PUT. Vid anrop med metoden GET så returneras användarens senaste information om ålder, kön och så vidare. Finns inte användaren registrerad så returneras http error 401. Tests Resursen Tests används för att spara och hämta test gjorda av användaren. Används metoden GET så returnerar anropet en uppsättning med alla de test som användaren genomfört. PUT används för att registrera ett nytt test. Som parametrar så tar resursens GET-metod en parameter för hur många test som ska returneras och den mailadress för användaren som efterfrågas. För PUT-metoden så tar tjänsten emot alla parametrar som Calc men även datum och tid när testet genomfördes och användarens mailadress. Goal Resursen Goals har inte implementerats fullt ut men kommer via PUT att ta emot värdet på den parameter som användaren har som mål samt datum då målet ska vara avklarat. Resursen sparar då målet och vid senare anrop med GET så returnerar resursen de parametrar som ska vara avklarade vid det datum som anropet utförs. Det som är mest intressant att få tillbaka från resursen är träningstider, hur användaren ska träna just det datumet för att följa sin kurva mot målet. 19
26 6.1.2 Versionskontroll Webbtjänstens resurs calc returnerar som tidigare beskrivet alla parametrar kring konditionen i ett och samma anrop. Skickas inte tillräckliga parametrar med (som till exempel kön och ålder) så returneras null för de parametrar vars beräkningar bygger på de parametrar som inte skickades med som input. I anropet till calc så finns möjligheten att skicka in värden på samtliga parametrar för att få tillbaka en uppsättning med omräknade parametrar. Om ett anrop till resursen görs med samtliga värden ifyllda, hur ska webbtjänsten veta vilka värden som ska beräknas? Om samtliga värden som skickas in inte är motstridiga att de passar ihop så behövs såklart inte något kalkyleras om. Men i appens labb -avdelning och i Flextest för PC så kan användaren ändra vilket värde som helst. Användaren kan alltså ha en komplett uppsättning med parametrar för att sedan ändra en eller flera av parametrarna. För att webbtjänsten ska veta vilka av parametrarna som är viktigast att inte beräkna om så används ett extra heltal till varje parameter som vi har valt att kalla versionen för parametern. Den parameter som har det högsta värdet ska i minsta möjliga mån ändras. De parametrar som ändrats sist måste antas vara de viktigaste och de som inte ska påverkas. Versionen skickas in på formen parametervärde_version. Figur 5 visar hur versionen skickas med Autentisering Webbtjänsten använder sig av användarens Googl adress för identifiering vid anrop till resurserna för lagring och målsättning. Själva autentiseringen ligger således hos Google och tröskeln som uppstår när användare tvingas till registrering är borttagen. Säkerhet och tillförlitligheten i lösningen går att diskutera och kommer att nämnas i rapportens diskussionskapitel. Någon lösning för att verifiera att användaren anropar tjänsten från Flextestappen och inte från annat håll finns inte implementerat ännu. Framtida lösningar för detta kommer också att nämnas i rapportens diskussionskapitel. 6.2 Androidapplikationen Kapitlet beskriver viktiga delar av Androidapplikationens uppbyggnad, tekniska design och kommunikationen med webbtjänsten Grafiskt gränssnitt Det grafiska gränssnittet har implementerats med XML och använder sig av Androids LinearLayout och RelativeLayout för placering av de olika komponenterna. Varje skärm har en egen xml-fil under mappen res/layout där utseendet på skärmen beskrivs. Gränssnittet hos applikationen är i princip helt statisk och att ha fördefinierade 20
27 layouter i XML är därför en mycket bra metod för hantering av gränssnittet i applikationen. Vid implementeringen av applikationens olika layouter så har responsiv design hela tiden funnits i bakhuvudet. Android har bra funktioner för att lösa problemen med att skärmstorleken kan variera väldigt mycket hos olika telefoner och surfplattor som kör Android. Användning av till exempel RelativeLayout och/eller att vikta komponenter i layouten bidrar till responsiv design. Logotyper, bilder och andra drawables kan dessutom anpassas så att det finns bilder anpassade för skärmar med olika pixeltäthet. Bilden med lägst upplösning, som är till för enheter med minst pixeltäthet, kan till exempel placeras i mappen res/drawable-hdpi och den största bilden kan med samma filnamn placeras i res/drawable-xxhdpi och Android kommer då själv förstå vilken som bör visas. De komponenter i det grafiska gränssnittet som är någorlunda dynamiska är kartan, mätaren för konditionsfaktor och grafen som visar utvecklingen. Dessa placeras i layouten med hjälp av XML men komponenterna kontrolleras i java. Mätaren som används är utvecklad av Anton Danshin och biblioteket SpeedometerView finns att hämta och bidra till via GitHub [14]. Grafen som visar konditionsutvecklingen är inte heller den utvecklad i projektet utan grafen bygger på biblioteket HoloGraphLibrary utvecklat av Daniel Nadeau och som finns att hämta och bidra till via GitHub [15]. Den text som används i det grafiska gränssnittet finns fördefinierad som strängar i projektets strings.xml. Fördelen med fördefinierade strängar i XML är att det då enkelt går att använda sig av språkspecifik text. Applikationen visar då text baserat på det språk som enheten är inställd för, förutsatt att det språket finns med i projektets res-katalog. Flextest använder sig av res/values-sv-rse/strings.xml när enheten som applikationen körs på använder sig av svenskt språk. När svenskt språk inte används så använder appen res/values/strings.xml där samtliga strängar istället innehåller engelsk text. Appens navigeringsmeny bygger på Androids navigation drawer och fälls ut från vänster eller genom att klicka på Flextest-loggan uppe i vänstra hörnet Struktur Utveckling för Android bygger på en viss standardstruktur med paket, mappar, bilder och filer. Majoriteten av applikationens klasser bygger på Androids Activity och Fragment. Även applikationens AndroidManifest beskrivs kortfattat. Aktiviteter Hjärtat av applikationen är klassen MainActivity. MainActivity och de andra aktiviteterna ärver av klassen Activity men MainActivity är i princip den enda aktivitet som appen bygger på när inte ett test eller ett träningspass utförs. MainActivity är en 21
28 hållare av alla de Fragments som visar de olika skärmarna genom att använda Androids klass FragmentManager. För att de olika Fragmenten ska kunna kommunicera med MainActivity så implementerar MainActivity interfacet FragmentCommunicator och sätter sig själv som FragmentCommunicator hos de Fragments som behöver skicka tillbaka data eller på annat sätt kommunicera med MainActivity. Andra activities i appen är TestActivity som körs när användaren gör ett konditionstest med GPS och TrainActivity som körs när användaren genomför ett träningspass. TestActivity mäter distansen, tiden och presenterar en karta när användaren genomför ett test. Aktiveteten returnerar sedan resultatet till MainActivity genom att MainActivity startar TestActivity med: Intent intent = new Intent(this, TestActivity.class); startactivityforresult(intent, 2); StartActivityForResult säger att ett resultat förväntas returneras från den startade aktiviteten och returnerat resultat fångas då av metoden onactivityresult() i MainActivity. Fragments Samtliga skärmar i applikationen förutom testskärmen med GPS och träningsskärmen bygger på Fragments och lever inuti MainActivity. Interfaces Interfacet FragmentCommunicator som nämnts tidigare implementeras av MainActivity. FragmentCommunicator specificerar ett antal metoder som appens fragment behöver använda. En av metoderna är: public void selectedoption(int option); Metoden används när användaren navigerar från ett fragment till ett annat. Andra klasser Andra klasser som är specifika för Flextest är bland annat klasserna för att kommunicera med webbtjänsten. Detta sker med klasserna WebCommunicator och JSONParser vilka beskrivs vidare under kapitlet Kommunikation med webbtjänst. En annan Flextest-specifik klass är GpsChecker som kontrollerar om telefonens GPS är aktiverad och presenterar en dialog med frågan om användaren vill aktivera telefonens GPS om så inte är fallet. Klasserna Parameter och ParamsDataSet faller också under kategorin andra klasser men dessa beskrivs i kapitlet Hantering av testvärden. 22
29 AndroidManifest Applikationens manifest specificerar bland annat ett antal permissions, tillåtelser, som appen kräver. Några av dessa är: Android.permission.ACCESS_FINE_LOCATION Android.permission.INTERNET Android.permission.WRITE_INTERNAL_STORAGE Android.permission.GET_ACCOUNTS Ovan angivna permissions krävs för att kunna använda enhetens exakta position, använda sig av internetanslutningen, skriva till enhetens interna lagringsutrymme och få tillgång till användarens konto i Android-systemet. Tillåtelse att skriva till enhetens interna lagringsutrymme behöver appen då den sparar en kartbild över vart användaren sprang i sitt konditionstest. Manifestet beskriver även applikationens paketnamn: com.motionskonsult.flextest. Vidare beskrivs appens version och vilka aktivteter den består av: MainActivity, TestActivity och TrainActivity Karta och GPS Det API som används för att visa kartor i appen är Google Maps API v2. För att använda kartan så krävs en API-nyckel som hämtas från Google Developer och specificeras i applikationens manifest. För att få användarens hastighet och läge på kartan så används den inbyggda GPS som finns hos majoriteten av mobiltelefoner som kör Android. För att kommunicera med telefonens GPS så används LocationManager. LocationManager är en klass som finns med i Androids bibliotek och som används för att få tillgång till systemets positioneringstjänster. För att få notifieringar när telefonens GPS registrerar en ny position så kör man metoden requestlocationupdates hos klassen LocationManager. // Locationmanager locationmanager = (LocationManager) getsystemservice(context.location_service); // Request location updates - 400ms, 1m locationmanager.requestlocationupdates(locationmanager.gps_provider, 400, 1, this); Parametrar till metoden är val av koordinat-leverantör (GPS/nätverk), minsta tidsåtgång sedan senaste positionsuppdatering, minsta distans sedan senaste positionsuppdatering och till sist en LocationListener. Exemplet ovan är från koden hos Flextest och visar ett metodanrop där vi vill ta emot GPS-uppdateringar när tidsåtgången är minst 400ms, distansen minst en meter och det är klassen som gör anropet som agerar LocationListener. Klassen behöver därför implementera LocationListener och därmed implementera de metoder som interfacet LocationListener specificerar. En av dessa metoder är public void onlocationchanged(location loc); 23
30 onlocationchanged() är den metod som anropas när en uppdatering av koordinater levereras. I metoden finns därför kod för att placera användaren på kartan, registrera hastighet och mäta löpt distans Hantering av tryck på hem- och bakåt-knapp När användaren genomför ett konditionstest så har denne troligtvis inte speciellt mycket fokus på telefonen. Risken finns att användaren råkar trycka på hem- eller bakåtknappen som finns som standard på varje enhet som kör Android. Trycker användaren på bakåtknappen så kommer aktiviteten att förstöras av Android-systemet och testet går förlorat. Trycker användaren på hemknappen så blir aktiviteten pausad och riskerar därmed också att förstöras av systemet. Det samma gäller när telefonens skärm släcks vilket den, tids nog, kommer att göra när användaren genomför ett test [16]. För att hantera problemet med bakåtknappen så omdefinieras metoden onbackpressed() hos aktiviteten vilket gör att det går att fånga användarens knapptryck. I metoden så körs kod som visar en dialog för användaren som frågar om användaren verkligen vill avsluta testet. Problemet med tryck på hemknappen eller att skärmen släcks är något mer komplex. Lösningen som finns hos Flextest är helt enkelt att en notifiering placeras i telefonens notifieringsfält. Notifieringen visar att ett test är aktivt, aktuell distans och tid kvar på testet. Trycker användaren på notifieringen så körs appen igång precis där den var innan. Figur 6. Notifiering vid aktivt test Hantering av testvärden För att dra nytta av de möjligheter som följer med objektorienterad programmering så skapades en klass ParamsDataSet.java som fungerar som en hållare av alla parametrar som var och en lagras i ett objekt av klassen Parameter. Klassen har getters och setters för varje parameter vilket underlättar hanteringen. Parameter lagrar värdet i en variabel av typen double, lagrar parameterns namn och har en omdefinierad tostringmetod som returnerar parameterns värde tillsammans med parameterns versionsnummer. Klassen ParamsDataSet håller också datum för testet. En instans av klassen motsvarar ett genomfört test. Klassen har en metod getparamsforweb() som returnerar 24
31 en lista med samtliga parametrar på formatet NameValuePair där även parameterns versionsnummer automatiskt följer med. Appens klass MainActivity är den klass som i sin tur håller alla ParamsDataSet genom att lagra dessa i en ArrayList. MainActivity levererar i sin tur listan med ParamsDataSet till de Fragments som behöver använda sig av dem Autentisering Lösningen för att kunna identifiera varje användare utan att kräva registrering blev att använda adressen för det konto som användaren kopplat sin Android-enhet till. För att ta reda på vilken adress som användaren har så används AccountManager och dessutom så krävs tillåtelsen android.permission.get_accounts i applikationens manifest. Pattern pattern = Patterns. _ADDRESS; Account[] accounts = AccountManager.get(this).getAccounts(); for (Account account : accounts) { if ( pattern.matcher(account.name).matches()) { return account.name; } } Koden ovan finns i metoden getmail() och loopar igenom användarens konto för att sedan returnera (en av) användarens adress(er). Detta gör att om användaren skulle ha fler än ett konto registrerat på sin enhet så kommer denne inte att få välja vilket konto och mailadress som ska användas. Denna implementation är inte optimal och kommer att diskuteras i diskussionskapitlet Kommunikation med webbtjänst För att kommunicera med webbtjänsten så används en klass JSONParser och en klass WebCommunicator. WebCommunicator har metoder för att uppdatera ett set med parametrar, hämta alla testresultat för en användare och en metod för att spara ett genomfört test hos webbtjänsten. Klassen använder i sin tur JSONParser för att kommunicera direkt med tjänsten. JSONParser är på lägsta nivå och använder sig av DefaultHttpClient för att skicka data till webbtjänsten. JSONParser har bara en metod makehttprequest() som tar serverns URL, metod (GET/PUT) och en lista med namn-värde par. Klassen kör metoden execute på klassen DefaultHttpClient och får ett HttpResponse som sedan parseas till JSON och returneras till WebCommunicator. AsyncTask Operativsystemet Android tillåter inte att http-requests utförs på applikationens UI-tråd huvudtråden som sköter det grafiska gränssnittet. Anrop till webbtjänsten måste därför utföras i en separat tråd [17]. 25
32 För att förenkla och förbättra trådhantering så går det i Android att köra en asynchronous task med hjälp av klassen AsyncTask. För att köra en AsyncTask så skapas enklast en inre klass som ärver av AsyncTask. Metoderna onpreexecute, doinbackground och onpostexecute omdefinieras och sedan skapas ett ny instans av den inre klassen. AsyncTask startas genom att köra execute och då kommer först den kod som placerats i onpreexecute att exekveras, på UI-tråden. Efter det så exekveras koden i metoden doinbackground på en bakgrundstråd och till sist så skickas resultatet av doinbackground till onpostexecute där exekvering återigen sker på applikationens UI-tråd. Samtliga anrop till webbtjänsten i Flextest utförs via en asynchronous task och exempelkod finns bifogad i bilaga Dela på Facebook Figur 7. Kommunikation mellan appen och molnet En önskad funktion som implementerades i sprint 4 var möjligheten att dela sitt testresultat på Facebook. Funktionen finns implementerad i appen med hjälp av Facebooks SDK och dess metod ShareDialogBuilder. Appens klass MainActivity har en metod shareonfacebook(paramsdataset dataset) som med hjälp av Facebooks SDK presenterar en dialog för användaren där denne om så önskas får lägga till en text och kan sedan klicka på dela. En länk till Flextest, beskrivning av användarens testresultat och en bild delas då på användarens Facebook-konto. En skärmdump på hur resultatet på Facebook ser ut finns bifogat i bilaga Publicering För att göra Androidapplikationer tillgängliga för allmänheten så publiceras dessa vanligen på Googles marknadsplats för appar, Google Play Store. Publicering på marknadsplatsen är i sig en ganska enkel procedur, det som krävs är att appen signeras vid kompilering i Eclipse och en utvecklarlicens som kostar 25 dollar [18]. Publicering kräver dock en del arbete i form av bland annat planering och intensiv testning på olika enheter. Innan appen kan publiceras så måste också en intäktsplan utformas. En publicering av Flextest planerades till sprint 6 men kommer att senareläggas då sprint 6 istället fokuserade på att färdigställa denna rapport. 26
33 7 Resultat Kapitlet presenterar den resulterande produkten av utvecklingsarbetet helt ur ett användarperspektiv. Applikationen är en lättviktig app som på ett mycket lättförståeligt sätt testar och presenterar kondition. Appens syfte är att vara ett hjälpmedel för att utveckla konditionsläge och kan med fördel användas av både atleten och amatörlöparen eller den som arbetar för att förbättra hälsan och gå ner i vikt. Funktionaliteten hos applikationen svarar väl mot de krav på funktionalitet som framställts under planeringen samt mot syftet att dra nytta av den extra funktionalitet som erbjuds hos en smartphone. Funktionerna som erbjuds av applikationen är i stora drag: testa kondition, presentera resultat av konditionstest, träna kondition på individnivå, sätta mål för konditionsträning, visa utveckling och undersöka kondition. Appen kan även dela testresultat på Facebook. När appen startas så utförs ett anrop till webbtjänsten som hämtar data om användarens tidigare genomförda tester. Startskärm Appens startskärm består av sex knappar varav två är dynamiska där den ena knappen leder till testläget och visar samtidigt antalet genomförda tester och aktuell konditionsfaktor. Den andra dynamiska knappen leder till träningsläget och visar samtidigt användarens målsättning och träningsstatus. Figur 8. Startskärm, löptest med och utan GPS. 27
34 Konditionstest Konditionstestet hos appen bygger på coopertestet och utförs genom att löpa så lång sträcka som möjligt på 12 minuter. Det finns dock möjlighet att genomföra testet med annan tid än 12 minuter men med minskad precision på resultatet. För att testet ska vara korrekt så förutsätts att tempot var det absolut maximala möjliga tempot vid löptestet. Appen har två ingångar för att registrera ett konditionstest, det manuella testläget där användaren redan har gjort ett test och det automatiska testläget där användaren vill göra ett test och få hjälp med distans och tidmätning av appen. Testläget med GPS visar löpt distans, hastighet, återstående tid och status. Statusfältet på skärmen säger till om telefonens GPS inte har signal eller om telefonen är redo att börja testet. I mitten av skärmen så visas även en kartbild med användarens position utplacerad. Vid aktiv löpning så visas även användarens löpta stig med en grön linje. När användaren väljer att starta testet så räknar applikationen ner från fem och avger ett tydligt ljud när testet är startat och ytterligare ett tydligt ljud när testet är avslutat. Via det manuella testläget så anger användaren distans, tid samt datum för testet. Datumangivelsen används för att senare kunna erbjuda användaren en graf på utvecklingen av konditionstest över tid. Registreringen av det tidigare genomförda testet behöver tack vare datumangivelsen inte utföras samma dag som testet gjordes. Konditionsinformation När ett test är genomfört navigerar användaren vidare med knappen Kondition och blir då presenterad med en skärm som visar det testvärde som beräknas utifrån löpt distans och tid. Användaren ombeds också ange ålder och kön för att få mer detaljerad information. Är testet genomfört med GPS så visas här också en snapshot, bild över löpt sträcka. Tanken är att bilden ska följa med när användaren vill dela sitt testresultat på till exempel Facebook. Användaren anger ålder och kön och navigerar vidare till nästa skärm som visar en djupare utvärdering av konditionsläget. Här visas användarens testvärde, konditionsfaktor, fysisk ålder och estimerade sluttider för maraton och Lidingöloppet. Under varje värde så visas även användarens tidigare värden förutsatt att konditionstestet inte var det första som gjordes. Användaren kan då lätt se om konditionen har förbättrats, försämrats eller är likadan som tidigare. När användaren är i utvärderingsskärmen så visas en Facebook-knapp i applikationens action bar som låter användaren dela sitt testresultat på Facebook. 28
35 Figur 9. Konditionsutvärdering, utveckling och träning Träning En parameter som efter genomfört test levereras av webbtjänsten men som inte visas i utvärderingsvyn är träningsråd. Träningsråden beskriver vilket tempo som ska hållas vid träning i olika intensitet. Träningsråden visas först när användaren navigerar till Träning. I träningsskärmen så väljs den önskade intensiteten i det kommande träningspasset och applikationen hjälper då till att hålla rätt tempo under träningen. Applikationen informerar användaren när tempot är för högt eller för lågt. Labbet Labbet är den del av applikationen som rakt av motsvarar det ursprungliga programmet för PC. Här kan användaren fylla i exakt vilka värden som helst och appen gör automatiskt ett anrop till webbtjänsten för att hämta uppdaterade värden. Utveckling Här kan användaren se utvecklingen av konditionen över tid. De översta staplarna visar användarens 5 senaste testresultat och den nedersta grafen visar användarens samtliga testresultat men utan några värden på grafens x- och y-axel. Användaren kan välja vilken parameter som utvecklingen ska visas för. Till exempel så kan utvecklingen av syreupptagningsförmågan visas eller avklarad distans per test. 29
36 8 Diskussion 8.1 Resultatdiskussion Resultatet av arbetet måste ses som lyckat även om mycket finns att utveckla vidare. Appen har en fullt fungerande koppling till den webbtjänst som levererar beräkningar och lagrar resultat. Den erbjuder dessutom mer funktionalitet än tidigare Flextest och drar nytta av såväl telefonens GPS och portabilitet som internetåtkomst och skärmstorlek Grafiskt gränssnitt För att formge det grafiska gränssnittet gjordes skisser på papper. Pappersskisserna var en mycket bra metod som gjorde det lätt att testa olika varianter på utseendet. Syftet med pappersskisserna var att skapa ett så enkelt och logiskt gränssnitt som möjligt, utan några hinder för användaren och att få något att arbeta mot vid senare programmering. Tack vare skisserna så är det grafiska gränssnittet hos appen väl genomtänkt. Gränssnittet är enkelt, förvirrar inte användaren och ser bra ut. Den skarpa implementationen är hyfsat lik de tidigare skisserna och ser även den bra ut. Appen använder det av Android Developers föreslagna Navigation Drawer som navigeringsmeny vilket gör att appen känns modern och går i samma stil som andra Android-appar. För att kunna konkurrera med liknande appar och locka användare så krävs troligtvis ändå mer arbete. Färg och form i appen behöver synkroniseras och vissa knappar och avgränsningar kan behöva bli mer tydliga. Eftersom Android körs på en mängd olika telefoner och enheter med många olika skärmstorlekar så behöver det grafiska gränssnittet hos appen hårdtestas på olika enheter. Appens ikoner och bilder utnyttjar inte heller Androids funktion för olika skärmstorlekar (mapp för hdpi, xxhdpi osv.) utan varje fil har endast en storlek. Appen bör använda funktionen innan publicering Autentiseringen Användare Den lösning som finns implementerad för att autentisera användare är inte optimal. Lösningen finns beskriven i kapitel 6 men bygger i korta drag på att appen med hjälp av Android-systemet letar fram en mailadress från ett av användarens konton i enheten. En användare kan ha flera konton men får i dagsläget inte själv välja vilket denne vill använda. Användarens mailadress används sedan för att webbtjänsten ska identifiera vilken användare som gör anropet. Identifieringen är idag endast nödvändig när webbtjänsten ska spara ett test eller skicka tillbaka sparade test. Då autentisering innebär att verifiera att någon verkligen är den som denne utger sig för att vara (t.ex. med lösenord) så kan inte den implementerade lösningen riktigt kallas autentisering. En viss grad av autentisering finns dock då användaren själv inte kan välja vilken mailadress som specifikt ska användas i appen utan mailadressen måste finnas hos ett konto i telefonen. För att lägga till ett konto i en Androidtelefon så krävs 30
37 även lösenordet till mailadressen vilket gör att autentiseringsbiten ligger helt på klientsidan och sköts av Android/Google. En sådan lösning kan innebära säkerhetsrisker, till exempel så skulle en rootad enhet kunna använda vilken mailadress som helst. Om man ser till den normala Android-enheten så kräver dock Android, som tidigare berättat, lösenord till den mailadress som önskas användas som ett konto vilket i sig är autentisering. Tjänsten bör därför kunna förvänta sig att det faktiskt är ägaren av mailadressen som använder adressen. Ett annat sätt för användare att kringgå autentiseringen och utge sig för att vara någon de inte är, är att anropa webbtjänsten från någon annan klient. En klient som inte kontrollerar mailadressen så som Flextest gör. Klienten Om webbtjänsten krävde att anropen till den samme autentiserade sig som anrop från just Flextest-appen så skulle den nu implementerade lösningen för autentisering av användare vara en OK lösning. Men i dagsläget så finns ingen autentisering mellan appen och tjänsten. Det gör att anrop till tjänstens API lätt går att göra från till exempel en webbläsare. Vem som helst kan då fejka en mailadress i anropet via webbläsaren och få tillbaka testresultat för någon annan. En implementering där webbtjänsten kan verifiera att anropet kommer från appen har därför hög prioritet för vidare utveckling. För mig är den enda lösningen på klientautentiseringsproblemet att använda en hemlighet som byggs in i källkoden. Ett sätt att genomföra det är att generera ett kryptografiskt slumptal vid varje anrop. Innan anropet så slås hemligheten och slumptalet samman på ett sätt som inte försämrar det slumpmässiga hos slumptalet, till exempel genom bit-operationen XOR. Resultatet hashas sedan med en kryptografiskt säker hash-algoritm, till exempel SHA2. Resulatet och slumptalet skickas sedan med i anropet till webbtjänsten. Eftersom webbtjänsten också vet hemligheten och får det slumptal som klienten slagit ihop hemligheten med, så kan tjänsten kontrollera att anropet är legitimt. Webbtjänsten gör samma procedur som klienten och kontrollerar att resultatet blir lika. En hemlighet som byggs in i källkoden skulle dock lätt kunna erhållas genom dekompilering av applikationens kompilerade kod. En lösning för det är att obfuskera källkoden vid kompilering vilket gör att den blir oläsbar vid dekompilering. Hos Android så finns verktyget ProGuard för obfuskering av koden. Skulle hemligheten ändå avslöjas så är det viktigt att ha en rutin för att upptäcka avslöjandet, till exempel genom en kontroll av antalet anrop för olika mailadresser som görs från samma källa (IP-adress). Ett stort antal anrop med olika mailadresser från samma IP-adress skulle kunna indikera att hemligheten avslöjats. Vidare så är det även bra att ha möjligheten att byta ut en avslöjad hemlighet genom till exempel en uppdatering av appen. 31
38 OAuth En annan lösning för autentisering som kan lösa problemet för både användar- och klient-autentisering är OAuth. OAuth är troligen också den bästa lösningen, speciellt om webbtjänsten skulle vara placerad hos Googles egna servrar. En kortare presentation av OAuth 2.0 finns i kapitel 5. OAuth är ett förhållandevis komplext ramverk för autentisering och bristen på tidigare kunskaper inom tekniken samt tidsbrist har gjort att någon implementation av tekniken inte är utförd. Dessutom finns vissa tveksamheter till hur en implementering av OAuth med hjälp av Google kan genomföras när webbtjänsten inte finns placerad hos Googles egna servrar Aktiviteter Appen bygger i huvudsak på en aktivitet som agerar som hållare/presentatör av de olika fragment som representerar en skärm. Två av skärmarna i applikationen körs dock som egna aktiviteter istället för fragment, något som kan behöva motiveras. De två skärmarna som inte bygger på klassen fragment utan körs som egna aktiviteter är TestActivity och TrainActivity, test-skärmen och tränings-skärmen. Att de körs som egna aktiviteter beror på att jag i början av arbetet inte ville att de skulle kännas lika lättviktiga som ett fragment (som existerar inuti en aktivitet) utan skulle vara mer robusta. Användaren ska uppfatta det som att en process har börjat. En process som inte lättvindigt kan klickas bort. Appens meny, som fälls ut från vänster, existerar hos MainActivity och följer därför med när ett fragment visas. Menyn ville jag ta bort just när ett test eller träningspass genomförs för att motverka att användaren råkar navigera bort från skärmarna och avbryter testet eller träningen. Jag vill att det endast ska finnas två vägar ut: avbryta eller genomföra. Inte en massa vägar (menyn) där användaren kan råka ta sig ut. Nu i efterhand så vet jag att det såklart hade fungerat lika bra att köra dem som fragment men med lite mer kod för att tillfälligt ta bort menyn eller varna användaren när denne trycker på dem Service Som en fortsättning på diskussionen kring användandet av aktiviteter istället för fragment så finns också problemet med att användaren kan trycka på telefonens hemknapp, både med och utan avsikt. Som tidigare beskrivet så finns då risken att systemet dödar aktiviteten för att frigöra resurser. Om aktiviteten dödas så kommer ett eventuellt testgenomförande att avbrytas, något som användaren troligtvis inte ens kommer att märka. Samma sak händer då telefonens skärm släcks vilket den kommer att göra under ett konditionstest. Den nuvarande implementeringen för att lösa problemet kan ses som en semilösning. Användaren får en notifiering om att ett test är aktivt och applikationen fortsätter att mäta tid och distans och presenterar det i notifieringen. Aktiviteten är dock markerad som pausad och riskerar att bli dödad av systemet. Den mer korrekta lösningen är att istället för Activity använda komponenten Service som startas från en aktivitet men som sedan kör helt i bakgrunden och inte riskerar att dödas av systemet. En service bör startas och ta över distans och tids- 32
39 mätningarna så fort aktiviteten för testläget hamnar i pausat läge, för att sedan returnera uppmätt data när aktiviteten startas igen (skärmen tänds eller användaren startar appen). Det korrekta sättet bör vara att använda en Service. Service är en systemkomponent likt Activity men som istället körs helt i bakgrunden och som inte dödas av systemet [19]. En Service för hantering av detta är påbörjad och kommer att implementeras fullt ut i en senare version av appen. Två personer har dock genomfört ett konditionstest med appen och i de fallen så gick inget testresultat förlorat aktiviteten dödades alltså inte. Utan att vara hundra procent säker så tror jag ändå att det i de allra flesta fall kommer att fungera med den nuvarande implementeringen. I alla fall så länge användaren inte exekverar andra process-krävande appar på sin enhet under ett aktivt konditionstest Testning Appen har främst testats rent tekniskt vid varje ny implementering genom provkörning på en LG Nexus 5. Appen har också användartestats på en LG Nexus 5 och Samsung Galaxy S4. Vid användartesterna så genomfördes två stycken konditionstest på tolv minuter utan några problem eller avbrott. Något testerna visade var dock att appen mycket tydligt behöver signalera när konditionstestet startar och slutar, volymen på den ljudsignal som spelas när testet är slut bör vara mycket hög. Att springa onödigt långt är oftast inte önskvärt Metoddiskussion Betoningen på användandet av en product backlog har under arbetets gång varit stor. Dock har arbetet huvudsakligen bestått i självständigt arbete vilket gjorde att mycket av Scrums beståndsdelar var svåra att upprätthålla. Det hårda fokuset på just Scrum kunde därför troligtvis ha tonats ner utan någon förlust av effektivitet. Användandet av backlog var dock mycket bra för att planera och få en översikt av arbetet. Backlogen var också bra för att samordna mellan mig och handledaren på Incrementa, båda hade koll på vad som skulle göras och risken för missförstånd minimeras. 33
40 9 Slutsatser Arbetet med att utveckla Flextest har lett fram till en fullt fungerande applikation med koppling till molnet, även om en del vidare utveckling behövs för att få en publicerbar och säker applikation. I början av arbetet så fanns inte några direkta krav på appen, det enda som fanns specificerat var att programmet Flextest skulle porteras till en mobil version. Eftersom den del av appen som kallas Labbet helt motsvarar den huvudsakliga funktionaliteten i Flextest för PC, förutom submaxtest, så bör resultatet av appen med dess extra funktionalitet ses som lyckat. Vidare så formulerades en del frågeställningar. De första frågeställningarna var hur Flextest bör anpassas för att fungera på en mobil plattform och vilka fördelar som kommer med en mobil version. Båda frågeställningarna kan ses som ett komplement eller vidare specificering av det enkla, inledande, kravet på att portera Flextest till en mobil app. Vid analys kring frågeställningarna så uppkom även dessa krav på appen: Dra nytta av den extra funktionaliteten (GPS, portabel enhet, internet) Anpassa den grafiska layouten till mobiltelefonens skärmyta Utforma lämplig navigering mellan applikationens olika delar och skärmar Den första frågeställningen besvaras till stor del i kapitel 5.3 Navigering och grafisk design. Batteritid och nätverksåtkomst nämndes också i frågeställningarna. Flextest utför inte några tunga, batteriförbrukande operationer förutom användandet av telefonens GPS. Det kan tänkas att tiden och distansen mellan lägesuppdateringar hos requestlocationupdates() skulle kunna minska batteriförbrukningen, men telefonens GPS är dock fortfarande aktiv och ökade intervaller mellan lägesuppdateringar har troligtvis ingen större effekt. Det data som överförs till och från webbtjänsten är inte större än några byte. Batteriaspekten bör därför inte anses som något problem för appen. Frågeställning kring vilka fördelar som kommer med en mobil version kan också anses besvarad i rapportens text och sammanfattas som: GPS för mycket enkel och exakt distansmätning Mycket stor mängd möjliga användare Lämpligt medium för löptest tack vare sin portabilitet. Frågeställningarna kring kommunikationen med molnet har undersökts men någon skarp implementation har inte blivit verklighet vilket var målet från början. Webbtjänsten ligger öppen och endast användarens mailadress används för att identifiera användarna vid lagring och hämtning av tidigare testresultat. Den bästa lösningen tycks som tidigare nämnt vara OAuth 2.0 mot Googles API för att autentisera och auktorisera användare. Vidare så måste applikationsutveckling för Android anses ha en förhållandevis låg inkörströskel, speciellt för den som sedan tidigare har erfarenhet av javaprogrammering. 34
41 Jag har själv en mycket begränsad erfarenhet av utveckling för Android och har ändå fått ett grepp om det viktigaste och lyckats utveckla en applikation som faktiskt tillför nytta och är användbar. Med tanke på examensarbetets omfattning om 15hp så har resultatet fallit väl ut. Slutsatser att dra efter att ha undersökt andra applikationer med liknande funktionalitet är att Flextest verkligen erbjuder något unikt, speciellt med möjligheten att sätta individuella mål för träningen. 9.1 Vidare utveckling För att applikationen ska gå att publicera för allmänheten så måste en permanent lösning på autentisering och auktorisering utvecklas och implementeras. Designmässigt så finns också mycket att göra. Applikationen bör göras mer responsiv och hårdtestas på flera olika Android-enheter. Testning bör också utföras för att hitta olika möjliga problemscenarion, som till exempel förlust av internetanslutning eller GPS signal. Viss hantering av sådana undantag finns i dagsläget men behöver utvecklas vidare. I dagsläget så kan appens användare inte heller ta bort ett genomfört test. Skulle ett felaktigt test registreras (t.ex. via det manuella testläget) så blir inte användarens utvecklingskurva korrekt. Därför behöver möjligheten att ta bort ett test utvecklas. 35
42 10 Referenser [1] Wikipedia, "Datormoln", (hämtad 27 maj, 2014) [2] Alex Rodriguez, RESTful Web services: The basics, (hämtad 27 maj, 2014) [3] Lars Fors, "Om coopertestet, (hämtad 9 juni, 2014) [4] Wikipedia, "Android version history", (hämtad 27 maj, 2014) [5] Android Developers, App Manifest, (hämtad 27 maj, 2014) [6] Android Developers, Activities, (hämtad 27 maj, 2014) [7] Android Developers, Fragments, (hämtad 26 maj, 2014) [8] Android Developers, (hämtad 30 maj, 2014) [9] Ken Schwaber, Jeff Sutherland, Scrumguiden, Guide-SE.pdf (hämtad 28 maj, 2014) [10] Microsoft Azure, (hämtad 30 maj, 2014) [11] ios Developer, Develop, (hämtat 24 maj, 2014) [12] Gartner, Press Release , (hämtat 27 maj, 2014) [13] Dag-Inge Aas, Authentication and Authorization for Native Mobile Applications using OAuth 2.0, Master Thesis, Department of Computer and Information Science, Norwegian University of Science and Technology, Trondheim, juni
43 [14] Anton Danshin, SpeedometerView, (hämtad 30 maj, 2014) [15] Daniel Nadeau, HoloGraphLibrary, (hämtad 30 maj, 2014) [16] Android Developers, Activity, (hämtad 28 maj, 2014) [17] Android Developers, Processes and Threads, (hämtat 28 maj, 2014) [18] Android Developers, Get Started with Publishing, (hämtad 30 maj, 2014) [19] Android Developers, Services, (hämtat 29 maj, 2014) 37
44 11 Bilagor 11.1 Bilaga 1: Skisser 38
45 39
46 11.2 Bilaga 2: Kod AsyncTask Koden nedan visar en klass som ärver av AsyncTask och genomför ett anrop till webbtjänsten via WebCommunicator. class GetNewDataSet extends AsyncTask<ParamsDataSet, String, ParamsDataSet> { ProgressDialog protected void onpreexecute() { pdialog = new ProgressDialog(rootView.getContext()); pdialog.setmessage(getstring(r.string.textwait)); pdialog.setcancelable(false); pdialog.show(); protected ParamsDataSet doinbackground(paramsdataset... params) { WebCommunicator wcomm = new WebCommunicator(); ParamsDataSet pset = wcomm.modifieddataset(params[0]); return pset; } protected void onpostexecute(paramsdataset set) { psetlab = set; setnewvalues(); pdialog.cancel(); } } 40
47 11.3 Bilaga 3: Skärmbilder Figur 10. Ej aktiverad GPS och varning för tryck på bakåtknapp Figur 11. Meny och "delning på Facebook" 41
48 Figur 12. Labbet 42
Mina listor. En Android-applikation. Rickard Karlsson 2013-06-09. Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.
Mina listor En Android-applikation Rickard Karlsson 2013-06-09 Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.se Innehållsförteckning 2. Innehållsförteckning 3. Abstrakt 4. Inledning/bakgrund
SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS
SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS Individuellt Mjukvaruutvecklingsprojekt (Utvecklare av digitala tjänster) Den 1 juni 2011 ABSTRAKT Rapporten tar upp positiva och negativa erfarenheter som jag erhållit
Android översikt. TDDD80 Mobila och sociala applikationer
Android översikt TDDD80 Mobila och sociala applikationer Översikt Köra app på mobil / emulator Android Studio introduktion Android kodning Android labb 1 Köra på mobil / emulator Developer mode på mobilen
Högskolan i Gävle. Introduktion till att skapa appar för Android VT Eat App! Jacob Gavin
Högskolan i Gävle Introduktion till att skapa appar för Android VT 2016 Eat App! Jacob Gavin tfk16jgi@student.hig.se Inledning Syftet med Eat App är att få människor som inte tidigare mött varandra att
2014-2015 Alla rättigheter till materialet reserverade Easec
1 2 Innehåll Introduktion... 3 Azure Client SDK Libraries... 4 Översikt: Azure Client Libraries... 5 Azure SDK... 6 Azure SDK (forts.)... 7 Azure SDK (forts.)... 8 Cloud Services... 10 Cloud Services...
Mobilt Efos och ny metod för stark autentisering
Mobilt Efos och ny metod för stark autentisering I och med lanseringen av E-identitet för offentlig sektor, Efos, kommer Inera att leverera komponenter som möjliggör att en användare ska kunna logga in
STADSLEDNINGSKONTORET SOA SDK IT-AVDELNINGEN VERSION 2.1. Läs mig först. Stockholms stad SOA-plattform. Sida 1 (5)
Läs mig först Stockholms stad SOA-plattform 1 (5) Innehållsförteckning 1 Beskrivning av SDK 3 1.1 Software Developer Kit för Utvecklare... 3 1.2 Support för... 3 1.3 Omfattning... 4 1.4 Versionshantering...
Rafel Ridha Projektdefinition
Rafel Ridha Projektdefinition Utveckling av applikation för Windows Phone Dokumenttitel Projektdefinition Dokumentförfattare Rafel Ridha Dokumentnamn Projektdefinition xx.pdf Version 0.3 E-post rafelr@kth.se
Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document
Programutvecklingsprojekt 2003-04-24 Projektgrupp Elvin Detailed Design Document Björn Engdahl Fredrik Dahlström Mats Eriksson Staffan Friberg Thomas Glod Tom Eriksson engdahl@kth.se fd@kth.se d94-mae@nada.kth.se
Välkommen till Capture.
Välkommen till Capture http://capture-app.com Välkommen till Capture! Med Capture kan du spara, se och dela dina bilder och videor på alla dina enheter mobil, surfplatta och PC/ Mac. När du har laddat
Kort version - Google Kalender för KullensPK
Kort version - Google Kalender för KullensPK Datum: 2015-03-02 Sammanställt av Peter Ardemalm Innehållsförteckning Kort version - Google Kalender för KullensPK... 1 Så synkar du KullensPK i Google Kalender
Google Kalender för KullensPK
Google Kalender för KullensPK Datum: 2015-02-25 Sammanställt av Peter Ardemalm Innehållsförteckning Google Kalender för KullensPK... 1 Så synkar du KullensPK i Google Kalender Fördelarna med Google Kalender...
1ME323 Webbteknik 3 Lektion 6 API. Rune Körnefors. Medieteknik Rune Körnefors
1ME323 Webbteknik 3 Lektion 6 API Rune Körnefors Medieteknik 1 2019 Rune Körnefors rune.kornefors@lnu.se Agenda API (Application Programming Interface) Mashup Flickr API Google Maps API Labb 6 2 API (Application
Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.
Schenker har interna system som handhar information som är av intresse för våra kunder/partners. Idag finns ett flertal av dem tillgängliga via Internet, sk Online-tjänster. Dessa erbjuder inte bara hämtning
Tentamen i Objektorienterad modellering och design Helsingborg
Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng
Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.
Informationsinfrastruktur 7.5 hp Mattias Nordlindh Inledning Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Dokumentet består av
Webbserverprogrammering
Webbserverprogrammering WES Webbserverprogrammering Ämnet webbserverprogrammering behandlar funktionalitet för webblösningar och samspelet mellan beställare, användare, formgivare och utvecklare. Ämnets
Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10
Projekt Rapport RaidPlanner Jeanette Karlsson UD10 Abstrakt: Denna rapport handlar om mitt projekt i kursen Individuellt Mjukvaruutvecklings projekt. Rapporten kommer att ta upp hur jag gått tillväga,
WEBBSERVERPROGRAMMERING
WEBBSERVERPROGRAMMERING Ämnet webbserverprogrammering behandlar funktionalitet för webblösningar och samspelet mellan beställare, användare, formgivare och utvecklare. Ämnets syfte Undervisningen i ämnet
Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.
Klient/server Översikt Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning. Lektion 1: Webbtekniker från Microsoft Microsoft webbtekniker. ASP.NET. Klientsidan. Internet Information Server.
Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.
Objektorienterad programmering E Telefonboken, än en gång Föreläsning 5 Wrapper classes Exempel, histogram. Inldening om undantag. Mer om klassen Påminnelse Vår senaste version bestod av två klasser, bägge
1:5 SLUTRAPPORT - POST MORTEN LARS EHRMAN WP12 2013-06-07
1:5 - POST MORTEN LARS EHRMAN WP12 2013-06-07 2:5 ABSTRAKT EN AVSEENDE STOREFRONT WEB- SHOP SOM HAR TAGITS FRAM SOM PROJEKT I KURSEN GRÄNSSNITTSUTVECKLING (1IK419) OCH KURSEN INDIVIDUELLT MJUKVARUUTVECKLINGS-
Mobilt Efos och ny metod för stark autentisering
Mobilt Efos och ny metod för stark autentisering I och med lanseringen av E-identitet för offentlig sektor, Efos, kommer Inera att leverera komponenter som möjliggör att en användare ska kunna logga in
Grafiska användargränssnitt i Java
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Stora delar har
Android översikt. TDDD80 Mobila och sociala applikationer
Android översikt TDDD80 Mobila och sociala applikationer Vad som skiljer Android från Java Responsiv Appar får ett par sekunder på sig att reagera på användarinput Resurssnål Appar i bakgrunden dödas när
Användardokumentation Unit4-appar för Android - Attestering
2017-03-17 1 (6) Användardokumentation Författare: Jenny Klein Användardokumentation Unit4-appar för Android - Attestering 1 Inledning Denna användardokumentation även kallad lathund används att ge kort
Uppdragsbeskrivning. Paddel-appen Utmärkta kanotleder. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.
Paddel-appen Utmärkta kanotleder Version 1.0 Distributionslista Befattning Bolag/en het Säljare Sogeti Bengt Löwenhamn Konsultchef Sogeti Åsa Maspers Mentor/handledare Sogeti Student KaU Claes Barthelson
Manual HSB Webb brf 2004 03 23
TERMINOLOGI I Polopoly används ett antal grundläggande begrepp för publicering och hantering av information, eller innehåll som det också benämns. Nedan följer en kort genomgång av denna grundläggande
Webbtjänster med API er
Webbtjänster med API er Mål med lektionen! Veta kursmålen. Lite grunder om WCF Vem är jag? Mitt namn är Björn Jönsson och jobbar på Tahoe Solutions, ni når mig via mail: bjorn.jonsson@tahoesolutions.se
Undervisningen i ämnet webbutveckling ska ge eleverna förutsättningar att utveckla följande:
WEBBUTVECKLING Ämnet webbutveckling behandlar de tekniker som används för att presentera och bearbeta information i webbläsaren samt utifrån dessa tekniker skapa och vidareutveckla statiska och dynamiska
Idrottsapen. 1. Inledning. 2. Mål och syfte. 3. Projektbeskrivning
Idrottsapen Slutrapport för projektet Idrottsappen. Projekttitel: Idrottsappen Uppdragstagaren: Sandklef GNU Labs, 710413-5137 1. Inledning Under samtal med olika aktiva personer inom olika idrotter framkom
Mobilt Efos och ny metod för stark autentisering
Mobilt Efos och ny metod för stark autentisering I och med lanseringen av E-identitet för offentlig sektor, Efos, kommer Inera att leverera komponenter som möjliggör att en användare ska kunna logga in
[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P
Slutrapport Författare: Zlatko Ladan Program: Utvecklare av Digitala Tjänster 180P Kurs: Individuellt Mjukvaruprojekt Z l a t k o L a d a n Sida 1 Abstrakt: Denna rapport handlar om mitt projekt som jag
Grafiska användargränssnitt i Java
jonas.kvarnstrom@liu.se 2017 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Till stor del ersatt av Swing: Mer omfattande,
Manual Skogsappen - Hemkomstkontroll
Manual Skogsappen - Hemkomstkontroll Detta dokument utgör användarhandledningen till funktionen hemkomstkontroll i mobilappen Skogsappen som tillhör tjänsten epiforest. E p i s c o p e M o n i t o r i
Användardokumentation Unit4-appar för Android - Tidrapportering
2017-03-17 1 (5) Användardokumentation Författare: Jenny Klein Användardokumentation Unit4-appar för Android - Tidrapportering 1 Inledning Denna användardokumentation även kallad lathund används att ge
Android - En översikt samt titt på utvecklingsmiljö. Kalle Prorok 12 nov 2013
Android - En översikt samt titt på utvecklingsmiljö Kalle Prorok 12 nov 2013 Översikt Android Översikt Struktur Eclipse Runtomkring Emulator/Simulator Debugging 2013-11-12 Kalle Prorok 3 Android - översikt
Tentamen i Objektorienterad modellering och design
Lunds Tekniska Högskola Datavetenskap Tentamen EDA061 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram
Webbtjänster med API er
Webbtjänster med API er Mål med lektionen! En lite djupare inblick i RESTfulla tjänster Vad lektionen omfattar RESTful Services Överblick SOAP kan vara lite overkill för vissa specifika web service scenarion.
Swedbank Mobile Loadtesting. LoadRunner 11.04 Mobile App protocol
Swedbank Mobile Loadtesting LoadRunner 11.04 Mobile App protocol Bakgrund Mission: Prestandatesta mobilt backend Typ: RESTful tjänst Underlag: Dokumenterat URI och API (Uniform Resource Identifier, Application
Användarhandledning - Skogsappen
Användarhandledning - Skogsappen Detta dokument utgör användarhandledningen till mobilappen Skogsappen som tillhör tjänsten epiforest. E p i s c o p e M o n i t o r i n g S y s t e m s A B, D r o t t n
Storegate Pro Backup. Innehåll
Storegate Pro Backup Välkommen! I denna manual kan du bland annat läsa om funktioner och hur du ska konfigurerar programmet. Läs gärna vårt exempel om versionshantering och lagringsmängd innan du konfigurerar
Mobile First Video on demand och livesändningar på Internet. Juni 2012
Mobile First Video on demand och livesändningar på Internet Juni 2012 1 Om detta dokument Marknaden och tekniken kring film (video on demand och livesändningar) på Internet utvecklas blixtsnabbt. Video
Godkännande av kundapplikationer
samhällsskydd och beredskap 1 (9) Godkännande av kundapplikationer MSB-50.2 samhällsskydd och beredskap 2 (9) Innehållsförteckning 1 Alla applikationer måste godkännas... 3 1.1 Hur går ansökan om godkännande
Collector en Android-app för att samla saker. Kim Grönqvist (kg222dk) 2013-06-10 Slutrapport
Collector en Android-app för att samla saker Kim Grönqvist (kg222dk) 2013-06-10 Slutrapport Abstrakt Jag har gjort en Android-app för att samla saker, Collector. Med den kan man upprätta att göra-listor
Projektet. TNMK30 - Elektronisk publicering
Projektet TNMK30 - Elektronisk publicering Gruppindelning projekt Valfria grupper ~4 per grupp TNM088 - Digitala media-grupperna är ok Projektgrupper 4 personer Jämna par Lika arbete för små grupper Anmäl
Bonus Rapport Kommersiell Design KTH
Bonus Rapport Kommersiell Design KTH Johan Holmström & Lars Åkesson Introduktion Denna rapport beskriver projektet och delmomentet Kommersiell Design i kursen Interaktionsdesign 2 på KTH i Stockholm. Detta
Compose Connect. Hosted Exchange
Sida 1 av 15 Compose Connect Hosted Exchange Presentation av lösningen: Compose Hosted Exchange Följande möjligheter finns för hantering av e-post 1. Lokalinstallerad Outlook-klient För att kunna använda
Vis it. jquery jquery används lite överallt i appen på olika sätt. Det främsta användningsområdet är vid selektering och manipulering av HTML element.
Vis it Introduktion Vi har skapat den webbaserade appen Vis it som bygger på att användare kan ta bilder på och lägga upp sevärdheter via sin mobiltelefon. Dessa sevärdheter är positionsbaserade vilket
Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser
Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
På sjön 2.0 Intern Guide för Android
På sjön 2.0 Intern Guide för Android På sjön 2.0 - Guide 1 Översikt Meny Eniro sök GPS position/ Kartorientering Dashboard 2. Meny Innehåller följande funktioner: Min profil/båt information (se 2.1) Mina
Föreläsning 5-6 Innehåll
Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.
Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
ToDo ios-applikation. Mikael Östman. Mikael Östman - mo22ez Linnéuniversitetet
ToDo ios-applikation Mikael Östman 201205 Mikael Östman - mo22ez Linnéuniversitetet mo222ez@student.lnu.se Abstrakt Detta är en slutrapport för det projekt jag bedrivit inom ramen för kursen Individuellt
Guide för Innehållsleverantörer
Library of Labs Content Provider s Guide Guide för Innehållsleverantörer Inom LiLa ramverket är innehållsleverantörer ansvariga för att skapa experiment som "LiLa Learning Objects", att ladda upp dessa
HejKalmar app. Projektrapport. Webbprojekt I
Projektrapport HejKalmar app Webbprojekt I Författare: Cecilia Lindqvist, Linus Lundevall, Christofer Olaison, Andreas Söderström och Isak Utegård Handledare: Tobias Ohlsson Examinator: Tobias Ohlsson
Användarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
Inlämningsarbete Case. Innehåll Bakgrund bedömning inlämningsarbete... 2 Inlämnade arbeten... 4
Inlämningsarbete Case Innehåll Bakgrund bedömning inlämningsarbete... 2 Inlämnade arbeten... 4 1 Bakgrund bedömning inlämningsarbete Syfte: Eftersom det står i betygskriterierna att för VG skall deltagaren
ÅGIT PRESENTERAR FILR SMIDIG OCH SÄKER FILÅTKOMST OCH DELNING
ÅGIT PRESENTERAR FILR SMIDIG OCH SÄKER FILÅTKOMST OCH DELNING Novell Filr är som Dropbox, men betydligt säkrare. Från och med nu kan alla anställda och studerande inom Ålands gymnasium arbeta med sina
Manual - Inläsningstjänsts App (Android)
Sidan 1 av 7 Manual - Inläsningstjänsts App (Android) App-release: Beta Innehållsförteckning 1 Kort om appen... 2 Funktionalitet i grova drag... 2 Kända begränsningar i denna version... 2 2 Var hittar
Gränssnitt för FakeGranska. Lars Mattsson
Gränssnitt för FakeGranska av Lars Mattsson (larsmatt@kth.se) Innehållsförteckning 1 Introduktion...3 2 Genomförande:...3 3 Användning...5 4 Kända buggar:...6 5 Källförteckning...6 2 1 Introduktion Taken
Interaktiva applikationer för dator (WPF) och web (Silverlight) Grafisk utvecklingsmiljö. Hela produktioner: design, layout, animationer, skins, etc.
Microsoft Expression Blend + Sketch Flow Microsoft Expression Blend + Sketch Flow Grafisk utvecklingsmiljö Interaktiva applikationer för dator (WPF) och web (Silverlight) Färdiga byggstenar Hela produktioner:
SLUTRAPPORT WEBBPROJEKT 1
SLUTRAPPORT WEBBPROJEKT 1 Kostregistrering 30 mars 2012 Webbprojekt 1 1DV411 Institutionen för datavetenskap, fysik och matematik Linnéuniversitetet Ella Källman - ella@kallman.se Martin Kuoppa - martin@duofy.com
Lathund för Novell Filr
1(57) Stadsledningsförvaltningen IT-avdelningen Lathund för Novell Filr 2(57) Innehåll 1. Introduktion... 4 2. Termer... 4 3. Icke tillåtna tecken i filnamn... 4 4. ipad... 5 4.1 Installation... 5 4.2
dit06omr@cs.umu.se 12 juni 2009 Projektplan Webb-baserat bokningssystem för flyg Kurs: Applikationsutveckling för internet, TFE
Projektplan Webb-baserat bokningssystem för flyg Kurs: Applikationsutveckling för internet, TFE VT-09 Innehållsförteckning Inledning & problembeskrivning...1 Systembeskrivning...2 Affärsobjekt...2 Databasen...4
RDT Externt Webbtjänst Gränssnitt
Version 2.0 1(9) RDT Externt Webbtjänst Gränssnitt Ändringsförteckning: Versionsnummer Ändringsdatum Orsak till ändringen Ändad av 1.0 2007-11-23 Första versionen. Magnus Fredriksson 2.0 2009-03-17 Ändrat
Universe Engine Rapport
1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten
JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund gussk258@student.liu.se. Marcus Widblom marwi026@student.liu.se. Senast ändrad: 13 / 05 / 08
JavaRats Kravspecifikation Version 1.1 Gustav Skoglund gussk258@student.liu.se Marcus Widblom marwi026@student.liu.se Senast ändrad: 13 / 05 / 08 Sammanfattning Kravspecifikationen för JavaRats har skrivit
Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID
Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID Vad gör vi här? Programmeringsteknik fördjupningskurs (EDAA01; 7,5hp) Valfri för F, N & BME (kan läsas från åk 2 eller i sommar!) Avancerad
MANUAL NETALERT FÖR IPHONE VERSION 1.1 WWW.NETALERT.SE
MANUAL NETALERT FÖR IPHONE VERSION 1.1 Installation Hämta och installera NetAlert till din iphone från App Store. När appen är installerad, starta NetAlert och följ instruktionerna under Första gången.
Azure Designer. Version 1.0 Mats Persson
Version 1.0 Distributionslista Befattning Bolag/enhet Namn Åtgärd Info. Student KaU Carl Philip Matsson Konsult/huvudhandledare Sogeti Konsultchef Sogeti Åsa Maspers Projektledare/handledare Sogeti Marcus
1 Kravspecifikation Snake App
Kravspecifikation Snake App - Kravspecifikation Snake App Utskriven/PDF Export: 2011-09-07 Copyright 2011 Sidan 1 av 7 1 Kravspecifikation Snake App 1.1 Vad är Snake App? Vi skall gör ett Snake Spel för
Arbeta med rutter i Tracker MyWay och andra program.
Arbeta med rutter i Tracker MyWay och andra program. Innehåll Översikt...1 Spara rutter i MyWay...2 Kopiera rutter från MyWay till ett annat MyWay program...2 Arbeta med rutter i MyWay...3 Rita en rutt
Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin
Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna
Projektarbete 2: Interaktiv prototyp
Projektarbete 2: Interaktiv prototyp Jonatan Hilmarch (Grupp 13) 880427-5595 hilmarch@skip.chalmers.se Kurs: Människa-Datorinteraktion TIG061 HT 2010 Projekt 1 - en tillbakablick Enligt projektets systemdefinition
Komma igång med OneD. Allt på en plats
Komma igång med OneD Allt på en plats I Windows 8.1 och Windows RT 8.1 kan du enkelt spara dina filer på OneDrive så att du kan nå dem från alla dina enheter, till exempel din dator, surfplatta eller telefon.
INSTALLATIONSGUIDE TILL ANDROID UTVECKLINGSMILJÖ
INSTALLATIONSGUIDE TILL ANDROID UTVECKLINGSMILJÖ Denna installationsguide berättar hur man installerar och kommer igång med utveckling för Android. Guiden är skriven som en komplettering till min bok Programmera
TDDD78 projekt: Tower Defence
projekt: Tower Defence 1 Introduktion Tower Defence är en kategori av spel med rötter till 1980-talet som går ut på att försvara en punkt (ofta symboliserat som en bas eller by) från horder av monster
CW263BT. Badrumsvåg. Manual
CW263BT Badrumsvåg Manual Innehållsförteckning 1. Specifikationer... 3 2. Batteri... 4 3. Drift/Funktion... 4 3. Indikation... 5 4. ios Enheter... 5 5. Android Enheter Installation... 10 6. Andra Instuktioner
RDT Externt Webbtjänst Gränssnitt
Vägverket Samhälle och trafik Texttelefon: 0243-750 90 Magnus Fredriksson Sitv - extern Datum: 2007-11-23 Beteckning: Version 1.0 RDT Externt Webbtjänst Gränssnitt Ändringsförteckning: Versionsnummer Ändringsdatum
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Kort om klasser och objekt En introduktion till GUI-programmering i Java
Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på
ADOBE FLASH PLAYER 10.3 Lokal inställningshanterare
ADOBE FLASH PLAYER 10.3 Lokal inställningshanterare PRERELEASE 03/07/2011 Juridisk information Juridisk information Juridisk information finns på http://help.adobe.com/sv_se/legalnotices/index.html. iii
Detaljbeskrivning av Player
Detaljbeskrivning av Player Syftet med Playerklassen är att representera det skepp som spelaren styr. Spelarens skepp styrs till skillnad från övriga skepp av spelaren både när det kommer till vilken riktning
Säkra Designmönster (Secure Design Patterns)
Säkra Designmönster (Secure Design Patterns) Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT) Säkra designmönster Beskrivningar eller mallar
Uppdragsbeskrivning. Närvaruappen. Version 1.0 Mats Persson. vakant
! Version 1.0 vakant Innehållsförteckning 201-08-12 1. Allmän beskrivning av uppdraget... 1.1 Bakgrund... 2.... 2.1 Mockup... 2.2 Spara data... 2. Optioner... 2..1 Option 1: Statistik... 2..2 Option 2:
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
Från Smart TV till Smartare upplevelse Av: Kim Huber och Connie Huanca
Från Smart TV till Smartare upplevelse Av: Kim Huber och Connie Huanca System vi undersökte Den system vi valde att undersöka var en av de senaste smart tv som finns i markanden och var nämnd till bästa
Användarhandbok för administratörer av tjänsten för Mobil och surfplatta
Användarhandbok för administratörer av tjänsten för Mobil och surfplatta Ideon Science Park Scheelevägen 17 223 70 Lund, Sweden Innehåll Inledning... 3 Om Handboken... 3 Målgrupp... 3 Översikt av Applikationen...
Datatal Flexi Presentity
Datatal Flexi Presentity En snabbguide för Presentity Innehållsförteckning 1. Login 2 2. Hänvisa 3 2.1 Att sätta hänvisningar 3 2.2 Snabbknappar 4 2.3 Windows gadget 5 3. Samtal 5 4. Status 6 4.1 Exempel
Bruksanvisning för dator Abilica WinElip 2.0 Art. 555 055
Bruksanvisning för dator Abilica WinElip 2.0 Art. 555 055 SM 3112-67 HUR DU ANVÄNDER DATORN När datorn är nollställd kommer samtliga värden visa 00:00, och alla funktionerna kommer blinka samtidigt överst
ipad-tips elektroniska dokument i Tibro kommun 2013-05-15
ipad-tips elektroniska dokument i Tibro kommun 2013-05-15 I Tibro kommun har vi liksom många andra kommuner fastnat för Apples modell ipad för att ta del av handlingar inför och efter politiska möten.
DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin
DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:
KONDITION TRÄNINGSRAPPORT
KONDITION TRÄNINGSRAPPORT Gör ett eget träningsprogram för perioden: Utgå från nedanstående punkter n Vilken är din målsättning med träningsperioden? n Planera din konditionsträning. n Tänk igenom både
Krav och riktlinjer för applikationsutveckling
Svenska Filminstitutet Box 27126, 102 52 Stockholm Besök: Filmhuset, Borgvägen 1 Telefon: 08-665 11 00 Fax: 08-661 18 20 www.sfi.se BILAGA till Branschstandard Tillgänglig Bio 2015-03-25 Krav och riktlinjer
Introduktion till integrering av Schenkers e-tjänster. Version 2.0
Introduktion till integrering av Schenkers e- Version 2.0 Datum: 2008-06-18 Sida 2 av 8 Revisionshistorik Lägg senaste ändringen först! Datum Version Revision 2008-06-18 2.0 Stora delar av introduktionen
Design och konstruktion av grafiska gränssnitt
Design och konstruktion av grafiska gränssnitt Armin Nezirevic Peter Börjesson Interaktionsdesign Tillämpad informationsteknologi Chalmers/GU Idag Vad utmärker ett bra användargränssnitt? Kort kursinfo