mobile / archive / rss
Posted on November 25, 2009
* PhotoAlt

Låsing er jo alltid relevant i vårt fag. Det er et tema som diskuteres nærmest daglig i mitt nåværende oppdrag.

Køer er jo en interessant tilnærming til problematikken, og her kan vi kanskje også huske å lære av trafikken, ref bildet som det linkes til ;)

Bildet er hentet fra:

http://images.damncrows.com/image/1246562643/dead-lock

Comments (View)
Posted on September 1, 2009
* PhotoAlt

“Hent hjelp” . Når innskuddsautomaten I banken har denne meldingen sent på en kveld. Hva betyr det ? Hvordan kan jeg hjelpe? Er det noen som er innesperret der ?

Comments (View)
Posted on August 20, 2009
* PhotoAlt

Udi Dahan presenting, UI composition key to SOA Success. He spent 100 minutes on this slide without getting boring or running out of material. A great talk, and great content. I hope he convinced all listeners from my current project/customer. Change

Comments (View)
Posted on July 28, 2009
*

Flyttet blogg til tumblr

Da har jeg flyttet denne bloggen til tumblr. Det gikk ganske smertefritt, og er allerede testet med en blogpost fra mobilen (bildet av vann i dørken på bilen).

Tumblr hoster bilder, lyd og video, og har også twitter-integrasjon. Dette vil forhåpentligvis medføre både at jeg blogger mer, og twitter mer.

“Bakoverkompatibilitet” bør være smertefri siden jeg endret dns til å peke på tumblr-bloggen istedenfor blogger-bloggen, samt at feedburner ordner rss der url ikke er endret.

Det kom jo noe godt ut av det også. Jeg hadde en utestående faktura (forfalt i går) hos One.com for dns, noe jeg hadde glemt og neppe sett før langt uti august hadde jeg ikke gjort dette i dag. I tillegg er feedburner tydeligvis blitt spist av Google siden sist, så jeg måtte linke min konto til min google-ident også.

Comments (View)
* PhotoAlt

Dørken på passasjersiden i bilen i går

Comments (View)
Posted on July 10, 2009
*

Skrivebordskrigen tar sommerferie

Nå har Hans Jørgen gått ut i ferie, og vi har begge god tid til å planlegge neste trinn i vår pågående kontor-feide.

Jeg fikk inn et billig stikk før ferien, med en “Shock-Your-Friends Stapler” fra dealextreme. Den ble innkjøpt like etter skrivebordstuntet HJ utsatte meg for tidlig i vår. Jeg har hatt den på pulten i 3 mnd omtrent, og siste uken før ferien så fikk jeg rapport om at han hadde tatt den i bruk. Og selv etter å ha inspisert den for stifter (den er tom), prøvde han å bruke den til å stifte sammen et dyktig fett designdokument han måtte lese (takk til Arnstein som skriver designdokumenter på 26 sider!).

Nå var jeg ikke tilstede da han fikk støt, og jeg tror også HJ er relativt immun mot (egentlig ufarlige) støt etter diverse teslacoil-prosjekter, så jeg er ikke helt fornøyd. Jeg har større planer for høsten, og min kone bemerket bare at “du er slem Anders”. Noe jeg helt klart prøve å leve opp til.

Men nå er det sommerferie. Jeg har god tid til å tenke ut noe mer. Smerte er jo ikke målet. Det er jo best om det er noe som er morsomt for alle involverte.


Comments (View)
Posted on June 11, 2009
*

Ny blog

Det er stille her for tiden noe som skyldes blant annet latskap frem mot sommeren (-:

Å blogge om blogging blir en form for metablogging? Det er ikke så lett å blogge, og et av hovedproblemene er identitet. Hvem er du, i kontekst av bloggen. Man har gjerne flere identiteter, som varierer i forhold til hvilken kontekst man er i.

Når man er på jobb vil ens identitet bestå av firma man er ansatt i, hvilke arbeidsoppgaver man har, hvor man kommer fra og andre faktorer som er relevante for din jobb.

Når man derimot er på besøk hos slekt og gamle venner er ens identitet noe annerledes. Den har lengre historikk, de så deg jo som baby mange av de. Derimot mangler de kanskje noe informasjon om deg som gjelder de 8-9 timene du tilbringer hver dag på jobb. “Jobber du med data enda ?” er standardspørsmålet jeg kan få. Der du motstrebende svarer ja og samtidig forsøke å flykte fra spørsmål om virusinfiserte pc-er, printer-helvete og word-problemer.

Dette beskriver vel hovedidentitetene til flere bloggere, og man har flere. Er du konsulent for eksempel, har du en annen variant av jobb-identitet på oppdrag enn du har når du er “inne”.

Dette reflekterer seg i blogging også. Om du har en blogg, hva skal du skrive om ? Hvilken identitet har du i din blogg ? Inntil man vet dette, og hvem man skriver bloggen for, blir det lett at det ender i lammelse der du ikke får skrevet noe som helst.

Dette bringer meg over til tittelen på bloggen. Jeg har opprettet en ny blog som har et annet fokus og identitet på http://hammervold.com. Dette fordi jeg da kan fokusere de mer kuriøse og tekniske blogpostene her. På hammervold.com vil jeg da skrive om ting som mine barn, bilder av deres første skritt, hekken som vokser for raskt, og andre familiære ting.

(En hekk er forøvrig ikke bare bare. Det ligger årevis med arbeid bak en skikkelig kantete “donaldhekk”. Bildet til venstre er fra wikipedia)

Så om du tar en titt på hammervold.com så ser du det i sin spede start. Jeg har installert wordpress og noen plugins. Men ikke et godt theme enda.

Så har du noen tips, så send meg gjerne en epost, eller kommenter her!

Comments (View)
Posted on May 18, 2009
*

Trafikk til besvær

De som kjenner meg vet at jeg er opptatt av trafikksituasjonen der jeg bor. En kort oppsummering:
Jeg bor ved en av 3 innkjøringer til et tun, der det er bom ved alle 3 innkjøringer som kan åpnes fritt. Veiene er smale og ved min oppgang er det et betonghinder som hindrer billister i å se om barn løper ut i veien. Bilene kjører delvis veldig fort her. Hastigheter på anslagsvis 40km/t er ikke uvanlig.

Vi kan vel lukte kimen av en konflikt her ? Ikke ? Vel jeg fortsetter.

For at barna skal kunne løpe tryggere ut og inn oppgangen har jeg satt opp en sagbukk på 60x60cm ved oppgangen , med en refleksvest på så den synes godt:

En nabo av meg som er enda mer opptatt av lokaltrafikken kom på ideen og det har bredt seg.

Denne bukken sørger da for at bilene må kjøre 60 cm fra kanten ved min oppgang, og sannsynligvis bremser de fleste da litt opp også.

For meg er det en vinn vinn: Barna er trygge og bilene kommer uhindret frem.

Min sønn (heretter kalt AX) er nå 3 år og frisk i takten, så han får løpe fritt i gata dersom jeg er ute og kan holde oppsyn.
Han er blitt forklart og har skjønt at biler er farlige og at han må holde seg unna veien når de kommer. De kan jo komme veldig fort. Så han har stor respekt for biler.

Forrige torsdag var det strålende vær og AX lekte seg i gata med venner og naboer, mens jeg jobbet litt i hagen. Så hørte jeg at det ble litt vel stille så jeg jeg måtte ut og sjekke hvor han var. Litt irritert fordi han visste han ikke fikk gå så langt som han nå så ut til å ha gått.

På veien ser jeg en billist som har pakket sammen min bukk ved siden av veien, samt satt vekk en av AX sine leker. Så jeg spør ham da (mens jeg egenlig leter etter aleksander) “Ka dåkk gjær ferr nå?”. Han svarte ikke så jeg spurte igjen. Men fremdeles ikke svar, han setter seg bare i passasjersetet. Han er heretter kalt “Silent guy”.

Silent guy setter seg i bilen og jeg setter så opp bukken slik den skal stå. Jeg ser også inn i bilen for å se hvem dette kan være.

Da kommer sjåføren ut, som viser seg å være alt annet enn silent. Hans utbrudd er ganske høymelt “E det itj låv å kjør her heller no ?”. Sjåføren var en røslig kar, med tattiser på skuldra og store overarmer. Heretter kalt Big guy. Jeg tenkte her er det da voldsomt til reaksjon, men stod på mitt og sa noe ala “Det spring da onga her”, mens jeg pekte på oppgangen og veien.

Big guy ble enda sintere og ropte til meg at “de må da gå an å kjør her” inni lengre setninger, og utbrøt, “de sto jo mitt i vein”, hvorpå jeg raskt ekviperte “men ka e de du kjæm ut av biln førr, de e da go plass å kjør på her” mens jeg peker på veien.

Da kommer noen gode gloser mens han setter seg inn i bilen og freser bort. Jeg gløtter så vidt inn i bilen og tror jeg ser et barnesete. Så han har barn tenkte jeg og likevel var dette et problem. Merkelig.

Jeg skjønte jo etterpå at AX hadde tenkt på egenhånd og funnet ut at biler jo må bremse enda mer dersom han setter bukken midt i veien istedenfor ved kanten slik jeg gjør (Smart tenkt da, pappa er stolt!). Uten kanskje å reflektere over hvordan det påviker andre sjåføreres trafikk-personlighet.

Dette hadde jo vært helt triviellt hadde det ikke vært for fortsettelsen. På 17. Mai så jeg at noen gikk bort til postkassene og satte seg ned så han forsvant. Det var snodig tenkte jeg, og gikk for å se bedre. Og visst var det Silent Guy som var tilbake.

Han hadde på seg millitæruniform i amerikanske ørken-farger (dette er fremdeles 17. Mai). Silent guy satt nedhuket og letet frem noe. Så reiste han seg opp, gikk sakte fremover, og så på postkassene, før han åpnet naboens postkasse, tenkte seg om, og så åpnet min. Der står navnet vårt som han så skrev ned.

I mellomtiden hadde jeg kommet ned på veien, men silent bob lever opp til navnet og sier ingen ting. Sakte trekker han seg tilbake innover i feltet.

Til tross for at dette er en lang post, tror jeg ikke siste ord er sagt i denne soga.

Comments (View)
Posted on April 6, 2009
*

God kode: Oppførsel - Et alternativ til arv

En veldig vanlig feil når man lager funksjonalitet som mange objekter skal dele, gjerne med kodebiblioteker, er å benytte seg for mye av arv.

Så jeg tenkte å skrive enkelt eksempel for å vise en annen måte man kan imeplementere gjenbrukbar oppførsel uten å bruke arv.

Scenariet er en grid, som du ønsker at skal ha uniformt utseende og oppførsel. Det kan være fordi du har mange prosjekter som bruker samme komponenter og du vil ha lik oppførsel i applikasjonenene fra alle prosjekter.

For å starte med en grid som alle kjenner og tilbyr (uhorvelig) mye ferdig funksjonalitet så arver din grid fra UltraGrid.


public class Grid : UltraGrid
{
Grid()
{ Font=StandardFont;}
}

Du setter noen standarder i denne slik at alle grider som brukes av utviklerne får de samme egenskapene som standard oppførsel.

Med tid så vokser denne klassen. Den kan bli flere tusen linjer kode, og inneholder alle kjente tillatte måter å bruke den på.

I ettertid er det lett å se problemet. Vi kan kort oppsummere noen:
  • Vedlikeholdbarhet. Hvordan vedlikeholde en klasse med hundrevis av metoder i tusenvis av linjer kode, effektivt ?
  • Duplisering ? Hvordan kan man være sikker på at det man lager ikke er lagd før ?
  • Testbarhet ? Slike klasser er umulige å holde testbare.
Til slutt vet ingen hvilken kode som er død, og hvilken som er levende, og alle endringer medfører mye detektivarbeid for å avklare om det er gjort før, eller må lages på nytt.
Spørsmålet da er hvordan kommer vi oss vekk fra det.

Et godt alternativ da er å lage oppførsels-klasser som kan brukes med denne Grid-klassen.

Du vil at alle brukere av griden skal ha et kontekst-menyinnslag for eksport til excel. Istedenfor å legge til en metode i Grid-klassen kan du lage en oppførsels-klasse som håndterer excel-eksport.

public class ExcelEksportOppførsel
{
public ExcelEksportOppførsel(Grid grid)
{
...
}
public void LeggTilKontekstmenyinnslagForEksport()
{
....
}
}


Denne klassen tar en grid inn som parameter til konstruktør og håndterer nødvendig funksjonalitet for å eksportere til excel.

Men den kan fremdeles forbedres noe. For å gjøre den enda mer testbar kan vi endre konstruktør:

public ExcelEksportOppførsel(Grid grid) {}

Dermed kan vi ta inn et mockbart IGrid-objekt istendefor en ikke-mockbar grid.

Den siste bedringen vi skal gjøre er å lage en enklere måte å bruke objektet på:


public class ExcelEksportOppførsel
{
public ExcelEksportOppførsel(IGrid grid)
{
...
}
public void LeggTilKontekstmenyinnslagForEksport()
{
....
}
public static void LeggtilKontekstmenyinnslagPåGrid(IGrid grid)
{
ExcelEksportOppførseloppførsel=new ExcelEksportOppførsel(grid);
oppførsel.LeggTilKontekstmenyinnslagForEksport();
}
}


Denne klassen er testbar, har en klar mening, og er vedlikeholdbar. Et godt utgangspunkt for å lage flere slike oppførsler.

Din grid-klasse kan også ha en egenskap som sier noe om at den skal støtte exceleksport, og så bruke denne oppførsels-klassen. Isåfall vil det for en bruker av grid-klassen din ikke endre bruksmåte å legge funksjonaliteten ut i egne oppførsels-klasser.

Sluttkommentar
Det er ikke nødvendigvis akkurat DENNE oppførselen som er den beste måten å organisere koden på.

Et annet forslag er å lage 2 oppførsler. Der den ene håndterer det å legge til kontekstmenyinnslag, og den andre selve exceleskporten. Så kan oppførslen for å legge til menyinnslag knytte en exceloppførslen sammen med menyinnslaget.

Avhengig av hvilke behov du har kan flere alternative måter å organisere det på være riktig.

Comments (View)
Posted on March 29, 2009
*

Cucumber + (Iron)ruby #6 : Første egne test

Da er vi klare for vår første egne test.

Jeg vil lære noe om ASP.Net MVC. Dette er lagret i en features-fil “nnug.feature”.
For at dette skal bli en kjørbar test trenger vi en fil med “step-definisjoner”. Step-filer lagrer vi i katalogen “step_definitions”. Dette er ruby-koden som kjøres av cucumber og definerer de skrittene vi bruker i testen vår. I vår step-fil ” har vi:

Her brukes regexmatching på teksten i vår features fil til å definere hva som skal skje i hvert step. @browser er et objekt som representerer nettleseren, styrt av watir. I dette tilfellet internet explorer. Det er definert i en environment.rb-fil som ligger i support-katalogen:

require 'spec/expectations'
require 'watir'
Browser = Watir::IE

# "before all"
browser = Browser.new

Before do
@browser = browser
end

# "after all"
at_exit do
browser.close
end
I “When” - skrittet har vi bare en utkommentert linje, siden vi ikke skal gjøre noe der i denne enkle testen.

I Then-skrittet så tar vi mot en parameter text, og sjekker om den fins i teksten på websiden.
Så det vi sjekker i denne testen er, når vi er på websiden localhost:2323/default.aspx, så skal vi ha teksten “Velkommen NNUG”på denns siden.

Når jeg kjører denne testen med "cucumber --language no features" blir den rød-
Hva må vi gjøre for å få en grønn test ?

Vi laster ned ASP.Net MVC fra codeplex, og lager et nytt prosjekt. Her kaller vi prosjektet NNUG, siden det ble presentert der. Vi setter portnummer for web-siten til 2323 så vi har dette klart til testen vår.

Vi endrer ingenting, vi bare starter det. Da ser vi denne websiden:


Når vi kjører testen blir den fremdeles rød.

Neste skritt er å endre koden så testen vår kan forventes å bli grønn. Fra dette:
til dette:

Vi kjører testen på nytt med "cucumber --language no features" . Og får nå dette skjermbildet:
En grønn cucumber-test.

PS!Jeg ser nå at jeg glemte “chcp 1252” så de norske tegnene ødelegger testene. Så husk chcp1252 som beskrevet i en tidligere post så får du penere bilder enn meg ;)

Comments (View)
follow me on Twitter