Nye i Evens krets

Martin M. G. J.
Pia J.
Marianne S.
fredrik h.
Kristoffer J. S.
Maria A.

De nyeste bildene til Even

Evens bidrag

Teardown time! Interfacing "Pocket Radar"

Having children warps your perspective. Totally. And last summer I spent an unhealthy amount of time being annoyed at cars racing up our narrow residential street while rambling incoherently, “Heathens! Think of the children!”

So what does one do? I think some friendly automated neighborhood traffic surveillance would go a long way. So a while back I therefore got hold of a Pocket Radar. While it does evoke the stray ‘is that a radar in your pocket’-joke it is in fact a precise, yet tiny unit. The interface is admirably simple – one big red button (BRB) which starts metering and upon release displays the speed of anything substantial hurtling towards you to within a couple of km/h. So how does it interface?

HEED THIS JOURNEYMAN: According to Pocket Radar the device is very sensitive to static discharge – mostly the pins on the RF board – so if you intend to poke around one of these you should consider an ESD work mat and proper grounding. I did my probing in winter, wearing wooly socks while sliding around on hardwood floors with nothing for protection apart from my sanguine temperament. Stupid luck, most probably.

Promisingly the unit breaks out a few pins right over the battery compartment behind a little sticker. These however proved not to actually carry data, and are probably just diagnostics. Meh.

So here we go.

Broadly the front of the board carries:

  • 1 16-bit TI microcontroller – MCU MSP430F21x2
  • 1 TI programmable DSPTMS320LF2401A
  • 4 8-bit shift registers for driving the display – "SN74AHC595PW":http://focus.ti.com/lit/ds/symlink/sn74ahc595.pdf
  • A slew of analog electronics for powering and filtering whatever comes back from the antenna.
  • 2 L324 op-amps

The back has fat pads connecting to the LCD and a light sprinkling of analog components. The bold 7 segment LCD display seems pure oldskool as do the shift registers. It doesn’t have hidden vias or mutiple layers. It’s a USPS truck. It’ll keep on truckin’ till long after the apocalypse.

Photoshop grants me x-ray specs:

Anyways, poking about a bit reveals that the DSP does signal acquisition from the op-amp / RC grid while the shift registers hang off the other MCU and do display refresh. So given:

RADARDSPMCUSHIFT REGISTERSDISPLAY

we might just be lucky and find an available digital signal between the DSP and the MCU. Unfortunately finding out what the unit is doing could be somewhat difficult as the antenna is affixed to the back plate of the unit. The same back plate you remove in dissasembling it. Doh. But hey, the unit still powers up and pressing the BRB still still produces a random speed reading every once in a while. I’m guessing this is just noise from the hanging pins usually connected to the antenna.

Probing the DSP while staying far away from the sensitive op-amps reveals that pin 3, SCITXD, unsurprisingly sends something digital and serial to the MCUs RX pin. The TIs support normal UART, but after doing 3 captures I’m left with this:

2 different lengths of signal. Yet a total of 12 changes in sign for all of them.

The display can be set to meters/sec, feet/sec, km/hour and mi/hour. For all we know the data is coming off the DSP in a fifth intermediate format. Hoping that it’s one of the four above and counting.

The width of each pulse is 122µs = 0.122ms = 8196,7 baud. Now, 8196,7 / 2 is 4098 which seems just too much of a coincidence.

Transcribing the bits as clocked out gives us:

1. low -> 1010101011100010101000 -> high
2. low -> 10101010111011100010001110 -> high
3. low -> 1010101000101110001010 -> high

While the display readings in binary are:

1.
86m/s –– 1010110 / lsb 0110101
283f/s –– 100011011 / lsb 110110001
311km/h –– 10011011 / lsb 11011001
193mi/h –– 11000001 / lsb 10000011

2.
81m/s –– 1010001 / lsb 1000101
267f/s –– 100001011 / lsb 110100001
293km/h –– 100100101 / lsb 101001001
182mi/h –– 010110110 / lsb 01101101

3.
136m/s - 10001000
446f/s
489km/h
304mi/h - 100110000

The repeats seem to be carrying information, but how? I stare unblinkingly at it for half an hour to grok pattern, but give up at 1:30AM. Next day I give Simen a call. He remembers a blog post he happenend upon describing an unclocked serial protocol where the recipient meters the baud-rate, by looking at the initial pulses. The repeats then carry a specific truth value regardless of their being high or low. This very quickly gets results.

1. low -> 1010101 011100010101000 -> high
mi/h 0 0 0 0 1 100000 1

2. low -> 1010101 0111011100010001110 -> high
mi/h 0 0 0 0 10 1 10 1 10


3. low -> 1010101 000101110001010 -> high
mi/h 0 0 0 1 00 1 10000

The protocol starts with 7 bits of toggling, presumably to establish a bit rate, 9 bits of data follow. Repeats are signal true, any other toggle is false. The data is in miles per hour.

This snippet of ruby will run the decoder for you – raising an error for repeats that aren’t threes is left as an exercise to the reader:

pulses = ["1010101000101110001010", "10101010111011100010001110", "1010101011100010101000"]
should_equal = [304, 182, 193]

def decode pulse
# chop first 7 bits. sync pulse
pulse = pulse[7..-1]
result = "" and cnt = 0
while cnt < pulse.length do
if pulse[cnt] != pulse[cnt+1]
result << "0"
cnt += 1
else
result << "1"
cnt += 3
end
end
return result.to_i(2)
end

pulses.each_with_index do |pulse, index|
puts "= #{decode(pulse)} // #{should_equal[index]}"
end

Hello Kitty Stencil

When my first daughter was born 2.5 years ago I attempted shielding her from the insiped, trite garbage that is marketed to their bracket. Pink was not to be worn. Unisex garb in earth tones mandated. And indeed, as resistance proves to be futile, today I milled her a Hello Kitty stencil. So she can wield a clone army of pink little kitties and bomb her way to day care.

Shot and edited on my phone. The volume tends to vary.

Førjulsoppussing i LINF

Hei alle sammen, etter å ha avklart litt med de andre vertene satte jeg med ned sammen med Otto et par timer i kveld for å kikke litt på LINF med henblikk på å gjøre sidene litt enklere å finne fram i. I korte trekk er endringene:
  • En stikkordsklynge i høyremargen som viser stikkord som er mye i bruk. Vanlige stikkord er større.
    For at dette skal bli skikkelig bra må man gå igjennom og legge stikkord på de gamle sakene. Muligens en liten dugnad er på sin plass.
  • Relaterte saker – når man ser på én enkeltsak får man relaterte saker i høyremargen, også dette basert på stikkord
  • En alfabetisk oversiktsside med alle bidragene til dags dato lenket fra blokken på toppen av forsiden
  • Søkeboks heist til toppen av høyremargen på forsiden og på oppslag på enkeltsak
  • Ny banner og litt finpuss på hvordan sidene fremstår sånn rent visuelt

Håper dere liker det. Det er selvfølgelig opp til vertskapet å tilbakestille endringer som ikke skulle falle i smak.

Nasjonale prøver satt på kartet

Jeg har akkurat sparket igang skoleporten.bengler.no. Der kan du undersøke hvordan skolene gjør det på de nasjonale prøvene. Det er bare resultatene fra 2008 som er tilgjengelig, men jeg jobber med å skaffe til veie settene fra de siste to årene.

Sammen med nye tenner, soverutiner og mulige fall i boligmarkedet er skolekvaliteten et vanlig samtaletema blant foreldre i Oslo Øst. En kveld forsøkte jeg å finne noen tall på det, men kom bare tilbake fra Google med et excel-ark fra Dagbladet og minner om et lite behjelpelig utdanningsdirektorat. Jeg tenkte derfor at det hadde vært en fin liten øvelse å gjøre denne informasjonen mer tilgjengelig.

Så hvorfor sitte oppe om natten for å gjøre disse resultatene tilgjengelige? De nasjonale prøvene brukes allerede av utdanningsdisrektoratet til å belønne skolene. Så viktig har det blitt for skolene at de holder svake elever hjemme. De eneste som ikke har god tilgang til tallene er vi som ikke har skolen som arbeidsplass. Jeg synes man burde se lenge og hardt på hvorvidt man skal måle skolene på denne måten, men når informasjonen først eksisterer kan jeg ikke se noen grunn til at den ikke skulle være allment tilgjengelig på en god måte.

Man skal være forsiktig med hva man måler ettersom måling ofte endrer adferd på utilsiktede måter. Incentivene du trodde skulle effektivisere og forenkle, perverterer prosessene du forsøkte å styre. I USA har de senket nasjonale krav for læreplaner samtidig som de har lagt vekt på nasjonale prøver. Den angrende Diane Ravitch som innførte dette systemet har skrevet om hvordan det gikk i The Death and Life of the Great American School System: How Testing and Choice Are Undermining Education.

Om noen har forslag til forbedringer kan hvem som helst sjekke ut kildekoden og datagrunnlaget fra Github.

Nasjonale prøver på kartet

De siste par ukene har jeg satt av litt tid hver kveld til å lage en liten tjeneste som viser resultatene fra de nasjonale prøvene geografisk på en skikkelig oversiktelig måte. Siden dette er en uformell øvelse i datadreven borgerjournalistikk tenkte jeg selve prosessen kunne være interessant å dokumentere for meg selv og muligens også for andre.

Det tok 15 kvelder og én arbeidsdag. Gitt at jeg har to små barn hvor den yngste gjerne skal bæres en timer hver kveld og den eldste våkner i 0600-tiden kan jeg umulig tenke meg at jeg har klart å bruke mer enn 2 timer i snitt per dag. Så rundt regnet gikk det en arbeidsuke.

Tjenesten står nå live på skoleporten.bengler.no.

Merk: Dette er ikke en spisset, gjennomarbeidet tekst, men heller en slumsete prosjektdagbok

Kveld 1

Skoleporten skal kjøre på:

  • Sinatra – Minirammeverk skrevet i Ruby
  • MongoDB – NoSQL database
  • JQuery – Fint Javascript hjelpebibliotek
  • CSS3 / HTML5

Jeg har ikke brukt noe av dette før så jeg leser dokumentasjon og setter opp prosjektet med Sinatra og MongoDB, en ny og artig database som kjører Javascript (wot). Til slutt spar jeg dataene fra excel-arket til Dagbladet inn i MongoDB.

Kveld 2

Så, hvor ligger disse skolene? Sånn på kartet.

Skoleporten har en asp.net løsning (i 2010, omg) som noen nisser har bygd for de. Den er så langt unna REST man kommer og når du søker etter Kampen Skole får du en URL på formen:


http://skoleporten.utdanningsdirektoratet.no/skolesoktreff.aspx?sokestreng=a2FtcGVu0&url=http://skoleporten.utdanningsdirektoratet.no/skolesoktreff.aspx%3fsokestreng%3d%26url%3dhttp://skoleporten.utdanningsdirektoratet.no/enhet.aspx%3fenhetsid%3d974589788%26vurderingsomrade%3dResultatoversikt%26skoletype%3d0%26enhetsid%3d974589788&enhetsid=974589788

OMG

Det er sikkert mulig baklengsengineere javascriptene deres for å finne ut hvordan de lager disse kaudervelske søkestrengene. Men hei, vi betaler for disse skolene. Noen må da kunne fortelle oss hvor de er.

Joda, på den superhjelpsomme portalen norge.no finner jeg dette i FAQen:

Hvor finner jeg adresser til skoler og barnehager?

Adresser til barnehager, grunnskoler og andre skoleslag finner du på Pedlex Norsk Skoleinformasjon

Så bra! Jeg tar meg en tur dit.

Fett, men hei, vent. Ser ikke adressen litt annerledes ut? Nei! Neeei! NEEEEEI! De har rendret teksten som grafikk. Men hvorfor?! Ah, selvfølgelig. De har en bok til salgs til kroner 215,- som de har lyst til å selge oss. Prisen for dette produkt i digital form må jeg maile de for å få. Bra saker. Takk norge.no for at dere lenket meg til denne uselviske og nyttige kilden.

Kanskje jeg skal skrape disse bildene ut av sidene til PedLex og kjøre OCR på de. Så hvordan får jeg kjørt OCR da? Hm, Tesseract, en urgammel open source OCR-maskin finnes i macports. Google finansierte open sourcingen av den for et par år siden så den er sikkert ikke helt ute. Om man gjør bildene litt likere innscannede dokumenter ved å skalere bildene til det tredobbelte, thresholde de og kjører Tesseract med en norsk treningsfil så ser det faktisk ut som det funker relativt bra. Men vent, det må være en bedre måte enn å gjøre tegngjenkjenning på 3000 GIFer.

Hva med Google Places? Som et ledd i sin katalogisering av det norske samfunnet vet jo Google faktisk hvor disse skolene er. Faktisk.

Så hvordan ser Places APIet ut? Det viser seg at Google har begynt å stramme inn litt i APIene sine og krever her at man er en slags ‘kunde’ av Google og søker om å få tilgang hvorpå man må skrive under på blant annet:

  • All developers wishing to use the service must already have an Adsense account, or must create one prior to applying.
  • Applications that wish to use the API must only issue queries in response to end user actions.
  • The results of every search made by applications using this API must be shown to a user.
  • Applications may not reorder or manipulate Search results.
  • Applications may not store any Place data permanently except References and IDs.
  • Place information collected using this API, or any data derived from it, such as Place location corrections, can not be distributed in any way, such as through an API, without the express permission of Google.

Så kanskje ikke det, siden jeg bryter mot 90% av vilkårene. Jeg kunne alltids skrapt det ut av Place-søkene, men det er garantert et brudd på de samme vilkårene det også. Vi vet heller ikke om Places vet om absolutt alle skolene.

Ok, en annen strategi. Hva med Google-søk på skolenavn avgrenset til skoleporten.utdanningsdirektoratet.no, oppslag i skoleporten med påfølgende skraping av adresse som vi slår opp i Googles geokoder? Det er skjøre saker og om noen bestemmer seg for å endre noe på skoleporten eller slenge disse sidene i robots.txt går det i dass, men er kanskje hakket bedre enn å OCRe 3000 GIFer. Får vi treff? Jada=. Holla!

Kveld 3 – Skrap skrap

Det første forsøket ser slik ut:

puts "\nGeocoding #{School.count} schools. Plz wait.\n\n"
School.find(:all)[0..1].each do |s|
puts "-- #{s.name} / #{s.county} / #{s.municipality} (#{s.normalized_tests.length} tests)"
url = "http://www.google.no/search?hl=en&q=" + CGI.escape("site:skoleporten.utdanningsdirektoratet.no -oversikt \"#{s.name}\"")
doc = Nokogiri::HTML(open(url))
address = doc.css('#ires .s')[0].text.match(/.*?\.(.*?\..*?)\./)[1].strip.gsub('.',',')
puts "School address: #{address}"
bounds = Geokit::Geocoders::GoogleGeocoder.geocode(s.municipality, :bias => 'no').suggested_bounds
res = Geokit::Geocoders::GoogleGeocoder.geocode("#{address}", :bias => bounds)
puts res.inspect
puts "\n\n"
sleep 0.8
end

Og visst gir det oss ikke:

-- Holla ungdomsskole / Telemark / Nome (3 tests)
School address: Kirkebakken 18, 3830 ULEFOSS
Provider: google
Street: Kirkebakken 18
City: Ulefoss
State: Telemark
Zip: 3830
Latitude: 59.2793002
Longitude: 9.2633128
Country: NO
Success: true

Holla! Bare 1 av de 5 første feiler. Nå på en enkodingsfeil i geokodingsbiblioteket jeg brukte for å gjøre livet mitt litt enklere. Herlig. Det er litt gammelt og har noen problemer relatert til Ruby 1.9 og Unicode. Som gode internettborgere rapporterer vi feilen, forker koden på github og legger inn de bittesmå fiksene våre.

Det er selvfølgelig noen flere små snags, men med litt taktisk wrangling er det stort sett bare skoler som:

  1. BELGIUMSHAPE International School Norwegian Sec / Utland / Utland (6 tests)
  2. BELGIUM – Scandinavian school in Brussels (Ecole R / Utland / Utland (6 tests)
  3. BOLIVIA – Colegio Noruego / Utland / Utland (6 tests)

som feiler og det ser ut som det er under 1% som ikke får noen adresse. Bolivia! Disse kan vi håndslå i excel etterpå om vi gidder. Fest!

Kveld 4 – Geokodeagogo

Dette gikk jo ganske bra. Det er sansynligvis et TOS-brudd å gjøre disse søkene og Google sperrer meg etter rundt 256 søk (noen hos Google må ha estetisk sans for 2^n). Det er noen skoler med utenlandsadresser og noen navn med stor diskrepans mellom navnet i nasjonale prøver og i den nåværende versjonen av SKoleporten. Men det er fortsatt ikke mer enn 50 etter å ha kjørt de første 2100 skolene. I tillegg feiler Google en del på adresser av typen Sandshamn, 6089 SANDSHAMN. Disse virker fint på maps.google.com, men feiler i APIet. Kanskje jeg får noe om jeg har en fallback som bare bruker stedsnavn. Det er virkelig stas å sjekke treffene jeg får. Ofte står det en skole plantet midt i satelittbildet. For småsteder mangler skoleporten gateadresser. Kanskje kommer posten fram uansett, men jeg får litt dårlig treff. Det får vi leve med.

Man får tårer i øynene av å tenke på at den danske staten leverer geokoding som en tjeneste på lik linje med ferskt vann i springen, mens vi her i landet må lene oss på Google eller aktører vi må skrive kontrakter med oppsigelsestid for å finne ut hvor en adresse er.

Mens jeg venter på en av-svartelisting fra Google bygger jeg en liten eksport til CSV slik at jeg kan gi dere disse dataene tilbake på Google Spreadsheet så snart det er ferdig.

Kveld 5 – Jern i skapet

Alle har rett noe de kan kalle et eget hjem. Vi har en urgammel maskin (2.6Ghz Xeon / 2 cores) som det for tiden ikke kjører noe tungt på. Den sitter i skapet sitt på coloc-rommet til snill snille Domeneshop nede ved Akerselva. Det står i andre enden av en fiber som går rett til NIX. Det bør holde. Eneste problemet er at den ikke har vært brukt til noe nytt på evigheter og kjørte inntil ikveld Ubuntu Hardy Heron 8.04 . For å brukes til noe nyttig må den oppgraderes til en moderne Ubuntu.

Det går med tre kvarter mens Ubuntu tålmodig river ifra hverandre og setter sammen et system bestående av en en bunke pakker og deres utallige avhengigheter. Med ett grep bygger den det om slik det står og presenterer det i ny støpning. Millioner av kodelinjer, et utall ørsmå tannhjul som griper inn i hverandre. Resten av kvelden går dermed med til å oppgradere og avknekke ting som faller i gulvet i prosessen.

Kveld 6 – These are not the schools you are looking for.

Kjære dagbok. M har trent i kveld. Begge barna gråt hele tiden. Nå sover alle sammen. Titter litt på resultatene fra geokodingen. 10 sprø verdier. Rundt 90 mangler ellers. Det er bare to som er store: Max Tau og Steinern i Oslo. Resten ligger i Bolivia eller på små nes langs kysten. Jeg forsøkte å geokode 10 av de manuelt og det er en royal rumpesmerte. Mange av de finnes hverken av Google Places, 1881.no eller andre kilder. Man ender opp med å søke etter kommunene eller stedsnavnene og det hele blir heller omtrentlig. Lurer på om jeg skal la disse ligge.

Kveld 7 – Tidlig i seng

Tidlig i seng, men stod opp klokken 0200 og la til alle markørene på et Google-kart.

Kveld 8 – Første pass GUI

Mens jeg får det minste barnet til å sove leser jeg meg opp på:

  • AJAX med JQuery siden jeg stort sett har brukt Prototype før
  • Canvas tegning av GMaps markører siden jeg skal rendre disse programmatisk

Jobber litt med stiling. Drar opp GMaps til fullskjerm og ser på CSS3.

Kveld 9 – Markører over AJAX I

Kikker på Google Table Fusion etter å ha kommet over denne sørgelige anvendelsen? hos the Guardian. Tenker det er et fint verktøy for noen, men knapt komplett for oss med tanke på at jeg ikke har ensartede markører og trenger å tegne fine markører for skolene. Det er synd, siden det er superfint at Google kan rendre digre datamengder som overlays på GMaps for oss med to linjer kode. Sikkert nyttig til noe annet.

Man kan tross alt ikke hente 2980 markers til Google maps så det må skrives noe javascript AJAX for å hente markører når man drar på kartet. Bruker litt tid på å finne ut av Geo2D within søket til Mongodb og banke dette inn i jQuery sitt getJSON kall.

Tror jeg trenger elevantall på hver skole. For det vil jeg vel visuelt indikere? Ser at Google har et JSON-kall som jeg kan bruke istedenfor denne skrapingen av googlesøk med Nokogiri. Det ser lurt ut. Siden Google sikkert ikke er like illsinte på svartelisting i et offisielt API.

Kveld 10 – PLZ WAIT, OK – Normalizing test results.

Nå begynner det å bli relevant å se på de faktiske testdataene. Jeg normaliserer de på en skala fra 0 til 1 i forhold til årstrinn (5. klasse løper fra 1-3, mens 8. løper fra 1-5) slik at vi kan slå sammen resultater for skoler som både er ungdomsskoler og barneskoler. I tillegg skriver jeg snittverdien inn i hver skole, kommune og fylke. Takket være en del kål med Mongoid, MongoDB-abstraksjonen for Ruby som jeg har valgt å bruke, tar dette 2 timer istedenfor 0.5. Kildekoden må ingen lese.

Kveld 11 – Size of school, size of problem may be.

Vi trenger å finne ut hvor store skolene er. Det å gjøre vanlige Google søk fikk meg svartelistet rundt hvert 256. kall hvorpå det tok rundt en halvtime for Google å tillate søk igjen. Ser derfor på JSON-APIet isteden. Ser fint ut. De viser seg imildertid at skoleporten AJAXer inn tabellen med elevantall. Gaargh. Who are these people? Må derfor Google, gjøre oppslag på skoleporten, finne tak i AJAX-kallet, hente HTML-fragmentet fra URLen den bruker og parse ut verdien av tabbelen i den siste cellen på andre linje. Takkskarruha.

Det virker, men tar litt tid. Med en del feilsøking og presisering av søket er det alt som blir gjort ikveld. Det er grenser for hvor nøyaktige det blir på denne måten. Om noe blir denne prosessen et slags langtrukkent argument for å sette APIer på offentlige tjenester.

Kveld 12 – Markører over AJAX II – The Revenge of Front End

Vi kan ikke hente 2930 kartmarkører og sette de på kartet. Det er altfor tungt. Vi kan bare vise de som er innenfor kartet til enhver tid. For utzoomede bilder må vi vise kommuner og fylker. Dette krever at Google Maps må snakke med serveren hver gang du flytter på kartet. Vi må også fjerne markører som detter utenfor delen av kartet vi ser på. Gmaps har en del fine funksjoner som forenkler dette, men vi må fortsatt skrive en liten MarkerManager som holder orden på markørene vi har satt.

Kveld 12 – Tegne kartmarkører med HTML5 canvas

Starter med en modifisert utgave av dette eksempelet. På kort tid har jeg for første gang fargelagte små infoboller for hver skole. Begynner med en mapping i HSL-fargerommet. Skolene legges i farge mellom rødt og grønt. De som ligger midt på treet blir gulbrune. I tillegg legger jeg på en sigmoid-kurve av dette slaget for å aksentuere forskjellene. Lurer på om ikke blått til oransj hadde vært en like effektiv, og litt mindre rotete fremstillingen av resultatene.

Kveld 13 – Estetisk frobbing av markører og kart.

Fjerner gradientene på markørene og legger til skalering på elevantall. Sørger for at markørene faktisk er sentrerte koordinatene sine. Elevantallet er ganske random vise seg. Det er små skoler i distriktene som dukker opp med 500 elever presumptivt fordi jeg har sanket tall fra hele kommunen eller fylket de ligger i. Håper utdanningsdirektoratet kan gi meg en fin liste over hvor store disse skolene er.

Markørene på kartet må bli tydeligere. Forsøker meg på å få tak i DOM-elementet som holder selve kart-flakene til Google for å gjøre de transparente mot en mørk bakgrunn. Viser seg å være mulig, men litt involvert og flaky om Google skulle oppdatere måten kartkomponenten er pakket på. Men hei, Google har laget stiling av kartene. Jeg har nesten ikke sett dette i bruk selv om det har vært live i månedsvis. Man kan skru av og på innholdstyper og bestemmer fargene deres helt etter eget forgodtbefinnende. Stas. Kartet blir mørkt og nattklubbaktig for å vise fram markørene. Går over og gjør markørene enda mer Walter Gropius-aktige.

Legger også ut prosjektet offentlig på Github. Koden, databasedumper, grunnlagsdataene, alt sammen.

Kveld 14 – Klargjøring av prodmiljø, visning av kommuner, twitter

Aftenposten ledet med nasjonale prøver i dag. Saken handlet om hvordan Oslo-skolene unntar de svakeste elevene fra prøvene for å heve resultatene. Det hadde vært interessant å se denne informasjnen sammen med prøveresultatene, men det får vente.

Klargjør produksjonsmiljøet med rvm og riktig ruby versjon (1.9.2) og ser på måter å kjøre sinatra sammen med lighttpd. Ser greit ut.

Når noen zoomer ut må vi gå over til å vise kommuner istedenfor skoler. Skriver støtte for dette. Tar en halvtime.

Oppretter en twitterkontoen @skoleporten. :)

Kveld 15 – Visning av resultater fra enkeltskoler i popups

Setter opp henting av data med JSON over AJAX for hver skole. Interessant informasjondesignsoppgave. Hva er den enkleste måten å vse informasjonen på. Gruppering, klare hierarkier og fargekoder som overenstemmer med hovedvisningen er sikkert klokt. Hey, JQuery har en liten templating engine så jeg kan kjøre JSON rett over i templates jeg har skrevet i HAML. Boggle.

Dag 16 – 3. november 2010

Setter av et par tre timer på jobben til å ferdigstille stiling av popups og skrive en about-tekst. Noier ut da jeg ser at ruby på serveren bruker rundt 200ms på serveren på å pakke 400 markører i JSON. Bruker en time på å se etter optimeringsforslag og roer meg ned da Alex foreslår et JSON-bibliotek med det poetiske navnet Yajl (yeah, Yet Another Json Library – om det hadde stått som et onematopoetikon i en tegneserie hadde det vært dødsralling) som kutter tiden ned til mellom 1/2 og 1/3 på benchmarkene. Laptopen min gjør dette på 1/5 av tiden forresten. Som før nevnt, gammel hardware.

Anways, vi står nå live på skoleporten.bengler.no.

Annonse