2010-12-28

Drick inte kranvattnet!

Parasiten Cryptosporidium håller fortfarande Östersund i ett järngrepp och sätter skräck i invånarna. På toaletten på biblioteket sitter ett anslag som uppmanar en att inte dricka kranvattnet. Samtidigt finns pappmuggarna kvar...

2010-12-27

TDD utflykt i PHP land, del 2

Utflykten fortsätter med validering av de inmatade värdena, N/S och E/W delarna av en koordinat och avslutas med översättning av felmeddelanden

En sak som boken PHP in Action fäster stor vikt vid är validering av indata. Anledningen till att detta är så viktigt är att det är en grundförutsättning för att minimera säkerhetsproblem med skadlig indata. Man skiljer på client-side och server-side validering. Validering på klientsidan görs direkt i webbläsaren med t ex JavaScript. Syftet med valideringen är att ge användaren snabb återkoppling och upplysa om fel i de inmatade värdena. Däremot kan den inte förhindra skadlig indata. För detta krävs validering på serversidan.

Jag valde att ignorera klientsidan och istället koncentrera mig på serversidan. Det verkade enklast att lägga till valideringen i Http_Request eftersom det den som hanterar indatan. (Ett liknande upplägg hittar man i PHP in Action.) Istället för att komma åt den icke-validerade datan via get()-metoden, så krävs det att den är validerad innan den blir tillgänglig. Detta implementeras med två vektorer i Http_Request. En för den icke-validerade (råa) datan och en för den validerade datan. Själva valideringen görs genom att anropa validate()-metoden och ange fält samt ett valideringsobjekt. Värdet hämtas från den råa datan och, vid godkänd validering, läggs till i den validerade datan.

2010-12-25

TDD utflykt i PHP land

Uppgiften är egentligen enkel. Lägg till inmatning av koordinat på en befintlig PHP-sida. På andra sidor finns motsvarande koordinatinmatning, så med lite klipp och klistra hade det varit snabbt gjort. Men gnagande känsla inom mig sa att det måste finnas ett bättre sätt. Trots att mina PHP kunskaper är begränsade så tänkte jag ta reda på om jag kunde hitta ett bättre sätt.

Efter en kort fundering kring lämplig design kom jag fram till att jag ville ha något som innebar minimalt med tillägg i de befintliga php-filerna (en kod fil och en mallaktig fil). En begränsande faktor är det enkla mallsystem som används för närvarande. Jag såg framför mig ett objekt som kunde leverera HTML som dynamiskt läggs till via mallens ordinarie substitutionsmekanism samt kunde leverera tillbaka koordinaten som värden som var enkla att stoppa in i databasen.

Jag började med att skapa en klass vars uppgift skulle vara att generera den HTML som behövs för skapa alla inmatningsfält (eventuellt redan ifyllda med ett standardvärde) samt tolka värdena i inmatningsfälten och omvandla det till en koordinat i form av två flyttal. Resultatet blev koden nedan, samt en statisk hjälpklass för lite enklare beräkningar.

2010-12-04

Ett oväntat samtal

När vi hade flyttat hit behövde vi fylla på med lite fler möbler. Så vi åkte runt bland möbelbutikerna i trakten. På ett ställe hittade vi en del möbler som vi fastnade för. När vi fick höra att det kunde vara lång leveranstid på bokhyllorna sa vi att vi ville fundera på det och återkomma. Men det viktigaste blev beställt och vi lämnade möbelbutiken med en orderbekräftelse.

Efter en kort promenad hade vi funderat klart och talade med samma säljare igen. Vi ville ha två bokhyllor samt en byrå. Som jag uppfattade det så skulle byrån läggas till den befintliga ordern och bokhyllorna skulle beställas separat. Det var rätt så mycket folk i butiken och säljaren var lite stressad, men han skrev upp det hela på ett papper och ringade noga in bokhyllorna och byrån.

En och en halv vecka senare fick vi hemlevererat det som stod på orderbekräftelsen. Uppenbarligen hade byrån inte lagts till på beställningen.

En månad efter vårt första besök hade vi vägarna förbi möbelbutiken. Vi frågade hur det gick med vår beställning. Kvinnan vi pratade med kunde inte hitta beställningen i systemet, men hon kunde gissa vem som hade tagit emot beställningen. Hon sa att han skulle komma in senare under dagen, och att han skulle ringa oss samma dag eller senast dagen efter. Dagen gick, nästa dag likaså, inget samtal.

Min tolkning var att beställningen var borta, och vi antagligen fick sikta in oss på ett platt paket från Småland. Jag såg ingen anledning till att kontakta dem igen och höra efter. Om de inte vill ha kunder så är det okej med mig.

Igår, fem veckor senare, ringde telefonen:
 - Vi har en byrå och två bokhyllor att leverera.