Fork me on GitHub
#clojure-norway
<
2024-04-16
>
cjohansen07:04:11

God morgen! Litt på siden, men her er enda en liten bloggpost om NATS, denne gangen om key/value storen. Kommer snart et Clojure-bibliotek for dette nydelige systemet 😄 https://parenteser.mattilsynet.io/nats-kv/

❤️ 2
👏 3
👀 2
odinodin07:04:53

Blir nesten litt skeptisk når ett system kan løse så mange forskjellige ting på en gang 😂

🎯 1
odinodin07:04:44

kan jeg spørre hva dere bruker NATS til?

cjohansen08:04:51

Ja, det var min første reaksjon også. Men når jeg forstod hvordan det hang sammen syns jeg det ga veldig mening.

cjohansen08:04:37

Vi bruker NATS til to ting enn så lenge: • En arbeidskø for å importere data fra et gammelt system • Et command-system som baserer seg på en persistent logg

👍 1
teodorlu10:04:24

• Et command-system som baserer seg på en persistent logg• Hvor har dere persistensen når dere kjører i prod? • Hvor er persistensen når dere kjører i dev?

cjohansen12:04:17

"På disk" er svaret på begge. Akkurat hva det betyr i prod er jeg litt usikker på, for vi har et infrastruktur team som drifter nats i prod for oss 😅

cjohansen12:04:23

Kan forhøre meg litt

👍 1
🙏 1
cjohansen14:04:30

@U3X7174KS det er helt standard VM-er (på GCP for vår del) med block storage. Så ja, "disk" 😅

👍 1
slipset07:04:53

Dagens lille design nøtt: Den beste måten å designe for edge-caser er å ikke.

💡 3
👌 1
👍 1
leifericf06:04:03

Det minner meg om et mantra i Erlang miljøet: "Let it crash." Man koder kun for "happy path" og gjør ikke noe exception handling. Prosessene (actors) er strukturert opp i et slags hierarki av "overseere" og "arbeidere," som vet hva de skal gjøre når noe dør. Programmene er "self-healing" hvis man setter ting opp riktig ved hjelp av ulike konvensjoner og OTP (standardbiblioteket). Det er en av tingene jeg digget med Erlang: Det er veldig "ren" kode, typ kun det som må være der, og veldig lite "clutter." Den Prolog-aktige syntaksen tar en del tid å venne seg til, men den er simpel (veldig få primitiver og syntaktiske strukturer, nesten som Clojure [men ikke like bra]).

💡 3
teodorlu10:04:42

Jeg har angret på at jeg har “prøvd å være for lur” mange ganger. Seinest i går. Da brukte jeg to timer på å fjerne en “for bred” abstraksjon. Jeg tror jeg aldri har angret på at jeg gikk for å “løse problemet jeg har akkurat nå“.

teodorlu10:04:14

Samtidig er det noe i hvordan Rich designer åpne systemer. Noe med hvilke funksjoner som bør ta parametre (feks funksjoner som jobber med en database-tilkobling). Jeg klarer ikke helt sette fingeren på akkurat hva det er. Men det handler kanskje mer om å plukke ting fra hverandre enn å forutse edge-caser.

augustl10:04:28

her kan typesystemer være litt vriene og. Når jeg skal kjøre et kjapt eksperiment i TypeScript, må det også types. Prøver å ungå å bruke any og unknown og sånt, for det er så fort gjort at det blir værende igjen. Så da ender man opp med å designe typene og dataflyten før du har implementert noe

augustl10:04:08

skulle ønske alle typesystemer kunne toggle av og på “lekemodus”. Ikke lov å sjekke lekekode inn i prod, men fint å kunne utvikle typeusikker kode og heller fase inn typer senere

teodorlu10:04:43

I Go/Haskell liker jeg å se etter muligheter til å bruke interfaces (Go) og typeklasser (Haskell) når jeg skal skrive kode som jeg ikke vil at skal være avhengig av konkret implementasjon. Men enig, jeg synes dette er lettere å få til feks i Clojure enn i feks Go.

slipset11:04:10

Men det er en liten luregreie her. Hvis du bygger bottom up, dvs små byggeklosser som kan komponeres for å løse det vanlige use-caset, så kan man løse edge-casene ved å bygge litt anderledes med de samme byggeklossene. Men hvis du begynner top-down, så har du kanskje ingen mindre byggeklosser og du må løse edge-casene dine i den store top-down byggeklossen. Som da blir veldig komplisert, og ikke noe gøy å bruke

1
💯 6
boosja20:04:08

Meg når jeg programmerer i Clojure:

❤️ 7
😹 1
leifericf06:04:03

Det minner meg om et mantra i Erlang miljøet: "Let it crash." Man koder kun for "happy path" og gjør ikke noe exception handling. Prosessene (actors) er strukturert opp i et slags hierarki av "overseere" og "arbeidere," som vet hva de skal gjøre når noe dør. Programmene er "self-healing" hvis man setter ting opp riktig ved hjelp av ulike konvensjoner og OTP (standardbiblioteket). Det er en av tingene jeg digget med Erlang: Det er veldig "ren" kode, typ kun det som må være der, og veldig lite "clutter." Den Prolog-aktige syntaksen tar en del tid å venne seg til, men den er simpel (veldig få primitiver og syntaktiske strukturer, nesten som Clojure [men ikke like bra]).

💡 3