Fork me on GitHub
#clojure-norway
<
2024-02-01
>
slipset07:02:09

Morn, morn

augustl08:02:40

morn 👋

slipset08:02:03

Fant en skikkelig drittfunksjon i clj-time idag: clj-time.core/do-at Makan!

slipset08:02:27

BĂ„de Helt Feil(TM) og dĂ„rlig navn. Err’e mulig.

teodorlu08:02:38

GjÞr (do-at subway listen-to-podcast) det jeg hÄper at den gjÞr?

slipset08:02:50

Den burde hete with-current-time-as

teodorlu08:02:52

aaaah. Uten Ä tÞyse, tenkte jeg den kjÞrte kode pÄ et tidspunkt fram i tid.

msolli08:02:33

I stedet fĂžkker den med romtid-kontinuumet!

😁 1
🎯 1
slipset08:02:52

Uansett, det fikk meg til Ă„ skrive

Don't use the clock
Calling out to System/currentTimMillis, t/now, t/today and friends is a great way to make your code hard to test, because you're basically relying on an impure fn (yes, asking for time is impure). To get around this, we add :user-time to the ctx upon its creation, so whenever you need time in your code, use (:user-time ctx) which then allows for passing in whatever time you want when testing.
I vĂ„r “Backend coding conventions”

👍 3
teodorlu09:02:31

Spennende grep.

slipset09:02:24

Nei, det vil jeg ikke pÄstÄ. Dette er jo bare imperative shell, functional-core applisert til tid.

cjohansen09:02:43

Veldig fornuftig. Og kan utvides til Ă„ inkludere alle funksjoner som defaulter noe som helst som har med tid Ă„ gjĂžre - feks tidssone.

👍 1
teodorlu09:02:21

Spennende for meg 🙂 Gir liksom en kombinasjon av pragmatikk, “det er bare data”, immutability og isolasjon av sideeffekter. Jeg ville ikke kommet pĂ„ Ă„ gjĂžre det sĂ„nn. Hvis det er modus operandi / Ă„penbart / trivielt for dere, er jo det flott for dere!

slipset09:02:24

Det er vel sÄvidt lite Äpenbart/trivielt for meg at jeg finner det verdt Ä dele her. OgsÄ fordi jeg merker at jeg er litt stolt over Ä ha innfÞrt dette arkitektoniske grepet

msolli09:02:48

En annen mulighet er Ä sette en instans av java.time.Clock pÄ :ctx , f.eks Clock/fixed. Mange java.time-metoder tar Clock som argument. Da kan du lage testbare funksjoner som hÄndterer tid, men som likevel er pure.

👍 2
cjohansen09:02:27

Clock har jeg ikke brukt. Er det en slags konglomerasjon av instant og tidssone?

msolli10:02:59

"A clock providing access to the current instant, date and time using a time-zone." https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html Har bare brukt en eksplisitt Clock i forbindelse med testing (`Clock/fixed`), men hele java.time bruker en implisitt systemklokke som baserer seg pÄ hardware + JVM-konfigurasjon for tidssone - hvis du ikke overstyrer ved Ä sende med en klokke. Se f.eks. Instant now() og Instant now(Clock clock) : https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#now--

👍 2
cjohansen10:02:01

Interessant. Jeg har lÞst dette litt tungvindt ved Ä vÊre eksplisitt pÄ now og tidssone.

msolli10:02:00

Funksjonen som testes, retry-data, gjÞr tidsaritmetikk, men er likevel pure siden den fÄr inn Clock utenfra.

slipset09:02:15

In other news. Vi legger snart ut to Clojurebackendutviklerstillinger. My DMs are open som de sier.

cjohansen09:02:56

Den fĂžrste feilen her var Ă„ bruke clj-time trollface

💯 1
cjohansen09:02:13

Helt uironisk trodde jeg ogsĂ„ at do-at var en skedulerings-funksjon, og blir irrasjonelt irritert dersom det stemmer at den ikke gjĂžr det 😂

slipset09:02:50

Og du tok feil pĂ„ to begge punkter. Den er ikke en funksjon og den skedulerer ikke 🙂

đŸ’„ 2
cjohansen09:02:54

Enda en grunn til Ă„ ligge unna det biblioteket

cjohansen09:02:06

java.time er bra greier, trenger ikke Ă„ pakkes inn

slipset09:02:17

Jeg tror til vÄrt forsvar at vÄr bruk av clj-time er fra fÞr java.time var en greie (man brukte vel Joda time pÄ den tiden). Og jeg har ikke helt sett verdien av Ä bytte det ut, det stÞrste problemet er jo folk som insisterer pÄ Ä spÞrre om tiden bÄde her og der, og det ungÄr du jo ikke med java.time heller.

cjohansen10:02:56

Nei, ser den

cjohansen10:02:09

Og ser det historiske aspektet

cjohansen10:02:17

SÄvidt jeg kan erindre sÄ har clj-time langt flere footguns i form av funksjoner som defaulter ting som burde vÊre eksplisitt. Men sikkert ikke grunn god nok til en stor og risikabel endring.