Vemund elsker SQL, selv om han låste 1,3 milliarder rader hos Finn en gang

- Jeg vil utfordre flere til å skrive ren SQL, sier CTO Vemund M. Santi i OiikuLive.

CTO Vemund M. Santi i OiikuLive snakker varmt om SQL, og iskaldt om Safari. 📸: Privat
CTO Vemund M. Santi i OiikuLive snakker varmt om SQL, og iskaldt om Safari. 📸: Privat Vis mer

Hvordan ble du utvikler? 📚

Helt siden jeg var liten har jeg alltid likt problemløsning, og spesielt logiske eller tekniske problemer. Ting skulle helst plukkes fra hverandre, og settes sammen i mer eller mindre samme tilstand.

Derfor ble det ganske tidlig klart at jeg ville bli en form for ingeniør, bare ikke hva slags type ingeniør.

Vekkelsen kom i løpet av andreåret på videregående, hvor jeg for første gang prøvde meg på programmering. Min eldre mattelærer sørget for at skolen kunne tilby IT1 og IT2 som programfag, på tross av en noe… ehm… manglende erfaring innen programmering.

Til tross for denne noe varierende dybdekunnskapen hadde han et utrolig engasjement og iver etter å skape og lage nye ting, spesielt morsomme animasjoner i Flash. Engasjementet hans smittet av, og nå sitter jeg her 10 år senere og har det like gøy med å skape ting som min gode, gamle mattelærer hadde.

Hva jobber du med for tida? 💪

Jeg jobber i OiikuLive, en liten startup hvor vi lager en online plattform for digital-/hybrid-event, perfekt for webinarer og arrangementer på tvers av landet.

Naturlig nok går det dermed mye i videostrømming-teknologi som WebRTC og alt det medfører av kodeker, videodistribusjon og sanntidskommunikasjon. WebRTC har vært implementert i varierende grad i de fleste store nettlesere i lenger tid nå, men det fantes faktisk ikke en offisiell, anbefalt standard før januar i 2021. Dermed går det en del tid på å skrive kode som tar høyde for ulik oppførsel i ulike nettlesere (Ja, jeg ser på deg, Safari…).

- Det hender også at jeg er til stede på arrangementer som bruker OiikuLive som plattform, hvor jeg styrer sendingen og drar i trådene underveis, forteller CTO Vemund M. Santi i OiikuLive. 📸: Privat
- Det hender også at jeg er til stede på arrangementer som bruker OiikuLive som plattform, hvor jeg styrer sendingen og drar i trådene underveis, forteller CTO Vemund M. Santi i OiikuLive. 📸: Privat Vis mer

Ellers er plattformen skrevet i TypeScript (både frontend og backend) og Vue 3.

Sistnevnte er strengt tatt ute som en stabil utgivelse, men fortsatt henger store deler av økosystemet igjen på alpha-/beta-stadiet. Jeg gleder meg til dagen hvor jeg ikke lenger har noen “-alpha.0”- eller “-beta.5”-endinger i versjonsnummeret til pakkene i prosjektet, men slik det går nå, så legger jeg til beta-pakker raskere enn jeg klarer å fjerne dem.

Helt i bunn ligger gode gamle PostgreSQL; en bunnsolid databaseløsning som passer til de fleste bruksområder.

SQL er kode på samme måte som JavaScript, Kotlin eller Go, og kan gjøre utrolig mye prosessering med kun noen få linjer. Generelt vil jeg utfordre flere utviklere til å ta steget bort fra et trygt og godt ORM til å skrive litt ren SQL i ny og ne. Med litt trening kan man slanke bort veldig mye kode på serveren sin og erstatte det med en elegant spørring, i stedet.

Som eneste rene utvikler i OiikuLive berører jeg de fleste av disse teknologiene hver dag, ettersom de ulike delene passer best til å løse ulike deler av et problem. Den siste uken har jeg eksperimentert med animasjoner og gjenbruk av DOM-elementer i Vue 3, som mildt sagt har vært en tålmodighetsprøve (igjen så ser jeg på deg, Safari…).

«Generelt vil jeg utfordre flere utviklere til å ta steget bort fra et trygt og godt ORM til å skrive litt ren SQL i ny og ne.»

Hvordan ser en typisk arbeidsdag ut for deg? ☕

Jeg er generelt glad i å omgås andre fysisk, så som regel er jeg å finne på kontorene våre nederst i Rådhusgata. Problemløsning smaker alltid best med en kaffekopp i hånda, så du finner meg ofte på veien mellom kaffemaskinen og pulten min.

I ny og ne er jeg verken ved kaffemaskinen, pulten min eller et sted midt mellom, men hjemme på hjemmekontor. Det passer bra om jeg vet nøyaktig hva jeg skal gjøre, og kun trenger tid og ro til å få skrevet det ned som kode.

- Jeg er generelt glad i å omgås andre fysisk, så som regel er jeg å finne på kontorene våre nederst i Rådhusgata, sier CTO Vemund M. Santi i OiikuLive. 📸: Privat
- Jeg er generelt glad i å omgås andre fysisk, så som regel er jeg å finne på kontorene våre nederst i Rådhusgata, sier CTO Vemund M. Santi i OiikuLive. 📸: Privat Vis mer

Vi har generelt lite møter, men i slike tilfeller tar vi selvfølgelig møtene på OiikuLive, så vi får testet ut produktet vårt jevnlig.

Det hender også at jeg er til stede på arrangementer som bruker OiikuLive som plattform, hvor jeg styrer sendingen og drar i trådene underveis. Å være med “ut i felten” er veldig god erfaring hvor man kan få input både publikum og teknikere som står for bilde, lys og produksjon.

Å sørge for at plattformen er enkel å koble opp for tekniske brukere som er vant til andre systemer er vel så viktig som å ha et elegant grensesnitt i en nettleser.

Hva er ditt beste tips til et verktøy andre burde begynne å bruke? 🔨

Med lite utviklingsressurser er det desto viktigere å være produktiv med den tiden man har. Dermed er utvikleropplevelsen i fokus, hvor alt som kan automatiseres skal automatiseres.

Oppsett av prosjektet skal være raskt og smertefritt på alle plattformer, og prodsetting av ny kode skal være fullautomatisert med kjøring av tester, bygging av nye containere, gradvis utrulling av ny versjon og automatisk tilbakerulling dersom det oppstår feil med den nye applikasjonen.

For å få til alt dette på en sømløs måte er “test containers” helt uvurderlig. Testcontainers er et bibliotek som er implementert i flere språk og brukes til å spinne opp containere hvor man kan tilby tjenester som applikasjonen din er avhengig av.

«For å få til alt dette på en sømløs måte er “test containers” helt uvurderlig.»

For eksempel trenger noen av våre microservices en Postgres-database, og som en del av test- og dev-koden starter en container med Postgres som man så benytter. Som en ekstra bonus slettes den “lokale” databasen hver gang man starter serveren på nytt, så man alltid har et ferskt utgangspunkt uten tidligere endringer man senere har glemt.

Med dette oppsettet er alt en ny utvikler trenger å skrive:

yarn
yarn start

...så har man installert og startet alle applikasjoner i monorepoet, uten å måtte installere andre avhengigheter lokalt på sin egen utviklermaskin. Digg!

Hva har du lyst til å lære mer om framover? 🦉

Jeg har akkurat blitt ferdig med å lese The Art of PostgreSQL, som jeg absolutt kan anbefale dersom man ønsker å bli bedre på å skrive SQL og samtidig få mange tips og triks om hva som finnes av funksjonalitet i moderne SQL-databaser.

Jeg pleier å delta på ulike kode-julekalendere rundt adventstiden, og forrige jul satte jeg som mål at jeg skulle løse hver luke i et nytt programmeringsspråk.

Dette viste seg å være en dårlig idé, ettersom det endte med at jeg brukte nøyaktig samme programmeringsstil i alle språkene, og lærte egentlig ingenting om filosofien som lå bak designvalgene og mulighetene til språket.

Nå har jeg heller satt meg et mål at jeg skal lære et nytt språk, og lære det godt, før jeg eventuelt prøver meg på noe annet. Språket denne gangen er Clojure, et funksjonelt språk som kjører på JVM. Ved første øyekast kan alle parentesene virke litt skumle, men så fort man kommer inn i det kan man gjøre veldig mye med veldig lite kode.

Hva er det verste du kan bli spurt om på jobben? 🔥

Det er nok hver gang jeg må skrive kode som er helt spesifikk til en enkelt nettleser, eller enda verre - en eldre, spesifikk versjon av en enkelt nettleser.

Spesielt innen animasjoner og video finnes det mange slike tilfeller, hvor man må jobbe rundt bugs eller andre begrensninger som fortsatt finnes i aktivt brukte nettlesere.

En av mine “favoritter” er da jeg måtte legge til en 3D-forskyvning på 0 piksler i alle retninger for å kunne runde av et hjørne på et video-element.

Hvilken nettleser var det? Du gjettet riktig: Safari!

Når ble du sist flau, nervøs eller stressa for noe på jobb? 😅

Jeg blir sjeldent flau eller stressa på jobb, man må bare ha lit til at systemet gjør som det får beskjed om, og ruller tilbake dersom noe skulle vise seg å være galt. Likevel kan det jo alltids skje (og det kommer det definitivt til å gjøre!), men da får man spandert en kanelbolle etterpå, så blir det ikke like kjipt i etterkant.

Min største utvikler-tabbe skjedde mens jeg fortsatt jobbet hos Finn.no, hvor jeg var en del av teamet som håndterte all data relatert til selve annonsene (tittel, beskrivelse, bilder, skostørrelse og så videre…).

«Lite visste jeg at denne databasen låste rader og tabeller på en annerledes måten enn Postgres.»

Finn.no var midt i en limbo hvor man gikk over fra en stor monolittisk database til et distribuert system med flere databaser innen ulike domener. De fleste systemer var i en slags overgangsfase, men leste fortsatt annonsedata fra denne store databasen.

Jeg hadde fått i oppdrag å manuelt endre data på noen annonser som hadde gått i lås, og gjort klart et SQL-query for å oppdatere de 11 annonsene det gjaldt. Lite visste jeg at denne databasen låste rader og tabeller på en annerledes måten enn Postgres.

Det endte med at jeg tok en eksklusiv lås på en tabell med over 1.300.000.000 rader i litt over tre minutter, som førte til at alle systemer som hadde noe som helst å gjøre med annonsedata (og på Finn.no sier det seg selv at det er en del…) ikke fikk lest noe som helst.

Så og si alt var nede så lenge det pågikk, og kanelbollen smakte godt dagen etter.

Hva synes du norske utviklere bør bli flinkere på? 🙏

Sånn generelt skulle jeg ønske at utviklere løftet blikket litt oftere for å se helheten i det de er med på å lage.

Det er fort gjort å falle ned i fellen hvor man kun løser problemet man er blitt satt til å gjøre, og ikke tar hensyn til hvordan resten av systemet skal videreutvikles og fungere på sikt.

Man trenger ikke gå helt inn i rollen som fullstack-utvikler eller arkitekt, men det å kommunisere hvor man skal i et helhetlig perspektiv sparer en for mye merarbeid og frustrasjon i fremtiden.