Monthly Archives: June 2015

Ølkart på #hack4no

Jeg var med på #hack4no hos Kartverket på Hønefoss i helga. Da jeg satt på toget til Drammen fikk jeg en Twitter-melding:

Det viste seg at mitt bidrag: Ølkart, vant i kategorien “Beste løsning med geografiske data”, noe som jo er veldig gøy! Jeg tenkte jeg her skulle gå litt igjennom løsningen, hvordan den er blitt til og litt tanker videre.

Men, først av alt: Løsningen finner du på http://beermap.atlefren.net. Det er, som jeg skriver på siden, en: “Visualisering og søk i norske bryggerier, barer og polutsalg.” Koden ligger (så klart) på GitHub

Jeg meldte meg på hack4no mest fordi jeg tenkte det var et bra sted å møte kjente i #geomatikk-miljøet, samt at Kulturdirektoratet, som jeg jobber for for tiden er med på organisator-siden.

Jeg holdt et foredrag på formiddagen fredag om prosjektet jeg gjør for kulturrådet, med fokus på koden du finner på GitHub. Jeg hadde igrunn tenkt at jeg skulle bruke mye av tiden min på å hjelpe andre med å bruke Norvegiana-data, samt å bruke API-wrapper-prosjektet vårt, og hadde tenkt fint lite på selve konkurransen. Folk spurte meg om hva jeg skulle jobbe med, og jeg svarte at “jeg må vel gjøre noe med øl”, mest på spøk.

Dog, jeg satt meg ned i fem minutter, og tenkte litt og kom opp med en tankeskisse som inneholdt følgende: https://github.com/atlefren/norwegian-breweries. Det var vel igrunn det eneste som sto på lista da jeg gikk i gang. Så det første jeg gjorde var jo å lage et kart som viste disse bryggeriene. Ikke veldig spennende, ei heller noe vinneroppskrift. Så fant jeg ut at jeg kunne legge inn mer, Vinmonopolet har jo et “API” med butikkene sine, riktignok på et CSV-format fra helvette, men det fungerte, og jeg fikk også disse inn i kartet. Så hentet jeg puber fra OSM, jeg prøvde først med overpass APIet, men det var så komplekst at jeg valgte å bruke en nedlastet shapefil fra geofabrik, der jeg filtrerte ut puber.

Dette tok vel en god del av ettermiddagen fredag, ispedd en del spørsmål om KNreise og mye CSS-dilling. Etterhvert innså jeg at jeg burde kanskje få inn noe offentlige data ut over bakgrunnskart fra Kartverket, og bestemte meg for å legge inn addresesøket til Kartverket, noe som igrunn var en smal sak. Dette kom på plass i kartet, og jeg funderte litt på hva jeg skulle gjøre videre. Svaret ble å fokusere på lokasjon, dvs å finne nærmeste pol/pub/bryggeri. Geolocation i HTML5, kombinert med addressesøk, ble svaret her, og jeg hadde etterhvert en fin visning av 10 nærmeste. En utfordring var at jeg ikke hadde noen database i bak-kant, alle dataene ble lest inn i minnet i flask/Python-appen min fra GeoJSON. Dog, det finnes bibliotek for Haversine-avstandsberegning.

Det neste ble veldig naturlig å ruteberegne fra din posisjon til bryggeriene, og jeg lurte litt på om jeg skulle bruke Norkarts ruteberegner Ferd, Mapbox sin, eller kanskje Google sin. Jeg snakket med noen som nevnte at Vegvesenet stilte sin ruteberegner til disposisjon under hacket, noe jeg tenkte at var mest i ånden å bruke da. Denne hadde dog sine utfordringer: Mangel på CORS-støtte, krøkkete autentisering, kun UTM33, samt Esri JSON-format. Alt lot seg løse, men det hadde vært penere med GeoJSON i latLon!

Da denne biten var på plass hadde klokka nærmet seg ett på natta, men jeg var inne i en god flyt. Jeg brukte noe tid på å refaktorere det som hadde blitt ei jQuery-suppe, men gav fort opp det. Så ble det brukt noe tid på stiling av kart og markører, men heller ikke dette er noe jeg synes er dritgøy.

Dermed fant jeg ut at jeg måtte ha inn PostGIS, så jeg brukte noe tid på å få på plass dette. Det gikk overaskende smertefritt, men tok jo noe tid. En naturlig følge av å ha en romlig database var jo å kjøre noe spørringer, så jeg fikk inn kommunepolygoner og begynnte å aggregere. Da fant jeg fort ut at jeg skulle lære meg litt D3, så jeg fant en tutorial og gikk i gang. Fikk etter relativt kort tid spytta ut noe grafer, og sa meg fornøyd.

Jeg følte fortsatt at det var litt lite geohipster-preg over løsninga mi, men da klokka nærma seg seks på mårran og jeg innså at det nok ikke ble noe søvn, kom jeg på at Alex hadde blogga om hexagoner i POstGIS, heldigvis med kode. Litt tweaking senere hadde jeg et hexmap! Det gir kanskje ikke så mye innsikt, men det er kult!. Innen dette var på plass nærma det seg frokost, samt at jeg var ute en gåtur i drittværet for å bunkre snus. Timene etterpå ble brukt til å snekre sammen en presentasjon, samt å være litt i koma. Etter presentasjonen min fant jeg ut at grafene mine kunne bli bedre hvis jeg fikk inn befolkningsdata, og jeg rota meg inn på SSB sine sider. Mye data, men mye tullete formater, og mer CSV-krangling med Python. Vel, fikk det jo dataene på plass etterhvert, men det ble mye jobb.

Da grafene mine begynte å bli presentable la jeg ut et screenshot av dem på en ølnerdeside på Facebook, og fikk litt tilbakemelding på at bryggerilista jeg baserte meg på var rimelig utdatert. Det førte til at jeg innså at jeg måtte ha en funksjon for å opprette, endre og slette bryggerier. Dette tok en del tid, og ikke før i halv-fire-tida hadde jeg i det minste oppretting på plass. Det betød at jeg hadde en halvtime på meg for å lage en presentasjon eller “Pitch”. Heldigvis er Big veldig raskt å lage presentasjoner i, og jeg fikk bare 3 minutter.

Klokka fire var det tid for presentasjon, og jeg var førstemann ut. Det gikk rimelig greit synes jeg, men etter å ha sett alle de andre gruppene presentere (jeg var tydeligvis den eneste som jobbet alene), tenkte jeg at “dette vinner jeg ikke, jeg er for useriøs”. Jeg sjekket togtider til Drammen, og så at det gikk et tog 18.00, og neste 21.00. Foreldrene mine fristet med øl og spekemat, så det ble 18.00-toget! Dermed fikk jeg ikke med meg kåringen, men fikk beskjed via Twitter. Kjempekult! Jeg hadde omtrent ikke fått med meg hva premien var, og hadde nesten ikke tenkt å presentere noe, så det var kult.

Ikke bare var det kult å vinne, men det var kult å være med også! Mye flinke folk, mye gode inspill og mye spørsmål. Jeg hjalp folk med alt fra Python-kode til KNreise-apier, og fikk innspill på både datasett, løsninger og rammeverk. I tillegg fikk jeg snakket med mye folk, og ikke minst fikk jeg sitti i nærmere 24 timer og skrevet kode! Knall helg, knall arrangement. Jeg blir gjerne med til neste år.

Men, hva har jeg lært etter mitt første hackaton? Jeg kan vel ikke påstå at jeg har noen fasit, men min oppskrift på seier var vel følgende:

  • Jobb med noe du kan fra før, hvis ikke bruker du mye tid på elementære ting (ref D3)
  • Jobb med noe du synes er gøy
  • Drit i å tenke: Gjør noe!
  • Aksepter at du kommer til å lage spaghetti-kode!
  • YAGNI for alle penga
  • Lag en god presentasjon/pitch.
  • Fokuser på å ha det gøy, ikke på seier
  • For meg funka det bra å jobbe aleine, mye koordinering man slipper
  • Bruk open source bibliotek der du kan, det sparer mye tid
  • Snakk med folk, få innspill