Diverse prosjekter

Her kan du lese om diverse utviklingsprosjekter jeg driver med - hobbyprosjekter stort sett, inkludert open source prosjekter jeg har startet eller bidrar på.

Pixel-liv

I denne blogposten om hvordan det er å være en gammer programmerer refererte Uncle Bob Martin i kommentarfeltet til noe han kalte Langton’s Ant. Wikipedia kunne fortelle meg at dette er en todimensjonal Turingmaskin oppfunnet av Chris Langton i 1986. Den består av et par enkle regler, men utviser kompleks, emergent adferd. Reglene er: Står mauren på en hvit celle, snu 90 grader til høyre - står mauren på en svart celle, snu 90 grader til venstre. Endre deretter fargen på cellen, og gå én celle frem.

Langton’s Ant virket som en interessant, liten programmeringsoppgave i samme bane som Conway’s Game of Life. Jeg fikk selvsagt lyst til å prøve meg på en implementasjon, så jeg satte igang i mitt favoritt-fritids-språk Ruby. For den grafiske representasjonen fant jeg frem Gosu, et genialt og enkelt rammeverkt jeg har sett litt på tidligere for å lage grafiske spill i Ruby. Gosu gir meg et vindu med en update-draw-syklus (for dem som er vandt til spill-utvikling), og enkle metoder for å plassere og manipulere grafikk.

Og her er resultatet – etter noen få hundre steg har mauren laget en liten krussedull:

Ser du den lille, rød mauren? Etter noen tusen steg virker det som om alt bare er kaos:

Men etter rundt 10.000 steg begynner det å skje noe. Mauren begynner å lage en “motorvei”. Det er ikke bevist at dette alltid vil skje, men alle forsøk som er gjort – uansett start-forhold – har før eller senere produsert et slikt mønster.

Det var ganske kult å for en gangs skyld ikke kunne skrive enhetstester for adferden jeg var ute etter. I stedet måtte jeg vente over ti tusen sykler (ca 2,8 minutter – 0,01685 sekund pr steg – en framerate på nesten 60 pr sekund) for å se at mauren min fungerte som den skulle. Jeg kunne selvsagt skrevet tester for andre ting, men valgte å kjøre uten sikkerhetsnett denne gangen.

Hvis noen er interessert i å se koden så ligger den på min github-konto. Selve logikken for å vise et todimensjonalt sort/hvitt grid i et Gosu-vindu gjorde jeg generell. Jeg implementerte også en versjon av Conway’s Life med den – den ble noe tregere enn jeg hadde håpet, skylder det på Gosu-rammeverket inntil jeg finner en bedre optimalisering i min egen kode :P

Hva har du gjort i dag for å bli en bedre utvikler enn du var i går? Her er to forslag til hva du kan gjøre. 1) Les koden min, last den ned, og forsøk enkelte modifikasjoner for å forsikre deg om at du forstår den. Kom gjerne med spørsmål til koden, eller forbedringsforslag. Eller 2) Implementer din egen Langton’s Ant. Hva med en .NET-implementasjon vha. XNA?

QuickBencher (beta)

Nytt prosjekt: SharpBrain

"Vil du bli en .NET Ninja" lansert

Fussball Manager blir Åpen Kildekode

Snookiepoof på google code

Overvåk ledig diskplass med WMI

The Forecast Exchange: Flere grafer og en promo video

Enkel integrasjon mot TeamCity

En enkel SOA komponent

Torbjørn Marø

Torbjørn er systemutvikler og et aktivt medlem av .NET-miljøet i Bergen. Dette er hans blog.

Siste kommentarer


Torbjørn: Kan alltid stole på at Ameth kommer med en fungerende løsn...

Ameth: Enumerable.Range(1, 11).Select(i => (Math.Pow(1+Math.Sqrt...

Torbjørn: Ja, Linq og lambda i C# har mange bruksområder, og gir komp...

Kenneth: Innså til slutt at å produsere fibonacci-følgen med en sl...

Kenneth: Dette er ikke relatert til verken mønstergjenkjenning eller...

Torbjørn: Note to self: I Clojure heter denne funksjonen mapcat...

Torbjørn: Nei, vi bruker ikke Clojure, og inntil videre lærer jeg meg...

 Hold deg oppdatert

Søk i bloggen

  • Follow me on Spotify

    Kategorier

  • .net ninja (26)
  • Bøker (10)
  • Diverse prosjekter (22)
  • Erlang (7)
  • F# (2)
  • Hardware (1)
  • Jobb (64)
  • kjempekjekt.com (16)
  • LISP/Clojure (11)
  • NNUG / community (39)
  • O/RM & databaser (9)
  • Off topic (111)
  • OO-design/clean code (19)
  • Podcasts (10)
  • Polyglot (23)
  • Ruby (18)
  • Silverlight / RIA (3)
  • Software/verktøy (16)
  • Softwareutvikling (14)
  • Testing / TDD (25)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (20)
  • WPF (9)
  • WTF (4)
  • Abonner via epost

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

    Mine bokmerker

    Meta