Christian Johansen

Christian er en allsidig, engasjert og produktiv programmerer med erfaring og interesse for alt fra infrastruktur og drift, databaser og backends, til frontend webutvikling. Han har lang erfaring med systemer og prosesser for continuous delivery/continuous integration, samt prinsipper for å kjøre applikasjoner i skyen.

Gjennom sine kurs og foredrag har han gjort seg kjent som en meningssterk og kvass programmerer som tar design, testing og kvalitet seriøst. Han trives godt både alene og i team, og fungerer både som humørspreder og kritisk røst i samarbeid med andre.

Favoritter for tiden: Datomic, Kubernetes og ClojureScript
Bruker på jobben: Kubernetes, ClojureScript, Cordova, SVG, D3 og Amazon Web Services (AWS)
Vil lære mer: Haskell og Go

Christians anbefalinger

Konsulenteriet må DØ!

Erik Assum gir en tordnende god lyntale om hva man egentlig burde bruke konsulenter til, og hvordan en konsulent er, eller ihvertfall burde være, noe annet enn en vikar. Se lyn/torden-talen

Simple Made Easy

Det er ikke lett å lage noe enkelt. Rich Hickey snakker om forskjellen på nærliggende (subjektivt lett) og ukomplisert (objektivt enkelt). Og implikasjonene for hvordan du bør tenke rundt software. Se foredraget

How to Use npm as a Build Tool

Grunt, Gulp og andre JavaScript-baserte task runnere skaper flere problemer enn de løser. Denne artikkelen viser på forbilledlig vis hvordan npm i de aller fleste tilfeller er mer enn tilstrekkelig, og tilbyr konkrete alternativer til de mest vanlige bruksområdene for Grunt og dens like. Omfavn en smidigere frontend-stack du også! Les artikkelen

Snakker gjerne om

Mat, brød og øl

Som programmerer tar jeg stor glede i å skape. Som aspirerende hobbykokk tas denne gleden ut i skaperverk som i tillegg kan nytes med smaksløkene. Jeg tar like stor glede i å bruke en hel lørdag på å lage Lasagne fra bunnen som jeg gjør av en kveld med surdeigsbrødbaking eller ølbrygging. Eller å pleie chiliplantene jeg har rundt i huset på vinteren, og i hagen på sommeren.

Musikk

Jeg har spilt i band siden jeg gikk på ungdomsskolen, og holder fortsatt gitarspillet ved like gjennom bandet Execration, som ble foræret en Spellemann for 2014. Jeg har alltid vært en sucker for aggressiv musikk, fra mine jyplingår som fan av Nirvana og skranglepunk til mine senere år som metal-connoisseur av ypperste rang.

Screencasts

Zombie CLJ - Clojure og ClojureScript

I denne oppfølgeren til ZombieTDD lager Magnar og jeg spill med Clojure og ClojureScript. Det går i parprogrammering hele veien. Og jaggu skriver vi ikke flere tester først. Skulle tro XP hadde noe for seg. Se videoene.

Sideprosjekter

TempCalc

Temperatur er viktig i gjærbakst. Ideellt sett angir en oppskrift hvilken temperatur deigen skal ha etter endt elting. Denne kalkulatoren hjelper deg med å finne riktig temperatur på vannet for å nå en gitt deigtemperatur. Og andre temperatur-kombinasjonsproblemer. tempcalc.com

Shufflify

Til bilturene med familien er det behov for en shuffle-funksjon som tar hensyn til at «alle skal få sitt». Jeg lager en tjeneste i Go som løser dette svært essensielle problemet. Tjenesten er ikke lansert enda

Learning Functional JavaScript

Et grundig videokurs i funksjonell programmering med JavaScript. Laget for Packt forlag i 2015. Sjekk ut kurset

Test-Driven JavaScript Development

Etter noen år med fordypning i og blogging om TDD med JavaScript kom jeg litt tilfeldigvis i kontakt med Addison-Wesley. Resultatet ble en bok som kom ut i 2010. Sjekk ut boka

Christians bloggposter

Git Subtree for Multiple Directories

En liten howto for hvordan man kan skille ut én eller flere mapper fra et git repo som et nytt repo, med historikken intakt. Les posten

Processing Data with Clojure and Go

En sammenligning av samme algoritme implementert i Clojure og Go sammen med med litt synsing om ytelse, type-systemer, og uttrykkskraft. Les posten

A Better Playlist Shuffle with Go

«Shuffle» i eksempelvis Spotify burde være smartere enn ren tilfeldighet. I dette innlegget presenterer jeg en alternativ algoritme med implementasjon i Go. Les posten

Christians foredrag

I put 7 years of meal data in Datomic - Here's what I learned

Datomic is an append-only database, designed from the ground up with modern applications and hardware in mind. It never loses data, it has an RDF-like approach to schemas, it's really fast, and it has a powerful query language borrowed from Prolog that expresses queries as data structures. In short: it's pretty awesome. Se video

EcmaScript 2015: The Close Future of JavaScript

I juni 2015 ble siste versjon av EcmaScript - spec-en til JavaScript - ferdigstilt. EcmaScript 2015 (eller EcmaScript 6 som det en gang het) er tidenes største oppgradering av språket, og i dette foredraget gjennomgås en hel haug med eksempler på nye features og hvordan de kan brukes. Alt kodes live med hjelp av Emacs. Se video

You can't change this: Immutability in JavaScript

Hva er immutability? Hva er hensikten? Kan man benytte seg av det i JavaScript? Hvordan? Hvilke konsekvenser har immutability for UI-programmering? Dette foredraget gir deg svar på disse spørsmålene, med mer til. Se video

Immutable JavaScript

When it comes to functional programming techniques seeing widespread adoption in the JavaScript community, immutability is a strong contender for "next in line". In this talk I'll show you what immutability is all about, why it's useful, and how to work with it. We'll even put immutability to work in a React app and observe how we can reduce complexity while increasing performance. Se video

ZombieCLJ: Live parprogrammering

Se Christian og Magnar parprogrammere på nettspill med Clojure og ClojureScript. Denne økten er for de som syns det er moro å se folk parprogrammere mens de prater om hva de driver med. Det blir Clojure med hanskene av, så man må tåle å ikke forstå alt. De som er helt nye til funksjonell programmering kan muligens få eksplodert hodet. Definitivt live koding. Se video

Functional UI Programming

En introduksjon til React.js, med sammenligning av populære MC*-rammeverk, samt et eksempel på bruk i form av live-koding av minesveiper med ClojureScript og Om (en React-wrapper). Se video

Zombie TDD: Live parprogrammering

Magnar og jeg setter oss ned med emacsen og parprogrammerer foran publikum. Se hvordan to typer som digger JavaScript angriper problemer og gjør koden testbar. Se video

Pure JavaScript

Kast de objekt-orienterte krykkene og se denne introduksjonen til funksjonell programmering med JavaScript Se video

Test-driven JavaScript Development

En praktisk gjennomgang av TDD i JavaScript. Foredraget er en times live-kode-sesjon der jeg lager et autocomplete/type-ahead søk, test-first. Se video

JavaScript design and architecture

En liten inspirasjonsprat om å finne gode abstraksjoner for frontend-programmering Se video Se slides

Mythbusters: JavaScript Edition

Få programmeringsspråk er omgitt av så mye unøyaktig, irrelevant og direkte feil informasjon og misforstått 'hjelpematriell'. I dette foredraget tar jeg for meg noen av de vanligste misforståelsene, og prøver gjennom eksempler å oppgradere publikums JavaScript-kunnskap. Se video Se slides

Open source

ClojureScript

Utviklet dumdom. Et lettvektsalternativ til React for ClojureScript: Komponenter for snabbdom som er API-kompatible med Quiescent.

JavaScript

  • Utviklet Sinon.JS. Et spy-/stub- og mocke-bibliotek for JavaScript.
  • Utviklet Buster.JS. Ambisiøst test-toolkit for JavaScript.
  • Utviklet Uinit. Et inisialiserings-system for UI-komponenter.
  • Utviklet Cull.JS. Funksjonell verktøykasse for JavaScript.
  • Utviklet Dome. Funksjonell verktøykasse for DOM-manipulering.
  • Har bidratt til karma-referee og carousel-js.

Clojure

  • Utviklet Prone. Bedre feilmeldinger og debugging for Clojure webapps.
  • Utviklet asciidoclj. Rendre asciidoc i Clojure.
  • Utviklet hiccup-find. Test-helpere for hiccup.
  • Har bidratt til Optimus.

Ruby

  • Utviklet dolt. En git repository-browser for Ruby. Kjernen i fil-browseren til Gitorious.
  • Utviklet Makeup. Et Ruby-bibliotek for å rendre markdown med kodeblokker som syntax highlightes.
  • Utviklet UseCase. Strukturerte abstraksjoner for ikke-triviell programflyt. Biblioteket ble opprinnelig skrevet for å redusere kompleksiett i Ruby on Rails-applikasjoner, men er ikke spesifikt avhengig av Rails. Biblioteket reduserer koblinger mellom modeller og kontrollere, og kan potensielt redusere kompleksiteten i begge betraktelig.
  • Har bidratt til Gitorious.

Prosjekter

Hafslund Strøm

Videreutvikling av Hafslund Strøms app for iOS og Android, samt tilstøtende backend-systemer og infrastruktur.

Tine Husdyrfag

Jobbet med design av deler av det grunnleggende domenet (eiere) for nye tjenester og hvordan dette spiller sammen med autentisering og autorisasjon i platformen som helhet. Jobbet med arkitektur og design av løsninger etter CQRS-prinsippet, samt en pragmatisk tilnærming til event sourcing (blant annet med bruk av Datomic).

Utviklet funksjonalitet i AWS. Modellert deler av domenet som en graf i Datomic.

Tine Husdyrfag

Design og oppsett av nettverksløsning. Automatisering av oppsett og utforming av applikasjonsplatform med AWS Cloudformation, bash og annet. Oppsett for frontendapplikasjoner med S3/Cloudfront/Route 53. Jobbet med sikkerhetsløsning basert på Oauth 2.0 og OpenId Connect. Utviklet løype for CI/CD basert på Concourse.

Eventum.no

Jeg automatiserte oppsett og deployment av løsningen med Ansible, Docker og bash. Jobbet med videreutvikling av eksisterende tjeneste. Designet arkitektur for og utviklet både backend og frontend for ny spesialisert kommunikasjonsløsning for arrangør og utleier. Utviklet ny sikkerhetsløsning basert på OAuth 2.0 og OpenId Connect.

Eventum (eventum.no/eventum.com) er «Airbnb for event-lokaler» - møterom, konferanselokaler, restauranter/hoteller/slott til bursdag, bryllup og andre sammenkomster samles på et sted og gjør det lett for arrangører å finne og sammenligne tilbud på lokaler.

NRK 2015-2016

Søk i NRKs enorme mengder videoklipp - både nettklipp, ting som har gått på TV og råstoff. Utviklet en søkekomponent for ‘smart søk’ som gjør utstrakt bruk av autocomplete, forslag til forskjellige filtreringer, og gjør andre grep for å styre brukeren i retning av et detaljert søk. Søket ble implementert i Elasticsearch gjennom en node.js/Express webserver, og med UI skrevet i React. UI-et ble skilt ut som et bibliotek for intern gjenbruk, og er nå i bruk i flere applikasjoner.

NRK 2015

Implementerte nytt design for NRKs interne Radioarkiv, som brukes internt for research og gjenbruk av arkivmatriale. Designet ble implementert i form av en styleguide som senere ble den sentrale UI-komponenten i paraply-prosjektet Origo, som favner alle NRKs egenproduserte systemer rettet mot interne arbeidsflyter.

NRK

Laget en lettvekts bilderedigeringskomponent (litt effekter, crop, skalering, panorering) med web-teknologi. Komponenten benyttes som plugin i video-redigeringsverktøyene Adobe Premiere Pro og Quantell.

NRK 2014

Laget en app som viser en strøm av bidrag som NRKs journalister og andre ansatte sender inn fra ‘felten’. Brukes internt i NRK til å både få oversikt over hva som kommer inn, men også til å se status for viderebehandling av bilder og video i andre systemer (transkoding, arkiv osv).

SPiD

Utviklet nytt nettsted for teknisk dokumentasjon. Vi gjør mange grep for å holde dokumentasjonen aktuell og oppdatert. Sidene blir bygget opp basert på informasjon hentet rett fra SPiD sitt REST API. Eksempler i guides hentes fra fungerende eksempler, for å sikre at kodeeksempler ikke er utdatert.

SPiD

Prototypet ny innlogging, registrering og kjøpsflyt for SPiD, med fokus på brukervennlighet, støtte for mobil, og forenkling av tekniske løsninger.

FINN

Hjalp FINN Småjobber-teamet med lanseringen av løsningen rett før jul 2013. Har jobbet med hele løsningen, men med fokus på frontend. Implementert nytt ajax-søk med React.JS og hjulpet andre på teamet med å styrke sin frontend-kompetanse.

Gitorious AS 2011-2013

Oppsett, drift og vedlikehold av gitorious.org på CentOS, samt CI/CD for dette.

FINN 2011-2012

Klargjorde et avansert registreringsskjema for utrulling til flere markedsplasser ved å modularisere koden til komponenter som kunne settes sammen til forskjellige skjemaer.

Apotek 1 2009

Utviklet konkurranse.apotek1.no, en quiz/konkurranse-tjeneste i Ruby on Rails, som ble hyppig brukt i månedlig e-postmarkedsføring.

Webdagene 2007-2008

Utviklet frontend of backend for nettsidene til fagkonferansen Webdagene. HTML, CSS, JavaScript i front,eZ Publish og PHP på baksiden.

Storebrand 2006-2007

I 2006 bygget Storebrand opp ny Skadeforsikring fra bunnen. Jeg var med prosjektet nesten fra starten og hadde eneansvar for implementering av en dynamisk frontend for beregning av pris og kjøp av forsikringer. Løsningen var den første av sitt slag i Norge og ble i etterkant hyppig kopiert av andre selskaper.

Universitetet i Oslo 2002-2003

Som første offentlige nettsted i Norge lanserte UiO’s populærvitenskapelige magasin Apollon i 2002 et nettsted som utelukkende brukte CSS, ingen tabeller. Jeg sto for frontend-implementasjonen, og bidro også med konvertering av gammelt innhold over til ny emnekartløsning.

Se flere prosjekter i Christians CV

Christians referanser

Geir Børdalen

Prosjektleder, Origo-prosjektet, NRK

Christian har vært en uvurderlig ressurs i Origo-prosjektet i nesten 2 år. Han har jobbet med front-end utviklingen av produktene Potion og Radioarkivet. Dette er produkter som har endret NRK fundamentalt i forhold til tilgang og gjenbruk av arkivmateriale innenfor både radio og TV. Noen av produktene Christian har vært sentral i utviklingen av, har tilført NRK varig verdi for mange år framover. Vi har også verdsatt Christian for hans evner til teamarbeid, evne til innovasjon og alltid positive innstilling.


Stefan Andreas Englien

Teamleder, FINN Småjobber

Christian Johansen har vært innleid som konsulent på utviklingsteamet til FINN Småjobber i tre måneder fra og med november 2013 til februar 2014. Vi behøvde en frontend-guru, og vi valgte Christian basert på FINN Oppdrags gode erfaringer med ham. Min rolle er å lede utviklingsteamet, og jeg har dermed vært hans nærmeste leder i perioden. I tiden hos FINN Småjobber har Christian hjulpet oss med javascript-tester, ytelse, forenkling av rammeverket vårt, og selvfølgelig mye ny frontend-funksjonalitet. Han har også vært til stor hjelp med git-utfordringer, backend-arkitektur og produktutviklingen av FINN Småjobber. Christian er svært omgjengelig og hyggelig, og har vært et positivt tilskudd til teamet. Jeg er svært fornøyd med hans innsats for oss, og anbefaler ham på det sterkeste!


Karl Philip Lund

Christian is most likely the most talented web developer I've ever worked with. He is easy to communicate with, flexible to work with and has the ability to deliver success even when the requirements/instructions are unclear. He will add value to any web project. I give him my highest recommendations.


Christian Johansen

Systemutvikler
+47 934 17 480
christian@kodemaker.no