Programmerings Produktion indblik

skrevet af Tobiasz Topczewski, Emil Qvistgaard, Christian Gadgaard

Intro  

Velkommen til vores blog indlæg! Vi er en gruppe i SKP (skolepraktik) der har arbejdet med et projekt. Det projekt endte tidligere end forventet på grund af nogle problemer, men nu skriver vi denne blog indlæg for at forhåbentlig give jer et indblik i vores projekt. I kan måske endda lære noget fra vores oplevelse og de ting vi selv har lært fra projektet.  

Hvem er vi? 

Først og fremmest en lille introduktion om hvem vi er – vi er 3 programmøre fra SKP (skolepraktik) på AarhusTech, hvor vi bliver udannet som programmør. Vi kommer fra forskellige steder i vores uddannelse, som betyder, at vi ikke havde mødt hinanden, før projektet og derfor har forskellige niveauer af erfaring. Det betyder at allerede før projektet, havde vi noget arbejde der skulle udføres. Kort fortalt har vores instruktør tildelt et projekt vi skulle udarbejde. Detaljerne af dette projekt kan findes i den næste sektion.  

Hvad var projektet 

Vores projekt var at lave et el simulations værktøj til de elever der deltager i DM i fagene. Simulationen skulle indeholde et 9 volts batteri, en modstand og 4 LEDer. Med de komponenter skulle eleverne kunne opstille den mest effektive måde at få de 4 LEDer til at lyse på. Vi fik også et simulationsværktøj vi kunne arbejde ud fra og modificere så det passede til vores projekt.  

Hvad sket der med projektet  

Vi startede ud med at kigge på den simulation der inspirerede projektet. Den hedder PhET og er udviklet af elever på University of Colorado. Det gav os et godt udgangspunkt på opgaven og gjorde at vi hurtig kunne komme i gang. Da det ikke var os som havde lavet den, skulle den rettes til. Den kom allerede med et 9 volts batteri, ledninger, en modstand hvor man kan ændre modstanden og en lyspære. Den kom også med en andre ting så man kunne se hvad der skete hvis man satte det i et el-kredsløb. Så vi skulle bare slette de ting vi ikke havde brug for og ændre pæren til en led. Vi fandt ud af at der var 29000 filer i projektet og 24 dependencies. Men på trods af det fik vi hurtig slettet det vi ikke havde brug for og ændret pærens billede til en led. Det er her det går ned af bakke, for vi skulle ændre pæren så den opførte sig som en LED i stedet for. Der fandt vi ud af at vi skulle bruge noget der hedder MatLab for at skifte pæren opførsel.  

Efter vi fandt ud af at vi skulle bruge MatLab, gik vi i gang med at kigge på andre løsninger til projektet. Den første løsning vi kom på, var at lave det fra bunden, så vi selv havde styr på hvordan systemet fungerede. Det gik også godt i starten og vi lavede sådan at vi kunne flytte elementer rundt på skærmen. Men vi løb ind i problemer med at forbinde komponenter til hinanden. Det prøvede vi på at løse ved at se, om der var andre der har lavet noget lignede det vi skal lave og hvordan de har lavet det. Der fandt vi nogle andre el simulations projekter. De brugte også MatLab til at forbinde og beregne simulationen. Efter det konkluderede vi, at vi ikke havde den nødvendige viden omkring MatLab og kunne derfor ikke lave projektet inden for den deadline vi havde fået.  

Start overblik/planlægning  

I starten af vores opgave havde vi ikke det bedste overblik over opgaven, da vi ikke have snakket med kunden endnu. Men vi havde fået lidt oplysninger omkring opgaven, blandt andet at vi skulle bruge simulationen fra PhET. Så vi gik i gang med at kigge koden og de dependencies igennem som den brugte. Efter vi havde kigget lidt af koden igennem og kunden havde tid til at komme forbi, havde vi omkring den samme erfaring med simulationen. Det gjorde at vi havde begge vores perspektiver at gå ud fra både fra vores synspunkt som programmører og kunden. Efter det kunne kunden fortælle hans krav til opgaven og vi stille opklarende spørgsmål til opgaven. Efter det første møde kunne vi udarbejde en plan for hvordan vi vil udføre opgaven. Det er vigtigt at have et godt overblik over opgaven før man begynder at lave en opgave. Hvis man ikke har et godt overblik, kan man hurtigt komme på afveje og blive forvirret over opgaven.  

Kundemøder  

Kundemøder er vigtige for at planlægge hvad man skal lave og for at vise kunden hvor langt man er med opgaven. Men før et kundemøde er det godt at have et overblik over hvad man vil vise og snakke om til mødet. Så vi afholdt typisk et møde en time før kundemødet hvor vi diskuterede i gruppen, hvad vi vil snakke om.   

Til kundemødet startede vi med at vise hvor langt vi var kommet med opgaven. Det gjorde vi ved at vise en prototype af vores projekt. Efter det snakkede vi om det var sådan, kunden vil have det og om der var nogle ændringer der skulle fortages. Det næste vi snakkede om, var kundens forventninger til næste møde og hvornår næste møde skulle afholdes. Vi har holdt løbende kundemøde omkring hver uge igennem helle opgaven. Det behøves ikke at være hver uge, men det er også afhængig af hvornår kunden har tid. Det er også her vi begik nogle fejl.   

Vi holdt os til kundemøder omkring hver uge, uanset hvad det var vi skulle lave. Det gjorde at vi ikke altid nåde det vi skulle lave til næste kundemøde. Vi afholdte møder hver uge, fordi vi havde lidt af en urealistisk tankegang til af de ting vi skulle lave og det var der kunden havde tid. Det kan være svært at give et realistisk tidsestimat for hvornår man er klar til næste kundemøde, men så må man lave et gæt. Det er også noget man bliver bedre til efterhånden som man får mere erfaring.   

Urealistisk tankegang /reality check 

Efterhånden som vi har haft mange kundemøder, kunne vi godt se, at vi blev ved med at sætte mål som er svært at opnå. Selvfølgelig blev vi bedre til at sætte realistiske forventninger, og til at estimere hvor meget tid vi har brug for. Men det var ikke nok!  

Med vores færdigheder, var vi kun i stand til at ’gætte’ hvordan projektet kørte frem. For hver deadline vi satte for projektet, havde vi også en målpind som krævet at vi tilfældigt finder guld. Det er det som vi internt kalder ”Magisk Tænkning”. Det var f.eks. at finde en linje i eksisterende kode, som gør det muligt at udskifte billede, eller at implementere en feature vi ikke 100% forstår.  
  
Til sidst gik det op for os, at vi ikke har nok tid til at stole på mirakler. Vores sidste kundemøde handlede om at afklare om vi skal holde fast i vores håb for at finde den rigtig løsning i løbet af det næste måned, eller give op på projektet og bruge vores tid på noget mere fornuftig. Det var en hård samtale, og vi var ikke alle sammen klar til at efterlade et halvt færdigt produkt, men vi blev enig om at det er alt for risikabelt.  

Fail fast 

En af de ting man hører i branchen, er at ‘fail fast’. Det vil sige at man skal afprøve tingene så hurtig man kan, for at se om det kan lade sige gøre. Tankegangen er at man hurtigt kan se hvad der virker og hvad der ikke virker. Det sparer tid for os og for kunden.  

I vores tilfælde var det noget vi tænkte over til vores sidste kundemøde. Hvad nu hvis vi fortsat med at arbejde på projektet, og det ikke lykkedes? Så ville vi havde fejlet langsomt, mens slutresultatet ville havde været det samme – et halvfærdigt produkt.  

Prototyping / proof of concept   

Noget vi kunne have gjort bedere i projektet var at have nogle prototyper. Prototyper eller ’proof of concept’ kunne være noget visuelt eller få en feature til at virke, så kunden kunne se hvad det var vi var i gang med. Det vil også give et beder overblik over hvor vi var i processen. Men i vores opgave var vi lidt over det hele og hoppede fra ting til ting og derfor havde aldrig rigtig noget nyt at vise når der var kundemøder.   

Motivation  

Motivation kan være svært at holde oppe hele tiden i et projekt, specielt hvis man ikke kan få det til at gøre som man vil. Motivation var også noget der gik fra op og ned i vores projekt.   

I starten af vores projekt var vi meget motiveret. Det så lidt svært ud og virkede lidt uoverskueligt, men vi fik hurtig slettet de ting vi skulle og fik pæren skiftet til en led. Efter det var vi meget motiveret og det føltes som om vi kunne klare alting. Men efter det, brugte vi lang tid på at få pæren til at opføre sig som en led og jo længer tid det tog faldt vores motivation mere og mere. Efter vi droppede den første simulation og gik over til at lave det fra bunden fik vi en del motivation tilbage. Nu kunne vi lave det som vi ville og have kontrol over alting selv. Den motivation, vi havde fået igennem starten af det nye projekt faldt, da vi ikke kunne finde ud af hvordan vi skulle forbinde komponenterne igen.   

Tips til at holde motivationen oppe i et projekt 

Nogle tips til at holde motivationen oppe i et projekt. Have nogle små delopgaver så man kan se at det går frem af med opgaven.   

  • Skriv de delopgaver ned, det giver også et bedre overblik og status på opgaven. Husk at strege ting over på listen så man kan se hvor lang man er kommet med opgaven.   
  • Lav opgaven i en gruppe så i kan snakke om opgaven og hjælpe hinanden.   
  • Gå nogle ture og kom væk fra projektet en gang i mellem.   

Være ærlig over jer selv om hvordan det går med projektet og lad vær med at sætte for store mål, det er fint at udfordre sig selv, men en for stor udfordring kan gøre det svært at fortsætte med projektet hvis man ikke kan se en løsning til det.  

Konklusion   

Vi nåede desværre ikke det vi skulle lave inden for den deadline, men vi har fået en masse erfaring ud af at forsøge at lave denne opgave. Nogle ting vi har lært at overføre til andre projekter i fremtiden, er at undersøge opgaven mere grundigt og gå efter princippet fail fast, så vi hurtigere kan se hvad der virker og ikke virker.   

Vi har lært at holde kundemøder. Det er første gang vi har prøvet det. Der har vi også lærte, er at det er vigtigt at have realistiske deadlines til næste møde og have en prototype klar til at vise kunden.  

Vi har lært at det kan være farligt at have et urealistisk syn og magisk syn på opgaven. For man kan ikke altid finde nogle der har lavet det man har brug for på internettet.  

Til Slut  

Vi håber at I har kunne få noget ud af vores erfaring med at lave en opgave for en kunde og har fået lidt mere forståelse for hvad der virker og ikke virker. 

IWDK er aflyst for 2020

Dear IWDK Community,

After careful consideration and in light of the ongoing COVID-19 uncertainty, the IWDK team have made the difficult decision to cancel this year’s festival.

IWDK21 will be back again next year, so set May 4th – 9th in your calendar now.

In the meantime, we are working on new activities for the fall and some event organisers may also choose to hold relevant events after the Corona crisis.

Keep checking the website and our social channels for updates as we prepare for next year’s festival.

Thanks to all the partners, event organisers, volunteers and participants who helped us off to a great start in 2020. Your contribution to this unique festival and dedication to the core concept of keeping people first in the digital age has been overwhelming and appreciated.

If you have questions or concerns, please contact us at info@internetweekdenmark.dk.

We hope to see you at IWDK21. Until then, stay healthy and take care of one another – and keep an eye on our channels:

Installering af MongoDB Community Edition på Ubuntu 18.04

Før installation

Denne guide viser installationen af MongoDB på Ubuntu version 18.04 og er ikke kompatibel med andre Ubuntu versioner.

Før installationen af MongoDB er det en god ide at have NodeJS installeret. NodeJS arbejder godt sammen med MongoDB hvis man skal vise en Webside med indhold fra MongoDB.

Tip for at indsætte tekst i Ubuntu terminalen tryk på Ctrl + Shift + v.

Installation af MongoDB

  1. Importer den offentlige nøgle brugt af MongoDB

Den offentlige nøgle bliver brugt til at verificere at den pakke der bliver modtaget er en umodificeret version af MongoDB. Kommandoen til den offentlige nøgle er.

wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add –

Så burde der komme en respons som siger ok.

Hvis der i stedet kommer en fejlbesked er det fordi gnupg ikke er installeret.

Gnupg er et værktøj der håndterer kryptering af data over internettet og offentlige nøgler. Gnupg er brugt til at holde forbindelsen sikker imens pakkerne bliver hentet fra internettet. Hvis gnupg ikke er installeret kan Ubuntu ikke verificere pakkerne og vil derfor ikke hente dem.

For at installere gnupg skriv

sudo apt-get install gnupg

derefter prøv at importer nøglen igen.

  1. Lav en list fil til MongoDB

For at lave en list fil til Ubuntu skriv denne kommando.

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

  1. Forny den lokale pakke database

For at fornye den lokale pakke database i Ubuntu skriv kommandoen.

sudo apt-get update

  1. Installere den seneste version af MongoDB

For at installere den seneste stabile version af MongoDB skriv Kommandoen.

sudo apt-get install -y mongodb-org


Basale MongoDB kommandoer

  • Start MongoDB

For at starte mongod skriv kommandoen.

sudo service mongod start

  • Verificere at MongoDB har startet

For at verificere at mongod er startet skriv kommandoen.

sudo service mongod status

  • Stop MongoDB

Stop MongoDB ved at skrive kommandoen.

sudo service mongod stop

  • Genstart MongoDB

Genstart MongoDB ved at skrive kommandoen.

sudo service mongod restart

  • Skriv i MongoDB

For at skrive i MongoDB brug kommandoen. mongo

For at komme tilbage til terminalen tryk på Ctrl + c efter det kommer der en besked der siger ”bye” og så er du tilbage i terminalen. Denne kommando stopper ikke MongoDB, den går kun ud af MongoDB terminalen.