Technical blog
My main technical interests are broadly in programming languages: functional and higher-order
programming, compilers, virtual machines, and type theory.
-
Three detailed solutions to Leetcode #10: regular expression matching
September 27, 2024
-
Implementing generators with continuation-passing style, streams, and defunctionalization
April 2, 2023
-
Loop once... (f)or else! (Or, Python pro-tip number 2)
March 25, 2023
-
Functional programmers hate this one trick
February 12, 2023
-
Refactoring Asynchronous Recursion with Continuation-Passing Style
January 22, 2023
-
Implementing environment-based evaluation of recursive functions in OCaml
January 20, 2023
-
SAT solving with higher-order continuations
October 22, 2022
-
It's my first time uwu
August 12, 2021
-
Await before returning!
July 23, 2021
-
A little extra safety with RankNTypes
January 1, 2021
-
Dynamic Programming in Haskell
September 12, 2020
-
Roll your own reminders with dunst
May 22, 2020
-
Programming in Lojban
December 12, 2019
-
Roll your own Ngrok with Nginx, Letsencrypt, and SSH reverse tunnelling
January 29, 2019
-
systemd-nspawn: disabling link-local addressing
August 6, 2017
-
Haskell and Pushbullet - a tale of SMS on the command line
February 20, 2017
-
Prakash puzzles: a hundred prisoners and a lightbulb
February 10, 2017
-
Decidable orderings in Idris
November 11, 2016
-
Token authentication with Servant
June 18, 2016
-
Redirecting file descriptors to more than one file in bash
June 13, 2016
-
Quick navigation with Neovim terminals
May 2, 2016
-
The case against Python
April 19, 2016
-
Python pro-tip number 1
April 1, 2016
-
Managing downloads from the command line
March 17, 2016
-
Gotos in Python
March 6, 2016
-
Windows debugging for fun and profit
December 31, 2015
-
Date night with OverloadedStrings
December 23, 2015