Archive for February, 2010

Integrasjon

Det virker som om Lamnakortet begynner å modnes, d.v.s ting har en tendens til å virke når jeg tester features for første gang på denne versjonen. Når du har medvind er det desto morsommere å kode, og de små triumfene gir merkelig nok nesten et bedre kick enn når det har gått litt trått i forkant. Vet ikke om dette har et navn. “Flow” ?

Bra steam konstatert, så var kveldens plan var å skrive displaytest.

Etter litt hårete breadboard-fikling, så fikk jeg verifisert at daisy-chainingen av displaykontrollerne funker. Dvs jeg kan adressere hver enkelt kontroller, samt hvert display denne har ansvaret for. Testkoden ble til i løpet av ganske få minutter (begynner egentlig å få litt sansen for høynivåspråk i denne sammenhengen, som eksempelvis *kremt* “C”…), og instinktivt vurderte jeg å verifisere den mot Spar7 (gammel vane). Men da kassa bare har ett display, så anså jeg likevel ikke dette som utfordrende nok. De siste timene en søndags kveld er for verdifulle til å gjøre noe enkelt.

Tenkte derfor at det var like greit å øke innsatsen litt og heller hive seg over Silver Coin. Denne har et passe anstendig antall display – totalt 16 stk, så det var en glitrende testkandidat for kveldens iterasjon.

Tanken er at alle knipsekassene skal få et lite patchbay-aktig interfacekort der en kan plugge de relevante orginalkablene til display, coiler og switcher. Fra dette kortet, så går det standardiserte kabler inn til Lamnakortet. Etter å ha prototypet et lite kort med et skikkelig kråkereir med ledninger mellom Silver Coin sin 34-pins IDC displayconnector og korresponderende portene på Lamnakortet, så var det bare å slå på strømmen. Ikke akkurat noe Dr. Frankenstein-øyeblikk – d.v.s. det holdt lenge med et lite 9V-batteri for å drive displayene til SC gjennom Lamnakortet.

Da jeg adresserer displayene litt anderledes enn kassa gjør i utgangspunktet, så blir det nødvendig å dele displayenes orginalkabel i 2 og hekte på en ekstra connector (Litt sånn EL3′ish), slik at en får to busser istedet for en. Jeg må legge litt tankearbeid i hvordan dette kan gjøres på en enklest mulig måte – samt reverserbart. Mer enn halve moroa med sånt er å forsøke å lage “vakre” løsninger, der en griper minimalt inn i den eksisterende leamikken.

Ved boot så sjekker kortet nå dipswitchene for å sjekke om det skal starte i testmodus eller spillmodus. På videoklippet under, så kan du se displaytest (testnummer indikert i det blå diagnostikkdisplayet). Her adresseres displayene i SC og segmentene i hvert display individuelt. Samtidig testes brightnesjusteringene. (Da jeg har akutt mangel på 34-pins connectorer og tilsvarende flatkabel, så vises kun det ene sifferet i hvert display)

Årets do-lektyre 2010

Det er tidlig i sesongen, men jeg tror vi allerede nå kan kåre en vinner i siste lekekatalog fra Gakken. I motsetning til plastikk-rælet du finner i katalogene til Toys R’Us og BR-Leker, så er denne proppfull av ting som ser ut som de lekene du bokstavelig talt drømte om da du var liten. Det er lekkert og retrofuturistisk, iblandet en dasj steampunk. Dampmaskinene ser ut som de kommer fra tiden rundt den industrielle revolusjon. Lekebilene gir litt sånn “Alperally”-følelsen, og jeg mistenker sterkt at du faktisk kan skjære deg på samuraisverdene. Byggesettene ser ut som ekte vare, sett på litt avstand – ikke som byggesett.

Bildene under er fra papirkatalogen.  Du finner mer av det samme på http://shop.gakken.co.jp/shop/, men vær forberedt på et lite kultursjokk og visse navigeringsutfordringer. Mye er sikkert fremdeles laget i kina, men det er likevel så lekkert at det ikke engang trenger å virke for at en skal bli fornøyd. Kjenner jeg blir litt glad bare ved å tenke på at disse lekene faktisk finnes.

 

 

 

Charge separation – failed…

Akutt kjedsomhet drev meg til å nappe ut Gennai Hiragas gnistgenerator fra bokhylla. Dette er i likhet med “Mechanical Animal”-serien også et byggesett fra Gakken og forventingene var store. Dette var et rent impulskjøp som ble med på julegavehandlinga fra Maker Shed (syntes det ble litt vel urettferdig at alle godsakene skulle gå til ungene rundt omkring i slekta, og barnet i meg skrek etter oppmerksomhet)

 Jeg har hatt dilla på elektrostatiske generatorer en stund og startet for en del år siden på et små-ambisiøst prosjekt for å bygge en wimshurstgenerator i glass, eik og messing (fremdeles uferdig, da jeg ikke er i besittelse av et skikkelig verksted). Gledet meg derfor litt ekstra til denne.

Relativt lettbygd sak, men de japanske instruksjonene var ikke spesielt tydelige på et par punkter, og jeg mistenker at jeg har blemma på noe sentralt (selv om prinsippet er rimelig enkelt). Det skal angivelig være mulig å dra 3-5mm gnister med den, men det er ikke engang antydning til gnist selv om jeg spinner den opp som en speedet hamster. Litt synd, da den hadde vært et kult supplement til kontorpulten (må ha noe å gjøre mens enhetstestene snurrer før innsjekk. Eneste utvei blir vel å ta med Thereminen min på jobb…).

   

 PS. Har du lyst til å lese mer om slike maskiner, eller kunne tenke deg å bygge en selv, så kan jeg anbefale “Electrostatics – The Dirod Manual” av A.D. Moore, samt “Homemade Lightning” av R.A. Ford.

Dagens arkitekturmonolog

Jeg har et noe anstrengt forhold til termer postfikset med ordet “arkitektur”. Ditto med akronymer designet for fremmedgjøring av kjøpere, skreddersydd for intellektuell vold mot tilfeldige faglige forbipasserende, eller nye begreper som mer eller mindre, gjerne tilfeldig, helt eller delvis dekker konsepter som allerede har levd en stund.

Den totale ironi oppstår gjerne når du i tillegg spotter “KISS” og “YAGNI” i den samme utfloden av konstruerte begreper.

Føler du at du drikker av den evinnelige brannslangen ? Er du på hæla og føler for litt etterutdanning ?

Frykt ikke ! Ingen grunn ikke la deg skremme av all hypen. Som du snart skal få se, så skal det ikke mye til før du kan erklære compliance med det meste, og dermed rettferdiggjøre et saftig påslag i timeprisen din. Vi bringer et lite eksempel fra kjelleren:

Det hele startet med at Are etter ferdigstilling av Spar7-kortet, i en chat nevnte at det hadde vært kjekt med et generelt erstatningskort for de gamle kassene. Jeg var enig, og etter i overkant mye bitfikling og assemblerprogrammering, så slo det meg at et eget språk måtte være kjekt, slik at det skulle bli lettere å uttrykke seg.

>”ekstern DSL” – check !

Jeg ser det står noen connectorer på kortet. Jeg kan sende signaler inn og få signaler ut. Signalene går mye i 0′er og 1′er men det er definitivt semantikk knyttet til dem. Det er legitimt å kalle et sett av disse for “kommandoer”, eller kanskje “meldinger” ?

Iom at klientene ikke trenger å  vente på prosessering av meldingene, men forsåvidt får eventer tilbake, så kan jeg kanskje også bruke ordet “asynkront”. Det går noen kobberbaner mellom connectorene og en stor svart brikke på kortet. Da dette nok er mediet for transport av meldinger, så kan jeg kanskje også benytte ordet “meldingsbuss” med god samvittighet.

> “asynkron meldingsbuss” – check !
> “eventdrevet arkitektur” – check !

Signalene er organisert i funksjonelle grupper. Det er klare grenser mellom gruppene. Alle meldinger deler det samme skjemaet. Alle er operasjoner er autonome.

>”Tjenesteorientert arkitektur” – check !

Da jeg har strenge realtimekrav, så må jeg route eventene inn i en intern meldingskø så fort som overhodet mulig, slik at task-schedulern min kan snappe meldinger ut fra køa i ledige stunder og dispatche disse til riktig eventhandler. Vi er bare et lagrekall unna…

>”Event sourcing” – check !

Hmm, når jeg tenker meg om, så er alle meldingsreturer av typen void.

>”Idempotent” – check !

Displayenes state lagres i egne buffer og pulses av egne kretser slik at prosessoren skal slippe å tenke på dette. Dvs at vi har egne datastore for skriving, og synking av lesedatastore fra denne.

>”CQRS” – check !

Jeg har ikke fulgt noen prosess i dette arbeidet. Men det har blitt flere runder med bestilling av prototypbatcher som jeg så har testet. dette har gjerne ført til at jeg har funnet feil slik at jeg har måttet korrigere designet. Jeg har også kommet på nye lure ting jeg har kunnet inkorporere på kortet

>”Iterativ prosess” – check !

Den eneste måten jeg kunne justere programvaren på med noen grad av sikkerhet, var ved å lage en slags testharness med knapper og display på en diger breadboard. Når jeg trykker på en knapp, så forventer jeg at noe skal skje enten på en output-port, på et display, eller ingenting (kanskje bare medføre en state-change). Deretter har jeg prototypet programvaren i C og flashet over på kortet for å se om oppførselen nå er ihht boka.

>”TDD” – check !

Jeg har begrenset budsjett og kan ikke kaste ressurser ut av vinduet. Hverken tid eller penger. Alt jeg gjør må tilføre verdi.

>”Lean” – check !

Jeg gjør forsåvidt aldri noe før jeg

>”Kanban” – check !

Jeg ser nå på fungerende hardware som kjører (foreløpig delvis) generert kode på et sanntids multitaskende OS. Er så langt ganske fornøyd med resultatet, og ting begynner å snøre seg sammen i et, om jeg skal få si det selv, ganske så tight lite regime.

Men…,

det jeg lurer litt på er hvordan det hadde gått med dette prosjektet hvis jeg hadde startet ut med en intensjon om å designe denne plattformen i en tjenesteorientert arkitektur med en asynkron eventdrevet buss med idempotent prosessering av meldinger, CQRS, eventsourcing og TDD’ing av DSL en som skal kompileres til en realisering av de to forrige akronymene ?

Sannsynligvis hadde en endt opp med noe i grenseland mellom en Borg-kube og en kreftsvulst.

QA i fokus

EL-3′en er nå frisk som en fole etter bypassoperasjonen for noen uker siden. Jeg har også en ny fiimwareoppdatering klar for EL-3 kortet. I forrige versjon, så hadde jeg kopiert puls-timingen rått fra orginaloppsettet i automaten. En dobbeltpuls tok da ca 45 ms. Pga at de korteste pulsene fra myntinnkast gjerne er 20 ms, så var den eneste løsningen å akkumulere pulsene inn i et buffer, for så å resende dem etter at alle pulsene var mottatt. Etter at QA-sjefen fikk testet litt, så fant vi selvfølgelig en utfordring med dette designet. Hvis spilleren dundret inn med mynter under resendingsfasen så fikk ikke kortet med seg de nye myntene.

Jeg kunne løst dette ved å sende et inhibit-signal tilbake til innkastene, men gjerrig som jeg er, så hadde jeg selvfølgeligvis gått for den minste kontrolleren som var å oppdrive – jeg var m.a.o. tom for IO-linjer.

Jeg måtte istedet en tur i tenkeboksen og etter å ha stirret litt på koden så har jeg nå forkastet buffer-konseptet. Istedet så fant jeg ut at jeg heller ville testet hvor korte dobbeltpulsene kan være for at EL-3 skal akseptere dem. Jeg er nå nede på ca totalt 6 ms (+2 ms kunstpause etter hvert pulstog). Dette vil si at jeg uten problem kan resende en dobbeltpuls umiddelbart etter at jeg har detektert en enkelt puls fra innkastet og før innkastet rekker å sende neste puls (gjerne 20 ms pause mellom dem).

Den nye tilnærmingen fungerer skikkelig bra. Jeg kunne skrelle bort en del logikk, og koden ble flere hakk hvassere. Jeg har nå testet med de eksisterende komparatorene, samt et totalizer-innkast. EL-3′en registrerer nå credits før du hører mynten treffer de andre myntene i hopperen. Det beynner m.a.o. å oppføre seg rimelig tight.

Hvor fanden ble det av jentene ?

Jentene var tidlig på banen med høye kneløft (dog med anstendig lengde på skjørtene) i databehandlingens barndom. De første skikkelige programmererne på skikkelig metall var jenter. Den første kompilatoren ble utviklet av en kvinne. Jeg vurderer også å argumentere for at den første programmerbare (dog konseptuelle) datamaskin ble unnfanget av en kvinne (Begynner på “T”…) – tror kanskje jeg stopper der.

Jeg jobber i et konsulentselskap, og det iverksettes jevnlig rekrutteringsstunt for å hanke inn nye rekrutter fra bl.a. Gløshaugen. Vi har forsøkt å øke jenteandelen i selskapet, men det er fremdeles bokstavelig talt en massiv overvekt av mer eller mindre grumpy menn med kulemage. Jeg har en vag formening om at vi kanskje er representative. Seibel intervjuet 15 menn i “Coders at Work” – 0 kvinner. Ikke engang Barbara Liskov. Hvis en myser på lista over foredragsholdere for QCon 2010, så er det fem kvinner der – av 103 foredragsholdere.  Jeg har forsøkt å telle på fingrene hvor mange kvinnelige programmerere jeg vet av etter å ha vært med en del år. Etter en halvtime, så er jeg fremdeles på en hånd.

Jentelaget hadde good steam. Hva skjedde ? Hvorfor ville de ikke være med lenger ? Har de gjennomskuet “The Big Acronym Scam” ? Skremmes de av PHB’er som har sin faglige og filosofiske ballast fra Hegnars bokklubb ? Hva er det de har skjønt som vi ikke har skjønt ?

Don’t try this at home…

EL-3 har blitt progressivt mer kranglete i det siste. Den har siden ankomst tidvis protestert ved boot og skreket “89″ (RAM-feil) til meg i displayet sitt. Den har hatt gode dager og dårlige dager, men i det siste har den antatt terminalpasient-lignende atitityd. Det var m.a.o. på tide å ta noen grep.

Jeg forsøkte tidligere å bytte batteriet og fryktet nå at jeg hadde gjort vondt verre. Etter å ha forsket litt mer på minnetypen, så fant jeg ut at en kan drive VDD helt til 7V uten at den tar skade, men da logisk “1″ == VDD+0,3V, så kan det bli problematisk hvis en setter inn et batteri på 4,5V og logikken opererer på 5V. Det viser seg at brikkene ikke trenger mer enn 2,2V for data retention, så jeg safet denne gangen og byttet til 2 AA batterier slik at den fikk comfy 3V.

Jeg bestilte NOS-RAM fra littlediode.com , og denne ankom med posten i dag. Jeg legger forøvrig merke til at de har doblet prisen på dem etter at jeg handlet en “håndfull”. Dette er 29 år gammel RAM, så mangler du en sånn, så er det kanskje like greit å handle nuh. De er fremdeles å få tak i, men neppe i store kvanta.

 Gamle printkort er ofte rimelig bitchy å jobbe med, og en må være fryktelig forsiktig under avlodding for ikke å røske printbaner opp fra kortet. Jeg valgte å klippe beina på brikkene, og etter en sånn operasjon er det ingen vei tilbake. 

Deretter var det bare å gå på med et par meter loddelisse for å få rensket opp, og resultatet etter kirurgien var om jeg må si det selv, ganske så tilfredsstillende.

Jeg hadde alle intensjoner om å droppe den nye ram’en ned i sokler, men jeg hadde selvfølgeligvis antatt at det var “standard” bredde på dem, så soklene jeg hadde passet selvfølgeligvis ikke (assumption is the mother of…. etc). De nye brikkene ble istedet loddet på plass (Jeg vet – burde bestilt sokler og ventet enda en uke, men det klødde noe fryktelig i “instant gratification”-genet mitt, og jeg fikk akutt loddespreng), og jeg begynte å montere sammen kassa igjen.  På bildet under ser du de nye brikkene på plass.

     

Ved første boot kom det en feilmelding som indikerte at det ikke var penger i den. Dette er forsåvidt standard oppførsel. Jeg inspiserte telleverket, og der   sto det nå en rekke med “0″ istedet for hex-garbage. Deretter var det bare å trykke ned 150 tokens gjennom innkastet og boote på nytt. Kassa er nå spillbar og “89″ er forhåpentligvis historie.

Jeg går nå rundt på skyer og er sykt fornøyd med meg selv. Er du litt deppa og nere en dag, så er sånt mye bedre terapi enn Ibux og kabel-TV. Dette er en skikkelig “maker-fix”.

Nå får vi bare håpe på at det ikke ligger en annen feil et sted i kassa som medfører at RAM-brikkene ryker en gang til. Begynner å få lyst til å få den ut av huset og hjem til eieren sin før den finner på noen nye sprell.

Lamna vs “The Big Loop”

På tur hjem fra jobb på fredag, så la jeg løypa innom sjokoladebutikken for å bunkre opp med kirsebær-i-rom-marsipanbrød til helga. Deretter gikk turen innom Narvesen for å plukke opp siste Elektor før det ble revet vekk fra hyllene av fellow geeks.

Februarutgaven har en artikkel om FemtoOS. Dette er et multitaskende real-time OS med absurd liten footprint. Vi snakker her om minimumskrav i størrelsesorden 2K flash og 128 byte med RAM. Jeg har jo en duggfrisk hardwareplattform under utvikling, så jeg tenkte “hmm…hvorfor ikke ?”.

Jeg så for meg at dette måtte være en perfekt match for Lamna-kortet (og forøvrig DSL’en), men møtte dessverre veggen i løpet av lørdag. FemtoOS-koden er gratis så det holder, men ikke akkurat overdokumentert. Du får heller ikke spontane assosiasjoner til “Öppna landskap” når du leser kildekoden. Jeg meldte pass og begynte å snuse på alternativer.

Jeg landet til slutt på FreeRTOS. Denne ruver bittelittegrann mer i terrenget, men siden jeg har 32K Flash å boltre meg på til OS+applikasjon, så valgte jeg å gjøre et forsøk. Den er portet til en drøss med kontrollere (bl.a. AtMega323) og er mer enn veldokumentert.

Etter å ha snublet litt i starten, så fant jeg ut at det var litt forskjeller mht konfigurasjon av timer-interrrupt-registrene på ATMega323 og ATMega325p. Dette resultete i at det bare var mulig å kjøre en eneste task (Forøvrig Darth Dahls definisjon av *skikkelig* thread-safe…). Etter litt tafsing i sourcen til FreeRTOS i ettermiddag, så snurrer nå Lamna-kortet faktisk sin egen lille ATMega325P-port. Slapp heldigvis unna med å endre en define, samt to kodelinjer.

Dette har noen implikasjoner for veien videre. Jeg kommer til å gå over til å bruke C som mellomformat for Lamna-DSL’en. Koden vil også bli mye mindre kompleks, nå som jeg slipper å implementere ting etter det tradisjonelle big-loop-from-hell-patternet (Hvis du går bort til DVD/BlueRay-spillern din og begynner å trykke på knapper mens noe annet skjer, så tror jeg du skjønner hva jeg mener) . Fatter ikke at jeg ikke har tenkt på denne muligheten før.

Det du ser på YouTube-klippet under er en test der to tasks spinner rundt hvert sitt display. Hver task kommuniserer synkront med en Max7221 på ekte bit-bang-vis inni hver sin critical section. I tillegg pulser en task heartbeat-LED’en. Hver task venter her ganske lenge, slik at det skal være mulig å se hva som skjer.

Mistenker at vi kanskje har mistet noe på ferden ?

Jeg har i det siste viet en del tid til dyrking av en gryende “retro computing”-fetisjisme og er nå i gang med å pløye gjennom “Electronic Brains / Stories From The Dawn of The Computer Age”. Jeg har tidligere idolisert pocket-protectors og sokkeholdere, og betraktet dette som essensielle elementer i en alfa-geeks garderobe, men dette viser seg å være et fatalt sidespor. Veien til übergeekdom er raske biler, altered states og (som en konsekvens) rabiate, men geniale og banebrytende innfall.

Vi bringer et lite sitat fra boka:

“John Atanasoff wasn’t everyone’s idea of an academic in the 1930s. Born in 1903 and by then a professor of mathematics and physics, he loved fast cars and whisky and didn’t mind mixing the two. His high-speed drive ended at a roadside tavern, where he downed a couple of shots before the basic components of a computer came to him in a rush and he hurriedly noted them down on the back of a table napkin”

Jeg kjenner meg ikke igjen i jobbhverdagen som beskrives, men jeg skulle ønkse jeg gjorde det.

Hey DJ (TimeExpander 12″ Mix)

Jeg trodde vel egentlig ikke jeg hadde plass til flere hobbyer, men takket være et tips fra Borud for en ukes tid siden, så har jeg nå havnet på Ableton Live-kjøret. Korg Nano keyboardet ramlet inn av døra i dag, og jeg må innrømme at jeg vurderer pad’en også.

Jeg er komplett tone-døv og mangler basic rytmesans, men trommeloopene mine rocker likevel nå Bregneveien, og eldstejenta fikk Fame-stjerner i øynene når jeg kjørte demo. Vi har nå endelig et skikkelig møblert hjem med (virtuelt) piano. Anbefales varmt !

Return top