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.

2010-11-28

Home improvement

En sak som inte ingick i lägenheten var persienner. Majoriteten av fönstren har sydvästläge, så något slags solskydd är nödvändigt. Efter att ha undersökt utbudet kontaktade vi Persiennbutiken och fick några färgprover tillsänt oss. Det tog en tag att utvärdera färgproverna i olika slags ljus. Men så fort det var gjort lades beställningen. Det blev två persienner samt fyra gula, tre beiga och en grön rullgardin.

Informationen kring leveranstider är inte helt entydiga. I orderbekräftelsen står det normalt 14 dagar, men förseningar kan förekomma under högsäsong. I deras FAQ står det 2 veckor under högsäsong (april-juni och september-november), och 2-4 veckor övriga tider. I samband med att paketet skickades skulle även ett mejl med paket-ID skickas. Tre och en halv vecka senare dimper det ned ett brev i brevlådan som säger att det finns ett paket att hämta. Jag tyckte det var lite märkligt att de inte skickat något mejl, men tänkte inte mer på det.

Paketet hämtades, och efter mycket om och men så var det uppackat. Den uppmärksamme läsaren ser genast problemen.


2010-11-27

Recension: PHP in Action

TitelPHP in Action - Objects, Design, Agility
FörfattareDagfinn Reiersøl, Marcus Baker och Chris Shiflett
FörlagManning Publications Co
ISBN1-932394-75-3
Publiceringsår2007
Antal sidor552
Vikt920 g
Dimensioner187 x 234 x 35 mm
Pris239 kr (Bokus)



PHP in Action spänner över ett brett område. Detta är både på gott och på ont. Boken vänder sig främst till programmerare som utvecklar webbapplikationer i PHP 5 och vill lära sig objektorienterade principer och tekniker. Den har inte som ambition att lära ut PHP, och det gör den inte heller. Men för det mesta är koden enkel och lätt att följa, så även om man inte kan PHP är inga problem att förstå.

Boken är indelad i fyra delar. Del 1 börjar de första kapitlen med att ta upp grundläggande objektorienterad programmering. Därefter ägnas ett kapitel åt Robert C. Martins objektorienterade principer och ett kapitel åt designmönster (Design Patterns). Principerna och designmönsterna återkommer sedan här och var i boken.

2010-11-21

Första intrycket av STABILicers

Den vanligaste typen av halkskydd är en avlång gummihistoria som träs på skospetsen och klacken. Undertill sitter ett antal dubbar. De fungerar bra på vanliga skor. Men de är för små till mina kängor. Jag har redan en annan sorts halkskydd för hälen. Den passar bra och är enkel att få på och ta av. Nackdelen är att den bara ger halkskydd för just hälen.

Jag hittade en annan variant på halkskydd. Den har en hel sula och spänns fast med remmar istället. Just den här modellen heter STABILicers. Som man hör på namnet så är de amerikanska och kommer från 32north Corp. En annan sak som skvallrar om ursprunget är varningstexterna. Två på förpackningen och en på själva halkskyddet. Man ska inte använda dem när man kör bil, inomhus eller när man klättrar på stegar. Man måste också vara väldigt försiktig om man använder dem på polerad granit.