Inlägg

Inlägg som WebbkodsLärlingen har skrivit i forumet
Av WebbkodsLärlingen
Skrivet av GLaDER:

Lite TL;DR här, men vad har du fått för jobb nu när utbildningen är över?

Inget jobb ännu. Möjligen har jag ett uppdrag på g, möte nu på måndag om möjligheterna.

Vad jag vet så har färst två från klassen (av 34) fått jobb efter utbildningen, en dock i en helt annan bransch än webbutveckling. Det kanske är ett par till men har inte hört någon yttrat sig på Discord-gruppen, möjligen ett känsligt ämne i rådande tider?

Mvh,
WKL.

Av WebbkodsLärlingen

[UTBILDNINGSRECENSION] - HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans hos MIUN) 4/4

P.S. Detta är inlägg 4/4.
VT2024 DT191G Datateknik GR (B), Webbutveckling med .NET, 7,5 hp (distans)

I läsande stund så har jag nu bara två kurser kvar att skriva om (denna och DT140G) och sedan sammanfattningen för hela recensionen - för att ge dig en "känsla" över hur jag hoppat delvis i mitt recensionsskrivande. Faktum är att Moodle (studentplattformen under utbildningens gång) har inte kvar alla kurser som man har läst så man kan se dess innehåll. Så vissa kurser vet jag inte ens riktigt vad jag gjorde under alla delmoment för de finns inte kvar. Denna kurs som du ska få läsa om nu finns dock kvar för den är ju en av de sista så att säga.

I denna kurs så fick vi lära oss använda Razor-sidor, Blazor-ramverket(?), MVC ASP.NET MVC Core och EF Core. Fokuset var alltså att skapa en webbplats som kunde sjösättas på exempelvis Azure på en Kestrel-server (eller Kastrull som jag kallar dem för av någon outgrundlig anledning). Här var det väldigt valfritt: skapa en webbplats som använde sig av Razor-komponenter och EF Core. Skapa en webbplats med Blazor-ramverket. Eller skapa en webbplats med MVC-ramverk inom C#.NET ASP.NET Core.

Jag ska erkänna att jag inte kan med alla olika namn de har för olika ASP.NET Core och de olika .NET-versionerna och allt. Det är en riktigt dålig blandad pannkakssmet av det hela. Men EF Core var ett rent nöje att ha med att göra. Mycket härligt med inbakad SQL ORM i princip även om den säkert inte är lika optimal vissa gånger som att göra SQL-frågorna och databearbetningen med egen kod.

Något som kändes "magiskt" med EF Core var ju just ORM-biten där jag kunde skapa databastabeller som datatyper och sedan ange vilka som hörde ihop med vilka och på så vis kunde EF Core sammanfoga när jag gjorde komplicerade SQL-frågor med JOINS utan att jag manuellt behövde gå igenom varje tabellrad som då skulle innehålla mycket upprepningar på grund av alla JOIN-klausuler.

Här i slutuppgiften gjorde jag en webbplats för att lägga upp annonser för datorkomponenter. Nu implementerade jag även så att det gick att skicka privata meddelanden till varandra och det gick att få särskilda meddelanden från administratörer som inte gick att besvara (även om du försökte via direkt POST-anrop i POSTMAN eller dylikt). Självfallet ingick bilduppladdning och en administrativ panel för administratörer att kunna göra ändringar på annonser.

Faktum var/är att de behövde först godkänna annonserna innan de lades upp. Du kunde dessutom inte skicka intresseanmälan fler än en gång till en given annons. När du hade gjort din intresseanmälan så kunde du först tala med en annan användare. Däremot gjorde jag som så att administratörer kunde dock skapa nya meddelanden och välja vem de ville skicka till precis som det går för alla här på Sweclockers.

En rolig kommentar från läraren som betygsatte slutprojektet var om jag skulle behålla webbplatsen eller inte för verklig användning. Själv känner/kände jag att, "Nä, det är riktigt banal webbsida, det är rätt coolt, men också så fundamentalt och C#.NET är verkligen ingenting för mig! 😅"

Ja just det, innan du frågar: i denna C#.NET kurs hade vi de två bättre lärarna vad gäller upplägget såväl som tillgängligt kursmaterial att tillgå även om det var mycket "läs den officiella dokumentationen för C#.NET hos Microsoft" vilket jag upplevde var mer för de som redan studerat och arbetat med OOP-baserad programmering i typ 10+ år eller något.

Det kändes verkligen långt ifrån nybörjarvänligt. Och de nybörjarguider som fanns var så sjukt "stora" fast det var lite kod. De var för "omfattande" sett till visuell storlek istället för att bara ge kodsnuttar för att komma igång omedelbart istället för massor av flera små steg att följa där varje sida fyllde flera A4-papper medan det kunde ha fyllts bättre tycker jag.

Allt som allt så var det kul att få prova på webbutveckling inom C#.NET men själv hade jag föredragit ExpressJS eller PHP-baserad backend om WebbKodsLärlingen själv hade fått välja! 🐱

Vad borde ha funnits med i kursen som saknades?

  • Möjligen fler videoklipp om hur man kunde göra flera saker inom C#.NET ASP.NET Core (MVC) Razor & Blazor-domänet. Så mycket info för redan "färdigutbildade" seniorer upplevde åtminstone jag!

Dold text

VT2024 IG021G Industriell organisation och ekonomi GR (A), Affärsplaner och kommersialisering, 7,5 hp (distans)

Detta anses vara den värsta och sämsta kursen i hela utbildningen - och därför bytte jag ut den mot en tidigare efter erhållit F för jag kunde inte lägga tid på den utan lade all tid på den andra parallellkursen (DT191G) eftersom C#.NET var klurigt som det var med sin klassbesatthet.

Vad jag kan berätta på ett diplomatiskt vis är att tidigare har det kommit inlämnade klagomål kring denna kurs men som enbart den kursansvarige har kunna tagit del av, inte de ansvariga för själva utbildningen - förrän vår klass kom förbi och tog ett smakprov!

Det fanns en genomsyrande ironi under hela kursens gång för de som gick den: planeringen var usel trots att kursen har ordet planer i sig.

Redan under första föreläsningen - eller ja, introduktionen - så summerades i princip hela idén bakom affärsplaner av läraren när denne sa: "En affärsplan som är bra säger bra saker om dig som att du är påläst, att du kan din marknad, och är troligen en pålitlig samarbetspartner, medan en affärsplan som är dålig säger att du troligen inte kan det du påstår att du kan och är troligen då en dålig samarbetspartner."

Således har jag inget mer att säga om denna kurs än: ¯\_(ツ)_/¯
Vad borde ha funnits med i kursen som saknades?

  • Den borde inte ha funnits överhuvudtaget i utbildningen!

Dold text

VT2024 DT140G Datateknik GR (B), Självständigt arbete, 15 hp (distans)

Då är vi här... den sista så kallade "kursen" och jag säger så för å ena sidan så kändes den delvis som en lång process för att ansöka om ett examensbevis genom att lämna in en examensrapport. Att kalla det för en examensrapport tycker jag också kändes lite att ta i för det var en rapport på B-nivå och inte C-nivå vilket jag skrev för drygt 10+ år sedan.

Hursomhelst, det huvudsakliga värdet i denna "kurs" var att få hitta och "göra anställningsprov" hos någon arbets-/uppdragsgivare. Personligen tycker jag att denna "kurs" kan betraktas som "anställningsprov" ute hos vissa företag eftersom du gör gratis arbete som förhoppningsvis ska ge underlag till företaget huruvida du är värd att investera i/anlita/anställa eller inte.

Eftersom "kursen" inte hade något egentligt material mer än information om hur man skriver en examensrapport (vilket var i princip likadan som vi gjort tidigare så konstigt att det kallades för examensrapport när den har i princip samma struktur fast lite annorlunda visuellt utseende och strikt mall att följa) och något om etik och samhällsnytta, så blir detta mer fokus på själva exjobbet i sig och inte själva "kursen".

Exjobbet blev som sagt var hos ett lokalt bolag här där jag bor och allt skedde på distans. Jag har inte ännu - i skrivande stund - träffat personerna bakom bolaget (de är bara två personer) vilket möjligen kommer att äga rum senare i år. Så nu fick jag applicera alla mina färdigheter från hela utbildningens gång såväl som kombinera det med CoPilot vilket vi studenter fått ett års förbrukning av och gäller även upp till ett år efter avslutade studier *nice* 👌.

Vid första avstämningsmötet så kunde jag känna hur jag anammade min databaslärares princip om att göra en verksamhetsbeskrivningsanalys och skriva ned entiteter med attribut och deras relationer med varann utifrån vad exjobbgivaren berättade om vad de ville kunna lagra som data. De berättade helt enkelt vad de arbetade med och när de sa något som jag uppfattade som en entitet så skrev jag ned den, sedan ställde jag uppföljningsfrågor, "Vad är då typiskt för en Situation? Vad har den för slags egenskaper? Vad innehåller den?" och så skrev jag ned attribut utifrån det.

Men jag tog det ett steg längre än så: jag ställde även motfrågor och kom med förslag om andra kanske nödvändiga och "livshöjande" (eng. "quality of life") attribut och andra saker som de kanske inte hade tänkt på. Så här satte jag mig in i deras domän relativt fort och försökte extrapolera vissa saker. Vissa saker var inte nödvändiga så de skrev jag inte ned eller tog bort. Andra saker jag föreslog tyckte de var bra att ta med så där tackade exjobbgivaren då för att även jag "utmanade dem".

Jag såg det som behovsanalys för företaget för att komma till fund med vad som faktiskt verkligen behövde lagras i databas för att kunna uppnå deras ändamål. Vad de ville ha var/är en administrativ webbplats för databashantering av viss slags data ("Situationer") och vissa användare ("Partners") som kan få åtkomst till dessa genom tilldelning av dem via administratörerna.

Men det fanns ett allvarligt problem nu från min sida: Jag hade ju redan gjort detta i flera kurser, som du kanske läst? Datorvarulagret, pizzerian, datorvarulagret igen, annonssidan för datorkomponenter, och så vidare. Det skulle bli en rätt så "tunn" examensrapport vilket endast universitetet är intresserade av medan jag själv ville erhålla en mycket stark referens från exjobbgivaren - vilket *SPOILERS* (jag gjorde!🥳) - så något extra behövdes... Hm...

Förresten, lade du märke till att i majoriteten av kurserna så pratade jag nästan aldrig om säkerhetstänk mer än SQL-injektioner och XSS? Exempelvis fanns det i kursen med Laravel som ramverk möjligheten att nyttja CSRF för kontaktformulär men det var inget som fördjupades i hur och/eller varför. Så jag behövde något "extra" för detta examensarbete som ändå skulle pågå i åtminstone 2 månaders tid.

Därför kom jag på att: "Aha! Säkerhetstänk inom webbutveckling är något som varit bristande under hela utbildningens gång och med tanke på alla IT-incidenter som jag primärt läst om på Sweclockers, så kan jag slå flera flugor i en digital smäll!" Detta lade då grunden för vad jag skulle göra: skapa en administrativ webbplats med den genomsyrande säkerhetsprincipen Principen om lägst behörighet, "Principle of Least Privilege" eller "Zero-Trust Policy" - typ - med andra ord.

På Discord tipsades jag då om en webbplats vid namn OWASP där jag fann väldigt många olika säkerhetsrisker jag kunde försöka åtgärda så gott som det gick i min utvecklingsstack för examensarbetet vilket blev HTML, vanilj PHP, vanilj JS, MariaDB, och Tailwind CSS. Jag började med att lösa ett problem i taget - då jag lärt mig det under utbildningens gång att bryta ned större problem till mindre - eller istället för problem så kan vi ju kalla dem för "funktionaliteter", eller nästan "funktioner"?

Först en funktion för inloggning, sedan en funktion för att validera/hantera/sanera inmatningsdata, en funktion för att hantera vilka tillåtna CRUD-anrop som får göras mot en given PHP-fil ("webbsida"), och så vidare. Detta lade då även grunden för min idé om ett funktionsbaserat PHP-ramverk så jag har något mer imponerande att visa upp till framtida arbets-/uppdragsgivare än bara alla relativt upprepande skolprojekt.

I takt med att jag utvecklade olika funktioner för att lösa de olika problemen så såg jag då hur jag kunde ha en upprepande struktur med funktioner på varje undersida och därmed växte även intresset för eget skräddarsytt funktionsbaserat PHP-ramverk som troligen bara jag och mamma(?) kommer att använda någon gång i framtiden.

Tillbaka till examensarbetet och den så kallade "kursen" så hade jag veckovisa avstämningar med exjobbgivaren där jag demonstrerade lajv, de fick prova lajv, och de kom med återkopplingar om vissa visuella förändringar de vill ha (och jag hade sagt att utseendet alltid gick att fila på senare och att utseendet var en svaghet jag hade, dvs., webbdesign) och de upptäckte faktiskt några buggar som jag då kunde lösa redan samma dag!

Vad påminner veckovisa avstämningar med leverans av värde till slutkunden? Exakt! Någon form av agil projektledning om än på mycket mindre skala och inga stand-up-möten (vilket jag läst här och var är oftast mer irriterande än givande hos många svenska bolag) utan det blev veckovisa "sprintar" från mig och det gick först segt framåt men sedan kom det en hel del "features" varje vecka från mitt håll.

Exjobbgivaren hade sagt i det sista avstämningsmötet för drygt 2-3 veckor sedan att de var mer än imponerade och hade faktiskt inte ens förväntat sig detta (inga illa menat poängterade de också). Jag tog/tar ej illa upp dock för när jag väl kommer igång så blir jag som en riktig "skrivmaskin". Jag var så "sjuk i huvudet" jag skrev en examensrapport på cirka 79+ sidor (kortade sedan ned till 60+ sidor tack vare radering av massa onödiga bilder) på typ 12 dagar. Liknande var/är jag med kodande: jag sitter 4-8 timmar i sträck och kodar för att bli färdig med åtminstone en "feature" eller halvfärdig med den.

Sedan när jag arbetar med nästa "feature" så kan jag upptäcka hur den ska/bör samverka med en tidigare "feature" som jag då går tillbaka till och korrigerar så de båda samverkar. Därpå kommer nästa "feature" som kanske ska kunna samverka på något vis med de två tidigare eller fler "features" så då blir det att gå tillbaka dit och korrigera igen så att det blir "funktionell harmoni"🙏 mellan dem! 😂

Redovisningen ägde rum på plats här i stan där jag bor och 7 av 33 klasskamrater kunde dyka upp och redovisa på plats sedan drog vi 8 ut och härjade lite smått och gott på stan fram till kl.01:00-slaget. En sov över hos mig och det var mycket roligt att få träffa massa tidigare annars Discord-profiler i det fysiska livet, öga mot öga, svett mot svett(?) och delade minnen och ögonblick!

Det var sedan den 4:e juni 2024 kl.23:59 som var sista inlämningsdagen för examensrapporten men jag hann bli färdiga med den redan dagen efter redovisningen för jag gjorde inte så många ändringar mer än att radera bilderna från resultat och bara använda kryssmarkeringar för att berätta att jag hade uppnått alla konkreta och verifierbara mål. All programkod exklusive känsliga anslutningsuppgifter skickades också med vid inlämningen om läraren nu önskar att provköra lokalt!

Vad borde ha funnits med i kursen som saknades?

  • Den så kallade "kursen" kändes i princip mer som en "lång ansökningsprocess för examensbevis" än snarare en "kurs med faktiskt läromedelsinnehåll". Möjligen kanske det ska framgå på något vis?

  • Bättre tydlighet kring saker och ting hade varit ett pluss. Möjligen läs gärna igenom nuvarande material och gör ändringar i tid än att elever hittar något otydligt som sedan förtydligas och/eller raderas för att det hade tänkt raderats tidigare men glömts bort. Ni får ju sjutton bövlar betalt för det ni gör, så gör det då!

Dold text

Sammanfattning, personliga åsikter, tankar & erfarenheter i efterhand

Så... då var det över. Webbutvecklingsprogrammet gick av stapeln någon gång i september 2022 och avslutades officiellt den 4:e juni 2024 kl.23:59.

Den uppenbara och svåra frågan men som du säkert undrar över är: "Skulle du rekommendera denna distansutbildning inom webbutveckling?"

Problematiken här är att den kan vara annorlunda när du väl söker och/eller blivit anlitad, samt jag kan ju inte jämföra med någon annan distansutbildning inom webbutveckling.

Vad jag kan säga rent sammanfattningsvis - och det är ju ändå bara utifrån min subjektiva upplevelse - är att vissa kurser var/är bättre än andra och mycket av det berodde/beror på de ansvariga lärarna. Men det finns så klart möjlighet om någon från institutionen läser denna recension att göra bättring på alla de nämnda kurserna på det ena eller andra viset.

Att studera på distans var både roligt och tråkigt. Ibland kändes det ensamt, men det kändes också kul när jag fick kontakt med vissa från den virtuella klassen och därmed "made some new friends". Det återstå att se hur länge det kan hålla i sig med "distansvänskap"!

En svaghet i utbildningen är att det har varit bristande fokus på bland annat följande (nu när jag tänker efter och reflekterar i efterhand):

  • Genomsyrande säkerhetstänk mer än skydd mot XSS-attacker & SQL-injektioner. Det behövs även tänk kring CSRF, databashanterade sessioner (lägg alltså ner användningen av token i localStorage(!) ). I och med det så "passade jag på" under examensarbetet att fördjupa mig delvis i detta även om jag bara "skrapade på ytan" för att erhålla viss förståelse och praktisk användbarhet av det till framtida projekt hos framtida arbets-/uppdragsgivare. Det var helt klart värt det anser jag!

  • Fördjupning inom databaser som exempelvis indexering, optimering, mer komplexa queries, (de)kryptering av nycklar och/eller databasdata. Att även kunna genomföra ACID-transaktioner och rulla tillbaka vid behov hade varit av stort värde när det väl börjar gälla "riktigt seriösa webbplatser med viktiga, känsliga data att hantera!". Ett motargument skulle så klart vara: "Men plugga till Systemadministratör då!". Fast varför inte lära sig lite så de som är Systemadministratörer får mindre huvudvärk? 🤪

  • Sjösättning av webbplatser. Du kanske märkte under recensionens gång att jag i princip aldrig mer än Azure pratade om hur olika slutuppgifter sjösattes? Det är för att de sällan gjorde det vilket är lite ironiskt med tanke på att vi ska ju bli webbutvecklare och inte localhost-utvecklare, eller?!

  • Förståelsen och appliceringen av nätverkspaket i samband med applikationslagerprotokoll såsom HTTP(S), (S)FTP), IMAP, POP, SMTP, och kanske andra relevanta protokoll för just internet. Motargument skulle kunna vara då: "Läs nätverksdrift då?" Men jag tycker personligen att det bör finnas mer grundläggande förståelse och implementering av det. För när vi hanterar CRUD-anrop så finns HTTP(S)-huvuden inblandade men dessa avhandlas ytterst lite och/eller dåligt under utbildningens gång.

  • Webbdesignprinciper eller så är detta bara mig personligen. Jag nämnde i någon kurs att jag personligen inte upplevde att jag fick med mig några matematiskt baserade webbdesignprinciper för att kunna använda som utgångspunkt. Och detta har visat sig också hos många i klassen: vissa har alltid genomgående haft bättre/modernare/snyggare/bättre webbdesign rakt igenom i nästan alla slutuppgifter medan andra inklusive mig tycks ha haft tidiga 90-talsteman gällande frontend! 😅

  • Möjligen kunde fokus på ramverk ha börjat lite tidigare i utbildningen även om jag tycker att det var/är guld värt att "helt okej" kunna grunderna inom HTML, CSS, JS, PHP & C# innan du hoppar på abstraktioner av det hela för det är ju vad det är: abstraktioner. Tailwind CSS är ju bara CSS-regler så kan du inte dessa så kommer du troligen att förvirras över hur de interagerar med varandra på givna HTML-element. ReactJS är ju ett JavaScript-bibliotek (och jag fattar mer nu varför det är så, inte ens "react-router" är ju med där utan separat vilket är lite "jahapp?") vilket är JavaScript i grunden. Det är fortfarande renodlad JavaScript.

  • Till sist så kan vi väl säga att Förbättring utifrån kursutvärderingar var/är kanske en brist på grund av den uppenbara avsaknaden av den - i alla fall när jag gick 2022-2024. Som sagt från en kurs så verkade/verkar det som om programansvariga inte kunde se negativ återkoppling kring vissa kurser vilket kanske ledde till att vissa hoppade av vissa kurser och därmed hela programmet för att "försmaken" av programmet gav dålig smak.

Med få andra ord så finns det borde potentiella för- och nackdelar med denna utbildning beroende helt och hållet på vad du skulle uppfatta som för- respektive nackdelar enligt allt du läst fram tills nu. En sak är jag säker på i alla fall: saknar du genuint intresse för mjukvarubaserad IT så är det troligen inte något för dig även om det finns mycket rapportskrivande.

Och om du är sugen på vilken distansutbildning som helst inom webbutveckling, för IT-bolagens skull: nöta igenom grunderna det första året inom vilket programmeringsspråk det nu blir (HTML, CSS, JS, PHP, SQL) innan du börja surfa på LLM-vågorna för en dag kanske det försvinner och då blir du kanske lika "kodförlamad" som om du börjat om på ruta ett.

Om du insisterar på att använda LLM:er under utbildningens gång se till att det är i form av mentorskap där du _vet_ att din så kallade "mentor" ofta hallucinerar och egentligen inte fattar vad denne säger men oftast säger ord som ofta hör ihop rent statistiskt talat!

Avslutningsvis vill jag tacka allt stöd här jag fått under de snart två studieåren som gott! ❤️

Dold text

Mvh,
WKL.
P.S. Detta är inlägg 4/4.
P.S.S. Ställ gärna dina frågor om utbildningen i denna tråd. Kom ihåg att det kan vara helt andra kurser om och när väl du söker utbildningen!
P.S.S.S. Jag skrev denna recension i en sittning samma dag (idag 2024-06-06) och det tog mellan 4-5 timmar om jag minns rätt. Jag är sjuk i huvudet - men det syns ju på användarbilden redan!😆

Av WebbkodsLärlingen

[UTBILDNINGSRECENSION] - HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans hos MIUN) 3/4

P.S. Detta är inlägg 3/4. Ett återstår!
HT2023 IK060G Informatik GR (A), Projektledning, 7,5 hp (distans)

Projektledning har jag läst för länge sedan och jag undrade först om jag kunde ha nyttjat den tidigare kursen då som tillgodo för att slippa läsa denna. Men efter lite tänk så tänkte jag att jag kunde lika gärna läsa om den då denna var mer fokuserad på IT-baserad projektledning i form av agil projektledning.

Jag besökte en arbetsplats där jag fick prata med en IT-baserad projektledare om agil projektledning och sedan skrev jag en rapport - slutuppgiften - om vår intervju och sedan vad som kunde ha förbättrats utifrån diverse rådande projektledningsteorier och allt inom det området med fokus inom IT. Mycket teoretiskt snack och mycket av vad jag uppfattade som "sunt förnuft" gällande den agila projektledningsmetoden.

Att arbeta i sprintar eller åtminstone arbeta med att få återkoppling från slutkund är ju "sunt förnuft" anser jag. Det är ju slutkunden som oftast är tänkt ska använda ens slutprodukt eller sluttjänst på något vis - antingen själv eller någon annan slutanvändare. Den kluriga varianten är om slutkunden vill att någon slutmarknad ska använda den men som inte får känna till den och därmed blir det svårt med kontinuerligt testande av den.

Personligen upplever jag inte att jag lärde mig något nytt mer än att känna till lite vanliga förekommande ord inom IT-baserad projektledning som stand-up-möten, sprintar, och scrums & scrum masters. Här hade vi en gruppuppgift vilket vi också redovisade och det gick bra och var roligt att få samverka med andra klasskamrater.

För övrigt var kursen annars lite som en annan senare kurs i utbildningen: ¯\_(ツ)_/¯

Vad borde ha funnits med i kursen som saknades?

  • Vi hade en vikarierande lärare, så möjligen den ordinarie lärare?

Dold text

HT2023 DT193G Datateknik GR (B), Fullstack-utveckling med ramverk, 7,5 hp (distans)

I denna kurs så började vi nu sätta oss in i så kallade ramverk för allra första gången under utbildningens gång. Nu hade vi fått slipa våra grundläggande förmågor inom HTML, CSS, JS, PHP & MySQL så nu var det dags att få en hel del hjälp på traven. Och denna kurs hade ett fenomenalt upplägg:

  1. Först introducerades vi för konceptet av ramverk och då CSS-ramverk först. Vi fick välja att koda i valfritt CSS-ramverk. Här valde jag Tailwind CSS.

  2. Sedan introducerades vi för PHP-ramverket Laravel - ett backend-ramverk (går även att nyttja som ett fullstack-ramverk) - för att vi skulle lära oss skriva mot ett serverbaserat ramverk och dess skräddarsydda REST API vi tagit fram.

  3. Därpå introducerades vi för frontend-ramverk där vi skulle skriva om VueJS, Angular & ReactJS. Vi skulle även koda lite i något ramverk och då valde jag VueJS.

  4. Slutuppgiften var sedan att kombinera alla tre stegen ovan: välj ett CSS-ramverk, använd Laravel som backend-ramverk och välj ett frontend-ramverk. Jag valde Tailwind CSS & VueJS.

Sa jag "jag"? För första gången under utbildningens gång så fick vi vara som flest två personer i ett och samma arbete. Så länge det framgick klart och tydligt i rapporten vem som hade gjort vad så var det inga större problem. Jag vet att vissa delade in det hela på antingen göra all frontend eller göra all backend, men jag kom överens med min kodpartner då att vi skulle istället göra både frontend & backend men dela upp olika delar.

Vi gjorde nämligen ett internt varulager med datorkomponenter. Så min kodpartner kunde då koda både frontend & backend för att lägga in datorkomponenter i lagret. Sedan kunde jag koda frontend & backend för att redigera en datorkomponent. Vi lyckades få till så vi kunde lägga till datorkomponenter med bilder såväl som att byta ut enbart en bild, radera en enskild bild, radera hela komponenten, samt att vi tog nu det hela till nästa nivå.

Jag tog mig an att för första gången göra det mer "avancerat" och användbart rent praktiskt talat. På denna webbplats gick det att inte bara lägga till datorkomponenter utan även medarbetare som kunde ha olika CRUD-behörigheter för hanteringen av datorkomponenter. Det var till och med CRUD på bildhanteringen så vissa kunde lägga till datorkomponenter men inte lägga till bilder till dem, och så vidare.

Det blev ett riktigt spektakulärt slutprojekt i slutändan med kodpartern och det tackar jag allra ödmjukast för! 🫡

Psst... lägg märke nu att vi är väl nästan halvvägs i utbildningen och jag har redan lärt mig 100 % CRUD med behörighetstänk inblandat. En ny "lägsta ribba" har satts nu för min del under utbildningens gång fram tills nu.
Vad borde ha funnits med i kursen som saknades?

  • Det fanns tyvärr endast mustiga användbara videoklipp för VueJS-ramverket och inte ReactJS vilket jag förstått finns nu i en ny enskild kurs vilket kommer att ersätta denna om jag minns rätt.

Dold text

VT2023 DT162G Datateknik GR (B), Javascriptbaserad webbutveckling, 7,5 hp (distans)

Tillbaka till riktiga kurser inom webbutveckling! Denna kurs handlade om MERN-stacken, det vill säga MongoDB+ExpressJS, ReactJS (fast du kunde välja VueJS eller Angular istället om du ville det), och NodeJS. Här fick vi då lära oss dokumentbaserad databas såsom MongoDB vilket är rätt så mysigt tycker jag. Men eftersom det inte är öppen källkod och inte riktigt går att använda utan att betala för det vilket går ihop med det förstnämnda så känner jag tyvärr i efterhand att det var/är rätt så "meh"🤷.

Här fick jag nu chansen att prova på ett annat frontend-ramverk än VueJS från tidigare så jag valde då ReactJS efter rådfrågning här på Sweclockers. Jag valde då att bara göra om ett tidigare projekt - datorvarulagret från Webbutveckling III - fast nu i MERN-stacken vilket faktiskt gick enklare än jag trodde. I alla fall blev så fallet efter flera dagars nötande av ReactJS och dess state management hell och liknande.

Här tog jag då hjälp rätt så mycket av chatGPT3.5 för att försöka få något hum av det hela. Men jag ville samtidigt vara försiktig så jag inte fick alldeles för mycket - i form av kodsnuttar - färdigserverat på fatet. Nu har ju ReactJS ändrats en del och vissa saker som jag använt - t.ex. useContext - kommer ju att fasas ut i kommande version om jag hängt med i IT-världens dramaturgi? 🤔

Något jag verkligen lärde mig uppskatta här var nu serverbaserad JavaScript då vi hittills bara kört JavaScript i webben (infogning: ja, vi hade NodeJS i Webbutveckling III, men bara ett smakprov) och det blev lite tydligare för mig om det här med Web API:er och att DOM (document-objektet) är något webbläsaren tillhandahåller JavaScript-motorn/körmiljön(?) medan JavaScript-körmiljön i NodeJS inte har document-objektet (för det finns ju ingen webbläsare där) men då istället har helt andra API:er att nyttja.

En rolig händelse under denna kurs var att jag skrev någon kod som gjorde så att det blev riktigt tok i filsystemet på datorn för mitt kodprojekt. Något hade inträffat när en mapp fått ett punkttecken (.) före namnet så det gick inte att radera mappen för den verkade ha blivit en referens för en annan mapp? Som tur så hade jag lärt mig fram tills nu att nyttja Git på rätt sätt. Så det var bara att få bukt med den "konstiga" mappen på datorn och sedan återställa till senaste git commit!😅

Jag minns att vissa klassen inte alls tyckte om det "relationslösa" MongoDB som databastyp innebar men jag älskade det, precis som jag älskar lösa datatyper i JavaScript (japp, jag kan fortfarande inte TypeScript ännu) och i PHP. Mer kontroll och mer ansvar att det ska bli rätt. Jag är som tur var mycket detaljnoga så det var för det mesta inga större problem.

Till slutuppgiften lämnade jag som sagt var in MERN-stack för datorvarulagret med exakt samma grej om "100 % CRUD 😎" och med medarbetare med olika behörighetsnivåer. Detta hade blivit en standardnivå nu för mig och det lade verkligen grunden för det kommande examensprojektet som dessutom var rätt så "oplanerat" på ett sätt (när vi väl kommer dit).

Vad borde ha funnits med i kursen som saknades?

  • Möjligen fler videoklipp om att köra MongoDB queries för dokumentationen var/är verkligen inte nybörjarvänlig trots att vi hade börjat lära oss att förstå viss dokumentation och dess vedertagna syntax?

Dold text

VT2023 DT071G Datateknik GR (A), Programmering i C#.NET, 7,5 hp (distans)

Du kanske minns hur jag nämnde i början av hela recensionen att dessvärre fanns det två lärare - mycket schyssta människor IRL och allt - som var lite mindre bra än två andra under utbildningens gång? Här är då en till kurs som de två hade som var mindre bra i upplägget. En i klassen skrev faktiskt i sin utvärdering vilket vi fick för alla kurser när de typ var över - två dagar innan sista inlämningsdagen för slutuppgiften - där personen skrev att personen kunde lika gärna ha tittat på YT och fått högskolepoäng för det.

Så undermålig var kursen och att skriva i strikt typade språk är en utmaning för mig. Men det är så klart på gott och ont: det onda är att det svider så fort du glömt något i en given datatyp som i sin tur kanske innehåller flera andra slags datatyper och så vidare med nästlade datatyper, och så missar du en datatyp någonstans i datatypdjungeln och du får en skrikande kompilator på dig.

Du känner - i alla fall jag gjorde/gör det - att, "Jag vill bara koda för att skapa något... kan jag får göra det istället för att betygsättas av dina datatypskrav? 🥱" I en Discord-grupp tipsades jag då om att använda webbtjänster som kunde omvandla JSON-data till motsvarande datatypstrukturer för C#.NET och ibland fungerade det och ibland inte.

En mycket stor utmaning i denna kurs på grund av det katastrofala upplägget (åsikter skiljer säkert emellan (tidigare) klasskamrater) var att det här med OOP och allt som det innebär med ärvda klasser, mellangränssnitt (interfaces), gjorde det svårare i senare C#.NET kurs som handlade om webbutveckling (C#.NET ASP.NET Core MVC med EF Core; DT191G) eftersom då var det vedertaget att det var klart som korvspade om hela OOP-tänket med C# som programmeringsspråk.

Hursomhelst så klarade jag kursen även om jag kände att jag nu haltade inom OOP i C#. I slutuppgiften fick vi göra exakt vad vi ville så det fanns dåligt fokus på vad som ansågs vara godkänt och vad som ansågs vara av den allra högsta kvalitén. Det jag valde att göra var att med hjälp av HttpClient-objektet ansluta mot en MongoDB-databas för att ändra behörigheter för medarbetare. Jag återanvände alltså MongoDB-databasen för datorvarulagret - smart anser jag nu så här i efterhand!

Vad jag lyckades lära mig var litegrann - och ändå inte - hur man kunde göra CRUD-anrop från C#.NET och då med sessionskakor inbakade i varje anrop. Rätt mycket komplicerad(?) för rätt så axelryckande resultat. Men men... nu var den jobbiga strikta C#.NET-kursen över! ༼ つ ◕_◕ ༽つ
Vad borde ha funnits med i kursen som saknades?

  • Fler ingående videoklipp om C#.NET och de fundamentala bitarna än enbart några få mycket magra föreläsningar då det hela var ett nytt och relativt strikt programmeringsspråk jämfört med många övriga språk innan som JS & PHP bland annat.

Dold text

P.S. Detta är inlägg 3/4. Ett återstår!

Av WebbkodsLärlingen

[UTBILDNINGSRECENSION] - HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans hos MIUN) 2/4

P.S. Detta är inlägg 2/4. Två återstår!
VT2023 DT093G Datateknik GR (B), Webbutveckling II, 7,5 hp (distans)

Nu ska vi se... Webbutveckling II var introduktionen till serverprogrammeringsspråket PHP och även den tredje gruppen av två parallellkurser ihop med databaser (DT003G). Här blev det nu rätt så annorlunda tänk: tidigare i JavaScript-introduktionskursen så laddade vi först fram HTML och sedan körde JS för att göra anrop mot ett REST API men här skulle vi nu föreställa oss att någon hade redan skickat oss ett GET- eller POST-anrop på en och samma sida så vi behövde då hantera eventuella $_POST- & $_GET-data innan vi visade något på samma givna undersida.

Det var klurigt och det var lite "härdsmälta i hjärnan" när åtminstone jag hoppade mellan JavaScriptsyntax och PHP-syntax för vi var ju fortfarande nybörjare inom webbutveckling så både JS- & PHP-musklerna var "svaga" så att växla mellan dessa var klurigt. Och då har jag ju inte ens berättat om databaskursen där vi fick lära oss ett ytterligare programmeringsspråk... nja... nåja... ett frågespråk. Så att hålla sig till tre olika syntaxer kunde ta lite på ens hjärnkapacitet på den tiden.

Här fick jag också förkärlek till lösa datatyper inom PHP likt i JS även om det var lite mentalt utmanande att hantera $_POST & $_GET innan någon HTML skickades till webbläsaren. Och egentligen förstår jag inte ännu det här med "output buffering" i samband med echo, print eller bara vanliga HTML-element. Jag förstår inte skillnaden här mellan statiska HTML-filer och PHP-filer?

En statisk HTML-fil kan skickas med HTTP-huvuden medan en PHP-fil "tolkas" och strömmar HTML-data (så tillvida inte det stoppas av ob-funktionerna på något vis) och därför måste man ha koll på vilka HTTP-huvuden som har skickats så det inte blir felmeddelanden som exempelvis att man redan skickat en statuskod eller något annat HTTP-huvud som inte får skickas fler än en gång per ett givet HTTP-anrop? 🤔

Ja, som du kanske märker nu... så har jag inte riktigt - trots drygt 1,5 års studier - 100 % koll på vad som egentligen pågår under motorhuven hos de olika programmeringsspråken som JS och PHP bland annat. Men men, det kommer väl med tiden när man får möjligheten att träffa riktigt duktiga webbutvecklare att lära sig från!

Slutprojektet i denna kurs var rätt så valfritt så länge det hanterade data lagrat i $_POST & $_GET och stötte "100 % CRUD 😎". Jag gjorde då en bloggsida för användare att logga in på och lägga upp egna blogginlägg inklusive bilder på dem. Här blev jag då introducerad till att försöka göra något slags redigeringsblock likt det i WordPress men det gick väl väldigt sisådär om jag minns rätt! 😂

Nu började jag få till lite mer roligare och häftigare CSS trots att utseendet på den slutgiltiga projektwebbplatsen såg ut som något hämtat från en annonswebbsida för första Matrix-filmen. Jag fick även lära mig att sanera data med hjälp av strip_tags() och även hur man kan lagra HTML-element för att sedan rendera ut dem efter att ha hämtat dem från databasen.

Exempelvis så tillät jag vissa HTML-element medan övriga togs bort med strip_tags() sedan lagrades de som HTML-entiteter i en SQL-databas. När ett blogginlägg sedan hämtades för att skrivas ut så användes html_entity_decode() eller htmlspecialchars_decode() så att webbläsaren kunde rendera ut HTML och inte bara skriva ut en lång sträng från en databas.

I denna kurs så lyckades jag även få till en JavaScript-baserad chatt vars utseende förde ens tankar till gamla goda mIRC-tiden med #pcw, #pracc och CS 1.5-1.6-tiden! 😭 Denna idé om chatten kom efter att under en föreläsning så visade en lärare (en av de två bättre lärarna under hela utbildningens gång) hur man kunde använda JavaScript för att dynamiskt och interaktivt rendera data efter att en PHP skickat all sin HTML för en given webbsida.

Då fick jag snilleblixtidén att försöka göra en chatt som laddades om var 15:e sekund. Så den var minst sagt ytterst "primitiv" men den fungerade som tänkt. Du loggade in och du kunde bara skriva chattmeddelande om du var inloggad (och ja, även REST API-delen kontrollerade sessionsanslutning så fungerade inte med något fuldrag inuti POSTMAN eller Thunderclient). Idag hade nog en WS-anslutning lämpat sig bättre, men det hade jag inte ens hört talas om då!

Vad borde ha funnits med i kursen som saknades?

  • Utförlig om än grundläggande genomgång om det här med "output buffering" för det är något jag inte riktigt förstår mig på inom PHP samtidigt som det verkar vara viktigt inom exempelvis "template engines".

  • Det hade varit mycket användbart och värdefullt att redan här och nu börja fördjupa sig i de olika HTTP-huvuden som finns med tanke på den omfattande användningen av de globala arrayvariablerna $_POST & $_GET & $_SERVER bland annat.

  • Utförlig om än grundläggande genomgång av vanliga servrar som exempelvis apache och nginx - samt vanlig konfigurering av dem - eftersom vi höll ju ändå på med PHP vilket brukar sjösättas på en av de två vanliga servermiljöerna om jag minns rätt?

Dold text

VT2023 DT003G Datateknik GR (A), Databaser, 7,5 hp (distans)

Denna kurs - vilket framgår klart och tydligt i webbutvecklingsdagboken för denna distansutbildning - var fylld med blandade känslor om läraren och kursen i sin helhet. Men ska sanningen fram så var det ändå helt klart en av de matnyttigaste kurserna i hela utbildningen trots kommunikationssvårigheterna online. Jag hade den fina äran att träffa läraren fysiskt så att den webbaserade kommunikationen förbättrades.

Det är mycket tack vare denna kurs att jag under examensarbetet kunde inleda det första avstämningsmötet med uppdragsgivaren (exjobbgivaren) genom att analysera deras kärnverksamheter med hjälp av en så kallad (kärn)verksamhetsbeskrivning. Vissa skulle nog kalla det för "förstå domänet du ska programmera för". I takt med verksamhetsbeskrivningen så kunde jag skriva ned entiteter, deras olika slags (härledda) attribut, såväl som relationer med andra (svaga) entiteter - allt med utgångspunkten att först "normalize the shit out of it, then denormalize as needed!"🤣

I början av kursen var det oerhört utmanande för nu handlade det om någonting helt annat än PHP, JavaScript, HTML och/eller CSS. Det handlade om fundamentala saker om att lagra data i olika slags databaser. Kursens fokus låg 100 % på relationsbaserade databaser och inte dokumentbaserade databaser som exempelvis MongoDB vilket kom i en senare kurs.

Trots att det var en rejäl uppförsbacke i kursen med en mycket petig, sträng men också mycket välmenande lärare, så gav det enorma resultat i framtida kurser. Hur då? Jo, för att alla framtida kurser använde sig av en eller annan form av databas. Och med rätt så grundläggande förståelse om bra kontra dåliga databaser så var det lättare att göra rätt från början istället för tvärtom, det vill säga fel från första början.

Detta gjorde det så oerhört simpelt då i efterhand med datamodelleringen och implementeringen av databasen som mer eller mindre aldrig innehöll några som helst slags motsägelser som exempelvis null-data, upprepade data, och så vidare. Även rätt mängd av normalisering tog bort majoriteten av möjliga och plötsliga motsägelser i databasen.

Slutuppgiften var att ta fram en databas för antingen fiktivt eller riktigt företag med pseudodata och ett antal obligatoriska SQL-frågor. Och så fanns det möjlighet till att inkludera procedurer (procedures), utlösare (triggers) och vyer (views) för högre slutbetyg. Jag siktade på B-betyg men fick C.

Så även om jag hade nog flest negativa inlägg om denna kurs så har den ändå haft en mycket positiv genomsyrande effekt på övriga kurser inklusive den fantastiska referensen i examensarbetet. Så stort tack - trots alla besvärligheter från mig - till databasläraren! 🫡

Vad borde ha funnits med i kursen som saknades?

  • Det här är mer ett skämt som jag hämtat från en annan Discord-grupp, men: vi lärde oss aldrig subqueries och detta verkar anses vara "något bara seniorer får göra"? Det är förbjudet att göra subqueries för hur ska någon annan som tar över ens SQL-kod förstå en subquery som?

  • Vi lärde oss dessvärre inget om indexering för optimering eller annan form av frågeoptimering. Kanske överdrift för första kursen inom databaser?

  • Vi lärde oss dessvärre inget om hur man kan sköta hantering (de)krypteringsnycklar för att (de)kryptera delvisa mängder eller fullständiga databaser. Överkurs i en introduktionskurs?

  • Vi lärde oss inget om att göra ACID-transaktioner eller att kunna "lastbalansera" (eng. "load balancing") data över flera olika databaser spridda över olika platser runtom i världen. Kanske överdrift för en introduktionskurs i databaser?

Dold text

VT2023 DT197G Datateknik GR (B), Webbdesign för CMS, 7,5 hp (distans)

Japp, du läste rätt... ännu en webbdesignfokuserad - men det blir bättre: det var med WordPress vilket är 100 % klassbaserat och jag avskyr klasser för att personligen upplever jag att det blir så rörigt. Även om det går att kontra genom att säga, "Att göra allt till funktioner är minst lika spagettikod det också!" så upplever jag ändå att jag har bättre koll på tillståndet i olika variabler med hjälp av funktioner än flera samverkande klasser vars tillstånd måste felfsökas för varje ökad kodkomplexitet.

Ja, det är vad "CodeTubers" skämtsamt(?) kallar för "a skill issue". Kardemumman i denna kurs var att utveckla ett fullständigt separat WordPress-tema med de typiska beståndsdelarna som index.php, single.php, och övriga obligatoriska php-filer för vilket tema som helst. Alltså var det inte något barntema - det var faktiskt förbjudet och hade inneburit kompletteringskrav för den som försökt sig på att lämna in ett barntema istället för ett komplett tema i slutuppgiften.

Kursen hade gott om videoklipp för att kunna bygga ihop ett WordPress-tema från grunden: allt från att konfigurera filerna som skulle läggas upp så ens eget tema kunde väljas i valfri WordPress-sjösättning till att skräddarsy egna Widgets och deras placeringar i temat. I och med alla klasser och att det kändes som om man behövde lära sig WordPress från grunden för att ens kunna göra något så blev jag bara mer negativt inställd mot klasser. (ja, C#.NET har dåliga nyheter för mig inom kort!😁)

Slutuppgiften innebar som sagt ett WordPress-tema med funktionalitet att skicka $_POST-data i form av kontakt- och bokningsformulär för en fiktiv plats. Här använde jag för första gången AI men inte något LLM:s utan snarare Stable Diffusions bildgenereringsmotor och olika modeller där för att ta fram en logotyp som jag sedan kunde fila lite på inuti Photoshop, samt alla foton på webbplatsen är helt AI-genererade.

Oj, jag sa fel: jag använde visst LLM:s för första gången nu: allt textinnehåll på webbplatsen var helt AI-genererat (chatGPT3.5 - jag har i skrivande stund inte köpt någon LLM-tjänst ännu) på svenska för att göra det trevligare att "ta in" som helhet vid betygsättning. Det är något speciellt att läsa en faktisk text på engelska eller svenska istället för att försöka gissa sig fram i lorem-text då ingen lärare i denna utbildning talar/läser latin! 🤪

Så... då undrar du säkert hur jag här och med började använda chatGPT3.5 och dylikt under utbildningens gång? När jag fann detta "Automatiska Ordkompletteringsverktyg" så insåg jag genast riskerna med det i utbildningssyfte: att bli för lat för att koda det mesta på egen hand och då bara vilja nyttja större kodsnuttar från AI:n.

Jag beslöt mig därför från och med då och flera kurser framåt att endast felsöka och rådfråga väldigt små steg när jag hade kört fast. Exempelvis fråga hur man kunde loopa igenom en array på något vis för att man var ute efter något särskilt, eller felsöka en SQL-query som inte riktigt hämtade de data jag ville ha. Eller byggandet av SQL-tabellerna, såväl som att få fram testdata att köra.

Jag var mycket försiktig med att ta emot större färdiga data. Däremot då denna kurs inte hade något större fokus på JavaScript så bad jag om relativt så färdiga saker som automatisk hamburgermeny. Det är fortfarande en av de små saker rent designmässigt jag har utmaningar med, dvs., designen av den så den växlar från desktopversion (en rad med lasagneplattor) till mobilversion (hamburgare).

På denna tid så var bara något som att toggla av/på en hamburgermeny så den doldes/visades rätt så komplext för mig medan det så klart idag och nu bara är en fråga om att växla en given klass inuti ett föräldraelement för menyn. Eller varför inte bara köra direkt på style-attributet och växla mellan "block" och "none"?

De goda nyheterna med denna kurs var att det var den sista med stort fokus på webbdesign medan de övriga var primärt backend-fokuserade. Denna och ett par till var rätt så frontend-fokuserade vilket jag har stora utmaningar med för jag bara saknar "känslan" att koda rätt även om jag kan koda. I princip måste jag utgå från någon annans Figma-fil för att kunna göra något större visuellt underverk.

Vad borde ha funnits med i kursen som saknades?

  • Det kanske bara var jag återigen men jag upplevde inte att jag riktigt fick några "siffernördiga" webbdesignkoncept att plocka med mig. Vad jag menar är att exempelvis veta på ett ungefär olika pixelavstånd i olika slags HTML-strukturer som exempelvis en "Hero Banner", en "Card", vanliga slags tabeller, och så vidare. Att utgå från siffror tror jag hade/skulle hjälpa mig mer i framtida webbdesignprojekt. Åtminstone som en utgångspunkt.

Dold text

VT2023 DT173G Datateknik GR (B), Webbutveckling III, 7,5 hp (distans)

Oj! Jag skrev först att denna kurs handlade om ramverk men så var inte fallet utan det var "Fullstack-utveckling med ramverk" (DT193G). Jag skriver/skrev denna recension i en sättning fördelat på fyra foruminlägg så jag beklagar trots att du inte kunde ha märkt det om jag inte berättat det nu. Så denna kurs recenserar jag efter DT162G fast den kom flera kurser - bara så du vet!

Denna kurs introducerade JavaScript på serversidan men rätt så lite jämfört med kursen om MERN-stacken (DT162G). Vi fick använda automatiseringsverktyget Gulp såväl som CSS-preprocessorer såväl som SASS/SCSS. Trots att jag inte hade några större svårigheter med SASS/SCSS så kom jag senare att föredra Tailwind CSS ändå. Jag minns att en som gjorde examensarbetet förra året var på ett företag - där personen även fick jobb - där många körde SASS/SCSS så denna person kände sig lite grupptryck att börja använda det framför Tailwind CSS.

I denna kurs gjorde jag något lite annorlunda: vi skulle nämligen i slutuppgiften ha tre olika delar:
1) En administrativ webbplats för att hantera något internt som inloggad administratör
2) En webbtjänst, dvs., ett REST API, som både administratören och den publika webben kunde "tala" med
3) En publik webbplats där besökare kunde göra något som sedan administratören kunde hantera på något vis

Jag valde då en lokal pizzeria här nere i stan och gjorde ett administrativt gränssnitt för administratören att först logga in och sedan genom CRUD-anrop mot PHP-baserat REST API hantera saker som:

  • Det administrativa användargränssnittet skulle kunna ta emot bordsbeställningar och sedan acceptera/neka dessa och bokaren meddelas via angiven e-post.

  • CRUDa en pizzeriameny inuti administrationspanelen genom att skapa/redigera/radera i menylistan såväl som läsa ut hela den.

  • Läsa inkomna meddelanden från kontaktformulär och kunna besvara dessa direkt i adminpanelen genom att mejla till angiven e-post.

  • Hantera lagda takeaway-beställningar i realtid likt onlinepizza (mer om det nedan).

  • Hantera inkomna lämnade recensioner vilket bara gick att lämna om du hade ett kvitto på att du hade hämtat en takeaway-beställning först.

Så på publika webbplatsen kunde besökare kontakta via kontaktformulär, lämna recensioner om de haft takeaway-beställningar med kvitton, boka bord för ett antal personer under en viss tid om dygnet, samt göra takeaway-beställningar där de i realtid tack vare setTimeout() kunde få uppdatering i relativ realtid om en beställning nekats, om den godkänts och tillagades och sedan när den fanns att hämta.

Det var en rätt simpel men cool lösning och som nu skulle säkert ha lösts med WebSockets men det var inget jag förstod mig på då eller ens kände till så väl då. På tal om lösningen så var den både simpel men kanske också lite invecklad. För jag minns nu att i databasen behövde jag kontrollera status för varje order och sedan uppdatera i databasen för att skicka tillbaka till klienten att "Nu ska du visa det här istället!" vilket var alltså hårdkodat i publika webbens JavaScript vilket så klart inte är så snygg lösning så här i efterhand. Men coolt på sin tid åtminstone!

Denna kurs gav mig alltså möjligheten att koda ihop en halvfungerande realtidsservice som också så klart hade gått att förstöra på klientsidan rejält!

Vad borde ha funnits med i kursen som saknades?

  • Jag kan inte komma på något - helt ärligt talat. Det var en mycket bra kurs helt enkelt! Det ska vara det som var/är genomsyrande under hela utbildningens gång: minimalt fokus på säkerhetstänk utöver saker som att sanera inmatningsdata och förhindra SQL-injektioner.

Dold text

P.S. Detta är inlägg 2/4. Två återstår!

Av WebbkodsLärlingen

[UTBILDNINGSRECENSION] - HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans hos MIUN) 1/4

OBS: Denna recension ÄR indelad i flera inlägg. Den innehåller först - i första inlägget - introduktion och sedan i kronologisk ordning upp till fyra kurser per inlägg!

P.S. Detta är inlägg 1/4. Tre återstår!
Introduktion

Detta är en recension av distansprogrammet jag läste vid Mittuniversitetet i Sundsvall - på distans - vars dagbok återfinns här. Den ägde rum mellan den 1:a september 2022 till och den 4:e juni 2024 med förutsättningen att det inte blir/blev något kompletteringskrav i den sista kursen.

Flera viktiga utgångspunkter om recensionen

  • Jag utgår endast utifrån mina erfarenheter och vissa anonyma klasskamraters upplevelser. Detta behöver dock inte nödvändigtvis betyda att du skulle få liknande upplevelser och/eller erfarenheter av utbildningen.

  • Jag utgår endast utifrån vad jag upplevde var lätt och/eller svårt. Något jag anger som svårt eller lätt kanske är det helt motsatta för dig.

  • Jag utgår endast utifrån vad jag upplevde som för- och nackdelar. Något jag upplevde som en nackdel eller fördel kanske skulle upplevas som det motsatta för dig eller kanske till och med helt neutralt/likgiltigt.

  • När jag växelvis säger "projektuppgiften" eller "slutuppgiften" i en kurs (med undantag för sista kursen - DT140G) så menar jag på den sista inlämningsuppgiften som är betygsättande i den kursen. Övriga uppgifter i en given kurs hänvisas växelvis till "deluppgifter" eller "(del)moment".

  • I slutet av varje recenserad kurs går jag igenom vad jag personligen i efterhand upplever kunde ha varit bra om det varit (eller inte varit) med i kursen. Detta är då i efterhand efter hela utbildningens förlopp då jag vet mer idag än vad jag visste då.

  • Tänk på att vissa saker kanske jag inte minns som kanske borde ha tagits upp i någon given kurs. Faktafel kan även förekomma. Jag reserverar rättigheterna att hela recensionen ska tolkas som en subjektiv upplevelse utifrån en individs perspektiv och representerar inte nödvändigtvis den genomsnittliga personens upplevelse av utbildningen.

  • Observera till sist att vissa kurser här läste jag inte men andra i den virtuella klassen läste dem. Observera även att vissa av dessa kurser inte finns med för de som läser i början på detta år och/eller nästa läsår.

Utbildningens kurser recenseras i den ordning de förekom enligt nedan. Det var alltid två kurser som löptes parallellt vilket sträckte sig över cirka två månader i och med 50 % studietid fördelad på vardera kurs. Undantaget är den allra sista kursen - DT140G - som gick på 100 % studietid enskilt.

Dold text

HT2022 DT057G Datateknik GR (A), Webbutveckling I, 7,5 hp (distans)

De två första parallellkurserna introducerade HTML, CSS & JavaScript (JS) på grundläggande vis. Den ena kursen hade ett relativt katastrofalt upplägg (DT057G) medan den andra kursen varit fenomenalt upplagd (DT084G). Varför var den ena så dåligt upplagd? Jo, det så kallade "studiematerialet" var primärt webblänkar till Wikipedia-sidor om HTML, CSS, HTTP-protokollet, www, och övriga relevanta ämnen för en som nyss påbörjat HTML & CSS på nybörjarnivå.

Det fanns en lärobok rekommenderad (ISBN: 978-1-118-00818-8) men den är från 2011 för en utbildning som gick av stapeln 2022. Med tanke på hur snabbt tekniken utvecklas - eller åtminstone hur fort det föds nya JavaScript-ramverk varje månad - så var detta ytterst konstigt urval av föreslagen kurslitteratur tyckte jag (och vissa andra från klassen). Boken var mycket hjälpsam om än utdaterad i vissa slag. Och värre var det ju att vi som nybörjare inte kunde avgöra vad som var utdaterad och inte eftersom vi var ju just det: nybörjare på HTML & CSS!

Samtidigt fanns dock digitala föreläsningar - även de som spelades in lajv för de som deltog - men dessa var relativt "magra" jämförelsevis med motsvarande lajvföreläsningar i JavaScript-introduktionskursen. Detta kan delvis ha förklarat varför nästan 25 % försvann av hela klassens dryga 100+ Discord-medlemmar redan under det första halva läsåret. Troligen gav det en riktigt dålig försmak på vad skulle komma härnäst i utbildningen.

Utmaningen med denna introduktionskurs var att det inte riktigt förklarades på djupet - om än för nybörjare - om CSS selektorers specificitet, om faktumet att webbläsaren redan har standard CSS applicerade och att dessa kan appliceras olika av olika webbläsare (exempelvis standardutseendet för formulärelement såsom knappar, med mera).

Exempelvis ett mycket svårt moment i denna kurs - upplevde jag - var momentet där vi skulle skapa en responsiv sida utan att ha något bättre hum om media-direktivet i CSS eller hur ens flex och grid faktiskt fungerade. Det tog faktiskt troligen ett år för mig att inse att det finns något som heter inre och yttre värden (outer and inner values) inom CSS. När det kopplade för mig så blev flex & grid mycket lättare att greppa och applicera i praktiken.

En riktigt motsägelsefull sak i denna kurs var en del i projektuppgiften och vad som skulle kunna ge en toppbetyg: Du skulle implementera webbanvändbarhet (se kursen DT068G vilket är en av de två nästa parallellkurserna i utbildningen efter dessa två första) enligt Webbriktlinjers specifikationer. Hur skulle vi i en av de första parallellkurserna i en Webbutvecklingsutbildning kunna göra det när utbildningen till och med hade en separat kurs för enbart Webbanvändbarhet? 🤔

Dessvärre berodde en hel del på kursens delvis katastrofala upplägg på att de ansvariga lärarna inte verkar vara så engagerade när det väl kom till kritan inom kursen. Lärarna som personer - då jag träffat båda fysiskt - är mysiga och mycket tillmötesgående. Den digitala kommunikationen var dock bristfällig upplevde jag till och från med just dessa två ansvariga lärare. Dessa två återkommer senare i introduktionskursen för C# vilket var tyvärr också rätt så "katastrofal" i sitt upplägg.

Jag lyckades lära mig delvis de grundläggarna pelarna inom HTML & CSS även om det här med flex och grid var fortfarande relativt förvirrande för jag hade ännu inte lärt mig och förstått mig på "outer & inner values".

Vad borde ha funnits med i kursen som saknades?

  • Mycket mer ingående - om än på grundläggande nivå - hur nätverkspaket via TCP/IP och sedan med hjälp av de olika HTTP(s) protokollen (1.1, 2 & 3) skickar och tar emot i det så kallade klient-server-paradigmet.

  • Bättre val av kurslitteratur och inte någon bok som var/är 10 år gammal då.

  • Mer ingående om CSS selektorers specificitet, hur olika webbläsare kan rendera CSS på olika sätt, samt faktumet att vissa CSS-regler är en förkortning av andra separata CSS-regler som exempelvis "flex:" vilket är förkortning för "flex-grow", "flex-shrink" och "flex-basis" i den ordningen.

Dold text

HT2022 DT084G Datateknik GR (A), Introduktion till programmering i JavaScript, 7,5 hp (distans)

Den andra första parallellkursen var introduktion till skriptspråket JavaScript och det var en mycket bra kurs - delvis mycket tack vare två helt andra mycket mer engagerade lärare vilket påvisades främst av skillnaden i kursmaterialet. I denna kurs fanns det mycket mer unikt läsbart material på svenska och flera förinspelade klipp om grundläggande JavaScript.

På så vis gav det ett helt annat första intryck av vad kurser med dessa två lärare skulle innebära i framtida parallellkurser. Tur - beroende på vem du frågar - så hade vi dessa två lärare i majoriteten av kurserna i denna utbildning. Slutuppgiften i kursen var att använda en färdig HTML-fil tillsammans med en färdig CSS-fil och sedan skapa egen JavaScript-kod som skulle fungera som en webbtjänst mot det öppna Sveriges Radios API.

Här upplevde jag att jag briljerade i mitt slutprojekt vilket också var den första kursen i utbildningen där jag fick toppbetyg och jag minns än idag att läraren som betygsatte projektet sa att "Du verkar ha en fallenhet för det här" vilket så klart är #humblebrag. Men här var det också många 8 timmars koddagar med skrik och slit för nu hade jag inte kommit över chatGPT eller liknande LLM:s.

En gång så hade jag glömt att rensa cache i webbläsaren så när jag provkörde min kod efter cirka 2-3 timmars kodande så framstod det som om ingenting fungerade och jag fick då mild existentiell ångest för jag kände "Jag fattar ingenting och jag har tagit CSN-lån. Hur i helvete ska jag klara detta då detta är bara en av de första kurserna?"

Sedan testade jag att köra CTRL+F5 och det fungerade och jag fick den första lärdomen: uppdatera alltid på riktigt när du väl ska uppdatera!

Något jag inte berättat ännu i betygsättningen i denna utbildning är att i varje slutuppgift ska du vanligtvis uppfylla ett par kravspecifikationer för godkänt. Sedan föreslås olika extra saker du kan lägga till för högre betyg. Mina extra funktioner i denna JavaScript-baserade webbtjänst var: förstora & förminska viss brödtext, växla mellan mörk- & ljustema, och växla till och från tabellformat.

Det var kanaltablåer för radiokanaler som hämtades och visades med hjälp av JavaScript. Ingen HTML- och/eller CSS-kod fick röras! Den extra funktionalitet jag var mest stolt över var just tabellomvandlingen då jag - riktigt utan att förstå exakt hur då - fick först hämta alla HTML-element från en given tablå och sedan konvertera om dem till en tabell och sedan infoga den på plats samtidigt som jag behöll en ren HTML-kopia av tablån för att kunna växla tillbaka genom att bara ersätta ett HTML-element med det lagrade HTML-datat.

Allt som allt så var det en mycket givande introduktionskurs till JavaScript och det gav mig förkärleken till procedurbaserad programmering eller funktionsbaserad programmering(?) Det skulle visa sig bli rätt lika med när jag väl blev bättre på PHP. Lärarna var/är fantastiska och läromaterialet följde en mycket bra logik:

  1. Grundläggande delar inom JavaScript

  2. Förenklad användning av webbtjänster

  3. Kombinera de grundläggande delarna med användningen av en öppen webbtjänst (SR API)

Föreslagen - dessutom helt gratis online - kurslitteratur var/är Eloquent JavaScript av Marijn Haverbeke. I skrivande stund har denna bok fått en 4:e upplaga (2024) vilket jag nog ska plöja igenom igen bara för att. Den var/är mycket bra om än klurig samtidigt då det går väldigt fort från simpel JavaScript-kod till relativt komplex kod (dvs., i Project-kapitlen) som jag typ IDAG har _lättare_ att följa än då!

Så nu hade jag lärt mig grundläggande JavaScript samtidigt som Promise-objektet och även det här med att mer eller mindre allt i JavaScript är prototypbaserade objekt.

Vad borde ha funnits med i kursen som saknades?

  • Om jag minns rätt så var inte så mycket ingående om objekt i denna JavaScript-kurs och det var inte heller någon grundläggande utförlig genomgång av hur JavaScript är prototypbaserat och inte klassbaserat.

  • Mer ingående med fler exempel kring Promise-objektet och dess förenkling (async & await) för detta var något jag bråkade med och inte riktigt lyckades som jag hade hoppats på. Jag förstod inte alls det här med "race conditions" och/eller "Promise.all()".

  • Kanske - om än mycket grundläggande - genomgång av att använda generator-funktioner? Om jag inte misstar mig så är async & await baserade på generator-funktioner? Kanske överkurs i en introduktionskurs inom JavaScript dock?

Dold text

HT2022 DT068G Datateknik GR (B), Webbanvändbarhet, 7,5 hp (distans)

Efter de två första grundkurserna inom HTML, CSS & JS så hoppade vi genast på lite mer av det grafiska och användarupplevelser, det vill säga UI och UX (i viss mån). Kurserna blev då först ut Webbanvändbarhet vilket handlade om att göra webbplatser mer tillgängliga och användbara. Denna kurs introducerade även mig till min största svaghet inom webbutveckling - Webbdesign - och därmed min "ärkefiende" Figma!

Kurslitteraturen i denna parallellkurs var "Don't Make Me Think" av Steve Krug, men den gav inte så himla mycket mer än något att hänvisa till vid alla dessa rapportskrivningar. Ja, just det. Vi har nu kommit till en av de sakerna jag avskytt mest under hela denna utbildning: allt jädrans rapportskrivande... Men det var bara att bita ihop och veta att det var något universitetet ville ha mer än jag och/eller framtida arbets-/uppdragsgivare.

Jag har mycket blandade känslor kring webbanvändbarhet i sin helhet. Å ena sidan finner jag det mycket praktiskt med saker som brödsmulor och andra indikatorer på var du är någonstans på en webbplats som har väldigt många och/eller komplicerad navigering. Å andra sidan så finner jag det samtidigt som att webbanvändbarhet i viss utsträckning kan hämma kreativiteten eftersom tanken är att en webbplats ska göras tillgänglig för så många som möjligt vilket kan betyda att den ska förenklas inte bara i innehåll utan också i visuell design.

Å tredje sidan i samband med det kommande Webbtillgänglighetsdirektivet för 2025 så var detta en mycket matnyttig kurs att ta sig igenom även om jag skrek väldigt mycket kring Figma. Jag och några andra klassen brukade skämta om hur kursen kändes mer som en kurs i Figma än i faktiskt webbanvändbarhet!

Däremot ett starkt värde i kursen var att vi hade en gästföreläsning där en fullständigt blind person - som dessutom är webbutvecklare(!) - visade exempel på bra webbplatser (exempelvis var/är @Inet en av dessa - tro det eller ej!) gällande användbarhet och tillgänglighet. Det var en - hm... - ögonöppnare(?) för oss seende individer. Och det gjorde det hela mer "konkret" i hur upplevelsen kan skilja sig extremt mellan seende och icke-seende individer.

Nu minns jag att slutuppgiften i denna kurs var att ta fram en färdtjänstwebbplats med starkt fokus på webbanvändbarhet för att uppfylla så många WCAG-krav som möjligt, i AA- och AAA-nivå. Det gick utan problem för mig men min design var/är fruktansvärt ful och delvis lite "trång" så här i efterhand. Det gick då att förenklat boka färdtjänst enbart med hjälp av tangentbordet tack vare alla de olika webbanvändbarhetsimplementeringar jag gjort för webbplatsen.

Det enda hemska med denna kurs var tvungna att ha statiska HTML-filer för alla undersidor och inget dynamiskt som i PHP. Jag hade väl säkert 10+ undersidor så när jag ändrade en sak i navigeringen i en HTML-fil blev jag tvungen att ändra samma sak i alla övriga HTML-filer. Snacka om mental smärta!

Vi hade tre lärare i denna kurs istället för två och samma tre lärare var också med i den andra parallellkursen (DT200G). De var/är mycket bra så där har jag inget att anmärka på. Vi hade alltså fortfarande de två "bättre" lärarna enligt mitt eget personliga tycke.

Oj! Det var en sak till som var riktigt hemskt i kursen - för mig åtminstone - vilket var att innan vi fick börja på HTML-filerna så blev vi tvungna att lämna in en Figma-prototyp av hela webbplatsen. Och ja, det inkluderade alla 10+ undersidor vilket var så klart riktigt smärtsamt för detta var också första gången vi fick lära oss Figma, varav känslan att det kändes i vissa fall mer som en Figma-kurs än Webbanvändbarhetskurs.

Vad borde ha funnits med i kursen som saknades?

  • Fler och egna exempel om hur olika aria-attribut kan användas för att uppfylla diverse WCAG AA(A) krav än att vi behövde söka detta online eftersom det blev lite som om kursen tappade exklusivt värde om det ändå hade gått lika bra att finna allt online utan att först komma in på utbildningen för att få läsa kursen.

  • Ironiskt nog upplevde jag inte alltid Webbriktlinjer - webbplatsen vi svensktalande individer kan nyttja för att maximera webbanvändbarheten i våra webbapplikationer - som så användbar för att göra webbplatsen min bättre inom användbarhet och tillgänglighet. Det som saknas/saknades där var praktiska kodexempel likt det jag nämnt i ovanstående punkt.

Dold text

HT2022 DT200G Datateknik GR (A), Grafisk teknik för webb, 7,5 hp (distans)

Denna andra parallellkurs introducerade oss till grafisk teknik för webben vilket innebär skapandet och/eller redigeringen av bilder och video för webben. Bland annat fick vi skapa videoklipp som spelades upp via YouTube och videoklipp som spelades upp direkt som bakgrundsbild på webben, varav det sistnämnda jag sällan sett på webben men det är en rätt cool grej om än bandbreddshungrig om det ska vara någon vidare kvalité!

De olika momenten i kursen lät oss först få redigera och fixa till trasiga bilder i Photoshop eller GIMP eller annat valt bildredigeringsprogram. Slutuppgiften var en webbplats som sedan kombinerade de olika delmomenten: en webbplats för ett fiktivt företag som ville ha redigerade bilder och videoklipp för att locka till sig kunder. Jag tog då foton på några av mina legomodeller och klippte ur dessa i Photoshop och filmade även dem för introduktionsvideo på sajten.

Jag lyckades även få till simpelt automatiskt bildspel - vilket även gick att pausa - utan någon användning av något externt bibliotek. Däremot använde jag Lightbox2-biblioteket för manuellt bildspel av alla bilder. I denna slutuppgift gjorde jag även en kul grej: jag fotade först en fluffig mössa, ritade en SVG-version av den i Illustrator för att sedan sätta den på ett Legohuvud (bild) vilket då gjorde att det blev en "norrländsk Legofigur".

Kursen var delvis rolig förutom att nu började det bli krav på Figma och det var det som jag tyckte var jobbigast och tråkigast på grund av min "icke-fallenhet" för det.

En bra sak nu så här i läsandes är att jag skriver lite mindre om de tidigare kurserna på grund av sämre minne av dem (kanske förtryckt i vissa fall? ) och/eller på grund av mitt starka ointresse av dem vilket kanske bidrog till sämre minne av dem.

Vad borde ha funnits med i kursen som saknades?

  • Kanske lite mer uppdaterade videoklipp om redigeringstekniker inuti Photoshop? De som fanns tillgängliga var runt 5 år gamla och nuvarande fotoredigeringsverktyg kan ju se mycket annorlunda ut.

  • Kanske mer illustrativa webbdesignprinciper? Jag upplevde inte att jag lyckades plocka med mig några större webbdesignprinciper för tillämpning efter kursen trots att den för övrigt var rolig och delvis lärorik.

Dold text

P.S. Detta är inlägg 1/4. Tre återstår!

Av WebbkodsLärlingen

Webbutvecklingsdagbok (Webbutveckling, 120 hp) = EOF && -30-

Videoklippen ovan beskriver de blandade känslorna med att HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans) nu äntligen(?) är över. Ena klippet är glädjande med känslan av hur skönt att det är över medan det andra klippet är mer sentimentalt. Jag berättar även om framtidsplanerna med jobb/uppdrag, eget funktionellt PHP-ramverk samt tankar kring vad jag bör lära mig härnäst som blivande webbutvecklingsjunior.

"Jag har gått och blivit med 2-årsexamen i Webbutvecklingsprogrammet på distans vid Mittuniversitetet Sundsvall"
Förra onsdagen klev jag in i ett relativt svalt rum på våning 4 vid Mittuniversitetet i Sundsvall där jag fick redovisa för 7 klasskamrater - tidigare endast kända från Discord-gruppen - och 4 lärare. Redovisningen tog cirka 10 minuter och sedan opponerades jag på av en i klassen som jag haft mest kontakt med. Jag hade faktiskt mejlat och frågat lärarna om vi kunde få opponera mot varandra som ett sätt att betrakta varandra som "Slutbossarna i studierna"!

Jag skrattade högt när jag då såg opponentlistan för denna klasskamrats rapport är på 40 sidor medan min är på över 60 sidor så det var mer för den personen att läsa än för mig. Men det gick bra för oss båda under redovisningen. Okej, det var en sak som gick snett: jag hade fört in testdata när jag demonstrerade min exjobbgivares webbplats och jag hade glömt att ändra i PHP-filen för testdata att också generera unika slumpvisa värden som gör det omöjligt att veta vilka ID-värden som en Situation har lagrat i databasen. En slags anonymisering så att säga.

När en Partner har sökt fram Situationer som har tilldelats internt av administratörerna så kan de klicka på dessa för att visa en enskild Situation, men endast om det tillfälligt lagrade slumpvisa värdet fanns i en viss databastabell. Eftersom testdata ej genererade dessa (jag hade glömt och lägga in det kvällen innan - skapade hela redovisningen i mspaint på 30 minuter medan en annan klasskamrat låg och sov en halv meter bakom mig kl.23:30) så slog webbsidan ifrån och sa då helt enkelt att Situationen ej fanns. Så säkerhetstänket fanns där dock: principen om lägst behörighet och vaga felmeddelanden så ingen vet vad som faktiskt finns och inte.

Under redovisningen så hade jag bett att vi skulle försöka bli färdiga före kl.12:00 så vi inte behövde ta lunch 12:00 till och med 13:30 för att sedan låta sista redovisa och opponeras mot. Då kunde vi istället dra därifrån och umgås mer under dagen. Vi blev färdiga innan kl.12:00 och bjöds då på alkoholfri bubbel och jordgubbstårta samt att vi fick MIUN-ryggsäckar med godsaker i (chokladask + en MIUN-mugg med ytterligare choklad i).

Vi 8 av 34 från Discord-gruppen (vi började som cirka 100+ år 2022) som var fysiskt på plats beslöt oss för att käka middag 18:15 vid en hamburgeruteservering nere på stan och sedan drog vi vidare på en krog och vi blev färdiga för natten runt 01:00-tiden. Dagen därpå så åkte en klasskamrat hem från mig runt 10-tiden medan jag fortfarande låg och drog mig för att bli väck baksmällan som tar mer på en när man är 35 jämfört med 25! 😂

Sedan var det det här med hur mycket jag skulle vilja komplettera ytterligare med i examensrapporten vilket är vad universitetet ville ha medan jag redan hade fått en fenomenal personlig referens från exjobbgivaren. Det är ju den personliga referensen jag bland annat kommer att söka framtida jobb och uppdrag med och inte den 60+ sidor långa examensrapporten med, eller hur?

Med andra ord så kortade jag ned resultatdelen och inkluderade alla programkod förutom känsliga anslutningsuppgifter och zippade ned dessa och slängde in den smått redigerade examensrapporten tillsammans med all nödvändig programkod för att kunna köra lokalt med testdata som nu fungerar korrekt. Under redovisningen efter min redovisning kom jag på rätt fort varför det inte fungerade under demonstrationen men inte under stundens hetta när jag stod och demonstrerade.

Avslutningsvis då för denna rubrik så innebär detta slutet för HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans). Nu inväntar jag bara slutbetyg på examensrapporten och därmed den sista kursen i distansutbildningen varpå jag kan ansöka om examensintyget vilket jag då också kommer att invänta. Jag skickar in en sista uppdatering om det här i bloggtråden, men inget annat. 🫡

Recension kommer mycket snart!
Jag kommer att skapa en tråd där jag skriver en fullständig recension om hela distansutbildningen där jag kommer att besvara frågor. Med andra ord kommer jag inte att besvara några frågor om utbildningen i denna tråd då det var en dagbok om utbildningen och inte en slags AMA-tråd.

I den recensionen är det viktigt att komma ihåg att då utgår jag utifrån vad jag upplevde var enkelt och/eller svårt samt de kurser som fanns då. Vissa kurser kommer att ha försvunnit/bytts ut för de som läser år 2 nästa år och även de som läser nästa termin nu efter sommaren.

Så ha det i åtanke när du läser den recensionen då!

Framtidsplanerna: Jobb, Uppdrag - men vad mer för en blivande webbutvecklingsjunior?
Vad är då planerna för mig som snart blivande webbutvecklingsjunior? Jo:

- Söka fysiska jobb (helst distans men kan leva med hybrid)
- Söka distansuppdrag (Fiverr, UpWork, med flera)
- Skriva ihop något intressant som det 99 % funktionsbaserat PHP-ramverk att söka jobb/uppdrag med för att stå ut från mängden

Blandade känslor här med jobbletandet inom webbutvecklingsbranschen: å ena sidan ska "vi" webbutvecklare hjälpa varandra och å andra sidan så är vi ju samtidigt "konkurrenter", kanske till och med "ärkefiender" då det finns en knapphet av jobb och/eller (distans)uppdrag? 🤔 Några tips, åsikter, erfarenheter och/eller andra ord kring det möjliga dilemmat?

Till sist för denna rubrik så funderar jag även på vad jag bör lära mig härnäst. Jag har varit inne och nosat på datornätverk (eng. "Computer networking") då jag upplever att jag har mer eller mindre noll koll på hur nätverkspaket skickas från en dator till en annan dator (t.ex. Klient-server-paradigmet). Det är lite som om jag är en nyutbildad elektriker men har ingen aning om hur elen från elkraftverken kommer in till hemmen där jag är och drar strömkablar(?)

Du som kanske arbetar som nätverksdriftare eller med datornätverk, vad önskar/skulle du säga vore bra om webbutvecklare kunde lära sig om nätverk för allas bästa och säkerhet? Alltså, även sådant som skulle göra det lättare för dig som nätverksdriftare, och så vidare?

En sak jag vill lära mig att förstå så jag kan förhindra det både på server- & klientsidan är just "skadliga nätverkspaket" som kan sållas bort antingen via Webbapplikationsbrandväggar och/eller direkt inuti routrar via masskonfigurering.

Det är nästan som om jag NU borde hoppa på "Nätverksdrift" utbildning och sedan en YH-utbildning inom webbutveckling och nätverksdrift för att först då söka jobb/(distans)uppdrag! 🤣

Ett 99 % funktionsbaserat PHP-ramverk med routing, query builder & skräddarsydd template engine?!
En idé som kom till mig när jag arbetade med exjobbgivarens webbplats från grunden i utvecklingsstacken HTML, Tailwind CSS, MariaDB & PHP var att klasser får mig att må illa medan funktioner är så oerhört "sexiga".

Och de behöver inte alls vara så "rena" som att de alltid och endast bara gör en sak. Du kan ju ha valfria variabler med standardvärden som gör att de inte körs om du inte tillhandahåller dem vid anrop. På så vis kan du baka in mycket i en och samma funktion och bara vara noga med vilka delar av funktionen som du vill använda. Du slipper också då hålla reda på vilka klasser som har instansierats med vilka tillstånd och så vidare.

Jag kikade även på några YT-klipp om att ta fram en grovt förenklad(?) "template engine" där PHP-funktionen extract() verkar vara hjälten i det dramat. Även om det 99 % funktionsbaserade PHP-ramverket kanske aldrig kommer att nyttjas i skarpt läge av någon annan än mig själv så _tror_ jag att det kan vara lite mer imponerande att visa upp än klassiska frontend-portföljwebbplatser - särskilt då jag inte har något att visa upp gällande webbdesign!

Så... varför säger jag 99 % och inte 100 %? Jo, det enda positiva med klasser är just hur objekt då innehåller snabba vägar till deras egenskaper och metoder. Så jag kan ha ett objekt som heter $data vilket då sedan kan innehålla $data->post, $data->get, $data->json, och så vidare. De väsentliga $_POST, $_GET och json_decode(file_get_contents('php://input')) kan då lagras där efter att de har filtrerats och sanerats.

Filtrering är att först bara hämta de som ska/får användas (tack vare säkerhetstänket med lägst behörighet) eller likt $fillables från Laravel-ramverket. Sanering är sedan att se till att ingen skadlig programkod finns inbakat i de framfiltrerade data. Det sistnämnda är vad som kan bli det klurigaste: för vad är det som på serversidan innan det skickas som HTML tillbaka till klienten kan råka tolkas som programkod och därmed köras och kanske skapa kaos på serversidan? Och detta är ju högst troligt olika beroende på vilken slags server som körs (nginx, apache, kestrel, osv) såväl som serversidans programmeringsspråk (php, c#.net, osv)? 🤔😱

Vad som började den 1:a augusti 2022 kl.18:53 som en fråga om hur && varför en div kan centreras avslutas nu den 5:e juni 2024 kl.07:06 med funderingar kring hur jag ska "skifta" (eng. "escape") potentiellt skadlig programkod i erhållna användardata i ett eget kommande 99 % funktionsbaserat PHP-ramverk som använder egen skräddarsydd Template Engine! 🤯 🫡

Tack För Dessa 2 Studieår && På återseende! 🥹

Mvh,
WKL.
---------
✔️Kurs 1: HT2022 DT057G Datateknik GR (A), Webbutveckling I, 7,5 hp (distans)
✔️Kurs 2: HT2022 DT084G Datateknik GR (A), Introduktion till programmering i JavaScript, 7,5 hp (distans)
✔️Kurs 3: HT2022 DT068G Datateknik GR (B), Webbanvändbarhet, 7,5 hp (distans)
✔️Kurs 4: HT2022 DT200G Datateknik GR (A), Grafisk teknik för webb, 7,5 hp (distans)
✔️Kurs 5: VT2023 DT093G Datateknik GR (B), Webbutveckling II, 7,5 hp (distans)
✔️Kurs 6: VT2023 DT003G Datateknik GR (A), Databaser, 7,5 hp (distans)
✔️Kurs 7: VT2023 DT197G Datateknik GR (B), Webbdesign för CMS, 7,5 hp (distans)
✔️Kurs 8: VT2023 DT173G Datateknik GR (B), Webbutveckling III, 7,5 hp (distans)
✔️Kurs 9: HT2023 IK060G Informatik GR (A), Projektledning, 7,5 hp (distans)
✔️Kurs 10: HT2023 DT193G Datateknik GR (B), Fullstack-utveckling med ramverk, 7,5 hp (distans)
✔️Kurs 11: VT2023 DT162G Datateknik GR (B), Javascriptbaserad webbutveckling, 7,5 hp (distans)
✔️Kurs 12: VT2023 DT071G Datateknik GR (A), Programmering i C#.NET, 7,5 hp (distans)
✔️Kurs 13: VT2024 DT191G Datateknik GR (B), Webbutveckling med .NET, 7,5 hp (distans)
✔️Kurs 14: VT2014 FÖ032G Företagsekonomi GR (A), Marknadsföring 7,5hp
🚧Kurs 15: (Inväntar slutbetyg) VT2024 DT140G Datateknik GR (B), Självständigt arbete, 15 hp (distans)
🚧Utbildning: (Inväntar möjlig att ansöka om examensbevis) HT2022-VT2024 TWEUG Webbutvecklings-programmet 120hp (distans)

Av WebbkodsLärlingen
Skrivet av Moton:

Dags att dumma ner allt ytterligare ett steg då. Vill inte vara den men back i the days löste vi problemen vi stötte på i spelen utan att googla, youtuba eller i detta fallet få hjälp av en AI.

Min brorson vågar knappt öppna en dörr i spel utan att se någon på youtube göra det.

Förstnämnda: jag minns att jag ibland kollade igenom textbaserade Walkthroughs för vissa bitar i vissa spel!

Sistnämnda: är du seriös?! Vem öppnade då dörren före youtubern gjorde det?!

Mvh,
WKL.

Av WebbkodsLärlingen

Prova gärna att följa denna video på serversidan: https://www.youtube.com/watch?v=BJoZr8CrNks

Personen behövde slå igång TCP/IP-protokollet för SQL-servern och sedan starta om SQL-tjänsten igen (viktigt steg).

Om det ser liknande ut på Linux kan jag ej svara på. Felmeddelandet du får tyder på konfigurationsfel hos serversidan.

Mvh,
WKL.

Av WebbkodsLärlingen

Tjo! Mysig och luftig webbplats!

Bilden i sidhuvudet bör som sagt ha dynamisk storlek så det kan komprimeras ihop på mindre skärmar (mobila).

Det löser du enkelt (för img-elementet):

width:100%; max-width: fit-content;

När jag kikar på ett givet inlägg: https://playground.uk.to/showthread.php?tid=1 så kan jag personligen tycka att raden där användarens bild, användarnamn och antal inlägg(?) bör ligga längst till vänster eller höger så att de hör ihop (gestaltpsykologi) för nu är de så utspridda att jag tolkar som att de inte hör ihop? Smått förvirrande!

Möjligen bör du även tydliggöra vad antalet stjärnorna innebär i sammanhanget för sidan. Är det för att rösta om vad man tycker om tråden eller något annat? Och den ligger ju längs sökrutan vilket kan tolkas som om de hör ihop, så söker du då inuti tråden eller inuti hela forumet? 🤔

Mina få digitala cents så att säga!

Mvh,
WKL.

Av WebbkodsLärlingen
Skrivet av KAD:

Det är så mycket konstigt i din text att jag inte orkar reda ut alla missförstånden. Men du tycks inte greppa de olika lagren i en nätverksstack som används på internet och där är nog grundproblemet. Förstå deras syften. Läs på vilken information som finns i vilken typ av header och hur de typiska protokollen funkar: ethernet, IPv4, TCP, TLS, HTTP 1.1. Det finns IETF-RFC:er för allt utom ethernet.

RFC 793 specar headern för IPv4 och där finns IP-adressen. IPv4 (och 6) finns i nätverkslagret, L3, ingen annanstans (om man inte feldesignat, vilket gjorts i FTP, SIP mfl protokoll).

HTTPS ska hindra MITM på den nivå i nätverksstacken där HTTPS verkar och uppåt. Det är dock en lärorik labb att skapa sin egen CA, få en klient att lita på den och sedan sniffa/manipulera trafiken som MITM. Fiddler gör detta, men inte på ett sätt som är transparent för användaren, dock väldigt lättanvänt.

Din lösning att logga ut en session när den kommer från en ny IP är inte dålig och tillför helt klart säkerhet (att beordra klienten att logga ut är dock inte verkningsfullt, en angripares klient gör vad den vill). Anledningen till att detta inte görs är att det är osmidigt att bli utloggad när man rör sig mellan olika WiFi- mobil- och fasta nät. Tänk en typisk resa till jobbet där man har minst tre olika IP-adresser. Användare kommer betrakta det som en bugg.

Skrivet av jocke92:

Det känns inte som att det är så vanligt att man loggar ut någon för att IP-adressen ändras. Men en tanke är att man istället noterar om den ändras väldigt frekvent och skickar upp en lösenordsruta. Eller att man kollar om IP-adressen helt plötsligt ändras till en adress som geografiskt ligger i ett annat land eller världsdel.

Det är också skillnad om man är en bank, idag blir jag ju tex utloggad efter 5 minuters aktivitet. Men efter test inte om jag kopplar över till ett helt annan publik IP-adress. Google är ju rädda att man stänger ned och gör något annat om man blir utloggad, men du är mer förstående när det gäller din bank.

Skrivet av evil penguin:

Ja, det tror jag i grund och botten är precis vad som menas, men skulle istället se det såhär:

För att användarna ska gilla tjänsten så slänger man inte ut dem hela tiden, vilket istället får den där baksidan.

Summa kardemumma: högre/striktare säkerhet kostar i prestanda och användarvänlighet? Samtidigt tänker jag att säkerhet är något man bara lär sig uppskatta förrän man inte har det helt plötsligt.

T.ex. på YT så behöver du inte ange något lösenord om du vill radera alla dina videoklipp vid ett och samma tillfälle vilket jag kan tycka är dålig användardesign. Men när någon obehörig helt plötsligt raderar alla dina YT-klipp för att ladda upp scam-videos då helt plötsligt önskade du att du hade blivit tvungen att skriva inloggningslösenordet igen!

En gyllene medelväg jag tänker här är möjligheten att välja: du loggar in och du väljer hur strikt inloggningskontroll du vill ha:
1) kontrollera exakt IP-adress (anslut då med t.ex. fast VPN),
2) kontrollera geografisk IP-adress (tillåt endast svenska IP-adresser),
3) kontrollera aldrig IP-adress (session hijacking, here I come!).

Om användare får välja och därmed är medvetna om för- & nackdelarna så tycker jag att det kan balansera säkerhet och användarvänlighet. Session hijacking också kan knappast vara en önskvärd användarupplevelse tänker jag!

Mvh,
WKL.

Av WebbkodsLärlingen

Session hijacking funkar bara vid MiTM?

Tjo igen! Jag fick ett "uppvaknande" angående nätverk då jag läser en bok om datornätverk. Där framgår det att för att nätverkspaket ska komma fram till rätt destinationsadress så måste det stå rätt på IP-paketen som skickas. Detta betyder att om "session hijacking" skulle inträffa så skulle angripen inte ha någon nytta av att använda en stulen session eftersom IP-paketen måste skickas till deras destinationsadress som inte är samma som offrets. Vi antar att HTTPS alltid används.

Jag vet inte om följande inom PHP erhåller IP-adressen från TCP-huvudet (transportlagret) eller via HTTP(s) (applikationslagret):

$_SERVER['REMOTE_ADDR']

Jag har en kontroll i mitt exjobbprojekt där $_SERVER['REMOTE_ADDR'] != $session_ip så om IP-adressen är inkorrekt vid ett HTTP(s)-anrop, för session var stulen så loggas personen ut och sessionen försvinner vilket gör att servern också "beordrar" att den raderas på klientesidan via HTTP-huvudet Clear-Site-Data: "*". Jag provade genom att först logga in på webbplatsen i produktionsmiljön, sedan slog jag igång VPN från Bahnhof och provade navigera till en annan undersida. Och då loggades jag ut direkt!

Så det verkar som som $_SERVER['REMOTE_ADDR'] erhåller IP-adressen från transportlagret? Men om angriparen nu har en MiTM mellan offret och servern så kan den "sniffa" paketen trots att de försöker komma till offrets IP-adress efter stulen session. Tänker jag rätt då att session hijacking blir endast möjligt om förövaren kan "sniffa" paketen via MiTM eftersom inkorrekt destinationsadress skulle förstöra sessionen på serversidan? (vi antar att servern är konfigurerad så)

Men MiTM bör väl inte fungera om HTTPS används? Detta får mig då att undra på hur LTTs session kunde stjälas & nyttjas. För när sessionen sedan körs från angriparens dator så måste ju IP-paketen komma rätt och därmed måste rätt destinationsadress anges för varje paket. Menas det på fullaste allvar att mångmiljardbolaget YouTube inte kontrollerar i databas om IP-adressen som erhållits av transportlagret är detsamma som står lagret för en given inloggningssession? Är bolaget så himla "dumsnålt"? Eller var MiTM också kanske inblandat i det angreppet mot LTT trots HTTPS? 🤔

Menar vi annars på fullaste allvar att mitt exjobbprojekt hade bättre säkerhetslösning än självaste YouTube? Helt omöjligt kan jag tycka! Någonting måste jag ha missuppfattat kring det här med transport- & applikationslagren gällande IP-adresser?! 😁

Mvh,
WKL.

Av WebbkodsLärlingen
Skrivet av enbom:

Varför kallas allt för AI? På vilket sätt är detta en Artificiell Intelligens?

Ett annat ord för "artificiell" är "påhittad"!

Mvh,
WKL.

Av WebbkodsLärlingen

Följande har jag använt i mitt exjobb för att generera och validera lösenord:

Generera ett kryptografiskt säkert lösenord (om random_int() betraktas kryptografiskt säkert)

// This function generates a random password function generatePassword($length = 16) { // Define the characters that can be used in the random string $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^*()_+{}|:?-=[]\;,./'; $lowercase = 'abcdefghijklmnopqrstuvwxyz'; $uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $special = '!@#$%^*()_+{}|:?-=[]\;,./'; // Define the length of the characters $charactersLength = mb_strlen($characters); // Define the random string $randomString = ''; // Loop through the length of the string for ($i = 0; $i < $length; $i++) { // Append a random character from the characters string to the random string // random_int is cryptographically secure!! $randomString .= $characters[random_int(0, $charactersLength - 1)]; } // Now before we return the random string (password), we must check that it actually contains at least one number (0-9), // one uppercase letter (A-Z), one lowercase letter (a-z) and one special character (!@#$%^*()_+{}|:?-=[]\;,./) // otherwise just add one of each to the end of the string if (!preg_match('/[0-9]/', $randomString)) { $randomString .= random_int(0, 9); } if (!preg_match('/[A-Z]/', $randomString)) { $randomString .= $lowercase[random_int(0, mb_strlen($lowercase) - 1)]; } if (!preg_match('/[a-z]/', $randomString)) { $randomString .= $uppercase[random_int(0, mb_strlen($uppercase) - 1)]; } if (!preg_match('/[!@#\$%\^*()_+\{\}\|\:\?\-\=\[\]\\\\;\,\.\-\/]/', $randomString)) { $randomString .= $special[random_int(0, mb_strlen($special) - 1)]; } // Now, return the random string return $randomString; }

Dold text

Möjligen bör lösenordsgeneratorn förbättras genom att de saknade tecknen för ett starkt lösenord blandas in någonstans i den annars färdiga strängen istället för att bara läggas till slutet som den gör just nu. Array_splice() med random_int() för position?

Validera eget inmatat nytt lösenord

// Function that validates empty, min and max length of a string // that is specifically of the type password using the reference to // an error variable that will be set if the validation fails. function validatePassword($input, &$errorReference, $minLength, $maxLength, $fieldName, &$allOK) { // Check if the input is empty if (empty($input)) { $errorReference = "$fieldName is required!"; $allOK = false; } // Check if the input is too short else if (mb_strlen($input) < $minLength) { $errorReference = "$fieldName is too short! Must be at least $minLength characters!"; $allOK = false; } // Check if the input is too long else if (mb_strlen($input) > $maxLength) { $errorReference = "$fieldName is too long! Must be at most $maxLength characters!"; $allOK = false; } // Check if the input contains at least one uppercase letter else if (!preg_match("/[A-Z]/", $input)) { $errorReference = "$fieldName must contain at least one uppercase letter! (A-Z)"; $allOK = false; } // Check if the input contains at least one lowercase letter else if (!preg_match("/[a-z]/", $input)) { $errorReference = "$fieldName must contain at least one lowercase letter! (a-z)"; $allOK = false; } // Check if the input contains at least one number else if (!preg_match("/[0-9]/", $input)) { $errorReference = "$fieldName must contain at least one number! (0-9)"; $allOK = false; } // Check if the input contains at least one special character else if (!preg_match("/[^a-zA-Z0-9]/", $input)) { $errorReference = "$fieldName must contain at least one special character! (!@#$%^*()_+{}|:?-=[]\;,./)"; $allOK = false; } }

Dold text

Jag hoppas att Tietoevrys ledning tar in åtminstone en person som vill tänka förebyggande och inte enbart "Snabba cash". Det är pinsamt att företaget har bristande IT-säkerhet - som om ett städbolag med bajskorvar utanför sina egna toalettsitsar!

Mvh,
WKL.

Av WebbkodsLärlingen
Skrivet av evil penguin:

Jag tycker inte vi ska mobba användaren som råkar heta "media", jag tycker 1) de också ska få vara med (även om de inte verkar direkt aktiva) och 2) inte ska bli sönderspammade om de som skriver håller sig i skinnet lite (användarnamnsväljaren kanske snarast hjälper?).

Sedan är det väl mer än bara just "media" som samma sak kan uppträda för...

Om man då t.ex. skriver CSS inne i [code][/code] så blir det ju bra både vid inmatning (användarnamnsväljaren verkar inte trigga inne i taggar, lite oklart hur exakt det fungerar?) och framförallt så blir det bra vid visning, och jag förmodar även att användaren "media" inte notifieras:

@media

Men med [cmd][/cmd] så verkar det visserligen fungera bra vid inmatning (kanske mer är en slump?) men sedan blir det ju knas vid visning (och triggar förmodligen notifiering till användaren "media"?):
@media.

Tycker det senare känns som själva felet, mer objektivt(?).

Oj! My bad, jag var så insnöad på CSS-direktivet "media" och tänkte inte på att det fanns en användare med det namnet här! No offense, @media! Jag känner ej till "noparse" eller "cmd". Min tanke är att vissa användarnamn ska betraktas som "reserverade nyckelord". Det kanske är långsökt i detta fall då Sweclockers inte primärt fokuserar på webbutveckling!

Mvh,
WKL.

Av WebbkodsLärlingen

Jag vill rapportera en eventuell "oönskad bieffekt" av kanelbullen!

I specialfallet där du vill skriva @media för att du vill prata om brytpunkter inom CSS så kommer den att välja ett annat namn när du använder högra piltangenten för att komma ifrån koden till nästa mellanslag och ord. Detta inträffar inte om du använder just mellanslag för att komma ifrån @media.

Möjlig lösning vore att specialfallet att skriva @media tar bort fönstret med användarnamn för just den unika strängen. Eller så äré ett "skill issue" hos slutanvändaren så det ej är värt att fixa!

(Notera nu exempelvis att kanelbullen skriver ut som om det finns en användare som heter "media" när det istället kanske borde betraktas som undantag)

Mvh,
WKL.

Av WebbkodsLärlingen
Skrivet av anthra:

Problemet är att alla säger olika saker och jag vet inte vilken guide jag ska använda.

Kan någon vänlig person länka till en bra guide och förklara varför den guiden är bättre än andra.
Alternativt ge ett kod-exempel på CSS med @media?

Det är väl det som är grejen: det finns inga magiska brytpunkter som gör att alla olika slags webbplatser med alla olika slags innehåll ser perfekta ut på alla slags mobila enheter med alla olika slags upplösningar. Du får försöka hitta de brytpunkter som passar så bra som möjligt för just din webbplats med just ditt innehåll riktade mot just din eventuella mobila målgrupp.

Som du märkt redan så föreslår olika CSS-ramverk olika brytpunkter:

MaterialUI föreslår: xs, extra-small: 0px sm, small: 600px md, medium: 900px lg, large: 1200px xl, extra-large: 1536px Tailwind CSS föreslår: sm 640px @media (min-width: 640px) md 768px @media (min-width: 768px) lg 1024px @media (min-width: 1024px) xl 1280px @media (min-width: 1280px) 2xl 1536px @media (min-width: 1536px)

Du får experimentera helt enkelt tills att du hittar det du upplever är "good enough".

Mvh,
WKL.

Av WebbkodsLärlingen
Skrivet av KAD:

Det verkar inte finnas någon tråd om denna sårbarhet, så det kanske passar här.

Länkar
Pappret av Gollier och Vanhoef.

Video (rätt usel).

Jouni Malinens förslag till IEEE om åtgärd. Malinen är snubben som underhåller wpa-supplicant/hostapd på w1.fi. Förslaget är nummer 2 av det som Vanhoef et. al. föreslår, att göra en bakåtkompatibel förändring så att klienter som stödjer det kan verifiera SSID:t.

Min sammanfattning
Sårbarheten är en typ av MITM + downgrade-attack där man ser till att Wi-Fi-klienten (a.k.a supplicant, STA) kopplar upp till fel SSID/AP. Nyttan för den som utför attacken kan vara:

1) Att den felaktiga AP:n är mindre säker (har andra kända sårbarheter i Wi-Fi-protokollen)
2) Att klienten stänger av VPN automatiskt när den tror att den är uppkopplad mot en AP där VPN:et inte behövs.
3) Att AP:n ägs av någon helt annan än den organisation som äger den AP man tror man är uppkopplad mot, vilket gör att man kan kartlägga trafik och göra attacker med hjälp av 1 och 2.

En förutsättning för attacken är att användaren har samma "lösenord" (i vid bemärkelse) på flera SSID:n. Mannen i mitten kommer skicka visare all trafik som den är, förutom att SSID byts ut i meddelandena. Problemet är att klienten tror att den anslutit till SSID A och använt lösenord X, men den har egentligen blivit lurad att ansluta till SSID B med lösenord X.

Det är alltså inte en attack där den som utför attacken kan få tag i några lösenord/nycklar eller dekryptera krypterad trafik i Wi-Fi-gränssnittet. Så vitt jag förstår i alla fall.

802.11x (dvs Enterprise-Wi-Fi), inkluisive certifikatsbaserad ömsesisdig verifiering är sårbart under de flesta omständigheter. WEP (som ingen använder längre) är sårbart. WPA3 är sårbart i praktiken eftersom AP:er verkar tillåta både den sårbara och den icke sårbara varianten. WPA1/2 är inte sårbart, eftersom de alltid har SSID:t som del av krypteringsnyckeln. WPA1 är förstås komplett knäckt i övrigt. Se pappret för de lite mer ovanliga varianterna.

För den normala avändaren
Kan det vara lite intressant att veta att det finns en viss nackdel med att använda samma lösenord på flera olika SSID:n. Man kan inte vara säker på vilket av dem man egentligen är ansluten till, under alla omständigheter.

Så vitt jag förstår innebär Malinens förslag ändring i både AP och klient, vilket i praktiken betyder att man inte vill lösa problemet eftersom AP:er sällan blir uppdaterade. Hade jag varit klientimplementatör hade jag nog helt enkelt vägrat att koppla upp till den sårbara varianten av WPA3 och till 802.11x-AP:er som inte skickar verifierbart SSID.

För någon vecka sedan var jag utan internet i 12 timmar pga. planerat driftarbete men det visste jag inte då. Så jag var nästan nära att ansluta till ett lösenordsfritt WiFi som hette - jag skämtar inte - "free wifi" men namnet var lite för bra för att vara sant så jag härdade ut istället!

Jag har nyss börjat plöja Computer Networking 7th Edition för att lära mig grunderna inom nätverk som blivande webbutvecklare. Har inte kommit till WiFi-kapitlet ännu. Det jag funderar är om MiTM-attacken även kan luska ut krypterade paket (t.ex. de skickade via HTTPS) som följd av detta? Blir det möjligt pga. att den kan sniffa upp handskakningen i början av HTTPS-anslutningen? Jag är bara i Application Layer-kapitlet med HTTP-protokollet just nu, så jag ber om ursäkt att jag inte kan tillräckligt om nätverk på riktigt ännu!

När jag läser här: https://www.top10vpn.com/assets/2024/05/Top10VPN-x-Vanhoef-SS... så verkar hotmodellen utgå från att det är samma SSID med samma anslutnings-/autentiseringsuppgifter? T.ex. samma lösenord? Så om falska SSID:n har "fel" lösenord så kmr MiTM-attacken ej att fungera? Har jag förstått det rätt eller har jag missat något?

Följande WiFi-autentiseringsmetoder verkar ej vara påverkade:
- WPA1/2
- WPA3 SAE-const
- FT

Mvh,
WKL.

Av WebbkodsLärlingen

Vilken "intelligens". Den där "AI:n" vill man verkligen ska få koda ihop saker och ting och skicka ut direkt till produktionsmiljön utan någon mänsklig granskare (sådana kostar ju pengar numera)! 😬

Mvh,
WKL.

Av WebbkodsLärlingen
Skrivet av AlxMedia:

Eftersom du inte vill/kan peka ut någon, så tar vi en titt på USS Nimitz-fallet från 2004. Jag antar att du inte sett videorna, så här kommer en snabbsummering:

Video 1) Infraröd video fångat av en F/A-18 Super Hornet från amerikanska flottan av ett av tic-tac objekten. Planet bar en av de mest avancerade sensorerna som fanns då. Den amerikanska militären har erkänt att denna video ej har modifierats.

Video 2) Intervju med David Fravor, befälhavaren för elitskvadronen Black Aces som utexaminerades från Top Gun-programmet med mer än 16 års flygerfarenhet tillsammans med hans vingman den dagen, löjtnant Alex Dietrich. Inte kvalitativa vittnen?

Video 3) Dokumentär av det hela med mer information. T.ex. säger Princeton's radaroperatör Kevin Day att de såg över 100 liknande objekt under veckans gång.

En av "de två personerna" = befälhavaren för elitskvadronen Black Aces och utexaminerades från Top Gun. Dåligt vittne?

Jag tror att du överskattar människors förmågor oavsett vilken "högkvalificerad utbildning" de har genomgått. Människorna i verkligheten är inte samma som i Hollywoodfilmerna.

Människominnet är dessvärre inte en videokamera utan mer som att du ber någon rita något från minnet - det blir aldrig exakt likadant: https://en.wikipedia.org/wiki/Memory#Construction_for_general...

Mvh,
WKL.

Av WebbkodsLärlingen

Vad specifikt är det som "avslöjar" hos en dator att det är av det ena eller andra operativsystemet? Datorn skickar ut User Agent-liknande information vid uppkoppling mot internet eller när den pingas? Jag förstår inte varför sådan User Agent-liknande information skulle lämnas ut för det minsta lilla anrop från någon annan enhet? Eller finns det någon information som indirekt avslöjar att det är en Windows XP-dator helt plötsligt?

Mvh,
WKL.