clojure-norway

2026-05-18T07:01:36.435659Z

mårn

teodorlu 2026-05-18T07:04:12.043349Z

morn!

eaj 2026-05-18T07:05:10.492459Z

God morgen!

teodorlu 2026-05-18T07:07:18.957039Z

(require '[dev.zeko.stube.core :as s])

(s/defcomponent :demo/counter
  :init   (fn [_] {:n 0})
  :render (fn [self]
            [:div (s/root-attrs self)
             [:button (s/on self :click :as :dec) "−"]
             [:span " " (:n self) " "]
             [:button (s/on self :click :as :inc) "+"]])
  :handle (fn [self {:keys [event]}]
            (case event
              :inc (update self :n inc)
              :dec (update self :n dec))))

(s/mount! "/" :demo/counter)
(s/start! {:port 8080})
Denne herligheten kommer fra et splitter nytt Clojure-rammeverk som plukker opp fakkelen etter https://ucw.common-lisp.dev/ (Common Lisp) og https://en.wikipedia.org/wiki/Seaside_(software) (Smalltalk). https://github.com/zekzekus/stube/blob/master/docs/rationale.md.

👀 3
slipset 2026-05-18T08:00:53.763329Z

Så dette er omtrent akkurat det motsatte av hva jeg ville gjort.

slipset 2026-05-18T08:01:33.658509Z

Men man kan fikse det ganske fort, slik at det smaker litt mindre oppkast:

slipset 2026-05-18T08:02:30.991179Z

(s/defcomponent :demo/counter
  :init   counter/init
  :render counter/render
  :handle counter/handle)

slipset 2026-05-18T08:03:07.033119Z

Eller deromkring. nå er det interessante ved denne “komponenten” uavhengig av komponenten og komponent-rammeverket kan lettere byttes ut.

teodorlu 2026-05-18T08:48:33.621889Z

Delte for å trekke fokus på tilstandsmaskinene, ikke at funksjonene var inline i map-et! Eksempelet er klippet fra README.

slipset 2026-05-18T09:05:06.766709Z

Skjønner det, men jeg synes fortsatt at eksemplet fra readme forsterker et mønster som jeg synes er helt feil.

gunnar 2026-05-18T09:17:35.622809Z

Dette er vel mer eller mindre elm-arkitekturen? Bare at i elm-arkitekturen er dette selve systemet (nexus), mens her er det på komponent-nivå. Og det vil vel øke kompleksiteten?

gunnar 2026-05-18T09:20:22.156609Z

Interessant konsepter, riktignok. Må lese mer om dette.

teodorlu 2026-05-18T09:36:38.347599Z

Jepp, Elm på backend! Og hele systemet er håndfast, systemet vet hva :demo/counter er. Så feks navigasjon snakker keywords!

gunnar 2026-05-18T10:02:45.026419Z

Kult!

2026-05-18T14:18:45.094399Z

Interessant, gør det fedtmorph?

teodorlu 2026-05-19T07:20:20.543449Z

Jeg tror det gjør fet morph, ja! (😂 🇳🇴 🇩🇰) Har ikke lest koden i detalj.

🤣 1
gunnar 2026-05-19T07:25:05.043729Z

Hva er "fet morph" - hele greia på en gang istedenfor små patches?

teodorlu 2026-05-19T07:33:15.684749Z

Jepp! Send hele HTML-en til klienten, putt en ID på øverste node, og la morph-biblioteket gjøre jobben.

teodorlu 2026-05-19T07:35:02.552869Z

"Hele" med forbehold, ikke bytt ut <html> helt på toppen. På Meetup-siden har vi

<html>
  <head>...</head>
  <body>
    <div id="morph">... alt innholdet ...</div>
  </body>
</html>
, og sikter på #morph med oppdateringen.

teodorlu 2026-05-19T07:39:49.859929Z

Det er sånn @andersmurphy har laget https://checkboxes.andersmurphy.com/. Hvis du titter i Network, kan du finne en content-type: text/event-stream.

❤️ 1
gunnar 2026-05-19T07:41:52.001409Z

Det er veldig kult. Syntes David Nolen sin presentasjon om temaet var veldig bra, med et godt real-world scenario. Har veldig lyst å eksperimentere med dette, men det finnes ikke nok minutter i døgnet.

gunnar 2026-05-19T07:42:21.615939Z

(det skjer altfor mange ting i livet akkurat nå 😄)

teodorlu 2026-05-19T07:46:51.824299Z

jeg har et 6-minuttersforslag! 1. Klon https://github.com/osloclojuremeetup/osloclojuremeetup.github.io 2. Fyr opp REPL 3. Kjør bb browse 4. (nå skal du se nettsiden) 5. Gå til src/frontpage.clj, gjør noen endringer, og eval buffer. Da skal du se meetup-siden oppdatere seg live! Med fat morph.

teodorlu 2026-05-19T07:47:21.597649Z

Vi har masse kule greier (Datomic, Datastar), men ikke noen vanskelig dev-prosess fordi det vi leverer bare er en liten statisk side.

👌 1
gunnar 2026-05-19T07:47:39.011689Z

Takk!

teodorlu 2026-05-19T07:58:06.044499Z

@sophie.bosio og jeg vil for øvrig gjerne se flere contributors til meetup-siden! Å kunne gjøre noe sammen med communityet, for communityet, har vært en stor del av motivasjonen for meg.

slipset 2026-05-19T08:03:01.324139Z

Grinebiteren og surpompen mumler noe om masse kule greier og statiske sider.

teodorlu 2026-05-19T08:07:24.677479Z

Hvis vi aldri prøver nye ting, lærer vi oss aldri nye ting! Datomic gir oss datamodell og datavalidering. Datastar gir oss bedre feedback når vi lager nettsiden lokalt.

slipset 2026-05-19T08:09:43.398289Z

Hvis vi aldri prøver nye ting, lærer vi oss aldri nye ting!Det er jeg enig i. Men å putte nye ting inn i produksjonssystemer som ikke helt trenger dem for å lære nye ting er jeg usikker på om er en god strategi. Det kan godt være det gir mening i dette tilfellet. Det er litt som å putte the descartes before the horse.

🤣 1
slipset 2026-05-19T08:11:25.688539Z

Og for referanse https://www.reddit.com/r/Jokes/comments/8a52oc/a_horse_walks_into_a_bar/

2026-05-19T08:13:41.916139Z

ja, intet er værre end at have halvt et gammelt system og halvt et nyt system.

teodorlu 2026-05-19T08:52:58.969929Z

Flaks for oss at både Datomic og Datastar gir mening, løser problemer vi har, og er brukt i hele systemet ;=)

🔥 1
emil0r 2026-05-18T07:13:30.213079Z

Morn

leifericf 2026-05-18T05:20:51.906559Z

Morn!

slipset 2026-05-18T05:34:12.949469Z

Mrn

2026-05-18T05:37:02.344029Z

God morgen!

hypirion 2026-05-18T05:45:51.820509Z

Morn!

msolli 2026-05-18T05:50:31.331929Z

Morn!

boosja 2026-05-18T05:53:21.025399Z

Morn!

mokr 2026-05-18T05:54:59.750759Z

Morn!

msolli 2026-05-18T05:58:02.084959Z

Minner om Oslo Clojure-lønsj på onsdag: https://www.meetup.com/clojure-oslo/events/314764529/

💜 2
slipset 2026-05-18T05:58:05.186219Z

Lunch på Onsdag?

msolli 2026-05-18T06:00:54.560999Z

Det er riktig!

gunnar 2026-05-18T06:19:46.048109Z

Morn!

kolstae 2026-05-18T06:37:32.438769Z

God morgen!