Profilbilde av Christian Johansen

Christian Johansen

Systemutvikler

+47 934 17 480
christian@kodemaker.no

Utvikler med 19 års erfaring

  • Fullstack, jobber like gjerne med backend som frontend
  • Erfaring med oppsett og drift av infrastruktur og CI/CD
  • Liker funksjonell programmering, enkle løsninger og små team
  • Skriver godt, liker å dokumentere, holder gjerne workshops, og bidrar til å løfte fagmiljøene han jobber i

«Christian har vært en uvurderlig ressurs i prosjektet. Vi har verdsatt hans evner til teamarbeid, innovasjon – og alltid positive innstilling.»

- Geir Børdalen, Prosjektleder, Origo-prosjektet, NRK

Om Christian

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 kontinuerlig integrasjon og leveranse (CI/CD), 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.

Hafslund Strøm

App for iOS og Android utviklet med ClojureScript og Cordova, og tilstøtende backendsystemer.

Tine

Domenemodellering, applikasjonsarkitektur og utvikling av infrastruktur på AWS

NRK

Arkivsøk og produksjonsstøtte for NRKs journalister med Elasticsearch, node.JS og React

Teknologi


Programmeringsspråk


Utviklingsverktøy

Emacs, Terminal, Git, tools.deps, Figwheel, Maven, Eclipse, Nettleser-devtools, Leiningen, Ant, Yarn, Grunt, Subversion, Babel og Rake


Skytjenester

Amazon Web Services (AWS), AWS S3, Cloudfront, AWS IAM, AWS Api Gateway, AWS Lambda, AWS RDS, AWS CloudFormation, Route53, Kinesis, Cloudwatch, AWS VPC, EFS, AWS ECS, AWS EC2 og Serverless


Devops

Docker, nginx, HAProxy, Datadog, Kubernetes, Terraform, Capistrano, Skyen, Ansible, Concourse, Puppet, TeamCity, Octopus Deploy, Mesos, Varnish og HashiCorp Packer


Frontend

CSS, React, HTML, Responsive Design, Frontend, Om, Puppeteer, Express.JS, Material UI, SVG, Compass, LESS, D3, Dumdom, Reagent, AngularJS, Server-sent events, WebGL, Jade og Chrome Embedded Framework


Utvikling

Buster.JS, Sinon, Optimus, Rails, Karma, clojure.spec, Jasmine, JUnit, Spring MVC, Stasis, Mocha, Midje, Apache Cordova, core.async, Progressive Web Apps (PWA), Chai, Browserify, Component og JsTestDriver


Data

Datomic, MySQL, DynamoDB, Datalog, ActiveMQ, Elasticsearch, Quartz, Kafka, PostgreSQL og DataScript



Annet

OS X, CentOS, Alpine, Ubuntu, iOS, eZ Publish, JIRA, Auth0, OpenID Connect, Android, Confluence, Sanity, Redhat, Oauth2, Let's Encrypt, Windows og Asana


Prosjekter


Arbeidsgiver

Kodemaker Systemutvikling AS


Kodemaker
08.2020 - 08.2020

Utvikling av nettsted

Utviklet skinnende ny kodemaker.no. Data leses fra flate filer inn i Datomic, noe som gir en superb programmeringsmodell for å generere de statiske filene som utgjør nettstedet - proppfulle av lenker på kryss og tvers i det etterhvert så omfangsrike faglige innholdet vårt. Designet er levert av Sebastian i Eggs, Magnar og jeg sto for implementasjonen over tre uker. Koden finner du på Github.

Clojure, Responsive Design, Datomic, Amazon Web Services (AWS), Puppeteer, Docker, ClojureScript, Dumdom, Emacs og Git


Fortum
04.2020 -

Utvikling av nettsted

Utviklet nytt nettsted for Fortums strømtilbud (strom.fortum.no). Innholdet forvaltes i det hodeløse CMS-et Sanity, mens nettsidene er god gammeldags statisk HTML, levert av en Clojure-applikasjon bak Varnish for maksimal ytelse.

Sanity, Clojure, Varnish, Responsive Design, Datadog og Git


Fortum
10.2019 -

Smart bestillingsskjema for strøm

Utviklet et smart bestillingsskjema for strøm. Løsningen søker opp kunden i flere registre, inkludert Elhub, og klarer i de aller fleste tilfeller å hjelpe folk med å bestille strøm ved å kun oppgi telefonnummer og epost-adresse. Løsningen passerte ekstern sikkerhets- og personvernsgjennomgang med glans.

ClojureScript, Clojure, PostgreSQL, Responsive Design, Datadog, Git, Amazon Web Services (AWS), AWS S3 og tools.deps


Hafslund Strøm
04.2019 -

Utvikling av ny Min Side

Utviklet ny Min Side basert på kodebasen til mobil-appen til Hafslund Strøm.

ClojureScript, Amazon Web Services (AWS), AWS S3, tools.deps, Responsive Design, Datadog og Git


Hafslund Strøm
04.2018 -

Utvikling av månedsrapport-tjeneste

Utviklet en løsning som genererer en månedsrapport på epost som viser et utsnitt av grafer og informasjon fra Hafslunds strøm-app. Løsningen bruker Puppeteer til å lage screenshots av SVG-grafer og samler det hele sammen i en HTML-epost som er 100% personalisert, og som vises pent i «alle» epost-klienter.

ClojureScript, Node, Kafka, DynamoDB, Puppeteer, Amazon Web Services (AWS), AWS S3 og tools.deps


Hafslund Strøm
04.2018 -

Utvikling av infrastruktur på AWS med Kubernetes

Provisjonert ny infrastruktur for å kjøre Docker-containere på AWS. Kubernetes med diverse tillegg som automatiserer hele livssyklusen til en app, inkludert provisjonering av DNS records i Route53. Hel-automatisert med kops og Terraform.

Amazon Web Services (AWS), Kubernetes, Cloudfront, AWS S3, AWS IAM, Route53, Terraform, HashiCorp Packer, AWS EC2, AWS IAM, AWS RDS, Route53, AWS VPC, Datadog og Git


Hafslund Strøm
04.2018 -

App for iOS og Android: Cordova og ClojureScript

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

ClojureScript, Apache Cordova, SVG, Kubernetes, Terraform, D3, Datadog, Git og tools.deps


Tine Husdyrfag
09.2017 - 03.2018

Domenemodellering og applikasjonsarkitektur

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.

Datomic, Amazon Web Services (AWS), DynamoDB, AWS IAM, AWS Lambda, AWS Api Gateway, OpenID Connect, Material UI, Domenedrevet design, Kinesis, Cloudwatch, Cloudfront, AWS RDS, AWS S3, Auth0, JIRA, Confluence, Kontinuerlig leveranse, Kontinuerlig integrasjon, Domenedrevet design, Alpine, Ubuntu, CQRS, Event sourcing, Micro services og Figwheel


Tine Husdyrfag
09.2017 - 03.2018

Utvikling av infrastruktur på AWS

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.

Amazon Web Services (AWS), AWS VPC, AWS ECS, Concourse, AWS IAM, Docker, Bash, OpenID Connect, nginx, Go, DynamoDB, Kinesis, AWS Lambda, AWS Api Gateway, Route53, Cloudwatch, Cloudfront, AWS RDS, AWS S3, Auth0, JIRA, Confluence, Kontinuerlig leveranse, Kontinuerlig integrasjon, Alpine, Ubuntu, Micro services og Datadog


Eventum.no
01.2017 - 09.2017

Automatisert bygg og deploy, ny funksjonalitet

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.

Datomic, Clojure, ClojureScript, Ansible, Docker, JavaScript, Node.js, React, Elasticsearch, CentOS, Auth0, OpenID Connect, AWS IAM, AWS S3, Leiningen, Asana, Maven, HAProxy, nginx, DataScript, Oauth2, Bash, Micro services, core.async, clojure.spec, Component, Server-sent events, Reagent, Figwheel, Quartz og Datadog


NRK
2015-2016

Utviklet interaktiv søkemotor for NRKs enorme videoarkiv

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.

JavaScript, Elasticsearch, Node.js, React, Docker, Mesos, Octopus Deploy, TeamCity, JIRA, Micro services, Babel og Yarn


NRK
2015

Ny frontend for NRKs interne Radioarkiv

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.

JavaScript, CSS, Responsive Design og LESS


NRK
09.2014 - 12.2014

Laget bilderedigeringsverktøy med HTML Canvas og JavaScript

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.

JavaScript, WebGL, Chrome Embedded Framework, AngularJS, Jasmine, Karma og Node.js


NRK
2014

Bidrag: Webapp for mottak og rask publisering av saker for journalister i felten

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).

JavaScript, React, Node.js, Buster.JS, Express.JS, MySQL, Jade og Compass


SPiD
03.2014 - 09.2014

Nytt nettsted for API-dokumentasjon med Clojure

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.

Clojure, Responsive Design, Stasis, Optimus og Midje


SPiD
03.2014 - 09.2014

Frontend for ny innlogging, registrering og kjøpsflyt for Schibsted Payment ID

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

HTML, CSS, Responsive Design, JavaScript, Grunt, Mocha og Chai


FINN
09.2012 - 03.2014

FINN Småjobber i produksjon

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.

JavaScript, Spring MVC, Karma, Jasmine, Browserify, Sinon, Java og JUnit


FINN
2011-2012

Frontendutvikling for FINN Oppdrag

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

JavaScript, JsTestDriver, Sinon, Spring MVC, Java og JUnit


Arbeidsgiver

Gitorious AS


Gitorious AS
2011-2013

Utviklet tjeneste for hosting og samarbeid på git-repoer (ala Github)

Ruby, Rails, Git, Capistrano, Redhat, Puppet, MySQL, Rake og ActiveMQ


Gitorious AS
2011-2013

Drift gitorious.org

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

Ruby, Rails, Git, Capistrano, Redhat, Puppet, MySQL og ActiveMQ


Programutvikling
2011-2015

Månedlige kurs i JavaScript og TDD med JavaScript

JavaScript og TDD


Arbeidsgiver

Shortcut AS


Nordea
2010

Nordea Android app

Android, Java og Eclipse


Adecco
2010

Adecco Android app

Android, Java og Eclipse


Telenor
2010-2011

Ny frontend for telenor.no

HTML, CSS, JavaScript og Ruby


Shortcut
2009-2011

Diverse interne apper

Ruby


Arbeidsgiver

IXD AS


Apotek 1
2009

Konkurranse-applikasjon i Ruby on Rails

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

Ruby, Rails, HTML, CSS, JavaScript, Capistrano og Ubuntu


Telenor
2009

Ny frontend for online.no

HTML, CSS, JavaScript og Ruby


Webdagene
2007-2008

Frontend og CMS for webdagene.no

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

PHP, eZ Publish, MySQL, HTML, CSS og JavaScript


Storebrand
2007-2008

Ny frontend for storebrand.no

HTML, CSS og JavaScript


Reiseliv.no
2007-2009

Frontend og CMS for reiseliv.no

HTML, CSS, JavaScript, eZ Publish og MySQL


Storebrand
2006-2007

Frontend for kjøpsløsningen til Storebrand Skadeforsikring

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.

HTML, CSS og JavaScript


Arbeidsgiver

Som selvstendig næringsdrivende


Cosmopolite
2006-2013

Utviklet nettsidene cosmopolite.no i eZ Publish

HTML, CSS, JavaScript og eZ Publish


IXD
2005-2009

Diverse mindre websider basert på eZ Publish

HTML, CSS, JavaScript, eZ Publish, Ubuntu, Windows, MySQL og PHP


Rarelink
2005-

Videreutviklet og driftet tjenesten rarelink.no

Java, Ant, Maven, Docker, CentOS, Ansible og MySQL


IXD
2004-2005

Utivklet tjenesten flysiden.no

PHP, JavaScript, MySQL, HTML og CSS


Arbeidsgiver

Deltidsarbeid under studier


Universitetet i Oslo
2002-2003

Frontend og emnekart for apollon.uio.no

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.

HTML, CSS og PHP


Anbefalinger


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.»


Sertifiseringer og kurs



Utdanning


2001-2005

Institutt for informatikk, UiO

Systemutvikling og digital signalbehandling


Presentasjoner



2018

  • To the Cloud (JavaZone)
  • Datomic (Fürst Medisinsk Laboratorium IT)
  • Datomic (Hafslund/Fortum)
  • Datomic (Bring)
  • Å Bygge sin egen Infrastruktur på AWS (Kodemaker fagdag)

2017


2016

  • Test-Driven JavaScript (Iterate)
  • Webutvikling med React - intern workshop (NRK)
  • JavaScript og React, 2 dagers kurs (Conax)
  • The Imminent Future of JavaScript (JavaZone Academy)
  • Webutvikling med React (Webstep)

2015


2014

  • Thinking Outside the DOM (NDC London)
  • JavaScript for Programmers, 3-dagers kurs (Programutvikling)
  • ZombieCLJ: Live parprogrammering (JavaZone)
  • Test-Drevet JavaScript, 1-dags workshop (Visma)
  • JavaScript for Developers, 3-dagers kurs (Programutvikling)
  • Functional UI Programming - React.js, ClojureScript og Om (NDC 2014)
  • Functional UI Programming (flatMap(Oslo))
  • Functional UI programming (Oslo Socially Functional)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Party in the front, party in the back - workshop om node.js og React.js (Booster conf)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)

2013

  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Test-driven JavaScript Development, 3-dagers internkurs (Startsiden.no)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • JavaScript for programmers, 3-dagers internkurs (Startsiden.no)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Unit testing with Buster.JS (Capra)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Introduction to Git, 1-dags kurs (Nets)

2012

  • Pure, functional JavaScript (Felix Aker Brygge)
  • Automated testing and JavaScript (Mesan)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • Pure, functional JavaScript (Øredev)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Zombie TDD: Live parprogrammering (JavaZone)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • Pure, functional JavaScript (JavaZone)
  • JavaScript Basics (InMeta)
  • Automated testing and JavaScript (NIFSL)
  • Node.JS (Dataforeningen)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Working with Buster.JS ()
  • Pure JavaScript (NDC)
  • Pure, functional JavaScript (WebRebels)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • JavaScript for programmers, 3-dagers kurs (Programutvikling)
  • Test-Driven JavaScript Development (SDC (Sverige))
  • Pure, functional JavaScript (SDC (Sverige))
  • Buster.JS (Bergen NNUH)
  • Node.JS (Bergen NNUG)
  • Unit testing (JavaScript Days, Køln)
  • Sinon.JS (JavaScript Days, Køln)
  • TDD with JavaScript (JavaScript Days, Køln)
  • Buster.JS/TDD workshop (med August Lilleaas) (BEKK)
  • JavaScript: From Zero to Hero in 1.5 days (Konwit, Stavanger)
  • Step away from the for-loop! (Framsia)
  • Introduction to JavaScript (Unit4)

2011

  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • Test-driven JavaScript Development, 3-dagers kurs (Questback)
  • Writing a book experience report: Test-Driven JavaScript Development (Øredev)
  • Test-Driven JavaScript Development (Øredev)
  • Divide and conquer: JavaScript design and architecture (BBC, London)
  • JavaScript design and architecture, workshop (Miles, Bergen)
  • Hands-on Buster.JS (Frontendconf, Zurich)
  • JavaScript design and architecture (JavaZone)
  • Mythbusters: JavaScript Edition (JavaZone)
  • Buster.JS Lyntale (Cisco)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • TDDoing it right (TDD/BDD/Testing "shootout") (Framsia)
  • Test-driven JavaScript Development (NDC)
  • JavaScript design and architecture (NDC)
  • JavaScript unit testing (JavaBin Sørlandet)
  • Test-Driven JavaScript Development (APT)
  • Test-Driven JavaScript Development, workshop (Falsy Values, Warsawa)
  • Test-Driven JavaScript Development (Roots conf, Bergen)
  • Buster.JS (Framsia)
  • Test-driven JavaScript Development, 3-dagers kurs (Programutvikling)
  • Test-driven JavaScript Development (Komplett.no)
  • JavaScript-arkitektur for liten og for stor (Finn.no)
  • JavaScript: Design og struktur (Finn.no)
  • Sinon.JS - Simplifying JavaScript testing (XP Meetup, Oslo)
  • Test-driven JavaScript Development (BEKK)

2010

  • Unit-testing JavaScript (JavaZone)
  • Unit-testing JavaScript (JavaBin/Framsia)
  • Test-first JavaScript (Fronttrends, Warsawa)

2009

  • JavaScript testing tools (irb.no, Oslo)

Bidrag til fri programvare


  • imagine - Et verktøy for å skalere, croppe, og gjøre andre transformasjoner på bilder før de serves på internett. Kan brukes som en Ring-middleware, eller til å generere transformerte/optimaliserte bilder til disk.
  • pharmacist - Et bibliotek for deklarativ utførelse av en serie operasjoner som kanskje kan feile. Typisk use-case er orkestrering av nettverkskall, men Pharmacist er ikke begrenset til dette.
  • dumdom - Et lettvektsalternativ til React for ClojureScript: Komponenter for snabbdom som er API-kompatible med Quiescent.
  • gadget-inspector - Utviklingsverktøy for ClojureScript og Clojure - visualiserer data i en Chrome-extension slik at man har full innsikt i kjøretids-tilstanden til applikasjonene under utvikling.
  • Sinon.JS - Et spy-/stub- og mocke-bibliotek for JavaScript.
  • Buster.JS - Ambisiøst test-toolkit for JavaScript.
  • Prone - Bedre feilmeldinger og debugging for Clojure webapps.
  • asciidoclj - Rendre asciidoc i Clojure.
  • hiccup-find - Test-helpere for hiccup.
  • Uinit - Et inisialiserings-system for UI-komponenter.
  • dolt - En git repository-browser for Ruby. Kjernen i fil-browseren til Gitorious.
  • Makeup - Et Ruby-bibliotek for å rendre markdown med kodeblokker som syntax highlightes.
  • 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.
  • Cull.JS - Funksjonell verktøykasse for JavaScript.
  • Dome - Funksjonell verktøykasse for DOM-manipulering.
  • Har bidratt til Quiescent, Gitorious, Optimus, Stasis, Collage, karma-referee og carousel-js

Andre faglige bidrag


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.

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.

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.

Learning Functional JavaScript

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

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.

Artikkel: Partisjonering av data

map, filter og reduce er nyttige verktøy som mange har i verktøykassa si. Oppi der burde også partition være, og jeg skal vise deg hvorfor.

Artikkel: Kontinuerlig utrulling - også på klienten

Du har en Single Page Application (SPA). Brukerne har typisk appen åpen i nettleseren lenge - mange dager, eller til og med uker. Samtidig sitter du og dytter ut nye versjoner opptil flere ganger om dagen. Hvordan i alle dager skal du sørge for at folk ikke blir sittende på en gammel frontend som kanskje har bugs du allerede har fiksa, eller bruker en utdatert API-klient? Vel, her får du ett forslag.

Artikkel: Kubernetes deployments uten nedetid

Når du deployer appen din til det romskipet av en rigg som er Kubernetes så skjer det uten noen form for nedetid, ikkesant? Dårlige nyheter: med mindre du har gått veldig aktivt inn for det har tjenestene dine svært sannsynlig litt nedetid under deployment. Men hvorfor?

Artikkel: Devops! Dev? Ops!

Det skorter for tiden ikke på bedrifter i IT-sfæren som skryter av at de driver med Devops. Men gjør de egentlig det? Hvis løsningen er et «devops-team» eller stillingsutlysninger for «en devopser», er sjansen dessverre liten for at vi henter ut det beste devops har å by på.

Artikkel: JavaScript Coercion 101

Det er lite vi utviklere elsker mer enn å peke på galskap i JavaScript, så som [] + 2 === "2", men dersom jobben din er å skrive kode i dette språket, eller språk som kompilerer til JavaScript uten å skjule denne oppførselen (eksempelvis TypeScript og ClojureScript) vil du spare mye tid i feilsøking og koding ved å forstå hvorfor ting er som de er.

Artikkel: Når AWS-regninga blir skyhøy

Det er fort gjort å komme opp og gå i skyen, men før du får sukk for deg har du en løsning der du nærmest skuffer penger i retning Amazon. Hva gjør du den dagen du oppdager at AWS-regninga er mye høyere enn du hadde forventet?

Artikkel: AWS Free Tier

En liten historie om hvordan EFS nærmest tok livet av Kubernetes-clusteret vårt, og hvordan du kan unngå å havne i samme knipa — selvom du ikke bruker EFS.

Artikkel: Fleksibel layout med CSS Grids

CSS grids har endelig gitt oss en enkel og fleksibel modell for layout på nett. Med bare noen få properties kan du stort sett pakke float helt bort, få full kontroll over kilde-rekkefølge og et kraftig verktøy for responsiv design på kjøpet.

Artikkel: 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.

Artikkel: tools.deps, figwheel-main, Devcards, and Emacs

Hvordan sette opp et ClojureScript-prosjekt i 2019

Artikkel: 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.

Artikkel: 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.

Artikkel: Optimized Optimus Asset Paths from ClojureScript

Hvordan eksponere Optimus asset-paths fra Clojure til ClojureScript via en macro

Artikkel: Securing HAProxy sites with Let's Encrypt SSL Certificates

En gjennomgang av oppsett av SSL-sertifikater fra Let’s Encrypt med HAProxy

Artikkel: Api Gateway Proxy Resource with Cloudformation

Cloudformation-oppsett for proxy-ressurser fra AWS Api Gateway

Artikkel: Idempotent Cloudformation Updates

Hvordan sørge for at Cloudformation-oppdateringer blir helt idempotente

Artikkel: Referentially Transparent CRUD

Artikkel om hvordan Datomic lar deg implementere tradisjonell CRUD med referentially transparent funksjonell kode.

Artikkel: Querying across Datomic databases

Et konkret eksempel på hvordan du kan gjøre datalog spørringer over flere databaser samtidig med Datomic.

Artikkel: Annotating Datomic transactions

En artikkel om Datomics transaksjoner, og hvordan de kan utvides med app-spesifik informasjon for bedre auditing og mer.

Artikkel: Thinking outside the DOM

Hvordan tenker man egentlig design i JavaScript? Gjelder konsepter som løse koblinger og ‘single responsibility’ også på klienten? Jeg vil så absolutt påstå at det gjør det, og denne artikkelen belyser hvordan man kan angripe klient-spesifikke problemer i JavaScript med gode design-prinsipper i hånda.

Artikkel: Immutability in React

Artikkelen bygger videre på artikkelen om immutability i JavaScript, og viser immutable data i sving i en React-applikasjon.

Artikkel: Immutability in JavaScript

Introduksjon til immutability, og hvordan jobbe med immutable data i JavaScript

Artikkel: Clojure to die for

En liten feiring av helt hverdagslige idiomer of småtriks som gjør det å jobbe med Clojure til en fantastisk god opplevelse

Artikkel: Building Static Sites in Clojure With Stasis

En lang tutorial-style bloggpost om å lage statiske websider i Clojure med blant annet biblioteket Stasis. Artikkelen gir et innblikk i bruk av mange populære web-biblioteker for Clojure.

Artikkel: An introduction to Emacs Lisp

Etter å ha brukt Emacs i mange år, og nylig ha gått gjennom The Little Schemer satte jeg meg for noen år siden ned for å lære meg Emacs Lisp skikkelig. Jeg benyttet anledningen til å samtidig skrive en god og grundig innføring for andre i samme situasjon. Artikkelen handler om Emacs Lisp spesielt, men fungerer også som en introduksjon til Lisp generelt. I motsetning til andre introduksjonsartikler tar den for seg et nogenlunde sammensatt eksempel slik at man ser hvordan Lisp ser ut utover ‘Hello world’.