The curiosity journal of a technical creative.

The author at a campfire

About me

I'm Eric, a software engineer who likes to write. This blog captures my small experiments in math, physics, procedural generation, Clojure, and personal software tooling. I like hard science fiction (both reading and writing) and streamlining my workflow, but I also enjoy thinking on paper, which I do daily homeschooling my four kids. I live in West Michigan and am currently building Two Ravens, a local-first app for personal analytics.

Software products as notation

Yesterday I touched on Ken Iverson's "Notation as a Tool of Thought" and how features in a software product can have "suggestivity", not only complementing existing functionality but inspiring new features. In fact, looking again at Ken's list of important characteristics of a notation, each characteristic can be applied to software products. Here's my interpretation of how, using a hypothetical packing list app for concrete examples. ... Read more →

Features with "suggestivity"

In the previous post I talked about composing features together in my personal statistics platform, Two Ravens. But being able to mix existing features isn't the only test of whether a combination is a good idea—you can also see if a new feature inspires solutions to other problems. In his Turing Award lecture "Notation as a Tool of Thought", Ken Iverson calls this aspect of a good notation "suggestivity", the ability of a system to give the user new ideas to try. Having Two Ravens recognize a special _summary field that customizes how entries are displayed not only solved one problem, it suggested a similar solution for another problem, this one not on the data visualization side, but on the data entry side. ... Read more →

Composing features

A few years ago I took the challenge to be outside for 1000 hours in a single year. At the start, I logged outdoor time in an EDN-based DSL on my computer, but since being outside often meant being away from my computer, I captured outdoor time on my phone, then transferred it to the computer when I was back at my desk. That was minor but annoying enough that I made a simple mobile app. I've done a little mobile development, but not a lot, but I'm familiar with Clojure, so I used ClojureDart and learned enough Flutter to make an app that was good enough to get me through a year of logging. When I decided to build a personal statistics platform and listed ways I could have used such a thing in the past (the jobs to be done design practice), tracking time outside was one of the jobs I would have used such a tool for. The tool didn't need any new features, just the same data entry and basic visualization as other jobs, but again logging time I spent outdoors inspired a new feature, one that was small but which composed existing features in a way that's been useful for other types of entries too. ... Read more →

Why keep personal statistics?

In the previous post I described my process for creating a platform that lets me record and visualize personal statistics, such as how many free throws I hit, but I passed over the natural question of why bother to collect personal stats at all. I first read about the practice of treating one's life as a lab experiment in college, when I stumbled across Seth Roberts's blog. He took records of his daily activities to see what would improve his sleep, such as standing on one foot for a few minutes every day. I mentioned Seth in a column I wrote for the school paper, but other than that I didn't give his empirical practice much thought until a few years later when troubleshooting some health problems that had started, coincidentally, also while in college. At the time, I dismissed them as a problem with my glasses prescription. Only later did I learn that the headaches were actually cluster headaches. ... Read more →

Personal statistics platform

I switched my zettelkasten to Obsidian several years ago, and I've been pretty happy with it except that, in addition to notes, I tend to track a lot of personal statistics that in a zettelkasten are at best distracting minutiae and at worst big blobs of GeoJSON that crash the app. For example, when did I pay a bill? When did I change the oil in my car? That transforms Obsidian from a second brain into a plain old database, and one that's not natively very good at visualizing the data stored in it. Bases can store information in separate notes, and Dataview can extract information from inside notes, but visualizations like calendar heatmaps require plugins and often custom code. Before I used Obsidian, I kept a set of text files in which I kept a DSL for logging these statistics, but visualization was still awkward, and often I didn't remember exactly what information I tracked for a given stat. Did past entries record what account I paid the bill from? What order do I put the function's arguments in, or what did I call the map fields? When I chose to use AI to make a non-trivial tool, I decided to make something that would address these problems, with smoother data entry and built-in visualization, so I could get these noisy personal statistics out of my Obsidian vault and let it focus on more unique content. ... Read more →

Posts by topic

Product development

Software products as notation

Web development

Two Safari bugs

Taxicab Geometry

Circles of Apollonius