Kmom10: Projekt och examination

By . Latest revision .

Detta kursmoment avslutar och examinerar kursen.

Upplägget är enligt följande:

  • Projektet och redovisning (20-80h)

Totalt omfattar kursmomentet (07/10) ca 20+20+20+20 studietimmar.

#Bedömning och betygsättning

När du lämnat in projektet bedöms det tillsammans med dina tidigare redovisade kursmoment och du får ett slutbetyg på kursen. Läs om grunderna för bedömning och betygsättning.

#Projektidé och upplägg

Du är nyanställd på webbfirman AB Konsult Mobila Webappar. De är osäkra på dina kunskaper och ger dig ett projekt som blivit liggande. De säger “Kan du fixa ihop en RESTful server med Node.js som vi kan använda för att testa BTH’s mobila app?”.

Du säger “Självklart. Finns det något att utgå ifrån?”

Du får en länk till en katalog på en projektserver. Sedan lämnar de dig åt ditt öde.

Du hittar alltså filer som är relaterade till projektet i ditt kursrepo under example/proj.

Du kikar snabbt i katalogen och väljer att fokusera på en server som söker bland salarna. Det låter lagom stort. Det blir ditt bidrag till bthappen.

Fråga i forumet om du känner dig osäker.

#Projektspecifikation

Utveckla och leverera projektet enligt följande specifikationen. Saknas info i specen så kan du själv välja väg, dokumentera dina val i redovisningstexten.

De tre första kraven är obligatoriska och måste lösas för att få godkänt på uppgiften. De tre sista kraven är optionella krav. Lös de optionella kraven för att samla poäng och därmed nå högre betyg.

Varje krav ger max 10 poäng, totalt är det 60 poäng.

#Kataloger för redovisning

Samla alla dina filer för projektet i ditt kursrepo under me/kmom10/bthappen.

Redovisningstexten skriver du som vanligt i me/redovisa.

#Krav 1 Bash för att konvertera XLS till JSON

Administrationen har fixat ett excelark som visar samtliga salar på BTH i Karlshamn och i Karlskrona. Du behöver omvandla innehållet i excelarket till en JSON-fil.

Du hittar excelarket i ditt kursrepo under example/proj/resources. Information i excelarket ser ut ungefär så här.

H430  Unixlabb            Karlskrona  H-huset 4   Labrationssal
A303    Monsunen            Karlskrona  A-huset 3   Konferensrum    18

Det skall omformas till JSON-fil enligt följande.

{
    "salar": [
        {
            "Salsnr": "A303",
            "Salsnamn": "Monsunen",
            "Lat": null,
            "Long": null,
            "Ort": "Karlskrona",
            "Hus": "A-huset",
            "Våning": "3",
            "Typ": "Konferensrum",
            "Storlek": "18"
        },
        {
            "Salsnr": "H430",
            "Salsnamn": "Unixlabb",
            "Lat": null,
            "Long": null,
            "Ort": "Karlskrona",
            "Hus": "H-huset",
            "Våning": "4",
            "Typ": "Labrationssal",
            "Storlek": null
        }
    ]
}

Skapa ett Bash-script som automatiskt skapar en JSON-fil utifrån innehållet i excelarket. Du får förbereda datan genom att spara excelarket i valfritt format, förslagsvis .csv, så att ditt Bash-skript kan läsa dess innehåll.

Döp ditt Bash-script till bthappen/salar2json.bash. När skriptet körs så skall det skapas en fil bthappen/salar.json som innehåller samtliga salar enligt strukturen ovan.

Använd ett onlineverktyg för att kontrollera att du producerat JSON som validerar.

#Krav 2 Server för att visa och söka bland salar

Skapa en server i Node.js (ES6) som kan visa och söka bland salar via följande routes. Alla svar skall vara i JSON. Servern skall använda sig av routern (som användes i kmom05/06).

Route Resultat
/ Visa en lista av de routes som stöds.
/room/list Visa samtliga salar.
/room/view/id/:number Visa detaljer om salen med valt salsnummer.
/room/view/house/:house Visa samtliga salar som finns i ett visst hus.
/room/search/:search Visa de salar som matchar söksträngen. Sökning skall ske på delsträng i samtliga fält.

Spara koden för servern, och det som servern behöver, i en underkatalog bthappen/server. Servern skall startas på följande sätt där man kan ange vilken port som servern skall använda.

bthappen/server/index.js --port <number>

Servern skall även stödja options för -h och -v för att visa en hjälptext samt versionen på programmet.

Servern skall skriva ut en loggtext som visar vilken route den tar emot, från vilken klient (hostnamnet/ip-adressen).

#Krav 3 Klient i Node.js för att testköra mot servern

Skapa en klient i Node.js (ES6) som du använder för att testa servern. Din klient skall vara byggd likt den klient du gjorde i kmom06. Den skall använda en egen prompt med modulen readline samt innehålla ett menysystem som ser ut så här.

Commands available:

 exit            Leave this program.
 menu            Print this menu.
 url             Get url to view the server in browser.
 list            List all rooms.
 view <id>       View the room with the selected id.
 house <house>   View the names of all rooms in this building (house).
 search <string> View the details of all matching rooms (one per row).

Spara koden för klienten, och det som klienten behöver, i en underkatalog bthappen/client. Klienten skall startas på följande sätt där man kan ange vilken server och port som klienten skall använda för att koppla upp sig.

bthappen/client/index.js --server <server> --port <number>

Klienten skall stödja options för -h och -v för att visa en hjälptext samt versionen på programmet.

#Krav 4: Bättre sökalgoritm (optionell)

Förbättra sökalgoritmen genom att införa prioritering och skapa en ny route (server och klient) som söker med prioritering.

Route Resultat
/room/searchp/:search Sök med prioritering.

Du väljer själv den algoritm du implementerar. Tänk på följande.

  1. Vissa fält är mer viktiga än andra. De har högre prioritet och en träff i dem är viktigare än en träff i andra fält.

  2. Om söksträngen matchar ett helt fält, inte bara en delsträng av fältet, så har det hög prioritet.

  3. Om söksträngen matchar början av strängen så har det högre prioritet än en matchning av delsträng inuti. Det är alltså bättre om söksträngen abc matchar abcdef än defabc.

Skapa din egen sökalgoritm som väger in prioritering och graderar varje sökträff till en siffra mellan 0 och 1. Sortera svaret som servern skickar baserat på prioritering. Värdet på prioriteringen skall skickas med svaret.

#Krav 5: Filtrera antalet träffar (optionell)

Lägg till så man kan filtrera det resultatet man får så man bara får max ett visst antal träffar.

Route Resultat
max=number Svaret skall innehålla max number träffar.

Följande routes skall stödja filtreringen.

Route Resultat
/room/list Visa samtliga salar.
/room/view/house/:house Visa samtliga salar som finns i ett visst hus.
/room/search/:search Visa de salar som matchar söksträngen.

Ett exempel är alltså /room/search/karlskrona?max=5 som ger ett svar med max 5 salar.

#Krav 6: Bättre testmöjligheter (optionell)

Bygg ut ditt system med bättre möjligheter för tester.

I servern, lägg till en option av --develop som innebär utskrift av svaret som skickas till klienten. På det viset kan man på serversidan se exakt vilket svar som skickas på en viss request.

I klienten, lägg till en option av --develop som innebär utskrift av urlen som skickas till servern.

Skapa ett bash-skript bthappen/test.bash som använder curl för att testa samtliga router (minst 15 testfall). Bash-skriptet skall skriva ut urlen som testas följt av den response kod som kommer från servern. Skriptet skall stödja LINUX_SERVER och LINUX_PORT.

Bash-skriptet skall ha en option --verbose som innebär att den skriver ut innehållet i det svaret som kommer från servern.

#Redovisning

  1. På din redovisningssida, skriv följande:

    1. För varje krav du implementerat, dvs 1-6, skriver du ett textstycke om ca 5-10 meningar där du beskriver vad du gjort och hur du tänkt. Poängsättningen tar sin start i din text så se till att skriva väl för att undvika poängavdrag. Missar du att skriva/dokumentera din lösning så blir det 0 poäng. Du kan inte komplettera en inlämning för att få högre betyg.

    2. Skriv ett allmänt stycke om hur projektet gick att genomföra. Problem/lösningar/strul/enkelt/svårt/snabbt/lång tid, etc. Var projektet lätt eller svårt? Tog det lång tid? Vad var svårt och vad gick lätt? Var det ett bra och rimligt projekt för denna kursen?

    3. Avsluta med ett sista stycke med dina tankar om kursen och vad du anser om materialet och handledningen (ca 5-10 meningar). Ge feedback till lärarna och förslå eventuella förbättringsförslag till kommande kurstillfällen. Är du nöjd/missnöjd? Kommer du att rekommendera kursen till dina vänner/kollegor? På en skala 1-10, vilket betyg ger du kursen?

  2. Ta en kopia av texten på din redovisningssida och kopiera in den på Canvas/redovisningen. Glöm inte länka till din me-sida och projektet.

  3. Se till att samtliga kursmoment validerar.

# Ställ dig i kursrepot
dbwebb publish me

#Revision history

  • 2017-02-28: (C, mos) Testscript stöd LINUX_SERVER och LINUX_PORT.
  • 2017-02-23: (B, mos) Ändrade `–debug` till `–develop`.
  • 2015-10-13: (A, mos) Första versionen till linux.

Document source.