Profilbilde av Magnus Rundberget

Magnus Rundberget

Systemutvikler

+47 928 83 365
magnus@kodemaker.no

Utvikler med 28 års erfaring

  • Opprinnelig backendutvikler som har virkelig har fått sansen for frontendutvikling de siste årene
  • Funksjonell programmerer med OO-bakgrunn
  • Solid erfaring på arkitektur, analyse og design, men liker best å kode
  • Yter mest optimalt i små smidige team med fokus på hyppige leveranser, læring og trivsel.

«Magnus is one of those rare individuals who has the ability to understand a concept at the high level as well as the implementation minutia at the same time. His skills and deep experience in software architecture along with his professional, patient and calm nature allowed me to gain not only the information needed about the project on which we worked, but insights and inspiration in the more general field of software development.»

- Mitul Thobhani, Owner and Co-Founder, Portfolio Software Limited

Om Magnus

Magnus er en ringrev som er like engasjert (om ikke mer) i faget sitt nå, som da han skrev sin første Othello implementasjon på høgskolen. Han er analytisk av natur og nøler ikke med å brette opp ermene for å sørge for at rikig ting blir levert så fort som mulig med så høy kvalitet som mulig.

Med sin bredde og erfaring kan Magnus ta mange forskjellige roller i et prosjekt. Han passer nok aller best i team med fokus på hyppige leveranser og kontinuerlig forbedring. Læring er noe som er veldig viktig for Magnus og han er like opptatt av å dele kunnskap som han er av egen utvikling.

Drømmeprosjektene til Magnus er der han får være med å på hele reisen med å løse problemer og realisere ideer i fungerende kode. Når Magnus jobber med videreutvikling av eksisterende løsninger, er han alltid opptatt av hvordan man kan gjøre ting bedre. Magnus bidrar ofte med å sette opp eller forbedre CI/CD prosesser, komme opp med tiltak for redusering av teknisk gjeld eller med å ta grep for bedre brukeropplevelser og smartere prosessautomatisering.

Magnus har i de siste årene blitt svært opptatt av funksjonell programmering både med og uten sterk statisk typing. Programmeringsspråk som ClojureScript og Elm og deres underliggende ideer, har gjort at han har kastet seg over frontendutvikling med stor entusiasme.

I perioder er Magnus svært aktiv med å bidra til OpenSource. Motivasjonen for å gjøre det er drevet av ønsket om å lære, følelsen av å gi noe tilbake samt å dele kunnskap.

Animalia

Applikasjon for veterinærer og produsenter for registrering av medisinering og helserelatert informasjon. Tjenestebasert arkiktur laget med Clojure, ClojureScript, Oracle og Docker Cloud.

Aprila Bank

Etablering og utvikling av tjenster for en ny bank for B2B markedet. Basert på bla. Kotlin, Rust, Elm og Google Cloud.

Oiiku

Smart bordplasseringsmodul for automatisk plassering av mange event-deltakere basert på potensielt motstridende ønsker. Clojure, Kotlin og OptaPlanner.

Teknologi


Programmeringsspråk

Elm, Clojure, ClojureScript, Kotlin, Groovy, JavaScript, Java, Haskell, Java EE, TypeScript, Visual Basic, XSLT, Python, Node.js, Swift, Rust, C# og Node


Utviklingsverktøy

Light Table, Gradle, Subversion, Rational Rose, Maven, CVS, Ant, Eclipse, Git, Rational suite, Dbartisan, Visual Studio, Visual age, Websphere studio, MKS, Webpack, TogetherJ, Cygwin og IntelliJ IDEA


Devops

Docker, Jenkins, Ansible, Amazon Web Services (AWS), TeamCity, Hudson, Terraform, Kubernetes, Bamboo, Travis CI, Google Cloud Platform, Tivoli, Log4j, Google cloud run, Firebase, Docker cloud og CruiseControl


Web- og apputvikling

Websphere, Spring, Epicentric portal, MS IIS, ASP, Tomcat, Grails, Xalan, Apache, Iplanet enterprise directory, Websphere portal, JBoss, JBoss Portal, Netty, Tapestry, Adobe reachform og Jbossws


Utvikling

JUnit, COM+, Buster.JS, Easymock, Xerces, Arrow, Spock, Swing admin console, Junitee, Electron, SAAJ, Axis, SwiftUI, Boot, JAXB, Jmx og Grinder


Data

Oracle, MS SQL Server, DB2, SQL Server, Mq series, PostgreSQL, Datomic, PL/SQL, Kafka, Hibernate, DynamoDB, Elasticsearch, Quartz, Mq series integrator, Sybase, Apache Camel, Sql reporting services, MariaDB, Solr, Hibernate search, Influx DB, Verity search, JBoss Messaging, MongoDB, Lucene og DataScript


Webutvikling

Twitter Bootstrap, React, Frontend, jQuery, re-frame, Pegjs, D3, AngularJS, Flash og CSS


Software

GitLab, JIRA, Confluence, CA SiteMinder, Erwin, Lotus notes, Auth0, Domino, Secureway directory stellent cms, Peoplesoft crm, Site server commerce, WebLogic, Ms exchange og Agresso


Annet

Funksjonell programmering, Buddy, Ms dna, Webservices, .NET, Automatisert testing, SOAP, Mts, EJB, Borland JBuilder, Aspekt-orientert programmering, Grasshopper, XML, Ms market, Tcp, Xfire, JSON, DevOps, Pki, Programmering, Rup, Windows, HP Unix, Arkitektur og Udp


Prosjekter


Arbeidsgiver

Kodemaker Systemutvikling AS


Stiftelsen Lovdata
04.2023 -

Utvikling av ny versjon for det juridiske arbeidsverktøyet Lovdata Pro

Lovdata har i en tid arbeidet med å lage en ny versjon av det juridiske arbeidsverktøyet Lovdata Pro. Den nye og kraftig moderniserte versjonen skal være langt mer mobilvennlig, men får også betydelige løft på en rekke andre områder.

Magnus ble opprinnelig leid inn til prosjektet for å tilføre mer ekspertkompetanse på Elm. Han jobber i prosjektet som fullstack utvikler og vil i tillegg tilføre kompetanse på arkitektur og utviklingsmetodikk

Elm, Kotlin, Solr, MariaDB og GitLab


The Social Gaming Group
11.2022 - 03.2023

Strømlinjeforme utrulling av ny/oppdatert spillsoftware for Shuffle og Darts.

I 2018 var Kodemaker med på å utvikle software for forskjellige spill knyttet til darts. Disse ble lansert ved åpningen av utesteded Oche. Siden deg gang har man utviklet tilsvarende for Shuffle og ekspandert til langt flere installasjoner over hele verden. Kodemaker ble engasjert for å hjelpe til med å effektivisere og strømlinjeforme utrulling av ny software som kan skalere i takt med ønskede vekstambisjoner.

Oppgavene til Magnus omfattet:

  • Oppsett av byggepipelines i GitLab
  • Utvikling av ansible playbooks for oppsett/installasjon av spillsoftware
  • Utvikling av en tjeneste for asynkron installasjon (skrevet i Clojure med en PostgreSQL DB)

Clojure, Ansible og GitLab


FFL AS
11.2021 - 02.2023

Fantasy Football får et nytt og spennende spill. Kodemaker står for utvikling av både app og backend.

Fantasy Football sjangeren er et stort og voksende marked. FFL som en ny og ambisiøs aktør, ønsker å ta en ledende posisjon. Det skal utvikles et engasjerende, morsomt og svært brukervennlig spill. Da muligheten for å være med på utviklingen av dette produktet dukket opp, var det to av Kodemakers mest fotballgale utviklere som øynet drømmeoppdraget.

Kodemaker er ansvarlig for utvikling av app, backend og integrasjon mot 3.parts leverandører av data. Vi er også ansvarlig for å etablere rutiner for CI/CD, devops og utvikling av nødvendige verktøy for administrasjon. Selvfølgelig forventes det av vi bidrar med domenekunnskap og kreative innspill/løsninger som bidrar til et best mulig produkt.

Rolle: Fullstack-utvikler, DevOps, Tech Lead

Kotlin, Swift, SwiftUI, Google cloud run, Firebase, Terraform, PostgreSQL, Arrow og Funksjonell programmering


Mercell
10.2020 - 11.2021

Utvikling av ny samarbeidstjeneste for leverandører i en anbudsportal.

Mercell er en av de ledende aktørerne i Europa innen anbudsformidling. De har en offensiv vekststrategi og har gjennom flere oppkjøp vokst fort de siste par årene. Mercell er i ferd med å lage en ny felles plattform for leverandører. I starten av vårt prosjekt identifiserte vi vha analyser og brukerundersøkelser at det i dag fantes et gap i tjenestetilbudet for leverandører.

Vårt oppdrag var å utvikle en tjeneste som gir en totaloversikt over en leverandørs pågående anbudsprosesser. Vi skulle også utvikle tjenester som gir mulighet for leverandører til samarbeid og samhandling i fasene for evaluering av anbud og innlevering av tilbud. Teamet vårt er et autonomt domeneteam og vi har stor frihet i valg av teknologi og arbeidsmetodikk. Vi har valgt en reactive inspirert arkitektur og benytter oss av Javalin/Kotlin på backend og React/Typescript på frontend. Kommunikasjon mellom backend og frontend skjer via Websockets (for lesing) og REST/commands (for skriving). På litt sikt vil våre tjenester splittes inn i mindre selvstendige komponenter også kjent som Micro Frontends. Integrasjon mot andre domener foregår ved bruk av Kafka. Brukerene skal sikres en sømløs brukerreise med integrasjon mot et felles autentiseringsløsning (i dag Auth0).

Rolle: Tech lead, utvikler og arkitekt

Kotlin, TypeScript, Kafka, Amazon Web Services (AWS), DynamoDB, Terraform, Auth0, Funksjonell programmering, Docker, React og DevOps


Norled
04.2019 - 09.2020

Utvikling av nytt informasjonssystem for fergedrift

Utvikler nye informasjonssystemer for fergedrift for Norled.

Clojure, ClojureScript, Datomic, DataScript, Amazon Web Services (AWS), Kubernetes, Influx DB, Kafka og Travis CI


Tomra
10.2018 - 04.2019

Utvikling og modernisering av backoffice løsninger for pantemaskiner

Tomra har pantemaskiner over hele verden. Disse samler inn store mengder informasjon samt krever administrasjon fra backoffice personell. Magnus jobbet med modernisering/omskriving av software for kommunikasjon mot pantemaskiner og foretok løpende vedlikehold av administrasjonsapplikasjoner. Han jobbet også med en POC for å modularisere administrasjonsapplikasjon ved å skille ut kampanjerelatert funksjonalitet. I POC’en brukte vi Elm på frontend og REST endepunkter på backend.

Java, Elm, JavaScript, TypeScript, GitLab, Amazon Web Services (AWS) og SQL Server


Protector Forsikring
2018

Utvikling av B2B og B2C forsikringsportal

Videreutvikling og forbedring av portalløsning for self-service på forsikringsprodukter fra Protector. Portalen er implementer som en SPA med REST integrasjoner mot kjernesystemene. Oppgaver: Utvikling av ny funksjonalitet, teknologievaluering, mentoring på moderne funksjonell utvikling og rådgiving ifm. innføring av SCRUM/smidig prinsipper.

JavaScript, TypeScript, Node, Webpack, Docker og TeamCity


Oche
2018

Utvikling av nytt spillkonsept knyttet for Dart.

Ved bruk av moderne teknologi, hardware, stilig design og autentiske piltavler laget vi et nytt og spennende spillkonsept for å popularisere Dart i Norge. Magnus jobbet hovedsaklig med utvikling av dartspillenes logikk og teknisk frontend.

Clojure, ClojureScript og Python


Oiiku
2017

Utvikling av bordplasseringmodul for "smart" automatisk plassering av tusenvis av deltagere.

Utvikling av bordplasseringsmodul til Event håndteringssystem. Bordplasseringen skulle kunne effektiv plassere 1000vis av deltakere effektivt samt balansere diverse konfigurerbare kriterier. Oppgaver: Utvikling av backend tjenester og integrasjon mot kjernemoduler i eventsystemet. Finne best mulig løsning for å løse det NP komplette problemet å automatisk best mulig plassere tusenvis av deltakere på tvers av hundrevis av bord.

Clojure, Kotlin, AngularJS, Ansible, Datomic, MongoDB, Gradle og TeamCity


Aprila Bank
2017

Etablering og utvikling av tjenster for en ny bank for B2B-markedet.

Utvikling av tjenster/produkter for ny B2B bank. Startup som har som mål å tilby banktjenester til små og mellomstore bedrifter på en helt ny og spennend måte. Oppgaver: Integrasjon mot diverse 3.parts løsninger, etablering av mikrotjenster, teknologievalueringer, frontend utvikling, automatisert testing mm.

Kotlin, Elm, PostgreSQL, Google Cloud Platform, GitLab, Kubernetes, Rust og Amazon Web Services (AWS)


Animalia - Dyrehelseportalen
2016

Utvikling av applikasjon til veterinærer og produsenter for registrering av medisinering og helserelatert informasjon

Utvikling av applikasjon til veterinærer og produsenter for registrering av medisinering og helserelatert informasjon. Prosjektet er en omskrivning/nyutvikling av en eksisterende applikasjon til en moderne responsiv webapplikasjon. Første versjon av ny applikasjon gikk i produksjon i Januar 2017 og er nå under kontinuerlig videreutvikling. Oppgaver: Analyse, design og full-stack utvikling av en mikrotjeneste-basert arkitektur med flere sluttbruker-applikasjoner.

Clojure, ClojureScript, re-frame, Docker, Oracle, SQL Server, Elasticsearch, Docker, Docker cloud, Twitter Bootstrap og Jenkins


Animalia - Vedlikehold og videreutvikling
2015

Vedlikehold og videreutvikling av flere av de eksisterende Grails applikasjonene i Animalia

Vedlikehold og videreutvikling av flere av de eksisterende Grails applikasjonene i Animalia. Oppgaver: Utvikling, bugfixing, refaktorering og arkitetekturarbeide med tanke på applikasjonenes levetid.

Grails, Groovy, Oracle, Docker og JavaScript


Animalia - Helsegris
2014

Utvikling av ny applikasjon for oppfølging av dyrehelse for griser

Utvikling av ny applikasjon for oppfølging av dyrehelse for griser. Det er også et mål for prosjektet å lage endel gjenbrukbare tjenester. Oppgaver: Utvikling, mentoring og veiledning på utvikling av tjenestearkitekturer.

Clojure, ClojureScript, Docker, Ansible, Twitter Bootstrap, React, Buster.JS, Jenkins og Oracle


Animalia - Sauekontrollen
2013

Full-stack utvikling i Grails

Full-stack utvikling i Grails. Prosjektekspert på JavaScript/TDD og provisjonering (Ansible).

Grails, Groovy, jQuery, Twitter Bootstrap, Ansible, Buster.JS, Oracle, Tomcat, Jenkins, Git og Spock


Animalia - Storfekjøttkontrollen
2012

Hjelpe til med transformasjon og utvidelsen av eksisterende systemer til moderne web-teknologi basert på Java-platformen

Animalia er et fagmiljø for kjøtt og eggbransen. Animalia tilbyr verdikjedesystemer til bønder og deres rådgivere. Man har en klar strategi om å tilby gode og moderne selvbetjeningsløsninger på web. Magnus er leid inn for å hjelpe til med transformasjon og utvidelsen av eksisterende systemer til moderne web-teknologi basert på Java-platformen. Oppgaver: Utvikling av frontend og backend for nytt system. Mentoring i smidig utvikling. Mentoring av fastansatte/nyansatte i moderne systemutvikling.

Grails, Groovy, jQuery, Twitter Bootstrap, Oracle, Tomcat, Jenkins, Git og Spock


Storebrand Aktuarsystemer
2011

Utvikling av ny funksjonalitet og arkitekturforbedringer i pensjonskassesystem for store offentlige og private kunder

Storebrand Aktuarsystemer er et datterselskap i Storebrand konsernet. De har utviklet et pensjonskassesystem som håndterer pensjonskasser for store norske kunder. Man har et stadig økende behov for å utvikle ny funksjonalitet i et raskere tempo. Samtidig har man også opparbeidet endel teknisk gjeld. Magnus er leid inn i første rekke som seniorutvikler på java delen av løsningen. Oppgaver: Utvikling av ny funksjonalitet i Java, Pl/SQL og noe .Net. SCRUM mentoring og mentoring på best practices innen systemutvikling generelt. Forbedring av eksisterende utviklingsprosess, bistand med innføring av nye produktive verktøy og disipliner.

Java, PL/SQL, Gradle, TeamCity, Subversion, .NET, JUnit, Apache Camel, Spring og Oracle


Forsvaret FLO/IKT
2010

Utvikling av proxyløsning for WebService kall over ustabile nettverk

FLO/IKT holder for tiden på med en svært omfattende SOA implementering. En av utfordringene i forsvaret er at man har mange nettverk med lav båndbredde og/eller ustabile forbindelser. Man er derfor i gang med å utvikle en proxy basert løsning for å håndtere webservice kall også i denne type nettverk. Denne løsningen ser man for seg vi bli en viktig komponent i SOA arkitekturen. Oppgaver: Basert på en spesifikasjon og referansemplementasjon fra Forsvaret forskningsinstitutt var Magnus sin oppgave å lage en produkuksjonsklar første versjon som skal integreres i SOA arkitekturen.

SOAP, Webservices, Netty, Udp, Tcp, Java, Jmx, JAXB, SAAJ, Swing admin console, Gradle, Subversion, Hudson, Confluence, JIRA og Grasshopper


Telenor Mobil
2009

Oppgradering av mellomvareplatform (COS)

Oppgradering av mellomvareplattform (COS). Oppgradering av Java4-Java6, weblogic8-weblogic10 og maven1-gradle. Oppgaver: Scrum assistanse, Utvikling av webservices, porting av biblioteker, weblogic konfigurasjon, ytelsestesting, byggesystem analyse og migrering.

WebLogic, Java, Maven, Gradle, MKS, JUnit, Easymock, Xfire, Axis, Bamboo, Cygwin, Grinder, Java EE og Spring


Forsvaret FLO/IKT
2008-2009

Modernisering og videreutvikling av fagapplikasjoner for dokumenthåndtering

Modernisering av fagapplikasjoner for dokumenthåndtering/rapporthåndtering til Web 2.0. Oppgaver: Kravstyring, Arkitekturevaluering, Utvikling på alle applikasjonslag, ytelsestesting, mentoring.

Java, Tapestry, Spring, Hibernate, Lucene, Hibernate search, Tomcat, Apache, Maven, Hudson, Easymock, Subversion, JIRA og Confluence


Nordic Lottery Systems
2006-2008

Internettspill

Utvikling av nytt internettspill med svært høye oppetids og ytelseskrav. Oppgaver: Requirements Managament (user stories og use cases), DDD, Design og utvikling av JEE komponenter, Team admin, Ytelsesoptimlisering.

Java, Spring, JBoss, JBoss Portal, JBoss Messaging, Jbossws, Hibernate, Apache, PostgreSQL, Oracle, Flash, Quartz, Maven, Ant, JUnit, Junitee, Easymock, Aspekt-orientert programmering, CruiseControl, Eclipse, IntelliJ IDEA, CVS, JIRA og Confluence


EDB ASA
2005

Migrering av driftsmiljø for Storebrand

Migrering av driftsmiljø for Storebrand. Oppgaver: Ekspertråd, assistanse, “troubleshooting”, konfigurasjon, performance tuning, mentoring, dokumentasjon.

Websphere, Mq series, Domino, DB2, MS SQL Server og Oracle


Trygge barnehager
2004-2005

Utvikling av ASP-tjenester

Utvikling av ASP tjenester for barnehagesektoren. Omfattet tjenester innen; opptak, økonomi, hjemmeside og kvalitet i barnehager. Oppgaver: Etablering av IT arkitektur mål og plan, Teknisk ansvarling mot outsourcings leverandør, teknologievalueringer, rådgivning på prosess og metode.

.NET, Visual Studio, C#, SQL Server, Sql reporting services og Ms exchange


IBM Danmark
2003

Virk.DK, felles G2B portal for danske myndigheter

Virk.DK prosjektet er resultatet av en stor satsning fra den danske stat for å realisere en G2B portal, hvor virksomheter etterhvert skal kunne foreta all kommunikasjon med myndighetene elektronisk. Oppgaver: Design/utvikling av arbeidsflyter, utvikling av portlets, digitale signaturer.

Java EE, EJB, Websphere portal, Tivoli, DB2, Secureway directory stellent cms, Adobe reachform, Webservices, Pki, Ant, Log4j, JUnit, CVS, Xerces, Xalan og Websphere studio


Arbeidsgiver

PriceWaterhouseCoopers, England


PWC internt
2002-2003

CRM Implementasjon

CRM Implementasjon. Virksomhetskritisk prosjekt med målsetning å konsolidere all kunde-og kontaktinformasjon for PWC UK til en sentralisert kilde. Prosjektet var en PeopleSoft 8.8 implementasjon og hadde en mengde grensesnitt til firmaets kjernesystemer. Oppgaver: Arkitektur governance, Design/utvikling av portlets, integrasjon mot SSO, design og utvikling av integrasjonsgrensesnitt Rolle: Teknisk arkitekt.

Peoplesoft crm, Websphere, Mq series integrator, CA SiteMinder, Epicentric portal, Java, Java EE, XSLT, SOAP og Borland JBuilder


Pwc internt
2002-2003

Risk Managment Reporting

Risk Managment Reporting, System for distribuert analyse og rapportering av risiko vurdering internt i firmaet. Systemet hadde hovedsaklig partnere som brukergruppe, og blir benyttet globalt. Oppgaver: Analyse/design, koordinering mot indisk outsourcet team, arkitekturprototype, databasedesign.

MS IIS, COM+, MS SQL Server, Rational suite, ASP, Visual Basic, XSLT, CA SiteMinder og Epicentric portal


Pwc internt
2002

Virksomhetsportal

Virksomhetsportal, Portalløsning for alle firmaets ansatte i Storbrittania. Portalen tilbyr en samlet personlisert brukerflate og aksess til de fleste av firmaets kritiske systemer. En viktig suksessfaktor for systemet var innføring av en SSO (Single Sign-On) infrastruktur. Oppgaver: Rådgivning integrasjon mot portal, rådgivning integrasjon mot SSO, design og utvikling av portlets.

Epicentric portal, Websphere, CA SiteMinder, Iplanet enterprise directory, Verity search, Oracle, DB2, MS SQL Server, Lotus notes, MS IIS, Mq series, Java, Java EE, ASP, XSLT, Eclipse og Rational suite


Arbeidsgiver

Net Professionals UK LTD


HM C&E - Engelske tolldirektoratet
2001-2002

G2B Portal for engelske tollvesenet

G2B Portal. eEnabling av tjenester fra tolldirektoratet mot publikum og bedrifter. Oppgaver: Governance, Analyse/Design, Team ledelse og utvikling.

Arkitektur


Arbeidsgiver

Objectware AS


Storebrand
2000-2001

Råd på nett, Unit Linked

Utvikling av tjenester for Storebrands nettbank. Oppgaver: Team ledelse, OOAD, utvikling og mentoring.

Java, Java EE, Websphere, Visual age, Lotus notes, TogetherJ, JUnit, Xalan, Xerces, XSLT og DB2


Aftenposten
1999-2000

Elektronisk innkjøpssystem

Elektronisk innkjøpssystem. Oppgaver: Team ledelse, OOAD og utvikling.

Visual Basic, Ms dna, MS SQL Server, MS IIS, ASP, Mts, COM+, Ms market, Site server commerce, Rational Rose og Rup


Domino DA
1999

Bonuspoengsystem

Bonuspoengsystem. Oppgaver: Rådgivning, Team ledelse, OOAD og utvikling.

Ms dna, Mts, Mq series, Oracle, Agresso, PL/SQL, COM+, Visual Basic, Rational Rose og Erwin


Telnor bedrift
1997-1999

Fakturagrunnlagssystem

Fakturagrunnlagssystem. System for prising av telenor bedrifts datatjenester. Oppgaver: Design, utvikling, kravanalyse og testing.

Windows, HP Unix, Visual Basic, COM+, Sybase, Rational Rose, Erwin og Dbartisan


Anbefalinger


Daniel Haukaas

Produkteier, FFL AS

«Det var både gøy og lærerikt å jobbe med Magnus på fantasy football-prosjektet FFL i 2022. Magnus er flink til å se helheten og tenke nøye igjennom valgene man tar før man begynner å implementere, noe jeg satt stor pris på når vi jobbet sammen. Vil absolutt anbefale Magnus videre.»


Simon Herberg

Architect, Telenor

«Karl Magnus was part of a team that upgraded our JAVA and Weblogic software. In addition he was the driving force behind the replacement of Maven 1.x with Gradle for our build system. He worked well both within the team and on individual tasks.»


Mitul Thobhani

Owner and Co-Founder, Portfolio Software Limited

«Magnus is one of those rare individuals who has the ability to understand a concept at the high level as well as the implementation minutia at the same time. His skills and deep experience in software architecture along with his professional, patient and calm nature allowed me to gain not only the information needed about the project on which we worked, but insights and inspiration in the more general field of software development.»


Norman Katz

Development Director, Nordic Lottery Systems

«When I joined NLS Magnus was the person to go to to get answers to any and all questions relating to the complex rules of our online lottery. In time, I came to rely on him to make initial scoping estimates of potential coding projects. For those projects we chose to pursue, his estimates and their related task lists formed the basis for further detailed planning. Furthermore, Magnus's estimates could always be relied on to be very close to the eventual reality. Magnus was always looking for ways to improve our product. For example, on a project that sought through simulation techniques to validate the correctness of the product's internal calculations, Magnus recognized that this would provide the ideal test bed for profiling the product's performance. Through his efforts we were able to greatly speed up the application, in addition to fullfilling the primary purose, validation of its calculations. I recommend Magnus without reservation»


Bill Lewis

Head Of Application Development, PricewaterhouseCoopers

«Magnus joined us towards the start of our exposure to Web Technology and greatly helped us make the right decisions. I would have no hesitation recommending Karl for his technical capability and clarity of thought»


Sertifiseringer og kurs


2008

  • Sertifisert ScrumMaster

1999

  • Microsoft Certified Professional

Utdanning


2004

BI

Master of Management (1 av 4 moduler), eInnovasjon (A score)


1993-1996

Høgskolen i Buskerud

Ingeniør, Linje for datateknikk


1989-1992

Røyken videregående skole

Naturfaglinje


Presentasjoner



2016



Bidrag til fri programvare


  • TypeScript WebSocket Machine - Klientbibliotek for websocket-kommunikasjon i nettleser. Bygget rundt en tilstandsmaskin med støtte for automatisk gjenoppkobling og pulskontroll.
  • Elm Bootstrap - Elm bibliotek for å lage responsive webapplikasjoner med Twitter Bootstrap 4.
  • Elm Light Table Plugin - Light Table plugin for Elm. Syntax-highlighting, repl/inline eval, elm reactor integrasjon mm
  • rewrite-cljs - ClojureScript port av rewrite-clj. Bibliotek for traversering og omskriving av Clojure/ClojureScript/EDN- kode
  • Clj-Light-Refactor - Plugin som gir Clojure refactoring support til Light Table
  • AsciiLight - Light Table plugin for live-edit visning av Asiidoctor dokumenter
  • lt-snippets - Snippet/templates plugin for Light Table
  • LightTable InstaBuster - Light Table plugin for BusterJS
  • LightTable-Groovy - Groovy plugin for Light Table. Steg 1 er å lage et langt bedre Groovy Console. Steg 2 er helt åpent. Sky’s the limit!
  • gradle-buster-plugin - Gradle plugin for å kjøre JavaScript tester via BusterJS i jvm prosjekter
  • Har bidratt til node-test-runner, buddy-auth og gradle-ssh-plugin

Andre faglige bidrag


Elm package docs preview in Light Table

Screencast som demonstrerer forhåndsvisning av pakke dokumentasjon for Elm i Light Table.

Managing and diagramming elm packages with d3 in Light Table

Screencast hvor jeg demonstrerer avhengighetshåndtering og viser avhengighetsgraf (laget med d3) for min Elm Light Table plugin.

Elm plugin for Light Table

Screencast som demonstrerer første versjon av min elm plugin for Light Table

A pinch of Clojure love to Light Table

Screencast som demonstrerer kule features i min Light Table refactoring plugin

Clojure refactoring in Light Table

Screencast som demonstrerer litt av min Light Table refactoring plugin

The Groovy Light Table Plugin

Screencast om bruk av Groovy og Gradle i Light Table

Creating and Using Snippets in Light Table

Screencast som viser hvordan lage og bruke snippets i LightTable med lt-snippets

InstaBuster Part 2: Powerful JavaScript testing using Light Table and Buster.JS

Screencast med demo av dashboard og autotest features for LightTable InstaBuster

InstaBuster: JavaScript testing with LightTable & Buster.JS

Screencast med en kort introduksjon til LightTable InstaBuster

Light Table

Etter å ha vært en ivrig bruker av Light Table i 1,5 år, bestemte jeg meg sommeren 2015 til å ta steget opp å joine opensource teamet til Light Table for å forsøke å gjenopplive prosjektet. Det er nok å ta tak i for å si det sånn !

Artikkel: Moro med trær og glidlåser

Av og til støter du borti programmeringsoppgaver der det gir mening å bruke tre-strukturer for å komme opp med en elegant løsning. I denne bloggposten ser vi på hvordan man kan bruke en tre-struktur for å implementere et hierarkisk søkefilter med noen fiffige krav. For å krydre det litt ekstra, skal vi gjøre det med et funksjonelt språk (Elm) hvor mutering er umulig!

Artikkel: Snasen rutehåndtering i Kotlin med Arrow.kt

Kan du få rutehåndteringskoden din til å ha robust feilhåndtering og være lettlest/lett å vedlikeholde? Kanskje?! Vi tar en titt på hvordan man kan bruke Arrow.kt som et hjelpeverktøy når man implementerer rutehåndtering i Kotlin.

Artikkel: Deklarativ validering av json i TypeScript

Du validerer vel json fra rest-kallene dine før du slipper dem løs i den nydelige typesikre domenemodellen din? Kanskje du ikke gjør det, eller bare delvis, fordi det er skikkelig tungvint?

I denne bloggposten ser vi på hvordan biblioteket Zod kan hjelpe deg over kneika, slik at du virkelig kan begynne å stole på typene dine.

Artikkel: Lage ditt eget websocket-bibliotek som en tilstandsmaskin?

I jula som var satt jeg og nerdet litt innimellom all julekosen. Jeg prøvde å finne et lite bibliotek for enkel håndtering av websockets i en nettleserapplikasjon. Nå følger det jo med en standard WebSocket implementasjon i alle nettlesere, men jeg ville også at den skulle ha støtte for automatisk gjenoppkobling og pulskontroll mot server. Etter å ha søkt litt på npm som seg hør og bør, fant jeg ikke noen som helt fristet å dra inn. Kanskje jeg skal lage et lite bibliotek selv da? Hva om jeg implementer det ved å basere meg på en Finite State Machine i bunn? Det hadde vært digg om biblioteket hadde en funksjonell kjerne og at sideeffekter håndteres separat. Her er det bare å brette opp armene å se hva vi kan få til.

Artikkel: Clojure zippers - snasen traversering og manipulering av trær

Har du hørt om zippers før? Ikke glidlåser altså, men en teknikk for å representere aggregerte datastrukturer slik at de kan enkelt traverseres og manipuleres nærmest vilkårlig. La oss utforske zippers litt nærmere og se hvordan du kan bruke de i Clojure.

Artikkel: CSS animasjoner i ClojureScript - Del 1: CLJSS

I 2018 fikk jeg sjansen til å jobbe i et spillprosjekt. Da ble det etterhvert mange og sammensatte animasjoner som bød på flere spennende utfordringer. I dette innlegget skriver jeg litt om hvordan vi løste CSS in JS for ClojureScript og hvordan vi brukte det til animasjoner.

Artikkel: Elm Light 0.4.0 - AST driven Elm features in Light Table using PEG.js

For å kunne tilby enda mer avansert Elm støtte i Light Table har jeg implementert en hjemmesnekret AST vha peg.js. Dette har gitt vesentlig forbedret autocomplete og endel hendige refactor relaterte funksjoner.

Artikkel: Introducing Elm Bootstrap

Lansering av mitt nye Elm bibliotek for å lage responsive webapplikasjoner med Twitter Bootstrap. Du får en oversikt over hva og hvorfor samt litt historie om hvordan biblioteket ble til.

Artikkel: Typed up CRUD SPA with Haskell and Elm - Part 6: Elm 0.18 Upgrade

I min blogserie om å lage en CRUD applikasjon i Elm og Haskell har tiden kommer for å oppgradere Elm koden til versjon 0.18. Mye av oppgraderingen denne gangen kunne automatiseres vha verktøy fra Elm Community. Resten av endringene var relativt mekaniske. Posten går relativt detaljert til verks med å sammelikne forskjellene mellom 0.17 og 0.18.

Artikkel: Oh no! Learning Elm has gotten me confused about static vs dynamic typing.

Etter lenge å ha vært overbevist om at dynamisk typing var det eneste saliggjørende reflekterer jeg over min gryende tvil etter å ha brukt en solid dose tid på å sette meg inn i statisk typede funksjonelle språk.

Artikkel: Typed up CRUD SPA with Haskell and Elm - Part 5: Elm 0.17 Upgrade

I min blogserie om å lage en CRUD applikasjon i Elm og Haskell har tiden kommer for å oppgradere Elm koden til versjon 0.17. Ting har på overflaten endret seg dramatisk siden 0.16, men en strukutert gjennomgang av prosessen viser at de fleste endringene er trivielle og sluttresultat er unektelig bedre enn forrige versjon.

Artikkel: Elm Maybe - Dealing with null/Nothing

Tony Hoare ansees som mannen som fant opp null reference. Han kaller det sitt billion dollar mistake. I Elm har man ikke null og de problemene det medfører. I stedet bruker man en eksplisitt type man kaller Maybe (noen språk kaller det Option). I denne blogposten tar jeg for meg hvordan det er å jobbe med Maybe verdier og sammenligner litt med JavaScript. Det er ikke mange gode unnskyldninger for å ta med null i ett nytt språk, men enda så skjer det med nye språk som blir laget den dag i dag. Forstå det den som kan.

Artikkel: Elm and ClojureScript joining forces in the elm-light plugin

Jeg tenkte det måtte være kult å se om man kunne få Elm og ClojureScript til å spille sammen i Light Table. I denne blogposten forklarer jeg hvordan jeg implementerte en Modul utforsker vha både Elm og ClojureScript

Artikkel: Typed up CRUD SPA with Haskell and Elm - Part 4: Feature creep

Blogserie som omhandler min ferd for å lære meg statiske sterkt typed funksjonelle språk. Tiden har kommet for å peise på med mer funksjonalitet og en god del refaktorering. Her får jeg kjørt meg skikkelig på både Elm og Haskell

Artikkel: Typed up CRUD SPA with Haskell and Elm - Part 3: Routing

Blogserie som omhandler min ferd for å lære meg statiske sterkt typed funksjonelle språk. I denne episoden implementerer jeg routing i Elm frontenden

Artikkel: Typed up CRUD SPA with Haskell and Elm - Part 2: Persistence up and running

Blogserie som omhandler min ferd for å lære meg statiske sterkt typed funksjonelle språk. I denne episoden implementerer jeg persistens vha en god gammeldags relasjonsdatabase

Artikkel: Typed up CRUD SPA with Haskell and Elm - Part 1: Spike time

Blogserie som omhandler min ferd for å lære meg statiske sterkt typed funksjonelle språk. I serien tar jeg for meg utvikling av en CRUD applikasjon med Elm til frontend og Haskell for backend. Førte episode tar for seg en spike for å få en helt enkel basis på plass.

Artikkel: Minesweeper - a brief journey from JavaScript/React to Elm

Jeg tar utgangspunkt i en minesveiper implementasjon fra Christian Johansen i JavaScript/React og hviser hvordan man kan implementere det samme spillet i Elm. Bloggposten sammenligner flere implementasjonsdetajer og reflekterer kort om statisk vs. dynamisk typing.

Artikkel: ClojureScript - Performance tuning rewrite-cljs

Rewrite-cljs er mitt bibliotek for å traversere og omskrive clojure/clojurescript kode. I denne blogposten forteller jeg litt om hvordan jeg tunet ytelsen bl.a ved å komme nærmere jernet (JavaScript)

Artikkel: Showcasing rewrite-cljs - Parembrace for Light Table

En liten fortelling om stegene jeg gikk igjennom for å lage en skikkelig paredit plugin for Clojure/ClojureScript i Light Table. Et nytt ClojureScript bibliotek ble unnfanget i processen.

Artikkel: Implementing a Clojure ns-browser in Light Table with React

Buzzword compliant post om hvordan man elegant kan bruke React.JS for implementering av view-logikk i Light Table. Posten går også i dybden på den grunnleggende arkiteturen i Light Table

Artikkel: Taming those pesky datetimes in a clojure stack

En liten erfaringsrapport med tips og triks for hvordan håndtere datoer i Clojure/ClojureScript i en tjeneste/lagdelt arkitektur

Artikkel: Securing Clojure Microservices using buddy - Part 4: Secure and liberate a service app

En blogserie hvor jeg ser på autentisering og autorisasjon i en clojure microservices arkitektur med bruk av Buddy. I del 4 ser vi på hvordan vi kan sikre en service app basert som benytter REST-biblioteket Liberator

Artikkel: Implementing a Clojure threading refactoring in ClojureScript using Light Table

En kort gjennomgang av hvordan man kan implementere en refaktoreringsfunksjon i Light Table vha clojure.zip

Artikkel: Securing Clojure Microservices using buddy - Part 3: Token revocation

En blogserie hvor jeg ser på autentisering og autorisasjon i en clojure microservices arkitektur med bruk av Buddy. I del 3 ser vi på mulige løsninger for å trekke tilbake tokens vha refresh tokens

Artikkel: Securing Clojure Microservices using buddy - Part 2: WebApp authentication and authorization

En blogserie hvor jeg ser på autentisering og autorisasjon i en clojure microservices arkitektur med bruk av Buddy. Del 2 handler om å bruk av tokens og cookies for autentisering og autorisasjon i en clojure web applikasjon.

Artikkel: Securing Clojure Microservices using buddy - Part 1: Creating Auth Tokens

En blogserie hvor jeg ser på autentisering og autorisasjon i en clojure microservices arkitektur med bruk av Buddy. Del 1 handler om å lage en service som generer signerte tokens for bruk i autentisering og autorisasjon.

Artikkel: Bootifying my ring app

[Boot.clj] (https://github.com/boot-clj/boot) er et spennende alternative til Leiningen for bygging av clojure applikasjoner. Jeg deler noen erfaringer med bruk av Boot.clj i et clojure ring prosjekt

Artikkel: A Groovy Light Table client - Step 5: Gradle dependencies in Light Table with dagre-D3

Del 5 i en blog serie hvor jeg beskriver stegene jeg tar for å forsøke å lage en dugandes Groovy plugin for Light Table. Del 5 kombinerer det rike api’et i Gradle og fleksibiliteten i Light Table til å vise dependency grafer vha D3. Kule greier !

Artikkel: A Groovy Light Table client - Step 4: Exploring new avenues with Gradle

Del 4 i en blog serie hvor jeg beskriver stegene jeg tar for å forsøke å lage en dugandes Groovy plugin for Light Table. Del 4 handler om implementasjon av Gradle støtte for uthenting og bruk av classpath, samt opplisting og eksevkvering av tasks

Artikkel: A Groovy Light Table client - Step 3: Running out of quick wins

Del 3 i en blog serie hvor jeg beskriver stegene jeg tar for å forsøke å lage en dugandes Groovy plugin for Light Table. Del 3 handler om noen små forbedringer for å gi en REPL lignende opplevelse med Groovy.

Artikkel: A Groovy Light Table client - Step 2: Evaluating Code

Del 2 i en blog serie hvor jeg beskriver stegene jeg tar for å forsøke å lage en dugandes Groovy plugin for Light Table. Del 2 handler om hvordan jeg får evaluert Groovy kode og vist resultater inline i Light Table.

Artikkel: A Groovy Light Table client - Step 1: Connecting the client

Del 1 i en blog serie hvor jeg beskriver stegene jeg tar for å forsøke å lage en dugandes Groovy plugin for Light Table. I denne posten beskriver jeg hvordan jeg kobler opp Light Table til en Groovy klient-prosess.

Artikkel: Getting my feet wet with Clojure using Light Table

En liten erfaringsrapport fra mine første steg med å skrive produksjonskode i Clojure ved bruk av Light Table IDE.

Artikkel: A groovy infatuation growing

Etter mange år med java begynte jeg så smått å bli litt lei. Det var jo mange andre språk på JVM plattformen der ute. Etter å ha jobbet med gradle en periode fikk jeg mer om mer sansen for Groovy.

Artikkel: Javascript testing in your JVM projects using Gradle and BusterJS

Hadde det ikke vært kjekt om du kunne inkludert javascript testing som en del av CI for JVM prosjektet ditt ? Gradle Buster Plugin to the rescue !