Blog

Smått och gott

Vad är unset och varför ska det vara bra? Funktionen träffade jag på för första gången när jag följde en kurs för PHP MVC. Som jag läser det så kommer unset att förstöra en variabel. I kontexten för kursen så användes en variabel för att ta ut vilken Controller som skulle användas ur en URL. När en Controller har valts så tas det aktuella elementet bort ur en array. Syftet skulle kunna vara att samma värde inte används igen, eller för att klargöra att elementet inte kommer användas igen över huvudtaget. I så fall är det mer av ett semantiskt ingrepp än en funktionell.

Detta tycker jag är magiskt:
protected $currentController = 'Pages';
$this->currentController = new $this->currentController;
Det innebär att PHP kan omtolka en sträng till en klass och det är ju sjukt användbart. Men jag är också lite rädd inför denna kraft. Det kan bli svårt att särskilja vad som är vad, tänker jag. Det är nog mina Java-demoner som gör sig påminda, där varje objekt är av specifik typ om man inte tydligt anger att det ska vara något annat.

Detta med att kod inkluderas i en fil från en annan och att man sedan förutsätter i en tredje fil att sagda fil har inkluderats är något som jag upplever som förvirrande. Det skulle bli svårt att uppdatera koden eller att använda filen i en annan kontext. Detta var något som jag använde mig mycket av i mitt första utkast till Bokarenan, och något som nu förekommit ett par gånger i Treversys kurs. Det är visserligen mycket tydligare i kursen vad som är vad. Men jag saknar att se varifrån till exempel en konstant har hämtats i från när man tittar i en fil som säger något som <?php echo APPROOT ?>. Det framkommer inte att konstanten har hämtats från en config-fil.

Det finns en hel del jag får med mig från kursen, men jag ser också behov att komplettera. Däribland gillar jag inte att ha views som php-filer. När jag kommer implementera kursens kod till Bokarenan kommer jag använda Twig. Detta har att göra med att låta views stå för presentation och ingen logik. Med PHP finns möjligheten att göra mer än att bara presentera en vy.

Jag kommer göra kursen så långt att grunden blir klar. Då kommer jag att ha byggt ett slags framework för MVC. Resten av veckan kommer jag att ta detta framework och bygga Bokarenan i. Jag får utvärdera om jag vill ta och implementera PHPUnit för att testa vad jag bygger. Saken är att jag vill bygga egna projekt så fort som möjligt som jag har lärt mig något för att på så sätt befästa kunskapen. Om jag skulle lära mig PHPUnit just nu så kan det innebära att jag får ytterligare avstånd till MVC innan jag bygger med det.

På detta sätt börjar jag alltså en ny vecka: många funderingar, mycket vilja och en stor dos experimentlusta.


Att bygga enligt MVC

Det finns mycket som jag vill och behöver lära mig för att kunna bygga något vackert. Därför har jag tagit ett abonnemang på Packt Publishing. Där finns det många böcker om det mesta: UX, GIMP och PHP 7 är några av de ämnena som jag går igenom på deras sida. Utöver böcker så erbjuder de också ett antal video-kurser. En sådan kurs som jag påbörjat är Brad Taversys Object Oriented PHP and MVC. Som framgick av mitt föregående inlägg så var några av de stora bristerna i Bokarenan just nu att det är svårt att särskilja vilka delar av koden som gör vad, och jag identifierade ett sätt att förbättra koden genom att använda objekt och MVC (Model, View, Controller). MVC innebär att ansvarsfördelningen blir tydligare i koden.

Jag kommer följa Traversys kurs och se var jag landar med Bokarenan. Något som saknas i kursen är Test Driven Development, men jag får ta en sak i taget.

Nu fokuserar jag på att lära mig routing och MVC. Förhoppningsvis förstår jag hälften! Men det riktiga lärandet kommer när jag bakar om det jag blir föreläst till något eget.

Nu är det fredag, och då skulle jag vilja lyfta fram något som jag tycker är sjukt bra. När tiden finnes så sätter jag mig ned med Elite: Dangerous. Det är ett spel som jag kör på PS4. Föregångaren samsades jag att spela med mina bröder. Då var det Amiga 500 som gällde och spelet hette Frontier. Nu liksom då handlar spelet om att flyga runt i Vintergatan mellan olika solsystem i rymdskepp som man kan uppgradera eller skaffa nya. Det finns i huvudsak tre olika sysselsättningar: handla, jaga pirater, och utforska rymden. Jag har precis skaffat mig spelet, och på någon timmes spelande har jag åkt fram och tillbaka mellan stjärnorna, utvunnit järn ur en asteroid, förlorat mitt skepp på grund av hetta, samt räddat en kanister med krypterat data. Har jag tid över så blir det mer rymdturism i soffan denna helg.

Trevlig helg!


Manuell refaktorering

Mitt första utkast till en färdig applikation är inte vacker! Detta vet jag. Jag har följt en bok för introduktion till PHP: ”PHP and MySQL for Dynamic Web Sites, Visual QuickPro Guide” (2017) av Larry Ullman. Boken funkade väl i att introducera mig för syntax, datastrukturer och databashantering. Det den introducerade har jag sedan använt till att utforma Bokarenan. Det Bokarenan klarar av är att registrera användare, böcker och recensioner. Men ju fler funktioner jag vill lägga till desto svårare blir det att hålla ordning på vad som gör vad bland alla filer. Och det är detta som jag ser kommer tillbaka på hur jag lärt mig från den inledande boken: den uppmuntrar inte till ”ren kod”. Det gör alltså dels att det är svårt att lägga till fler funktioner, dels gör det svårt att refaktorera när jag lyfter över applikationen till dess egna domän på bokarenan.se.

Det kanske inte låter som det, men jag var högst medveten om att jag skrev ful kod och att det finns bättre sätt att skriva koden på. Jag prioriterade att skriva klart applikationen till dess första form innan jag försökte lära mig nya sätt att skriva kod på. För mig fanns det två anledningar till det: för det första så kommer jag in i mentaliteten att göra klart något innan jag distraheras av andra saker som kan vara roligare. För det andra så ger det mig en referenspunkt som jag kan kolla på och se hur långt jag har kommit.

Några saker som gör koden ful är att det inte finns någon klar indelning över var funktioner finns, det finns inga objekt utan allt sköts i långa funktioner, vissa funktioner utnyttjar andra funktioner och dessa funktioner i sig kan användas men bör inte användas av andra om man inte vill få fel. Koden är alltså i hög grad sammankopplad på sätt som sammankopplad kod inte bör vara.

Ytterligare saker som gör koden ful är att vad som skulle kunna framstå som Modeller också gör sådant som kanske Kontroller ska göra. Funktionerna gör mer än en sak var, och detta bidrar till det förvirrade intrycket.

Men trots allt detta fula, så är jag mycket glad av att ha fått fram något som funkar och jag har lärt mig mycket. Applikationen är inte klar, utan jag kommer använda vad jag lärt mig för att göra koden vackrare. I nästa iteration av applikationen kommer jag använda mig av klasser för att göra objekt, samt dela in ansvarsområdena enligt Model, View och Controller (MVC).

Med vackrare kod och tydligare struktur så kommer framtida refaktorering och tillägg av funktioner att ske enklare.


Det första projektet

Det började när jag lärde mig grunderna i Java. Alla skulle ha ett paket-namn. Jag behövde därför ett domännamn så mina paketnamn kunde vara unika. Nu har det aldrig blivit att jag släppt några Java-paket, men jag gjorde några mindre applikationer. Jag blev klar med två applikationer. Den första applikationen var en visualisering av summa- och differensvågor. Tanken var att klargöra för mig själv hur man kan kombinera sinus-vågor för att få fram en fyrkantsvåg. I applikationen kunde jag ändra fas och våglängd och addera den med en annan våg för att få fram en summa som visualiserades. Den andra applikationen var en Mindmap-applikation. Det var en skrivbordsapplikation där jag kunde göra tankekartor med olika former och färger och spara dem för att kunna titta på dem i ett senare skede.

Jag skaffade mig en domän: femtearenan.se

Här någonstans intresserade jag mig för webbutveckling. Jag kollade på olika lösningar och föreställde mig att utveckla en kommunstatistikapplikation i Spring Boot. Den applikationen kom att bara leva på den lokala datorn. Det var billigare att hitta vad som helst annars än en webbhosting för Javaapplikationer. För mig blev det därför hosting som stödde PHP.

Mitt första projekt i PHP något jag kallar Bokarenan. Det bygger vidare på temat ”arena” och antyder en plats där folk kan mötas – i detta fallet gällande böcker. Liksom tidigare applikationer i Java så kommer detta projektet utifrån ett behov jag själv har. Jag gillar att läsa! Jag skulle gilla att diskutera de böckerna jag läst med andra som läst samma böcker. Tyvärr har jag ofta dåligt minne, och ofta överlappar jag inte med vänner och bekanta vad gäller de böcker vi läser. Därför börjar jag med att skissa på en applikation där vem som helst som är intresserad av att läsa böcker och att dela med sig av sina läsupplevelser kan göra det. Ett antal funktioner som jag ser att applikationen behöver är:

  • Folk ska kunna registrera sig och logga in.
  • Användare som missköter sig ska kunna anmälas av andra användare. Följden blir varning följt av avstängning vid upprepad överträdelse.
  • Användare ska kunna lägga in böcker i en ”Att läsa”-lista.
  • Användare ska kunna beskriva sin läsupplevelse och dela den med andra.
  • Användare ska kunna hitta folk som läst samma bok, eller vill läsa samma bok.
  • Det ska finnas en funktion för en läscirkel. Användare ska kunna skapa och bjuda in varandra. Läscirkeln ska vara förbehållen de som ingår i cirkeln.
  • Användare ska kunna bli påminda om en bok som de läst. Påminnelsen ska inte vara påträngande.
  • Känner jag mig själv rätt så kommer jag på fler funktioner efter hand. Men de får vänta tills jag bockat av ovanstående punkter.

Som ni kan se, så har jag lite idéer. Om ni har förslag så kan ni kontakta mig genom kontaktformuläret.

Som en glad amatör och kodarentusiast; Lev och må’!