2010-12-28
Drick inte kranvattnet!
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
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
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
Titel | PHP in Action - Objects, Design, Agility |
Författare | Dagfinn Reiersøl, Marcus Baker och Chris Shiflett |
Förlag | Manning Publications Co |
ISBN | 1-932394-75-3 |
Publiceringsår | 2007 |
Antal sidor | 552 |
Vikt | 920 g |
Dimensioner | 187 x 234 x 35 mm |
Pris | 239 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
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.
2010-11-17
Topp 30 i Sverige
Totalt handlar det om knappt 7 miljoner noder, varav jag har skapat eller ändrat på ca 40 000 noder. Detta motsvarar ungefär 0,6 % av alla noder. Det gör också att jag hamnar topp 30 bland de som har bidragit mest (sett rent kvantitativ) till OpenStreetMap. Den kvalitativt aspekten av mitt bidrag är svårare att kvantifiera. En variant på motsvarande information hittar man här.
2010-11-16
2010-11-14
Batterihållare (Viking Focus 8 W LED)
Det är tydligt på bilden vilken skillnad det är på fjädrarna. Men bara för att illustrera skillnaden ytterligare följer även ett par närbilder. Den högra har hoppat ur sitt spår efter att jag har försökt sträcka ut fjädern.
Värt att notera är att fjädrarna har ändrat färg och ser nu lite brända ut. I föregående inlägg skrev jag om det inledningsvis höga strömuttaget med NiMH batterier. Antagligen har strömmen varit för hög för metallen i fjädern, som blivit för varm. Efterföljande nedkylning har plastiskt deformerat fjädern. Och i princip härdat metallen, vilket gjort att den nu förlorat all elasticitet.
En i övrigt helt okej ficklampa blir helt plötsligt dålig.
2010-11-13
Batteritid (Viking Focus 8 W LED)
Jag använde tre Uniross Hybrio AAA NiMH batterier med en kapacitet på 800 mAh. För att simulera sporadiskt användande tände jag lampan ett par minuter och lät den sedan vila en stund. Jag använde stoppuret på min GPS för att hålla reda på den sammanlagda tiden som lampan var tänd. Inledningsvis blev lampans metallhölje varmt, vilket tyder på ett högt strömuttag. Den blev inte överdrivet varm, utan snarare lagom varm för att värma fingrarna när det är -20° C ute.
Efter ca 2 timmar kunde jag se att lampan lyste svagare jämfört med nyladdade batterier. Fortfarande god upplysningsförmåga, men det får ändå utgöra brytpunkten. Nu var det ingen värmeutveckling längre, så därför lät jag lampan vara på konstant. Efter ytterligare ett par timmar lyste lampan fortfarande. Jag vet inte exakt hur länge, för ironiskt nog tog batterierna i GPS:en slut. Skenet var tämligen svagt och skulle på sin höjd fungera som nödbelysning.
Lite övriga siffror. Med helt nyladdade batterier var strömuttaget 1,3 A, men efter ett par minuter hade det sjunkit till 0,75 A. Då låg spänningen på 4,0 V. Mot slutet kunde mulitmetern inte mäta strömmen, men spänningen var 2,75 V.
2010-11-11
Sätta Nälden på kartan
Sammanlagt har jag samlat in 187 km GPS spår. 11 km på cykel och resten till fots. Det har tagit 43 timmar och 15 minuter, fördelat på 25 dagar. Detta kan jämföras med min kartering av Kramfors (tätort) som tog 34 timmar och 144 km GPS spår. Den längsta karteringsturen var 14,3 km lång och tog 3 timmar och 25 minuter.
Resultatet syns nedan (eller här).
2010-11-10
Ledgångsbesvär
Efter en kort stund kunde haverikommissionen dra slutsatsen: materialutmattning i gångjärnet
Frågan är hur länge det andra gångjärnet kommer att hålla, men med tanke på att det kommer att utsättas för dubbla belastningen nu, så blir det nog inte så länge.
2010-11-07
Viking Focus 8 W LED cykellampa
Lampan kommer komplett med hållare, handlovsrem och 3 st AAA batterier (alkaliska). Övriga fakta:
- Längd: 102-111 mm
- Diameter: 28/35 mm
- Vikt (inkl. bat.): 125 g
- Pris: 395 kr (Elkedjan, Krokom)
- Batterier: 3 st LR03 (AAA)
- Ljusstyrka: 200 lumen*
- Räckvidd: 200 m*
- Batteritid: 20 timmar*
- Vattentålig: Ja*
Jag gillar inte AAA batterier. Fast det kanske inte är så mycket batterierna jag ogillar. Utan snarare det att det krävs tre stycken batterier, vilket är opraktiskt när de säljs i fyrpack eller batteriladdaren tar två/fyra åt gången. Dessutom har jag alltid ett par uppsättningar AA batterier med mig, så på det sättet vore det bättre med en lampa som också använde AA.
Senil GPS
Jag tror också tanten i GPS:en börjar bli lite gaggig. Vi körde på E14 utan någon korsning i närheten när hon plötsligt sa "Fortsätt 20 kilometer."
Och inte nog med det. För idag, när jag skulle mata in korrekt hemposition, såg jag att en massa gamla punkter hade kommit tillbaka. Bland annat de som visar Garmins högkvarter runt om i världen. Det känns som den börjar återuppleva sin barndom. Finns det något seniorboende för GPS:er?
2010-10-16
Ansätten 2010-10-10
Även om Oviksfjällen ligger närmare så valde jag Ansätten. Det fanns flera skäl till detta.
- En god vän till mig funderar på att ta med sig sin far ut på fjället, gärna då ett blomsterfjäll. Och eftersom Ansätten är ett blomsterfjäll tänkte jag åka dit och rekognoscera terrängen genom att gå Blomsterleden
- På OpenStreetMap var inte väg 689 karterade mellan Bakvattnet och Häggsjövik, så jag kunde köra andra hållet på väg hem och samla in ett GPS-spår
- Jag hade hittat en webbkamera på Hotell Fjällgården i Åkersjön som jag tänkte göra en cache av på opencaching.se
- Att det dessutom fanns en cache i Ansätten såg jag som ren bonus, men självklart skulle jag försöka ta den när jag ändå var i närheten
Under hela veckan hade jag följt vädret och konstaterat att prognosen för helgen sett lovande ut från början, men försämrats allt eftersom. Söndagsmorgon inledes med en gråmulen himmel, blåst och bara ett par plusgrader. Och inte nog med det. När jag kommit halvvägs började det att regna.
Efter lite omvägar började jag närma mig Åkersjön. Regnet hade upphört och molnen började spricka upp. Det blev ett snabbt stopp. Ut med kamera och GPS, spara en waypoint och knäppa ett par bilder, och sedan iväg igen. Det tog bara en minut, webbkamera cacher är tacksamma på det sättet. Resultatet blev Fjällgården i Åkersjön.
En liten stund senare var jag framme i Bakvattnet. Jag parkerade ett par hundra meter från Blomsterledens början, tog på mig ryggsäcken och började gå. Jag trodde Blomsterleden skulle vara markerad med en skylt. Och det var den också, men någon hade staplat en massa ved som skymde skylten från mitt håll.
2010-10-15
På omvägar
Nedan syns den rutt som den föreslog när jag skulle från Nälden till Bakvattnet för att fjällvandra.
Den tycker man ska köra från Krokom till Föllinge via länsväg 339, sedan ta länsväg 344 till länsväg 340, och därifrån till Bakvattnet. Det kanske inte låter så märkligt, om det inte vore för det att länsväg 340 börjar i Krokom. Så det borde rimligtvis vara bättre att köra länsväg 340 hela sträckan.
Om jag lägger in en via punkt en bit in på länsväg 340 så får jag rutten nedan istället.
Som synes är rutten 11 km kortare och går 5 minuter fortare att köra. Åldras Garmin nüvi och därför producerar sämre och sämre rutter ju äldre den blir, eller är det så att den inte anstränger sig till att börja med?