Blog

Oracle Cloud Free Tier

October 03, 2025

Oracle has a very generous free tier that comes with dozens of fully loaded footguns.

Terminals and Forges

September 01, 2025

I keep investigating software and then losing track of it so I figure I might as well write it down somewhere.

If a Woodchuck Could Chuck Story Points

August 30, 2025

I spent a decade writing small fibonacci numbers in issue trackers (from 6-person startups to Google) in service of sprint planning. It hasn't ever helped forecast work, but I haven't been able to clearly articulate why until recently.

New CLI Tools

July 07, 2025

A bunch of people have been writing replacements for CLI tools. Here are some I've investigated.

Blob Storage, Hosting Immich

June 08, 2025

Getting off Google Photos and onto Immich got surprisingly involved.

Using Memory in Python

June 04, 2024

When you think about memory usage, usually you're trying to reduce it. CPython, malloc, and your kernel all helpfully try to help you use less memory. However, I found myself fighting against all 3 of those because I was trying to use more memory.

Penetrating the GFW

July 15, 2022

The current state of penetrating the Great Firewall is basically what you'd expect: a bunch of half-abandoned projects with partially written documentation. As a bonus, some of it is in Chinese.

Firefox Image Lazy-loading

September 23, 2021

While contemplating what image format I should use for an image gallery (answer: webp avif), I stumbled upon loading="lazy". This sounded perfect! No need to muck about with IntersectionObserver or pagination. Just toss all your images onto a page and let the browser figure the rest out.

SET_PDEATHSIG From Python

April 01, 2021

You've got a python process that runs another process and waits for it to finish. Maybe it's some ffmpeg process or something. Everything is great until, one day, you notice that you've got dangling ffmpeg processes.

How I Debug HTTP(S) Shenanigans

September 14, 2020

A common question I field is something along the lines of "what is wrong with this redirect/HTTPS certificate/header?" The person asking is often trying to debug something like their nginx config with their browser.

Python's Default Hash Function

June 03, 2020

In python, you can create your own class and stick instances of it in a set or use them as keys of a dict without overriding any dunder methods. But what actually happens when you do this? How does python hash your object?

Computer Stuff, Issue 4

June 23, 2019

Battle.net

2 issues ago, I talked about how important IE6 was to the formative years of my programming experience. Perhaps more important to me was Battle.net 1. B.net was a matchmaking service for Blizzard games (I was late to the scene, so mostly Brood War, The Frozen Throne, and Lord of Destruction).

Computer Stuff, Issue 3

June 14, 2019

Symantec, Comodo, Honest Achmed

Last week, we talked about how YouTube helped kill IE6. More recently (2018), Google did something similar (use their marketshare to do something that was tough).

Computer Stuff, Issue 2

June 08, 2019

How YouTube Helped Kill IE6

When I am old and have grandkids, I'm going to regale them with stories of IE6 compatibility. IE6 was an important part of the formative years of my programming experience. You would write some HTML/PHP/JS/CSS and make it fast and gorgeous and everything was great. Then, you'd show it to someone and they'd see something totally broken because they were using IE6.

Computer Stuff, Issue 1

May 31, 2019

Welcome to the inaugural issue/volume/post of Computer Stuff! I've been reading a lot of Matt Levine's Money Stuff (which is about corporate finance), so I thought I should write posts in the same style under the title Computer Stuff (about software). This will probably be weekly, but since this is the first, I feel like I'm allowed to use any material since the beginning of time.

Concurrency Through the Ages

June 01, 2017

How do I make my computer do lots of things fast (especially if the computer runs Linux and the things are being done in Python)?

Happing Ending Syndrome

May 16, 2017

Definition

When a story ends on a happy note for the sake of ending on a happy note in contrast to everything the plot had built up, cheapening everything that happened before.

StarCraft II: Wings of Mediocrity

May 15, 2017

The SC2 campaign was neutered and I am bitter about it.

iPhone Security

February 29, 2016

(This post has an update from August 4, 2016 at the bottom.)

OpenSSH 6.9 breaks PieTTY

September 17, 2015

I upgraded openssh-server to 6.9p1-1 and was no longer able to connect with PieTTY (and PuTTY). According to the changelog:

SQLite Considered Terrible

August 14, 2015

There are two things every web framework needs: a deceptively short "hello, world!" example and a todo list or blog app. Thus, when I set out to write pigwig, I needed to also write blogwig. Despite my obvious preference for statically generated blogs, this one needed to be dynamic and so needed a database. SQLite3 seemed like the popular choice, so away I went.

Counting Woes

October 18, 2013

In #learnprogramming on Freenode, someone came in with this question:

dunst (libnotify)

April 23, 2013

But notify-osd/notification-daemon!

They're dead. notify-osd has had no releases in over a year and notification-daemon is worse by 4. With the advent of Gnome 3, both have fallen by the wayside since the Gnome shell now handles notifications.

How I Set Up git.raylu.net

March 29, 2013

Motivation

GitHub doesn't let you host private repositories for free. (Also, their commit list view is silly.) GitLab's setup is ridiculous. Getting hosted on GitLab.com might be an option, but I haven't explored it thoroughly.

Linode

March 28, 2013

Linode has 2 forms of e-mail:

OfflineIMAP, mutt, PieTTY

November 22, 2012

This is just going to be a rundown of my e-mail set up. Prepare for some obscure software.

The Chromium + Windows Font Rendering Bug(s)

November 10, 2011

Background

Font rendering is hard. Getting the fonts you want on the web is even harder because not everyone has the fonts you want to use installed. One solution is to render the fonts as images using canvas or a pre-rendered image.