Nyhetsflöde med Raspberry Pi Ett roligare sätt att ta del av ett företags affärsrelaterade händelser Examensarbete inom Högskoleingenjörsprogrammet i Datateknik ADAM BOOK DAVID HARALD Nyhetsflöde med Raspberry Pi Ett roligare sätt att ta del av ett företags affärsrelaterade händelser Adam Book, David Harald © ADAM BOOK, DAVID HARALD, 2016 Institutionen för data- och informationsteknik Chalmers tekniska högskola 412 96 Göteborg Tel: 031-772 1000 Fax: 031-772 3663 FÖRORD Detta examensarbete gjordes under våren och försommaren 2016. Ett arbete som handlar inte bara om teknisk utveckling utan även personlig utveckling. Efter ett projektarbete som började i samarbete på Gatubolaget och deras idé om smarta postlådor fick vi kontakt med konsultföretaget Sigma. Sigma har mycket kontakt med Chalmers och har många anställda med tidigare kopplingar till Chalmers. Vi fick kontakt med dem då de förvaltar digitala tjänster till Gatubolaget. Vi har fått gott intryck av Sigma och Rashwan Lazkani som har varit ett bra stöd och vår handledare på företaget. Med påföljden att vi fått goda kontakter med Sigma och med stor sannolikhet inte har sett det sista av dem. SAMMANFATTNING Sigma är ett stort konsultföretag i Göteborgsområdet. De har efterfrågat en helhetslösning för att snabbt kunna dela nyheter internt om bland annat nya kunder och nya uppdrag. Denna helhetslösning har utvecklats. En databas, webbtjänst, webbapplikation, applikation till Android och notifikationer med hjälp av en Raspberry Pi med ljusslinga har utvecklats. Databasen lagrar alla meddelanden och användare. Webbtjänsten hanterar förfrågningar mot databasen. Meddelanden skrivs i applikationen till Android. Dessa kan visas i webbapplikationen och i applikationen till Android. När ett meddelande publiceras lyser en ljusslinga i några sekunder. Denna ljusslinga styrs av Raspberry Pi. ABSTRACT Sigma is a large company in the Gothenburg region. They have asked for a service to quickly be able to share their most recent news about new customers and assignments among their staff. This service has been developed. A database, web service, web application, Android application and notifications with the help of a Raspberry Pi and a LED strip have been developed. The database stores the messages and the users. The web service handles requests towards the database. People can write messages to the newsfeed with the Android application. Messages published to the newsfeed can be read either with the Android application or the web application. When a new message is published on the newsfeed, a LED-animation is shown at the office. This LED-animation is controlled with the help of a Raspberry Pi. 1. INLEDNING 1.1 Bakgrund 1.2 Syfte 1.3 Mål 1.4 Avgränsningar 1 1 2. METOD 2.1 Överblick 2.2 Skalbarhet 2.3 Arbetsmetodik 2.4 Material 2 2 3. TEKNISK BAKGRUND 3.1 MVC-Modellen 3.2 Scrum 3.3 Trello 3.4 CSS 3.5 Bootstrap 3.6 Databas & Code First 3.7 Webbtjänst 3.8 Postman 3.9 Back-End 3.10 Webbapplikation 3.11 Mockups 3.12 Blinkytape (LED-slinga) 3.13 Raspberry Pi 3.14 Linq 4 4. GENOMFÖRANDE 4.1 Allmänt 4.2 Databasen 4.3 Webbtjänst 4.4 Webbapplikation 4.4.1 Domain 4.5 Android-Applikationen 4.6 Raspberry Pi och notifikationer 4.6.1 Lyssnarprogrammet för notifikationer 1 1 1 2 3 3 4 5 5 7 7 7 7 8 8 8 8 9 10 11 13 13 13 14 17 18 18 19 19 5. SLUTSATS 5.1 Databas 5.2 Webbtjänst 5.3 Webbapplikation 5.4 Android-Applikation 5.5 Raspberry Pi 5.6 Hållbarhetsaspekt 5.7 Planering 5.8 Helhetsintryck 5.9 Fortsatt arbete 22 22 6. REFERENSER 26 22 22 23 24 24 24 25 25 ORDLISTA API Android DTO ER-diagram iOS IoT JSON LED LINQ MD5 MVC NFPU REST SCRUM SDK SQL Trello - XML - Application Programming Interface. Ett operativsystem. Data-Transfer-Object Entity-Relationship-diagram. Apple’s operativsystem för deras mobiltelefoner Internet of Things JavaScript-Object-Notation. Light-Emitting-Diode. Languge-Integrated Query. Message-Digest-algorithm-number-5 Model-View-Controller. Tidigt namn för projektet, står för News-Feed-Publisher-Unit. Representational State Transfer. Ett sätt att planera upp ett projekt. Scrum är inget akronym. Software Development Kit. Structured-Query-Language. Trello är en webbapplikation som används som hjälpmedel till SCRUM. Extensible-Markup-Language. 1. INLEDNING 1.1 Bakgrund Sigma är ett ledande konsultföretag med fokus på teknik som har över 6000 anställda. Sigma IT Consulting Sweden är en avdelning som fokuserar på IT-relaterade tjänster för företag. Några kunder är t ex Saab, Gatubolaget och Liseberg. Som konsultföretag är det vanligt att anställda är ute på annan arbetsplats för att bistå företagskunderna. 1.2 Syfte På ett konsultbolag är dagarna fyllda med aktiviteter som t ex intervjuer, kundmöten, orderförfrågningar, etc. Oftast gäller devisen att ju fler aktiviteter man har, desto bättre går det för företaget. För de som har mer stationära aktiviteter knutna till kontoret vill Sigma erbjuda en möjlighet att ta del av vad som händer ”ute på fältet”. Detta ska uppnås med en intern newsfeed (nyhetsflöde) som informerar om när någon på Sigma t ex har bokat en ny kund, slutfört ett projekt eller liknande. Till denna newsfeed kopplas någon form av visuell notifikation för att informera kollegor på kontoret att något nytt har hänt. 1.3 Mål Målet är att utveckla en helhetslösning för det interna nyhetsflödet. Det ska gå att skicka meddelanden till nyhetsflödet med hjälp av en applikation för Android, se nyhetsflödet i en webbapplikation, och få någon form av visuell notifikation (en ljusslinga som lyser ett mönster) när det kommer ett nytt meddelande till nyhetsflödet. Utvecklingen kan delas in i följande områden: ● ● ● ● ● Databas för att lagra informationen Webbtjänst för att sköta kommunikationen mellan webbapplikation och databas Webbapplikation för att visuellt visa nyhetsflödet Applikation till Android för att skicka meddelanden Visuell notifikation 1.4 Avgränsningar En Raspberry Pi kommer att användas för hantering av notifikationerna. Andra alternativ undersöks inte. Datasäkerhet hade låg prioritet. Enkel textformatering är implementerad för att lösenord inte ska stå i klartext. Ramverket ASP.NET och designmönstret Model-View-Controller (MVC) med Entity Framework kommer att användas för webbapplikationen då detta har efterfrågats av Sigma. 1 2. METOD 2.1 Överblick Arbetsföljden lyder: 1. 2. 3. 4. 5. 6. Planera strukturen (inklusive mockups) Databas Webbtjänst Webbapplikation Applikation till smartphones Applikation för notifikationer med Raspberry Pi Inledningsvis planeras programstrukturen genom att gå igenom vilka attribut databasen kommer att lagra. Detta ger en överblick över funktioner och anrop som behöver skapas för de olika applikationerna (webbtjänst för att kommunicera med databasen, webbapplikationen för webbvyn, mobilapplikation för att skicka meddelanden, applikation på Raspberry Pi för notifikationer). När databasen är färdigställd är nästa steg att bygga en webbtjänst, då denna kommunicerar direkt med databasen. Tanken är att webbtjänsten ska sköta kommunikationen mellan databasen och webbapplikationen. Nästa steg är att bygga webbapplikationen. När både databasen och webbtjänsten är skapade finns de underliggande lager som webbapplikationen behöver för att kunna fungera optimalt. När databas och webbtjänst är färdiga finns de underliggande byggstenar som behövs för att utveckla en applikation till Android. Med applikationen ska en användare kunna ange sitt namn och ett meddelande som ska skickas till nyhetsflödet. Den slutgiltiga uppgiften är att koppla en Raspberry Pi med en ljusslinga som ska detektera när meddelanden har skickats till nyhetsflödet och tända ljusslingan under en viss tid. 2.2 Skalbarhet Prioritet lades vid att bygga en applikation till Android för att skicka meddelanden. Det skulle vid ett senare tillfälle kunna utvecklas en applikation för iOS. Den ska då fungera på ett liknande sätt som applikationen för Android. För webbapplikationen har det förts diskussioner om olika påbyggnader. Bland de extra funktioner som har diskuterats finns bland annat inloggning (för ökad säkerhet, eftersom nyhetsflödet är en intern tjänst), filtrering (för att se alla meddelanden en viss användare har skickat), topplista för bl a bokade kunder, osv. 2 2.3 Arbetsmetodik Arbetsmetodiken som har använts är Scrum, ett arbetssätt som är vanligt inom agil utveckling [2]. Det är ett verktyg för att dela upp och effektivisera arbetsuppgifter och sätta stort fokus på det värdeskapande arbetet. Se teknisk bakgrund för mer information. För versionshantering användes Git, den i dagsläget senaste versionen, 2.8 [12]. Git är ett revisionshanteringsprogram som prioriterar snabbhet, dataintegritet och har stöd för tidsmässigt osammanhängande arbetsgångar. Det är också helt gratis, lanserat med GNU General Public License version 2. Själva utvecklingen av kod skedde huvudsakligen i Visual Studio 2015 för de webbaserade tjänsterna. Utvecklingen av Android-applikationen har skett i Android Studio.Utveckling av lyssnarprogrammet för notifikationer med Raspberry Pi har skrivits i Python 2.7.9. 2.4 Material Huvudmaterialet som används är följande: ● ● ● ● ● ● ● ● ● Raspberry Pi 3 BlinkyTape (LED-slinga utformad för användning med datorer) Skärm för att visa nyhetsflöde Visual Studio 2015 för utveckling av webbtjänst och webbapplikation Android Studio för utveckling av applikation till Android Postman för testning av webbtjänst Google Chrome webbläsare Git Mockups Till detta används diverse kablar och standardutrustning för datorer. 3 3. TEKNISK BAKGRUND 3.1 MVC-Modellen MVC är ett designmönster som används brett idag för utveckling av applikationer [5]. MVC står för Model-View-Controller och bygger på att separera viktiga delar av utvecklingen. Detta designmönster är applicerbart i vilken typ av strukturerat projekt som helst, inte nödvändigtvis bara för digital utveckling. MVC-modellen används i stor utsträckning vid professionell mjukvaruutveckling. Tanken med MVC är att uppdelning kan undvika onödigt komplexa lösningar, konflikter mellan de olika instanserna och mutation av data. Samtidigt skapas en tydlig struktur och ökar läsbarheten i koden. ● (M) Modell: Strukturerar upp den data som fysiskt ska lagras. Det är inte nödvändigtvis i en databas utan kan vara vilken representation som helst. ● (V) View: Är en presentering av data för en användare. Ett typiskt exempel i utveckling av webbaserade projekt är vyn i en webbläsare. ● (C) Controller: Hanterar logiska händelser baserat på omständigheter som initierats av en användare eller statisk logik. En majoritet av funktionaliteten finns här. MVC kan uppfattas som en flyktig term utan kontext, men kommer här att appliceras på utvecklingen av programvara för webbapplikationen (se figur 3.1). Det kommer att innebära en separerad struktur för att främst öka läsbarheten. Figur 3.1 - En vy över MVC-strukturen som appliceras 4 3.2 Scrum Scrum är en arbetsmetodik som är vanligt förekommande i projekt med programmering. Det är ett arbetssätt som räknas som agil utveckling [16]. Agil utveckling är ett arbetssätt som togs fram av programutvecklare som hade tröttnat på den överväldigande byråkrati och dokumentation som vid den tiden präglade mjukvaruutveckling. Istället läggs fokus på att underlätta mjukvaruutvecklingen i sig. Det tydliga målet blir att leverera den värdeskapande koden, att ta bort alla hinder som kan dyka upp längs vägen och att lätt kunna anpassa sig till nya omständigheter. I Scrum kallas projektledaren Product Owner. Det är den person som har det övergripande ansvaret för projektet. Product Owner som tar fram en prioriterad önskelista över vad som ska uppnås i projektet. Denna önskelista kallas Product Backlog. Varje enskild punkt i projektets Product Backlog kallas för en User Story, och är en beskrivning av den funktion som önskas uppfyllas. I Scrum sker arbetet i något som kallas Sprints. En Sprint är en begränsad tidsperiod (ofta mellan 2-4 veckor) då fokus ligger på att få utvalda delar av projektets Product Backlog färdiga. Efter varje Sprint utförs en Sprint Review och en Sprint Retrospective. På Sprint Review presenteras det som har åstadkommits. På Sprint Retrospective reflekterar utvecklarna över hur arbetet blivit utfört och diskuterar förbättringsåtgärder för att effektivisera framtida Sprints. När nästa Sprint startar väljer utvecklarna återigen nya områden att fokusera på från projektets Product Backlog och påbörjar arbetet. 3.3 Trello För att organisera ett projekt med Scrum är det vanligt att använda verktyget Trello [10]. Trello är en webbapplikation med diverse verktyg för att underlätta hanteringen och översikten av ett projekt (se figur 3.2). Under hela utvecklingen har detta använts i samband med Scrum. 5 Figur 3.2 Överblick på Trello Trello är ett utmärkt verktyg för att åskådliggöra Scrum. Genom att skriva små kort i Trello kan dessa användas som User Stories med drag-and-drop funktionalitet. Detta innebär att det blir smidigt och enkelt att skapa en Product Backlog (se figur 3.3) och sedan allt eftersom flytta User Stories till en Sprint (se figur 3.4). Figur 3.3 Product Backlog i Trello-vy Figur 3.4 Sprint 2 i Trello-vy 6 3.4 CSS Cascading Style Sheets (CSS) är ett språk som ofta används för att utforma designen av en webbapplikation [3]. Det används bland annat till att separera en webbapplikations innehåll och hur detta innehåll presenteras. Genom att använda CSS kan samma stilmall appliceras på flera olika sidor. Visningen kan också anpassas för olika enheter (telefoner, surfplattor, datorer). 3.5 Bootstrap Bootstrap är en designmall som ofta används till webbdesign för att få en stilren och konsekvent design på en webbapplikation [9]. Det är open source och använder sig av HTML och CSS för att skapa enhetlig design. 3.6 Databas & Code First En databas är en lagringsplats för data [4]. För att kunna lagra data effektivt är det lämpligast att endast lagra relevant data en gång. Genom att strukturera upp datan i en serie av tabeller med dess data länkad kan man optimera informationslagringen. Ett av verktygen som används är Microsofts egna utvecklarprogram Visual Studio. I detta program finns ett verktyg som kallas Code First[13]. Denna metod används för att automatiskt generera databasen. Tanken är att koden skrivs först, med de variabler och modeller som önskas. Därefter genereras databasen beroende på den data som behöver hanteras. Databasen är skriven i SQL (Structured Query Language), vilket är det vanligaste språket till databaser. 3.7 Webbtjänst En webbtjänst är en applikation som har direkt kontakt med databasen [15]. Webbtjänsten hämtar och skriver data i databasen. API står för “Application Programming Interface” och det är i grund och botten bara en samling regler för nämnda applikation. De två största fördelarna med att använda en webbtjänst är lätthanterlighet vid olika plattformar (i detta fallet webbläsare, Android, och iOS) och datasäkerhet. Genom att ha en webbtjänst är det lätt att kommunicera med databasen oavsett om det är Android, iOS eller en webbläsare som gör en förfrågning. Förfrågningar hanteras på liknande sätt för olika plattformar mot en webbtjänst. Skulle en webbtjänst inte användas skulle specifik kod behöva skrivas för att kunna hantera förfrågningar från varje enskild plattform. Genom att lägga till en webbtjänst som en mellanhand mellan databasen och applikationerna ökar datasäkerheten. Detta betyder att en användare inte har direkt kontakt med databasen, vilket i sin tur leder till att databasen inte är lika utsatt för attacker och manipulation som den annars skulle vara. Eftersom användare bara kommunicerar med en webbtjänst är det utvecklarna som bestämmer vilka förfrågningar som kan göras mot databasen. 7 Webbtjänsten bygger på en inbyggd SQL-abstraktion i Visual Studio, som kallas Linq (Languge-Integrated Query), som bygger på många, lättförståeliga mönster för strukturering och hantering av data [6]. Med hjälp av detta hämtas data i form av JSON-objekt eller XML från databasen och kan hanteras av i princip vilken typ av applikation som helst. JSON står för “JavaScript Object Notation” och är ett sätt att presentera data, egentligen är det inget annat än en syntax i grund och botten. 3.8 Postman Postman är ett program som används för att skicka och ta emot HTTP-requests [11]. Det är ett program som gör det enkelt att till exempel testa att en webbtjänst fungerar som den ska och klarar att hantera HTTP-requests på det sätt som önskas. 3.9 Back-End Back-End är ett bildligt ord som definierar en applikations funktionalitet. Back-End kan också ses som en synonym till Controller. En sorts intern Controller för applikationen. Här kan bland annat tillfälliga beräkningsbara attribut till diverse data distribueras och presenteras. Back-End är C(Controller) i MVC modellen. 3.10 Webbapplikation Webbapplikationen är en ASP.NET-applikation, precis som webbtjänsten, med skillnaden att denna även har vyer för presentation av data [14]. Det är webbapplikationen som kommer att synas för användaren. Webapplikationen bör inte påbörjas förrän webbtjänstens funktionalitet för datatrafik är fullt utvecklad. Ändringar kan göras på tjänsten efter att applikationen påbörjats, men det kan skapa många konflikter i koden. Webbapplikationen är V(View) i MVC-modellen. Webbapplikationen innehåller dock också logik. Därav är webbapplikationen också C(Controller) i MVC. 3.11 Mockups En mockup är en mycket enkel prototyp som används för att inleda designprocessen (både vad gäller gränssnitt och funktionalitet) och kommunicera med kunden om önskat utseende och funktionalitet[1]. Tanken är att börja få respons från kunden så snart som möjligt. Eftersom relativt lite resurser läggs på varje mockup har kunden lättare att komma med kritik och förslag. Skulle stora resurser användas för en första version av mjukvaran till kunden är det mycket besvärligare för kunden att kritisera produkten och be om ändringar. Det är dessutom dyrare och mer omständligt för utvecklaren. Eftersom det är lätt och billigt att göra ändringar i en mockup används de även internt bland utvecklarna för att diskutera olika designförslag och framtida funktionstillägg. 8 Figur 3.5 Mockup för webbapplikationen. Figur 3.6 Mockups för telefonappen. 3.12 Blinkytape (LED-slinga) Blinkytape är en LED-slinga som består av ett en meter långt flexibelt band på totalt 60 LED-lampor [7]. Den är avsedd för användning med datorer och kan programmeras för att visa de ljusmönster som önskas. Man kan programmera färgen, ljusstyrkan och animationsmönstret för varje enskild LED-lampa på slingan och därmed uppnå exakt ljussekvens som önskas. 9 Figur 3.7 BlinkyTape med tända LED-lampor 3.13 Raspberry Pi Figur 3.8 Raspberry Pi 3 (utan chassi) Raspberry Pi [8] är en liten enkortsdator (8,6 cm lång, 5,6 cm bred och 2,1 cm hög) som har blivit mycket populär på senaste tid för Internet-of-Things-projekt (IoT). IoT handlar om 10 teknikprylar som är uppkopplade till Internet, till exempel en kaffebryggare. På grund av dess låga pris på ca 450 kr har IoT-projekt blivit allt mer alldagliga och något som privatpersoner kan ta del av. Figur 3.9 Den Raspberry Pi som använts (med taket på chassit avplockat) 3.14 Linq Linq används för kommunikation och koppling av modellobjekt till databasen. Linq är en serie mönster som gör det möjligt att hantera JSON, XML eller liknande, helt utan några kunskaper om hur den underliggande koden kommer att exekveras. Linq är ett bra verktyg för enkel hantering av data. Linq kan t ex skrivas i C# (se figur 3.10). Linq skrivs väldigt likt vanlig SQL-kod och fungerar på samma sätt. I detta fallet begärs information från databasens tabell Events och sparar denna data till en digital representation där varje enskild sammanhängande data sparas till ett EventDTO-objekt. DTO används som inte en helt exakt representation av innehållet i databasen utan en representation av den data som skickas, vilket inte alltid är exakt det som finns i databasen. 11 Figur 3.10 - Exempel med Linq 12 4. GENOMFÖRANDE 4.1 Allmänt Eftersom databasen är grunden till designen utvecklades denna först. Därefter utvecklades en webbtjänst för att hantera förfrågningar till databasen. När dessa två grundstenar var på plats fanns de underliggande delar som webbapplikationen behöver för att kunna visa vyer med data. Valet att utveckla webapplikationen som nästa steg gjordes då även Android-enheter kan använda sig av webbläsare och kan då läsa nyhetsflödet via webben. Därefter utvecklades en applikation till Android. Det är lättare att utveckla de olika instanserna var för sig och i ordning (databas, webbtjänst, webbapplikation, applikation till Android och notifikationer med Raspberry Pi). De flesta instanser bygger på att en annan instans existerar och opererar. En applikation kan visserligen kodas och hantera inkommande information, men om det inte finns någon tjänst som tillhandahåller information så kommer ingen data presenteras. Ändringar kommer oundvikligen att behöva göras vid ett flertal tillfällen. Dessa kan vara mycket svåra att implementera och kan ta lång tid. All utveckling av kod har skett i Visual Studio 2015 om det inte framgår att något annat verktyg har använts. Testning av API sker med Postman eller webbapplikationen. 4.2 Databasen Databasen är mycket enkel. Den består av två tabeller som innehåller användare och event som läggs upp. Själva skapandet av databasen skrivs med hjälp av Visual Studios egna implementering av Code First. För att demonstrera strukturen används ett ER-diagram (se figur 4.1). Figur 4.1 - ER-diagram över databasstrukturen Tabellen innehållande alla användare finns i entiteten People. Alla event finns i entiteten Event. Pilen beskriver att en användare kan ha många events medan ett event måste vara kopplat till exakt en användare. Databasen skulle kunna göras mer komplex men Sigma uttryckte specifikt ett önskemål om att hantera all logik rörande databasen i webbtjänsten. Detta kan kosta prestanda men ökar läsbarheten. Tanken är att skalbarheten ska vara stor. Detta innebar att databasen kunde innehålla fler attribut och även fler tabeller som i slutändan kanske inte kommer att användas. 13 En annan ändring som gjordes var att skapa statiska datavärden för att kunna dela dessa bland alla plattformar och undvika hård statisk kodning. Dessa statiska datavärden interagerar inte med användaren på något sätt. Tidigare attribut vars användningsområde upphörde togs egentligen inte bort ur databasen utan ignorerades. De antog antingen null-värden eller autogenererade värden. Det är givetvis svårt att veta i förväg vad som ska tilläggas under en vidareutveckling. Om det är känt vilka funktioner som skall utvecklas i framtiden är det önskvärt att implementera stöd för det så tidigt som möjligt. Databasen hanterar även känslig information och gör så genom en algoritm som krypterar datan på en låg nivå. Det gjordes tidigare en avgränsning mot skyddande av känslig data. En låg krypteringsnivå implementerades ändå för att undvika att datan står i klartext. Algoritmen är en standard MD5-algoritm som konverterar den indata den får till en lång sträng av oigenkännlig representation av indatan. Tanken är att det inte går att återskapa den ursprungliga datan utan endast dess krypterade version. Denna version går heller inte att återskapa genom att köra algoritmen baklänges. Databasens hantering av lösenord blir därmed säkrare. Om någon skulle komma över informationen i databasen så får angriparen då inte tillgång till lösenorden i klartext. 4.3 Webbtjänst För läsning och skrivning av data till och från applikationen används en webbtjänst. Webbtjänsten är utvecklad i ASP.NET 4.5. Webbtjänsten är ett så kallat RESTful API, vilket innebär att det lätt kan göras förfrågningar baserat på CRUD (create, read, update, delete). Förfrågningar mot webbtjänsten görs via HTTP (POST, GET, PUT, och DELETE) och JSON-objekt skickas mellan webbtjänsten och förfrågaren. Sigma utvecklar mycket i samma miljö. För att de enklare ska kunna använda alternativt vidareutveckla nyhetsflödet kommer utvecklingen att hålla sig till de normer satta av Sigma. Webbtjänsten kommer att hållas som en separat applikation. Tanken är att alla övriga delar, webbapplikation och mobil-applikation, ska kommunicera med webbtjänsten och genomföra önskade förfrågningar för att behandla och presentera data. Fördelen med detta är att det endast behövs en webbtjänst istället för en till varje plattform. API:n skrivs i huvudsak i programspråket C#. Själva kommunikationen mellan de olika applikationerna sker genom att skicka och ta emot JSON-paket. Fördelen med JSON är att data kan behandlas asynkront mycket enkelt. Asynkront menas att begäran behandlas i bakgrunden istället för att hela applikationen står stilla och väntar på svar från en server som kanske inte är igång. Efter skapandet av webbtjänsten har minimala ändringar gjorts i efterhand. De ändringar som har tillkommit är utbyggnaden av topplista, hantering av kategorier och sortering av events. 14 Webbtjänsten är designad med MVC-mönstret och Code First. Detta innebär att data är strukturerad i modeller och hanteras i controllers. I modellen beskrivs vad för data som önskas sparas (se figur 4.2). Därefter skapas databasen med de tabeller som krävs baserat på hur modellerna ser ut. Sedan kan man hantera datan i webbapplikationen. Figur 4.2 Modellen för Events Kodexemplet i figur 4.2 resulterar i en tabell i databasen nämnd “Events” med följande utseende: id text category dateOfPublish personID När det senare görs en förfrågning mot webbtjänsten med HTTP kan det se ut som nedan. I detta fall efterfrågas webbtjänsten att skicka alla events. Förfrågningen görs mot webbtjänsten: 15 JSON-objekt kan då se ut som följande (se figur 4.3): Figur 4.3 Webbtjänstens svar på förfrågan “GET Events” För enkelhetens skull syns enbart två event-objekt i detta exempel, men i verkligheten hade en fullständig lista på alla events skickats som svar. På liknande sätt kan man göra en förfrågning mot databasen för att lista alla registrerade användare av nyhetsflödet. Förfrågningen görs mot webbtjänsten: 16 JSON-svaret blir då (se figur 4.4): Figur 4.4 Webbtjänstens svar på förfrågan “GET People” Även i detta fall visas enbart de två första svarsobjekten i exemplet för enkelhetens skull. Det finns även möjlighet att göra en GET-förfrågan på en specifik ID- eller mailadress: 4.4 Webbapplikation Webbapplikationen utvecklas efter att webbtjänsten har slutförts och opererar korrekt. Applikationens funktioner bygger på att tjänsten inte ändrar på sin utgående trafik. Om ändringar måste göras på trafik så måste ändringar även i applikationen göras på den delen som använder sig utav just den utgående trafiken från webbtjänsten. Applikationen är den vy som ska synas utåt och hanteras av användare. Därför är det viktigt att just applikationen innehåller en estetiskt tilltalande och enkel design. Kunden har fått ge sin åsikt om designen, och ändringar har gjorts därefter för att tillfredställa kundens önskemål. 17 4.4.1 Domain Domain är ett internt hjälpprojekt i webbapplikationen som innehåller alla logiska operationer och metoder. Eftersom en webbaserad applikation kan bli mycket omfattande underlättar en pålitlig och enkel struktur. Med Domain delas logik upp för sig och webbvy för sig. Detta gör det enklare för en utomstående att förstå och eventuellt vidareutvekla. I figur 4.5 innehåller Domain all logik, Webb innehåller vyer och förfrågningar till Domain, Service är webbtjänsten som gör förfrågningar mot databasen. Figur 4.5 Domain hjälp-projekt En användare gör en förfrågan till webbapplikationen, webbapplikationen frågar sedan Domain om svaret på denna förfrågan, Domain svarar och webbapplikationen levererar resultatet i sin vy för användaren. 4.5 Android-Applikationen Android-applikationen utvecklades i Android Studio och det bestämdes att den skulle ha ett minimum SDK av 8. SDK 8 valdes för att stödja ett så brett utbud av Android-enheter som möjligt. En användare loggar in i applikationen och får då tillgång till att läsa alla event, lägga upp nya event, hantera sina event och ta del av den allmänna topplistan, som då ger en representation av vilka som bidragit mest till eventlistan. Utvecklingen började med att skapa indexsidan, som består av en inloggningsfunktion. Inloggningsfunktionen går sedan vidare till de vyer som är av intresse för användaren. Mycket tid gick åt till att bekanta sig med utvecklingsmiljön. Många av applikationens funktioner bygger, precis som i webbapplikationen, på att ett fungerande API redan finns. Detta medförde att funktionerna inte behövde skapas i en viss ordning. 18 Utvecklingen skedde i ett flertal steg: ● ● ● ● ● ● Indexsida skapades. Eventlista skapades. Event kunde skapas av en användare. Toplista. Registrering. Redigering av befintlig angiven information. När presenteringen av data sker, oavsett plattform, hämtas datan från webbtjänsten i form av JSON-objekt. Figur 4.6 visar ett utdrag för hur ett HTTP-Request i Android-applikationen kan anropas. Figur 4.6 - En java klass i Android-applikationen, en metod för att hämta data. 4.6 Raspberry Pi och notifikationer När ett meddelande publiceras lyser en LED-slinga på kontoret för att signalera att ett nytt meddelande har skrivits. LED-slingan lyser olika beroende på vilken kategori meddelandet tillhör. Detta sker med hjälp av en Raspberry Pi och en BlinkyTape. Enheten är uppkopplad till Internet via kontorets WiFi och har ett lyssnarprogram som körs i bakgrunden. Varje gång ett meddelande publiceras skickas ett meddelande från Android-applikationen till Raspberry Pi-datorn på kontoret för att initiera LED-slingan. Meddelandet från Android-applikationen informerar Raspberry Pi:n om vilken kategori meddelandet tillhör varefter en ljussekvens lyser på LED-slingan baserat på vilken kategori som valdes. 4.6.1 Lyssnarprogrammet för notifikationer Lyssnarprogrammets funktion är att lyssna efter meddelanden och tända ljusslingan då ett nytt meddelande tas emot. Det är skrivet i Python 2.7.9. Python valdes då BlinkyTape har 19 förbyggda bibliotek för Python som delvis kunde användas för att effektivisera programmeringen. UDP valdes som kommunikationsprotokoll [17]. Detta beror på att UDP är ett protokoll som är effektivt att implementera. I det osannolika fall att ett UDP-paket inte skulle nå lyssnarprogrammet innebär detta enbart att ljusslingan inte kommer lysa för det meddelandet. Det kommer därefter att fungera som vanligt igen. Eftersom BlinkyTape är en LED-slinga med 60 lysdioder skickas kommandon till varje lysdiod. För varje animation som visas går programmet igenom varje enskild lysdiod för att meddela hur den ska lysa. Lyssnarprogrammets första läge är att lyssna efter meddelanden. Om ett meddelande tas emot läses det av för att bekräfta om det motsvarar en av de meddelanden som initierar en animation på ljusslingan. Figur 4.7 visar en förenklad version av koden för avlyssningen av meddelanden. Figur 4.7 - utdrag ur koden för att ta emot UDP paket på Raspberry Pi UDP_IP är i detta fall värddatorns IP. UDP_PORT anger vilken port programmet ska lyssna efter UDP-meddelanden på. Om till exempel meddelandet “RED” skickas till lyssnarprogrammet kommer det att initiera en ljussekvens på ljusslingan i röd färg. RGB-koder skickas till varje lysdiod (i detta fallet mörkröd till 3 lysdioder och därefter ljusröd till 3 lysdioder tills alla 60 lysdioder har fått en färginstruktion). När varje lysdiod har fått en startfärg skickas en puls varje 8 millisekunder då programmet “flyttar” färgerna en lysdiod framåt i ledet. Lysdiodens färg i slutet av slingan skickas till den första lysdioden. 20 Figur 4.8 visar ett utdrag ur lyssnarprogrammet för hantering av den röda animationen. Figur 4.8 - koden för att tända ljusslingan i rött Sammantaget ger detta ett intryck av en animation där lysdioderna snabbt “rör” sig igenom slingan. Efter att ljusslingan har lyst i ca 7 sekunder återgår den till att vara släckt tills ett nytt meddelande kommer. 21 5. SLUTSATS 5.1 Databas Databasen utvecklades utifrån vad Sigma angav i sin ursprungliga kravspecifikation - en tabell för användare och en tabell för inläggen. Databasen är skapad genom Visual Studios “Code First” metod och det innebär att den är mer eller mindre autogenererad utifrån de modeller som har ställts upp (se figur 4.2 för modell-exempel). På begäran från Sigma önskades att databasens logik ska vara i C# och inte SQL, vilket medför att logiken och hanteringen av data sker i webbtjänsten. All data sparas som textsträngar (nvarchar i databasen). 5.2 Webbtjänst Webbtjänsten innehåller logiken för att läsa och skriva i databasen. All trafik från användarna passerar webbtjänsten. Tjänsten som utvecklades har stöd för CRUD-operationer (Create, Read, Update, Delete) på både användare och inlägg. Tjänsten innehåller även extra regler, regler som databasen inte tar hänsyn till, vilka begränsar möjligheten att ändra vissa attribut. Den största anledningen till detta är att inte helt låsa fast sig i formateringen av datatrafik. En administratör kanske vill lägga in oformaterad data. I dagsläget finns det inget gränssnitt för en eventuell administratör, däremot kan det läggas in manuellt direkt i koden. Webbtjänsten tillhör helt Back-End och har ingen tydlig interaktiv funktionalitet med en användare. Den returnerar JSON-objekt till alla som skickar HTTP-förfrågningar vilket kan vara en säkerhetsrisk. MD5-kryptering har använts för att undvika detta. Därmed sparas inte den känsligaste datan i klartext. 5.3 Webbapplikation Webbapplikationen är den som ändrats mest under utvecklingens gång. Eftersom detta är det som användaren ser och det är den del som innehåller mest kod, är det ytterst viktigt att både kod och design är väl genomtänkt. Det visade sig också vara den del vars funktioner var svårast att implementera. 22 Figur 5.1 - Eventlistan i webbmiljö Resultatet av webbmiljön är, i dess funktionella aspekt, lyckad. Alla funktioner som efterfrågades är utvecklade och implementerade. Designen av webbmiljön uppfyllde inte riktigt de önskemål som fanns för att få ett tilltalande utseende som skulle locka de anställda på Sigma att ta del av det nya nyhetsflödet. Det saknas ett par vanliga funktioner till webbmiljön, bland annat inloggningsfunktion, möjlighet att ändra givna uppgifter, skapa eller ta bort nytt event och detaljerad informationssida om varje event. Dessa delar är några av de funktioner och tillägg som hade varit önskvärda. Men sammantaget blev det funktionell presentering av nyhetsflöden med stora möjligheter för förbättring och utbyggnad. 5.4 Android-Applikation Applikationen till Android har utvecklats med ett minimum SDK-version av 8. Detta gör att den kan köras på i princip alla Android-enheter som finns idag. Det gör den dock lite svårare att förstå kodmässigt. Detta beror på att många hjälpmetoder som finns idag inte kunde användas. Figur 5.2 Inloggning och nyhetsflöde för Android 23 Fullt fungerande funktioner skapades för applikationen, men på grund av tidsbrist kan dessa funktioner vara mindre optimalt kodade. Detta kan påverka den optimala prestandan på hur snabbt och smidigt applikationen kan köras. Resultatet med Android blev mer eller mindre som väntat - en fungerande, enkel applikation med stöd för i princip alla Android-enheter ute på marknaden idag. Den kan styras överallt där det finns internetuppkoppling. Den är enkel att använda med givna standardfraser. Med ett par enkla knapptryckningar kan hela företaget ta del av nyhetsmeddelandet. Tyvärr utvecklades inte något stöd för iOS eller något annat mobilt operativsystem, på grund av tidsbrist. 5.5 Raspberry Pi Målet med att använda Raspberry Pi var att kunna visa en tydlig notifikation på kontoret då ett nytt meddelande har skrivits. Detta görs med hjälp av en LED-slinga kopplad till Raspberry Pi-enheten. När ett meddelande publiceras från Android-applikationen framför LED-slingan en ljussekvens. Dessa mål har mötts. Raspberry Pi initierar LED-slingan så fort ett meddelande har publicerats via Android-applikationen. LED-slingan lyser i olika mönster och färger beroende på vilken kategori meddelandet tillhör. Raspberry Pi lämpar sig utmärkt för hantering av notifikationer. På grund av dess användarvänlighet är det lätt att komma igång och snabbt att utveckla sina applikationer. Det finns många verktyg och resurser för att bygga projekt. Efter några veckor kraschade minneskortet till Raspberry Pi-enheten, men tack vare att det är enkelt och smidigt att använda Raspberry Pi var allt återställt och fungerande inom några timmar. 5.6 Hållbarhetsaspekt Nyhetsflödet med Raspberry Pi är ett verktyg som kan användas internt för att hålla sig uppdaterad, informerad och motiverad kring de miljömässiga ansträngningar man gör på Sigma. Genom nyhetsflödet kan man informera de anställda om nya och pågående initiativ för att främja miljön. Det är ett verktyg som kan användas för att engagera de anställda i miljöarbetet och strävan mot en hållbar utveckling. 5.7 Planering Planering med hjälp av Scrum, Trello och tvåveckors Sprints har åskådliggjort arbetet och konkretiserat vad som behöver göras och när. Detta har varit en viktig del i att få rätt arbetsuppgifter gjorda och i rätt tid. Tack vare en väl utarbetat planering har det alltid framgått hur väl utvecklingen går och om arbetet utförs i tillräckligt hög takt. Detta har lett till ökat fokus på rätt områden, vilket har visat sig vara oerhört viktigt. Därmed värdesätts planeringsarbetet mycket högt. 24 Tack vare tvåveckors Sprint-möten har kontakten med kunden underhållits och eventuella nya önskemål kunde tas om hand direkt. På grund av den kontinuerliga kommunikationen har meningsskiljaktigheter kunnat lösas innan eventuella problem har blivit för stora. 5.8 Helhetsintryck Sigma uttryckte en önskan om fokus på funktionalitet. Detta har lyckats, men har lett till att betydligt mindre tid har kunnat läggas på gränssnittet och utseendet på applikationerna. Sett till helhet har dock den funktionalitet som önskades uppfyllts. 5.9 Fortsatt arbete Utbyggnaden och potentialen för fortsatt arbete är stor. Sigma ämnar att fortsätta detta arbete. Främsta fokusområden är bland annat en applikation för iOS, att förbättra grafikdesignen och att implementera användarlogin. 25 6. REFERENSER [1] Interaction Design Foundation. 2016. Mock-ups. [ONLINE] Available at: https://www.interaction-design.org/literature/book/the-glossary-of-human-computer-interacti on/mock-ups. [Accessed 1 April 2016]. [2] Ken Schwaber, Jeff Sutherland. 2013. The Scrum Guide. [ONLINE] Available at: http://www.scrumguides.org/docs/scrumguide/v1/scrum-guide-us.pdf. [Accessed 30 March 2016]. [3] Mozilla Developer Network. 2015. CSS Developer Guide. [ONLINE] Available at: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS. [Accessed 15 April 2016]. [4] Garcia-Molina H., Ullman J.D., Widom J., 2008. Database Systems: The Complete Book, Second Edition [5] Microsoft ASP.NET. 2016. MVC ASP.NET Documentation. [ONLINE] Available at: https://docs.asp.net/en/latest/mvc/index.html. [Accessed 1 April 2016]. [6] Microsoft Developer Network. 2016. Language-Integrated Query (LINQ) (C#). [ONLINE] Available at:https://msdn.microsoft.com/en-us/library/mt693024.aspx. [Accessed 12 April 2016]. [7] BlinkinLabs. 2016. BlinkyTape - BlinkinLabs. [ONLINE] Available at: http://blinkinlabs.com/blinkytape/. [Accessed 10 April 2016]. [8] Raspberry Pi Foundation. 2016. What is a Raspberry Pi?. [ONLINE] Available at:https://www.raspberrypi.org/help/what-is-a-raspberry-pi/. [Accessed 3 May 2016]. [9] Bootstrap. 2016. Bootstrap - The world's most popular mobile-first and responsive front-end framework. [ONLINE] Available at: https://getbootstrap.com/. [Accessed 17 April 2016]. [10] Trello. 2016. Trello. [ONLINE] Available at: https://trello.com/. [Accessed 3 April 2016]. [11] Postman. 2016. Postman | Supercharge your API workflow. [ONLINE] Available at:https://www.getpostman.com/. [Accessed 4 April 2016]. [12] Git. 2016. Git. [ONLINE] Available at: https://git-scm.com/. [Accessed 12 April 2016]. [13] Entity Framework Tutorial. 2016. What is Code-First?. [ONLINE] Available at:http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx. [Accessed 1 April 2016]. [14] ASP.NET. 2016. Get started with ASP.NET Web Sites | The ASP.NET Site. [ONLINE] Available at:https://www.asp.net/get-started/websites. [Accessed 31 March 2016]. [15] Dot Net Tricks. 2013. What is Web API and why to use it?. [ONLINE] Available at: http://www.dotnet-tricks.com/Tutorial/webapi/VG9K040413-What-is-Web-API-and-why-touse-it-?.html. [Accessed 31 March 2016]. [16] Agile Methodology. 2016. The Agile Movement. [ONLINE] Available at: http://agilemethodology.org/. [Accessed 4 April 2016]. [17] Microsoft TechNet. 2016. User Datagram Protocol (UDP): TCP/IP. [ONLINE] Available at:https://technet.microsoft.com/sv-se/library/cc785220(v=ws.10).aspx. [Accessed 18 April 2016]. 26
© Copyright 2024