clojure-norway

mokr 2025-09-26T07:09:49.871749Z

Morn!

oms 2025-09-26T07:18:40.854889Z

Morn!

teodorlu 2025-09-26T07:24:47.905929Z

god morn!

Sophie Bosio 2025-09-26T07:30:48.858749Z

Morn!

msolli 2025-09-26T07:39:35.695159Z

Morn!

emil0r 2025-09-26T08:28:43.025449Z

Morn

teodorlu 2025-09-26T13:22:58.200139Z

morn!

teodorlu 2025-09-26T13:25:55.997169Z

Billetter til Dutch Clojure Days 2026 ble nettopp lagt ut. Prisen, sider du? 0! 0!!! Én time fly fra Oslo. Håper vi blir en god norsk delegasjon! > Sat, May 9 • 9:00 AM > Theater City of Wesopa, Amsterdam, Nederland https://clojurians.slack.com/archives/C03RZRRMP/p1758890427400339

teodorlu 2025-09-26T13:33:35.356429Z

ooog bloggpost på tampen av uka. • Lær litt Haskell, et typet, funksjonelt programmeringsspråk • Få smakebit på "monader" — et konsept som ofte forklares krøkkete, men som egentlig bare trenger noen gode eksempler • … ispedd Clojure-eksempler. God helg! https://parenteser.mattilsynet.io/keep-med-monader/

👍 4
1
🙌 2
gunnar 2025-09-27T07:23:30.380909Z

Hvordan kunne jeg funnet ut av det, uten å ha kjennskap til Batman-serien? Rating på triologier, kanskje? (hvis det finnes slike oppslag i imdb)

gunnar 2025-09-27T07:23:53.784309Z

Heftig artikkel! Mye å ta inn 😊

❤️ 1
gunnar 2025-09-27T07:26:50.974979Z

Husker at Erik Meijer forenklet hele de monadiske lovene til det noe lett flåsete, men lettfattelige "if you can call flatMap on it, then it's probably a monad"

🎯 1
gunnar 2025-09-27T07:30:22.963969Z

(tror han sa dette i "Principles of Reactive Programming"-kurset som Coursera tilbydte for en ti års tid siden)

teodorlu 2025-09-27T09:15:41.681269Z

> Hvordan kunne jeg funnet ut av det, uten å ha kjennskap til Batman-serien? Rating på triologier, kanskje? (hvis det finnes slike oppslag i imdb) Tror nesten det bare er noe man må gjette? Jeg har i bakhodet at Batman-trilogien har fått gode ratings, særlig The Dark Knight. Og det er ikke så mange fulle trilogier i IMDB topp 100.

teodorlu 2025-09-27T09:15:57.008629Z

kan eventuelt høre med @larskristian.marontel og @christian767 om hvordan de tok det!

cjohansen 2025-09-27T10:18:06.366529Z

🤷‍♂️ 😊 jeg vet at de filmene har høy rating (med rette!) og at den andre er den klart beste, så det var bare pattern matching som slo til 😊

Zeniten 2025-09-27T11:13:26.029199Z

Jeg resonnerte ikke noe mer enn at det nok var en trilogi, ikke frittstående filmer, og da Lord of the Rings ikke passet, var Batman-trilogien den neste jeg kom på. 🙂

Zeniten 2025-09-26T18:27:17.418319Z

Batmen!

teodorlu 2025-09-27T05:42:33.114409Z

Bingo! 🎉

hypirion 2025-09-26T05:23:56.613079Z

Morn!

gunnar 2025-09-26T05:28:06.869959Z

Morn!

boosja 2025-09-26T06:32:18.609199Z

Morgen!

cjohansen 2025-09-26T06:32:40.888319Z

Morn!

slipset 2025-09-26T06:52:41.291779Z

mrn

gunnar 2025-09-26T06:59:37.741239Z

Denne artikkelen tar opp noen ganske interessant aspekter ved refaktorering i en clojure-kodebase: https://andreyor.st/posts/2025-09-21-replacing-clojure-lsp-with-clj-kondo-and-refactor-nrepl/ Jeg har i mitt stille, naive sinn tenkt at hvis man skulle være nødt til å omdøpe et nøkkelord, f.eks :min-domene-nøkkel, så er det veldig enkelt med search/replace. Men når man bruker navnerom for nøkkelordene så kommer det litt kompleksitet inn. Navnerom som er relatert til et clojure-navnerom, f.eks. :org.reinseth.domene/min-domene-nøkkel, blir utfordrende fordi det kan representeres som • ::min-domene-nøkkel når man står i det aktuelle domenet • eller som domene/min-domene-nøkkel hvis man har importert org.reinseth.domene som domene Så hva blir strategiene for refaktorering her? lsp hjelper velvillig til, men artikkelen snakker om hvordan man jobber uten lsp for de tilfellene hvor lsp blir for tungdrevet (store prosjekter). Nysgjerrig å høre fra dere drevne clojurians om hvordan dere håndterte disse problemstillingene dette før lsp. PS. Interessant at artikkelforfatteren med hensikt bruker svak maskinvare for å presse seg selv til å skrive bedre kode.

👍 1
cjohansen 2025-10-01T07:17:32.918509Z

Der var det mange dårlige takes gitt

gunnar 2025-10-01T07:20:48.858859Z

Det var litt min oppfatning også. Noen av bekymringene er at foo er sårbar for refaktorering, f.eks. hvis man flytter en funksjon til et annet namespace. Men er det ikke i filosofien til Clojure at man ikke skal bryte ting? Da tenker jeg at det inkluderer flytting av kode. (altså man skal tenke seg nøye om hvis man endrer namespaces)

cjohansen 2025-10-01T07:21:28.011209Z

Må si jeg er skuffa over nivået på diskusjonen. Jeg leser stort sett bare vikarierende argumenter for "æsj, det er litt kjedelig å skrive lange navn", og ingen gode dyptpløyende trade-offs.

gunnar 2025-10-01T07:24:53.296769Z

Kanskje du eller Magnar kan "weigh in" i diskusjonen med argumentene dere har for? Eller har dere kanskje diskuterte dette allerede i en av bloggpostene deres? Jeg dropper gjerne en lenke til dem 🙂

cjohansen 2025-10-01T07:25:06.142699Z

Ja, skal hive meg på litt senere, er litt bissi nå 🙂

🙌 1
teodorlu 2025-10-01T08:04:04.077959Z

synes denne tematikken er utrolig spennende. Gøy at du løfter det opp, @gar! Min historie rundt dette, i grove trekk: 1. Lik Haskell! 2. Få smak for Clojure med dynamisk utvikling og umiddelbar feedback 3. Skriv et kaos av maps og keys, mist kontroll a. (tidligere holdt typene tak i meg, nå var de borte!) 4. Innfør namespaced keywords på alt 5. opplev friksjon — det finnes nå for mange, for lange nøkkelord! kom til konklusjonen at jeg vil ha færre navnerom på nøkkelord. Mye takket være erfaringene siden jeg startet i Mattilsynet. Subjektivt mener jeg dette er den svakeste delen av "lær deg å bruke Clojure"-reisen.

gunnar 2025-10-01T09:03:07.047859Z

Nå har jeg ikke brukt clojure i større prosjekter, men kan lett forestille meg at verden går fort i grus når man naivt bruker keywords uten navnerom "at scale". Når du sier at du vil ha færre navnerom, @teodorlu, mener du da at du ønsker å ha et lite sett med domenespesifikke navnerom?

teodorlu 2025-10-01T09:16:30.601439Z

Domenespesifikt er supert! Men vi har attributter for andre ting enn domeneting også, altså. Mer i form av at hvis attributten allerede er velkjent, bruk den velkjente attributten. Et par eksempler på sparket fra vår kode: :serveringssted/navn — alltid av type string, hvis den er definert. Kommer originalt fra Datomic-skjemaet, og hele koden kan være trygg på at dette er nettopp navnet på et serveringssted. :nats.stream/name — navnet på en NATS-stream. Definert i et bibliotek som ligger utenfor applikasjonskoden vår. Men da tar vi det i bruk, direkte. Så vi driver ikke og finner på nye attributtnavn når vi allerede har et velkjent et! I min tidligere (naive) bruk av nøkkelord med navnerom, hadde jeg masse ::name rundt omkring. Det krever at folk skjønner akkurat hvilken informasjonsmodell som gjelder for en enklelt fil. Som ofte er fullstendig unødvendig, og heller til hinder! Hvis man i stedet for kan bestemme seg tydelig for hva et attributt betyr (feks serveringssted/navn ellert nats.stream/name), ett sted, blir det lettere for alle å lese koden overalt. Hvis Christian ser at jeg henter ut :nats.stream/name fra et map, skjønner han hva jeg prøver å gjøre. Hvis jeg henter ut et ::name fra et map, må han lære seg det lille DSL-et jeg har laget for akkurat det navnerommet jeg er i — og det er kjempedumt! — Så: • Alt blir lettere hvis man bruker attributtene som allerede er velkjent i systemet. • Det er lettere å "ta vare på" de velkjente attributtene i systemet hvis det ikke er sjukt mange av dem, og at de ikke har sjukt lange navn Jeg opplever at ::min-attributt-notasjonen dytter deg litt i retning av for mange, for lange attributtnavn. Kjapt rett fra koden jeg er i nå:

::fileset
;; => :matnyttig.page-admin/fileset
Jeg ønsker egentlig ikke å ha "matnyttig" i navnerommet. Og filesets snakkes om både fra page-admin og fra feed-admin! Så dette bryter regelen min. Dette indikerer at noe er muffens, og at jeg heller burde tenkt på hva denne datamodelen egentlig burde være — så jeg kan sørge for at alle kan snakke om samme attributt!

gunnar 2025-10-01T09:19:02.101099Z

Takk for forklaringen! Kjempenyttig å ta med seg 🥰

❤️ 1
teodorlu 2025-10-01T11:20:38.275609Z

@christian767 / @magnars — jeg hører forresten gjerne om dere er enige i det jeg skriver over om navn og navnerom på attributter (ved en passende anledning)! Det er jo ting jeg føler jeg har lært etter jeg startet å jobbe med dere, så hvis det er skivebom er det litt synd 😄

cjohansen 2025-10-01T12:51:22.081259Z

Jeg er stort sett enig 😊 Jeg har selv ikke så store kvaler med men tror jeg har brukt det mest i biblioteker. Datamodellen i appen vår har syntetiske navnerom, for det gir ikke mening å lime de til en teknisk implementasjon.

👍 1
2025-10-01T12:55:01.491709Z

Jeg bruker :: -formen for å formidle "dette er privat til dette navnerommet" og foretrekker forøvrig navnerom på keywords som ikke har basis i namespaces i koden. 🙂

👍 1
anders 2025-09-26T07:16:29.999379Z

Å effektivt kunne søke etter keywords er nesten hovedårsaken til at jeg klamrer meg til LSP. Utfordringen er ikke bare hvordan keywords kan uttrykkes som literals i koden, men også oppslag og destructuring. Søker du opp bruk av keyword med LSP får du også treff på dette. Helt uvurderlig, særlig når man har namespaced keywords (som for øvrig også er uvurderlig i store kodebaser).

cjohansen 2025-09-26T08:31:49.581039Z

Før lsp "løste" vi dette ved å opte ut av litt funksjonalitet. Ikke destructure namespaced keys feks. En annen tilnærming er å søke opp namspacet på key-en du leter etter, så får du snevret ned antall filer og kan jobbe med keys der. Men eller enig med @anders - dette er en av få ting som lsp er god på.

gunnar 2025-09-26T09:28:54.929539Z

Nyttig å vite. Det er åpenbart viktig å ha en bevisst forhold til bruken av keywords.

cjohansen 2025-09-26T09:43:33.068009Z

Det som er helt sikkert er at keywords uten navnerom fort blir "beyond repair", så alt som er viktig og går på tvers av navnerom bør ha navnerom på seg.

👍 1
💯 1
➕ 1
teodorlu 2025-09-26T13:50:26.250499Z

kondo er krutt for analyse.

$ clj-kondo --lint src --config '{:analysis {:keywords true} :output {:format :edn}}' | jet --pretty --query ':analysis :keywords'
lister opp all bruk av keywords i prosjektet ditt. (jet er https://github.com/borkdude/jet) Fjern --query-argumentet til jet for å se hele analysen, eventuelt dump til fil og grav i analysen med REPL.
$ clj-kondo --lint src --config '{:analysis {:keywords true} :output {:format :edn}}' > linted.edn
(read-string (slurp "linted.edn")) eller hva du vil!

gunnar 2025-09-26T13:51:12.003389Z

Wow!

gunnar 2025-10-01T06:22:47.227449Z

Denne tråden om bruk av namespaced keywords tar litt av: https://clojurians.slack.com/archives/C03S1KBA2/p1759263727536979