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.
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?
11.11.2020
I denne bloggposten ser vi på hvordan du kan bruke standardiserte HTTP-headere til å heve sikkerheten i applikasjonen din.
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.
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.
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.
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?
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.
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.
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?
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?
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?
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?
Om CSS, Web og ClojureScript
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.
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?
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.
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?
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.
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.
Hvorfor jeg foretrekker å utvikle iOS- og macOS-brukergrensesnitt i kode fremfor å bruke Interface Builder
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.
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.
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.
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?
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.
12.02.2020
Kontinuerlig integrasjon, javel. Hva med kontinuerlig bygging når du allerede bruker make(fordi du leste min forrige bloggpost)?
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.
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.
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.
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å.
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?
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å.
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.
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.
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.
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.
13.11.2019
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.
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?
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.
09.10.2019
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.
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?
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.
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.
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.
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!
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?
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?
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.
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.
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.
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.
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!)
Putt tilstand i ClojureScript-appen din i en DataScript-database for å få kontroll på tilstanden på framsiden.
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.