clojure-norway 2026-07-07

God morgen, og god sommer! ✈️🇯🇵

Jeg har brukt noen kvelder på core.async.flow. Stanget først hodet i veggen; hvordan skal HTTP-serveren spørre flyten om å få et resultat? Da jeg snudde på avhengighetene ble det mye hyggereligere, flyten kontrollerer HTTP-serveren.

(ns tlh2
  "What if flow lifecycle controls the HTTP server"
  (:require
   [clojure.core.async.flow :as flow]
   [org.httpkit.server :as http-server]))

(defn handler [{}]
  {:status 200
   :body "okayyy"})

(defn server
  ([] {:params {:http-port "HTTP port to bind"}})
  ([argmap]
   (when-not (:http-port argmap)
     (throw (ex-info "http port missing" {:argmap argmap})))
   {:http-port (:http-port argmap)})
  ([{:as state :keys [http-port http-server]} transition]
   (prn transition)
   (case transition
     ::flow/resume
     (assoc state :http-server
            (http-server/run-server
             #'handler
             {:port http-port
              :legacy-return-value? false}))

     ::flow/pause
     (do (http-server/server-stop! (:http-server state)) state)
     state

     ::flow/stop state))
  ([state input msg] [state nil]))

(comment
  (def flow (flow/create-flow {:procs {::server {:proc (flow/process #'server)
                                                 :args {:http-port 9999}}}}))

  (flow/start flow)
  (flow/resume flow)
  (flow/pause flow)
  (flow/stop flow)

  ,)

det er joe armstrong og rob pike igjen; don't communicate by sharing memory, share memory by communicating!

👍 1
💯 1

jeg var i utgangspunktet kritisk: hva med Integrant? Hva når en komponent trenger å ta en annen komponent for å få startet opp? Men da er spørsmålet, burde ikke heller disse to integrant-komponentene (core async flow-prosessene) heller sendt meldinger til hverandre?

Etter å ha jobbet i en Componentkodebase i snart 10 år, er det min mening at sånne avhengigheter er styggedom. Det er vanskelig å diskutere sånne ting i det generelle, så hva er den konkrete avhengigheten mellom komponentene dine?

For øvrig. Du kunne brukt ny keys! syntaks her (1.13alpha2) og hvorfor plukker du ut http-poet av args map bare for å lage et nytt map med http-port? Kunne vel bare sendt arga-map videre?

> hva er den konkrete avhengigheten mellom komponentene dine Jeg jobber ut teorien nå. Problemdefinisjonen er heller "kan vi klare oss helt uten integrant?" og svaret ser ut til å være ja!

> 1.13alpha2 Jepp! Men jeg venter på en stabil release tror jeg

> hvorfor plukker du ut http-poet av args map bare for å lage Fordi jeg vil ha eksplisitt kontroll på argumentene. Argmap og state er forskjellige ting.

BTW @neumann er i Sverige i midten av oktober 14. tror jeg) og vurderer en tur til Oslo. Kanskje en meetup hadde vært på sin plass?

👍 1

det bør vi få til!

Stemmer! Jeg har også DM’a en del med ham, og han nevnte at han skal holde en presentasjon i Stockholm 14. oktober.

Han nevnte at han vurdere en tur til Oslo før eller etter det.