Boilerplate Busting in Functional Languages

6 May 2024
Programming-Languages, Macros, Programming

This is the story of how I solved a problem (ugly, cumbersome boilerplate code) that I ran into while writing a program in a functional language (Elixir). Functional programming languages often pride themselves on expressiveness and elegance; but occasionally they are not amenable to the most obvious solutions to the problems we wish to solve. In this case, the simplest solution to my problem would have been to have a global mutable variable. ...

Warp Factor Refactoring in Emacs

1 Jun 2023
Emacs, Programming, Tools

Here’s a nifty Emacs workflow for doing a project-wide search-and-replace on steroids. While I do use refactor tools that come with language servers,1 sometimes those aren’t enough. Consider the case where you not only need to change the name of a function, but also e.g. need to swap the order of two of its arguments. Or you’ve broken one function out into two that need to be chained together. Whatever—there are plenty of ways where the IDE won’t be able to do everything that you need. ...

Praise for the pragmatic third camp

16 Mar 2023
Programming, Philosophy, Business

Some years ago I came across a blog post that described programmers as being in one of three camps. It's a fun, short post, so I encourage you to go read that real quick, but the gist of it is that programmers generally fall into one of three categories according to what they primarily value: Applied mathematicians, who appreciate elegant solutions to problems. Program execution on von Neumann machines is incidental. ...

Continuations—what are they?

17 Nov 2022
Tutorials, Featured
Programming, Programming-Languages

I had a friend ask me what continuations are, and why they're useful. There's a ton of literature about continuations; this is just a simple example meant to showcase something small and hopefully grokkable. You will need to understand a little bit of Racket, but if you know any Scheme, that should be good enough. If you just want a quick primer, check out Learn X in Y minutes for Racket. ...

Unix as a tool forge

7 Nov 2022
Programming, Technology, Emacs

Wikipedia1 cites a few different sources on what "Unix Philosophy" is. Peter Salus summarizes it as: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. That second bullet point is my favorite: making composable programs rather than monolithic systems. In this way, Unix is designed to be a forge for easily building new tools. ...

A New Font

1 Aug 2022
Happy-Things, Design, Programming, Typography

This week I created a custom build of the Iosevka font. I've used Input Mono for a long time now, and was very happy with it. However, it was missing a few glyphs that I wanted to use. Moreover, I didn't have a license for the Input font to use on e.g. my blog. Iosevka is stupendously customizable, so I thought I'd see if I could get something close to Input's styles. ...

Programs and Intent

9 Nov 2021
Programming, Verification

What does this program do? At the most reduced level, one could say that a program’s behavior is defined by the effect it has on the hardware running it. That’s not very useful however; when we’re programming, we often have to deal with legacy code and tease out the original intent of the code. Saying that the meaning of a program is entirely encapsulated by the code is saying that the intent and the implementation are the same. ...

Models of Programming

24 Oct 2021
Programming, Programming-Languages

Last week I was studying outside of a lecture hall where someone was teaching an introductory course on computer programming. There was a lot that I overheard that I disagreed with; this essay is an attempt to help me crystallize what exactly I disagreed with.


Control-Flow Analysis

27 Jul 2021
Programming, Computer-Science, Research, Cfa

Control-Flow Analysis is a popular technique for performing static analysis of many different kinds of programming languages. It’s most often needed in cases where you have some kind of dynamic dispatch: either where you have first-class functions or when you have objects and you call one of their methods.


Macros with Elixir

27 Feb 2019

I gave a presentation at the Utah Elixir Meetup this February. Here’s the recording of my presentation: Watch on YouTube I’ve posted the slides as an HTML file, along with some materials to follow along with, on my GitHub account. Check it out!