Blogging deep dives

a brief history of rabbit holes

a brief history of rabbit holes

Drafting pull requests

local Markdown files

local Markdown files

Exploratory testing on pull requests

helping reviewers

helping reviewers

Conjure plugin for Neovim

trivial `quickbb`

trivial `quickbb`

Get last command output from Tmux

use pane-contents and awk

use pane-contents and awk

Tmux window launcher

"tindow"

"tindow"

Tmux session finder

browse vs. name

browse vs. name

Tmux worktree scripts

new sessions from within Tmux

new sessions from within Tmux

Tmux session launcher

workspace setup

workspace setup

Tmux as development environment

sessions, windows, and panes

sessions, windows, and panes

An advantage of Python comprehensions

constrained syntax

constrained syntax

The 120 years of Genesis 6:3

rhetorical utility vs. Chekhov's gun

rhetorical utility vs. Chekhov's gun

The penny game and Kingman's formula

utilization coupling

utilization coupling

Animated penny game

some missing documentation

some missing documentation

Time to completion in the penny game

another reason to keep WIP low

another reason to keep WIP low

Utilization in the penny game

a secondary metric

a secondary metric

Constraining input based on the current state

releasing work based on the bottleneck's production

releasing work based on the bottleneck's production

Constraining input in the penny game

keeping work in progress down

keeping work in progress down

Productivity improvements in the penny game

more output, more WIP

more output, more WIP

The Penny Game

simple manufacturing simulation

simple manufacturing simulation

Adding expected values of uniform distributions

a complication

a complication

Multiplying the expected value of a uniform distribution

more and more dice

more and more dice

Merging GeoJSON features

brevity vs. familiarity

brevity vs. familiarity

Geojson.io

various uses

various uses

Parallel line construction in taxicab geometry

two circles, not a cheat

two circles, not a cheat

Angle bisection in taxicab geometry

the Euclidean construction doesn't work

the Euclidean construction doesn't work

Angles in taxicab geometry

changes with orientation

changes with orientation

Circumcenters in taxicab geometry

perpendiculars as "midsets"

perpendiculars as "midsets"

Conic sections in taxicab geometry

1, maybe 2, out of 4

1, maybe 2, out of 4

Hyperbolas in taxicab geometry

lots of edge cases

lots of edge cases

Parabolas in taxicab geometry

construction

construction

Point-line distance in taxicab geometry

growing a circle

growing a circle

Ellipses in taxicab geometry

non-degenerate circles

non-degenerate circles

Taxicab geometry

square circles

square circles

Lines dividing lines

hyperbola in disguise

hyperbola in disguise

Random self-intersecting designs

balancing randomness with regularity

balancing randomness with regularity

Self-intersecting designs

what's the proper name?

what's the proper name?

Babashka scripts to notify on stdin

notify, notify-on, and moreutils

notify, notify-on, and moreutils

Bike gear ratios

overlapping ranges

overlapping ranges

Implicit stack climbing

idiom-level anti-pattern

idiom-level anti-pattern

Boolean flags hide two functions in one

refactor early, refactor often

refactor early, refactor often

HTMX versus ClojureScript

small but needs a server

small but needs a server

Song recursion

illustrating tail-call optimization and infinite recursion

illustrating tail-call optimization and infinite recursion

XKCD's latitude

narrowing the location down

narrowing the location down

XKCD's "Summer Solstice"

blame our tilt, not our orbit

blame our tilt, not our orbit

Niche refactoring

team-, project-, and library-specific refactors

team-, project-, and library-specific refactors

Refactoring Instaparse trees

generic zippers

generic zippers

Updating

specialty zippers

`require`

s with rewrite-cljspecialty zippers

Clojure indentation commas

narrower code, no extra line breaks, works with Parinfer

narrower code, no extra line breaks, works with Parinfer

Stacking Clojure's "ignore next form" reader macro

a tip I actually use every day

a tip I actually use every day

Clojure radix literals

Clojure's sneaky infix operator

Clojure's sneaky infix operator

EDN data DSL

a DSL for generating hash-maps

a DSL for generating hash-maps

Ratios between semitones under just intonation

less resonant pairwise ratios

less resonant pairwise ratios

Matching just intonation to equal temperament

within 1% is good enough for me

within 1% is good enough for me

Musical temperament

equal or just?

equal or just?

Manipulating SVGs in Clojure

tree walking, rewriting nodes, adding nodes

tree walking, rewriting nodes, adding nodes

The Palenque Code

unconvincing but a fun attempt

unconvincing but a fun attempt

Generating EDN from Janet

use byte buffers, not strings

use byte buffers, not strings

Insta-parsing with Janet

tagging matches

tagging matches

Clojure scratch files

a history of prototyping

a history of prototyping

Counting on my fingers

zero to sixty on one hand

zero to sixty on one hand

Topological sort in Clojure

small enough to Tweet

small enough to Tweet

Recurrence intervals near non-leap year centennials

intervals of 5, 6, 7, 11, 12, 28, and 40 years

intervals of 5, 6, 7, 11, 12, 28, and 40 years

Month recurrence

intervals of 5, 6, 11, and 28 years

intervals of 5, 6, 11, and 28 years

Logging macros

logging code and its result

logging code and its result

Debugging macros

locals, let bindings, and an interactive REPL

locals, let bindings, and an interactive REPL

Simple macros

cond-let, parallel hash-map values, key/value symbols

cond-let, parallel hash-map values, key/value symbols

Tiny annual calendar

habit tracking, planning, and reflection

habit tracking, planning, and reflection

Great circle distance formulas

comprehension versus computation

comprehension versus computation

Mapping regex matches

breaking out of a string

breaking out of a string

Tips for long-running nREPL jobs

affordances

affordances

Nuances of a shorter walk in the sun

the rare time/longitude plot

the rare time/longitude plot

A shorter walk in the sun

shorter, but riskier

shorter, but riskier

Probabilities on U.S. presidential elections

narrative fallacies on a small data set

narrative fallacies on a small data set

Live reloading Tampermonkey scripts

live reloading on other people's websites

live reloading on other people's websites

Live reloading HTML that didn't ask for it

injecting JavaScript

injecting JavaScript

HTTP server that watches files

live reloading

live reloading

Four-function calculator behavior

difference when chaining operations

difference when chaining operations

On RSS

it lightens the mental load

it lightens the mental load

Obb script to execute JavaScript in an open browser

automating a WebCatalog app

automating a WebCatalog app

Obb script to create new Obsidian file from browser URL

go go gadget Templater

go go gadget Templater

Obb script to copy browser URL and paste Markdown link

simpler keystrokes

simpler keystrokes

Spirals from ellipses

more art than science

more art than science

Orbits with the same period

teardrop

teardrop

DogBunny puzzle solver

taking the fun out of it

taking the fun out of it

Hour and minute hand alignment

the kids are learning analog

the kids are learning analog

Hammerspoon with Fennel

embed it

embed it

Neovim with Fennel

quickfix and tree-sitter

quickfix and tree-sitter

Circles on a hypotenuse problem

seems simple, isn't

seems simple, isn't

Retro line art

bored in middle school

bored in middle school

ClojureDart macro for nested components

adding complexity

adding complexity

Driving fast but not fastest

less safe but more tedious

less safe but more tedious

Choosing a speed to minimize passing

safe but tedious

safe but tedious

Speeding and traffic

hurry up and wait

hurry up and wait

Speeding and stop lights

time cancels out luck

time cancels out luck

Saving time by speeding

doesn't save much

doesn't save much

Astronomical wall calendar

data visualization a day

data visualization a day

Scraping an HTML dictionary with Babashka and Bootleg

quick and simple

quick and simple

Constructing major system mnemonics with Markov chains

imitating grammar

imitating grammar

Major system mnemonics with a smaller vocabulary

less is more

less is more

Constructing major system mnemonics with grammar

thanks, English

thanks, English

Phonetic major system mnemonics

easier for a human, harder for a computer

easier for a human, harder for a computer

Major system mnemonics

minor improvement

minor improvement

Finding mnemonics in a body of text

harder than just remembering the digits

harder than just remembering the digits

Superformula identicons

infinite possibility, tiny utility

infinite possibility, tiny utility

Symmetrical identicons

infinite possibility space × 3

infinite possibility space × 3

Divisibility graph identicons

a small possibility space

a small possibility space

Hand-drawn dungeon identicons

a large possibility space

a large possibility space

Mapping orbital positions

a little numerical approximation

a little numerical approximation

Mapping elliptical orbits

a little matrix multiplication

a little matrix multiplication

Locker doors puzzle

slightly magical

slightly magical

Lens transducer

experimental

experimental

Exponential smoothing transducer

introductory signal processing

introductory signal processing

Specialty transducers

e.g. take-until-repeat, interpolate, spillover

e.g. take-until-repeat, interpolate, spillover

Workaday transducers

e.g. tap, dedupe-by, parallel

e.g. tap, dedupe-by, parallel

Transducers

list processing

list processing

Bus barn dequeueing

better strategies?

better strategies?

Jumping higher when the sun and moon are overhead

less than I expected

less than I expected

Jumping higher when the sun is overhead

more than I expected

more than I expected

Divisibility scatter plots

tricks for smallish primes

tricks for smallish primes

Best base for modulo tricks?

possibly base 9

possibly base 9

Modulo tricks in other bases

special behavior around the choice of base

special behavior around the choice of base

Divisibility graphs and modulo tricks

explaining a couple small mysteries

explaining a couple small mysteries

Divisibility graph of 7

a starting point

a starting point

Calculating a date's day of the week

the final step

the final step

Calculating anchor days

simple math and memorization

simple math and memorization

Doomsdays

not as scary as it sounds

not as scary as it sounds

Recursive subdivision

a generic function to only subdivide as needed

a generic function to only subdivide as needed

Coastal variation

add some regional parameters

add some regional parameters

Basic island generation

polygon to irregular fractal

polygon to irregular fractal

Sunlight's distance through the atmosphere

influence on color?

influence on color?

Mapmaking on a toroidal world

sometimes the simpler option is actually pretty good

sometimes the simpler option is actually pretty good

Compass directions on a toroidal world

facing unusual choices

facing unusual choices

Day and night in the toroidal interior

it keeps switching

it keeps switching

Toroidal interior

dark and eerie

dark and eerie

Toroidal poles

double horizon

double horizon

Torus with Earth's area and volume

two equations, two unknowns

two equations, two unknowns

An Earth-sized torus

mostly hollow

mostly hollow

Toroidal world

worldbuilding in genus one

worldbuilding in genus one

Calculator words

a simple amusement

a simple amusement

Apparent size above horizon

just one triangle inside another

just one triangle inside another

Finding hide and seek probabilities analytically

reinventing the choose function

reinventing the choose function

Probabilities when hiding more items

less computation, more exact

less computation, more exact

Hiding strategies

overanalyzing the task

overanalyzing the task

Timeline of the patriarchs

less certain than usually shown

less certain than usually shown

Uncertain Gantt

fuzzy at the edges

fuzzy at the edges

Gantt charts of diverging possibilities

divergantt

divergantt

Relative schedules

a simple start

a simple start

Sum and product puzzle extra credit

doesn't help

doesn't help

Sum and product puzzle

re-encoding the problem

re-encoding the problem

Drawing the Mandelbrot set

it's the negative space

it's the negative space

Semi-tessellation with a continuous line

a (minor) dilemma

a (minor) dilemma

Growth limited by interpersonal conflict?

or just reading too much into a cubic term?

or just reading too much into a cubic term?

A sigmoidal population

resource contention over an idea?

resource contention over an idea?

Nelson rules

leveraging a small set of Clojure's collection functions

leveraging a small set of Clojure's collection functions

Rate, time, and distance nomogram for shorter distances

after feedback from the kids

after feedback from the kids

Manipulating nomographic matrices symbolically

data as code

data as code

Rate, time, and distance nomogram

for the children

for the children

Horizon distance along ground

more work to get the same result

more work to get the same result

Distance to horizon

surprisingly simple

surprisingly simple

Adventures in notebook programming

some different approaches

some different approaches

Vim syntax range plugin

convenient for mixing Clojure and Markdown

convenient for mixing Clojure and Markdown

A Clojure reader with string interpolation

forking tools.reader to add a dispatch macro

forking tools.reader to add a dispatch macro

Mid-ocean ridge trace

extracting geographical coordinates from an image

extracting geographical coordinates from an image

Stack-math compendium

for future reference

for future reference

Stack-based square and cube roots

could be worse

could be worse

Chunking stack-math operations

a vocabulary

a vocabulary

More flexible rewrite rules

wading into a broader solution space

wading into a broader solution space

Rewriting stack algorithms programmatically

find and replace

find and replace

Improving a mental math stack algorithm

some numbers are easier to multiply than others

some numbers are easier to multiply than others

Stack-based mental math

leveraging small working memory but big(ger) long-term memory

leveraging small working memory but big(ger) long-term memory

Mini Zettelkasten

130 lines of Clojure, 1.9 kilobytes of JavaScript

130 lines of Clojure, 1.9 kilobytes of JavaScript

Clojure-flavored JavaScript

macro expand, compile, and minify

macro expand, compile, and minify

Accelerating to oblivion?

is there a relativistic barrier below the speed of light?

is there a relativistic barrier below the speed of light?

View from a photon

is everything flat?

is everything flat?

Michigan big trees near you

group hug

group hug

Drawing an icosphere

divide and inflate

divide and inflate

Drawing an icosahedron

spherical coordinates for the win

spherical coordinates for the win

Michigan county boundary roads

three naming conventions

three naming conventions

Babashka script to serve stdin

for those who prefer the command line to setting up a webserver

for those who prefer the command line to setting up a webserver

Analysis of incremental water heating

writing math to avoid tedious computation

writing math to avoid tedious computation

Heating cold water in smaller batches

writing code to avoid tedious arithmetic

writing code to avoid tedious arithmetic

Modeling a simple thermodynamics problem

setup for further experiments

setup for further experiments

Heating cold water

feels paradoxical

feels paradoxical

Calendar recurrence

when you'd rather store old calendars than buy new ones

when you'd rather store old calendars than buy new ones

Checkerboard islands

don't go cross-eyed

don't go cross-eyed

Terrain chess

because war is also senseless

because war is also senseless

Variations on hand-drawn dungeons

not a major development

not a major development

Procedural generation by hand

invented in a meeting

invented in a meeting

Scaling stars on the flag

not hoping to need it, just an occupational hazard

not hoping to need it, just an occupational hazard

`quickbb` script for Babashka

saving rework with an nREPL

saving rework with an nREPL

`quick` script for Tmux

entr Joe

entr Joe

Improving generated Lindenmeyer rules

using something like a state machine

using something like a state machine

Generating Lindenmeyer fractals

from random data definitions

from random data definitions

More Lindenmeyer fractals

for the pretty pictures

for the pretty pictures

Lindenmeyer fractals as data

revisiting old code to turn logic into data

revisiting old code to turn logic into data

Sunrise, sunset, and latitude

sunrise and sunset at the extremes

sunrise and sunset at the extremes

Sunrise, sunset, and the winter solstice

in which the earliest sunset and latest sunrise don't happen on the same day

in which the earliest sunset and latest sunrise don't happen on the same day

Rotation of the solar terminus

days are longer than we realize

days are longer than we realize