2012-04-21

TDD utflykt i OpenLaszlo land, del 2

En utmaning när man börjar med något nytt är att tänka i andra banor. Om man bara har arbetat med hammare och spik och ska börja använda skruvmejsel och skruvar så tycker man att det är väldigt svårt att banka in skruvarna med skruvmejseln.

När det handlar om mjukvaruutveckling finns det mycket som kan orsaka problem. Det kan till exempel finnas medvetna begränsningar för att underlätta andra saker, det kan vara bristfällig dokumentation eller för mycket dokumentation. Och ibland handlar det om att använda fel verktyg för problemet.




Även om man inte ska tänka för mycket framåt och försöka tvinga fram en design när man TDD:ar så kan jag inte låta bli att fundera på det som är gjort hittills. Det är för mycket begärt att någon ska kunna placera myntet på exakt rätt position. Det behövs lite vingelutrymme. Övriga mynt ska aldrig flyttas, vilket innebär att oavsett var de placeras så är det fel position. Det går förvisso att lösa med en position väldigt långt borta och hoppas att myntet aldrig hamnar där.

Istället för att belasta Coin-klassen med detta vore det snyggare om en annan klass tog hand om det. Då skulle det också vara enkelt att lösa problemet med mynten som inte ska flyttas. Detta kräver dock att Coin-klassen får tag på objektet. Dependency injection via konstruktorn brukar vara det vanligaste sättet, men det går även med en initieringsmetod.

För att kunna testa dependency injection underlättar det om det är möjligt att instansiera objekt i respektive testfall (metod). Därför försöker jag lösa problemet med objektinstansiering innan jag går vidare med ytterligare test.

Efter att ha tittat lite i dokumentationen hittade jag att man kan skapa objektinstanser genom att använda new.

var coin = new Coin( ... );

Efter ca en timmes experimenterande, utan att få det att fungera, var jag nära att ge upp. Oavsett hur jag gjorde klagade kompilatorn på att jag försökte anropa en odefinierad metod Coin. Jag kunde inte heller hitta något exempel i dokumentationen på hur man skulle göra.

Till slut, efter att ha sökt genom den exempelkod som följer med vid installationen, hittade jag vad som var problemet. Tydligen ska man skriva "lz." framför klassnamnet, dvs new lz.Coin( ... ).

Det här med att jag inte kunde hitta något exempel i dokumentationen på hur man instansierar objekt med new gör mig lite tveksam. Det är tydligt att man kan göra det, men det betyder nödvändigtvis inte att man ska göra det. Nåja, jag fortsätter att hamra vidare så får tiden utvisa om det är en hammare eller skruvmejsel jag har i handen.

2012-04-08

Cree LED 130 lumen pannlampa

Det här inlägget innehåller återvunnet material från tidigare blogginlägg. Jag gör det inte för att jag vill värna om miljön, utan för att jag är lat.

Det finns lite olika modeller av pannlampor. Den här har ett separat batterifack med tre AAA batterier och en ljuskägla som kan varieras. Dess Cree Q3-WC LED levererar ett ljusflöde på 130 lumen.

Dimensioner44 x 74 x 18 mm (batterihållaren)
Djup/diameter31-36 mm/24 mm (lampdelen)
Vikt115 g (inklusive batterier)
Batterier3 st LR03 (AAA)
Ljuslägen1 st (dimbart)
Pris17,90 USD (DealExtreme.com)
Ljusflöde130 lm*
DrivspänningEj angivet*
Drivström30-700 mA*
EffektEj angivet*
RäckviddEj angivet*
Batteritid8 h*
VattentåligEj angivet*
*) Enligt DealExtremes hemsida
(ej uppmätt eller testat)

Pannlampan levereras i anonym vit kartong tillsammans med en bruksanvisning på kinesiska (tror jag). Modellbeteckningen är YT-120A. Det tog 18 dagar från det att beställning lades på DealExtreme.com till leverans, vilket är fullt acceptabelt.