NDC Oslo 2018

Dette var min første tur til NDC og jeg sitter igjen med mange inntrykk og mye nytt faglig påfyll.

Jeg dro nedover til Oslo rett etter jobb tirsdag og benyttet anledningen til å få noen mil på motorsykkelen. Etter drøye 7 timer på “hesteryggen” var det godt å finne hotellet og slappe av litt.

Konferansen besto av tre dager tettpakket med foredrag delt opp i flere spor hvor man måtte velge det som virket mest interessant. Det var flere tilfeller hvor jeg skulle ønske jeg hadde Hermines tidsvender slik at jeg kunne fått med meg mer. Jeg valgte stort sett tema som er relevante til det jeg jobber med til daglig, men også noen av pur egeninteresse. Dette er en oppsummering av det jeg sitter igjen med etter disse dagene i Oslo.

Onsdag

Første dag av konferansen startet med registrering kl. 8. Jeg var på plass i rett tid og etter en kjapp scan av billetten fikk jeg utdelt konferansepass og en NDC-genser før jeg vandret videre til stand-området i underetasjen. Det var et stort antall stands og jeg fikk ikke sjekket ut alle, men jeg var innom blant annet RavenDB som ga et godt inntrykk.

Keynote

Konferansen ble sparket igang av Mads Torgersen som hadde en kjempebra keynote basert på 50 år med objektorientert programutvikling. Han var innom mange tidligere språk som la grunnlaget for det vi kjenner i dag og fortalte litt om de personene som var viktige bidragsytere på den tiden. En morsom og lærerik tur tilbake i historien.

C# 8

Mads Torgersen fulgte på med et foredrag om C# (han er lead designer for språket) sammen med mannen bak NodaTime, Jon Skeet.

Neste versjon av C# vil få noen kule og nyskapende features som jeg tror vil bli nyttige i min arbeidshverdag. De viste noen kodeeksempel i en preview-versjon og dette er noe av det som kommer:

Nullable reference types

Det dette betyr, er at referansetyper (objekter) kan spesifiseres som nullable (med ?) eller ikke. Er de ikke nullable, skal de i utgangspunktet aldri kunne være null. Dette medfører selvsagt en breaking change i eksisterende kodebaser, så “feilen” med å sette en ikke-nullable type til null gir kun en advarsel, ikke kompilator-feil. Likevel er dette en fin indikator som kan hjelpe med å rydde opp mange bugs som ellers kunne resultert i NullReferenceException.

Pattern matching

Vi har allerede pattern matching i C#, men nå skal switch-blokker få seg en oppfriskning. Det skal bli mulig å ha pilfunksjoner og droppe “case” for å forbedre lesbarheten, og det åpnes for å skrive switch-blokker med boolske uttrykk i stedet for å velge noe å “switche over”.

Index type

For å slippe å skrive aritmetikk for å finne index av slutten på en tabell, skal man kunne skrive f.eks. ^1 i stedet for arr.Length - 1. Denne syntaksen returnerer et Index-objekt som kan brukes i tabell-oppslag og i range-operatører som f.eks. 1..^1.

I tillegg kommer noe de kaller “extension everything” og async streams for å nevne noe. Mye å glede seg til her.

Implementing the Clean Architecture in .NET Core

Etter et teknisk språk-foredrag valgte jeg å gå på noe mer konseptuelt arkitekt-rettet tema. Ian Cooper brukte et .NET Core-prosjekt som utgangspunkt for å snakke om lagdeling og gode mønster for å oppnå løs kobling og høy kohesjon. Han demonstrerte hvordan man kan bruke et fasade-mønster for å gjemme vekk kompleksiteten og forenkle grensesnittet .NET Core-applikasjonen forholder seg til.

Internals of Exceptions

Dette var foredraget med tyngst innhold og Adam Furmanek brukte timen han hadde til rådighet flittig for å ta oss igjennom forskjellige metoder for å håndtere exceptions på et lavere nivå, da høynivåspråk som f.eks. C# ikke lar oss fange feil som kastes av operativsystemet (blant annet StackOverflowException). Han viste kodeeksempler i C++ som brukte funksjoner som “structured exception handling” og “vectored exception handling” for å takle feil som vanligvis ville ha krasjet programmet.

Et annet viktig tips han kom med i forbindelse med exceptions var angående async/await i C#. Hvis man ikke bruker await, noe som ikke er utenkelig dersom man har en async-metode som ikke returnerer noe, blir heller ikke exceptions som den metoden kaster fanget opp av en try-catch.

Fastware

Etter datamaskiner fikk mer prosesseringskraft enn vi vet hva vi skal bruke den på, har utviklere blitt mer avslappet med tanke på optimalisering og effektiv kode. Som Andrei Alexandrescu påpekte, er dette på vei til å snu med IoT-dingser og andre små datamaskiner som ikke har den samme kraften.

Andrei så på kodeeksempler av algoritmer og påpekte hvor viktig det er å måle effektiviten til koden for å i det hele tatt kunne forbedre den. Man må trekke koden ut av applikasjonen og plassere den på testbenken før man så kan endre bit for bit, måle forskjellen (etter hver enkelt endring) og teste ut de ideer man måtte ha for forbedring. Han viste til slutt hvordan en endring fra branching (if-else) til en versjon med kun aritmetikk kunne bedre ytelsen kraftig. Alt i alt veldig inspirerende og lærerikt.

What I Talk About When I Talk About Cross Platform Development

Med en bakgrunn i computer vision, tok Adi Shavit oss gjennom en arkitektur for kryssplatformutvikling med C++ i bunn. Han viste hvordan man gjennom fornuftig lagdeling kan implementere forretningslogikk uten å ta hensyn til hvor og hvordan det skal tas i bruk. Med C-wrappere kan man ta den samme kodebasen inn i prosjekter av så og si alle slags prosjekter, da de fleste platformer har en C-kompilator.

Adi viste hvordan man kan bruke C-wrapperen i Android-prosjekter gjennom NDK og på web med emscripten. Til slutt demonstrerte han et C++ program som endret farger i et videoklipp direkte på en nettside via javascript. En detaljert og hands on tilnærming til deling av kodebase uten tredjeparts rammeverk.

Productivity Bots

Som siste foredrag for dagen valgte jeg å høre på Marcus Bristol fra Pushpay prate om diverse Slack-boter de har implementert for å øke produktiviteten og hjelpe dem under utvikling av appen de leverer for mobilbetaling.

Jeg syntes det var spesielt morsomt å høre andres erfaringer med å utvikle boter, da jeg har vært med på å lage en bot selv. Marcus gikk ikke inn på detaljer i koden siden det var så kort tid, men han nevnte noen utfordringer som vi også har møtt på i vårt prosjekt.

De bruker boter til alt fra notifikasjoner fra CI-systemer til utrulling av nye versjoner til produksjon. Det var tydelig nyttige funksjoner de hadde gjort seg avhengige av, men løsningene bar preg av å ha blitt utviklet internt for intern bruk. Jeg tok med meg noen gode ideer fra foredraget og vil ha det i bakhodet når jeg jobber videre på boten vår.

Til slutt nevnte Marcus Microsofts Bot Framework, noe jeg ikke hadde hørt om før. Vi fikk en kjapp intro og det var veldig spennende. Microsoft har også utviklet noen gode verktøy rundt rammeverket for å teste ut funksjonaliteten i boten man lager.

Etter en lang dag med mye input var det godt å finne hotellet og slappe av litt med en god øl, noe salt og litt bot-programmering.

Torsdag

En god natts søvn fikk ladet opp batteriet og det var klart for en ny dag med muligheter for å lære nye ting. Foredragene holdt på fra kl. 9.00 til 18.40 og ble etterfulgt av live musikk og gratis pils på NDC-festen. En fin avslutning på nok en innholdsrik dag. Foredraget av Einar Otto Stangvik om det mørke nettet står igjen som den størte opplevelsen fra denne dagen.

These are a few of my favourite (Android) Things

Android Things er en egen utgave av Android ment for å kjøre på IoT-dingser. Det vil si at man kan bruke kjente verktøy og utviklingsmiljø til å programmere mot andre typer grensesnitt enn man vanligvis har på en mobiltelefon.

Det er støtte for forskjellige platformer, deriblant Raspberry Pi 3, noe som gjør det veldig tilgjengelig. Man bruker GPIO-portene til å koble på sensorer og diverse annet eksternt utstyr, og det finnes et stort utvalg drivere skapt av utviklermiljøet rundt Android Things. Marcos Placona viste fram forskjellige prosjekter han hadde jobbet på, blant annet en ringeklokke som ringte opp telefonen hans når noen ringte på døra.

En av fordelene med å bruke Android på IoT-dingser er at man lett kan sette opp over-the-air (OTA) for å automatisk oppdatere dingser som er tilkoblet internett.

2018 - The Year of Web Components

Web components har vært et tema lenge, men som Dominik Kundel forklarte, er det først nå vi ser støtte for det i nettlesere. Specen er delt opp i flere deler, men omhandler i hovedsak muligheten til å spesifisere dine egne HTML-elementer med skreddersydd logikk og avgrenset styling.

Håpet er at slike web-komponenter kan erstatte duplikater vi ser i dag, der vi har samme komponent for Angular, React, osv. Det finnes allerede flere metoder for å konvertere rammeverk-spesifikke komponenter, og prosjekter som Stencil (fra Ionic) som gir god tooling når man jobber med web components.

The F# Path To Relaxation

F#s lead designer, Don Syme, holdt et foredrag om språket sitt. Han snakket litt om historien til språket og hvordan det har klart å blitt såpass populært.

Funksjonell programmering var tydelig et hovedtema på NDC i år og F# var en gjenganger. Det at språket er en del av .NET-platformen gjør at det er enkelt å ta i bruk sammen med C#-kode man skulle ha fra før. Don var opptatt av at det ikke skulle være to leire, OO og FP, men heller jobbe mot en syntese som gir oss det beste resultatet ut ifra to motsetninger.

VueJS yet another JS framework?

Lars-Martin Hejll holdt et bra foredrag om VueJS og hvordan det startet som et enmannsforetak med et mål om å lage noe som det var enklere å komme i gang med. Teamet bak rammeverket er nå større (rundt 20 personer), men utviklingen er fortsatt basert på sponsorfinansiering.

Rammeverket spiller fint på lag med web components og har fått massiv interesse fra utviklermiljøet. Definitivt noe å sjekke ut ved neste mulighet.

Dates and times aren’t that hard - honestly!

Jon Skeet er en veldig flink foredragsholder og denne gangen var temaet tid - noe han som utvikler av NodaTime kjenner godt. Det er mange feller man kan gå i når man prøver å håndtere tid og menneskehetens historie med tid og kalendere har ikke gjort det enkelt for utviklere.

Han gikk igjennom eksempler på hvor det er utfordrende å jobbe med dato og tidspunkt, men presiserte hele tiden at det ikke trenger å være så vanskelig. Jeg vet ikke om han helt fikk fram poenget, for jeg satt igjen med en følelse av at man er prisgitt gode bibliotek for å i det hele tatt kunne jobbe med tid på en fornuftig måte siden det er såpass komplisert.

Hacking the Dark Web

Konferansens beste foredrag etter min mening ble holdt av Einar Otto Stangvik. Han viste oss metoder han hadde brukt for å spore personer på det mørke nettet som deler overgrepsmateriale.

Det var avanserte metoder og teknisk interessante løsninger, men det som ga stekest inntrykk var den store psykiske påkjennelsen han kjente på gjennom dette arbeidet. Jeg setter utrolig stor pris på personer som Einar Otto som klarer å ta på seg det ekstremt viktige, men utrolig vanskelige, arbeidet som innebærer å sette seg inn i de verste miljøet på nettet.

Av teknologi viste han konkrete metoder for å fingerprinte aktører på nettet, med pakkesporing og søk i datadumper fra store forum. Foredraget var veldig sterkt og den massive applausen han fikk var et tydelig bilde på den respekten og beundringen vi i salen satt igjen med.

Containers in Production: It’s Like Orchestratinng Cats

David Ostrovsky fra Proofpoint snakket om noen av prosessene de var igjennom da de valgte å sette Docker-kontainere i produksjon. Det var mange interessante problemstillinger man må ta hensyn til - det er ikke bare å kjøre “docker run” og være ferdig med det. Man må tenke på monitorering og vedlikehold, orkestrering og sikkerhet for å nevne noe.

Han snakket om forskjeller mellom Docker swarm og Kubernetes, og hva som er støttet av forskjellige cloud-løsninger. Det kom tydelig fram at dette er en stor oppgave som ikke kan tas lett på.

Fredag

Konferansens siste dag var litt preget av festen kvelden før, men med ubegrenset tilgang på kaffe gikk det greit å holde konsentrasjonen oppe gjennom dagen. Det var spesielt morsomt å høre på mitt tøffe søskenbarn Tale holde foredrag foran en fullsatt sal.

Refactoring to Functional Style

Mange av FP-foredragene var veldig pro-FP og anti-OO, men Venkat Subramaniam hadde en annen tilnærming som jeg likte bedre. Han tok utgangspunkt i “tradisjonell” imperativ kode som vi er godt kjent med og viste hvordan man ved å bruke en funksjonell tilnærming kan få en mye ryddigere og lesbar kode selv uten å skifte språk.

Det er en annen måte å tenke på da man i stedet for å beskrive hva og hvordan det skal gjøres kun fokuserer på hva vi vil ha som resultat, altså en deklarativ kode hvor hensikten kommer tydelig fram.

Fordi det er en ny måte å tenke på, er det vanskeligere å skrive funksjonell kode, men koden blir tydelig mer lettlest og enklere å vedlikeholde og teste.

Elm: A functional love story

Mitt søskenbarn, Tale Prestmo (så stolt), hadde en flott beskrivelse av hva Elm er og hvorfor hun ble så glad i språket. Det minnet litt om mine følelser for Go, selv om de to språkene er veldig forskjellig forøvrig.

Elm er et rent funksjonelt språk, så man har ikke de kjente variablene og løkkene man er vant til, noe som kan være en stor overgang, men koden blir veldig lesbar, enkel å refaktorisere og en drøm å teste da den består av små funksjoner som alltid oppførerer seg likt så lenge de får samme input.

Språket kompileres ned til javascript og er brukt i frontend-løsninger. Absolutt noe å teste ut i framtiden.

F# and Fable: re-think web development

En annen måte å bruke funksjonell programmering til frontend-utvikling ble presentert av Maxime Mangel. Han viste hvordan man med F#, Fable og Elmish kan lage komponenter på funksjonelt vis som gir større mulighet til å avdekke problemer ved kompilering heller enn når koden kjører i nettleseren.

Han viste eksempler på Model-View-Update-arkitekturen i Elm og demonstrerte hot reloading og state playback som er mulig siden all state blir håndtert på et sentralt sted. Dette var veldig stilig og åpner nye muligheter som jeg ikke har sett så mye på tidligere.

Lightning Talks

  • Håkan Silfvernagel tok oss med på en tur i historien til AI og snakket om hvordan det har utviklet seg fra 50-tallet med sine opp- og nedturer. Nå er det et hot tema igjen og det er forskjellige meninger om farene ved mer avansert AI.
  • Tale Prestmo var på banen igjen og snakket om masteroppgaven sin som handlet om maskinlæring brukt til å finne et best mulig treningsopplegg for personer med smerter i korsryggen, noe som er et utbredt problem.
  • Joakim Lehn beskrev de 4 forskjellige maskinlæringskategoriene og hvilke problemområder de kan brukes på. Han avsluttet med et eksempel fra AlphaGo som imponerende nok lagde en bot som uten noe læringsgrunnlag klarte å bli verdens beste Go-spiller.
  • Shokoofeh Hesari jobber som QA-ingeniør og snakket om hvordan de bruker bildesammenligning for å teste UI i en applikasjon hvor det er kritisk at det brukeren ser ikke har bugs.
  • Henrik Stene tok for seg utfordringen med å deploye nye versjoner av API og hvordan man kan forsikre seg om at man ikke brekker noe for brukere av APIet. Han var innom Consumer Driven Contracts implementert med noe som kalles Pact for å la brukere spesifisere en spec for hvordan de forventer at APIet skal oppføre seg. Dette kan så brukes i automatiserte tester under utvikling.

Implementing Event-Driven Microservices architecture in Function Language

Nikhil Barthwal snakket om kommunikasjon mellom micro services via en message broker. Han påpekte hvor viktig det er at hver service har sin egen database for å oppnå lav kobling mellom de forskjellige delene av systemet, med de utfordringer det medfører.

I et system av uavhengige komponenter blir det lettere å jobbe med deler uten at det påvirker alt annet. Ved bruk av funksjonell programmering kvitter man seg med state ved å ha hovedsaklig rene funksjoner, noe som er avgjørende for å kunne skalere.

Everything is Cyber-broken

Som en avslutning på NDC valgte jeg å høre på Scott Helme og Troy Hunt i en avslappet diskusjon rundt sikkerhet på internett, med hovedfokus på HTTPS. De tok for seg selverklærte “sikkerhetseksperter” som har kommet med forskjellige utsagn, og slaktet de på et mer eller mindre profesjonelt nivå til alles fornøyelse.

Det var en underholdende finale på tre intense dager med mye input. Hodet var fullt, så det var helt greit at det ikke var så teknisk.

Til slutt vil jeg bare takke for et kjempebra opplegg. Som min første opplevelse av NDC ble jeg veldig imponert. Arrangementet var vel gjennomført, maten var god, standene hadde interessant innhold og foredragene holdt et bra nivå. Jeg kommer gjerne igjen!