Longer posts that felt worth a full writeup. These posts are written by hand. If you want the shorter, sometimes AI-assisted versions, head to Notes.

All Posts

Structured Outputs the easy way with BAML

While working on Treechat’s new treesearch feature (a kind of mini-perplexity that searches the web for you and reads through all the results to answer the question you’re actually asking) I needed to build a small classifier to figure out if the search result is relevant to what the user was asking or not.

Introducing 1bin.org - an easy way to download and run CLI tools on Linux and Mac without installing them

This post is about how and why I built nikvdp/1bin and it’s companion site 1bin.org. If you just want to download static binaries of CLI tools, check out 1bin.org. If you’re interested in learning how to create your own self-extracting 1bins, take a look at the repo.

Introducing bbb - the easy way to build distributable CLI tools in Clojure with babashka and GraalVM

I’ve been spending the majority of my coding hours in Clojure lately and have really been enjoying it’s combination of brutal effectiveness, interactivity and general elegance. There’s been one thorn in my Clojure side though – it’s pretty terrible for building CLI tools and small scripts because at the end of the day Clojure is running on the JVM, and Java-based tools take an infamously long time to start.

Lesser known FZF tricks

junegunn/fzf is one of my absolute favorite terminal productivity tools.

It’s most common use is as a superpowered Ctrl+R (reverse isearch) to make finding and executing commands from your shell history fast and easy:

A tool to export Notion pages → Hugo-powered static sites/blogs

This post is about how/why I wrote notion-blog-exporter, if you just want to use it, go here.

I want to write more than I do, and had been noticing that one of the reasons I don’t write that many blog posts is that it’s hard to get started. I host this blog statically using Hugo, and while my current workflow works fine I write just infrequently enough that I have to relearn it every time. Currently the workflow goes something like this: pull up a markdown editor, find my local blog folder, look up the command to start hugo in preview mode, point a browser at the local hugo server, and then finally start writing. After looking at vim and writing for a bit, I then have to scroll around in my browser window to re-read my latest changes.

Typescript-like enums in Golang

I’ve been learning Golang recently, and while Go’s ultra-simple nature is often refreshing it can be a bit limiting too. One Typescript feature that I found myself missing is enums. While there are a lot of people asking about this, there aren’t a lot of Go-beginner friendly explanations of how to do this out there, so I decided to dig in. After a bit of research I’m happy to report that Go can get pretty darn close!