Översikt
Vi inleder delkurs A med det som allt annat i kursen vilar på: vad som händer mellan webbläsaren och servern när någon öppnar en URL, och hur de talar med varandra. Information om veckans upplägg annonseras löpande i kursens Zulip-kanal.
Kursintroduktion
Section titled “Kursintroduktion”Kursen introducerades tisdag 10 november under den schemalagda läraktiviteten, som delades med 1DV025. Mats och Mikael gick igenom kursplanen, upplägget, examinationerna och synen på AI-assistenter, och förklarade varför kursen använder Express. Därefter visade Mikael exemplet Nätverk och HTTP – en introduktion, med nätverk och HTTP i terminalen, som en övergång från veckans artiklar till egna försök. Klona det och prova kommandona själv. Missade du passet kan du se inspelningen nedan.
Om passet
Section titled “Om passet”Tisdagens pass i kursvecka 1 delades med 1DV025. Inspelningen börjar när passet går över till 1DV026. Mats gick igenom kursintroduktionen med några bilder och Mikael ställde frågor och fyllde i. Sista halvtimmen visade Mikael ett eget exempel med nätverk och HTTP i terminalen.
Samma upplägg som 1DV025
Section titled “Samma upplägg som 1DV025”Kurswebbplatsen är uppbyggd precis som i 1DV025, med artiklar att läsa och övningar att göra. Veckans lärmaterial är två artiklar, Nätverk och HTTP, och de lägger grunden för resten av kursens 20 veckor. Tidigare år fanns inspelningar om samma sak. De finns kvar i tidigare kursomgångar, men Mats har ersatt dem med artiklar i en modernare tappning. Varje artikel har en tidsuppskattning, så att du kan planera din tid, och några tankenötter på vägen.
Materialet är genomarbetat till och med kursvecka 3. Sidor som fortfarande ses över är märkta med att de är under revidering. Det är lärmaterialet som fräschas upp. Övningsuppgifter och examinationsuppgifter byts inte ut, men de ses över. Mats väntade med flit på Express 5, efter att Express under många år legat kvar på version 4. Nu släpps nya versioner varje år, som i andra moderna mjukvaruprojekt, och det kräver en del arbete med uppgifterna.
Varför Express?
Section titled “Varför Express?”Mikael ställde frågan som studenter ofta får av kompisar: varför Express och inte ett större ramverk, som Next.js, Symfony eller något annat? Mats svar är att Express är ett tunt skal ovanpå Node.js och dess moduler. Du blir tvungen att förstå vad som händer under huven, och den kunskapen har du med dig när du senare använder ramverk som döljer detaljerna. De ramverken lär dig hur du gör saker, men det kan vara svårare att genomskåda vad det innebär. Express är avskalat och låter dig organisera koden precis som du vill. Mikael höll med och tycker att det är ett utmärkt sätt att lära sig grunderna. Kodstruktur i backend kommer kursen att återkomma till.
Kursplanen
Section titled “Kursplanen”Kursen är 15 hp i datavetenskap, på grundnivå, och läses på halvfart över läsperiod två och tre. Precis som 1DV025 är den uppdelad i två delkurser om 7,5 hp:
- Delkurs A: HTTP och webbservrar, den grundläggande kunskapen.
- Delkurs B: Utveckla applikationer för webbservern, med Express.
Förkunskapskravet är 1DV025 Webbprogrammering på klientsidan (delkurs 1), 7,5 hp. Mats är examinator i båda kurserna och dispens brukar sällan vara något problem, men formellt är det det som krävs för att bli antagen och kunna registrera sig. Mål, innehåll och examinationer finns i kursplanen.
Mats är examinator och kursansvarig, och Mikael är kursledare. “Vi kan inte allt, men det vi inte kan tar vi reda på.”
Webbapplikationer, webbtjänster och driftsättning
Section titled “Webbapplikationer, webbtjänster och driftsättning”Ett av kursens mål är att förstå och diskutera webbapplikationer och webbtjänster. Frågar någon vad det är för webbapplikationer du bygger räcker en förkortning: SSR, server-side rendering. Servern skapar HTML, med CSS och JavaScript, som skickas till klienten, och webbläsaren presenterar det efter bästa förmåga. En webbtjänst använder också HTTP, men skickar data som JSON. Då behövs ingen webbläsare för att använda den. Kursen tar upp båda.
Du ska också driftsätta det du bygger, och därför får du en egen server vid universitetet. Mikael tycker att det är lyxigt att få driftsätta på riktigt, även om första inloggningen på en Linux-server kan kännas lite skrämmande. Ett av Mats fokusområden i år är att göra det på ett mer modernt sätt än tidigare kursomgångar, och därför kommer Docker in tidigt, både för utveckling och driftsättning. Det är inte en kurs i Docker, men verktyget blir en del av din arbets- och utvecklingsmiljö.
Resurser
Section titled “Resurser”- Kursens webbplats, navet med det mesta om kursen. Adressen coursepress.lnu.se/1dv026 skickar dig rätt. (Den andra adressen på Mats bild var fel.)
- Zulip, i kursens kanal 1dv026, och GitLab, i gruppen 1dv026, som i 1DV025.
- ActionHub, där du själv skapar dina GitLab-resurser, alltså övningsuppgifter och examinationsuppgifter, och din server.
- Cumulus (OpenStack), universitetets moln, där servern du driftsätter på finns. Den kan du skapa först från kursvecka 3.
I GitLab finns bara övningsuppgifterna publicerade än. Examinationsuppgifterna kommer att lämnas ut efter hand, eftersom Mats märkte i 1DV025 att många skapade resurser som de sedan aldrig använde.
Till skillnad från 1DV025, där campusgruppen hade ett helt eget upplägg, läser campus och distans samma kursmaterial och samma examinationsuppgifter i 1DV026. Garrit har egna föreläsningar och ett eget schema för campus. Därför kommer det att publiceras information på Zulip som rör campus. Garrit har skapat ett eget ämne för campus, och det riktar sig bara till campusstudenterna.
Kurslitteratur
Section titled “Kurslitteratur”- JavaScript: The Definitive Guide, 7th Edition, av David Flanagan följer med från 1DV025. Ungefär 100 sidor i den är av intresse för kursen.
- Engineering Software Products: An Introduction to Modern Software Engineering av Ian Sommerville är dyr, ungefär 1 300 kronor tryckt och runt halva priset som e-bok, och Mats hittade inte den billigare globala utgåvan. Ungefär 120 sidor rör kursen. Den används även i läsperiod fyra och i flera senare kurser.
Båda är rekommenderad litteratur. Du klarar dig utan dem, och testerna frågar inte efter exakta formuleringar ur böckerna. Artiklarna på webbplatsen ska ses som ett komplement till kurslitteraturen, inte en ersättning. ISBN hittar du under Lärresurser.
Upplägg och handledning
Section titled “Upplägg och handledning”Kursen har fem examinationer: ett test, inlämningar och inlämningar med muntlig examination. Upplägget är detsamma som i 1DV025, med handledningsseminarier på tisdagar och torsdagar via Zoom. De delas med 1DV025, så du kan ställa frågor om båda kurserna. Mats önskar att det ställdes fler frågor, så att tiden verkligen blev handledning. Frågor inför passen skickar du in på samma sätt som i 1DV025. Det blir inget nytt flöde för 1DV026. Glöm inte heller den individuella handledningen via Zoom om du kör fast.
Två parallella kurser
Section titled “Två parallella kurser”Under de första tio veckorna läser du 1DV025 parallellt. Tanken är att när det är mycket att göra i den ena kursen ska belastningen vara lägre i den andra. Mikael upplever kurserna som balanserade, och 1DV026 tar det lite lugnare i början. Hans råd är ändå att planera veckan så att du arbetar med båda kurserna några dagar var. Annars blir det jobbigt senare. De sista tio veckorna, i läsperiod tre, är 1DV025 avslutad och då läser du i stället Objektorienterad programmering (1DV502, 7,5 hp) parallellt.
Examinationer
Section titled “Examinationer”Datum och tider hittar du i schemat. Än så länge är bara schemat för läsperiod två ute, men läsperiod tre ser likadan ut, med tisdagar och torsdagar.
| Examination | Kursvecka | Typ |
|---|---|---|
| A1 | 5 | Test, 30 minuter |
| A2 | 9, i januari | Deadline för inlämning |
| B1 | 14 | Deadline för inlämning och muntlig examination |
| B2 | 17 | Deadline för inlämning |
| B3 | 20 | Deadline för inlämning och muntlig examination |
Delkurs A är lugnare. I delkurs B, efter jul, kommer examinationerna tätare och två av dem har muntlig examination. Det är där det händer mer, och det är det du förbereder dig för nu. Se Examinationsuppgifter för exakta datum. En viktig framgångsfaktor är att du deltar aktivt under läraktiviteterna.
Innehållet
Section titled “Innehållet”Delkurs A ger en inblick i hur internet är uppbyggt, med fokus på protokollen kring webbapplikationer. Den tar upp vad en webbserver är, olika typer av webbservrar och skillnaden mellan webbapplikation och webbtjänst, automatisering med skript i Bash, och säkerhetsaspekter: rättigheter, SSH, kryptering, HTTPS och certifikat. Det tränas mycket praktiskt, inte bara teori.
Delkurs B handlar om webbapplikationer för Node.js:
- persistent data: en CRUD-applikation som skapar, läser, uppdaterar och raderar data, i dokumentdatabasen MongoDB med Mongoose
- ramverket Express
- autentisering och auktorisering: vem som använder applikationen och om den får komma åt det den efterfrågar
- att göra webbapplikationer säkrare. En helt säker webbapplikation som går att använda finns inte, så målet är att göra dem så säkra som möjligt
- protokoll för kommunikation mellan klient och server, i realtid, beroende på vad man lägger i begreppet
- REST för webbtjänster. Du lär dig inte allt om REST, utan hur du gör för att det ska bli enligt REST
- utvecklings- och driftsmiljöer
Utvecklingsmiljön
Section titled “Utvecklingsmiljön”Du fortsätter med Visual Studio Code, Node.js, npm, Git och GitLab, ESLint med kursens egna regler
@lnu/eslint-config, Prettier och Vitest. Nytt är Express, Docker och Cumulus.
AI-assistenter
Section titled “AI-assistenter”Inställningen till AI-assistenter är densamma som i 1DV025: använd verktyget klokt för att lära dig bättre, och förstå det du skapar. Bilden listar GitHub Copilot, som är gratis för studenter via GitHub Education (ansök redan nu, den installeras i kursvecka 2), Claude, ChatGPT, Google Gemini och Microsoft Copilot. Be inte AI-assistenten lösa uppgiften direkt. Be om förklaringar av begrepp, att den testar din förståelse eller jämför alternativ, och tala om från start att du är nybörjare och vill ha förklaringar och följdfrågor, inte färdiga lösningar.
Mikael berättade att han mot slutet av de muntliga examinationerna i 1DV025 blev trött på att se likadan, finslipad kod. Några studenter hade skrivit egen kod och sedan låtit AI snygga till den, för att de trodde att lärarna ville se fin kod. Mikael vill hellre se din “fulkod”, som visar var du befinner dig i ditt lärande, än prata om hur vacker AI-genererad kod är.
Mats berättade att han själv byggt ett exempel som Mikael tyckte var för komplext i ett av stegen. Resultatet blev ungefär tre gånger så mycket kod, men enklare att förstå, och den koden hade en AI-assistent aldrig genererat från början. AI-assistenten skriver på seniornivå, men det är svårt att ta steget in i den seniora världen innan du har fått vara junior. “Var junior, i tre år får ni vara junior.” I senare kurser kommer ni att behöva agera seniort, men medan du lär dig grunderna är det inte bra att leverera seniorkod som du inte äger och förstår fullt ut, även om den löser problemet. Mikael menar att kod som ser snygg ut och som du intalar dig att du kan läsa ger lättviktig kunskap som du glömmer fort. Det du skriver själv och kör fast på är kunskap som fastnar.
Kursen tillåter i princip allt, eftersom det inte går att kontrollera. Ansvaret för att välja väg ligger på dig, och den som inte har lärt sig tillräckligt märks på de muntliga examinationerna. Mats avslutade med tre citat: Education is not received, it’s achieved, Learning is not a spectator sport och Barack Obamas uppmaning att inte vara rädd för att ställa frågor eller be om hjälp. När du formulerar en fråga har du redan påbörjat en tankeprocess.
Frågor från chatten
Section titled “Frågor från chatten”Blir det en separat Zulip-kanal för 1DV026? Ja, kursen har en egen kanal. Mats tror att några kan tycka att det blir lite stökigare när campus kommer in, eftersom det varit lugnt med bara distans i 1DV025. Ämnen som bara gäller campus eller distans märks därför ut, så som Garrit har gjort.
Finns det en guide för VS Code, tillägg och inställningar? Ett projekt kan föreslå tillägg i en
.vscode/extensions.json, som VS Code sedan rekommenderar när du öppnar projektet. Mikael har gjort så
i andra kurser men blivit mer restriktiv. En gång lade han in SonarQube för kodkvalitet, som åt
väldigt mycket minne. Mats förslag är att göra det till en community-fråga: starta ett ämne i kursens
kanal på Zulip där ni delar med er av tillägg ni gillar, så kan bra förslag hamna på kurswebbplatsen.
Vilken terminal? Kursen förordar ingen särskild, bara det är en Bash-terminal av något slag. Mats använder många olika. Mikael använder WSL, men för Windows-användare fungerar Git Bash också som Bash-terminal, redan för veckans Linux-kommandon. Docker kommer att behöva installeras, och på Windows är WSL det bättre alternativet för det. Mer om det nästa vecka.
Mikaels exempel: nätverk och HTTP i terminalen
Section titled “Mikaels exempel: nätverk och HTTP i terminalen”Mikael har gjort ett kort exempel som en övergång mellan veckans två artiklar och de första egna stegen i terminalen: example-network-and-http. Klona det, följ README:n och läs artiklarna först, så får du ut mer av det. Exemplet har två delar.
Nätverk i terminalen. Ta reda på din dators IP-adresser och skilj på loopback (127.0.0.1) och
din adress i nätverket, IPv4 och IPv6. Titta i filen hosts och slå upp ett namn med nslookup
eller dig. I WSL fanns nslookup inte från början, så Mikael fick installera paketet dnsutils.
Uppslaget på coursepress.lnu.se visar att kurswebbplatsen körs i universitetets moln, i samma moln
som studenternas servrar. ping visar om en maskin svarar.
En server lyssnar på en port. Exemplets server startas med npm start och lyssnar normalt på
port 3000. Porten var upptagen på Mikaels dator, så han satte miljövariabeln PORT till 3001 med
export PORT=3001. Den behöver sättas i varje terminal, annars är $PORT tom. Med ss (Linux) eller
netstat ser du vad som lyssnar på en port. Bara ett program åt gången kan äga en port, och
felmeddelandet EADDRINUSE kommer du att se många gånger. Mikael har ett snabbkommando som letar
upp processen som har porten och avslutar den. Mats erkände att han ibland startat om datorn i
stället för att leta.
HTTP med curl. curl är skapat av svensken Daniel Stenberg och finns i alla operativsystem. Det
skickar en förfrågan till en webbserver och är bra för att snabbt testa och skriva små testskript.
| Kommando | Vad det visar |
|---|---|
curl <url> |
Svarets body |
curl -i <url> |
Statusrad, headers och body |
curl -I <url> |
Bara statusrad och headers, när bodyn är stor |
curl -v <url> |
Anslutningen och hela samtalet, > för förfrågan och < för svaret |
curl -L <url> |
Följer omdirigeringar |
Med -v syns att det bara är text som skickas fram och tillbaka, något som annars kräver DevTools i
webbläsaren. Mikael tycker att omdirigeringar var svåra att förstå när han var ny. Med -IL mot en
sida som flyttats syns två svar: först 301 Moved Permanently med en Location-header, sedan 200
från den nya adressen. Webbläsaren gör alltså två förfrågningar, något du också ser i DevTools. Mot
http://coursepress.lnu.se visar samma kommando att servern omdirigerar till HTTPS, vilket i stort
sett alla webbplatser gör.
Mats påminde om att HTTP är ett väldefinierat protokoll, men att inget annat än din egen kunskap som
utvecklare hindrar dig från att till exempel svara med en 400-statuskod när allt gick bra.
Terminalen är livslång kunskap
Section titled “Terminalen är livslång kunskap”Du behöver inte kunna kommandona utantill i slutet av veckan. Har du provat dem finns de någonstans långt bak i huvudet, och flaggorna slår du upp när du behöver dem. Men det här är livslång kunskap för en programmerare, och listan växer över tid. Det går inte att klicka sig fram till den här informationen, och kommandona blir basala när du har skrivit dem några gånger. Mikael tycker att terminalen har fått en revival med AI-assistenterna, som kör många sådana kommandon. Det är roligt att känna igen dem, och terminalen blir ett sätt att samarbeta med en AI-hjälpreda.
Mats mindes hur han på gymnasiet i mitten av 80-talet fyllde en tavla med hur man tar sig mellan
kataloger med cd ... Det var en tröskel för alla, men den går att ta sig över. Det lönar sig: i
stället för att starta om datorn när ett program inte startar letar du upp problemet och tar en
skalpell.
Veckans artiklar och exempel
Section titled “Veckans artiklar och exempel”Veckans teori finns i två artiklar, som båda avslutas med övningar och lösningsförslag. Läs dem i ordning; den andra bygger på den första. Exemplet efter dem är helt frivilligt.
-
Nätverk – vad som händer när du öppnar en URL: TCP/IP-modellen, IP-adresser, portar, TCP och DNS, och vad du som webbprogrammerare behöver veta om dem.
-
HTTP – protokollet i detalj: förfrågningar och svar, metoder, statuskoder, headers, cookies och HTTPS. Där skriver du också din första webbserver.
-
Exemplet HTTP för hand bygger en webbserver direkt på TCP, utan Nodes HTTP-modul, i sex steg. Varje byte i svaret står utskriven i din kod, från förfrågningsraden via statuskoder och cookies till samma server med
node:http. Här ser du att HTTP är text som skickas över en TCP-anslutning.
Handledning
Section titled “Handledning”Handledningspassen i kursen delas mellan denna kurs och 1DV025. Det betyder att det är fritt fram att ställa frågor på båda kurserna vid dessa tillfällen. Därför blir det också naturligt nu i början att stor fokus på dessa tillfällen hamnar på de delar som rör den parallella kursen.
Studiefrågor
Section titled “Studiefrågor”Här är ett antal frågor som du kan försöka besvara och diskutera tillsammans med din AI-assistent. Tveka inte att lyfta någon av frågorna till handledningen för att fortsätta diskussionen med lärare och studiekamrater.
Frågor att diskutera med din AI-assistent
- Ge mig en kort och översiktlig förklaring till TCP/IP.
- Finns det svagheter och styrkor i protokollen?
- Vad innebär OSI modellen?
- Vad är ARP?
- Vad är DNS?
- Är DNS sårbart?
- Hur kan man, via terminalen och kommando, slå upp ett domännamn och mappa det mot en ip-adress?
- Förklara kort hur protokollet HTTP fungerar.
- Vad innebär HEADER och BODY i en förfrågan?
- Vilka metoder finns det, förutom GET och POST?
Här är en utskrift från hur det såg ut när Mikael diskuterade ovan frågor med sin AI-assistent Ajj.
Här följer tips till hur du kan prioritera bland kursmaterialet för att komma igång med veckan.
- Skumma igenom kursens innehåll och upplägg för att skaffa dig en uppfattning om vad det handlar om.
- Gå igenom Nätverk med övningar. Fokusera på helheten, de fyra stegen från URL till svar, snarare än på detaljerna.
- Lägg mest tid på HTTP. Det är protokollet du kommer att arbeta med resten av kursen, och övningarna med den egna servern är en förberedelse för allt du bygger senare.