Chruntch! Chruntch!- et nettbasert turneringsvektøy Hovedprosjekt ved institutt for informasjonsteknologi Høgskolen i Oslo og Akershus våren 2015 Prosjekt nummer 36 Morten Langeland Wedum s182855 Dataingeniør 1 PROSJEKT NR. 36 Studieprogram: Informasjonsteknologi Postadresse: Postboks 4 St. Olavs plass, 0130 Oslo Besøksadresse: Holbergs plass, Oslo TILGJENGELIGHET Offentlig BACHELORPROSJEKT Telefon: 22 45 32 00 Telefaks: 22 45 32 05 HOVEDPROSJEKTETS TITTEL DATO Cruntch! –et nettbasert turneringsverktøy 26.05.2015 ANTALL SIDER / BILAG 82 PROSJEKTDELTAKERE INTERN VEILEDER Morten Langeland Wedum (s182855), Dataingeniør, [email protected] Thor E. Hasle OPPDRAGSGIVER KONTAKTPERSON Kyrre Begnum SAMMENDRAG Nettbasert turneringsvektøy bygget med Node.js og Express.js 3 STIKKORD Node.js Express.js 2 MongoDB Forord Denne rapporten beskriver planlegging av utviklingsprosessen og gjennomføring av prosjektet for oppgradering og modernisering av web-applikasjonen «Chruntch!». Prosjektet er hovedprosjekt i bachelorstudium i Dataingeniør ved Høgskolen i Oslo og Akershus (HIOA), våren 2015. Oppdragsgiver for prosjektet er førsteamanuensis Kyrre Begnum, Institutt for Informasjonsteknologi ved HIOA. Han har utviklet en algoritme med en prototype for en webapplikasjon som kan kartlegge ulike interessenters preferanser for et antall alternativer. Prototypen er operativ, men det er ønskelig å øke funksjonaliteten. Oppgaven går ut på å forbedre prototypen ved hjelp av moderne teknologi som Node.js og MongoDB/CouchDB og andre Linux-baserte plattformer. I denne oppgaven er det lagt mest vekt på Node.js delen som består av webserver, applikasjonslag/businesslag og websider. Oppgaven skulle i utgangspunktet løses i en gruppe på fire. Da dette ikke lot seg gjennomføre innen tidsrammen for oppgaven, leverer studenten derfor en egen oppgave med hovedvekt på brukergrensesnittet og presentasjon av statistikk. Rapporten har fire hoveddeler: Analyse Teori, teknologi og metode Implementering Evaluering av arbeidet og forslag til videre arbeid 3 Jeg takker min veileder Thor E. Hasle for nyttige innspill, oppmuntring og god hjelp. Jeg vil også takke oppdragsgiver Kyrre Begnum for et morsomt og lærerikt prosjekt og en muliggjørende veiledning. Da det ble klart at dette måtte bli en individuell oppgave, arrangerte jeg en idédugnad i nettverket mitt for å få innspill til det videre arbeid. Jeg vil takke Ole Langeland, Petter Wedum og Astrid Langeland for inspirasjon og at de delte av sin erfaring fra hhv. FMC Technology, Google og Innovasjon Norge. 4 Innhold Forord ............................................................................................................................................................... 3 Innhold .............................................................................................................................................................5 1. Innledning.................................................................................................................................................... 9 1.1 Mål .............................................................................................................................................................. 10 1.1.1 Formål ...................................................................................................................................................... 10 1.1.2 Resultatmål ............................................................................................................................................. 10 1.1.3 Læringsmål ............................................................................................................................................. 10 1.2 Hovedfunksjoner for systemet ................................................................................................................ 12 2.Teori ............................................................................................................................................................. 12 2.1 Turneringer ............................................................................................................................................... 12 2.1.1 Knock out prinsippet ............................................................................................................................. 13 2.1.3 Single-eliminasjons turnering .............................................................................................................. 13 2.1.3 Dobbel-eliminasjons turnering ............................................................................................................ 14 2.1.4 All-play-all ............................................................................................................................................. 15 2.2 Teknologi.................................................................................................................................................. 15 2.2.1 Linux operativsystem ............................................................................................................................ 16 2.2.2 Apache Webserver ................................................................................................................................ 16 2.2.3 HTML, HTTP, CSS og nettlesere ......................................................................................................... 17 2.2.4 Programmeringsspråk .......................................................................................................................... 18 2.2.4.1 PHP ...................................................................................................................................................... 18 2.2.4.2 JavaScript ............................................................................................................................................ 18 2.2.5 Twitter Bootstrap .................................................................................................................................. 18 2.2.6 Rammeverk for webapplikasjonen ..................................................................................................... 19 2.2.6.1 Node.js og Express.js .......................................................................................................................... 19 2.2.7 API ......................................................................................................................................................... 20 2.2.8 Databaser ............................................................................................................................................. 20 2.2.8.1 Relasjonsdatabaser ............................................................................................................................ 20 2.2.8.2 Dokumentdatabaser (NoSQL-databaser) ....................................................................................... 21 5 2.2.8.3 MongoDB ........................................................................................................................................... 23 2.2.8.4 CouchDB ............................................................................................................................................ 23 2.2.8.5 Relasjonsdatabaser vs. dokumentdatabaser .................................................................................. 24 2.2.8.6 MongoDB vs CouchDB .................................................................................................................... 24 2.2.9 MVC ...................................................................................................................................................... 24 3.Metoder ....................................................................................................................................................... 25 3.1 Prosjektstyring .......................................................................................................................................... 25 3.1.1 Samarbeidskontrakt ............................................................................................................................... 25 3.1.2 Prosjektdagbok ...................................................................................................................................... 25 3.1.3 Arbeidsplan ........................................................................................................................................... 26 3.1.4 Trello ..................................................................................................................................................... 26 3.1.5 Risikomatrise ........................................................................................................................................ 28 3.1.6 Fossefall versus Smidig utvikling ........................................................................................................ 28 3.1.7 Git .......................................................................................................................................................... 29 3.1.8 Ide dugnad .............................................................................................................................................30 3.2 Analysemetoder .......................................................................................................................................30 3.2.1 Business case ..........................................................................................................................................30 3.2.2 Hvordan intervjue kunder/brukere? .................................................................................................. 31 3.2.3 User story ............................................................................................................................................... 32 3.2.4 Use case ................................................................................................................................................. 32 3.2.5 ER- modellering .................................................................................................................................... 32 3.3 Verktøy ..................................................................................................................................................... 33 3.4 Kommunikasjon ......................................................................................................................................34 3.4.1 Prosjektdokumentasjon ........................................................................................................................34 4. Analyse .......................................................................................................................................................34 4.1 Business case ............................................................................................................................................ 35 4.1.1 Mediamarkedet ...................................................................................................................................... 35 4.1.2 Forskning .............................................................................................................................................. 39 4.1.3 Kundebestemt produktutvikling ......................................................................................................... 41 4.1.4 Mentometerknapper ............................................................................................................................ 42 4.1.5 Beslutningsstøtte ...................................................................................................................................43 4.2 Analyse av business case for media markedet ......................................................................................43 6 4.3 User story og use case ............................................................................................................................ 44 4.3.1 Verktøy for vennegjenger .................................................................................................................... 45 4.3.2 Verktøy for Melodi Grand Prix ........................................................................................................... 45 4.4 Utforming av funksjons spesifikasjon .................................................................................................. 47 4.4.1 Utforming av kravspesifikasjon .......................................................................................................... 47 4.4.1.1 Universell utforming ......................................................................................................................... 47 4.4.1.2 Kravspesifikasjon .............................................................................................................................. 48 5. Implementering ........................................................................................................................................ 50 5.1 Database .................................................................................................................................................... 51 5.2 Filstruktur ................................................................................................................................................ 51 5.3 Utforming ................................................................................................................................................. 51 5.4 Design ....................................................................................................................................................... 51 5.5 Testing ...................................................................................................................................................... 52 5.6 Skisser ....................................................................................................................................................... 52 5.7 Skjermbilder ............................................................................................................................................. 55 6. Evaluering av arbeidet .............................................................................................................................. 61 6.1 Vurdering av målrealisering.................................................................................................................... 61 6.1.1 Formål og resultatmål ........................................................................................................................... 61 6.1.2 Læringsmål ............................................................................................................................................ 61 6.2 Evaluering av og læring om samarbeid ................................................................................................ 62 6.2.1 Samarbeid i gruppe ............................................................................................................................63 6.2.2 Samarbeid med oppdragsgiver og veileder på HIOA .......................................................................63 6.2.3 Ide dugnad med eksterne ................................................................................................................... 64 6.3 Vurdering av produktutviklings prosessen .......................................................................................... 64 6.3.1 Designprosessen ................................................................................................................................... 64 6.3.2 Turneringsoppsettet ............................................................................................................................ 65 7. Konklusjon og videre arbeid ................................................................................................................... 66 Kilder ............................................................................................................................................................. 68 Vedlegg A. Arbeidsplan ................................................................................................................................ 71 Vedlegg B. Risikomatrise .............................................................................................................................. 75 Vedlegg C. Prosjektskisse .............................................................................................................................77 Vedlegg D. Forprosjekt rapport .................................................................................................................. 79 7 1. Innledning Cruntch! er et utviklingsprosjekt med mål om å lage et web-basert verktøy som skal hjelpe grupper med brukere med å velge ut hva de synes er viktigst av et utvalg alternativer. Denne kartleggingen av preferanser utføres ved at de aktuelle alternativene registreres på en nettside med en påfølgende avstemmingsprosess. Deltakerene i rangeringen, enkeltpersoner eller grupper av personer, prioriterer hvilket av de to alternativene, som de får presentert per omgang, til å være mest viktig eller riktig for den enkelte. Prioritering av alternativer gjentas etter et cup system helt til det er ett alternativ som står igjen som en vinner eller klart foretrukket alternativ. Oppdragsgiver Kyrre Begnum, Institutt for Informasjonsteknologi, HIOA har utviklet selve algoritmen for gjennomføringen av slike spørrerunder. En prototype av Cruntch! er ferdig og demonstrerer funksjonalitet. I dette prosjektet skal prototypen av Cruntch!, som er skrevet i PHP, videreutvikles. Målet er å bedre brukergrensesnittet og øke skalerbarheten opp til flere tusen brukere. Videreutviklingen ønskes gjennomført på Node.js, MongoDB/CouchDB og andre moderne Linux-baserte plattformer. I denne oppgaven er det fokusert på å utvikle front-end og spesielt er det lagt vekt på å arbeide med hvordan turneringsresultater kan presenteres og et utkast til registrering og stemming er utviklet. Det er utarbeidet design kriterier for både småskala og storskala turneringer, men kriteriene er implementert kun for småskala turneringer. Det er implementert funksjonelle nettsider som kjører mot en mock-up database. Ved oppstart av prosjektet var det vanskelig å forstå behovet for enten individuelt eller kollektivt å sammenligne og rangere ulike alternativer. Å forstå den praktiske nytten av en slik algoritme var nødvendig for å kunne designe en god, videreutviklet prototype. Det er derfor laget et business case i rapporten. Dette avsnittet har blitt mer omfattende enn planlagt fordi avstemminger brukes i mye større grad enn antatt i utgangspunktet. Det ble derfor spennende å få innblikk i de kommersielle mulighetene 8 for prosjektet og knytte dette opp mot undervisningen i entreprenørskap og innovasjon. Det var også behov for å forstå fundamentet for algoritmen som beskriver en turnering. Ulike turnerings former og deres funksjon er derfor beskrevet i kapittelet om teori. Rapporten forutsetter noe grunnleggende datakunnskaper av leseren. 1.1 Mål 1.1.1 Formål Formålet med videreutvikling av prototypen Cruntch! er å integrere algoritmen i en moderne og skalerbar web-applikasjon med sikte på en kommersialisering av konseptet. 1.1.2 Resultatmål Oppdragsgiver ønsker en oppgradert versjon av sin første prototype av en algoritme for rangering av alternativer. Den neste versjonen av prototypen Cruntch! skal kunne representere en fullstendig web applikasjon med en rask og brukervennlig nettside og en skalerbar database som kan håndtere mange tusen stemmegivere. 1.1.3 Læringsmål Formålet med bachelor oppgaven er å simulere oppgaver eller prosjekter fra arbeidslivet. Det betyr at man må tilegne seg kunnskap om ny og moderne teknologi og lære seg å implementere dette nye sammen med det andre man har lært ved Høgskolen de tre siste årene. Helt konkret vil dette bl.a. vises ved at jeg har lært å operere innenfor rammeverket Node.js og å bruke programmeringsspråket JavaScript som det ikke har vært undervisning i. 9 Det har vært et mål å bruke kunnskapen fra studiet som også har omfattet entreprenørskap og innovativ virksomhet. Det er derfor utviklet et business case for Cruntch! for å kunne vise noen forretningsmessige muligheter og for å bruke denne kunnskapen inn i design prosessen. Et annet relevant punkt er planlegging. Oppgaven er veldig omfattende og det vil derfor være viktig å prøve og planlegge så godt man kan slik at prosjektet ikke stopper opp eller at man plutselig finner ut at det er altfor lite tid igjen. Dette er en læringsprosess og sannsynligvis vil prosjektet ikke gå helt som planlagt, men dette er som oftest også tilfelle i arbeidslivet. Det er et læringsmål å kunne forholde seg til uforutsette hindringer og å kunne finne relevante løsninger. Omfattende prosjekter krever samarbeid mellom flere. Uansett om oppgaven løses i arbeidslivet eller i en studiesituasjon må fordeling av arbeidsoppgaver, fordeling av ansvarsområder (gruppeleder, referent etc.), koordinering og fremdrift være avklart og fungere godt i gruppen. Det er et læringsmål å få innsikt i gruppedynamikk og egen og andres rolle i gruppeprosesser. Et så omfattende prosjekt vil også kreve god dokumentasjon. Man må kunne gjøre rede for hva som har blitt gjort, hvorfor det har blitt gjort og hvordan det har blitt gjort for ettertiden slik at resultatene kan etterprøves og videreutvikles. Det er ett av læringsmålene å lage en god rapport. 10 1.2 Hovedfunksjoner for systemet Følgende hovedspesifikasjoner er utgangspunkt for oppgaven: Turneringens administrator skal kunne sette opp sin egen turnering Turneringen skal kunne gjennomføres ved hjelp av email og mobiltelefon Deltagerene skal kunne avgi stemmer Et alternativ/en vinner skal bli kåret Statistikk skal vises for alle turneringer Siden skal være universelt utformet Systemet skal være skalerbart 2.Teori Fundamentet for Cruntch! er en algoritme som beskriver et turneringsoppsett. For å få innsikt i grunnlaget for algoritmen er det i det følgende beskrevet prinsippene for ulike turneringer. 2.1 Turneringer Turneringer er en serie av konkurranser med et antall deltakere som konkurrerer mot hverandre. Konkurrenten som fullfører siste runde med best resultat, kåres som vinner. En enkelt kamp i turneringen kalles også for en match, tie eller et heat. Turneringen kan bestå av mange kamper mellom deltakerne i ulike oppsett som en cup eller en serie. Turneringer arrangeres vanligst innenfor lagidretter som fotball, men også innenfor individuelle idrettsgrener som tennis og sjakk. Pokerturneringer og bridgeturneringer er andre godt kjente konkurranser innenfor spill. Målet med turneringene er å måle styrker, kåre vinnere og rangere deltakerne etter ferdigheter. 11 Utgangspunktet for en turnering er å klargjøre hva slags turneringsform som gjennomføres, hvilke regler og rammer som gjelder. Hvem kan delta, hvor lenge skal kampene vare, hva som skjer hvis noen får like mange poeng, unntaksregler etc.. En oversikt over alle kampene og hvilke lag som spiller mot hvem i hver runde er grunnlaget for gjennomføringen av en turnering. Dette kalles et kampoppsett, en turneringstabell eller en turneringsmatrise. Det arrangeres ulike varianter av turneringer basert på spesifikke filosofier. I det videre er prinsippene for de som er relevante for å forstå den grunnleggende algoritmen i dette prosjektet beskrevet: 2.1.1 Knock out prinsippet En knockout turnering er delt inn i suksessive runder hvor hver deltaker spiller i minst en kamp per runde. Den deltakeren som vinner kampen, går videre til neste runde. Antall deltakere minsker for hver runde fordi taperne går ut av turneringen. Vinneren i den siste runden, også kalt finalen vinner hele turneringen. 2.1.3 Single-eliminasjons turnering En single-elimination turnering, som også kalles en knockout eller sudden death turnering, er en type elimineringsturnering. Her går bare vinneren i en konkurranse mellom to deltagere videre. Alle andre deltagere er eliminert fra turneringen. Dette sikrer at en vinner kan kåres med et minimum av en mot en kamper. Det er ikke alltid at taperne ikke får fortsette i turneringen. I noen turneringer, som kalles klassifiserings konkurranser, konkurerer taperne om rangeringer av tredje-, fjerde plass osv. i semifinaler, kvartfinaler opp til åttendedels finaler. Ved enda større antall deltagere arrangeres det før konkurranser eller kamper for å kunne såkalt “seede” konkurrentene. Seeding brukes for at du skal komme i rett startpulje, sammen med de på som er på samme prestasjonsnivå som deg. Dette skaper bedre flyt og en bedre opplevelse for alle deltagere, uansett nivå i turneringen. 12 Turnerings matrisen for singel-eliminasjon er vist i figur 1: Figur 1: Turneringsmatrise for singel-eliminasjons oppsett 2.1.3 Dobbel-eliminasjons turnering Algoritmen som ligger til grunn for den utviklede Cruntch! prototypen er basert på knockout turneringsprinsippet kalt double-elimination. Denne turneringen består av to turneringer, en overordnet (winners bracket) og en underordnet (losers bracket). Alle spillerne starter i winners bracket, de som taper her havner i loser bracket hvor de får en sjanse til, taper de her er de eliminert fra hele turneringen. Etter første iterasjon vil loser bracket kampene bestå av en som har gått videre fra losers bracket og en som har tapt i winners bracket. Etter at det har blitt kåret en vinner av winners- og losersbracket vil de to møtes i en siste kamp for å bestemme hvem som vinner hele turneringen. Dobbel eliminasjons turneringer er godt egnet for viktige mesterskap hvor resultatene må være mindre tilfeldige og mer troverdige enn de av en enkelt knock-out turnering hvor rene uhell kan være det utslagsgivende. Den grunnleggende ideen i dobbel-elimineringen er at enhver spiller som taper to kamper, ikke fortjener å bli mester. Dette er ansett for å være det klareste mesterskaps kriteriet som er tilgjengelig. 13 Turneringsmatrisen for dobbel-eliminasjon er vist i figur 2: Figur 2: Turneringsmatrise for en dobbel-eliminasjons turnering. 2.1.4 All-play-all For helhetens skyld nevnes også en annen svært vanlig turneringsform; en round-robin turnering eller all-play-all turnering. Dette er et turnerings oppsett hvor hver deltager møter alle de andre konkurrentene i en serie. Her kåres vinneren basert på de poengene de har vunnet i hver kamp. I for eksempel fotball får vinneren i en kamp 3 poeng og taperen 0 poeng, ved uavgjort får hvert lag 1 poeng. Poengene fra hver kamp summeres gjennom hele serien. Dette er prinsipielt forskjellig fra eliminasjonsturneringene. 2.2 Teknologi Oppdragsgiver har allerede utviklet en prototype skrevet i programmeringsspråket PHP. Han ønsker seg imidlertid videre utvikling på Node.js, MongoDB eller CouchDB og andre moderne, Linux-baserte plattformer. 14 Cruntch! som web-applikasjon består av front-end, back-end og database. Front end presenterer data for bruker og back end er en mediator som tilgjengeliggjør dataene for presentasjon og også overfører data fra front-end til databasen for lagring. For å kunne kjøre en web-applikasjon er det nødvendig med en web-server. Enkelt sagt er en web-server en PC som svarer på HTTP forespørsler. Serveren kjører på et operativsystem, en web-server programvare, en database og et programmeringsspråk for å prosessere dynamiske forespørsler. I 2013 var det vanlig med en LAMP Software Stack. LAMP referer til kombinasjonen av Linux operativ system, Apache web-server, MySQL-database, og PHP som programmeringsspråk. I det følgende er de viktigste teknologiene som ble brukt for å videreutvikle Cruntch! kort beskrevet. I noen tilfeller beskrives også teknologi som er vurdert anvendt, spesielt MySQL-database og PHP som i denne oppgaven erstattes med den moderne programstacken for web-applikasjoner MEAN(MongoDB, Express.js, Angular.js og Node.js) og JavaScript som blir brukt som programmeringsspråk i oppgaven. 2.2.1 Linux operativsystem Operativsystemet er et bindeledd mellom maskinvaren og applikasjonene i systemet. Linux er et operativsystem i åpen kildekode. Det blir brukt i alt fra PCer til superdatamaskiner og mobiltelefoner. Mange analytikere fremhever leverandøruavhengighet, lave realiseringskostnader, trygghet, tilgjengelighet og stabilitet som dette operativsystemets styrker i forhold til de proprietære systemene fra f.eks. Windows og UNIX. 2.2.2 Apache Webserver Apache HTTP Server er verdens mest brukte web-server programvare og hadde i 2013 en markedsandel på 54,2%. Apache har spilt en nøkkelrolle for utviklingen av internett. Apache er en gratis og åpen kilde-kode programvare og det er et stort offentlig bibliotek tilgjengelig for Apache add-ons. 15 2.2.3 HTML, HTTP, CSS og nettlesere HTML (HyperText Markup Language, hypertekstmarkeringsspråk) er fundamentet for å utvikle en web applikasjon som Cruntch!. HTML er et markeringsspråk for formatering av nettsider og innhold som vises i nettlesere. HTML bruker tagger til å formatere innholdet. Taggene gir det innholdet som er inne i taggen forskjellige egenskaper avhengig av hvilken tag som blir brukt f.eks. gir taggen <h1>(som er en tag for overskrifter) innholdet større og fet skrift. En annen viktig del er hypertekst som gjør det enkelt å referere til noe på samme dokument eller til et annet dokument. HTML ble opprinnelig definert i 1989 av Tim Berners-Lee og Robert Caillau. Protokollen er videreutviklet og er nå en internasjonal standard (ISO/IEC15445:2000.). HTMLs grammatiske struktur er en internasjonal standard for tekstformatering (ISO 8879). CSS (Cascading Style Sheets, gjennomgående stilark) er et språk som brukes til å definere utseende på filer skrevet i HTML eller XML. Dette gjøres ved at man gir ulike attributter til de forskjellige HTML-taggene. Man kan f.eks. sette et bakgrunnsbilde til body-taggen eller endre skriftfargen til <h1>. Endringer kan gjøres på HTML-taggene eller så kan man definere egne områder med <div id> eller <div class>. Stilarket lages gjerne i et eget dokument som ender på .css og linkes til med <script>-taggen. En CSS fil kan brukes av et ubegrenset antall dokumenter. HTTP (Hypertext Transfer Protocol, hypertekstoverføringsprotokoll), er en protokoll for utveksling av informasjon over nettet. HTTP håndterer forespørsler og respons for klienter og tjenere der klienter er nettlesere og tjenere er servere. HTTP bruker primært TCP til overføring av pakker, men kan også bruke UDP. 16 Nettlesere (web browser) er programmer som oversetter web-dokumenter, som regel HTML, til et mer leselig format. Nettlesere har tre hovedfunksjoner: hente data, vise data og interaksjon som f.eks. linker og knapper. De mest populære nettleserne er Explorer, Chrome, Firefox og Opera. Nettleseren går igjennom HTML-dokumentet og finner hva som skal vises og hvor på siden det skal være. 2.2.4 Programmeringsspråk I det følgende beskrives PHP, det opprinnelige programmeringsspråket for Cruntch! og JavaScript som denne nye versjonen av Cruntch! er skrevet i. 2.2.4.1 PHP PHP er verdens mest populære språk når det kommer til utvikling av web-applikasjoner og brukes av flere av de største nettstedene i verden. En grunn til at PHP er så populært er at det er et robust språk som er enkelt å lære og kan kjøre med noen feil. PHP støtter også de fleste teknologier innenfor databaser, datautveksling og tekstbehandling. 2.2.4.2 JavaScript JavaScript er et skriptspråk som er best kjent for å tilføre dynamiske elementer til nettsider. Sammen med øvrig innhold på nettsiden (hovedsakelig HTML) sendes det kode innenfor et <script>-tagpar, som kjøres lokalt i nettleseren, automatisk eller som reaksjon på brukervalg på siden. Vanlige bruksområder er å bytte ut, fjerne eller legge inn tekst avhengig av hvor på siden du klikker, å skifte fokus i et skjema, og å åpne pop-up-vinduer. 2.2.5 Twitter Bootstrap Twitter Bootstrap er en samling verktøy for utvikling av web-sider og inneholder en rekke maler for HTML og CSS som knapper, forms og navigasjon. Bootstrap skiller seg fra CSS ved at man skriver koden rett inn i HTML-dokumentet. Bootstrap benytter 17 seg av et rutenett som gjør det enkelt å dele opp skjermen. Man kan ha 12 ruter på samme rad og en rad defineres av <div class = “row”> og ruter lages ved <div class = “spanx”> hvor x er et tall mellom 1-12, 1 gir de minste rutene som er 1/12 av bredden til skjermen mens 12 gir den største som dekker hele bredden av skjermen. 2.2.6 Rammeverk for webapplikasjonen Ønskene fra oppdragsgiver var at applikasjonen Cruntch! skulle være rask og at den skulle kunne håndtere mange samtidige brukere. Etter forslag fra oppdragsgiver falt valget på Express.js som er det mest populære Node.js rammeverket. 2.2.6.1 Node.js og Express.js Node.js er et open source, multi-platform rammeverk for webutvikling. Node.js er et relativt nytt rammeverk og ble utviklet i 2009 for Linux og i 2011 for Windows. Node.js brukes i hovedsak til å lage nettløsninger som webservere. Node ligner litt på PHP, men den største forskjellen er at PHP er et blocking språk, som betyr at systemet må vente på at en oppgave er ferdig før det kan begynne på en ny, mens Node kan håndtere flere oppgaver samtidig. Node er bygget på Googles V8 JavaScript Engine som er ekstremt raskt siden det oversetter JavaScript til maskinkode og optimaliserer denne før kjøring. Siden Node bare bruker en tråd og gjør non-blocking I/O calls kan det håndtere flere tusen samtidige brukere uten å bruke tid på bytte context. Node har også en innebygget pakkehåndterer NPM (node package manager) som gjør det enkelt å laste ned brukergenererte pakker og programmer. Express.js er et raskt og minimalistisk web-rammeverk for Node.js som gjør routing og serving enkelt. 18 2.2.7 API API (Application Programming Interface, applikasjonsprogrammeringsgrensesnitt) er et programeringsgrensesnitt som gjør det mulig for flere programmer å utveksle informasjon med hverandre. En API er en definisjon på hvordan andre programmer skal legge til sin funksjonalitet eller tjenester, slik at personer som ikke har vært i kontakt med programvaren lett kan sette seg inn i hvordan man skal koble programmene sammen. Et eksempel på dette er hvordan API-en til Linux eller Microsoft Windows gjør det mulig å lage programmer som passer til operativsystemet og utnytter dets egenskaper. Det er svært vanlig for store programvarehus å publisere API-er til sine programsystemer, slik at uavhengige aktører kan bygge videre. 2.2.8 Databaser Oppdragsgiver hadde ikke noen spesifikke krav til hva slags databasesystemer som skulle benyttes, men hadde et ønske om en NoSQL-database og foreslo MongoDB og CouchDB som potensielle kandidater. Under følger en kort beskrivelse og sammenligning av de to vanligste databasetypene; relasjonsdatabaser og dokumentdatabaser herunder MongoDB og CouchDB: 2.2.8.1 Relasjonsdatabaser En relasjonsdatabase er en database hvor dataene er organisert i tabeller, hvor hver rad representer en entitet som for eksempel en person eller bedrift, og hver kolonne representerer en datatype som for eksempel telefonnummer eller adresse. Alle data blir derfor lagret etter en bestemt struktur og etter et predefinert skjema. Relasjonene mellom tabellene er angitt med et nøkkel datafelt i minst to tabeller. Når man kobler flere tabeller sammen ved hjelp av primær- og fremmednøkler, knyttes relasjonene. For å lese og manipulere dataene i relasjonsdatabaser, bruker man det standardiserte språket SQL. SQL er utviklet for arbeid med databaser og brukes til å hente ut relevante data fra tabellene ved å konstruere en SQL setning. 19 Fordeler ved relasjonsdatabaser: Krever mindre lagringsplass enn alternativene siden dataene bare lagres en gang på ett sted. Oppdatering av data er raskt, siden det bare er å endre data i en tabell. SQL er et standadrisert språk og kan brukes mot en rekke systemer uten store endringer i syntaksen. For databaser der det skal gjøres mange transaksjoner er det en fordel med tabeller og relasjoner Relasjonsdatabaser følger ACID (Atomicity, Consistency, Isolation, Durability) prinsippene. Ulemper ved relasjonsdatabaser: Relasjonsdatabaser skalerer best vertikalt, noe som betyr at hvis man trenger mer fart eller lagringsplass er det best å investere i den enheten som databasen kjører på som for eksempel å legge til en ny disk eller en raskere prosessor. Å distribuere databasen over flere enheter vil nødvendigvis ikke øke ytelsen på grunn av de store mengdene med data som må gå over nettverket. Endringer i tabellstrukturen kan være veldig krevende, spesielt hvis man har en stor database med mange relasjoner, da alle relasjonene må oppdateres manuelt og det kan være vanskelig å holde oversikt over hvem som hører sammen med hvem. 2.2.8.2 Dokumentdatabaser (NoSQL-databaser) En samlebetegnelse på databaser som ikke er relasjonsdatabaser blir ofte kalt NoSQL-databaser. Dette er databaser som ikke organiserer data etter tabeller og relasjoner. NoSQL er en forkortelse for “Not only SQL”. Dette er et nyere alternativ til relasjonsdatabaser, typisk brukt i større web-løsninger med behov for å lagre data som er problematisk å lagre i tabellform, for eksempel dokumentsamlinger brukt i søkemotorer og nettverk lagret i sosiale medier. Data lagres i et friere format, ofte distribuert på flere tjenermaskiner, og er ikke basert kun på SQL 20 som spørrespråk. Slike systemer er gjerne optimalisert for å besvare mange spørringer som i hovedsak leses fra databasen, men har som regel ikke full støtte for transaksjoner. Et fellestrekk ved NoSQL databaser er at de er såkalt skjemaløse, de behøver ikke følge en fast mal for datastrukturen. Det er flere grupper av NoSQL-databaser som key-value databaser for enkle datatyper, graf databaser basert på graf-teori og dokumentdatabaser som MongoDB og CouchDB. I dokumentdatabasene kan nøkkel-verdien være en kompleks datastruktur kalt dokument. Fordeler ved dokumentdatabaser: Skalering: NoSQL databaser kan skaleres horisontalt. For å øke ytelse og kapasitet kan man enklere enn med relasjonsdatabaser fordele databasen over flere servere og over flere datasentre. Pris: For løsninger som kjører i nettskyen er NoSQL databaser som oftest billigere. Skjemaløs:Ustrukturert datastruktur gjør at endringer i datastrukturen underveis i utviklingen går raskere enn ved relasjonsdatabaser. Bruker ofte et datalagringsformat som er helt eller svært likt et vanlig programmeringsspråk. For eksempel bruker dokumentdatabasen MongoDB en binær form av JSON (BSON) som lagringsformat. Fart: Hvis data for det meste skal legges til eller leses vil en NoSQL database ofte være raskere enn en relasjonsdatabase. Ulemper ved dokumentdatabaser: NoSQL databaser bruker ikke et standard spørrespråk som SQL. Hva slags språk hvert databasesystem bruker kan variere. Hvis man skal bruke et nytt databasespråk, må man derfor beregne tid til å lære seg API språket. Ikke alle NoSQL databaser følger ACID prinsippene for transaksjoner, man kan derfor som utvikler eller som driftsansvarlig bli overrasket om man tar dette for gitt. Kapasitet vs Ytelse: Ved bruk av NoSQL må man ofte ta valget om man skal normalisere: 21 o Man kan normalisere for å spare plass, men får da dårligere ytelse fordi NoSQL databaser trenger å utføre flere spørringer enn ved en SQLspørring som bruker JOIN. o Ved å droppe normalisering vil man få raskere spørringer, men det blir lagret mer redundant informasjon. Fart: Fordi NoSQL databaser vanligvis ikke er normalisert vil ofte spørringer som går på oppdatering være tregere enn ved relasjonsdatabaser. Kompetanse: For videre drift og utvikling vil det være lettere å skaffe kompetanse på mer utbredte relasjonsdatabaser enn å finne kompetanse på de mindre utbredte NoSQL-databasene. 2.2.8.3 MongoDB MongoDB er en dokument-orientert database, og en NoSQL database. MongoDB bruker JSON lignende dokumenter med dynamiske skjemaer i formatet BSON. Dette gjør integrasjonen av data i visse typer applikasjoner enklere og raskere. MongoDB kan lagre ustrukturerte data og endringer i databasestrukturen krever mindre innsats. MongoDB er akseptert som back-end programvare blant flere store web-brukere som eBay, Viacom og New York Times. MongoDB er det mest populærer NoSQLdatabase systemet som muliggjør applikasjoner som tidligere ikke var mulig med relasjonsdatabaser og til en vesentlig lavere pris. MongoDB ble lansert som en gratis og åpen kildekode programvare i 2009. 2.2.8.4 CouchDB Apache CouchDB eller CouchDB er en åpen kildekode database tilpasset web-applikasjoner. Det er en dokumentorientert NoSQL database som bruker JSON for å lagre data, JavaScript som query språk og MapReduce og HTTP som API. 22 2.2.8.5 Relasjonsdatabaser vs. dokumentdatabaser Et hovedmål for videreutviklingen av Cruntch! er at applikasjonen skal kunne oppskaleres til å kunne håndtere flere tusen stemmegivere innenfor et ofte begrenset tidsvindu. Dokumentdatabasene har sin styrke nettopp i forhold til oppskalering. Business caset indikerer at de viktigste anvendelsesområdene for Cruntch! vil være innenfor media og forskning. Dette er institusjoner som normalt ikke har egen stor serverkapasitet som kan imøtekomme kravet om tilstrekkelige QPS. Det vil derfor være hensiktsmessig for disse at Cruntch! er designet for å kunne leie kapasitet i nettskyen. 2.2.8.6 MongoDB vs CouchDB Begge databasene tilfredsstiller alle kravene som har blitt satt til skalerbarhet og det er bare små forskjeller som gjør at MongoDB blir foretrukket i dette tilfelle. MongoDB lagrer data som BSON som er et binært JSON. CouchDB lagrer som JSON. BSON er raskere og tar mindre plass enn JSON. Med mange brukere kan derfor lagring bli et problem i CouchDB. Med MongoDB er det enkelt å gjøre enkle queries, mens med CouchDB må man lage Map/Reduce queries. Mongo skalerer bedre pga innebygget sharding. MongoDB er også bedre dokumentert. 2.2.9 MVC MVC (Model-View-Controller) er et designmønster som brukes i programvareutvikling. Poenget med MVC er å skille hvordan data håndteres fra hvordan dataene presenteres. MVC sørger for at endringer i det visuelle ikke har noen innvirkning på hvordan data håndteres og vice versa. Programmet blir da delt opp i tre lag, der model er data og businesslogikk view er delen som presenterer informasjonen for brukeren og kontrolleren som er koblingen mellom view og model. 23 Oppsummert: Model: holder på data View: viser fram data Controller: flytter på data 3.Metoder 3.1 Prosjektstyring Prosjektstyring er nødvendig for å gjennomføre prosjekter slik at man oppnår ønskede resultater ut fra ressursene som er tilgjengelige. Prosjekter går gjerne over ulike faser, fra en idéfase til en realiseringsfase. Fokus er på planlegging, styring, koordinering, og leveranser innenfor tids-, kvalitets-, og ressursrammer. I denne oppgaven er følgende metoder vurdert og prioritert for bruk: 3.1.1 Samarbeidskontrakt Ved oppstart av prosjektoppgaven er det hensiktsmessig å lage en samarbeidskontrakt. Hensikten med kontrakten er å bli enige om noen grunnleggende vilkår for samarbeidet i gruppen og en plan for hvordan gruppens mål skal nås. Samarbeidskontrakten forplikter gruppe deltagerene til å følge avtalte spilleregler og regulerer hvor mye innsats den enkelte skal bidra med inn i oppgaveløsningen. Den beskriver også ansvarsfordeling og verv, slik som gruppeleder, referent, hvem som har ansvar for innkalling til møter med veileder etc. Gode kontrakter inneholder også avtalte sanksjonsmåter ved brudd på kontraktens forutsetninger. 3.1.2 Prosjektdagbok Å føre en dagbok eller hendelseslogg under prosjektarbeidet gjør det enklere å rekapitulere fremdrift, hva som erdiskutert og hva man avtalte på de enkelte møtene. Disposisjonen for et møtereferat er ofte: Dato, gruppedeltagere til stede, emne for møtet, status for fremdriften og avtale om hvem som gjør hva til neste møte. 24 3.1.3 Arbeidsplan For å løse denne oppgaven er det laget en arbeidsplan som har fungert både som en disposisjon for skriving av rapporten og som viser hva som skal analyseres og hva som skal programmeres med tidsfrister. Denne arbeidsplanen ligger i vedlegg 1. 3.1.4 Trello Trello er en gratis web-basert prosjektledelses applikasjon basert på Kanban tavle (oppgaver gjennomføres etter just in time prinsippet). Oppgaver settes inn i en liste og blir flyttet over i andre lister etterhvert som arbeidet utvikles. De nye listene indikerer status for arbeidsoppgaven. Trello ble valgt som styringsverktøy for programmeringsoppgavene fordi den gir oppdateringer på status via mobiltelefon og reduserer ledetid i samarbeidsprosjekter. Oppgaven ble tildelt den personen som skulle utføre den. De fleste oppgavene ble delt inn i flere deloppgaver og Trello ga en klar oversikt over fremdriften. 25 Figur 3: Skjermbilde fra Trello 26 3.1.5 Risikomatrise Risikomatrisen er et dokument som lister opp hva som kan gå galt i prosjektgjennomføringen. Dette for å være forberedt på problemer. Gruppen listet opp sykdom, ukjente teknologi, tidsmangel og interne problemer. De ulike risikofaktorene ble kategorisert etter konsekvensens alvorlighets grad. Matrisen for dette prosjektet er vist i vedlegg B. 3.1.6 Fossefall versus Smidig utvikling Fossefallsmetoden er en metode som har sine røtter i produksjons- og byggebransjen, men er også mye brukt innen IT. Metoden består av syv tydelig definerte faser eller trinn. Første trinn er å lage en kravspesifikasjon, andre trinn er design, tredje trinn er konstruksjon (koding), fjerde trinn er implementasjon, femte trinn er testing, sjette trinn er installasjon og syvende trinn er vedlikehold. Tid brukt på planlegging av prosjektet i tidlige faser kan spare mange ressurser i senere faser. Det viser seg at en feil som blir funnet i en tidlig fase vil koste mindre tid og penger enn å finne den samme feilen i en senere fase. I et fossfallsprosjekt vil man normalt bruke 20-40% av tiden på planlegging, 30-40% av tiden på koding og resten på testing og implementasjon. Store prosjekter med mange ulike aktører som er avhengige av hverandre, vil nyte godt av de strenge rammene som er blir fastsatt og kravene til god dokumentasjon. På denne måten vil alle de involverte ha en oversikt over hva som skal gjøres, hvem som gjør det og når det blir gjort. Ulempene er at metoden ikke tar høyde for endringer av oppgaven eller problemstillingen. Et vanlig eksempel på dette er at oppdragsgiver ikke er helt sikker på hva de ønsker eller at de kommer med nye krav. En annen vanlig problemstilling er at det er 27 vanskelig å se for seg alle mulige problemer som kan oppstå før man faktisk har begynt å programere. Alle avik fra planen vil kreve oppdatering av alle prosjektdokumentene og føre til endringer i planen. Dersom man er riktig uheldig, vil man komme til et punkt der man bruker mer tid på å endre og oppdatere dokumentasjonen enn man bruker på å faktisk jobbe med prosjektet. Smidige metoder tar som utgangspunkt at systemutvikling er uforutsigbar, og at prioriteringen av funksjonelle krav vil kunne endre seg etter hvert som systemet tar form. Smidige metoder begrenser denne risikoen ved å utvikle systemet bitvis og med hyppige del leveranser. Det styres etter verdi og fokuseres på kontinuerlig læring ved evaluering av gjennomførte leveranser Prosjektet deles ofte inn i faser som konseptfasen, planleggingsfasen, gjennomføringsfasen og fasen for avslutning, evaluering og bruk. Scrum er en gren under smidig utvikling og er et rammeverk laget med henblikk på å utvikle komplekse informasjonssystemer. Det brukes i hovedsak til å utvikle programvarebaserte systemer og benyttes gjerne i kombinasjon med Extreme Programming (XP), men kan i prinsippet brukes til å håndtere alle slags prosjekter av en viss kompleksitet. Teorien er basert på empirisk prosesskontroll og fordrer at man jobber inkrementelt og iterativt og at selve utviklingsjobben utføres av tverrfaglige, selvstyrte team. 3.1.7 Git Når man jobber med et omfattende IT-prosjekt, vil det oppstå behov for et versjonskontrollsverktøy slik at de som er involverte lett kan synkronisere og dele filene sine. I dette prosjektet ble Git benyttet som versjonskontrollverktøy med et repository på gitlab.com som er et nettsted som tilbyr gratis git-repositories 28 Git er distribuertnoe som betyr at alle kan synkronisere med alle og ikke bare med hovedgrenen. Dette gjør det mulig for hver enkelt å jobbe med sin lokale versjon og når man blir ferdig kan man enkelt flette sitt arbeid inn i hovedgrenen. 3.1.8 Ide dugnad En idédugnad er et møte der mennesker kommer sammen for å finne ideer. Ofte er det for å hjelpe en eller flere personer (eller organisasjoner) til å løse problemer, utfordringer eller finne muligheter. Grupper kan ofte løse problemer som deltakerne hver for seg ikke ville greie. En gruppe mennesker har: Flere informasjoner, flere måter å se et problem på, flere måter å tenke på og mange flere erfaringer. For å kunne bruke en gruppes mentale ressurser best mulig, kreves gode kreative arbeidsmetoder og en dyktig prosessleder. 3.2 Analysemetoder I denne oppgaven er det lagt vekt på gjennomføre gode analyser i forkant av utviklingsarbeidet for å kartlegge og sikre god innsikt i problemstillingene både fra oppdragsgivers, sluttbrukers og dataingeniørens ståsted. Det er gjennomført analyser på det forretningsmessige/kommersielle plan, og også ved å sette seg inn i potensielle sluttbrukeres situasjon som grunnlag for systemutviklingen og for å skissere database strukturen. 3.2.1 Business case Business Case er en analysemetodikk som benyttes for på et overordnet nivå å avgjøre om et prosjekt eller en større aktivitet skal iverksettes. Hensikten med Business case er allerede i konseptfasen å kunne avgjøre, med bruk av begrensede ressurser, om det er hensiktsmessig å starte opp den aktuelle aktiviteten eller prosjektet. Business caset er også godt egnet til å presentere prosjektet eller ideen for andre, som samarbeidspartnere eller investorer. 29 Basert på konklusjonen fra analysen av følgende parametere, kan aktiviteten bli besluttet iverksatt eller ikke: Hva aktiviteten er ment å skulle løse, hvilket behov hos målgruppene skal løsningen møte Hvilke forretningsmessige fordeler vil aktiviteten gi Hvilke andre alternativer foreligger Gevinst, kostnad og risiko ved hvert alternativ Forhold til interne og eksterne betingelser 3.2.2 Hvordan intervjue kunder/brukere? I designet av nye produkter eller tjenester er det sentralt å forstå kundenes eller brukernes opplevelser av den situasjonen produktet skal løse for dem. Den viktigste informasjonskilden er å snakke med kundene direkte og høre deres egne fortellinger om hva de faktisk vektlegger. Disse samtalene bør gjennomføres både i konseptfasen, men også følges opp i design og gjennomføringsfasen for å kunne sjekke ut om produktutviklingen er på rett spor. Det er viktig ved kundeintervjuer å ikke selv selge inn egen ide eller løsning, men faktisk lytte til kundens opplevelser og problem forståelse. Ikke forled kundene ved bruk spørsmål med ordet "ville" i som f.eks.: "Hvis vi bygget et produkt som løste X problem, ville du bruke det?" "Hvor mye ville du betalt for noe som gjorde X?" "Ville du skiftet ut din eksisterende løsning hvis den gjorde X?" Følgende intervju mal med åpne spørsmål anbefales: 1. Hva er den vanskeligste delen ved ditt problem og i hvilken sammenheng opplever du dette? 2. Kan du fortelle meg om den siste gangen det skjedde? 30 3. Hvorfor var det vanskelig? 4. Hva, om noe, har du gjort for å løse det problemet? 5. Hva liker du ikke ved de løsningene du har prøvd? 3.2.3 User story En user story er en kort beskrivelse fra sluttbrukere av et system som uttrykker hva brukeren trenger å gjøre for å løse sin oppgave. User stories brukes som basis for å definere programvarens nødvendige funksjoner. User storyen beskriver på en enkel måte for hvem, hva og hvorfor programvaren/IT systemet skal fungere og er viktig i utformingen av kravspesifikasjonen og designprosessen. 3.2.4 Use case Innenfor programvare utvikling benyttes use case til å analysere, definere og fremstille interaksjonen mellom eksterne aktører og systemet for å gjennomføre en oppgave. Aktørene må kunne gjøre beslutninger, og kan være en person en organisasjon eller et computer system. Aktøren er alltid interessert i resultatet av transaksjonene. Transaksjonene fremstilles ofte i Use case diagrammer som viser forholdet mellom brukeren og datasystemet ved de ulike oppgavene som skal gjennomføres 3.2.5 ER- modellering "ER" står for "Entity / Relationship". Et ER-diagram er en grafisk fremstilling av strukturen i en database. ER-diagrammet er en visualisering av databasens funksjon og oppbygning, og vektlegger ikke tekniske spesifikasjoner eller kapasiteter. En ER-modell egner seg godt som diskusjonsgrunnlag for å avklare behov og begrepsbruk i møter mellom sluttbrukere og databasedesignere. I alle fasene i utviklingen av en database må man alltid ta utgangspunkt i hvordan og av hvem databasen forventes brukt. Det bør være klart hvilken informasjon som skal kunne hentes ut av databasen før man begynner designprosessen. 31 Figur 4. ER-diagram av Cruntch! databasene. 3.3 Verktøy Google documents sin draw funksjon har blitt brukt for utforming av diagrammer og skjemaer. Til å lage skisser ble hotgloo.com brukt, og gliffy ble brukt til å lage ER-diagram. Microsoft Excel ble brukt til risikomatrise og Gantt-skjema. 32 3.4 Kommunikasjon Gruppen etablerte en Facebook side; bachelor chat, som ble benyttet til å avtale møter og utveksle informasjon. I tillegg til møter hver 2. uke på skolen, ble Skype benyttet til diskusjoner mellom en eller flere i gruppen. For å dokumentere utviklingsarbeidet og for å skrive den endelige rapporten ble Google documents benyttet. Google documents gjør det mulig for flere å skrive i samme dokument samtidig slik at alle kan følge med på hva som blir skrevet og dermed hele tiden er oppdatert på fremdriften for rapporten. 3.4.1 Prosjektdokumentasjon Utviklingen av prosjektet i de forskjellige fasene er dokumentert i en prosjektskisse og en forprosjektrapport som ligger i vedlegg 3 og vedlegg 4. Gjennomføringen av hovedprosjektet er dokumentert i denne rapporten. 4. Analyse I analyse kapittelet beskrives analyser som er gjennomført for å få innsikt i sluttbrukers mulige behov knyttet til en web-basert avstemmings- og rangeringstjeneste. Det er også gjort enkle søk for å kartlegge hvilke bruker grupper som kan være aktuelle som kjøpere av en slik tjeneste. Det er videre valgt å analysere forretningsmuligheter i mediamarkedet gjennom et business case for Melodi Grand Prix og den store avstemmings prosessen som utgjør en viktig del i dette TV konseptet. Det er også beskrevet User story og Use case for Melodi Grand Prix. Use caset berører den kritiske parameteren som er knyttet til hvilket tidsvindu stemmegiver vil holde oppmerksomheten rettet mot sin individuelle stemmegivning. Dimensjonerings kriterier for oppskalering av antall stemmegivere er også beskrevet. 33 Som et eksempel på en småskala avstemmings turnering er det valgt å illustrere en pizza avstemming i en vennegjeng gjennom User story og Use case. Innsiktene i bruker adferd og hvilke krav som må stilles til systemet, som er ervervet gjennom analysene, er benyttet i designprosessen. 4.1 Business case Oppdragsgiver illustrerer anvendelsen av algoritmen, som er grunnlaget for denne oppgaven, med følgende tekst: “Cruntch!: 'Hva er viktigst for deg`? Se for deg at du koser deg sammen med vennene dine en fredags ettermiddag. Dere får lyst til å bestille pizza, men da begynner allerede diskusjonen med hva folk liker av forskjellige toppings på pizzaen. «Slik blir vi aldri enige», tenker du. Du tar frem Cruntch! på mobilen og skriver inn alle navnene på pizzaene som folk ønsker seg. Så sendes det en melding til alle vennene tilstede og de må nå gjøre noen valg. De vil bli spurt en rekke små spørsmål om hvilken pizza de helst vil ha med alltid to av pizzaene som alternativene. Når alle er ferdig, sitter du igjen med en nøyaktig liste over hvilke pizzaer som er mest populære. Endelig kan dere bestille,” Umiddelbart er det vanskelig å se for seg hyppig bruk av en "Valg-av-pizza" tjeneste. Hvor ofte er man i en slik situasjon? Gidder man å bruke en web tjeneste i så fall? I det følgende beskrives noen eksempler på mulige anvendelsesområder og markedsmuligheter for en web basert beslutnings- eller rangerings tjeneste: 4.1.1 Mediamarkedet Når først problemstillingen knyttet til avstemminger og rangeringer ble bevisst, har det etterhvert dukket opp flere og flere eksempler på at avstemminger og rangeringer er veldig utbredt. Som eksempler nevnes Folkedebatten på radio P4, kåringer i aviser 34 og TV av årets navn, årets juleøl og årets ildsjel mfl. TV programmer som Idol, Skal vi danse og Melodi Grand Prix har seer avstemmingen som en integrert og viktig del av program konseptet. For å vise hvor stort engasjement slike kåringer vekker, viser vi til et utdrag av en artikkel i VG 01.05.15: Her er de fire «Publikumpris»-finalistene KRISTINE HELLEM AANSTAD (VG) 01.05.2015 08:54 - oppdatert 01.05.2015 09:05 Antall kommentarer på artikkelen13 Del på FacebookDel på Twitter Over 86.000 VG-lesere har talt: Kadafi Zaman, Anne Rimmen, Otto Robsahm og Truls Svendsen skal kjempe videre om «Publikumsprisen» under Gullruten i Bergen. I en måned har VGs lesere stemt på sin favoritt til å vinne Publikumsprisen under TV-prisutdelingen. 86.000 har så langt stemt i den store kåringen, og nå kan VG avsløre hvilke fire som har kapret flest stemmer og dermed går videre i konkurransen: Kadafi Zaman, Anne Rimmen, Truls Svendsen og Otto Robsahm. Hvem av disse fire som vinner, er det VGs lesere som skal avgjøre gjennom å stemme på sin favoritt helt frem til dagen prisutdelingen blir holdt i Bergen. De fire finalistene tar med seg stemmene fra forrige runde, og nå kan du eventuelt på nytt stemme på din favoritt blant de fire. Det gjør du ved å trykke «stem» i avstemningen med kun Zaman, Rimmen, Robsahm og Svendsen – som du finner øverst i denne saken. På en måned er det avgitt 86 000 stemmer i denne kåringen, og avstemmingen skal fortsette en måned til. Kanskje avgis det opptil 200 000 stemmer for å kåre Publikumsprisen i 2015? Dette illustrer hvor stort rangeringer er i Norge. 35 En artikkel i VG den 14.04.2004 viser at publikum også engasjerer seg i prinsippene for hvordan kåringen eller turneringer gjennomføres. Dette illustreres av følgende sitat: “- Dette er helt utrolig!!!!! Vinneren går ut!!! Det er jo helt feil! Det er stemmesystemets feil!!!!!!!! Dette hadde aldri skjedd om systemet hadde vært slik at du stemmer på den du vil skal gå ut!!” I avstemmingen om stemmesystemet, som VG arrangerte den 14.04.2004, avgis 23 460 stemmer og 68% mener at Idol systemet var feil mens 32% mente at det ga riktig resultat. Det er misnøye og uenighet rundt avstemmings oppsettet også i American Idol. I både norsk og amerikansk Idol klager publikum over at avstemmings regimet ikke gir riktig resultat. Nettstedet VoteFair kaller single-elimineringen for primitiv og hevder at velgerene også bør angi andrevalg, tredjevalg osv. når det foreligger mer enn to alternativer, slik som det gjøres i Melodi Grand Prix. Dette krever et eget oppsett for stemmesedlene: 36 Figur 5: Eksempel på stemmeseddel oppsett for individuell rangering av konkurrenter. Kilde: www.votefair.org. Det ble avgitt 330 000 stemmer på en kveld i Idol i 2004. Mens i American Idol økte antallet stemmer med 100 millioner stemmer da sms stemmer ble tillatt i 2009. I 2012 stemte 132 millioner mennesker i American Idol sammenlignet med 122 millioner stemmer i det amerikanske president valget. Hvor viktig det er at regelverket rundt en avstemning er rettferdig og klart viser følgende debatt innlegg i VG den 23.11.2007: “Legger merke til at de første deltakerne som er på lufta får sitt telefonnummer på skjermen der man kan ringe på for å stemme på vedkommende. Og dette kan folk ringe på og sende SMS på FØR folk har hørt resten av innslagene og før de vet i hvilken rekkefølge artistene kommer i! Altså kan førstemann utpå, i kveld var det Linda, innhente mange flere stemmer i minuttene som går før siste deltaker får komme på lufta. ...hvis jeg ikke tar feil blir det ikke likt antall minutter for avstemming på hver deltaker?” VG artikkelen den 17.04.2004 viser også til at det er marked for avstemnings tjenester - da TV2 som arrangerer Idol viser til sin leverandør av tjenesten for å forsvare stemme innretningen. TV2 Interaktiv, som er et datterselskap av TV2, har bl.a ansvar for drift av konkurranser og spill. En artikkel i Dagens Næringsliv 04.02.2014 beskriver en inntekts strøm knyttet til Idol avstemningen på ca. 1,1 millioner kroner pr program som fordeles på TV2, teleoperatørene, og TV produksjonsselskapet som er rettighetshaver : 37 “Å stemme på sin favorittdeltager koster 4 kroner og 50 øre hvis man bruker telefon, 5 kroner dersom man sender en SMS. Etter de to første programmene var det avgitt 471.000 stemmer, noe som ifølge Aftenposten gir over 2,2 millioner kroner i inntekter. Av disse pengene sitter tv-kanalen TV 2 igjen med rundt en krone per stemme. Resten fordeles mellom TV 2 Interaktiv, teleoperatørene Netcom og Telenor, og mobilselskapet Carrot, som er ansvarlig for å samle inn telefonstemmene. I tillegg skal produksjonsselskapet Fremantle, som eier formatrettighetene til Idol, ha sitt. - Det kommer da inn noe penger, men Idol er langt fra gratis å produsere. Så det er ingen automatikk i at vi blir rike av dette, men det er jo godt at det kommer noe inn, sånn at ikke alt går ut, sier presseansvarlig Bjarne Laastad i TV 2 til Aftenposten. Ifølge Laastad har Idol nesten dobbelt så mange seere i år som ifjor. Han påpeker at det derfor ikke er unaturlig at det blir mer penger ut av dette heller, og legger til at man i fjor så at antall stemmer økte parallelt med seertallene. Forrige onsdag ble det avgitt 287 000 stemmer, mens programmet ble sett av over 700 000. Det siste programmet før fjorårets finale endte opp med 390 000 stemmer. Under forutsetning av at antall stemmer i går kveld endte på rundt 300 000, vil de totale Idol-stemmene til nå ha nådd 3,6 millioner kroner. Ifølge Aftenpostens regnestykker har TV 2 i så fall fått 700. 000 kroner i inntekter.” 4.1.2 Forskning Oppdragsgiver nevner selv forskning som ett mulig anvendelsesområde. Som et eksempel trekkes det her frem sensoriske analyser. Beskrivelsen av temaet på Wikipedia viser at det her er snakk om store informasjonsmengder som behandles statistisk for å kåre vinnere innenfor områder hvor de menneskelige sanser blir brukt til å vurdere egenskaper. Vurdering av mat og smak var den opprinnelige anvendelsen av sensoriske analyser, men metoden benyttes nå også til å sammenligne og rangere kvalitet og bruksegenskaper på alt fra TV, biler og mobiltelefoner: 38 “Sensorikk er et fagområde som beskriver egenskaper som menneskelige sanser kan oppfatte, enten ved å lukte, smake, se, berøre eller høre på et produkt. Sensorisk analyse er en vitenskapelig disiplin som handler om å planlegge, utføre og analysere forsøk hvor de menneskelige sansene er blitt brukt til å vurdere ett eller flere produkter. Opprinnelig ble sensorisk analyse brukt i forbindelse med mat, men blir også benyttet på enhver gjenstand som lar seg vurdere etter de ovennevnte sanser. Eksempler på andre produkter enn mat som analyseres ved hjelp av sansene er: TV-apparater (visuell bedømmelse av bildet, kontrast, farger, oppløselighet,…), biler (kjøreegenskaper på forskjellige underlag, lukt, sittefølelse, …), mobiltelefoner (utseende, høyttalerlyd, brukervennlighet,…). Mat bedømmes både i forbindelse med produktutvikling og kvalitetskontroll. I sensorisk analyse kan man være ute etter objektive eller subjektive bedømmelser. Objektive bedømmelser gis av et sensorisk panel, vanligvis bestående av 8-15 trenede dommere som har blitt rekruttert på basis av deres evne til å gjenkjenne og rangere styrken av 4 grunnsmaker (søt, salt, bitter, sur). (Umami holdes vanligvis utenfor i slike sammenhenger, siden den fremdeles regnes som ukjent for de fleste). I forbindelse med mat bedømmer dommerne egenskaper som har med farge, tekstur, lukt og smak å gjøre. I sjeldnere tilfelle bedømmes også lyd: ”knekk”-lyden i wienerpølser; knasingen i frokostblandinger. Fargeegenskapene som bedømmes er særlig hvithet, fargetone og fargestyrke, definert ifølge NCS (Natural Colour System fra Färginstitutet, Sverige). Lukt- og smaksegenskapene er enten utledet av grunnsmakene, er produktspesifikke, så som rånelukt, eller gruppespesifikke, så som viltsmak, malinglukt (som beskrivelse av harskhet). De vanligste teksturegenskapene er hardhet, mørhet, saftighet og fethet. Et sensorisk panel regnes som et objektivt måleapparat: de bedømmer hvor mye det er av de forskjellige egenskapene, aldri hvorvidt de liker produktet, dette må gjøres ved hjelp av en forbrukerundersøkelse. Nesten alle som arbeider med sensorisk analyse benytter et system for elektronisk registrering. Dette fungerer på den måten at 39 dommeren markerer på en skjerm eller ved hjelp av et tastatur hvor mye det er av de forskjellige egenskapene, og resultatene blir straks lagret på en datafil for videre analyse. Tidligere registrerte dommerne sine bedømmelser ved hjelp av papir og blyant, men dette var både tidkrevende og førte lett til feil, særlig ved at dommerne glemte å registrere enkelte tall. I tillegg lå det en feilkilde i den prosessen hvor disse dataene ble overført til et elektronisk lagringsmedium. Å gjøre de statistiske analysene for hånd har neppe blitt praktisert i noen særlig stor grad – datamaskiner har stort sett blitt benyttet til dette siden 1970-tallet.” 4.1.3 Kundebestemt produktutvikling I et samarbeid mellom bloggeren Stine Skoli, som skriver bloggen Speiltvillingene, og klesprodusenten Lise Arvesen i Virre Vapp inviteres mødre til å bestemme innholdet i nye kolleksjoner gjennom avstemming som i vises i følgende sitat fra Virre Vapps hjemmeside: “Sosiale medier og stadig ny og bedre teknologi gjør fremtiden spennende! Våren 2015 snur virrevapp.no for første gang design prosessen på hodet. Nå er det ikke lenger gründermamma Lise Arvesen i Drøbak som står i spissen for nye kolleksjoner alene. Egen gjeste-designer er invitert inn. Hun heter Stine Skoli og er damen bak bloggen Speiltvillingene. Stine er kreativ, flink til å sy i tillegg til å ha to små jenter «Speiltvillinger». Sammen med sine mange tusen blogg-lesere og følgere på Instagram har Stine kommet frem til en liten eksklusiv kolleksjon som lanseres våren 2015. På denne måten kan vi være sikrere enn før på at kundene virkelig ønsker det som settes i produksjon. Målet er å la kundene bestemme både modeller og valg av stoffer.” Hvordan dette forholdet mellom blogger og produsent beskrives er vist i figur 6: 40 Figur 6 :Blogg innlegg på Speiltvillingene.blogg.no 4.1.4 Mentometerknapper Mentometerknapper ble kjent gjennom radio programmet Ti i skuddet som var på lufta fra 1965 til 2007. De beste låtene ble kåret gjennom avstemning via mentometerkanpper og senere sms. Wikipedia beskriver mentometerkanpper som: “En mentometer är en elektronisk apparat för rösträkning, som oftast används i TVprogram. Den kan ha en eller flera knappar beroende på vad publiken skall framrösta, och registrerar antalet samstämmiga svar, uttryckt i procent av antalet deltagare i en omröstning. Genom mentometrar kan man snabbt få en bild av den uppfattning som råder i en viss fråga hos till exempel en TV-studiopublik. Mentometeromröstningar 41 kan också användas medvetet för att skapa en känsla av deltagande och inflytande, till exempel på kongresser och andra större möten. Dagens mentometerdosor är trådlösa. Mobiltelefoner kan även användas som mentometer. Med mobilen kan deltagarna rösta med hjälp av SMS, via en mobil webbtjänst eller en mobilapplikation. Tillhörande plattform för förberedelse och presentation kan variera mellan enklare webbsidor till mer funktionsrika integrationer i PowerPoint eller Keynote.” Mentometerknapper har fått en renessanse ref. Smartvote.no i mai 2015: ”.... med mentometerknapper og ny og brukervennlig programvare, kan dere gå fra presentasjon til direkte og engasjerende kommunikasjon med alle deltagerne samtidig i møter og konferanser.” Det interessante som knytter Cruntch! sammen med Mentometerknappene er om Cruntch! kan fornye måten avstemingene gjennomføres og avstemmingsresultatene presenteres? 4.1.5 Beslutningsstøtte Gjennom et Use case intervju ble det synliggjort at også på individuelt nivå kan det være behov for støtte i beslutningsprosesser. Torill (52år) hadde nettopp kjøpt ny bil. Hun hadde plukket ut 5 bilmerker som hun var interessert i og vurderte disse opp mot hverandre i forhold til 10 parametere som pris, kvalitet, leveringstid, anbefalinger mm. Hun kunne ha tenkt seg hjelp i denne situasjonen. 4.2 Analyse av business case for media markedet Business caset for media markedet, som vi har mest informasjon om, viser at det er store inntektsmuligheter i forbindelse med større avstemmings TV arrangementer som Idol og Grand Prix. En avstemmingsrunde kan generere 500.000 stemmer à 5 kr 42 = 2,5 mill kr. En mindre del av dette kan forventes å gå til system leverandøren for avstemmings programvaren. En antagelse kan være en royalty for bruk av systemet på 0,5% som ville gitt Cruntch! en inntekt på 125.000 kr pr program eller 1,25 mill kr for en serie på 10 programmer inklusive et finale program. Det ser ut til å være et etablert marked for avstemmingsprogramvare og de store kundene vi har sett foreløpig synes å være TV produksjonsselskapene feks. TV2 Interaktiv, som kjøper tjenester av underleverandører. Dagens avstemmings TV serier ser ut til å bruke rene stemme flertalls knock out turneringer, som mange seere mener er urettferdige. En av styrkene til Cruntch! er at den er basert på double-elimination prinsippet og analyserer hvilke alternativer som konsekvent taper over et annet, og man får derfor en mer nøyaktig rangering enn ved single-elimination. I tillegg flytter Cruntch! avstemmingen over på en nett plattform som vil oppfattes som mer moderne, og stemmegivingen vil kunne oppleves som underholdene i seg selv i forhold til telefon og SMS stemmer til den ene favoritten i programmet. Det er nødvendig med grundigere forretningsmessige analyser før det investeres for mye i videre utvikling av Cruntch! som forretningskonsept, men det synes på dette stadiet å være mulig å utnytte konseptet kommersielt både nasjonalt og internasjonalt. 4.3 User story og use case Det er skissert mulige anvendelsesområder for en avstemmingsalgoritme innenfor områdene media, forskning, kundebestemt produktutvikling, mentometer avstem- 43 minger og beslutnings støtte. To bruksområder har blitt prioritert i tråd med oppdragsgivers forslag: Verktøy for avstemming i vennegjenger og en stor avstemming som Melodi Grand Prix. 4.3.1 Verktøy for vennegjenger En gjeng på 8-10 venner er samlet og blir ikke enig om hvilken topping de skal ha på pizzaen og dermed hvilken pizza de skal bestille hos en pizzakjede som leverer på døren. Et beslutningsstøtte system ville kunne løse problemet med de opphetede diskusjonene slik at de pizzaene som er de største favorittene i gruppen, kan bestilles før sulten tar dem alle. Verten for selskapet påtar seg å administrere en avstemming i form av en turnering på nettsiden Chruntch!. Han registrerer e-post adressene til gjestene og alle pizzaforslagene på nettsiden for Cruntch!. Cruntch! sender så en mail til e-postene til deltagerene med link til Home siden for Chruntch! De er da allerede registrert i turneringen og de klikker seg inn på My Vote siden hvor alle pizza alternativene er listet opp i en kolonne. For å velge pizza type, blir hver enkelt gjest presentert for to og to pizzaer som de stemmer på som vinner innenfor dette paret. Cruntch! presenterer fortløpende parvise avstemminger inntil hver gjest har plukket èn vinner i pizzautvalget. Avstemmingen er da avsluttet og Chruntch! viser rankingen for pizzaene basert på antall ganger pizzaen har vunnet, Antall avstemminger vil være (2n -1) hvor n = antall alternativer. 4.3.2 Verktøy for Melodi Grand Prix Melodi Grand Prix (Eurovision Song Contest) er en musikkonkurranse for medlemslandene i Den europeiske kringkastingsunion. Hvert deltakerland har valgt én sang til konkurransen, som blir vist på direktesendt TV. Det blir så arrangert en avstemming 44 hvor hvert land kan stemme på de andre landenes sanger for å kåre en vinner. Konkurransen har de siste årene hatt rundt 100 millioner seere på verdensbasis. Konkurransen har blitt arrangert årlig siden 1956, og avstemmings systemet har blitt endret flere ganger for å bli mer rettferdig og kunne bli gjennomført på kortere tid. I den nasjonale finalen på NRK det bare stemmes mens showet går på tv og bare på din favoritt. Dersom Cruntch! i første omgang ble tatt i bruk for å rangere den norske stemmegivningen i den internasjonale finalen, vil det kreve internett tilgang for alle stemmegivere. NRK ville være administrator for denne avstemmings turneringen. Vanligvis er det satt av en time til avstemming, og NRK må åpne og lukke siden for avstemming i stemme givings vinduet. Stemmegiver må selv kunne registrere seg med sin e-post adresse og gjennomføre sine avstemminger. Dersom det er 16 sanger med i finalen, må de gjennomføre 31 parvise valg. Dette er et stort antall interaksjoner som forutsetter at stemmegiverene holder oppmerksomheten på avstemmingen lenge nok. De fleste internettbrukere er på en nettside i mindre enn 1 minutt. Studier fra National Center for Biotechnology Information viser at oppmersomhets vinduet for mennesker har falt fra 12 sekunder i 2000 til 8 sekunder i 2013. Studier relatert til web bruk viser at brukere mister interessen for trege sider på fra 1 til 5 sekunder. Dette indikerer at Cruntch! bør presentere en ny avstemming minimum hvert 5. sekund. En Grand Prix avstemming med 16 konkurrerende sanger vil da ta 31 avstemminger x 5 sekunder + reaksjonstid pr personlig avstemming anslått til ca 10 sekunder = ca 8 min. Disse 8 minuttene kan oppleves som ekstra underholdning. Antall stemmer i den nasjonale finalen for Melodi grand prix i 2012 var ca 350.000. Dette stiller krav til systemet. Det må være plattform uavhengig og kunne brukes både på mobil og PC. Siden det blir en peak belastning, må systemet designes slik at overbelastning unngås og at alle stemmer blir registrert. Det må være raskt og kunne skaleres etter belastningen. Dvs. ha en QPS (Query per sec), som er en måleenhet for belastning, på 500.000 stemmer/60minx60 sec = 140 QPS gitt at belastningen er 45 jevn over den aktuelle timen. En enkelt web server som også fungerer som en applikasjon og database kan sjelden behandle mer enn et par hundre requests pr sekund. Det bør derfor legges til rette for belastnings deling (sharding) i nettskyen. Kobling til nettskyen vil også sikre oppetiden. 4.4 Utforming av funksjons spesifikasjon Funksjons spesifikasjonen beskriver hvilke brukerfunksjoner web applikasjonen Cruntch! må kunne tilby: Turneringens administrator skal kunne sette opp sin egen turnering Turneringen skal kunne gjennomføres ved hjelp av email og mobiltelefon Deltagerne skal kunne avgi stemmer Et alternativ/en vinner skal bli kåret Statistikk skal vises for alle turneringer Siden skal være universelt utformet Systemet skal være skalerbart 4.4.1 Utforming av kravspesifikasjon Kravspesifikasjonen beskriver hvilken generell ytelse et programsystem skal ha. Kravspesifikasjonen utarbeides før programsystemet utvikles, for å sikre at brukernes behov blir dekket når det gjelder funksjonalitet, ytelse og brukervennlighet. I tillegg til designkrav som kan utledes fra User story og Use case må det tas hensyn til de lovfestede kravene til universell utforming: 4.4.1.1 Universell utforming Universell utforming er et moderne begrep som sier at samfunnet bør utformes slik at så mange som mulig kan delta uavhengig av funksjonsevne og uten at det skal være behov for spesialløsninger. Dette gjelder også for utforming av web og er pålagt under norsk lov i FOR 2013-06-21 nr 732 “nettløsninger skal minst utformes i samsvar med standard Web Content Accessibility Guidelines 2.0 (WCAG 2.0)/NS/ISO/IEC 46 40500:2012, på nivå A og AA med unntak for suksesskriteriene 1.2.3, 1.2.4 og 1.2.5, eller tilsvarende denne standard.” I WCAGs rettningslinjer er det lagt vekt på fire prinsipper. Mulig å oppfatte. -Utformingen skal gi tekstalternativer til alt ikke-tekstlig innhold, og konvertere til et format brukeren kan forstå, for eksempel større skrift, tale, symboler eller blindeskrift. Mulig å betjene. -Utformingen skal gjøre all funksjonalitet tilgjengelig med tastatur, gi brukeren nok tid til å lese og bruke innholdet, ikke være utformet på en måte som kan forårsake epileptiske anfall. Forståelig. -Utformingen skal gjøre innholdet leselig og forståelig, sørge for at websider presenteres og fungerer på forutsigbare måter. Robust. -Utformingen skal sørge for best mulig kompatibilitet med aktuelle og fremtidige brukeragenter, inkludert kompanserende teknologi. 4.4.1.2 Kravspesifikasjon Basert på foregående analyser er følgende designkrav til Cruntch! for bruk på små og store turneringer formulert: Systemet må være plattform uavhengig og kunne brukes både på mobil og PC Det må være mobil vennlige nettsider og bør gjerne tilbys som en app Universell utforming Rankingen av konkurrentene må presenteres Konkurrenter/alternativer bør vises sammen med et flowskjema over progresjonen i avstemmingen Responstiden fra Cruntch! for å presentere nye avstemminger og resultater må være mindre enn 5 sekunder For storskala turneringer gjelder i tillegg: 47 Cruntch! løsningen må kunne håndtere hele systemet som inkluderer frontend, back-end og databasen. Ved større data input enn det èn PC kan håndtere, må belastningen fordeles (load balancing) ved dynamisk fordeling (sharding) av stemmene/forespørslene (requests) mellom de tilgjengelige maskinene ved at alle bruker e-postene får en unik hash #. Systemet bør være skalerbart og en dimensjonering for 140 QPS bør minimum legges til grunn. Statistikken som presenteres for administrator bør også vise stemmefordelingen over tid i en belastningskurve for å kunne brukes som dimensjonerings kriterie for senere turneringer Stemme giverene må kunne registrere seg selv på nettsiden Betalingsløsninger til arrangør bør integreres da de i dag får 5 kr pr stemme via telefon og sms En alvorlig ulempe med dagens algoritme er at den kun kan håndtere turneringer hvor antallet konkurrenter eller varianter er 2 . Dvs oppsett med 4, 16, 32 osv varianter. I n Gran Prix finalen for eksempel er det 21 sanger som deltar, et tall som ikke er 2 . Ann vendelsesområdet for Cruntch! vil øke dersom algoritmen gjøres mer robust. 48 5. Implementering Nettsidestrukturen er bygget opp av elementene introduksjon, lage turneringsside, avstemmingsside, sider som viser resultater og sider som viser oversikt over turneringen. Et sitemap er vist i figur 7. Kildekoden ligger er lagret på en CD vedlagt oppgaven. Figur 7: Sitemap for Cruntch! 49 5.1 Database MockData blir brukt som impromptu database. Den er veldig lik et JSON dokument i utforming og er laget med tanke på at det skal skiftes ut med en dokumentdatabase, så innholdet vil være så likt som dataene fra databasen som mulig. Alle metoder er laget med hensyn til dette. 5.2 Filstruktur Package.JSON er et dokument som inneholder data om applikasjonen, som metadata og avhengigheter. Gjør det også mulig for NPM å hente de pakkene som er nødvendige for at applikasjonen skal kjøre. App.js er selve hovedfilen som starter applikasjonen. I mappen views ligger alle skjermbildene som ejs filer, i mappen router ligger filen main.js som fungerer som controller og håndterer all routingen, mappen public inneholder det estetiske (css og bootstrap) og mappen node_modules er de modulene som blir benyttet. I denne oppgaven er det ejs og express. 5.3 Utforming Sidene ble laget i ejs og stylet med css. EJs er et JavaScript template som fjerner html koden fra JavaScript, så <script>-taggen blir byttet ut med <% %> som indikerer at her er det JavaScript og man kan skrive ren JavaScript kode inn. Twitter Bootstrap 3 ble brukt til å lage navigasjonsbar og footer. Det ble laget tre partial-sider for ting som vil være felles for alle sidene som footer, navigasjonsbar og header, disse blir inkludert ved <% include %> kommandoen. Dette er gjort både for å spare tid og for å forsikre seg om at alle sidene blir like og får med seg alt de trenger. Head-partialen har ikke med seg head-tagger slik at det er mulig å legge til nye script, dette ble gjort i statistic.ejs hvor scriptet for grafene måtte legges til. 5.4 Design Et ønske fra oppdragsgiver var at applikasjonen skulle være enkel, men samtidig elegant og lett å bruke. Valget falt derfor på en svart navigasjonsbar med hvit skrift på 50 toppen av siden for å gjøre det enkelt å navigere. Det ble laget en tilsvarende bar på bunnen av siden for å ha et sted å vise metainformasjonen og linker til sosiale medier eller lignende. Noen prinsipper for universell utforming har blitt fulgt som gode kontraster, men da dette bare er et utkast har ikke dette vært prioritert. 5.5 Testing Siden dette prosjektet bare er utkast til hvordan oppgaven kan løses har ikke testing blitt prioritert. 5.6 Skisser De første skissene til site design er tegnet i hotgloo.com. 51 52 Figur 8,9,10: Skisser. 53 5.7 Skjermbilder I dette kapitelet presenteres nettstedet Cruntch! i form av skjermbildene brukerne vil se index.ejs Dette er velkomstsiden, her står det kort fortalt hva Cruntch! er og det er knapper for å gå til avstemming (playtour.ejs) og lage turnering(createtour.ejs). Figur 11: Skjermbilde av index.ejs 54 createtour.ejs Dette er siden for å lage en turnering. Siden består av et HTML-form med seks inputfelter og en submitknapp. Figur 12: Skjermbilde for createtour.ejs 55 result.ejs Denne siden viser hva som ble skrevet inn i createtour.ejs og har en lenke til playtour.ejs. Ved henting av siden blir req.body sendt med som parameter og siden blir populert basert på det. Figur 13: Skjermbilde for result.ejs 56 playtour.ejs Dette er siden for avstemning, brukeren får valget mellom to knapper og trykker på den knappen man føler er best. Figur 14: Skjermbilde for playtour.ejs 57 mycruntch.ejs Siden er ment å være en samleside for alle turnerningene som brukeren har vært med på. Siden er delt i to lister der den ene listen er turneringer som brukeren har markert som favoritt og den andre listen inneholder alle turneringene sortert etter dato. Figur 15: Skjermbilde for mycruntch.ejs 58 statistic.ejs En side som gir et mer detaljert bilde over hvordan turneringen utspilte seg. Inneholder en liste over hvem som var med og hvor mange poeng de fikk, et stolpediagram over alle deltakerne og poengsummen, og et stolpediagram for hver enkelt deltaker som viser de ulike plasseringene deltakeren fikk. Grafene blir laget ved hjelp av Google chart tools. Figur 16: Skjermbilde for statistic.ejs 59 6. Evaluering av arbeidet I innledningskapittelet ble det beskrevet formål og resultatmål for oppgaven. I dette evaluerings kapitlet blir både måloppnåelse og arbeidsprosessene i bachelor oppgaven evaluert. 6.1 Vurdering av målrealisering 6.1.1 Formål og resultatmål Det er kartlagt flere mulige markedsområder for Cruntch!. De største er media markedet og innenfor sensoriske analyser i forskningsmarkedet som hjelpemiddel innen produktutvikling. Et helt nytt anvendelsesområde som har vokst frem i kjølvannet av den store veksten i bruk av sosiale medier, er noe vi har kalt kundebestemt produktutvikling. Vi har også relatert en mulig bruk av Cruntch! til mentometerknapper som brukes i konferanser og undervisning. Et annet anvendelsesområde i mindre skala kan være beslutningsstøtte for indvider og grupper. Det er utviklet en fungerende web side for å gjennomføre stemmegivning og visning av resultater. Applikasjonen er lagt til rette for skalering gjennom bruk av JavaScript og Node.js Databasen er grovt designet, men er ikke implementert da dette ble en for omfattende oppgave innenfor denne tidsrammen. 6.1.2 Læringsmål Oppdragsgiver har etterspurt en skalering for bruk av sitt statistiske verktøy. Ved å jobbe med oppgaven fant vi at oppdragsgivers implementering var en verdifull inspirasjon til å designe tilsvarende funksjonalitet i moderene verktøy og rammeverk. Da den originale kildekoden ikke var kjørbare i sin presenterte form, ga dette et godt incentiv til å sette seg inn i PHP, som var det opprinnelige programmeringsspråket og å lære 60 seg å bruke nye programmeringsspråk som JavaScript og rammeverket Node.js og andre web utviklings verktøy. Planlegging har vært helt nødvendig for å kunne komme igjennom alt arbeidet. Prosjektstyringsverktøy krever mye for å holde dem oppdatert, og hvis de ikke er oppdatert er de til liten nytte. Gant diagrammer er tidkrevende fordi de må oppdateres forløpende og justeres ved endringer. De store planverkene ble derfor raskt erstattet med mindre lister og oversikter over oppgaver og tidsfrister for å ha en oversikt og huske alt. Git var ikke nødvendig etter at det ble klart at jeg skulle fullføre oppgaven alene. Skriving av rapporten ble en av de største oppgavene og som det var satt av for lite tid til. Disposisjonen for rapporten ga strukturen, men den har vært endret underveis ettersom innsikten i materialet har økt. 6.2 Evaluering av og læring om samarbeid Det var et krav fra HIOA at bacheloroppgaven skulle skrives i en gruppe på 2 til 4 studenter. Da jeg meldte meg som student til bachelor oppgaven primo januar, var allerede gruppene etablert og jeg måtte finne en gruppe å arbeide i selv. Jeg sendte da en individuell mail til alle de 12 gruppene som hadde mindre enn 4 deltagere. Jeg presenterte meg og spurte om det var mulig å få lov til å samarbeide med dem. Jeg fikk raskt svar fra 3 grupper hvorav en beklaget at oppgaven var for liten i omfang til å være flere studenter. To andre grupper svarte hyggelig at jeg kunne få en samtale med dem og diskutere muligheten for samarbeid. Begge gruppene besto av tre studenter. Den ene gruppen skulle lage en hjemmeside for et arkitekt kontor. Den andre gruppen skulle lage både hjemmeside og database for en prosjektide fra en oppdragsgiver på HiOA, som jeg valgte å delta i fordi jeg syntes det var faglig mer utfordrende. 61 6.2.1 Samarbeid i gruppe Både prosjektskisse og forprosjekt rapport var innlevert da jeg startet i gruppen. Gruppen var dermed relativt godt etablert blant de 3 studentene som også kjente hverandre fra studieretningen Anvendt Data. Gruppe leder var også valgt. Vi var imidlertid enige om at gruppen fikk et bredere kompetanse grunnlag med min bakgrunn fra Dataingeniør linjen. For å løse oppgaven ble arbeidet delt i fire delprosjekter med fire delprosjektledere: 1. Front-end 2. Database 3. Back-end 4. Dokumentasjon Jeg påtok meg oppgaven med å designe og programmere nettsiden, da jeg har løst flere slike oppgaver tidligere i studiet. I starten kommuniserte gruppen på Skype eller i møter en gang i uken. Ganske raskt sank kommunikasjons hyppigheten og det ble ikke vist til noen resultater fra de ulike delprosjektene med begrunnelsen at arbeids oppgavene var vanskelig. Først etter 8 uker søkte gruppen hjelp til database utviklingen hos oppdragsgiver, og veileder ble ikke kontaktet til tross for utfordringene vi opplevde. Jeg opplevde det som vanskelig å ta en mer ledende plass i en allerede etablert gruppe. Da jeg til sluttet snakket med veileder, rådet han meg til å ta ansvar for min egen eksamen og levere en individuell oppgave 6.2.2 Samarbeid med oppdragsgiver og veileder på HIOA Da jeg først tok kontakt med oppdragsgiver og veileder fikk jeg god hjelp både i møter og på mail. Disse har sikret framdriften for oppgaven. 62 6.2.3 Ide dugnad med eksterne Da jeg startet å arbeide alene, opplevdes det som nesten umulig å kunne fullføre. Da det ble foreslått at jeg kunne lage en ide dugnad, fikk jeg mye inspirasjon og ideer til hvordan jeg kunne komme videre. Å delta i en idedugnad med mer erfarne mennesker var spennende. De er mer ukritsiske til hva de faktisk kan akkurat nå og har mer pågangsmot til å finne ut av ting, selv om de var tydelige på at det var jeg som måtte gjøre den jobben i dette prosjektet. 6.3 Vurdering av produktutviklings prosessen 6.3.1 Designprosessen Det var planlagt å gjennomføre reelle User story og Use case intervjuer med utvalgte sluttbrukere og å bruke resultatene inn i design prosessen. Business case analysen viste imidlertid at Cruntch! i hovedsak henvender seg til et i utgangspunktet nisjepreget behov i bedriftsmarkedet. De viktigste sluttbrukerene som er identifisert, ville være innenfor media og forsknings segmentet hvor vi ikke hadde noen nære kontakter. Også innenfor personmarkedet som vennegjenger og personlig beslutnings støtte var det vanskelig å gjennomføre åpne, ikke ledende intervjuer fordi personene vi møtte ikke hadde erkjent noe behov for et rangerings verktøy basert på avstemminger. Bloggposter fra publikum som kommenterer TV sendinger som Idol og er referert i rapporten, viser imidlertid at avstemminger engasjerer og kan vekke sterke følelser som sinne og aggresjon. 63 Av praktiske hensyn er det ikke gjennomført reelle bruker intervjuer bortsett fra ett som avdekket et mulig behov for personlig besluttningsstøtte. Studentens egen situasjons forståelse, som muligens ikke er helt i tråd med sluttbrukeres faktiske behov, er lagt til grunn for designprosessen. 6.3.2 Turneringsoppsettet Oppgaven var svært utfordrende da bare det å forstå Cruntch! algoritmens turnerings logikk i praktisk anvendelse var vanskelig. Som teori kapittelet viser, er det er mange muligheter for turneringsoppsett. Det ble usikkert om utgangspunktet for oppdragsgivers algoritme var det mest hensiktsmessige valg for å kunne produsere et praktisk anvendelig produkt. Fortåelse av turneringsoppsettet var det viktigste design kriteriet for front end og brukergrensesnittet. Den opprinnelige algoritmen er beholdt, og det er valgt å se bort fra alternative forståelser og løsninger, som muligens ville vært bedre tilpasset praktiske bruker situasjoner. Da dette er en bachelor oppgave innenfor data, er det valgt å legge det meste av ressursene inn i arbeidet med programmering for å vise at studenten evner å utvikle en web applikasjon i moderne programmeringsspråk og rammeverk innenfor oppgavens tidsramme Mulighetene for skalering var en sentral driver for videreutvikling av Cruntch!. Skaleringen kan skje i to dimensjoner: Flere stemmegivere og flere alternativer å stemme på. Flere alternativer gir mange sub avstemminger for den enkelte stemmegiver, noe som forlenger tiden stemmegiver må benytte - da maksimum antall avstemminger er n-1og minimum antall avstemminger er n-2. Melodi Grand Prix caset som er belyst i rapporten er beregnet å ta omlag 8 minutter dersom det er 16 konkurrerende sanger med. Dersom denne private avstemmingen oppleves som underholdende, er det kurant og en tilførsel av merverdi for TV programmet. Dersom avstemmingen forventes å være 64 unnagjort med samme tidsforbruk som en sms stemme, blir Cruntch! en altfor tidkrevende avstemmings løsning. Ulempen med dagens Crunch! sin algoritme er at den bare egner seg for avstemminger med et konkurrent antall som er delelig med 4. Finalen i feks Melodi Grand Prix har 21 deltagere og kunne derfor ikke benyttet Cruntch! i dag. Flere stemmegivere belaster bare server kapasiteten og antallet kan være nærmest ubegrenset. En million stemmegivere er ikke uvanlig i feks USA og vil kunne håndteres av Crunch! når den er designet for bruk av nettskyen. Innenfor utgangs algoritmens begrensninger kan det konkluderes med at Cruntch! er modernisert og skalerbar med hensyn på antall stemmegivere. Når det gjelder antall variable/konkurrenter, anbefales det å ikke overstige 4 eller 8 pr turnering. For at stemmegiver skal kunne følge med på turneringens utvikling ville det vært hensiktsmessig om turnernings oppsettet og progresjonen i turneringen ble vist i et diagram på avstemmings siden. Dette anbefales gjennomført under videre arbeid. 7. Konklusjon og videre arbeid Gjennom arbeidet med denne bachelor oppgaven har Cruntch! kommet nærmere til å bli en fullstendig skalerbar web applikasjon. Front end fungerer for småskala turneringer, men det gjenstår å programmere databasen. 65 Innenfor utgangs algoritmens begrensninger kan det konkluderes med at Cruntch! er modernisert og skalerbar med hensyn på antall stemmegivere. Når det gjelder antall variable/konkurrenter, anbefales det å ikke overstige 4 eller 8 pr turnering. Business caset viser at det er marked for turnerings verktøy. Det gjenstår mye research hos mulige kunder for å brukertilpasse applikasjonen til de spesifikke kundesegmentene. Det gjenstår også mer forretningsutviklings analysearbeid før det bør taes beslutninger om å kommersialisere web applikasjonen Cruntch! Innenfor det tekniske området foreslås det å gjennomføre følgende utviklings oppgaver: Algoritmen må kunne håndtere alle tall og ikke bare 2 . En grafisk representasjon av hvor man befinner seg i turneringen når man n stemmer. Lage en app for mobiltelefoner For å optimalisere designet bør det gjennomføres reelle brukerintervjuer for segmenter av brukere med ulike funksjonskrav En innloggingsfunksjon hvis brukerene har lyst til å se på gamle turneringer. 66 Kilder Kilder turneringer: http://www.thefreedictionary.com/tournament http://en.wikipedia.org/wiki/Tournament http://en.wikipedia.org/wiki/Single-elimination_tournament http://www.sjakkskolen.no/instrukt%C3%B8r/lage-turenring/ http://en.wikipedia.org/wiki/Round-robin_tournament Kilder teknologi: http://www.slideshare.net/randyconnolly/chapter01-presentation16514220?qid=0f2cbe87-e797-4c46-a380-cff971c72399&v=default&b=&from_search=1 http://nn.wikipedia.org/wiki/Linux http://en.wikipedia.org/wiki/Apache_HTTP_Server http://no.wikipedia.org/wiki/HTML http://no.wikipedia.org/wiki/HTTP http://no.wikipedia.org/wiki/PHP http://no.wikipedia.org/wiki/JavaScript http://en.wikipedia.org/wiki/Node.js http://en.wikipedia.org/wiki/Express.js http://no.wikipedia.org/wiki/API_%28programmering%29 http://www.sqlserver.no/hva-er-en-relasjonsdatabase/ Databasesystemer. Bjørn Kristoffersen. 3. utgave. Universitetsforlaget 2012. s.9 http://no.wikipedia.org/wiki/MySQL http://en.wikipedia.org/wiki/MongoDB http://en.wikipedia.org/wiki/CouchDB http://no.wikipedia.org/wiki/Cascading_Style_Sheets http://en.wikipedia.org/wiki/Representational_state_transfer http://no.wikipedia.org/wiki/SOAP http://getbootstrap.com/2.3.2/ 67 http://no.wikipedia.org/wiki/Nettskyen Kilder metode: http://no.wikipedia.org/wiki/Model–view–controller http://www.kreativtnorge.no/Kreative_Prosesser/idedugnader.htm http://customerdevlabs.com/2013/11/05/how-i-interview-customers/ http://no.wikipedia.org/wiki/Scrum http://no.wikipedia.org/wiki/Prosjektstyring http://no.wikipedia.org/wiki/Business_case http://en.wikipedia.org/wiki/Trello http://en.wikipedia.org/wiki/Use_case http://en.wikipedia.org/wiki/Use_Case_Diagram http://en.wikipedia.org/wiki/User_story#Story_map http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_mode Kilder analyse: http://www.vg.no/rampelys/tv/gullruten/her-er-de-fire-publikumpris-finalistene/a/23444061/ http://www.vg.no/rampelys/tv/idol/raser-over-idol-avstemning/a/223482/ http://vgd.no/musikk-tv-og-film/idol/tema/1307103/tittel/rettferdig-telefonavstemning http://en.wikipedia.org/wiki/American_Idol#Season_14 http://www.itv.com/news/2012-05-24/x/ http://no.wikipedia.org/wiki/TV_2_Interaktiv_%28Norge%29 http://www.dn.no/etterBors/2004/02/26/tv-2-tjener-fett-pa-idolavstemninger http://no.wikipedia.org/wiki/Sensorikk http://no.wikipedia.org/wiki/Ti_i_skuddet http://sv.wikipedia.org/wiki/Mentometerde største http://www.smartvote.no/ http://www.virrevapp.no/pages/barnas-designkonkurrans http://speiltvillingene.blogg.no/1385538928_morgenstund_.htmle 68 www.votefair.org/americanidol.html http://no.wikipedia.org/wiki/Eurovision_Song_Contest http://www.ministryoftruth.me.uk/2014/09/03/do-goldfish-have-a-longer-attentionspan-than-american-internet-users/ https://snl.no/kravspesifikasjon%2FIT https://lovdata.no/dokument/SF/forskrift/2013-06-21-732 http://no.wikipedia.org/wiki/Universell_utforming http://www.w3.org/Translations/WCAG20-no/ 69 Vedlegg A Arbeidsplan Oppgave Innhold Metoder Prosjektstyring Samarbeidskontrakt Prosjektdagbok Milepælsplan Risikoplan Kommunikasjon Verktøy og hjelpemidler Utviklingsmodell Smidig metodikk Use case ER-modell Analyse Businesscase Hva er dette konseptet Anvendelsesområder Hva eksisterer av produkter i dag Hvem er kunder Hvilke aktører er på markedet Hvem bruker dette? Hvorfor bruker de det Hovedfunksjoner for systemet 70 Kravspesifikasjon Hva som var planlagt i gruppen/oppdragsgiver Funksjoner for bruker Komplett kravspek i vedlegg System design Applikasjonen hvorfor – business case, businessmessig edge. Hovedkonseptet Raskt, elegant, brukervennlig, salgbarhet , krever dynamisk oppdatering, statistikk over tid og elementene Web server ikke spesielle krav til sikkerhet enkel må kunne håndtere sesjoner, huske hvem som er inne på skjermbildet, flere bukere cookies dimensjoneringskriterie flere 1000 samtidige brukere sideskifte 4x/min båndbredde ikke spesielle krav Database ER-modell Lagre alle konkurranser, mange alternativer Hvert alternativ har bare en konkurrent 71 En til mange relasjon Tegne et skjema som viser hva som må gjøres Alt 1 mongo/couch Alt 2 SQEL – har de fra før – vurdere hva som er raskest Websider Nettsider – prinsipper Nettsidens struktur Side struktur – liste opp alle og sketch mock up Use case beskrivelser Applikasjonesdesign – dataflyt diagram Database design Beskrive Json dokumentet som skal inn i databasen Skisser Evaluering - fordeler /ulemperved alternativ 1 og 2 Universell utforming 72 Implementering Database Hva er MongoDB og CouchDB Hvorfor dokument og ikke relasjon? Evaluering av arbeidet Samarbeid i gruppe Ide dugnad med eksterne Eget arbeid gruppe/alene Produktet Konklusjon og forslag til videre arbeid Vedlegg 73 Vedlegg B Tabell 1: Risikomatrise Konsekvens: Ubetydelig Liten Moderat Alvorlig Svært Sannsynlighet: alvorlig Liten 4,5 Middels 2 Stor Svært stor 1 3 · Grønt felt = Lav risiko à akseptabelt · Gult felt = Middels risiko à individuell vurdering · Rødt felt = Høy risiko à uakseptabelt 1. Sykdom: Sykdom blant gruppemedlemene over en fem måneders periode er nesten noe man må regne med. Det er derfor viktig å ha gode rutiner når det kommer til kommunikasjon og deling av arbeid, slik at de andre på gruppen vet hva den personen som blir syk jobber med og enkelt kan ta over. Ved langtidssykdom vil konsekvensene bli større, men det samme gjelder også her. 2. Ny teknologi: I prosjekter der nye teknologier skal brukes vil det være hensiktsmessig å sette av en periode til fordypning eller budsjettere med litt ekstra tid. I noen tilfeller kan de nye teknologiene være dårlig dokumentert og prosjektet kan stoppe opp, for å forhindre dette vil det være lurt å se litt på teknologiene under planleggingsfasen. 74 3. Tidsmangel: Alle prosjekter vil på et eller annet tidspunkt oppleve at de burde hatt mer tid. Det er derfor viktig å lage en realistisk framgangsplan og legge inn rikelig med buffere slik at man har litt ekstra å gå på. 4. Tap av data: Hvis hele prosjektet blir borte så vil det selvfølgelig få katastrofale konsekvenser. For å forhindre dette er det viktig å lagre ofte og på mange forskjellige steder, hvis alle på gruppen har en oppdatert kopi av prosjektet og det ligger på gitlab er sjansene for at alt forsvinner nærmest lik null. 5. Interne problemer: Interne problemer er veldig vanlig i gruppearbeider. De kan variere fra små uenigheter til store krangler og konsekvensene vil variere deretter. God kommunikasjon vil virke forebyggende. 75 Vedlegg C Prosjektskisse Oslo, 2014 Prosjektskisse Hovdeprosjekt i Anvendt Datateknologi ved Høgskolen i Oslo og Akershus - Våren 2015 Cruntch! Medlemmer Alexander N. S. Storhaug, S180479 Mikkel B. Oddum, S189144 Aleksander Skodbo, S189107 Oppdragsgiver Kyrre Begnum, Institutt for Informasjonsteknologi, HIOA Epost: [email protected] Beskrivelse I dette prosjektet skal vi lage et verktøy i form av en webside hvor brukere kan starte en avstemming, hvor man skriver inn alternativene som så blir satt opp mot hverandre to og to, for å finne ut hva en gruppe mennesker liker. Videre kan denne brukeren dele avstemmingen med venner for å få de til å gå gjennom samme prosess med to og to alternativer opp mot hverandre. Så vil en algoritme, som allerede er utviklet, finne ut hvilket av alternativene brukeren foretrekker og tilslutt vil man ha en oversikt som viser hva alle gruppen samlet foretrekker. Et av styrkene til Cruntch! er at den analyserer hvilke alternativer som konsekvent taper over et annet, man får derfor et mer nøyaktig liste. 76 Prinsippet kan overføres til mange forskjellige bruksområder, som f.eks å finne ut hva en gruppe vil ha på pizzaen man skal bestille, hvilken film man skal se, eller til forskning. Oppdragsgiver har allerede laget en fungerende prototype i PHP, men denne skal vi vidreutvikle og designe til å bli en elegant og brukervennlig tjeneste som er lett å bruke. Tjenesten skal være en webside som også skal fungere på mobil, og det er viktig at det er mulighet for oppskalering for å kunne ta i mot høy pågang. Github skal brukes for versjonskontroll og for å lettere dele kode med oppdragsgiver for vidreutvikling. En opensource og skalerbar database, f.eks mongoDB eller couchDB, skal brukes, men det er ikke bestemt hvilken. Moderne rammeverk skal brukes, f.eks NodeJS, men det er ikke bestemt hvilket. 77 Vedlegg D Forprosjektrapport Presentasjon Tittel: Cruntch Oppdragsgiver: Kyrre Begnum, HIOA Oppgave: Videreutvikle en eksisterende prototype til en fungerende webtjeneste hvor brukere kan lage og gjennomføre avstemninger i form av en turnering Periode: 05.01.2015 - 26.05.2015 Gruppenummer: 8 Gruppemedlemmer: Alexander N.S. Storhaug, s180479 Mikkel B. Oddum, s188144 Aleksander Skodbo, s189107 Morten Wedum, S182855 Gruppetalsmann: Aleksander Skodbo Veilder: Thor E. Hasle Prosjektside: bachelor.skodbo.no Sammendrag: Cruntch! er en løsning som kan brukes til å bestemme det mest populære i en liste med elementer. Bruksområdene er varierte, og tjenesten kan brukes i alt fra vennegjenger til profesjonelle arbeidsgrupper. For å få til dette bruker Cruntch en cupalgoritme som setter to og to elementer opp mot hverandre. Vinnere og tapere fordeles og kjemper mot hverandre, helt til man sitter igjen med en komplett rangering. Løsningen skal fungere slik at brukere kan opprette og administrere sine cuper, og dele dem med de personene de ønsker. Løsningen skal også være utviklet slik at den fungerer sømløst på både stasjonære og mobile enheter. Løsningen skal utvikles ved hjelp av HTML, CSS, CouchDB og Javascriptmoduler(NodeJS, ExpressJS, JSON). Oppdragsgiver har ikke gitt noen krav om teknologi, utenom bruk av CouchDB og at 78 løsningen skal programmeres med det formål at den kan skaleres opp for kraftigere pågang. Dagens situasjon Bakrunnen for Cruntch! er en idé oppdragsgiver hadde lyst til å sette ut i live. Han så derfor på det som aktuelt at en bachelorgruppe kunne bruke denne ideen som sitt prosjekt. Det er laget en fungerende prototype av tjenesten. Denne er skrevet i PHP og veldig lite CSS, som viser at konseptet fungerer. Mål og rammebetingelser Videreutvikle og designe en brukervennlig og elegant løsning basert på prototype som arbeidsgiver allerede har laget. Arbeidsgiver ville at vi skulle bruke en skalerbar database, hvor coutchDB har blitt gitt som eksempel, da han ønsker mulighet for at tjenesten kan skaleres opp. Tjenesten vil bli skrevet i HTML, CSS og JavaScript. For JavaScript vil vi bruke node.js, express.js og JSON. Vi ser ikke bort ifra at vi kommer til å være borti jQuery også. For at tjenesten skal være rask vil vi bruke node.js sammen med express.js. Resten vil skrives i HTML og CSS. Arbeidsgiver har ikke gitt oss noen krav til utseende, og vi har heller ikke bestemt oss for om vi skal bruke et CSSrammeverk eller skrive CSS’en selv. Algoritmen som brukes i prototypen skal også brukes i det ferdige produktet. Med tanke på skalerbarhet ønsker arbeidsgiver også at tjenesten skal kunne kjøres på flere servere. Arbeidsgiver ønsker også at vi bruker Git for versjonskrontroll og Trello.com for prosjektstyring. Løsninger/alternativer Alternativ 1: Løsningen er per dags dato skrevet i PHP og bruker MySQL database, denne fungerer fint. Vi kunne derfor kun fokusert på å lage en pen og brukervennlig løsning. Problemet med dette er at PHP ikke er raskt nok når denne tjenesten skal ha mange brukere og MySQL ikke er lett å skalere opp Alternativ 2: Skrive webtjenesten utifra webprogrameringsspråk og tjenester som arbeidsgiver ønsker og har foreslått. Dette innebærer Node og CoutchDB, resten velger vi selv. Dette vil gi arbeidsgiveren en rask og skalerbar tjeneste. 79 Analyse av virkninger Dersom man benytter seg av alternativ 1, så vil man ikke få den løsningen oppdragsgiver ønsker seg. Selv om det vil være en mulig løsning på oppgaven, så vil den ikke være aktuell. Det er ikke bare på grunn av løsningens behov, men også oppragsgivers ønske av teknologi. Alternativ 2 er for oss den eneste akutelle løsningen, da vi føler at denne vil gi oss muligheten til å utvikle løsningen vi ønsker, med mulighet for oppskaler om det blir behov for å takle større pågang på nettsiden. Teknologien vi har valgt gir oss nettopp denne løsningen, samtidig som vi kan lage en god og responsiv nettside. Vedlegg: Fremdriftsplan Fremdriftsplan NB! Merk at denne planen ikke er endelig og at endringer kan forekomme Faser Varighet Beskrivelse Prosjektopp- 01.01.2015 Møter med arbeidsgiver, veileder og gruppemedlemmer start 23.01.2015 skal gjennomføres. Prosjektskisse, forprosjekt og fremdriftsplan skal planlegges og ferdigstilles. Innsiktsfasen 26.01.2015 Innsiktsfasen av prosjektet tar for seg kartlegging av de 08.02.2015 nøyaktige rammene for software siden av prosjektet. Planlegging av sprint 1 Iterasjon 1 09.02.2015 Sprint 1 utføres Første sprint 22.02.2015 Planlegging av sprint 2 Iterasjon 2 23.02.2015 Sprint 2 utføres Brukertesting 08.03.2015 Brukertesting av grensesnitt 1 Planlegging av sprint 3 Andre sprint Iterasjon 3 09.03.2015 Sprint 3 utføres Tredje sprint 22.03.2015 Planlegging av sprint 4 80 Iterasjon 4 06.04.2015 Sprint 4 utføres Brukertesting 19.04.2015 Brukertesting av endringer gjort i brukergrensesnitt 2 Planlegging av sprint 5 Fjerde sprint Iterasjon 5 20.04.2015 Sprint 5 utføres Femte sprint 03.05.2015 Planlegging av sprint 6 Iterasjon 6 04.05.2015 Sprint 6 utføres Sjette sprint 18.05.2015 Ferdigstillelse 18.05.2015 Ferdigstillelse av prosjektet 26.05.2015 Leveranse 26.05.2015 Endelige datoen for leveranse av bachelorprosjektet Presentasjon 06.2015 Muntlig presentasjon av bachelorprosjektet 11.06.2015 Figur 17: Milepælsplan 81 82
© Copyright 2024