Amatörutvecklare och entusiast

Från noll till koll

För det egna nöjets skull

Projekt

Bokarenan

Håll koll på vad du läst och vad du vill läsa härnäst. Sprunget ur min vilja att läsa mycket och bevara upplevelserna.

Bakom Femte Arenan

Möt skaparen

Anders Björkland
Anders Björkland
Kodarentusiast

Från bloggen

En tillbakablick på Bokarenan och Symfony

När jag började mitt projekt Bokarenan nu under hösten så hade jag ett mål att göra min kod mer hanterbar. Jag hade kommit till en punkt då jag inte kände att jag hade någon bra överblick över hur min kod hängde samman. Bokarenan var byggd med PHP men utan att använda någon objektorienterad struktur. Varje sida i applikationen var en egen PHP-fil. Min ”om” sida fanns till exempel på bokarenan.se/om.php, och min sökfunktion fanns på bokarenan.se/search.php. Eftersom man kunde logga in så behövde varje sida inkludera mina variables.php- och functions.php-filer. De användes för att dels hitta rätt filer (sökvägarna sparades i variables.php, bland annat sökvägen för functions.php) och dels för att kontrollera om användaren var inloggad och om användaren varit inaktiv för länge. Det var även viktigt att variables.php inkluderades före functions.php för att functions använde variabler i variables.php. Ju fler funktioner jag ville lägga till i applikationen, desto svårare blev det att överblicka att allting kom i rätt ordning. Jag kände att jag behövde göra min kod mer logiskt sammanhängande för att få rätsida på allt ihop. Svaret var Objekt Orienterad Programmering (OOP).

Jag är hyfsat bekant med OOP sedan allt jag gjort i Java har varit att jonglera objekt. Jag har till och med ägnat mig åt designprincipen MVC (Model – View – Controller) när jag prövat att göra en webapplikation i Spring Boot. Detta är ett framework för Java som jag gillade att använda. Men applikationen gjorde jag aldrig färdig för publicering. Kan hända att det projektet dyker upp här. Jag kallade den för Shipstorm och den var till för att dokumentera båtar som jag tyckte såg fina ut.

När jag nu ville göra en uppdaterad version av Bokarenan så ville jag göra OOP och gärna använda ett MVC-framework. Jag visste ju att det skulle hjälpa mig så mycket att få rätt struktur på allt ihop. Jag visste bara inte vart jag skulle hitta ett framework som skulle passa mig och som skulle kunna funka på mitt webbhotell.

Jag läste en del böcker om PHP samt en kurs på Packt Publishing som guidade mig helt okej igenom olika steg för att göra ett eget microframwork, för att sedan ta steget till att börja använda ett färdigt framework. Det blev Symfony till slut. Symfony upplevde jag som väldigt flexibelt. Det var enkelt att välja vilka komponenter av Symfony jag ville ha. Mina favoriter är Twig, Security och Doctrine. Twig gör det enkelt att generera sidor för dynamiskt innehåll. Security hjälper till med inloggning och autentisering. Och Doctrine gör det väldigt enkelt att hämta objekt från en databas.

Medan jag upplevt det som mycket enkelt att utveckla applikationen på min dator; den medföljande virtuella servern gjorde det hur smidigt som helst, så kvarstod utmaningen att få allt att funka på mitt webbhotell. Jag vill inte exponera känslig information så som databasuppgifter, men vill ju att besökare ska kunna nå min hemsida. Via mitt webbhotell så kan man logga in och använda deras filhanteringssystem. Nackdelen är att detta bara erbjuder den allmänna/publika sidan av hemsidan.

Lösningen hette FileZilla, ett FTP-program, som gjorde det möjligt för mig att även komma åt den yta som inte är publik. Jag kunde därmed dela upp min applikation i dess publika och dess privata delar. På den publika arean så la jag ingångsvägen för applikationen – index.php, samt CSS-, JS-, och bildfiler. På den privata arean la jag applikationslogiken; med Controllers, Entities och template-filer. Men bara detta gjorde inte applikationen redo för användning helt. Jag kunde nu ladda första sidan till Bokarenan på bokarenan.se. Men inga länkar funkade, även om applikationen nu kunde kommunicera med databasen. Det visade ju sig att bokarenan.se egentligen laddade bokarenan.se/index.php. Alla länkar gick genom denna fil. Så för att ladda till exempel bokarenan.se/om behövde jag ange bokarenan.se/index.php/om. Detta var inte riktigt snyggt i mitt tycke, så något behövde jag göra. Och in kommer RewriteEngine som jag kan komma åt med hjälp av .htaccess. Det är en fil jag lägger på min area och som instruerar servern till att översätta allting igenom index.php-filen utan att det ska synas i adressfältet.

Det har visserligen tagit mig hela hösten att uppdatera Bokarenan med Symfony och ersätta den spagettikod som utgjorde förra versionen, men jag har haft en rimlig anledning att dra ut på det: bebisar. Nu är allt uppe och funkar. Jag kan definitivt tänka mig att använda Symfony för fler projekt och det utgör en bra grund för att underhålla den nya versionen av Bokarenan.

84% av alla kunder är nöjda med Slajm

Idag skriver jag åter om statistik. Denna gång fokuserar jag på proportioner med fokus på en parameter. Ibland vill man göra en undersökning som fokuserar på hur stor andel av en population som ger lyckosamma utfall. Det kan handla om hur många produkter från en tillverkningsprocess som ej är defekta, eller det kan handla om hur många väljare som kan tänka sig rösta för ett särskilt alternativ. Denna gång återvänder jag till Slajm-farmaren för att undersöka hur stor andel av hans kunder som är nöjda med den slajm som han säljer.

Vi tar ett urval med storlek n=250. Antalet nöjda kunder är X=210. För att räkna ut andel nöjda kunder i vårat urval så har vi :

Vi vill gärna kunna säga något om alla kunder, inte bara kunderna i vårat stickprov. Vi väljer att svara med ett konfidensintervall på en konfidensnivå 95%. För att räkna ut intervallet så har vi vår andel (0,84) plus/minus en marginal:

Marginalen räknas ut med hjälp av det kritiska värdet z* som tas fram för den angivna konfidensnivån 95%. Det ger oss z*=1,96. Det kritiska värdet här är givet vid en särskild konfidensnivå när vi har en t-fördelning. Det liknar antalet standardavvikelser från medelvärdet i en normalfördelning. Det kritiska värdet multipliceras med standardfelet för urvalet. Det ger oss följande uträkning:

Vi har alltså att 84% av kunderna är nöjda med Slajm, med en felmarginal på 5% på en 95%-konfidensnivå. Slajm-farmaren Frans är inte helt nöjd med detta, för det finns en risk att han inte har uppnått en kundnöjdhet över 80%. Frans har lite att tänka över nu. Varför finns det så många kunder som inte är nöjda? Det är ett mysterium som Frans får utreda framöver. Tills dess är vi klara för den här gången.

Nästa gång, på fredag, tänker jag återvända till programmering och skriva ett par rader om det. Hur enkelt var det egentligen att jobba med Symfony och gick det bra att ladda upp applikationen på ett webbhotell? Vi ses då!

Tredje advent, nu är Bokarenan uppe

Måndag och en vecka närmare jul. Vi är i Tredje Advent och snart blir det ett uppehåll över jul och nyår när jag fokuserar på att umgås med familj. Lite nyheter jag har att komma med är att mitt projekt för Bokarenan har kommit till basversionen, eller vad man skulle kunna kalla för Minimal Viable Product. Spana in bokarenan.se och dela med dig av dina läsupplevelser. För närvarande behöver medlemmar lägga till grundinformation för böcker de recenserar, men jag har börjat lära mig lite Python för att kunna stötta upp med detta. Tanken är att skapa en Web Crawler som kan samla in information om böcker, och på så sätt underlätta för medlemmar i deras ifyllande. Jag är mycket nöjd över att ha kommit så här långt.

Men denna vecka går annars åter i statistikens tecken. Denna vecka kommer jag skriva om att bedöma statistiskt underlag när man bara har med en variabel att göra. Exempelvis hur många anser att Slajm är en produkt de skulle vilja köpa? Där jag tidigare har skrivit om medelvärden handlar det här om att göra bedömning utifrån fördelningar. Mer om detta på onsdag. Vi ses då!