Verktøyene dine former deg

Ja, “our tools shapes us” er ikke noe nytt utsagn, og det er en lite orginal påstand. Men, må merker jeg effektene av dette så på kroppen at jeg har tid til å blogge litt, så da gjør jeg jo det.

Ok, tools, verktøy. Det er så klart snakk om utviklingsverktøy her. Jeg har lenge jobbet med språk som JavaScript og Python (og gjør det fortsatt), men har i den senere tid begynnt å jobbe en del i .NET-verdenen. Og jeg merker forskjeller. MANGE forskjeller. En ting er språkene, det er forskjell på utypa, ukompilerte språk som JavaScript og komplierte, typa, objektorienterte språk som C#. Absolutt. Men, C# er igrunn ikke så værst som språk, jeg synes det er mer fornuftig enn Java (selv om det er noen år siden jeg drev med det), og Linq er ganske stilig.

Men, det var ikke språket som verktøy jeg tenkte mest på, det var verktøyene rundt.

  • Editor eller IDE
  • Pakkehåndteringssystem
  • Kildekontrollsystem

Jeg tenkte på.

Først av alt Visual Studio. En mastodont uten like som prøver å gjøre ALT. Det første som møter deg er en innlogging til noe Microsoft-fjas. Så må du ha ReSharper (fordi Visual Studio ikke klarer å gjøre alt).

Visual studio er tungt, veldig tungt. Jeg vet ikke hva jeg gjør, men jeg har gjerne 4-5 instanser oppe samtidig fordi jeg jobber med mye. Da skjer det gjerne 1-2 ganger om dagen at VS tryner, og 7-8 ganger at det er “unresponsive” i 1-2 minutter. Frustrerende. Så henger drit seg opp, og du må restarte. Dette er bortkasta tid. Det fører ofte til at jeg ikke tester like ofte, det er ikke bare å endre ei linje, trykke crtl+s, alt+tab, ctrl+r. Neida, det er “begynn å endre linje, få beskjed om ikke lov”, så klikke på rød firkant, så endre, så lagre så grønn play, så vente 20 sek, så alt+tab så ctrl-r. Jeg utsetter, eller dropper å perfeksjonere ting fordi verktøyet mitt jobber mot meg. Verktøyet mitt gjør meg til en lat utvikler.

En annen ting er feedback-loopen. Om du lager en webapp med MVC må du starte og stoppe debug-instansen hver gang du gjør en endring. Pain. Much pain. Ok, så er det noen fine sider med dette også: debugging-verktøyene er gode, og det å kunne navigere rundt i koden uten å søke er fint. Men hvis du skal søke: ja da er du fucked. Min løsning er å ha prosjektet mitt åpent i Sublime Text også, for å enkelt kunne søke i det.

Så har vi pakkesystemet, nuGet. Æsj. For det første har det kommandoer på formen “Update-Package”, hvorfor ikke bare “update”, hva ellers oppdaterer du i et pakkesystem? Så klarer ikke nuGet å søke i flere pakkekilder samtidig, så du må huske å velge dette i en dropdown over “terminalen” hver gang du skal gjøre noe. Samme med target-prosjekt, jeg vet ikke hvor mange ganger jeg har lagt til ei pakke i feil prosjekt og tenkt: “jaja, det tok meg 4 minutter, jeg orker ikke å gjøre noe med det”. Det blir rot, men verktøyet mitt gjør at jeg ikke orker å rydde. Verktøyet mitt gjør meg sløv.

Og kildekontroll da. TFS. Ikke TFS med Git, men TFS med TFS. Ja, jeg vet du kan få TFS med Git og jeg skulle ønske jeg hadde det, men det har jeg ikke enda. Og da sitter jeg der med TFS i visual studio da. Og høyreklikker og høyreklikker og excluder packages (har du prøvd å .tfsignore packages/??) skriver commit-meldinger og ser at det tar 30 jævla sekunder å sjekke inn 4 linjer endra i 2 filer. Fytti! Og alle checkins går såklart rett til serveren. Hva gjør jeg da? Jo jeg blir lat. Jeg har en commit om dagen med meldinga “lots of stuff, cannot remember” etterfulgt av en ny en “add missing files, FFS TFS”!. Igjen, verktøyet mitt gjør at jeg fraviker best practices. Jeg committer ikke ofte, jeg brancher aldri og å stashe noe har jeg aldri turt å prøve på.

Og så begynner jeg å lure: Liker folk dette? Er det jeg som ikke skjønner hvordan jeg bruker disse verktøyene? Ser jeg ut som en eskimo som har forvilla seg inn blant Aboriginere? Gjør jeg alt feil? Eller stiller jeg feil krav?

Jeg vil ikke tro det er slik. Jeg har jobbet med prosjekter der jeg brukte Java, IntelliJ Idea, Maven og SVN, jeg har brukt Mercurial på samme stacken. Jeg har jobbet med JavaScript i både Ideda, Webstorm, Sublime text og såvidt Emacs. Jeg har brukt Git, og begynnt å elske git. Jeg har forholdt meg til Bower og NPM. Jeg har skrevet Python-kode og forholdt meg til pip, jeg kjører ubuntu og bruker apt. Kildekontroll, editorer og pakkesystemer er ikke noe nytt for meg. Jeg klarer bare ikke å forholde meg til dem slik Microsoft mener jeg skal.

Jeg vil ikke ha et IDE som gjør alt. I editoren min vil jeg editere kode. Kode er tekst. Litt shortcuts er fint, code-completion og intellisense er ikke dumt, og å kunne navigere seg rundt i koden og få vist testdekning og sånne ting er fine tanker. MEN NÅR ALT ER JÆVLA SIRUP blir det for mye. Jeg vil ikke ha kildekontrollsystemet mitt innbakt i IDEet, jeg vil ha det på kommandolinja. Jeg vil ikke ha et eget vindu (som plutselig er på øvre del av VS, plutselig på nedre) for å installere pakker. Med unntak av Maven (og XML-helvete) har alle andre pakkesystemer jeg har brukt fungert fint fra kommandolinja (en skikkelig kommandolinja altså. Ikke en boks i visual studio, ikke en link til “Visual Studio Developer Console”, ikke fuckings CMS eller PowerShell).

Jeg vil komme i flytsonen, jeg kommer ikke i flytsonen hvis jeg tester noe, støter på en obskur feil, kjører “Update-package” og rekker å skrive en rant på godt over 1000 ord før det forbanna systemet er ferdig med å oppdatere 20 pakker. Selv NPM som laster ned hele jævla internett 5 ganger ved update går raskere enn dette her. Dette er tregere enn å kjøre pip install scipy ffs! Og jeg tror ikke nuGet komplierer Fortran-kode!

Og så er det alle disse småtingene: “Build Action”, og jeg veit ikke hva. Ånei, fila mi ble ikke deploya nei, greit. Eller at visual studio ikke har forstått at det filsystem holder rede på filer, at man ikke trenger ei forbanna XML-fil for dette og en “show all files”-knapp.

Jeg ber ikke om mye: jeg vil ha raske verktøy som gjør det de skal, som ikke henger seg, som ikke har flere knapper enn en brusautomat i USA, som ikke skal gjøre alt samtidig. Emacs er raskt, men du kan spille tetris der. Visual studio føles som å svømme i sirup selv uten teris.

Og der var faenmen nuGet ferdig med oppdateringa si.. Trykke grønn knapp, og så launcha du enda et nytt nettleservindu på en obskur port jeg aldri husker ja, fint! Takk.

“Cannot resolve symbol” ja, jeg ba deg oppdatere pakker, ikke knekke alt!

Jaja, sånn går nå dagene. Jeg skriver i det minste Enterprise-ready-kode da! Det er rock solid og fungerer mye bedre enn tullespråk som JavaScript.

Ok, ikke blogge mens du krangler med verktøyene dine. Hadde dette verktøyet vært fysisk tror jeg det hadde hatt massevis av skader etter å ha blitt slått. Hardt.

Uanset: poenget er at verktøyene, selv de digitale, former oss.

Testing Geospatial claims using Qgis, CartoDB and Cesium.js

andersnatten
This summer I hiked to Andersnatten, a rather small mountain in the southeast of Norway. On the start of the trail there was a sign, that among other things, said that you can see 7 parishes from the top. When we reached the top we had a great view, but I couldn’t see any parishes.. That is, I have no idea where the parishes are, so I couldn’t refute or confirm the claim.

Beeing a geospatial geek I thought that this should be possible to remedy. I just needed the Parishes as polygons, and then I could do some analysis. Well, turns out that I couldn’t find any georeferenced parishes. The closes I got was these scanned paper maps. I couldn’t let this stop me, so I opened Qgis and set to work. Luckily the parish borders resembles modern day municipality borders rather close, so with the georeferenced paper maps, and some other Qgis magic (perhaps more on this in a later blog post) I managed to digitize all the 315 parishes from 1801.

I then loaded these digitized parish polygons into cartodb, and colored the ones around Sigdal, the parish where Andersnatten is. The map turned out like this:

With this in place it was rather certain that 7 was a reasonable amount, there are 6 parishes sharing a border with Sigdal, these should be see-able. According to this article “Dust, water vapour and pollution in the air will rarely let you see more than 20 kilometres (12 miles), even on a clear day.”

Ok, 20 km, lets see how close the 7 nearest parishes are to Andersnatten, using a PostGIS query in Cartodb:

SELECT 
	name,
	ST_Distance(
      the_geom::geography,
      ST_SetSRID(
        ST_MakePoint(9.41677103, 60.11744509),
        4326
      )::geography) / 1000 as dist
FROM prestegjeld
ORDER BY dist
LIMIT 7

This gives

Sigdal      0
Rolloug     5.818130882558
Flesberg    13.510679336426
Modum       19.686924594812
Næss        20.103683955646
Nordrehoug  22.199498534301
Tind        24.804343832136

Ok, so the farthest parish of the seven are 24 kms away, give us some leeway since we are on a 733 m high peak. Interestingly, the closes ones doesn’t overlap with neighboring parishes.

Ok, but, line of sight? What if there are other mountains blocking the view? Since I’m already working on a Cesium.js project I decided to add the CartoDB map to a 3d Model and do some visual tests.

View North
View North

View Southeast
View Southeast

View South
View South

View West
View West

Oh, that’s a suprise. Ok, Cesium does not add “dust, water vapour or air pollution”, and the height model might be a bit off, but nonetheless: 13 (possibly 14) parishes can be seen in this model! That is double the number stated on the sign! Guess they have backing for their claim after all!

Oh, by the way: the digitized parishes are available at GitHub

Ø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

GIS Programming: languages breakdown

Yesterday i found this post on geoawesomeness, with the intriguing headline “Learning GIS programming: An overview”. After reading it I felt a bit disappointed though. It was basically a breakdown of different programming languages and their usages in the GIS field. While this in itself is a good thing, I think it left a great deal out and confused some. Then I thought “well, instead of complaining, do it better yourself!”.

So here we go, my breakdown of some selected programming languages, their usages in the GIS field, along with notable examples and libraries. I’m ordering the languages roughly by age. Bear in mind that I was born in the 80ies, so your favourite language from before 2000 might not make it to the list if it’s not around anymore.

Fortran
This may be the exception to the previous statement, but Fortran is still around, I’ve even programmed in Fortran.

Fortran is an imperative language, the first compiled language, dated back to 1957. It’s still used today in numerical computations, but in the GIS field it’s largely legacy code that still is in Fortran. The only example I can think of is a set of geodesic functions we used at the university: Holsen’s småprogrammer.

Unless you know Fortran by heart and like working with legacy code you can safely ignore this language.

C/C++
C and C++ is actually two different languages, or: C++ is a superset of C with object oriented capabilities, while C is an imperative language. They date from 1970/1980, and since I don’t really know these languages I’ll treat them like the same. My impression is that they are rather “down to the metal”, you have pointers, memory management and stuff like that.

Unlike Fortran, C/C++ is still in widespread use, in the GIS-field it’s being used for several desktop applications of some age, as well as in what I’ll call the “first wave” of open source libraries and utilities. Notable mentions are PostGIS, OGR/GDAL, PROJ.4 and Mapserver.

While you may now know C/C++ and never really write a line of code in it, you will be using some tools written in it, either as a database, through the command line or through language bindings.

Java
Java is an object-oriented, multi-purpose language from 1995. It was originally developed by SUN. It’s become known for it’s rather “enterprisy” libraries, with several layers of abstractions and other strange things. Despite this, the language has gained widespread use, although it’s prime time may be past, although Java is the programming language for Android apps.

Java libraries was the “second wave” of open source GIS, and brought us libraries and tools like GeoServer, GeoTools, JTS and GeoWebCache.

Just because of GeoServer I think you should know some Java to get along as a GIS-developer. GeoServer has support for plugins, written in Java. This means that mastering Java you will be able to extend GeoServer to your needs. Java is not all that difficult in itself, but Java-code tends to be bogged down in layers of abstraction as mentioned earlier.

C#
C# is, in a way, Microsofts version of Java. It’s object oriented at it’s core, and a multi purpose language. Released in 2000 it’s gained a large following in “Microsoft shops”, and it’s way better than anything Microsoft has previously made. The language itself is rather nice, but suffers from some of the same enterprisyness as Java, and the tooling is completely tied to Microsoft (Visual Studio and the like) if you stick with the .NET-platform (as most do).

This may be the reason why the open source community hasn’t embraced C#, but there are some ok-ish libraries, mainly NetTopologySuite and some ports of Proj.4. At least in Norway you’ll have to be a good navigator to avoid C# and .NET, it seems to be the preferred language and platform for several consultancies, software houses and governmental bodies.

Python
Python is a multi-paradigm, dynamically typed language focused on readability. It’s not the fastest language around, but can use C/C++ bindings to speed up things.

Python has been adopted by ESRI as the scripting language of choice for their ArcGIS-platform, as well as by QGIS, where you have access to a python REPL and can write plugins using Python. There are also other GIS-libraries for Python, mainly Shapely, Fiona and Rasterio, as well as several other tools. On the applications side there is the tile server MapProxy and several other utilities.

Python is a really great programming language in itself, easy to grasp, enforces clean, readable code, and with the usage both in ESRI and QGIS it’s a language that you most definably should know it you work with GIS.

JavaScript
JavaScript was once known as the programming language for web browsers, and was regarded as clumsy, difficult and a toy language. That’s changed a bit the last years, with better tooling and some improvements to the language itself, but it still is a dynamic language with both parts object orientation and functional programming sides to it. The rise of Node.js also made JavaScript a general-purpose language, and this constitutes the “third wave” of open source GIS-libraries if you ask me.

From the advent of Google Maps and OpenLayers, JavaScript found it’s place in the GIS-domain as the language to write web map clients in (that is, after people realized that Flash and Sliverlight where blind alleys). Now there is a large ecosystem of browser-libraries, such as OpenLayers 2 & 3, Leaflet, mapbox-gl-js, proj4js and several more.

As for Node.js, this has been adopted by the “geohipster”-company Mapbox, which uses JavaScript for several parts of their server-stack, resulting in open source libraries such as Turf.js.

Again, JavaScript is really a language to focus on if you plan on doing any web-related GIS-work at all. Just don’t think you know JavaScript because the syntax is close to that of Java/C#, and do take your time to dig in to the functional sides of the language. And stay clear of Angular.js, unless you really like enterprisy code! JavaScript still has it’s quirks, and there are released several new frameworks, tools and libraries each day, so you may find this language a bit confusing.

These are mainly the languages that are used today as far as I know, but there are some other languages that might be worth looking into, namely:

Swift/Objective-C: Used for app development on the Apple platform, I really don’t know anything about this, but there gotta be some libraries, as there are maps both on iPhones and iPads.

Go Is a relatively new language from Google, perhaps described as C for the new century? I’ve never used it, but I wan’t to use it as I know several people who really seem to like it. As for GIS-libraries I’m not sure, but I believe there are wrappers for OGR/GDAL and Proj.4 available.

Clojure Is a Lisp-implementation using the JVM. It’s really functional programming, a style which I’ve been attracted to the last year or so, although I haven’t used Clojure at all, and I do not know if there are any GIS-libraries available, but hopefully?

There are probably a dozen more languages that could be included in this list, like Scala, Groovy, Ruby or PHP, but I really don’t know them at any depth, and I’m not sure about how they stack up when it comes to GIS. If you do know, drop me a comment!

A week of Geo and Beer

A month or so ago my colleague mentioned that we where considering sending someone over to San Francisco to get to know the Mapbox-stack even better. I think I spent two seconds thinking before I said something like “Going to San Francisco to visit Mapbox? Can I join?” And, as it turned out my schedule and area of knowledge seemed to be a good match, so I booked tickets together with my other colleague that would be coming along. Seriously, a week in SF, with it’s great vibe, superb beers and spending time with one of the most innovative Geo-players? It’s perfect! What could be better?

Well, as events turned out, I found myself in Copenhagen the weekend before my flight to SF, visiting a friend together with my girlfriend. As I left Norway friday afternoon i wrote a Tweet, proclaiming I was exited to be visiting Copenhagen and SF in one go. Then Asger Pedersen from the danish geo-geek company Septima suggested we’d meet up for some beers. I wasn’t really sure I had the time, but along the weekend we agreed to meet up. Well, before that there was beers to be had. On Saturday we headed down to Kødbyen to check out Mikkeller and Three Floyds’ new brewpub: Warpigs. This place opened the day before we visited, and with it being a really sunny and warm day in Copenhagen, the place was packed. Danish alcohol laws are fortunately relatively permissive, so we found ourselves sitting on the pavement outside drinking our beers. Which where great by the way!.

2015-04-11 15.07.50 (Custom)
Warpigs

2015-04-11 16.03.26 (Custom)

The place itself is also really cool, nothing like the “classy” “high-end” feel of the Mikkeller Bars. There was also an outdoors market going on in Kødbyen this Saturday, making the afternoon really pleasant. Great beers, good food and lots of people. We rounded off by a trip to Fermentoren, a couple of blocks away from Warpigs, before we hit our bikes, and went home for a bit of relaxation and then out for dinner, followed by a visit to Mikkeller and Friends, which was packed and not that great of an experience compared to the last time I visited. The day ended in our friends apartment, emptying his refrigerator of the beers I had bought at Kioskh earlier that day.

2015-04-11 17.27.37 (Custom)
Fermentoren

This amount of beers meant that Sunday was a bit of a challenge, but I had agreed with Asger to meet him at Taphouse at four PM. A bit tired I still biked down there and after a couple of beers a guy said “I presume you are Atle?” This turned out to be Martin from Septima, and during the next ten minutes Asger and Gregers (also Septima) showed up. Taphouse is a great place, 60 taps going, but I’m “afraid” we spent our 3 hours there talking so much that I didn’t really put all that effort into actually tasting and analyzing the beers. A bit empty place on a Sunday, but we had great fun. Seems like we have a lot in common, and for me this set the standard for what I expected SF to be: meeting people that are deeply passionate about Geo, chatting with them on various topics and really having a great time. I had to leave after some hours, but as Septimas office was just a 5 minute walk from Taphouse, I was invited to take a look. Really a cool office, in what used to be the offices of a record company.

2015-04-12 15.34.42 (Custom)

2015-04-12 19.06.50 (Custom)
Septima Offices

This pretty much completed the Copenhagen-part of my trip, lots of great beers, and good company. I really hope I’m able to visit Septima again, wether it’s on business or just a friendly chat. The next day I took the Metro to Kastrup, met my colleague Keino and got on the plane to SFO, 11 hours really let’s you focus on your book, and I’m really making progress on “Wheel of Time”. When we landed in SFO it was 15.00 local time, 24.00 Norwegian time, and with no sleep on the plane we where a bit tired. We managed to find a taxi to our “Loft” in South of Market (SoMa), rented through AirBnB. Great location, enough space, but we struggled a bit to get the WiFi working, gotta meet the basic needs of living. We found out quickly that the baseball season opened this day, and with the stadium being located 3 blocks away the streets where crowded. We found a place to grab some food and a couple of beers, but nothing much to write home about. On the way back we bought some beers, but after drinking one in the apartment, it was 20.00, and we where dead tired.

2015-04-14 16.01.04 (Custom)

The next day we had an appointment with Paul from Mapbox at 10.30, so we set out for a 30-ish minute walk to their office, stopping for breakfast at a really American diner, BLT and coffee started the day. When we arrived at the Mapbox SF office, located in an old storage house, we where met by Paul and Matt, and after a quick introduction we got down to business; i.e. being given presentations on several aspects of the Mapbox technology stack by various key persons involved in making those. We had a chance to ask a lot of questions and really got a feel for what’s possible to do with their stack! After lunch, a great sandwich bought at a new mall in the Twitter HQ on Market street, we went back to their office, and blended in in their open-floor working area. Sitting in a sofa in SoMa, drinking a Lagunitas IPA while working on vector tiles I really felt at home. It was great having the Mapbox people available for questions, and their open-space office really did work much better than any such I’ve worked in in Norway. At around 19.00, Paul and Matt took us to the AT&T stadium for a baseball-match. We went there in “an Uber”, great taxi-service which I’ll get back to. Anyways, Paul and Matt tried their best to explain the rules of the game to us, bought us beers and really proper American fast food. I’m not really that into sports, and baseball is complicated, but the stadium had a great view, and we spent 3-4 hours talking about this and that, much like the atmosphere I was hoping for when I was in Copenhagen with Septima!

2015-04-14 19.40.54 (Custom)

The game ended, SF Giants lost and Keino and I went for a couple of more beers at a nearby sports bar before heading home, still a bit jet lagged. The Wednesday was spent much in the same manner as the Tuesday, a session of presentations on various parts of the Mapbox stack before lunch (at a great Japanese place, they had lovely Ramen!) At lunch Mapbox CEO Eric Gundersen joined us, and while I guess we’ll cover the usage of Mapbox technology at Norkart in a blog post at our companys blog, what Mapbox is doing is really interesting and we are seeing some great opportunities here! Post-lunch was spent coding some more, we did a climb up to the roof of their office for a beer, and then presented what we had been working on. Great being able to show what we got up and running in relatively short time, and getting the proper channels for feedback and questions.

These two days concluded the bulk of the geo-part of the trip, although we spent half the day on both Thursday and Friday in the “Loft”, coding and updating our colleagues back home. After the “show and tell” session at Mapbox Wednesday evening we headed over to Zeitgeist, a really cool place with an impressive tap list! Still, our clocks wasn’t all that aligned with SF time, and combined with lots of impressions and a number of beers we took a taxi home at a reasonable time.

2015-04-15 23.45.02 (Custom)
Zeitgeist

Thursday afternoon we decided to be a bit touristy, we walked up to Little Italy, an Anchor Steam, an ok pizza, then Lombard street up to Russian Hill. On our way back we stopped by Rogue Public House, another place I’ve visited before. Not the best beer place in town, but they do have a rather impressive beer lineup. On our way back we stopped by 21st Amendment brewery in SoMa, a new place for me. I really liked this place, great atmosphere and good beers.

After concluding our work on Friday my colleague wanted to do some shopping, and so did I! I went almost straight to City Beer Store, centrally located in SoMa. This is a bottle shop with an impressive range, as well as 10-ish taps. I had 3-4 beers here and bought enough bottles to fill my suitcase, and got a tip about Cellarmaker, a microbrewery just 3 blocks away. Small place, crowded, but I found a place at the bar and had a couple of beers. Impressive stuff! I realized I had to hook up with my colleague again, so i bought a 1 liter growler of one of their beers, which we shared in the “loft”.

2015-04-17 15.28.11 (Custom)
City Beer Store

2015-04-17 15.59.26 (Custom)
Cellarmaker

We had gotten some restaurant-recommendations from the Mapbox-guys, so we sett off to Lolinda (“If you guys are interested in some great Argentine food and a very cool interior design”). This was a bit far from us, so we decided to test Uber, the taxi app the half the city seemed to be using. Did it work? Absolutely! Within 2 minutes we where hooked up with a driver and on our way. Lolinda was what I guess you would expect, a crowded, noisy place, but great beers and coctails (finished the meal with a Manhattan, that was the only non-beer alcohol I drank throughout the trip I think!).

My colleague had an early flight back home on Saturday, so we took an Uber back, and I went to Safeways and bought 4 beers, 1 bag of chips and and the latest issue of Cosmopolitan. Great combo? However, After a couple of beers I fell asleep as well. Saturday the 18th was my birthday, and I had to relocate to another hotel (Hotel Boheme) in Little Italy. To fight off the hangover I decided to walk, but the topography of SF means that there is no such thing as “Manhattan distance”, so I ended up walking up and down a lot, through crowded streets in Chinatown. An expirience, absolutely!

When I finally got to the hotel I had one goal: find the really great sandwich shop I visited the last time I was in SF: Google knew that place: Freddie’s Sandwiches. As they don’t have any tables, I had my BLT in Washington Square park, in lovely weather.

2015-04-18 11.42.33 (Custom)

I’m guessing that all I really wanted was for the clock to turn “beer o clock”, and around 15.00 I got an Uber to Toronado, a really great bar in Lower Haight. Kinda loud, lots of hoppy beers (including “Pliny”). Beeing Saturday the place was crowded, but there are benefits to drinking alone: I managed to squeeze in at the bar, and after a couple of beers I even talked to people! I was recommended the burrito place and the sausage place next door, but couldn’t decide, so ended up with both. After two large meals and 5-6 beers I felt like I needed to do something else, so I decided to head back to the hotel (around 18.00). The trip back became a long one, as my co-passenger was really indecisive, but the driver was a nice guy. End of story: when I got back I felt like another beer! There was a place 4-5 blocks away that looked promising on ratebeer: La Trappe Cafe. Really the opposite of Toronado, a rather quiet place in a cellar, focusing on Belgian imports, but they had some american sours as well. I spent a good three hours here as well. Not the star beer place in the city, but worth a visit.

2015-04-18 15.27.04 (Custom)
Toronado

Sunday I woke rather early and felt sorry for myself. Hungover, 31 years old and with a 10 hour flight 10 hours away. What to do? Google “best hamburger SF”, and go to Mo’s Grill. There was actually a line at 10.00, but after I while I realized that there was free seating at the bar, so i set down, got a coffe and ordered a “Burger with Sharp Cheddar Cheese, topped with Smoked Ham, melted Swiss Cheese, and Chipotle Mayonnaise” wow! afterwards I found a small cafe and sat utside for several hours reading, but then it got cold and I didn’t want more coffe, so I went back to Rogue and asked for a “sessionable beer”. What I ended up with: “brutal IPA” at 6% ABV(!). After the beer I walked arund some more, before the transport to the airport. That’s probably not that interesting, but I did get to try the “Mikkeller Sky High Wit” on the plane back!

2015-04-19 10.33.58 (Custom)

So, now I’m sitting at Kastrup, thinking that I’ll go easy on the beer drinking for some days ;) Had a really good time, I’m super happy with having an employer that sends me to San Francisco to do stuff like this!