Tilfeldige ting

Feb 04

Første commit til github, SpecFlow for norsk

Etter å ha gjort en kort introduksjon til BDD og cucumber på XP Meetup denne uka, ble jeg reintrodusert for SpecFlow.

Dette er en visual studio addin som snakker Gherkin for BDD-tester, slik cucumber gjør. Dette gjør livet betydelig enklere for en .Net utvikler da man får testrunner-integrasjon direkte i visual studio.

Men det hadde en mangel: Norsk. Dvs den var ikke ferdig implementert for norsk.

Så jeg branchet SpecFlow (her), og implementerte det for norsk, samt en fiks for en svensk test som så ut til å mangle.

Deretter begynte jeg lese mer om dette og så at de på Aslaks forslag har begynt å integrere seg med med Gherkin-prosjektets parser og implementere denne for c#. Dermed vil de få støtte for alle de til nå støttede 40 språk out of the box.

Så da legger jeg ikke inn noen pull request på min fiks :)

Det lønner seg å lese seg opp om hva som skjer før man gjør kodeendringer.

Men inntil de er ferdige har jeg en branch av SpecFlow med støtte for norsk.

Nov 25

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

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

Sep 01

“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 ?

“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 ?

Aug 20

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

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

Jul 28

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å.

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

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

Jul 10

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.


Jun 11

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!

May 18

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.

Apr 06

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:
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.