Blog

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), I stumbled upon the lazy attribute. 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.

The GME Narrative

January 31, 2021

A story that I keep hearing about Gamestop Corp. stock is "Reddit beat up Wall Street". This narrative is an onion of wrong. It's based on an incorrect premise (Reddit vs Wall St), furthered by bad reasoning (this hurt hedge funds), fueled by misinformation (trading restrictions targeted retail traders), and supported by a minor conspiracy theory (RH customers are being front-run).

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.