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.

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 →

Learning to vibe code

I've been learning to vibe code over the last few weeks, not because I've given up on programming and what I can learn from it, but because I have other projects that I bring more personal value to than the exact implementation of another database interface. To date I've been skeptical of vibe coding. Writing code has been part of my thinking process, and I doubted I would want to specify requirements as messy English prose instead of exact programming statements. But this project is heavily UI, at which I'm not fast at, so I decided to experiment with stepping back into a product owner role and using Claude Code as my development team. Unexpectedly, I've enjoyed it, and the LLMs haven't gotten as tripped up on their code as I expected. Maybe they've gotten more sophisticated. I certainly am not doing anything elaborate. The results so far have suited my needs, both in freeing my attention and in the quality of an app I now get to use. I only have one data point, but here are my best guesses on what contributed to having a better experience. ... Read more →

PocketMod wallet

Earlier this week I wrote about a slim pocket notebook cover I 3D printed from TPU filament. That notebook tends to be more longer notes, full sentences, paragraphs, and more exploratory mathematical diversions. For smaller-form notes, like names, to-dos, and quick calculations, I use a PocketMod. ... Read more →

Posts by topic

Web development

Two Safari bugs

Taxicab Geometry

Circles of Apollonius