Welcome to foldl

I’m in the middle of a website redesign, but all of the old (often embarrassingly poorly written) content is still here.

Recent posts

Currently Reading
I love to read! I also have a “bad” habit of reading four or five books at a time. If you’re ever curious what I’m currently reading, this is an up-to-date record of the half-finished books scattered around my home. Make it Clear A collection of bite-sized chapters about effective communication from a long-time MIT professor. Thus far it’s been excellent, although much of the content focuses on presentations which are not relevant to me right now.
Skolem and existential types
In this post I explain what skolem variables are and how they relate to existential quantification. After reading this, you should have an intuition for how skolems work and why existential types are a natural extension from skolems. Lots of talk about existential types lately A couple of months ago a coworker of mine gave a talk on using existential types to address the expression problem. The talk was great and engaging, and provided a nice refresher on working with existentials - this isn’t something I use daily.
Build your very own ban hammer
In this post, I describe how to implement a ban button in a web application with minimal boilerplate. This is one of those features that shouldn’t be used often, but when you need it, you need it. The requirements for a useful user ban are simple and straightforward; prevent them from doing anything else on the application. You can break that down into two parts. First, prevent them from doing anything else right now.
Using D3 on Hugo pages via Shortcodes
In this post, I explain how to easily embed one or more D3 visualizations directly into Hugo page content. Embedding D3 content Hugo posts with Shortcodes Using D3 on any page requires loading the D3 library and a script containing the D3 code you want to run. Both of those tasks require adding <script> tags to the page, so you’ll need some way to add a pair of script tags. Additionally, you probably don’t want the D3 code to mount its visualization directly to the page’s body, so you’ll need a target element somewhere in the DOM.
Understanding variability in Heroku dyno performance
Heroku is a great platform if your app conforms to their expectations, but their dyno abstraction is somewhat leaky. It is surprisingly easy to deploy an application that behaves differently than you’d expect despite their documentation’s warnings about shared CPUs. In this post, I share some research on the performance/behavior of their various dyno classes and how I think about selecting dynos for different workloads. If you’re familiar with Heroku’s platform, I suggest skipping ahead to exploring CPU-intensive workloads.
Debugging Page Rendering
Debugging rendering issues is a bit of a black art. Doing so effectively requires understanding the browser’s critical rendering path along with how to use a sufficiently powerful debugger. This article aims to explain the basics of the critical rendering path - although there are far better resources available - as well as how to use Chrome’s debugger to identify the issue. A primer on the Critical Rendering Path After your browser requested this webpage it began a complex dance between three interconnected processes in order to process the HTML & ultimately render a page in the browser window.
Hiring Specialists
In this post I want to talk about how to hire novel specialists. There have been thousands of pages already written on hiring in-general, and I don’t have anything to add there. However, twice in my career I’ve needed to hire a novel specialist into the organization to bring in new skills. I’m defining novel to mean: someone with highly technical skills that your current organization does not have the capability to evaluate effectively.
Hunting for a match
This post continues the series of interview problem breakdowns. In this series, I attempt an interview problem from somewhere on the internet that I have never seen before and share all the details with you. I set a limit of one hour for the initial attempt, then follow up with a correct solution regardless of how long it takes. Hunting for a match With all the changes and a new schedule for my toddler its been difficult to find the time to work on these challenges In fact, this is the first problem I’m attempting under “lockdown”.
Chaotic arrays
This post continues the series of interview problem breakdowns. In this series, I attempt an interview problem from somewhere on the internet that I have never seen before and share all the details with you. I set a limit of one hour for the initial attempt, then follow up with a correct solution regardless of how long it takes. Unwinding chaotic arrays I went through this problem back in late February, but with COVID-19 its been difficult find the time for reflection and documenting my attempt.
Hunting for Triplets
This post continues the series of interview problem breakdowns. In this series, I attempt an interview problem from somewhere on the internet that I have never seen before and share all the details with you. I set a limit of one hour for the initial attempt, then follow up with a correct solution regardless of how long it takes. Finding Geometric Triplets This was a fun problem. Implementing something that worked was simple, but finding the correct solution took a change in perspective and deeper insight into the problem.