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.