Parenteser

Betraktninger fra Mat-teamets grønne enger

Jøss, er du her også?

Trivelig at du stakk innom. Vi er et lite produktteam hos Mattilsynet som jobber med mattrygghet. Her er vår tidvis tekniske blogg hvor vi deler litt av hva vi jobber med, og ting vi lærer på veien.

Så, hvorfor akkurat Parenteser? Vel, vi jobber mye i Clojure, som har rykte på seg å være belemret med unødvendige mengder parenteser. Men nei, ikke bare er de nødvendige, de er aldeles smakfulle - som to fine bananer i headeren. Vi tenker også at disse bloggpostene kommer litt på siden - litt i parentes, om du vil.

Førsteklasses parametere i praksis

Dette blir ikke en lang bloggpost, jeg hadde bare lyst til å vise deg noe kult. Jeg skrev tidligere om velkjente parameternavn. Det ble ganske stilig også i møte med routing og forms.

Voffor gör dom på detta viset?

Dokumentasjon er et viktig tillegg til kode for at et system skal ha et langt og fruktbart liv. Men hva skal vi dokumentere?

Akkurat passe integrasjonstester

På hvilket nivå skal man legge sine tester? Hvor mange er nok? Når blir det for mange? Jeg har ikke svar med to streker under, men jeg skrev et par fine integrasjonstester nylig og har noen tanker.

Flaskehalsen peker på

Kode skal først og fremst leses av mennesker, men når importen tar 50 minutter(!) er det kanskje på tide å gjøre litt ytelsesforbedringer. Vi trodde vi visste hva som var treigt, det stemte ikke.

Forsvar mot svartekun... parametere!

Det er lett å bli for defensiv når man tar imot et parameter. Er denne bruker-id-en en streng, som den burde, eller har jeg fått noe annet? Hvordan skal jeg forsvare meg mot alt som kan gå galt?

Skriv bedre commits

Git-historikk kan by på verdifull kontekst som hjelper oss å forstå hvorfor koden vår er som den er. Særlig hvis den består av gode commits. Men hva utgjør en god commit?

Hvordan levere kontinuerlig?

På årets JavaZone holdt jeg et innlegg om hvordan vi får til å levere kontinuerlig. Fokuset var på de små detaljene. Jeg viste hvordan vi bryter opp arbeidet sånn at vi kan jobbe rett på main og rett i prod, enten vi gjør litt refaktorering eller bygger en helt ny innloggingsløsning.

Lange flate trær

Hjembyen min Fredrikstad er også kjent som Plankebyen, så du kan si at jeg har alle forutsetninger for å forstå tree-seq – funksjonen som lager lange lister av trær.

Når eksempler ikke er nok

Automatiserte tester er som regel eksempelbaserte. Men hvordan tester vi kode der en håndfull eksempler ikke er i nærheten av å være dekkende?

Kode som skriver kode

I verktøykassa til Clojure finner vi blant annet makroer – kode som skriver kode. Ikke det første man bør ty til, men de kan by på elegante løsninger. Som de gjorde for oss denne uka.

Best practice, eller?

Alle er enige om at prinsippene Goldratts bok The Goal gir store gevinster. Allikevel fant han 20 år senere at kun 2% hadde implementert idéene fra boka. Hva skjedde?

Hvilke data kommer her?

Det hender at jeg ser på en ukjent funksjon og lurer på “Hva slags data blir sendt inn her?” I et språk som Clojure uten statiske typer, hvordan håndterer jeg den situasjonen?

Når meldingene presser på

Å ta i bruk ny teknologi er en reise. Fra at alt er nytt og desorienterende via en slags oversikt, til noen realitetsorienterende feilsituasjoner som minner deg på at det er stadig mer å lære. La meg fortelle deg om et konfigflagg i NATS som nylig ga oss en sånn påminner.

Tre løse tanker om «first»

Det slo meg her om dagen at funksjonen first er litt for lett å gripe etter. Den er åpenbart nyttig, men think you a little about! Den blir fort mer trøblete enn man skulle tro ved første øyekast.

Køer i praksis: Flytting av data

Jeg har skrevet mye om hva NATS er og hvordan det funker. Det er på høy tid å si noe om det viktigste: hva skal vi egentlig bruke det til?

En liten titt på Datalog

Datalog er et logisk spørrespråk som ligger et sted mellom Prolog og SQL, noe som unektelig høres ganske esoterisk ut, men som viser seg å være ganske greit når man har tatt en liten titt på det.

Datamodellering er også UX-design

Det er lett å tenke at brukervennlighet er designerne og frontend-folka sitt ansvar, men mange av valgene vi tar i datamodellen og systemarkitekturen påvirker også hvor hyggelig (eller ikke) det blir å bruke systemene vi lager. La oss se litt nærmere på bruk av unike id-er.

Sidestilling med juxt

Kjernebiblioteket i Clojure har rikelig med småfunksjoner man ikke ser hver dag. I dag skal vi se på en hendig liten funksjon med et rart navn. Det er tid for juxt.

NATS key/value store

At et meldingssystem også skal kunne fungere som en key/value-database ga ikke så mye mening for meg før jeg forstod hvordan det hang sammen. Så la oss plukke NATS sin key/value store fra hverandre.

PubSub med NATS

NATS er et meldingssystem med mange bruksmønstre: fra pubsub, arbeidskøer og strømming av persistente logger til key/value og object storage. Alt fra den samme primitiven – emnebasert meldingsutveksling – som vi i dag ser litt nærmere på via PubSub med NATS.

Skriv kode istedenfor SQL

Datomic flytter oppslag og spørringer til klienten. Det betyr at du ikke trenger sende avgårde en tekststreng til en annen server, men kan grave i dataene der du er. La oss se på et praktisk eksempel.

Hva om databasen ikke mistet data?

Kildekoden vår bor i git. Det lar oss svare på når enhver linje ble innført i kodebasen, hvem som sist endret den, og hvorfor. Hadde det ikke vært fint om vi hadde like god kontroll på dataene i produksjonssystemene våre? Med Datomic har vi det.

Om å bygge sin egen lyssabel

Forleden dag ønsket jeg meg ny funksjonalitet i editoren min. Jeg fikk ikke fullført CSS-klasser så greit som jeg ville – ja, det var nesten på grensa til kronglete. Heldigvis fantes det en løsning.

Virtuell DOM fra bunnen av

React og mange andre frontend-rammeverk er bygget på teknologi kjent som “virtual DOM”. I dette innlegget bygger jeg en virtuell DOM fra bunnen av for å forstå hva det egentlig er for noe.

Flate, møre data

Å banke en kyllingfilet flat med en kjøttbanker er nøkkelen til en saftig og smakfull suksess på kjøkkenet. Sånn er det med data også: Flate data er bedre enn nøsta data – men hvorfor?

Data i passe porsjoner

Noen datamengder kan ikke spises i én jafs, men må heller porsjoneres ut i passende mengder. Heldigvis er det lekende lett i Clojure.

Om nøkler og deres bruk

I Clojure kan du sette navnerom på nøkler – en tilsynelatende triviell detalj med store implikasjoner. La oss se litt på hvordan det hjelper oss med datamodellering.

En dekonstruert database

Rich Hickey sa en gang at design fundamentalt handler om ta ting fra hverandre, slik at man kan sette dem sammen igjen. Dette gjelder i høyeste grad for Datomic, databasen som er kløyvet like i to.

En uke med Tailwind CSS

Bedre sent enn aldri sa vi, og tok i bruk Tailwind CSS for første gang. Der fant vi noen gode idéer, noen dårlige idéer, og en overraskelse eller to.

Datadreven frontend

Helt siden jeg tok i bruk React for over 10 år siden har min tilnærming til frontendutvikling blitt stadig mer datadrevet. På JavaZone viste jeg frem litt hva det har gitt meg, og hvorfor du også bør vurdere en lignende tilnærming.

En eksplosjon av data

Datomic er en aldeles nydelig database å jobbe med. Vi starter året med en ny serie med smakebiter av denne funksjonelle, funksjonelle databasen. Først ut er datamodellen som ligger i bunn – og eksplosjoner!

Knotinuerlig indignert

Står pull requests i kontrast til kontinuerlig integrasjon? Er kontinuerlig integrasjon det samme som CI? Hva med CI/CD? Jeg forsøker å oppklare noen uklarheter fra mitt forrige innlegg om pull requests.

All PR er god PR?

Pull requests har blitt en så vanlig arbeidsform at det for mange er synonymt med å bruke git. Men er det en bra ting? Må alle endringer komme via en pull request? Jeg er ikke så sikker.

Oppskriften på et smakfullt design

Er du nysgjerrig på hva tittelen UX-designer betyr? Lurer du på hvordan en slik designer jobber? I så fall har du kommet til riktig bord. Vel bekomme!

Noen bokstavkjeks er likere enn andre

Sist vi så på hvordan fulltekstsøk fungerer anså vi alle symbolene i indeksen som like viktige. Men sånn er det ikke alltid i praksis – eksempelvis er treff på hele ord bedre enn treff på bruddstykker av ord. Dette kan løses med vekting, som er dagens tema.

Putekrig og responsive bilder

Det er mange ting jeg lurer på med dette bildet. Hvorfor var det en pute på kontoret når vi hadde fagdag? Hvorfor grep jeg tak i den? Er det putekrig jeg oppfordrer til, eller er det mørkere undertoner i dette tilsynelatende lystige bildet? Etter denne bloggposten er det heldigvis én mindre ting jeg lurer på: Hvordan lager man sånne responsive bilder igjen?

Småkaker og slabberas på podcast

Christian og jeg hadde en hyggelig samtale med Vijay og Ray i episode 92 av (defn podcast). Det ble mye prat om Clojure og Emacs, og litt om livet som vaskeekte statsansatte i Mattilsynet.

Slutt å ødelegge tingene mine

IT-bransjen elsker tilsynelatende å gjøre gamle ting om igjen. I vårt evige jag på det perfekte API-et kaster vi ut ting som fungerer fint bare for å servere nye ting som overflatisk ser annerledes ut, men i bunn og grunn gjør det samme. Det koster mer enn det smaker.

Lange flate filer

Du skal lete lenge etter noe enklere og mer snappy enn å servere statisk HTML og CSS til folk. Hørt om “serverless”? Niks, her er det servernada! Jeg skriver om en grovt undervurdert teknikk for å lage nettsider.