I typically write about web development, video games, or my own life.

Subscribe

2026

NINJA GAIDEN 4 proves that PlatinumGames still has the sauce PlatinumGames signature in-depth combat, djent/metal inspired soundtrack, ninjas, cyber ninjas, blood ninjas, demons, sexy ladies, and more. A solid base game plus lots of good “extras”. The Hundred Line -Last Defense Academy- is Kazutaka Kodaka's magnum opus Though my favorite routes might be the ones written by Kotaro Uchikoshi. Masafumi Takada returning for the soundtrack and Rui Komatsuzaki returning for art make me glad that Too Kyo games is still around and successful. This is an absolutely massive game, and my feelings about it are complex and hard to cover. I threw cakes, robbed banks, and stomped a monarch in Claire a la Mode This faster paced sequel to Curse Crackers requires no prior knowledge to enjoy. The game has three full unique storylines, each with five unique stages, and 2-3 playable characters. I really enjoyed the size and exeuction of almost everything in the game. The moment to moment gameplay reminded me of Kirby games of yore. Curse Crackers: For Whom the Belle Toils made my heart jingle This game is very clearly channeling the Game Boy Color, right down to me wishing it had a manual. Because it feels like they missed a few tutorials that would’ve been covered by a small booklet back in the day. Other than that and a few odd points of game balance, this is an indie game that I really enjoyed!

2025

Mega Dimension is frustrating, overpriced, and doing little to evolve Pokémon as a series Not even my favorite Pokémon (Raichu) getting TWO Mega Evolutions—or an entire DLC themed around my favorite pastry (donuts)—could make this feel like anything other than a mediocre cash grab to me. The cute caterpillar game: Öoo Nama Takahashi does it again! A perfect bite-sized puzzle platformer. Bonne Maman advent calendar 2025 I tried 24 different jams and spreads in the days leading up to Christmas. I just can't PKMN.help myself I’m gaming again a little, but the ball is still very much rolling on PKMN.help updates. What's new? (November) Little big changes to pkmn.help! A curated links page. And my head is full of TV static. Pokémon Legends: Z-A trapped me in a Potemkin village Z-A struggles to push the series forward to the same degree as Pokémon Legends: Arceus, but I still enjoyed much of my 60 hours. What's new? (October) Grand Archive, Pokémon Legends Z-A, and a new site design. Everdeep Aurora lets you explore the apocalypse as a cute kitty A cute little exploration game with no combat. Short and sweet, but also a bit obtuse and backtracking heavy. Pipistrello and the Cursed Yoyo felt like an identity crisis Waiter, there’s Hollow Knight in my Zelda! I at least fumbled my way through using accessibility settings. Pokémon Type Calculator: Pokédex sorting & UI updates In addition to adding the ability to sort the Pokédex by the stat, I refined several aspects of the UI: most notably the type labels, space usage efficiency in the header area, and typography. SHINOBI: Art of Vengeance failed to excite me An overstuffed and challenging action platformer with gorgeous hand drawn art DELTARUNE Chapter 4 cements this series as one of my favorites Now this is videogaming. It’s fun, silly, sad, serious, and made me cry multiple times. NINJA GAIDEN: Ragebound sliced its way to my heart The Game Kitchen deserves a blue ribbon for this action platforming masterpiece. Absolutely no fluff or filler. Stop giving me the finger: An argument against the pointer cursor on buttons Putting the pointer cursor (👆) on every button is ugly, unnecessary, and dilutes its power for signaling links. DELTARUNE Chapter 3 spreads its wings with increased time and budget Toby Fox and friends really outdid themselves with this one. Playdate Season 2 asked me to dig holes and help a dog poop A stationary shmup, an ancient aliens archaeology game, a supremely silly point and click adventure, and a game about becoming an extraordinarily long dog with extraordinarliy big poops, and more… What's new? (July) Grand Archive TCG, Hunter × Hunter, finishing Dragon Age: The Veilguard, Playdate Season Two, a new site theme, and health updates. Pokémon Type Calculator: UI updates I overhauled the Pokémon Type Calculator UI: fixing a 12 month old bug, and improving contrast and readability in the design to help focus attention where it’s important. I need juicier interfaces Flat design is easier to make, but I feel like we’re all malnourished from lack of lighting and ornamentation. I juiced up my site with more color, and even more fun lighting effects. CSS obfuscation and userstyles HTML is not an API for site visitors; do not expect stability. The days of userstyles are essentially over, and they’re not likely to come back. Jade & Lime: A new theme is unveiled I created a new theme to enhance the reading experience of my blog posts and better feature different shades of green. A Balatro-style holographic card hover effect Balatro’s hover effect on cards is the perfect example of UI juice that just makes you have fun without even “playing”. I was inspired to do a similar effect on the web. Min-maxing dinner with my Zojirushi and Dutch oven How my Zojirushi rice cooker and my Lodge Dutch oven have helped me minimize effort spent on dinner while maximizing my results. And a small rant in favor of “intuitive cooking”. I played Pokémon Crystal for the first time, 24 years after its release I just played Pokémon Crystal (2001) for the first time, despite starting with Pokémon Blue (1998). It looked and sounded great on the Analogue Pocket, but the dated gameplay left me wanting more. In defense of the “for...of” Loop Despite its introduction in ES2015 and implementation in all browsers over 8.5 years ago, I still see .forEach used in favor of the modern for...of loop. Sadly, .forEach is ill-suited for modern await-centric code, and complicates control flow. It’s time to revisit this commonly banned syntax. Enhancing the Pokédex: Input lag, React, and monitor refresh rates I released a large update to the Pokédex, intended to better use screen real estate on large displays. Read on for screenshots, the full changelog, and a rant about React and performance. Creating a colorized disjoint union of graphs I used graph traversal to implement an error detection system for a graph editor at a previous job. I actually had to use algebra at work one time After trying and failing to dust off my knowledge of trigonometry, I had to re-learn linear equations and algebraic systems of equations in order to solve a problem at work. I swear this was not an interview question. Simulating JS await with generator functions Did you know that before async functions existed in JS, we simulated them with generator functions? Come with me on a code journey, in which I reveal the relatively short helper function that made it all possible. Pokémon Type Calculator updates I made a few nice updates to Pokémon Type Calculator in the last week, adding new features and improving clunky interfaces. Ittle Dew 2 failed to nail everything I love about 2D Zelda Ittle Dew 2 (2016) is an indie game clearly inspired by the 2D Legend of Zelda games. Frustrating combat holds it back from greatness. I loved the art and many of the puzzles, though. Automated image manipulation with ImageMagick ImageMagick is one of the best tools I’ve ever used for automating image manipulation. This post explains some of my common use cases, and links to ImageMagick’s full list of commands. Blog questions challenge I’ve been tagged to answer seven questions about my blog! Cobalt Core does basically everything right I loved Cobalt Core! A deckbuilding roguelike with an engaging time loop story, great music, gorgeous pixel art, and fun gameplay. Goodboy Galaxy is an authentic GBA game, down to its faults Goodboy Galaxy (2024) is extremely cute and oozing with style, but I also got a little annoyed in the home stretch Video games roundup (2024) My thoughts about the games I played in 2024. Contains thoughts about 28 games, over 2 per month. Yeah, I’m a gamer. Editorial style & shrines progress A new design era: Editorial style. Two color design returns, but I’m aiming for something more elegant than retro. I’ve also started working on my long awaited shrines! Contains 17 screenshots.

2024

A memorial for Curry A memorial post about Curry, our beloved cat of the last 12 years. Tidying up the website again I took some free time to improve the desktop navigation on my website, and better organize information and links. Enjoy the screenshots. 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. Creating a fresh new green theme Exploring the process behind my fresh new green, including a design I discarded and the inspiration for my new style. A memorial for 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 for wavebeem.com 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 How to query shadow DOM, and why you might not want to Examples of how to query shadow DOM, and when you actually don’t want to. Based on real life testing with Stencil.js web components. Turning your mouse cursor into a flashlight Turns the lights off and navigate the page using a flashlight. Making an interactive flashlight toy 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. 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

Buttermilk biscuit recipe 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. Crispy tofu recipe 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: Beyond pre-built Thinking beyond pre-built gear, this guide will help prepare you to build your own keyboard.

2018

Mechanical keyboards 101: An introduction An introduction to the exciting world of mechanical keyboards. 7 tips for better bash Bash is not easy or enjoyable, but it can be very useful once you understand a few of its quirks

2017

Generators, iterators, and iterables in JS 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 How to use promises effectively (written before async/await existed) Compiler code generation How to make code generation for a compiler. Making a Lisp-style programming language interpreter in JS 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: an immutable, value oriented, compile-to-JS programming language An introduction to Squiggle, a compile-to-JS programming language I made.