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.

2010-11-17

Topp 30 i Sverige

Från den svenska OpenStreetMap mejlinglistan fick jag en länk till en sida som listar de användare som bidragit till den svenska delen av OpenStreetMap kartan, samt antalet noder, vägar och relationer som respektive användare är associerad med (dvs senaste användare som redigerat den).

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.

Tolv timmar senare

2010-11-16

Nälden at night (00:47 till 01:09)

Vitbalansen är satt efter natriumlampornas sken (2000 K).

2010-11-14

Batterihållare (Viking Focus 8 W LED)

Jag hade en del att anmärka på batterihållaren till min Viking Focus 8 W LED. Och det finns mer att säga om den. Batterihållaren är inte dålig, den är usel. Problemet är fjädrarna som ska hålla batterierna på plats och säkerställa kontakten. De fungerar inte alls tillfredsställande. Resultatet blir att lampan inte alltid tänds eftersom kontakten är för dålig. Jämfört med en 39 kr pannlampa så är milsvid skillnad till pannlampans fördel (hållaren till vänster).


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)

Ett frågetecken kring min Viking Focus 8 W LED lampa var batteritiden med NiMH. Efter inte särskilt omfattande och högst ovetenskapliga test finns det nu lite resultat.



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

I söndags kom de första snöflingorna. Och de senaste dagarna har det kommit 1 dm snö. Detta i kombination med 10-5 minusgrader gör att det känns att vintern är här.


Men snö innebär också att det blir svårare att kartera stigar i skogen. Med tanke på att min karteringsverksamhet nu kommer att gå i dvala passar det bra att sammanfatta min kartering av Nälden med omnejd. Då tätorten Nälden inte är speciellt stor har jag valt att inte särskilja på gatorna i Nälden och stigarna runt Nälden.

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

Idag när jag lyfte på locket på min gamla laptop så knakade det till högst betänkligt. Plastskivan över högtalarna, som också täcker gångjärnen, hade lossnat. Detta i sig är inget märkligt, den sitter lite löst. Det märkliga var att det gick inte att trycka tillbaks den. Dessutom var skärmen sned. Självklart måste detta utredas.

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

Jag var aldrig nöjd med min gamla cykellampa, vilket var en av anledningarna till att jag impulsköpte den här cykellampan. En annan anledning till köpet var att jag behövde en ficklampa. Då denna var både och, så kändes det som ett vettigt köp.

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*
*) Enligt förpackningen (ej uppmätt eller testat)


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

Igår fick jag bevis för att min Garmin nüvi 205 börjar bli senil. När det var dags att köra hem så visste den inte längre var hem låg. Istället sa den att jag kunde ange hem genom att mata in en adress, använda aktuell position eller använda någon tidigare sökning.

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

Efter att ha spenderat större delen av sommaren i Malmö med att arbeta och därmed inte kunnat komma ut i naturen som jag brukar, kändes behovet av en fjälltur extra stort. Efter flytten bor vi bara en timme från de närmaste fjällen. Jag kände att jag måste åtminstone hinna med en tur innan snön kommer. Så blev det äntligen tillfälle för årets första (och kanske sista) vandring på fjället.

Ä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
  • 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

Jag vet inte om min Garmin nüvi 205 börjar bli gammal och trött, eller om den helt enkelt har slutat bry sig. Den övertygar i alla fall inte när det gäller att beräkna snabbaste väg.

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?