This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-11-13
Channels
- # announcements (2)
- # babashka (30)
- # beginners (44)
- # biff (20)
- # calva (15)
- # cider (7)
- # clerk (4)
- # clojure (15)
- # clojure-austin (1)
- # clojure-europe (35)
- # clojure-hungary (1)
- # clojure-nl (1)
- # clojure-norway (6)
- # clojure-uk (7)
- # clojurescript (33)
- # conjure (1)
- # cryogen (1)
- # cursive (3)
- # data-science (8)
- # docker (2)
- # emacs (78)
- # gratitude (2)
- # hyperfiddle (26)
- # improve-getting-started (1)
- # jobs-discuss (12)
- # lsp (7)
- # malli (11)
- # missionary (57)
- # off-topic (14)
- # pathom (13)
- # portal (6)
- # reagent (6)
- # releases (3)
- # ring (25)
- # shadow-cljs (18)
- # squint (11)
- # vim (3)
Looking into denotational design by Conal Elliott lately, perhaps for designing electric-adjacent tools (like state management). Any opinions/resources?
Browsing that video briefly, his breakdowns of fn inputs/outputs is very good and something I do before making components, usually in a sketching notebook. While I see value in his delivery, I also think that monads or things that have "laws of composability" are fairly unrealistic in programming, or the kinds of programming i delve into heavily. Things do not get added equally if the sequence varies, which I find to be the key to developing fast: determining build sequence
I think a lot about denotative design and consider managed network to be a mandatory stepping stone to getting there (enabling full stack system as a function as a starting point to even thinking about these ideas)
it is extremely hard, imo it reduces to "how do we express CRUD apps in a mathematical way such that the theory of calculus, integrals, diff eqns etc (and discrete analogues) is applicable to them"
this question is one of my personal pet topics and objectives
to summarize, i dont think the technology is there yet, except for Electric, which is closing in and perhaps making it possible for the first time to start to ask these questions
whatever the answer is, it will be taught in high school in 50 years, like algebra
Preach:zap:
i spoke with conal for 3 hrs this morning and it was mindblowing. gonna keep in regular touch
trip report !
u should really talk to him @U09K620SG
he made it pretty clear what he thinks of clojure (very negative)
we have different goals
what did he say that changed your view on something?
he actually did not discount clj/forth or anything in our talk, he advocated for agda as the “design language”
sometimes a ui4/button will render as busy/disabled even after a hard refresh. i assume it thinks there is a remote effect still running. what are some reasons this might happen? can i clear all pending effects after a refresh? fwiw here's the relevant code:
(defn toggle-scope [[scope-template-id size :as scope-template-pointer] added-scopes & [default-val]]
(if-let [matching-scopes (seq
(filter (comp (partial = scope-template-pointer)
(juxt :scope-template-id :size)
second)
added-scopes))]
(doseq [[scope-id _] matching-scopes]
(foreign-append! @scopes-depot
[:delete {:bid-id BID-ID
:scope-id scope-id}]))
(foreign-append! @scopes-depot
[:upsert (merge {:bid-id BID-ID
:scope-id (util/uuid)
:size size}
default-val)])))
(ui/button
(e/fn []
(e/server (toggle-scope [id size] (e/snapshot added-scopes)
(assoc DEFAULT_VAL :scope-template-id id))))
(dom/props
{:class (if (some
(comp (partial = [id size])
(juxt :scope-template-id :size)
second)
added-scopes)
"text-white bg-teal-600"
"text-gray-500 bg-white")})
(text (str size size-unit)))