Menu

Blog

Subscribe to my RSS feed to stay up to date. What is RSS?

2024

Very verdant: Even more green

After starting Firefox and VS Code themes, I realized my website didn't have enough green. I massively improved dark mode, and added more green everywhere. Enjoy the screenshots.

Fresh new green

Exploring the process behind my fresh new green, including a design I discarded and the inspiration for my new style.

Cory

A memorial post about Cory, one of my closest friends.

Health is temporary

After a year of chronic pain, I wish I had more relief. But I am making progress. I also discovered I don't even use my teeth and tongue correctly, lol.

Home page update

I updated my home page and added more decoration to the site. I want it to be easier to browse and more fun looking.

Creating an HTML “spoilers” element with no JS

It's strangely difficult to make a “spoilers” element without JS, and even harder to do it with support for all mobile operating systems and screen readers.

Diagnosing a common source of race conditions in JS

My thoughts on why expression statements can be a source of bugs—especially in async code—and a proposal for reviving JavaScript's nearly unused void operator.

Getting weirder with fonts, and: too much of a good thing

PP Talisman from Pangram Pangram Foundry is my new heading font—or “cool font” as I'm calling it in the code. But I'm trying not to overuse it!

Becoming an Astro-not

I spent an entire weekend migrating my Eleventy site to Astro—and then back to Eleventy! A reflection on using the right tool for the job, when many options are viable.

Experiment: Puffy 3D mode

Taking inspiration from Claymorphism, I made an experimental version of my site with a puffy 3D look.

wavebeem 2.0: Slime Mode

With cohost.org going away, I decide to lean even harder towards working on my personal website. I've created a new theme, with a softer, more playful aesthetic than ever before. I've also created many new sections on my website.

Open world fatigue

A brief reflection on the Legend of Zelda and the popularity of open world video games.

JS context managers

See how to adapt Python's context managers for use in JavaScript. Break free from clunky try...finally blocks with this one weird trick.

Cool 3D buttons

A nice collection of buttons you'll want to push over and over again. These 3D buttons call back to a time of shiny silver plastic and tactile experiences.

Introducing: The Toybox

The Toybox is a new section of my site for web toys, jokes, and experiments.

Making a theme selector

How to make a theme selector for your website, and why you might want to have more than one theme.

I made a new 88×31 site button

I made a new site button GIF for folks who want to link to my website.

10 years of themes

An image gallery and reflection of 10 years of themes I've made for wavebeem.com

JS compare function

Exploring a small but mighty function that supercharges the JS Array sort method to rival Lodash's orderBy

Querying shadow DOM

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

Flashlight

Turns the lights off and navigate the page using a flashlight.

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.

2023

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.

Windows Vista in CSS

Pure CSS nostalgia.

What pronouns does a jester use?

Press to reveal the punchline.

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".

2022

ザ・ワールド (The World)

無駄 無駄 無駄 無駄 (MUDA MUDA MUDA MUDA)

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.

2021

Recipe: Buttermilk biscuits

Detailed instructions on how to make fluffy biscuits at home.

2020

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.

2019

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.

2018

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.

2017

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.

2016

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.

2015

JS gotchas with this and new

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

Squiggle: a JS language

An introduction to Squiggle, a compile-to-JS programming language I made.