Examensarbete. LMSEngine API. Utveckling av en plattform för e-learning. Fredrik Johansson Ämne: Datavetenskap Nivå: B Kurskod: 1DV40E

Relevanta dokument
Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling

SLUTRAPPORT WEBBPROJEKT 1

Slutrapport Thunderbug

Slutrapport YUNSIT.se Portfolio/blogg

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Webbtjänster med API er

Slutrapport för JMDB.COM. Johan Wibjer

Webbservrar, severskript & webbproduktion

SLUTRAPPORT RUNE TENNESMED WEBBSHOP

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Webbprogrammering TDDD52

Projektarbete myshop. Sandra Öigaard so222es WP12 Individuellt mjukvaruutvecklingsprojekt

Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10

CMS, optimerade för programmerare Eller hur kan ett sådan skapas.

Webbprogrammering, grundkurs 725G54

VAD GÖR DU / VEM ÄR DU?

XtraMatLagning. August Ek och Oscar Johnson. TNM065 Dokumentstrukturer

Elektronisk publicering TNMK30

Henrik Häggbom Examensarbete Nackademin Våren 2015

Webbprogrammering, grundkurs 725G54

Projekt Foreläsning VI

Introduktion till MySQL

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

E12 "Evil is going on"

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Individuellt Mjukvaruutvecklingsprojekt

Slutrapport Get it going contracts

Priskamp. En prisjämförelsesite Björn Larsson

Filhanterare med AngularJS

Vis it. jquery jquery används lite överallt i appen på olika sätt. Det främsta användningsområdet är vid selektering och manipulering av HTML element.

API:er/Mashup. Föreläsning 4 API:er och Mashups. Johan Leitet johan.leitet@lnu.se twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Mål med lektionen! Veta kursmålen. Ha kännedom om några av de grundläggande begreppen.

KONSULTPROFIL Juan. Systemutvecklare.NET/EPiServer/Commerce. Sammanfattning. Kompetens. Uppdrag

HejKalmar app. Projektrapport. Webbprojekt I

Guide för Innehållsleverantörer

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Har du läst kursen på Campus eller distans Campus 8 53% Distans 7 47%

Mina listor. En Android-applikation. Rickard Karlsson Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.

Utvecklingen av ett tidregistrerings- och faktureringssystem

Handledning för installation och komma igång med Joomla

SEGLAISOLEN.SE En Wordpres Webbsajt

Tepz klon. - Projektrapport. Linnéuniversitetet, Individuellt mjukvaruutvecklingsprojekt Janina Bergström, WP12 Distans

Designmönster i Javascript

SLUTRAPPORT. Sebastianlund.com. Individuellt mjukvaruutveckingsprojekt, 1DV430. Författare: Sebastian Lund WP11 Datum:

Uppdragsbeskrivning. Paddel-appen Utmärkta kanotleder. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.

Hemsideutveckling för Anjool AB

PHP-presentation Dataföreningens Open Source-nätverk

1DV411 Webbprojekt I Slutrapport

Javautvecklare. Utbildningsfakta. 400 YH-poäng, 2 år

Mjukvaruprojekt Onlinebooks

Laboration 2 RESTful webb-api

hannalabom.se Alexandra Jonasson Aj222im

Inkapsling (encapsulation)

Projektuppgift - Biblioteket

Kursplanering Utveckling av webbapplikationer

12 juni 2009 Projektplan Webb-baserat bokningssystem för flyg Kurs: Applikationsutveckling för internet, TFE

Manual - Storegate Team med synk

VAD GÖR DU / VEM ÄR DU?

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

Projektuppgift - Gymmet

Administrationsmanual ImageBank 2

Projektanvisning. Webbsideprojekt. Författare: Johan Leitet Version: 2 Datum:

Introduktion till Entity Framework och LINQ. Källa och läs mer

Migrering av applikationen AMM till molnet

Inledande programmering med C# (1DV402) Introduktion till C#

Collector en Android-app för att samla saker. Kim Grönqvist (kg222dk) Slutrapport

Slutrapport. APFy.me

Institutionen för Tillämpad fysik och elektronik Stefan Berglund och Per Kvarnbrink. Laboration: Flerskiktade applikationer

Storegate Pro Backup. Innehåll

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

MVC med Javascript och Ajax. Filip Ekberg

WP-Edit. Robin Larsson Martin Davik. Examensarbete, grundnivå, 15 hp Datavetenskap Internetteknologprogrammet

Gillakampen. av Merkur Hoxha WP

Webbprogrammering. Sahand Sadjadee

Twisted Scissors. Ett projekt i kursen tnm /2007. Björn Gustafsson bjogu419@student.liu.se. Mats Wedell matwe812@student.liu.

Installera din WordPress med 9 enkla steg

Webbprogrammering 725G54

Analys av BI-system och utveckling av BIapplikationer

F Secure Booster är ett verktyg för att snabba upp och städa upp i din pc eller

TMP Consulting - tjänster för företag

Zendesk standard konfiguration Nordisk e handel 1.1

Manual för Typo3 version 4.2

Varningssystem byggt på öppna källkodskomponenter Magnus Runesson SMHI

Manual - Storegate Team

WebViewer Manual för administratör Nova Software AB

Manual - Storegate Team

Plugboard Guide till WooCommerce. Stöder - WooCommerce 3.x

X-jobbs katalog. Medius R&D November 2011

1DV405 - Databasteknik. Kursintroduktion. Så här är kursen planerad.

CMS. - Content management system

Slutrapport för SquareShooter

Systemutvecklare SU14, Malmö

Innehåll. MySQL Grundkurs

Game of 40. Regler och om sidan är in princip samma sak. Det som skiljer dem åt är att de inte har samma text.

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Transkript:

Examensarbete LMSEngine API Utveckling av en plattform för e-learning Fredrik Johansson 2010-06-09 Ämne: Datavetenskap Nivå: B Kurskod: 1DV40E

Abstrakt Arbetet handlar om utveckling av ett e-learningsystem och hur man kan säkra koden för framtiden. Dessutom handlar det om att undersöka en möjlig implementation av standarden SCORM samt att ta fram en ny databasmodell. Efter förundersökning togs beslutet att genomföra projektet som ett API i grunden med testdriven utveckling och tillhörande dokumentation. De tekniker som användes var; HTML, CSS, XML, PHP, MySQL, Javascript, och Codeigniter. Resultatet blev som förväntat förutom att det inte gick att återanvända koden i den utsträckning som först uppskattades utan istället återanvändes idéer och problemlösning. Abstract This thesis is about an e-learning system and how to secure the code for future development. In addition, it is about a conceivable implemention of the SCORM standard and to develop a new database model. After preliminary investigation it was decided to proceed with the project as an API and to use test-driven development and also to write documentation. The techniques used were: HTML, CSS, XML, PHP, MySQL, Javascript, Codeigniter. The result was as expected except that it was not possible to reuse the code in the extent which was first estimated, but instead re-use ideas and how to solve problems. Fredrik Johansson - I -

Förord Denna rapporten är ett examensarbete på Linnéuniversitetet våren 2010 i datavetenskap som behandlar utveckling av ett system för e-learning eller LMS (Learning Management System). Projektet innebär att säkra koden för framtida utveckling samt ett önskemål om att implementera standarden SCORM (Shareable Content Object Reference Model). Tack till min handledare Daniel Toll på Linnéuniversitetet och till kunden Jonas Malmkvist. Jag vill också skicka ett tack till Johan Leitet plus alla kurskamrater för en mycket lärorik resa de senaste två åren. Fredrik Johansson - II -

Innehållsförteckning 1. Introduktion...1 2. Bakgrund...2 2.1 Verksamhetsbeskrivning...2 2.2 Problemställning...2 2.3 Förundersökning...2 2.4 Avgränsningar...3 3. Mål...4 4. Genomförande...5 4.1 Metod...5 4.2 Arbetssätt...6 4.3 Val av teknik...6 4.3.1 PHP...6 4.3.2 MySQL...7 4.3.3 Ramverk...7 4.3.4 Testdriven utveckling...7 4.3.5 API...7 4.3.6 XML...7 4.3.7 MVC...8 4.3.8 PEAR...8 4.4 Databasmodell...9 4.5 Metoddiskussion...10 5. Resultat...11 5.1 Måluppfyllelse...11 5.2 Resultat i bilder...12 6. Diskussion...18 7. Källförteckning...19 7.1 Elektroniska källor...19 8. Bilagor...20 8.1 Bilaga MySQL vs PostgreSQL...20 8.1.1 Bakgrund...20 8.1.2 Mål...20 8.1.3 Diskussion...20 8.1.4 Slutsats...21 8.1.5 Elektroniska Källor...22 Fredrik Johansson - III -

1. Introduktion Arbetet handlar om att skapa ett nytt system för e-learning som är enkelt att underhålla samt är hållbart för framtiden. Kunden har redan en plattform idag men den är inte helt optimal och är i behov av en genomgång. Att ha en bra plattform för att erbjuda moderna utbildningar via internet är en stor affärsmöjlighet om man kan bygga det på ett bra sätt. De större kunderna kan ha en egen plattform som de kör och då är det intressant hur man kan dela informationen som finns i kurserna. Då vänder man sig till standarden som heter SCORM som står för Shareable Content Object Reference Model (wikipedia.org, 2010). Detta är något som kommer att undersökas; hur det skulle kunna implementeras. Förutom detta kommer en undersökning att göras med skillnaden mellan databaserna MySQL och PostgreSQL för att kunna ge den bästa rekommendationen vilken databas man ska använda. 1

2. Bakgrund 2.1 Verksamhetsbeskrivning Kunden har idag ett system för e-learning men det är gammalt och de har byggt ut med många förändringar som inte är helt optimala. Ofta har de skapat en ny tabell i databasen bara för att det behövs utan någon större tanke hur det påverkar resten av systemet och databasen i sig. Förmodligen har detta blivit så för att slutkunden har behövt en specifik funktion så fort som möjligt och det har därmed inte funnits tid för eftertanke. Dessutom är nuvarande system byggt proceduellt utan någon struktur eller uppdelning i lager. Detta medför att systemet blir svårare att underhålla. Arbetet kommer att gå vidare ifrån detta utgångsläge genom att först undersöka vad SCORM är och vad det innebär med SCORM-kompabilitet för att sedan analysera nuvarande plattform samt databasmodell. 2.2 Problemställning Här nedan finns en lista på de frågor som uppkom för att skapa nödvändiga avgränsningar och gå vidare i projektet: Hur ska man implementera SCORM-kompabilitet? Vilken kod kan man återanvända i nuvarande plattform? Hur bygger man en ny databasmodell för att kunna användas med SCORM? Vilka funktioner finns idag som behöver vara med i det nya? Behövs det att några förbättringar i existerande funktioner? Kan man återanvända nuvarande databasmodell eller delar av den? 2.3 Förundersökning En del i projektet var att undersöka och implementera en standard för e-learning som heter SCORM vilket står för Sharable Content Object Reference Model. Man kan kort sammanfatta denna standard som en svit av flera olika tekniska standarder för hur man kan importera och återanvända kursmaterial (adlcommunity.net, 2010). På den högsta nivån är SCORM indelat i Content Aggregation Model (hädanefter förkortat CAM) som behandlar hur data ska paketeras och levereras följt av Run Time Enviroment (hädanefter förkortat RTE) vilket är kärnan för systemet som är ett API. Efter vidare läsning om CAM och RTE så inser man hur stort och komplicerat det är med att implementera SCORM-kompabilitet vilket betyder att uppgiften behövas brytas ner för att den ska bli enklare samt genomförbar. 2

2.4 Avgränsningar Efter förundersökningen blev det klart hur stort projektet egentligen är vilket betyder att man behöver göra avgränsningar för ett bra slutresultat. Då valdes det att bygga en ny databasmodell med tanken att den kan användas för SCORM-objekt och sedan fokusera på Run Time Enviroment. Vidare behöver det skrivas en enklare testklient för att dels visa funktionerna i API:et men även att testa API:et i en klient. Bild 2.3.1: Översiktsbild för implementationen av projektet och hur det kommer att fungera i slutänden. 3

3. Mål Projektets mål är att bygga en ny plattform för framtiden samt: Att bygga en ny kärna som ett API och återanvända kod om möjligt Att använda testdriven utveckling Att testa funktionerna i API:et i en testklient Att skriva dokumentation för API:et Att skapa en ny databasmodell för SCORM Att genomföra en undersökning om typ av databas 4

4. Genomförande 4.1 Metod Till en början behöver det nuvarande systemet undersökas och analyseras för att få med sig de funktionerna därifrån till det nya systemet. Detta löser man genom att gå igenom källkoden, databasen, titta på nuvarande plattform samt att prata med den utvecklare som jobbat mest med det gamla systemet. Efter en sådan undersökning är det även möjligt att bygga en ny databasmodell som kan användas för SCORM-objekt. För att skapa en ny struktur av källkoden är det bäst att följa en MVC-modell och sedan att dela upp modellen i ett Service-lager och ett Repository-lager. Se bilden nedan samt i 4.3. Bild 4.1.1: Bilden visar MVC-strukturen men även hur en begäran går till igenom alla lager i API:et till databasen Förutom att dela in strukturen i en MVC-modell valdes även att använda ett Service-lager som har till uppgift att kontrollera indata samt eventuella affärsregler. Sedan finns det ett Repositorylager som har uppgiften att spara eller hämta data i databasen samt se till att denna datan behandlas korrekt för att inte skapa någon säkerhetsrisk. 5

Som projektmodell har Iterativ utveckling (eng. Rational Unified Process) valts som innebär kontinuerlig kontakt med kund och att jobba i korta intervaller där alla parter får möjligheten att diskutera de framsteg som har gjorts under en iteration (wikipedia.org, 2010). 4.2 Arbetssätt Med erfarenheter ifrån en tidigare kurs (Webbprojekt I, våren 2010 vid Linnéuniversitetet) inhämtades många erfarenheter hur man utvecklar ett API vilket användes och blev ett sådant här arbetssätt: 1) Att skriva teknisk API-dokumentation för en funktion 2) Att implementera funktionen i API:et med Testdriven utveckling 3) Att implementera funktionen i testklienten 4) Att reflektera över funktionen och hur den funkar i testklienten mot API:et En fördel med att skriva den tekniska dokumentationen först är att man får en hjälp vid den riktiga implementationen av funktionen med till exempel parametrar plus att det blir någon som har läst igenom och kan då göra eventuella finjusteringar. 4.3 Val av teknik Projektet krävde någon sorts serverprogrammering och valet föll då på PHP därför att hanteringen av XML via funktionen SimpleXML är väldigt enkel samt effektiv. Till implementationen utav API:et valdes det att skapa ett eget enklare MVC-ramverk därför att det skulle ge flest fördelar prestandamässigt och då detta är kärnan är det viktigt att det har den bästa prestanda som kan fås. Men för att underlätta kan man använda delar ifrån biblioteket PEAR som mail-hantering och databaskommunikation. Gällande val av databas gjordes en undersökning om man skulle använda sig av PostreSQL eller MySQL (se bilaga 1). Resultatet och den slutsatsen var att det fortfarande är bäst att använda sig utav MySQL för att det ska fungera på så många webhotell som möjligt. 4.3.1 PHP PHP är ett serverspråk vars främsta syfte är att ta hand om kommunikationen från och till en databas så att man kan använda dynamisk information på en hemsida. Det vanligaste är att man tar emot informationen ifrån ett formulär (wikipedia.org, 2010). När man hämtar information ur databasen kan detta sedan levereras och presenteras för besökaren som en lista för att ge ett exempel. Genom att använda ett serverspråk har man även möjligheten att kontrollera att den data som skickas är korrekt enligt de regler man själv sätter upp. Det kan vara en regel att användarnamn måste skickas och vara mellan 5 till 15 tecken i längd. Dessutom har PHP en samling funktioner med namnet SimpleXML som gör att hantering av XML, både inläsning och att skapa, blir väldigt enkel med få rader kod. 6

4.3.2 MySQL MySQL är en fri databas som är licensierad under GNU General Public Licence. Den skapades av det svenska företaget MySQL AB 1995 men blev senare uppköpt av Sun Microsystems (wikipedia.org, 2010). Detta är en väldigt populär databas som används för att lagra information till flera andra stora projekt och företag som Wordpress, Drupal, Flickr och Facebook (wikipedia.org, 2010). 4.3.3 Ramverk Till implementationen av testklienten valdes att använda ramverket Codeigniter som är ett kraftfullt Opensource-projekt med många färdiga funktioner. Codeigniter har en licens som tillåter att man använder, modifierar och utökar till vilket syfte som helst under förutsättning att deras villkor uppfylls (codeigniter.com, 2010) I testklienten användes ett ramverk för Javascript som heter Jquery. Genom att använda detta får man många färdiga funktioner som fungerar i olika webbläsare plus att det finns flertalet plugins man kan använda. Jquery är licensierat under en dubbel licens MIT och GPL. Man behöver inte meddela någon särskild, som projektansvarig, gällande valet av licens utan man är fri att använda det även i kommersiella projekt (jquery.com, 2010). 4.3.4 Testdriven utveckling Detta är en del i Extrem Programmering (förkortat XP på Engelska) som innebär att man skriver enhetstester innan man skriver koden (wikipedia.org, 2010). Genom att först skriva villkor för en funktion i koden kan man sedan köra testet så det blir rött (fail) och sen skriver man minimalt den kod som behövs för att testet ska bli grönt (pass). Efteråt kan man gå tillbaka och reflektera om man kan förbättra koden för att sedan köra testet igen så att man vet om det fortfarande fungerar som det ska. Man brukar också kalla detta sättet att utveckla för red/green-development (wikipedia.org, 2010). 4.3.5 API Enligt wikipedia är ett API eller Application Programming Interface ett antal olika regler som bestämmer hur kommunikation sker mellan olika programvara (wikipedia.org, 2010). Det är en kort beskrivning som stämmer väldigt bra. Ofta är det en databas som kommunikationen sker till/från och informationen levereras sedan oftast med formatet XML till den part som gjort begäran. Genom att bygga en applikation som ett API ger det väldigt stora möjligheter för att kommunicera datan på ett bestämt samt enhetligt sätt oavsett vilken teknik slutprodukten använder. 4.3.6 XML Formatet XML (extensible Markup Language) är ett märkspråk för att leverera data över internet på ett enhetligt sätt som har stöd i många olika tekniker och applikationer (wikipedia.org, 2010). 7

4.3.7 MVC Model-View-Controller (förkortat MVC) är ett designmönster inom programmering och används för att separera data ifrån presentation. (wikipedia.org, 2010). Genom att göra en separation får man flera fördelar som till exempel att det blir mycket enklare att underhålla ett system. Om man behöver ändra hur någonting visuellt ser ut kan man lätt ändra i presentationen utan att det berör datan eller hur funktionen utförs. 4.3.8 PEAR PEAR är en förkortning för PHP Extension and Application Repository och är ett ramverk samt en samling av bibliotek som kan återanvändas (pear.php.net, 2010). 8

Genom att använda detta ramverket och biblioteken MDB2 samt Mail får man färdiga funktioner som har stöd för många olika typer av system/program-vara. MDB2 är ett bibliotek som har hand om databaser med stöd för bland annat MySQL, MS SQL och SqLite. Biblioteket Mail har hand om att skicka epostmeddelanden genom ett flertal olika möjligheter som SMTP eller PHP:s inbyggda funktioner (pear.php.net, 2010). 4.4 Databasmodell Då den nya databasmodellen togs fram användes den nuvarande databasen som en grund då den innehåller allting för att sedan förbättra och utveckla den. En del förändringar gjordes som att bryta ut alla kontaktuppgifter ifrån användartabellen till en helt egen tabell vilket ger många fördelar. Genom att lägga kontaktuppgifter separat får man en vertikal lagring och kan därmed lagra många fler uppgifter om en användare eller ett företag. I den nuvarande databasen lagras alla kontaktuppgifterna horisontellt vilket innebär en begränsning i antalet uppgifter som kan sparas. För att påbörja SCORM-kompabilitet valdes att skapa en databasmodell med en namngivning som kommer att hjälpa till för en fullständig SCORM-kompabilitet längre fram. Ett exempel på namngivning och denna förbered-else är tabellen för en kurs som heter course_organization (huvudobjektet i SCORM för en kurs heter organization). Bild 4.4.1: Ett urklipp ifrån databasmodellen Förutom namngivning finns det några andra saker förberedda i databasen som till exempel tabellen course_sco_indepth som är ett objekt med fördjupningsavsnitt till en viss föreläsning. Denna tabellen har en kolumn för att spara vad avsnittet är för typ (sco_type) vilket också är ett SCORM-attribut. 9

4.5 Metoddiskussion Om man jämför ASP.NET och PHP gällande hanteringen av XML, vilket är en stor del i detta projektet då grunden är ett API, så märker man stora skillnader. Den främsta skillnaden är att PHP tillsammans med SimpleXML är väldigt lätthanterligt och går enkelt att implementera medan det krävs fler kodrader för ASP.NET. Att det krävs fler kodrader för ASP.NET gör det till en nackdel och mer omständigt. Sedan finns det andra saker som talar för PHP och det är att ASP.NET är dyrare på ett flertal punkter. Genom att använda PEAR istället för att skriva egna funktioner eller bibliotek för PHP så tjänar man tid samt får ett större stöd av olika databaser vilket är en fördel. En nackdel med att skriva API:et som ett eget MVC-ramverk istället för att använda något som redan finns är att det tar lite längre tid samt det blir lite mer som behöver programmeras men en stor fördel vilket även är en viktig sådan är att man får en bättre svarstid vid varje förfrågan. Att använda XML som främsta format för API:et kändes som ett självklart val därför att det har stöd i alla större programmeringsspråk samt att man kan forma det precis som man själv vill efter de behov som finns. Från början var tanken att även ha stöd för formatet JSON (Javascript Object Notation) men detta hamnade som en avgränsning därför att XML har ett sånt bra stöd. Då man använder testdriven utveckling tar det längre tid att programmera då man skriver tester innan man skriver den riktiga koden men man får en stor fördel och ett bättre självförtroende därför att koden blir mera testad. 10

5. Resultat 5.1 Måluppfyllelse Att bygga en ny kärna som ett API och återanvända kod om möjligt Det var inga svårigheter utan gick som förväntat att bygga om systemet som ett API i botten men det var svårare att återanvända kod än vad som först uppskattades. Det gamla systemet är byggt proceduellt medans det nya är byggt enligt en MVC-struktur plus uppdelningen med att kärnan är ett API vilket skapade svårigheter att återanvända kod bokstavligt. Att använda testdriven utveckling Genom tidigare erfarenhet utav testdriven utveckling tillsammans med testramverket SimpleTest var detta inga problem. Att testa funktionerna i API:et i en testklient Även denna punkten gick mestadels som förväntat. Under projektets gång blev det klart att det behövdes att lägga lite mera tid på testklienten än vad som ursprungligen var tanken för att skapa bättre förklaringar för kunden. Ett exempel är att ha flera olika vyer för samma funktion som visar på alternativ hur man kan använda informationen ifrån API:et. Att skriva dokumentation för API:et Det gick som förväntat att skriva dokumentationen med en enkel hyperlänkad struktur i HTML. Att skapa en ny databasmodell för SCORM Inga svårigheter här heller och flera viktiga delar med information som behövs för SCORM kom med i databasmodellen. Att genomföra en undersökning om typ av databas Det var inga problem att genomföra undersökningen. Resultatet att Postgre SQL om man tittar på ett litet större antal webhotell inte hade så bra stöd var inte helt väntat. 11

5.2 Resultat i bilder Bild 5.2.1: Exempel 1 från testdriven utveckling. Här visas ett test som inte har gått igenom (rött). Man kan utläsa vad det är för namn på testet samt vad det är som har gått fel och på vilken rad. Bild 5.2.2: Exempel 2 från testdriven utveckling. I det här testet har samtliga 22 tester gått igenom utan några anmärkningar och visas därmed som grönt. Bild 5.2.3: XML-resultat ifrån API:et. Det här är ett exempel på ett XML-svar ifrån API:et som berättar att förfrågan som gjordes (inloggning) genererade ett fel samt ett meddelande med mer information vad det är som hänt. 12

Bild 5.2.4: Ett XML-svar med lyckat resultat. Bilden ovan är ett exempel efter en lyckad inloggning. Man får ett OK-svar samt ett meddelande med mer information plus en del inledande information om användaren som kan vara användbar. I testklienten skapades ett vanligt formulär för att logga in en användare som visas i bilden till vänster. Bild 5.2.5: Inloggningsformulär. 13

Bild 5.2.6: Visning av ett felmeddelande ifrån XML-svaret. Ifall inloggningen har misslyckats och får tillbaka ett XML-svar som i bild 5.2.3 kan man använda detta för att skapa ett mer visuellt tilltalande meddelande till användaren som visas i exemplet ovan. Bild 5.2.7: Här visas testklienten och en inloggad användare. Här visas en administratör som har loggats in i testklienten. Denna vyn sätts ihop genom ett flertal anrop till API:et. Språkflaggorna uppe till höger i bilden genereras i testklienten utifrån XML-svaret ifrån API:et och vilka språk som finns sparade. Till vänster hämtas vilka kurser som finns i API:et (gröna knappar). Dessutom kan man se en meny (blå titel, Mitt konto ) med en del funktioner som berör den inloggade användaren. Sedan finns det även en specifik meny med funktioner för en administratör (röd titel, Administratör ). 14

Bild 5.2.8: Exempel 1 på olika vyer. Bild 5.2.9: Exempel 2 på olika vyer. I bilderna 5.2.8 och 5.2.9 visas två olika vyer i testklienten för att presentera informationen ifrån API:et på olika sätt fast med samma data. 15

Bild 5.2.10: XML-data ifrån föreläsningar till en kurs Exemplet ovan visar XML-svaret ifrån API:et med föreläsningar till en kurs som innehåller en del SCORM-information som typ (resource_scormtype) samt identifier. I förfrågan till API:et skickar man även vilken användare som är inloggad vilket resulterar i att det även hämtas information ur databasen med status för en föreläsning (completed_status) som dels är SCORM men kan även användas på andra sätt (se nästa bild). 16

Bild 5.2.11: Presentation i testklienten av XML-data ifrån föregående bild Med XML-informationen som i bild 5.2.10 kan man presentera detta på en sida som exemplet ovan. Texten är en del i CMS-funktionen medans listan på föreläsningar hämtar dynamiskt. Här visas också hur man praktiskt kan använda status för en föreläsning (completed_status). Ifrån API:et får man completed eller not_attemped som kan avläsas och sedan visa ett rött kryss eller en grön bock. 17

6. Diskussion Jag tyckte det var ett mycket lärorikt projekt och speciellt att få jobba med ett ämne som jag inte kände till innan även om det var delar i funktionaliteten som jag hade erfarenheter av sen innan (CMS, Content Management System). Något som jag missbedömde rätt grovt ifrån början var hur stort projektet egentligen var och speciellt med SCORM. Det hade varit skönt att vara en utvecklare till känner jag. Men att vara själv har sina fördelar också som att det blir ingen extra tid att sitta i möten mellan utvecklare för att bestämma och komma överrens. Problemställningen och även förundersökningen i början av projektet var påfrestande då standarden SCORM var helt ny för mig; mycket information att läsa som sedan ska smältas och förstås. Samtidigt som det var väldigt mycket så blev det också en lärdom med att sätta sig in i något nytt för att sedan på bästa sätt med hänsyn till tid och resurser implementera funktionaliteten. I det här fallet så blev det precis lagom med att bara skriva om systemet som ett API i grunden med en ny databasmodell. En annan sak att dra lärdom av som jag delvis missbedömde var återanvändning av kod. Om det är aktuellt i senare projekt så behöver man göra en undersökning och ställa sig frågor som exakt vad är det som ska återanvändas. Ska man bokstavligen återanvända koden genom att kopiera in delar där de är användbara eller ska man använda till exempel ett Adapter pattern (wikipedia.org, 2010) för att skapa en brygga mellan ny och gammal kod. Det finns många frågor man behöver ta hänsyn till och dess fördelar respektive nackdelar. Ett alternativ vilket kanske är det vanligaste är att man återanvänder idéer och hur man har löst problem. Det var väldigt roligt att se något växa fram ifrån grunden och sedan hur funktionerna i API:et kan användas i en klient. Senare när det byggs en skarp klient ska det bli väldigt intressant hur man kan använda och kombinera funktionerna. Jag tror att man även då mycket lättare kan se hur man kan vidareutveckla detta som jag påbörjat. Personligen så känner jag mig väldigt nöjd med min prestation i projektet och det jag har hört hitills så är kunden det också. Jag tror väldigt mycket på att bygga en större tjänst som ett API i grunden och en klient som implementerar funktionerna ifrån API:et därför att det ger en väldigt stor flexibilitet samt att man kan kombinera informationen på många olika sätt. Till vidare utveckling bör man fortsätta med de funktioner i API:et som jag inte hann klart och givetvis göra en skarp klient enligt konstens alla regler för ett säkert system. När man har kommit dit så har man en mycket tydligare bild hur och med vad man kan fortsätta. 18

7. Källförteckning 7.1 Elektroniska källor http://www.jquery.com [2010-04-29] http://www.codeigniter.com [2010-04-29] http://sv.wikipedia.org/wiki/php [2010-05-07] http://en.wikipedia.org/wiki/mysql [2010-05-07] http://sv.wikipedia.org/wiki/extrem_programmering [2010-05-07] http://en.wikipedia.org/wiki/test-driven_development [2010-05-07] http://sv.wikipedia.org/wiki/rational_unified_process [2010-05-07] http://sv.wikipedia.org/wiki/api [2010-05-07] http://en.wikipedia.org/wiki/xml [2010-05-07] http://sv.wikipedia.org/wiki/xml [2010-05-07] http://sv.wikipedia.org/wiki/model-view-controller [2010-05-07] http://pear.php.net/ [2010-05-08] http://adlcommunity.net/mod/resource/view.php?id=458 [2010-05-11] http://www.scorm.com/scorm-explained/technical-scorm/content-packaging/manifeststructure/ [2010-05-11] http://en.wikipedia.org/wiki/adapter_pattern [2010-05-19] 19

8. Bilagor 8.1 Bilaga MySQL vs PostgreSQL Undersökning MySQL vs Postgre SQL 8.1.1 Bakgrund Jag har sedan länge varit nyfiken på skillnaderna mellan databaserna MySQL och Postgre SQL så jag tog tillfället i akt nu med exjobbet för att göra en liten undersökning. Innan jag påbörjade denna hade jag hört av bekanta att Postegre SQL ska vara lite vassare. Tidigare hade jag ingen erfarenhet av Postgre SQL utan bara med MySQL. 8.1.2 Mål Efter genomförd undersökning har jag fått en större förståelse för dom två olika databaserna, dess nackdelar respektive fördelar. Det kommer att hjälpa mig att ge rekommendationer för val av databas till exjobbet och framtida projekt. 8.1.3 Diskussion Båda databaserna har haft sina problem om man ser till deras utveckling men idag har de endast några få skillnader. MySQL skapades för att vara en snabb databas medans Postgre SQL skapades för att vara rik på funktioner och följa standarder. Går man in på tekniska detaljer kan båda databaserna hantera transaktioner på ett säkert sätt som är vanliga ifall databasen berör en webshop eller liknande system. Om det är MySQL behöver man använda databastypen InnoDB för transaktioner. För att skapa ett säkert system rekommenderar man att använda lagrade procedurer vilket Postgre SQL haft stöd för sedan länge medans MySQL började med ett sådant stöd ifrån version 5. Gällande prestanda är det svårt att få tag på data som jämför på ett standardiserat sätt. I en undersökning kan Postgre SQL vara snabbare men i en annan undersökning kan MySQL vara snabbare även med den lite tyngre varianten InnoDB. Det är dock rekommenderat att köra med InnoDB för MySQL då databasen blir lite säkrare med tanke på dataintegritet. Om en databas kommer upp i storleksordningen 100GB kan båda databaser få 20

prestandaproblem men om det är en sån stor datamängd bör man undersöka om det finns data som inte används och bara tar upp plats samt drar ner prestanda. 8.1.4 Slutsats När man tittar på funktioner och prestanda så finns det inte så stora skillnader mellan MySQL och Postgre SQL idag. Om det uppkommer prestandaproblem är det bättre att titta på hårdvaran i servern där databasen körs; VPS, Dedikerad server, Webhotell. Det finns dock en annan aspekt man bör ta hänsyn till när man väljer databas och det är vart ska systemet lanseras som använder databasen. Kanske är det ett system som ska kunna fungera utan några större krav så spelar valet en stor roll. En snabb titt på Svenska Webhotell så finner man att knappt hälften har stöd för Postgre SQL medans alla har stöd MySQL. Jämför man sedan med utländska Webhotell ser det ut som om en tredjedel stödjer båda typerna av databaser. Att jämföra VPS eller Dedikerad server är inte intressant därför att då är det kunden som bestämmer vad för programvara som ska installeras på sin server. Personligen kommer jag att fortsätta att rekommendera MySQL vid val av databas. Är det större projekt med ett större antal användare och större datamängder behöver man titta på de tekniska detaljerna samt vad för behov som finns specifika för det system som man bygger. 21

8.1.5 Elektroniska Källor http://en.wikipedia.org/wiki/postgresql [2010-03-31] http://en.wikipedia.org/wiki/mysql [2010-03-31] http://www.wikivs.com/wiki/mysql_vs_postgresql [2010-03-31] PostgreSQL vs. MySQL vs. Commercial Databases: It's All About What You Need av Tim Conrad http://www.devx.com/dbzone/article/20743 [2010-03-31] PostgreSQL Vs MySQL: Comparative Review av Partho, Gaea News Network http://blog.taragana.com/index.php/archive/postgresql-vs-mysql-comparative-review/ [2010-03-31] http://glesys.se/webbhotell/ [2010-03-31] http://fsdata.se/vara-tjanster/ [2010-03-31] https://www.loopia.se/webbhotell/specifikationer/ [2010-03-31] http://surftown.se/webbhotell-privat/oversikt [2010-03-31] http://surftown.se/webbhotell-foretag/oversikt [2010-03-31] http://www.one.com/sv/php [2010-03-31] http://www.godaddy.com/hosting/web-hosting.aspx?ci=8971#details [2010-03-31] http://www.hawkhost.com/shared/compare [2010-03-31] http://www3.ixwebhosting.com/index.php/v2/pages.hostingplans [2010-03-31] http://www.dreamhost.com/hosting.html [2010-03-31] http://geekhosting.com [2010-03-31] http://www.geekstorage.com/gs/service/shared [2010-03-31] 22

351 95 Växjö / 391 82 Kalmar Tel 0772-28 80 00 dfm@lnu.se Lnu.se/dfm 23