Om katedraler, murstein og mørtel

24.04.2024

Poenget med all software vi skriver, er at det leveres en eller annen menneskelig verdi i andre enden. Men hvem er det som skaper verdien? Software eller brukeren?

Les artikkelen

Kronjobber og den forsvunne timen

03.04.2024

Når vi først skal stille klokka en time fremover, er nok B-mennesker glade at det skjer natt til søndag. Det gir dem mulighet å redusere hodepinen som dukker opp på første arbeidsdag med sommertid. Men hodepine på grunn av sommertid kan også A-mennesker få, spesielt om de er utviklere og er ansvarlige for programmer som skal kjøre på spesifikke tidspunkt. La oss se litt på hva som skjer (eller ikke skjer) når maskinen stiller klokka fram en time.

Les artikkelen

Kjøretid med cacheproblemer

07.03.2024

Selv om kjøretidsanalyser av algoritmer er estimater, har estimatene blitt dårligere og dårligere opp gjennom åra. Nå kan O(n log n) være raskere enn O(n), uansett hvor stort datasettet ditt er.

I denne bloggposten ser vi på hvorfor det har blitt sånn, hvordan man prøver å fikse opp i dette, og hva du som utvikler bør gjøre for å finne ut av hvilken algoritme som er raskest for ditt formål.

Les artikkelen

Strukturert samtidighet - Veien til et bedre liv

21.02.2024

Coroutines i Kotlin er bygd rundt konseptet strukturert samtidighet hvor asynkrone prosesser struktureres i et hieraraki med definerte regler for oppførsel.

Hva om vi løfter denne tanken til et høyere nivå og strukturerer applikasjonene vi bygger på samme måte ? Betyr dette at alle avhengigheter grupperes og inkluderes i en livssyklys som tar høyde for feil-scenarioer ? Og hvordan fungerer dette i en skykontekst hvor vi er innefor rammene av Kubernetes sitt økosystem ?

Les artikkelen

Tiger Team eller Tidy Team?

31.01.2024

Hva er best - lage noe raskt eller lage noe som tåler tidens tann?

… eller ja takk begge deler?

Les artikkelen

Nøkkelen til robuste APIer

17.01.2024

Har du noen gang opplevd frustrasjonen av en ustabil internettforbindelse når du prøver å bestille noe online, bare for å ende opp med flere kopier av det samme produktet? I en verden hvor nettet er ustabilt og feil kan oppstå når som helst, er det viktig å ha robuste APIer.

I denne bloggposten dykker vi ned i konseptet med idempotente APIer - en nøkkel til å bygge mer robuste og brukervennlige systemer. Vi utforsker hva idempotens betyr, hvorfor det er viktig, og hvordan det kan implementeres i dine API’er. Bli med oss og lær hvordan du kan forbedre brukeropplevelsen og unngå unødvendige feil i dine systemer.

Les artikkelen

Bluetooth Low Energy API

10.01.2024

Bluetooth Low Energy (BLE) høres kanskje ut som noe klurete lavnivå-greier for dingser. Jeg synes absolutt ikke det. BLE har en ganske enkel og elegant måte implementerterer data-endepunkter på, og har inspirert meg i tanker rundt superenkelt API design generelt.

Dette utarbeida og utbredte API-designet brukes på milliarder av ting, og du bruker det sannsynligvis daglig enten du er klar over det eller ikke.

Les artikkelen

Advent of Code-bot

27.12.2023

Da var årets Advent of Code akkurat over. For noen er denne programmeringskonkurransen et viktig aspekt av adventstiden. Les om hvordan man kan lage en bot som poster topplisten til Slack hver dag!

Les artikkelen

Legg dokumentasjonen sammen med kildekoden

20.12.2023

Kildekode uten versjonskontroll er utenkelig, men hvordan forvalter du ideer, beslutninger, erfaringer eller andre gullkorn i applikasjonen din?

Er du avhengig av noen nøkkelpersoner som husker alt? Ligger gullet begravet i hundrevis av jira-saker som snart er glemt? Eller har du som mange andre en overflod av Confluencesider med en salig blanding av AS-IS, TO-BE, WAS eller MAYBE beskrivelser?

Jeg vil slå ett slag for at gullet bør følge kildekoden. La all applikasjonskunnskap som kan gjøres utdatert med en commit ligge sammen med kildekoden.

Les artikkelen

Et juleønske

13.12.2023

Programmeringsspråk, biblioteker og rammeverk preger stillingsannonser, artikler og konferanser i bransjen vår. Forståelig nok – vi er tross alt utviklere. Likevel, om jeg får ønske meg én ting til jul, er det at vi vier litt mer oppmerksomhet til det vi faktisk bruker teknologien til.

Les artikkelen

Gammel hund og nye triks

06.12.2023

Java er et konservativt språk som verdsetter bakoverkompatibilitet over fancy ny syntaks. Vi programmerere elsker å velte oss i skinnende nye features, men om du har drevet med utvikling en stund, så vet du også å sette pris på stabilitet. Java 21 ble akkurat sluppet, og da er det verdt å ta en kikk på hvordan språket har utviklet seg i det siste.

Les artikkelen

Snasen rutehåndtering i Kotlin med Arrow.kt

29.11.2023

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.

Les artikkelen

Tilstand i URL

22.11.2023

En ting vi liker å diskutere på frontend-utvikling er hvordan tilstand (state) skal behandles. Skal man ha all tilstand lagret globalt på et slags toppnivå? Skal man transformere noe før det sendes til UI-komponentene? Når er det greit med lokal tilstand i en komponent? I denne posten forklares et slags mønster som jeg synes fungerer veldig bra for søkesider.

Les artikkelen

Lagre JSON-objekter i postgresql!?

15.11.2023

De aller fleste av oss som bruker postgres bruker det som en vanlig relasjonell database med skjemaer for det vi vil lagre. Men visste du at du kan slippe unna de strenge skjemaene ved å bruke den innebygde støtten for JSON i postgres? Og det er ikke så dumt som det kanskje høres ut heller!

Les artikkelen

Distribuert eller sentralisert Helse-IT?

08.11.2023

Distribuerte løsninger basert på åpne standarder vs sentraliserte og proprietære løsninger - hva er fordelene og ulempene? I Norsk helsevesen har de prøvd det meste - la oss se litt på effekten av forskjellige strategier

Les artikkelen

Rust makroer

25.10.2023

Jeg antar at du har hørt skrekkhistorier om makroer? De påstås å være kryptiske, vanskelige å forstå og de er lett å misbruke.

Jeg tenkte jeg skulle vise et eksempel på en makro jeg har skrevet og brukt i ett prosjekt for å se hvordan en makro kan se ut i Rust. Etterpå kan vi revurdere om denne påstanden holder vann.

Les artikkelen

En fagdag i Kodemaker

20.10.2023

Kodemaker har ofte fagdager, hvor vi samles, lærer nye ting og har det gøy sammen. Denne gangen tar vi dere med på en typisk fagdag, for å gi innblikk i hvordan vi gjør det hos oss.

Les artikkelen

Rømme fra parantesene

04.10.2023

Clojure, og lisp har en forbannelse; parantesene skremmer bort folk

(((bø(((((((((((( 😱)))))))))hoho))))))

Dette blir en kort post, men la oss se på litt kode som gjør det mer behagelig å skrive og å lese kode i Clojure.

Les artikkelen

Fra bits og bytes til datastrukturer

27.09.2023

Hobbyprosjektene mine har en tendens til å være tett koblet med binære dataformater. Bli med å se hva som skjer under panseret når bytearrays leses til meningsfulle datastrukturer.

Les artikkelen

Et serverløst solsystem

20.09.2023

Her går jeg gjennom hvordan jeg har benyttet serverløs teknologi til å vise data fra solcelleanlegget mitt

Les artikkelen

Send meldingen dit den skal

13.09.2023

Har du en viktig beskjed? Pass på at den kommer frem dit den skal!

Les artikkelen

Kotlin Notebook

30.08.2023

Trenger du å teste ut noe kode uten masse oppsett? Har du et datasett du skulle analysert og visualisert? Eller kanskje du bare trenger å dokumentere en API-klient med kjørbare kodeeksempler? Da kan Kotlin Notebook være akkurat det verktøyet du trenger.

Les artikkelen

Livet som nyansatt i Kodemaker 💙

17.08.2023

Offisielt har jeg vært ansatt i Kodemaker i 6 måneder, men jeg føler selv det er lengre. Hvorfor? Fordi i Kodemaker blir man en av gjengen i det øyeblikket kontrakten er signert.

Les artikkelen

Go på kommandolinjen

04.08.2023

Go har blitt brukt til å lage mange av de verktøyene vi bruker i dag. Kubernetes, docker, prometheus og mye mer. Men hvordan passer det for å lage programmer til kommandolinjen? Og er det like bra som Rust som Odin beskriver i sin bloggpost?

Les artikkelen

Rust på terminalen

12.07.2023

Trenger du å lage et kommandolinjeverktøy, men er lei av grisete bash-script som er umulige å lese? Kanskje det går raskere å skrive det med et dynamisk språk som Python, men hva med å prøve et sterkt typet språk som Rust?

Les artikkelen

Førsteklasses analyse

06.07.2023

Web-analyse for 100% av brukerne uten begredelige samtykke-dialoger er mulig — her er hvordan.

Les artikkelen

Synliggjør tidstyvene med Server Timing

28.06.2023

Moderne nettlesere har fått veldig gode verktøy for å måle ytelse. I denne artikkelen ser vi på hvordan vi kan bruke Server Timing for å få mer innsikt i hvordan serveren vår oppfører seg.

Les artikkelen

Clojure sin 'elevator pitch' nr 1

21.06.2023

Etter å ha hoppet inn og ut av Clojure-prosjekter i de siste årene så har det blitt åpenbart for meg at det er særlig en ting jeg setter stor pris på i min arbeidshverdag med Clojure.

Hint; det er hverken lisp, funksjonell programmering eller immutability.

Les artikkelen

GDPR gjelder apper også

16.06.2023

Personvernforordningen (GDPR) begynner å få noen rettskraftige dommer. Jeg snuser i trafikken fra noen vanlige apper på telefonen min for å se om jeg finner noen potensielle syndere og kommer med tips for å unngå fallgruver.

Les artikkelen

Enklere og bedre modaler

07.06.2023

Alle moderne nettlesere har nå en innebygget byggekloss som hjelper oss å lage gode dialoger og modaler. Hvis du, som meg, slettes ikke var klar over det, så er dette innlegget for deg.

Les artikkelen

3 for 1

31.05.2023

Et produktutviklings-team trenger utviklere, testere, driftere, arkitekter, UX, sikkerhetsrådgivere, prosess-fasilitatorer, prosjektledere, business-strateger… Hvor mange mennesker blir det til sammen?
Ideelt? Kanskje 5 stk.

Les artikkelen

Kodemaker­mesterskap - hva er det?

24.05.2023

Det er viktig med sosiale sammenkomster i en tid med stadig mer bruk av hjemmekontor, og minst halvparten av befolkningen lever med telefonen tett klistret til ansiktet store deler av tiden. Vi i Kodemaker er en gjeng som er glade i sosiale lag. Jeg har tidligere skrevet en blogg om vår “Lunsjroulette” og nå skal jeg fortelle om et annet påfunn i Kodemaker.

Les artikkelen

Videomoji 🎥

10.05.2023

Alle elsker emojier 👻

Alle elsker video 🎥

Her får du begge deler, på en gang 🤯

Lær hvordan du kan kombinere webcam-APIet i nettleseren med emojier på en kreativ måte.

Les artikkelen

En serie hendelser i tid

03.05.2023

Hvorfor lære seg et nytt spørrespråk og innføre en umoden tidsserie-database bare fordi du har tidsseriedata? TimescaleDB er en extension til PostgreSQL som gir god støtte og ytelse for tidsseriedata.

Les artikkelen

Fra løsning til behov: En enkel teknikk

26.04.2023

Har du noen gang blitt bedt om å lage en knapp?

Jeg også.

Selv om det kan være fristende å bare implementere knappen, vil det som regel lønne seg å først ta et steg tilbake.

Les artikkelen

KotlinConf 2023

19.04.2023

I forrige uke var vi 10 Kodemakere som dro til KotlinConf’23 i Amsterdam, Nederland. Jeg glad for at jeg var en av de som dro.

Det oser av ambisjoner i Kotlin-community og det er vanskelig å ikke bli smittet. Her kommer min take-away og høydepunkter slik jeg opplevde det.

Les artikkelen

En Clojure-funksjon til å bli glad av

14.04.2023

Det er mye å glede seg over i Clojure: pure functions, immutability, og REPL, for å nevne noen store ting. I dag skal vi heller se på to bittesmå, men svært nyttige funksjoner.

Les artikkelen

Påskespesial: 11 artige detaljer fra brettspillet Y2K

05.04.2023

Nå blir det påskestemning her på Kodemaker-bloggen, med kvikklunsj, appelsiner og brettspill. Så spørs det om du får med familien på det hjemmesnekra brettspillet om software-utvikling jeg har laget.

Les artikkelen

Tilbakeblikk på JavaZone 2022

29.03.2023

Påsken står for døren, og flere Kodemakere er snart i mål med abstract for JavaZone 2023. Hva skal du med påskekrim når vi har tilbakeblikk på JavaZone 2022?

Les artikkelen

Løs det riktige problemet

18.03.2023

Jeg elsker å løse oppgaver. Det gir meg mestringsfølelse og skaperglede. Når du må sette deg inn i en problemstilling og så eksponere det du har forstått (og misforstått) gjennom den koden du skriver, så lærer du fort.

… men det er ikke alltid effektiv bruk av tid.

Jeg har min egen modell som hjelper meg til å forstå viktige sammenhenger og effektivisere skapergleden min.

Les artikkelen

Deklarativ validering av json i TypeScript

15.03.2023

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.

Les artikkelen

ASCII til emoji

08.03.2023

Hvordan gjør du et bilde om til ASCII med webteknologi?

Les artikkelen

25 kroner

01.03.2023

Din egen webserver på splitter ny hardware til 25 kroner.

Les artikkelen

Dumme klienter

22.02.2023

Dette ser ut til å ha blitt et kåseri om data og dumme klienter. Ikke dumme oppdragsgivere, altså, men noen veldig dumme web-klienter.

Les artikkelen

Som påskekvelden på kjerringa

15.02.2023

For mange norske datasystemer virker det som helligdager og høytidsdager kommer som en overraskelse. Hvor vanskelig kan det egentlig være å lage et system som ikke setter betalingsfrist på en dag hvor bankene er stengt? Eller venter med å sende purring på tilbakelevering av ting til en dag man faktisk har åpent? Vi dykker ned i matte fra 1800-tallet og lurer på hvorfor dette ikke er implementert i alle norske datasystem…

Les artikkelen

Rust Lifetimes

08.02.2023

Du har endelig kommet i gang med Rust, og du har fått tak på hvordan Borrow Checker fungerer. Nå kan du virkelig sette i gang å kode! Men hva er det som møter deg? En ny kompilatorfeil som sier:

'x' does not live long enough

Det du nå har stiftet bekjentskap med er Rust Lifetimes, så da passer det fint at det er nettopp det vi skal se nærmere på i denne bloggposten.

Les artikkelen

Kafka som cache

01.02.2023

Kafka er et mangehodet beist med mange konfigurasjoner å skru på for å få det slik som vi vil.

Jeg bruker kafka som cache-lager for å raskt kunne varme opp cachen. I et sånt scenario må tjenestene selv sende oppdaterte data til kafka og la andre konsumenter bruke disse dataene asynkront. På den måten unngår jeg også å overbelaste tjenester ved start av applikasjonen min når jeg trenger en full cache.

Her er hvordan jeg bruker Kafka for å vedlikeholde cacher.

Les artikkelen

Ny plattform?

25.01.2023

Vi trenger en ny plattform!
Men hvem er “vi”?
Og hva er det “vi” trenger egentlig?
Hvordan passer vi på at den nye plattformen blir en suksess? (For hvem?)

Les artikkelen

Datomic: Fem fete fordeler, fort fortalt

18.01.2023

Det er ikke ofte at en database gjør meg direkte begeistret, men Datomic har klart kunststykket. Til tross for at det er proprietær software man må betale for, har databasen så mange fete fordeler at det er vanskelig å velge bare fem av dem … men fem må det bli. Hvordan skulle jeg ellers fått fikset en så feiende flott tittel?

Les artikkelen

Hva er frontendens domene?

11.01.2023

En forutsetning for å treffe med softwaredesign er at vi har god kontroll på domenet vi opererer i. Men hva er egentlig domenet til frontendkoden din?

Les artikkelen

CSS og listemarkører

04.01.2023

Styling av listemarkører med CSS ::marker, en enkel måte å lage penere lister på.

Les artikkelen

Litt julekos med Markov-kjeder

21.12.2022

Det har den siste tiden blitt svært tydelig at AI har kommet langt på tekstlig dialog. Men det er snart jul, og ikke tiden for eksistensielle spørsmål. Nå er det tid for kos. Nærmere bestemt å produsere latterlig svada med Markov-kjeder.

Les artikkelen

Asynkron Dataflyt i Kotlin

14.12.2022

Ser du verdien av en asynkron dataflyt og ønsker å implementere dette i Kotlin ? Kanskje har du blitt eksponert for begreper som coroutines, suspend-funksjoner og flows uten at du ble spesielt klokere av den grunn ? Da er denne bloggposten for deg.

Les artikkelen

Hvordan håndterer man minne i Rust

08.12.2022

Rust er det mest populære programmeringsspråket i følge Stack Overflow, men hva er det som er så spesielt med det? Det som først fikk min oppmerksomhet var hvordan man håndterer minne.

Les artikkelen

Håndtering av spaces i HTML

07.12.2022

Mesteparten av whitespace i HTML er irrelevant og fjernes av browseren. Så lenge vi lager HTML-koden selv fungerer dette flott. Men hva skjer om man for eksempel lager en editor som skal støtte HTML både inn og ut - og noen limer inn HTML-kode med forskjellig typer spaces?

Les artikkelen

Ikke glem denne indeksen

30.11.2022

Hvordan kan en enkel sletting som delete from users where id = :id bruke mange minutter på å fullføre på en kraftig Postgres-database i produksjon? Denne utfordringen støtte jeg på nylig og det ga meg en liten aha-opplevelse.

Les artikkelen

12 observasjoner gjennom 12 år som utvikler

23.11.2022

Tiden flyr. Hvilke erfaringer har jeg egentlig gjort meg gjennom alle disse årene?

Les artikkelen

Noen tanker om hvorfor jeg ikke savner statiske typer

16.11.2022

Statiske typesystemer er åpenbart bra greier. Ikke bare får man uttrykt intensjon og form på dataene veldig eksplisitt, men det muliggjør også masse deilig editor-støtte som auto completion og refaktorering. Likevel er det Clojure – et særdeles dynamisk språk – som er min favoritt. Jeg har tenkt litt i det siste … Hvorfor savner jeg ikke statiske typer?

Les artikkelen

Lunsjroulette, hva er det for noe?

09.11.2022

Vi har det veldig bra i Kodemaker, men vi sikter alltid mot nye høyder. Hva kan vi gjøre for å bli enda bedre kjent med hverandre på en sosial og morsom måte?

Les artikkelen

Unreal Engine 5, manuelt minimalt prosjekt

30.10.2022

Unreal Engine 5 er et beist! I denne blogposten skal vi temme beistet litt ved å manuelt lage et prosjekt med filene som den trenger, kompilere dem og starte opp det nye prosjektet fra kommandolinja.

Les artikkelen

Hva er egentlig et REPL?

25.10.2022

Et godt REPL blåser liv i programmet ditt og lar deg utvikle det fra innsiden av den kjørende prosessen. Bli med, så skal jeg forsøke å forklare akkurat hvorfor et REPL er det essensielle verktøyet du kanskje ikke visste at du mangler i (arbeids)livet ditt.

Les artikkelen

Analyser nettverks-trafikken fra appen din

16.10.2022

Lurer du på hva appen din egentlig gjør av nettverkstrafikk? Mitm-proxy gir deg det eksakte svaret.

Les artikkelen

Effektiv bruk av verktøy, uavhengig av programmeringsspråk

08.09.2022

Bruk datamaskinen effektivt, så får du mer tid til å løse faktiske programmeringsproblemer.

Les artikkelen

Testdatatips

10.08.2022

Uansett hvilket språk du bruker, så trenger man testdata når man skriver tester. Her kommer noen tips til hvordan man kan gjøre det lettere for seg selv, med eksempler i TypeScript.

Les artikkelen

5 små TypeScript-tips

02.08.2022

Gitt utgangspunktet “la oss type JS” så er TypeScript ganske supert. Dette er ikke nødvendigvis et premiss vi trenger godta, men når man først besøker TS-land hjelper det å ha noen triks for hånden.

Les artikkelen

Manipulering av Ikke-Muterbare Datastrukturer i Kotlin

09.02.2022

Har du omfavnet funksjonell programmering ? Savner du en effektiv måte å manipulere ikke-muterbare datastrukturer på ? Hva om det faktisk finnes et bibliotek som løser dette på en elegant måte ?

Les artikkelen

Har du kontroll på ditt utviklingsmiljø?

02.02.2022

Kjører du samme versjon av Java, Node, Erlang, .NET Core (etc) lokalt som i prod? Hvis ikke, hvordan kan du da vite at appen din oppfører på samme måte over alt?

Les artikkelen

Property-based testing i Clojure

15.12.2021

Er du lei av å skrive tester? Hva om jeg fortalte deg at det finnes verktøy som genererer testene for deg? For godt til å være sant?

Les artikkelen

Men hva om den går ned!

08.12.2021

Hva om den eksterne tjenesten vi er avhengig av går ned? Hvordan sikrer vi en robust tjeneste med eksterne avhengigheter?

Les artikkelen

Radio buttons for Android

01.12.2021

Hvorfor i alle dager sjekker vi på radio button checked id for å finne ut av hvordan verdien av den skal representeres i koden? Det virker litt for manuelt og tungvint. Er det mulig å få til at radioknapper holder på den informasjonen selv, slik for eksempel en HTML radio button gjør?

Les artikkelen

Noen artige tekniske detaljer fra Kodekamp

24.11.2021

Jeg arrangerte Kodekamp i helga, en hjemmesnekret konkurranse i kodeskriving. Det var intenst og gøy. Her er en liten samling fikse finurligheter og lett underholdende anekdoter derfra.

Les artikkelen

Hvor legger vi CSS?

17.11.2021

Når man lager frontend applikasjoner er det fint om man unngår duplisering av sentrale elementer i designet. Her går vi gjennom noen forskjellige alternativer man kan bruke for å organisere CSS og komponenter.

Les artikkelen

Gjør mindre, få til mer

09.11.2021

En liten historie om hvordan en ny feature i et open source-bibliotek ble nedskalert og samtidig mer nyttig.

Les artikkelen

Sidestruktur

01.11.2021

Ofte så lager vi løsninger med en fast visuell struktur. Du har for eksempel en header med en meny, en sidespesifikk kropp og en footer. Hva gjør vi hvis noen sider trenger en annen struktur?

Les artikkelen

Typesikker konfigurasjon

13.10.2021

Hvordan håndterer du konfigurasjon i prosjektet ditt? Er alle verdier satt? Er verdiene av riktig type? Hadde det ikke vært fint å vite at alt dette er oppfylt og håndtert for deg?

Les artikkelen

Respect my https_proxy!

22.09.2021

Hva gjør du når du sitter bak en proxy og verktøyet ditt ikke spiller på lag med proxyer?

Les artikkelen

Kan mindre frihet være bra?

15.09.2021

Er det alltid bra med mer frihet? Nei, ikke når vi skriver kode. La meg forklare.

Les artikkelen

Lag ditt eget rammeverk

21.04.2021

Ja, det er en oppfordring. Jeg mener for guds skyld ikke at du skal lage et nytt rammeverk som andre kan bruke, men lag et til deg selv. Sett opp et stilas som passer til det du bygger.

Men ikke med en gang.

Les artikkelen

Lage ditt eget websocket-bibliotek som en tilstandsmaskin?

11.02.2021

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.

Les artikkelen

Hvorfor bør du være forsiktig med å bruke OFFSET?

08.12.2020

Når datamengdene vi henter ut fra databasen øker i både mengde og omfang kan vi ikke alltid servere alt til frontenden, slik vi gjorde i starten av prosjektet. Skal man lage en pagineringsløsning er det fort gjort å ta i bruk OFFSET og LIMIT, men hvordan fungerer det og hvorfor bør vi være forsiktige med det? Vi går gjennom hvordan OFFSET fungerer, hvorfor vi bør være forsiktige med bruken og prøver å komme med et forslag til hvordan vi heller skal løse pagineringen vår.

Les artikkelen

Hvordan tegnes tekst i Google Docs og Visual Studio Code?

18.11.2020

Det er 2020, og nettleseren har fortsatt ikke UITableView. Det er ikke fordi de som lager nettlesere er inkompetente, men fordi WC3-spesifikasjonene gjør det umulig å lage kjappe implementasjoner av GUI-rendring på web.

Derfor lever vi med at Slack bruker 2gb minne for å vise et lite knippe tekstlinjer. (Desktop-appen til Slack er et webview.)

Men vi har to store unntak: både Google Docs og Visual Studio Code klarer å rendre enorme dokumenter på null komma svisj, med lav minnebruk og greier. Hvordan klarer de det?

Les artikkelen

HTTP-headere og sikkerhet

11.11.2020

I denne bloggposten ser vi på hvordan du kan bruke standardiserte HTTP-headere til å heve sikkerheten i applikasjonen din.

Les artikkelen

Grunnkurs i SQL-indeksering

04.11.2020

Indeksering er den aller viktigste måten vi kan sikre god ytelse fra en SQL-database på. Det er vårt ansvar som utviklere å lage gode indekser fordi vi kjenner applikasjonens behov og aksessmønster best. Vi skal derfor ta for oss litt grunnleggende om indekser og hvordan vi bruker dem.

Les artikkelen

Samspill mellom generiske UI-komponenter

28.10.2020

I forbindelse med bloggposten om en enkel frontendarkitektur som funker, spurte Ove: “Hvis du har en tekstboks og en knapp, hvem har ansvaret for å ta verdien fra tekstboksen og sende den til eventbussen når man trykker på knappen?” Det er et betimelig spørsmål med noen interessante detaljer.

Les artikkelen

Git-Secret - en hemmelighet

21.10.2020

Git-secret er en liten perle som gjøre det enkelt å la konfigurasjonsfiler versjonshåndteres sammen med kildekoden, selv om de inneholder hemmeligheter.

Les artikkelen

Konfig for Flutter-apper

14.10.2020

Som utvikler med mye erfaring fra backend så vet jeg akkurat hvordan jeg liker å konfigurere applikasjonene mine. Men hva er alternativene for mobile apper som er skrevet med flutter?

Les artikkelen

UI-tester og stubbing av nettverkskall på Apples plattformer

07.10.2020

UI-testing har fått dårlig omtale. Testene kritiseres for å være trege, de tar lang tid å skrive, de er ofte ikke spesielt lesbare, brukergrensesnittet endrer seg kontinuerlig og sist, men ikke minst så er inkonsistente testdata og mangel på kontroll over responsen fra server en stor utfordring.

Det siste punktet mener jeg er den største utfordringen, men jeg mener å ha funnet en veldig bra løsning på dette. Les videre, så skal du få se hvordan.

Les artikkelen

Elixir/Phoenix: Logge config og maskere secrets

30.09.2020

Logger du config i oppstart av appen din? Nei? Det gjøres heller ikke i Elixir/Phoenix. Dette er rett og slett ikke godt nok. Her er en oppskrift på hvordan gjøre dette.

Les artikkelen

Teknisk egenkapital og gjeld

23.09.2020

Paul Graham sin klassiker Beating The Averages forteller at Lisp er et hemmelig våpen, hvor konkurrentene dine blir stående igjen i støvet som legger seg etter din enorme effektivitet og produktivitet.

Kanskje tidlig på 2000-tallet. Men i dag må språkene se seg slått av plattformene.

Koden vår renner nå over med tredjeparts avhengigheter, fra et gedigent økosystem av tidsbesparende hjelpemidler.

Men er disse avhengighetene egenkapital, eller er de gjeld?

Les artikkelen

Rebusløp

16.09.2020

Kode skal være lett å lese. Men hva betyr dette i praksis? Hva er lett å lese og hva er det koden skal formidle til leseren? Hvorfor leser vi kode i det hele tatt?

Les artikkelen

Sy sammen s-expressions med thread-first og -last

10.06.2020

Når man er ny til Clojure er macro-ene -> og ->> temmelig forvirrende. Ikke bare er de vanskelige å søke etter på nett, men koden ser også helt mystisk ut. Heldigvis er det ikke lenge til du blir nyforelska og bruker dem overalt. Kanskje etter denne bloggposten?

Les artikkelen

Nostalgibølge

20.05.2020

Jeg husker det som om det var i går. Dagen da Commodore ble byttet ut med en Amiga 500. Det var første gang jeg så en sinusbølge flyte over skjermen. Hvordan lager man egentlig det?

Les artikkelen

Clojure zippers - snasen traversering og manipulering av trær

13.05.2020

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.

Les artikkelen

MQTT - Hva er det?

06.05.2020

MQTT er et lettvekts publish-subscribe meldingssystem. Men hva i alle dager står forkortelsen for? Hva kan man bruke det til? Og hvordan fungerer det, egentlig?

Les artikkelen

Partisjonering av data

29.04.2020

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.

Les artikkelen

Når databasemodellen blir domenemodellen

15.04.2020

Domene-kode kan med rette kalles kjernen i applikasjonene vi utvikler, men den gjør ikke mye nytte for seg uten støttende infrastruktur, som lagring av data og kommunikasjon med andre systemer.

Men hva skjer når infrastrukturen er med på å forme domene-koden?

Les artikkelen

Bruk av SameSite og problemet det løser

08.04.2020

Cookies lar oss ta vare på informasjon mellom ulike forespørsler over ellers tilstandsløs HTTP, og brukes ofte til å implementere sikkerheten i webløsninger. Det er imidlertid noen ting som er viktig å være klar over ved bruk av cookies. I denne bloggposten skal vi se mer på bruk av SameSite-attributtet.

Les artikkelen

Hack slack sin URL-redirect

01.04.2020

Har du også irritert deg over Slack sin trege redirect-funksjon? Her her en oppskrift for å redusere irritasjonen med din egen URL-redirecter.

Les artikkelen

Brukergrensesnitt i kode på Apples plattformer

25.03.2020

Hvorfor jeg foretrekker å utvikle iOS- og macOS-brukergrensesnitt i kode fremfor å bruke Interface Builder

Les artikkelen

Profilering av kode i Go

18.03.2020

Noen ganger er ytelse kritisk for at ting skal fungere ordentlig. Et bibliotek for parsing av binære værdata er en av de gangene. Med Go har vi mulighet til å kunne si akkurat hvilken kodelinje som tar tid eller som allokerer minne.

Les artikkelen

Elixir: Prosesser og meldinger

11.03.2020

Elixir er et relativt nytt språk som kjører på Erlang VM’en BEAM. Dette er en annerledes plattform, som har vist seg å være svært robust, skalerbar og tillater høy oppetid. En av årsakene til dette er minnehåndteringen, som er svært annerledes fra mange andre plattformer.

Les artikkelen

Kontinuerlig utrulling - også på klienten

04.03.2020

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.

Les artikkelen

Hjælp, vi må ha en app!

26.02.2020

Det finnes veldig mange teknologier der ute, og det kan fort bli vanskelig å navigere i jungelen når man skal velge hva man skal gå for. Hvilken teknologi passer min app best?

Les artikkelen

Python og ytelse

19.02.2020

De siste årene har jeg brukt Python sammen med OpenCV til å implementere en del bildeanalyse. Prosessering av bilder kan fort bli litt krevende for datamaskinen - og når man vil behandle mange bilder på kort tid er det viktig å skrive effektiv kode. Her beskriver jeg en teknikk jeg har brukt for å se på Python-kode og effektivitet.

Les artikkelen

Kontinuerlig bygging med make

12.02.2020

Kontinuerlig integrasjon, javel. Hva med kontinuerlig bygging når du allerede bruker make(fordi du leste min forrige bloggpost)?

Les artikkelen

Klippe med CSS

05.02.2020

CSS slutter aldri å overraske. Noen ganger ramler man over noe som man i utgangspunktet ikke ser nytteverdien av, men som kombinert med litt kreativitet produserer et interessant resultat.

Les artikkelen

En enkel frontendarkitektur som funker

29.01.2020

Det er mange store stilaser å velge blant for din frontendarkitektur, men trenger du all leamikken? Her er en enkel arkitektur som jeg har hatt mye glede av.

Les artikkelen

Alle utviklere bør kjenne til persistente datastrukturer

21.01.2020

Den første tingen jeg leter etter når jeg skal lære meg et nytt programmeringsspråk, er immutable og persistente datastrukturer. Dette er en yrkesskade jeg har fått fra Clojure. Jeg har en tendens til å strukturere hele systemet mitt rundt disse datastrukturene. De er smarte, kjappe, effektive, immutable og fremragende.

I denne bloggposten skal jeg gi deg den samme skavanken.

Les artikkelen

Bildeanalyse #3: Objekter

15.01.2020

Her kommer del 3 i bloggserien min om bildeanalyse. Denne gangen er det deteksjon av objekter i et bilde som er temaet. Først bruker vi noen geometri-triks for å finne rett utsnitt av bildet - så plukker vi ut objektene, og finner egenskaper ved disse som lar oss si noe om hva det er vi ser på.

Les artikkelen

Kubernetes deployments uten nedetid

08.01.2020

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?

Les artikkelen

Devops! Dev? Ops!

17.12.2019

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

Les artikkelen

Et raskere internett med QUIC

11.12.2019

QUIC er en protokoll med opprinnelse fra Google som første gang så dagens lys i 2012. Navnet ble foreslått som et akronym for “Quick UDP Internet Connections”, men QUIC er i dag alene ansett som navnet på protokollen. Det er en ung protokoll sammenlignet med mange andre som benyttes på internett i dag. Eksempelvis er TCP, som i sin helhet erstattes av QUIC, opprinnelig fra 1974.

Les artikkelen

Inputvalidering i Kotlin med Arrow

04.12.2019

Arrow er et nyttig bibliotek som er ment som en utvidelse av Kotlins standardbibliotek med fokus på funksjonell programmering. I dette innlegget skal vi se på hvordan vi kan bruke datatypen Validated til å gjøre inputvalidering morsommere, mer effektivt og ikke minst funksjonelt.

Les artikkelen

JavaScript Coercion 101

27.11.2019

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.

Les artikkelen

Hva i $@ $< * er en Makefile

20.11.2019

Etter å ha slåss mot og med maven, gradle, grunt og diverse moderne byggeverktøy så er det deilig å se at den gamle traveren make ofte er et bedre og enklere alternativ.

Les artikkelen

Jaro-Winkler - svart magi?

13.11.2019

JaroWinkler er en formel som kan benyttes til mye - også adressevask.

Les artikkelen

Jeg velger Windows 10, det beste utviklingsmiljøet (for meg)

06.11.2019

Linux, macOS eller Windows 10? Jeg har landa på den siste.

Les artikkelen

Maskert config med Clojure

30.10.2019

Clojure sine åpne datastrukturer er utrolig deilig å jobbe med, de brukes til alt, også config. Men ikke all config er lik, f.eks. bør ikke secrets logges. I oppstart av enhver app er det fordelaktig at config logges, så hvordan håndtere dette problemet? Her er et triks for å maskere secrets i config.

Les artikkelen

HTTPS-sertifikater og tillitsnivåer

23.10.2019

Du har kanskje sett at når du browser nettbanken din så står hele navnet på banken ved siden av URL-en. Hva er dette for noe?

Les artikkelen

CSS animasjoner i ClojureScript - Del 1: CLJSS

16.10.2019

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.

Les artikkelen

Verdt å vite om Set i JavaScript

09.10.2019

Hvordan funker et Set i JavaScript og når passer det å bruke det?

Les artikkelen

Et lite Clojure-triks til å bli glad av

02.10.2019

Det viktigste og beste med Clojure er pure functions og immutability, men i dag skal jeg skrive om noe ganske annet. Jeg skal skrive om en småting som gjør meg glad når jeg koder.

Les artikkelen

Når AWS-regninga blir skyhøy

25.09.2019

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?

Les artikkelen

Bildeanalyse #2: Linjer

18.09.2019

Dette er del 2 i min lille bloggserie om bildeanalyse. Her ser vi videre på en vanlig utfordring - hvordan man finner linjer i et bilde. Dette er nyttig på en rekke områder. Vi går gjennom grunnprinsippene for å finne linjer, og så viser jeg frem en del små triks jeg har funnet ut at kan være fine når man driver med OpenCV og linjer i bilder.

Les artikkelen

Introduksjon til bildeanalyse

11.09.2019

Bildeanalyse, kunsten å lese informasjon fra bilder, er en artig og utfordrende del av IT-faget. Man kan gjøre tekstgjenkjenning, bygge automatiserte industriprosesser, lage nymotens dartspill og en hel del andre greier. Her beskriver vi en måte man kan komme i gang på og forklarer noen av de enkleste prinsippene som kan være kjekke å kunne.

Les artikkelen

Terningene er kastet med CSS

04.09.2019

Snart er det JavaZone, og da blir det kosetime med Christian og meg. Vi skal lage et nytt zombiespill - denne gangen med terninger.

Terningspill er langt morsommere hvis man kan se terningene rulle, så jeg brettet opp ermene (ikke armene) og skrev litt CSS i forberedelse til presentasjonen. Her er det jeg lærte om å kaste terninger med CSS.

Les artikkelen

Public keys og private keys

28.08.2019

Som utvikler trenger du å vite hva public keys og private keys er, og hva du kan bruke de til. I denne artikkelen lærer du alt du trenger å vite - uten noe matematikk!

Les artikkelen

Tid - hvor vanskelig kan det være? Del II

21.08.2019

I del én lærte vi hvilke datatyper vi trenger i kode for å håndtere tid, men hvordan er det vi lagrer dem i en database?

Les artikkelen

Tid - hvor vanskelig kan det være?

14.08.2019

Jeg har drevet med programmering i snart 20 år, og i nesten hvert eneste prosjekt jeg har vært med i har vi endt opp med problemer, misforståelser og diskusjoner rundt tid. Er det mulig? Hvor vanskelig kan det være?

Les artikkelen

Enklere backender med færre rammeverk - og Swift?

07.08.2019

Er Swift klar for serverside, og hva finnes av biblioteker og rammeverk?

Les artikkelen

Magit er den beste måten å bruke Git på

31.07.2019

Magit er det proffe og effektive verktøyet for å jobbe med Git.

Les artikkelen

AWS Free Tier

24.07.2019

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.

Les artikkelen

Et gammelt triks i en ny kontekst

17.07.2019

Det er lett å ta gamle triks med seg inn i en ny hverdag. Den første Clojure-koden jeg skrev ligner ikke spesielt mye på den jeg skriver i dag. I denne bloggposten skriver jeg kort om én av tingene jeg har gradvis lært meg av med.

Les artikkelen

La applikasjonen din overleve et Kafka-krasj

10.07.2019

Du kan sikre deg mot å miste kritiske meldinger når kafka er nede ved å bruke “store-and-forward” i de applikasjonene dine som produserer meldinger til kafka.

Les artikkelen

Fleksibel layout med CSS Grids

03.07.2019

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.

Les artikkelen

Universell Utforming - en sjekkliste

26.06.2019

I 2018 fikk SAS tvangsbøter fra Difi på 150 000 per dag for brudd på likestillings- og diskrimineringsloven. Er dette noe som kan ramme andre? (Spoiler - JA!)

Les artikkelen

Data hører hjemme i en database, også på framsiden

19.06.2019

Putt tilstand i ClojureScript-appen din i en DataScript-database for å få kontroll på tilstanden på framsiden.

Les artikkelen

Hva jeg skulle ønske noen hadde fortalt meg om React Native

11.06.2019

Jeg har vært med Kodemaker sitt team på 4 hos Bring og laget en native mobilapp som sjåførene bruker mens de er ute og plukker opp og leverer pakker. Vi bruker React Native. Her er en liten samling med ting jeg skulle ønske jeg visste før vi startet prosjektet.

Les artikkelen