Blog

Subscribe via my RSS feed to stay updated.

Querying shadow DOM

Examples of how to query shadow DOM, and when you actually don't want to.

Flashlight: Making toys for the web

I made a toy flashlight for the web. It simulates darkening the web page and following the cursor. It looks somewhat convincingly like a flashlight. Enjoy!

JS Proxy and private properties

The default Proxy implementation doesn't work well with private properties, but we can fix this! I also explore other approaches to private data in JS.

Developing with web components

Thoughts on developing with web components from scratch; no UI libraries. This covers custom elements and very basic use of the <template> element. Shadow DOM is mentioned but not used.

You deserve to be happy, or: the web wasn't a mistake

A discussion of why people hate JS, Electron, and the web. Also a plea about how excessive negativity hurts you and those around you.

The web is an app platform

The web has been an app platform for most of its life. I discuss the history of the web and my definition of "app".

I made a Geocities site button

88×31 GIFs were all the rage back on Geocities; I decided to finally make one for my own site.

Recipe - Best dip ever

My favorite IBS-friendly dip to make at home.

Why I don't like useState

Why useState is so hard to use correctly, and what we can do about it.

Recipe - Buttermilk biscuits

Detailed instructions on how to make fluffy biscuits at home.

Adventures in de-Googling

My successes and failures in trying to de-emphasize Google's presence in my life.

Recipe - Crispy tofu

How to make delicious crispy tofu at home.

Tagged unions in JavaScript

A disciplined approach to state management and domain modeling for JavaScript and TypeScript. Also known as algebraic data types / discriminated unions.

SeaGL 2019

Building Your own keyboard with free software.

Mechanical keyboards 201

Thinking beyond pre-built gear, this guide will help prepare you to build your own keyboard.

Mechanical keyboards 101

An introduction to the exciting world of mechanical keyboards.

7 tips for better bash

You'll be writing better bash code after following these 7 tips.

JavaScript iterators and more

A comparison and overview of generators, iterators, and iterables in JS.

React without JSX

A quick overview on using React without JSX or any build tools.

Broken promises

How to use promises effectively (written before async/await existed)

Compiler code generation

How to make code generation for a compiler.

Making a language

How to make a programming language from scratch in JS.

The leaning tower of Babel

An exploration of Babel's caveats.

JS gotchas with this and new

How JS's 'this' and 'new' work, and how to avoid issues with them.

Squiggle - a JS language

Squiggle: a compile-to-JS programming language.