NNUG / community

Artikler og nyheter om .NET miljøet, spesielt i Bergen, men også andre ting i regi av Microsoft eller andre.

Forberedelser til NDC 2011: Onsdagen

ndc2011

En av årets største begivenheter vil for meg være Norweginan Developers Conference i Oslo Spektrum. I fjor var vi på QCon i London, men i år skal vi tilbake til nordens beste utviklerkonferanse. Og denne gangen stiller vi i PSWinCom også som utstillere med egen stand. Så hvis du vil slå av en prat er det bare til å ta turen innom i pausene!

Programmet for konferansen begynner å bli ganske klart nå, og jeg har selvfølgelig begynt å se på hvilke forelesninger jeg skal gå på. I denne blogposten tar jeg for meg onsdagen – de to andre dagene kommer i egne poster.

10:20

Robert C. Martin (a.k.a. Uncle Bob) har betydd mye for meg de siste årene – han har vært en viktig inspirasjon i forhold til ren kode, testdreven utvikling og god objektorientering. Men nå synes jeg faktisk det er enda mer spennende at også han har blitt bitt av Clojure-basillen. I år starter han med et foredrag han har kalt Clojure – The Last Programming Language. Han skal ta for seg 50 år med utvikling av prorammeringsspråk, diskutere hvor vi har endt opp i dag, og hvordan det ultimate språket ser ut. Tror jeg blir nødt til å få med meg dette, selv om jeg allerede er Clojure-frelst…

11:40

Jeg kan ikke noe for det: Jeg har skikkelig sansen for Scott Bellware. Han er en rebell som stiller spørsmål ved etablerte sannheter, og legger ikke fingrene mellom når han kritiserer det han mener er feil i bransjen vår. Foredraget hans, som han har kalt Beyond Agile, virker lovende og pragmatisk.

13:40

I første slot etter lunch tror jeg SpecFlow: Pragmatic BDD for .NET blir det mest spennende foredraget. Jeg tror SpecFlow har utviklet seg endel siden jeg så det for første gang, og det kan være greit med en oppdatering. En praktisk demo av BDD kan også være kjekt å få med seg om det gjøres riktig.

15:00

Her kommer det første problemet på onsdagen. Klokken tre er det minst to forskjellige foredrag jeg gjerne skulle deltatt på.

Det første heter Let me introduce my Moncai!. Den mest sexy nettsky-hosting-provideren i Ruby-verdenen heter Heroku, og Moncai er en ny tilbyder som lover å levere noe like kult til dem som ønsker å utvikle for .Net-plattformen.

Men minst like fristende, og sansynligvis mere matnyttig, er Michael Feathers foredrag The Mistake at the Heart of Agile (and how to get past it). Michael er ikke den mest energiske showmannen på NDC, men han er veldig smart, og har alltid noe vel gjennomtenkt å tilby.

16:20

I den nest siste sloten er jeg også litt usikker. Det frister blant annet å delta på Test-driven JavaScript in practice. Beskrivelsen sier det blir mye koding, og det høres kjekt ut.

Men Kevlin Henney og Anders Norås skal også opp på scenen sammen og introdusere det de kaller The FLUID Principles. Jeg har ikke sjekket hva det dreier seg om, men det aner meg at det kan bli interessant.

17:40

Jeg kommer nok til å avslutte dagen slik jeg startet – med Uncle Bob. Denne gangen skal han snakke om The Transformation Priority Premise. Det dreier seg om en ny, formell måte å tenke og praktisere TDD på. Det er flott at Uncle Bob endelig kommer med noen nye ting – han har fortalt de samme historiene om SOLID, Clean Code og Craftsmanship ganske mange ganger nå.

Følg med for flere NDC-planer…

NNUG Bergen mars 2011: Dependency Injection

seemann_cover150Kveldens tema var Dependency Injection (DI) da dansken Mark Seeman besøkte oss i Bergen. Han snakket om principles, patterns og containers, og foredraget fløt veldig bra. Han var overbevisende og underholdende, og beviste at live koding kan fungere utmerket når det blir gjort riktig. Etter min mening var dette ett av de bedre foredragene vi har hatt på NNUG.

La meg forsøke å koke ned Marks budskapet i et par avsnitt..

Dependency Injection handler først og fremst om å gjøre koden utvidbar. Og dette er relevant for nesten alle applikasjoner – vi utvider hele tiden med ny funksjonalitet i eksisterende løsninger.

Dependency Injection gir også renere kode, kode som ikke skjuler sine avhengigheter. Slik kode gjør det vanskeligere å gjøre feil. Han disset Service Locator pattern ganske kraftig, og forklarte godt hvilke ulemper det fører med seg. I PSWinCom bruker vi en kombinasjon av dependency incetion og service locator, og jeg er smertelig klar over svakhetene med den sistnevnte teknikken. Service Locator skjuler kompleksitet, mend DI statisk deklarerer kompleksiteten.

“Don’t be tempted by the Service Locator” Smilefjes

Mark Seeman er aktuell med boken Dependency Injection in .NET, som lanseres på Manning om et par måneder (tilgjengelig nå gjennom MEAP).

To nye styremedlemmer i NNUG Bergen

Det har skjedd noen endringer i styret i Norwegian .NET User Group Bergen denne høsten. Mark Nijhof har jo begynt i Bekk i Oslo, og vil være aktiv i NNUG der. Jon Arild har dessuten i tillegg til å være leder i Bergen også tatt på seg lederansvaret nasjonalt – så vi trengte helt klart litt flere folk i styret. To av gruppens mest engasjerte medlemmer har derfor steppet opp. Jeg har intervjuet dem, og det gleder meg å kunne presentere:

Øyvind Fanebust  Thomas Pedersen

Først ba jeg dem fortelle litt om seg selv..

Øyvind: Jeg er en 28 år gammel utvikler opprinnelig fra Lindås nord for Bergen. Bor og jobber i Bergen med samboer, to katter og en hund. De siste årene har jeg vært et aktivt medlem av utviklermiljøet i Bergen gjennom blant annet NNUG og nå arrangementskommiteen for neste års ROOTS konferanse.

Thomas: Jeg er en utvikler som prøver å praktisere gode utviklingsprisipper og praksiser som SOLID, DRY, KISS, Test Driven Developement, parprogrammering etc. Jeg har en sterk interesse for smidig utvikling, og er alltid fokusert på å kontinuerlig forbedre meg selv så vel som teamet jeg er en del av. Ellers er jeg en sosial kar, opprinnelig fra Ålesund, som liker å henge ute blant folk, og har en lidenskapelig interesse for musikk, whisky og AaFK.

Hva interesserer deg for tiden?

Øyvind: I tillegg til mine engasjement i NNUG og ROOTS holder jeg på med mye spennende teknologi for tiden. Domenespesifikke språk er et svært spennende tema som jeg nylig har faktisk fått mulighet benytte i jobbsammenheng. Det samme gjelder siste utgave av ASP.NET MVC rammeverket med blant annet den nye view motoren Razor. Jeg leker også litt med “alternative” programmeringsspråk som Ruby, Closure og Boo.

Thomas: Det er nok med meg som med så mange andre at det er alt for mye som interesserer meg. Man kan naturligvis ikke rekke over alt, så for tiden går det mye i dynamisk programmering og da fortrinnsvis i Ruby. Tester ut en del forskjellige web-rammeverk som Ruby on Rails, Sinatra, og Padrino og har innsett at jeg må lære mer javascript. NoSQL er også et tema som interesserer meg mye og som jeg tror vi bare har sett begynnelsen av.

Når trives du aller best som utvikler?

Øyvind: Jeg er i mitt ess når jeg får jobbe med teknisk interessante problem og kunne lage kreative løsninger. Blir også svært inspirert av å lage noe som er nyttig for andre og få tilbakemeldinger på at det jeg er med på å lage gjør en forskjell.

Thomas: Hm, godt spørsmål. Jeg tror nok jeg trives aller best når jeg får bruke tiden min på å utforske ny teknologi, som for eksempel NoSQL. Jeg liker også godt å finne gode, brukervennlige løsninger på problemene til våre kunder.

Hvordan ønsker du å bidra til NNUG?

Øyvind: NNUG Bergen er jo allerede en suksess. Jeg ønsker å hjelpe til med å opprettholde det høye nivået på foredragsholdere samt være med på å løfte frem “lokale helter”. Jeg vil også være med å skape et aktivt community i Bergen som ikke bare fokuserer på “mainsteam” .NET utvikling, men også tar inspirasjon fra andre communities som f.eks. de rundt Java, og Ruby.

Thomas: NNUG har den siste tiden nesten blitt litt bortskjemt med foredragsholdere av stort kaliber fra både inn og utland. Dette er fantastisk bra og har bidratt til at gruppen har opparbeidet seg et veldig godt rykte og er vel blant de beste i Skandinavia. Denne trenden ønsker jeg selvfølgelig skal fortsette, men jeg håper jeg og kan bidra til at vi kan utnytte våre lokale resurser enda mer, enten det er til foredragsholding, coding dojos, “coffee and code” eller hva det enn måtte være.

Hva ser du for deg at du gjør om 10 år?

Øyvind: Forhåpenligvis mye det samme som i dag, kanskje i en noe mer senior stilling. Å jobbe med kode er det som driver meg og jeg ønsker for all del ikke å havne i en “non coding architect” rolle.

Thomas: Om 10 år driver jeg nok fremdeles å lager programvare i en eller annen form. Hva og hvor får tiden vise.

Hvis du syntes dette virket som et par greie folk kan du jo følge @thedersen og @oyvindfanebust på twitter.

Ping Ring Contribs

Dette er del 9 i artikkelserien Ping Ring hvor jeg implementerer et og samme program i et utall ulike programmeringsspråk – for å se om det er noe å lære gjennom å gjøre det. Introduksjonen kan du lese her.

Samtidig som jeg startet denne artikkelserien utfordret jeg også folkene på Norsk Freakforum til å implementere den samme oppgaven i språk som jeg selv ikke behersket. Og flere var villige til å bidra. Denne episoden av Ping Ring tar for seg disse implementasjonene.

Programmeringsdelen av Freakforum er et sted hvor man kan gjøre alt fra å diskutere hvorvidt Python eller VB.NET er det beste språket å starte med for ferske utviklere (og det er i alle fall ikke Python), til å løse skoleoppgavene til folk. Jeg tar turen innom av og til, for det hender faktisk det dukker opp interessante ting. Det er mange der som ønsker å lære mer programmering, og da kan det være givende å hjelpe til litt innimellom.

BASIC

Det første bidraget jeg fikk var i PureBasic, en komersiell BASIC-variant som er tilgjengelig på Windows, Linux, MaC OS X og faktisk også Amiga. Løsningen ble laget av Kråkelefse, og er tilgjengelig fra min github repo. Her er et utdrag:


51 Procedure PingAlarmThread(ThreadVoid)
52   Shared FriendPort, NextPing, LastPing, AlarmDelay
53   Repeat
54     If LastPing And ElapsedMilliseconds()-LastPing > AlarmDelay
55       PrintN(“Weeep! I’m so lonely… No one pinged me for quite some time.”)
56       Ping(FriendPort)
57       LastPing = ElapsedMilliseconds()
58     EndIf
59     Delay(1000)
60   ForEver
61 EndProcedure

Størrelsesmessig (kodelinjer og bytes) er det en av de lengre implementasjonene, omtrent på nivå med C# og Erlang. Men BASIC skal jo være enkelt å forstå, og løsningen er ganske ryddig og fin – absolutt mye bedre enn Erlang-varianten på det området.

Assembly (galskap)

Neste bidrag er noe ganske anderledes, nemlig en implementasjon i FASM (flat assembler) for x86-64, skrevet av Akhkharu. Det begynte med en versjon på 324 linjer, men etter å ha laget noen “litt fikse macroer” fikk han ned antallet til 199. Her følger et lite utdrag som kanskje gir deg følelsen av hvordan det arter seg å skrive assembler-kode. Hele kilden finner du her.


106 surveillance:
107   mov qword [rsp], 5
108   mov qword [rsp + 8], 0
109 .conts: syscall SYS_NANOSLEEP, nocheck, rsp->rdi, rsp->rsi
110   cmp eax, -1
111   je .conts
112
113   syscall SYS_GETTIMEOFDAY, check, rsp->rsi, ~esi
114
115   mov rax, [rsp]
116   mov rdx, [lastPing]
117   add rdx, r14
118   cmp rax, rdx
119   jle surveillance
120
121   call write, timeout&>rdi
122   clone senderStack, sender
123   jmp surveillance

Akhkharu postet denne koden med den passende kommentaren: “… og det var nok masochisme for i år.”

PHP (er det mulig da?)

Og så til et bidrag jeg ikke trodde skulle komme. |d13m0b har gjort et forsøk på å implementere en Ping Ring i PHP. Han advarer om at koden kan inneholde feil, for den ble skrevet på vorspiel. Men den illustrerer uansett hvordan en dyktig utvikler kan ta et verktøy beregnet for en bestemt oppgave (som å slå inn spiker), og gjøre noe helt annet med den (som å pusse tennene).

Utvikleren forklarer:

Når man skal skrive dette programmet i php oppstår det et par små problemer; PHP har ikke threading. I alle fall ikke threading i den forstand man forbinder med “normale” språk.

Det man er nødt til da er å forke, og det som skjer er at prosessen spawner en ny prosess (som er nøyaktig samme scriptet), og man må sjekke PID for å bestemme hva som er child eller parent og deretter gjøre handling ut i fra dette. Igjennom php kan man aksessere kallet med pcntl_fork. Slik jeg har satt det opp vil det lages 3 prosesser. En for PingAlertProcesser og en for PingListener, og det “opprinnelige” scriptet er parent og holder øye med barna om de dør eller ikke.

Så man har fått “threading” av veien, og så støter man imidlertid på en aldri så liten utfordring til. Hvordan får man delt variabler mellom scriptene? Man kan selvfølgelig serialisere og dumpe til en fil som alle scriptene har tilgang til, men dette er ikke akkurat noen optimal løsning.

Heldigvis har php noe matnyttig man kan bruke; Semaphore. Dette er en wrapper til SysV sine IPC-kall. Vi sitter altså med en modul som kan håndtere minnet mellom uavhengige prosesser (getLastPing og setLastPing).”

|d13m0b har på en måte nesten gjennoppfunnet Erlang-løsningen i PHP :) Den fullstendige kildekoden er på 217 linjer, og er tilgjengelig her. Her er en smakebit fra semafor-koden:


172 function hasReceivedPing()
173 {
174   global $handle;
175   global $buffer;
176
177   sem_acquire( $handle );
178   $hasReceivedPing = shm_get_var($buffer, 2 );
179   sem_release( $handle );
180
181   return $hasReceivedPing;
182 }
183
184 function setReceivedPing( $value )
185 {
186   global $handle;
187   global $buffer;
188
189   sem_acquire( $handle );
190   shm_put_var( $buffer, 2, $value );
191   sem_release( $handle );
192 }

Bidragsyteren avslutter med følgende kommentar om å implementere Ping Ring eller lignende slik han har gjort:

“Ikke gjør det i php, og ikke gjør det i fylla.”

Haskell

Jeg fikk også se en implementasjon i Haskell, og den er tilgjengelig i sin helhet her. Koden inneholder endel unicode, men jeg gjør et forsøk på å rendrere et lite utdrag (krysser fingrene):


68 pingSurveillance ∷ State → IO ()
69 pingSurveillance s@State {timeout, sendPing, lastPing} = do
70     threadDelay 5000000
71     t ← readMVar lastPing
72     now ← getClockTimeMS
73     when (now - t > timeout * 10^6) $ do
74         putStrLn $ “ALARM! It has been “ ⊕ show ((now - t) `div` 10^6)
75                  ⊕ ” seconds since last ping”
76         putMVar sendPing ()
77     pingSurveillance s

Akhkharu, som leverte denne løsningen også, innrømmet at han ikke så noen fordel med å implementere Ping Ring i Haskell. Koden er ifølge tallene like lite kompakt som Erlang-versjonen.

I tillegg til de implementasjonene dere har fått sett smakebiter av her inneholder Ping Ring contrib-repositorien på Github også tre ulike Python-implementasjoner. Ta en titt, og se om du blir inspirert til å implementere din egen ring i det språket du liker best. Eller kanskje du skal prøve deg på et språk du aldri har gjort noe i før? Hvorfor ikke?!!

Tidligere i serien: Introduksjon | C# | Ruby | Boo | Erlang | Clojure | Clojure m/Agenter | Python.

Kildekoden fra denne blogposten er tilgjengelig på Github. Der står du fritt til å forgrene løsningen og gjøre egne modifikasjoner om du ønsker det (for å illustrere et poeng eller lignende). Som alt annet på bloggen er koden lisensiert under Creative Commons.

En Software Craftsman finner seg en lærling

Synes du folk som Uncle Bob og Corey Haines har mye fornuftig å si? Mener du at vi må hjelpe hverandre å bli bedre utviklere? Har du lyst å kunne kalle deg selv en Software Craftsman? Har du signert Software Craftsmanship manifestet? Svarer du ja på ett av disse er mitt neste spørsmål: Har du funned deg en lærling???

De som støtter ideen om Craftsmanship, og som mener programmerere kontinuerlig må jobbe aktivt med å bli bedre, må ta konsekvensene av dette. Dette betyr blant annet at du bør finne deg en mentor som kan være din veileder, og at du tar deg en lærling som du kan være veileder for. Både du og din mentor vil lære av at han hjelper deg, og på samme måte vil du og lærlingen din begge lære mye av deres sammarbeid.

Så med disse tankene i hodet tok jeg turen innom Norsk Freakforum og registrerte meg som villig læremester. Og etter kort tid tok Olaf kontakt…

Min lærling

CropperCapture[63] Olaf er en 19 år gammel IKT-lærling som har syslet litt med programmering i et års tid (C#, C++, Java, og VB.NET), og som har planer om å ta Informatikk på NTNU. Han hadde lyst til å lære mer, spesielt i C#, og ville gjerne bli min lærling.

Jeg sa at jeg ville fokusere på å lære ham profesjonell softwareutvikling, ting som god bruk av objektorientering, ren kode, og praksiser som testdreven utvikling etc. Han vet nok ikke helt hva dette innebærer enda, men min plan er å gi ham balast han ikke vil få i et Informatikk-studie, som vil gjøre ham til en smidig utvikler av kvalitets-prgramvare. Underveis tetter vi hull i grunnleggende programmeringskunnskaper når de dukker opp.

Jeg begynte med å gi Olaf en rimelig grei programmeringsoppgave. Første gangen fulgte jeg ganske nøye med mens han jobbet, og kunne gi ham noen tips underveis. Når programmet fungerte som spesifisert gjorde jeg en grundigere code review, og gav ham tips om forbedringer han kunne forsøke. Og slik har vi fortsatt – han koder litt, jeg gjør en review og tilbakemelding, og han koder videre. Etterhvert varierer jeg hva jeg fokuserer på, og han lærer forhåpentligvis mer og mer.

Olaf gav meg i alle fall raskt en god tilbakemelding:

“Ja allerede nå føler jeg at jeg har lært mere innen objekter og klasser. Tidligere har de ikke virket så logiske å forstå, men føles nesten som jeg har fått en diger lyspære over hodet. Frem til nå har jeg ikke brukt objekter, rett og slett fordi jeg ikke har forstått det, men nå som jeg måtte bruke objekter, ble det fort enklere å få den motivasjonen til å lære.”

Teknisk oppsett

For å dele filer har vi valgt å bruke DropBox. Olaf kan da dele prosjektene sine med meg, og Visual Studio gir meg øyeblikkelig beskjed når han har lagret en ny endring (f.eks. når han kompilerer programmet). Dermed kan jeg følge med nesten i real time, uten å måtte bruke en eller annen form for delt desktop-løsning. Jeg kan også legge til filer i prosjektet med tips og nye oppgaver, og dette har fungert fint sålangt.

Utover dette kommuniserer vi via epost – så slipper vi å måtte være online og tilgjengelige samtidig, og vi kan gjøre det vi skal når det passer hver av oss best.

Min bønn til dere andre med litt erfaring

Jeg vil på det sterkeste anbefale alle i min situasjon om å forsøke å finne seg en lærling. Det krever ikke så mye – vi snakker om langsiktige sammarbeid hvor læremesteren kan være støttespiller for en som ønsker å bli en bedre utvikler – og man trenger ikke legge så mye tid i det fra uke til uke. Spre litt av den erfaringen du har opparbeidet deg. Hvis vi er mange nok som gjør dette vil kvaliteten i bransjen kunne øke dramatisk.

Råd til blivende softwareutviklere

Det finnes mange utviklere i Norge som brenner for faget sitt, og som har masse erfaring å by på. De samles ofte på såkalte brukergrupper, og jeg vil anbefale alle som er insteressert i å lære programmering om å oppsøke disse. For .NET-utviklere har vi NNUG, som finnes i åtte byer i Norge. Java-utviklere har javaBin, Rubyister i Oslo har irb.no, og det finnes sikkert mange flere (skriv en kommentar om du vet om noen). Det er gratis å bli med på slike møter, og kvaliteten på det man får se er som regel veldig bra. Og så kan man regne med å få litt pizza.

Et annet sted man kan treffe ivrige utviklere er på twitter. Se for eksempel henriksen’s liste over norske .net-utviklere, eller fkalseth’s norwegian-dev-community-liste. Følg med på hva folk snakker om, delta i samtalene, finn ut hvem som kan være potensielle mentorer for nettopp deg – og spør dem om de har lyst til å bli det!

Utviklere må selv ta ansvar for karriæren sin, og må jobbe aktivt med læring. Med en læremester å støtte seg til kan man korte ned tiden det tar å bli en dyktig programmerer.

Oppsummering fra QCon 2010

QCon London 2010 er vel gjennomført. Her følger en (faglig) oppsummering av hva vi fikk oppleve.

Dag 1 : Software Craftsmanship

Konferansen ble innledet med en keynote levert av alltid inspirerende Robert C. Martin. Deretter valgte jeg å følge Software Craftsmanship-tracket, ledet av Kevlin Henney. Det gjennomgående temaet på foredragene var hvorfor utviklere må fokusere på kontinuerlig læring, hva vi bør lære, og ikke minst hvordan vi lærer på en best mulig måte.

Dan North ledet ann med en av konferansens aller beste sesjoner. Deretter fortalte Jason Gorman om en spennende strategi for å sertifisere en gruppe utviklere i smidige teknikker, samtidig som de faktisk utvikler sine ferdigheter. Denne modellen tror jeg vi vil forsøke i teamet i PSWinCom. Etter lunch fortsatte Pete Goodliffe å snakke om læring, før David Harvey forsøkte å peke på noen farer med Software Craftsmanship-bevegelsen. Argumentene var svake, og selv om han stimulerte til et par, nye tanker, så var dette dagens nedtur. Alt ble derimot bra igjen da Corey Haines – omreisende utvikler – entret scenen og fortalte om Craftmanship-bevegelsen fra sitt ståsted.

Dagens høydepunkt: Avslutnings-keynote’n hvor legendariske Dan Ingalls lekte seg med Fortran, Smalltalk/Squeak og Lively Kernel. Den fyren fikk til ting på 70-tallet som jeg ikke har den fjerneste anelse om hvordan jeg skulle ha gjort i dag.

Stikkord: Dreyfus Model | Pomodoro | Six Thinking Hats

Sentrale slides: Sharpening the Tools | The Craftsman Learns (or Learning the Craft)

Dag 2 : Godt & Blandet

Ralph “Gang of Four” Johnson ledet an dagen med en keynote om å leve med software som blir eldre. Deretter skulle jeg gå på en leksjon kalt The Counterintuitive Web. Jeg fant det derimot ganske intuitivt, kjedet meg, og forlot salen. Jeg gikk i stedet inn i et tilfeldig annet rom, hvor det viste seg at Jim O. Coplien kodet Ruby og snakket om noe han kalte DCI-arkitektur. Dette var veldig interessant – noe jeg skal titte mer på.

Dagen fortsatte med Patterns for the People av Kevlin Henney, Simplicity med Dan North – et meget underholdende foredrag – og Roy Osherove som snakket om hvordan man skaper gode utviklingsteam og hvordan man er en god teamleder. Til slutt gikk jeg på en sesjon med Amanda Laucher og Josh Graham, som presenterte 12 ting .Net-utviklere bør lære seg i år: F#, M, Boo, nUnit, RhinoMocks, NHibernate, Windsor, NVelocity, Guerilla SOA, Azure og MEF. Det var ikke mye nytt her for meg, men både Oren Eini, Roy Osherove og Jon Skeet var i salen, og det gjorde at det ble noen interessante diskusjoner, så det var en grei måte å avslutte dagens leksjoner.

Dagens høydepunkt: NNUG Bergen’s sosiale event (i sammabeid med AltNetBeers, og sponset av ThoughtWorks). Her hadde jeg mange, spennende samtaler, og fikk bl.a. preiket litt med Corey Haynes.

Dagens manifest: “We are learning better ways of doing software development by seeing how others have already done it.” – Patterns Manifest, Kevlin Henney.

Stikkord: The DCI Architecture | Bath Duck | Chunking up / 5 Whys

Sentrale slides: Patterns for the People | Simplicity – The Way of the Unusual Architect | Beautiful teams and leaders | The State of The Art .NET 

Dag 3 : Concurrency, og litt testing

Siste dagen dedikerte jeg i stor grad til concurrency og parallelism (parallelisering er samtidighet + høy hastighet/ytelse). Og den første sesjonen, hvor Erlang’s far Joe Armstrong fortalte om meldinger som en strategi for samtidighet, var en ren åpenbaring. Jeg har snust litt på erlang tidligere, men da Joe forklarte filosofien bak språket kunne jeg nærmest kjenne hvordan hjernen begynte å vokse og danne nye koblinger – jeg så sammenhenger jeg ikke har sett før, og kom ut av forelesningen med en ny og bedre forståelse av verden! Jeg gikk rett bort til O’Reilly’s stand og kjøpte Programming Erlang – Software for a Concurrent World. Dette vil det garantert komme flere blogposter om..

Neste forelesning var Test-Driven Development of Asynchronous Systems, som var veldig aktuell for oss i PSWinCom. Deretter fikk jeg med meg Multicore Programming in Haskell (ikke så veldig interessant), etterfulgt av A Pattern Language for Parallel Programming med Ralph Johnson. Siste foredrag – Death by Accidental Complexity med Ulf Wiger – hadde et viktig budskap, men gjennomføringen var ikke så bra, så det ble en liten nedtur. Alt i alt var jeg derimot veldig fornøyd med dagen.

Dagens høydepunkt: Joe Armstrong forfekter at sekvensiell, tilstandsbasert (objektorientert) programmering er MYE VANSKELIGERE enn concurrent, funksjonsbasert programmering.

Ett av dagens mange gode sitat: “Shared memory is for the people who can’t rememeber the lessons from the past.” – Ralph Johnson

Sentrale slides: Message Passing Concurrency in Erlang | A Pattern Language for Parallel Programming

.Net-nyheter fra Bergen

Som vanlig skjer det mye i .Net-miljøet i Bergen. Her er noen høydepunkt akkurat nå..

Mark Nijhof, styremedlem i NNUG Bergen, annonserte på bloggen sin fredag at han slutter i Reaktor og starter sitt eget firma: Cre8tive Thought. Mark er kjent for å ha sterke meninger, og er opptatt av software craftsmanship-verdier. Han legger opp til å både ta utviklingsoppdrag (enten som utvikler eller teamleder) og coaching-oppdrag. Hvis du ønsker at teamet ditt skal bli litt mere smidig, så kan du f.eks. leie inn Mark til å hjelpe dere til å ta i bruk parprogrammering, få bedre utbytte av testdreven utvikling, eller ta en gjennomgang av arkitektur og design, og vurdere om koden er fleksibel nok i forhold til endringer.

Styrelederen i NNUG Bergen, Jon Arild Tørresdal, har også ting på gang. Han er nemlig med som foreleser på vårens MSDN Live, og vil informere folk i Stavanger, Bergen, Trondheim og Oslo om Windows Identity Foundation. MSDN Live kommer til Bergen 23. april, og vil også omhandle Azure, SharePoint 2010, TFS og SIlverlight 4.

Skal du på QCon London – og det er bare en drøy uke igjen nå – så må du melde deg på den sosiale kvelden NNUG Bergen har stelt i stand på torsdagen. Vi inviterer alle som har lyst til å bli med på en uhøytidelig samling på en lokal pub, hvor du vil få anledning til å spandere øl og snakke med blant andre Corey Haines, Udi Dahan, Dan North, Oren Eini (a.k.a. Ayende Rahien) og Jon Skeet. Dette er en Unik Mulighet – for hvor ofte får du mulighet til å diskutere med en av verdens fremste .Net-arkitekter, mannen bak Behaviour-Driven Development, geniet bak RhinoMocks, og den mest kjente StackOverflow-brukeren på en og samme kveld? For ikke å snakke om den sympatiske Corey, som for tiden er selve personifiseringen av Software Craftsmanship.

Udi Dahan kommer forresten til Bergen i april, og vil holde foredrag for NNUG’s medlemmer siste onsdagen i måneden (medlemskap er fortsatt uforpliktende og gratis). Deretter har vi overtalt ham til å holde et todagers kurs om SOA og DDD – det er trolig fortsatt ledige plasser om du vil være med..

Det har forresten vært endel snakk om at selveste Kent Beck muligens kommer til Bergen i mars, også han for å besøke NNUG og kanskje holde et kurs. Og jeg har ikke hørt noe annet enn at dette fortsatt er planen. NNUG hadde et stjernespekket år i fjor, men 2010 ser sålangt ikke ut til å bli noe dårligere. Følg med på nnug.no.

PSWinCom drar til Qcon London 2010

qcon-logoI mars pakker fire utviklere fra PSWinCom kofferten og drar på utviklerkonferanse: QCon London 2010. QCon er en årlig konferanse som sier de retter seg mot arkitekter, teamledere og prosjektledere, men alle som brenner for systemutvikling vil garantert finne mye av interesse.

Konferansen har ikke noe leverandør-fokus, og dekker arkitektur og design i en nøytral kontekst. QCon 2010 har hele 15 spor, og strekker seg over tre dager. Sentrale tema er ting som utvikling innen programmeringsspråk, craftsmanship, smidige metoder og test-dreven utvikling, nettskyen, browseren som plattform, og SOA. Java og .NET, som de to viktigste utviklingsmiljøene for enterprise, har også hvert sitt spor.

QCon er en konferanse som trekker the best of the best i bransjen. Denne gangen har arrangørene samlet 100 forelesere(!!!), og keynotes holdes av Dan Ingalls (Smalltalk-gud) og Uncle Bob “I want to code till I die” Martin. Her er 15 glimrende grunner til at vi drar i år:

qcon

Jeg er spesielt interessert i foredragene som fokuserer på concurrency og skalering, og tror vi kan plukke opp mye bra her som kan gjøre PSWinCom’s produkter og leveranse enda bedre. Allerede nå har jeg bestemt meg for å følge sporene Software Craftsmanship og The Concurrency Challange nøye – sistnevnte med sterkt fokus på funksjonsbaserte språk som Erlang og Haskell. Bortsett fra dette blir det som vanlig en ganske stor utfordring å besteme seg for hvilke av de parallelle sesjonene man skal gå på – f.eks. høres både Pragmatic Cloud Computing og Irresposible Architectures and Unusual Architects ut som veldig spennende spor, og kolliderer ganske kraftig.

NNUG har forresten fått til en deal med QCon, hvor alle medlemmer får £297 av på fullpris om de registrerer seg før 22. februar (med koden “NNUG”). Vi er en liten gjeng fra Bergen som drar over sjøen, og forhåpentligvis kommer det noen fra andre steder av landet også. NNUG kommer til å arrangere en sosial samling i løpet av konferansen på et egnet sted (hørte jeg pub? Selvsagt hørte jeg pub!). Hvis du som leser dette også skal på QCon så hadde det vært hyggelig om du la igjen en kommentar så vi vet om deg!

Hva med NDC 2010 da? I fjor var jeg veldig gira på å dra på NDC, og det ble en flott konferanse med mange, spennende sesjoner. Det ser ut til å bli minst like bra i år, og det vil nok føles litt rart når norges utvikler-community samles i Oslo uten oss i sommer – men for vår del hadde vi lyst til å gjøre noe nytt, så da ble det QCon denne gangen.

Grothaug slutter i Microsoft

obj.phpi

For mange av oss .Net-utviklere har Microsoft Norge lenge vært synonymt med Rune Grothaug. Vi har sett ham på MSDN Live, og vi har sett ham på NDC. Han har stått på for NNUG, og vi har drukket øl sammen på geekbeer. Vi får ham i inboxen vår jevnt og trutt, og vi følger spent med på hva han har å komme med på twitter. I rollen sin som Developer Marketing Manager i Microsofts Utvikler- og Plattformteam har han vært en viktig pådriver for å skape et sterkt utviklercommunity i Norge.

Og nå forlater han Microsoft. Folk løper ut i gatene og roper: “Er det mulig?!?” Kan vi se for oss et .Net community uten Rune? Du skal vite at vi er mange som synes du har gjort en fremragende jobb, og de skoene etter deg blir det nok en utfordring å fylle.

Lykke til i Avenir, Rune!

Tror du at du har det som trengs for å overta det Rune kaller Verdens Kuleste Jobb? Ta da en titt her..

Et usedvanlig år..

Da nærmer det seg slutten av et veldig spesielt år. 2009 var ikke bare det året jeg slanket meg 10 kilo.., for deretter å legge dem på meg igjen. Det var nemlig også det året jeg tok skikkelig tak i min egen karriære, og jobbet målrettet med å bli en mye bedre utvikler. Jeg byttet også jobb i 2009, jeg blogget ekstremt mye, og jeg ble med i NNUG-styret i Bergen. Og sist men ikke minst vil jeg alltid huske 2009 som det året jeg ble pappa til verdens søteste jente.

Her er noen tanker rundt året som har vært. Jeg er ganske stolt av hva jeg har gjort, så dette kan tendere mot selvskryt. Er du ikke fan av det får du surfe videre…

.Net ninja-initiativet

28. desember 2008 satte jeg meg selv et nyttårsforsett: Jeg skulle jobbe målrettet og strukturert med å utvikle mine ferdigheter som programmerer. Jeg hadde store forhåpninger, men ingen anelse om at det skulle forandre mitt forhold til faget mitt så mye som det har gjort. I løpet av året har jeg lest en rekke med fantastiske bøker, hørt på hundrevis av podcasts, sansynligvis kodet mer enn noensinne (både på jobb og fritid), og diskutert mer programmering med andre enn noen gang før. Jeg har fokusert mye på grunnleggende objektorientering, patterns og refakturering. Jeg har praktisert testdreven utvikling/design, tidvis parprogrammering, og lært meg å bruke mocking og Inversion-of-Control containers. Og jeg har utviklet min daglige bruk av C#, gjennom en dypere forståelse av ting som generics, linq og lambda.

Nå på slutten av året har jeg også tatt opp igjen Ruby. Jeg begynte så smått å lære meg dette programmeringspråket i 2006, men det ble for lite brukt, så da klarte jeg ikke holde kunnskapen ved like. Nå leser jeg The Ruby Way, og har flere småprosjekter på gang. Jeg tror tillegget av et dynamisk språk til “min portefølje” vil kunne gjøre meg til en enda bedre utvikler. Så det blir mer om Ruby her til neste år…

NNUG / Community

Som jeg allerede har nevnt inviterte Jon Arild meg med i NNUG-styret i starten av året, og i februar holdt jeg et foredrag om objektorienterte databaser (del 1 og del 2) som ble svært godt mottatt. Jeg har blitt en mere aktiv deltager i det norske .Net-miljøet, bl.a. gjennom bruk av twitter og gjennom bloggen min. Jeg har blogget MYE i år, et naturlig resultat av at jeg har lært så mye nytt, og jeg tror mine blogposter har vært inkludert i Microsofts nyhetsbev hele fire ganger nå.

NNUG-året i Bergen har forresten også vært helt eksepsjonelt; vi har blant annet hatt besøk av “kjendiser” som Jimmy Nilsson, Mary Poppendieck, Jeremy D. Miller, Greg Young, og sist men ikke minst Scott Hanselmann (introdusert av selveste Carl Franklin). MSDN Live i mars og september var også bra, og årets høydare var Norwegian Developers Conference i Oslo.

Farvel Contiki, hei PSWinCom

I sommer takket jeg farvel til CMA Contiki, og begynte som teamleder/seniorutvikler i telekom-selskapet PSWinCom. Det var en svært vanskelig avgjørelse å ta, men i ettertid er jeg veldig fornøyd med utfallet. I PSWinCom har jeg fått anledning til å innføre og praktisere mange av de smidige prinsippene som var vanskelig å gjennomføre i Contiki. Vi har et dyktig og motivert team som er villige til å lære nye ting.

Domenet vi jobber i har også gitt meg mange, nye utfordringer. Vi jobber med en ekte serviceorientert (SOA), event-drevet, asynkron arkitektur med høy throughput. Vi bruker mye windows-services, køer og parallellprosessering, som fører til mange problemer jeg aldri har måttet forholde meg til tidligere. For ikke å snakke om et utall integrasjonspunkter med protokoller av ulik art. Hva mer kan en utvikler ønske seg?

Og så ble jeg pappa..

Samme hvor mye jeg har fått til i løpet av året så er dette det mest fantastiske. Dette er en blog om programmering, så jeg skal ikke kjede dere for mye, og henviser derfor bare til en liten videosnutt (tidligere publisert på facebook):

Om 2010 blir bare halvparten så spennende som 2009 har vært så kommer det til å bli et fabelaktig år. Mitt nyttårsforsett denne gangen er rett og slett å fortsette som jeg gjør nå. Takk til alle som har fulgt utviklingen på bloggen min – jeg ønsker dere en riktig God Jul og et Godt Nytt År alle sammen!!!


Alf Kåre Lefdal: Distributed Podcast er også ganske interessant. De tar opp tema som fx. ...

Stian: +1 for 6er til This Developer's Life! Min definitive favoritt. Jeg trengte også...

Torbjørn: Takk for flere tips, Vegard. Deep Fried Bytes ligger på oversikten min fra 2009...

Vegar: Og glemte helt ios: Nsbrief og ideveloper live. Har du hørt på deep fried byt...

Vegar: Mye kjekt her. TDL, hanselminutes og .net rocks ligger i en klasse for seg. Suv...

Torbjørn: Helt enig, arkivet til Software Engineering Radio er en gullgruve om man vet hva...

Einar W. Høst: Jeg synes at det kuleste med se-radio er backloggen av intervjuer... det er noen...

arnab: fantastisk :)...

Olav: Glimrende blogg ! Modellen av hjernens arbeid passer ikke bare på nyskaping: ...

Torbjørn: Ja, flydesign trekkes ofte frem som et eksempel på dette fenomenet. Design av b...

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • NodeJS vs. ASP.NET
  • Pulten min..
  • No ifs and buts
  • Community-fiskebolle på ROOTS 2012
  • Kategorier

  • .net ninja (37)
  • Bøker (18)
  • Diverse prosjekter (37)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (78)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (34)
  • NDC (4)
  • NNUG / community (63)
  • O/RM & databaser (10)
  • Off topic (118)
  • OO-design/clean code (31)
  • Podcasts (15)
  • Polyglot (82)
  • Ruby (29)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (24)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (34)
  • WPF (9)
  • WTF (13)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta