mårn
morn!
God morgen!
(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.Så dette er omtrent akkurat det motsatte av hva jeg ville gjort.
Men man kan fikse det ganske fort, slik at det smaker litt mindre oppkast:
(s/defcomponent :demo/counter
:init counter/init
:render counter/render
:handle counter/handle)Eller deromkring. nå er det interessante ved denne “komponenten” uavhengig av komponenten og komponent-rammeverket kan lettere byttes ut.
Delte for å trekke fokus på tilstandsmaskinene, ikke at funksjonene var inline i map-et! Eksempelet er klippet fra README.
Skjønner det, men jeg synes fortsatt at eksemplet fra readme forsterker et mønster som jeg synes er helt feil.
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?
Interessant konsepter, riktignok. Må lese mer om dette.
Jepp, Elm på backend!
Og hele systemet er håndfast, systemet vet hva :demo/counter er. Så feks navigasjon snakker keywords!
Kult!
Interessant, gør det fedtmorph?
Jeg tror det gjør fet morph, ja! (😂 🇳🇴 🇩🇰) Har ikke lest koden i detalj.
Hva er "fet morph" - hele greia på en gang istedenfor små patches?
Jepp! Send hele HTML-en til klienten, putt en ID på øverste node, og la morph-biblioteket gjøre jobben.
"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.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.
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.
(det skjer altfor mange ting i livet akkurat nå 😄)
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.
Vi har masse kule greier (Datomic, Datastar), men ikke noen vanskelig dev-prosess fordi det vi leverer bare er en liten statisk side.
Takk!
@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.
Grinebiteren og surpompen mumler noe om masse kule greier og statiske sider.
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.
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.
Og for referanse https://www.reddit.com/r/Jokes/comments/8a52oc/a_horse_walks_into_a_bar/
ja, intet er værre end at have halvt et gammelt system og halvt et nyt system.
Flaks for oss at både Datomic og Datastar gir mening, løser problemer vi har, og er brukt i hele systemet ;=)
Morn
Morn!
Mrn
God morgen!
Morn!
Morn!
Morn!
Morn!
Minner om Oslo Clojure-lønsj på onsdag: https://www.meetup.com/clojure-oslo/events/314764529/
Lunch på Onsdag?
Det er riktig!
Morn!
God morgen!