Skip to content

Instantly share code, notes, and snippets.

Making Tools Developers Actually Use — Michiel Borkent

AI transcript


Well, okay. I'm glad to be here. My name is Michiel Borkent, also known as Borkdude in the Clojure community. The title of my talk is "Making Tools Developers Actually Use," and some of my projects are actually used, so I'm going to mention those. Babashka, Clj-kondo, and Squint—I'll be revisiting those in the talk.

So at some point in time, Nikita Prokopov said on Twitter to Christophe Grand, who we all know, "I love Clojure. Why is Clojure not more popular?" And Christophe said, "My theory: it's really different than popular languages. Each major difference is a barrier to learning and adoption. So with any barrier, it's easy to see the problems in front of you but hard to see the benefits."

hi Jaret, while you are looking at datomic pro scripts - i want to donate the user interview setup scripts we wrote and have been using for a year or two. We also use them in our prod demo environments - CICD pipeline

This repo https://github.com/hyperfiddle/datomic-browser contains three scripts

The value of these scripts is they get a prospective user from zero to working mbrainz instance in about 60 seconds, reliably and while under pressure, preventing a number of common mistakes, typos, issues and hurdles

  • Downloading and extracting datomic
(require '[hyperfiddle.photon :as p]
'[hyperfiddle.api :as hf])
(hfql [{(submissions "")
[{(:dustingetz/shirt-size . {::hf/options (shirt-sizes gender)})
[:db/id :db/ident]}
{(:dustingetz/gender . {::hf/options (genders)})
[:db/id (:db/ident . {::hf/as gender})]}]}
{(genders)
[:db/ident]}])
@dustingetz
dustingetz / missionary-concept-map.md
Last active October 24, 2025 14:56
Missionary concept map

Missionary concept map

Missionary primitives fit into three categories:

Effect descriptions = pure functional programming which is about trees not graphs

  • continuous flow, m/?< (switch)
  • m/watch, m/latest, m/cp
  • m/observe
  • m/reductions, m/relieve
@dustingetz
dustingetz / hyperfiddle-clojure-ns-browser.md
Last active August 19, 2025 16:31
hyperfiddle clojure namespace browser

Clojure namespace browser – Hyperfiddle example app

See source code below.

CleanShot 2025-07-20 at 16 01 40
(ns dustin.y2021.missionary_promise
(:require [hyperfiddle.rcf :as rcf :refer [tests % !]]
[missionary.core :as m]))
; We want to turn a promise-thing into a Task
; Leo: The problem with Promise and CompletableFuture is no cancellation
; What task do we want? Is the task listening to the promise? Or is the task the process backing the promise?
; Background: when you get a promise, there is a process in the background which eventually completes the promise.
; Do you want to await the result of an already running promise
; or do you want to run the process of the promise when the task is run?
@dustingetz
dustingetz / electric-references.md
Last active June 5, 2025 13:07
Reference list — Electric Clojure

References — Electric Clojure

Electric Clojure implements a form of arrowized continuous time dataflow programming with extensions for network-transparent function composition.

(ns dustingetz.y2025.gene2
(:require [hyperfiddle.electric3 :as e]
[hyperfiddle.electric-dom3 :as dom]
[missionary.core :as m]))
(e/defn MyTextarea
[v & {:keys [rows cols]
:or {rows 10 cols 50}}]
(dom/textarea (dom/props {:rows rows :cols cols :value v})
; this returns a stream of values
(ns dustingetz.edn-viewer0
(:require [clojure.datafy :refer [datafy]]
[clojure.core.protocols :refer [nav]]
[contrib.data :refer [unqualify]]
[dustingetz.easy-table :refer [TableScroll Load-css]]
[dustingetz.flatten-document :refer [flatten-nested]]
[hyperfiddle.electric3 :as e]
[hyperfiddle.electric3-contrib :refer [Tap]]
[hyperfiddle.electric-dom3 :as dom]
[hyperfiddle.electric-forms0 :refer [Checkbox*]]