<?xml version="1.0" encoding="utf-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xml:lang="en"
>
  <title>wavebeem.com</title>
  <subtitle>sage fennel&#39;s website</subtitle>
  <link href="https://www.wavebeem.com/feed.xml" rel="self" />
  <link href="https://www.wavebeem.com/" />
  <updated>2026-06-03T06:52:54.000Z</updated>
  <id>https://www.wavebeem.com/</id>
  <author>
    <name>sage fennel</name>
  </author>
  <entry>
    <title>Mina the Hollower is the Hollow Knight of Zelda (derogatory)</title>
    <link href="https://www.wavebeem.com/blog/2026/review-mina-the-hollower/" rel="alternate" />
    <updated>2026-06-03T06:52:54.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-mina-the-hollower/</id>
    <summary>
      I&#39;m begging indie game devs to stop making their games more like Dark Souls. [...]
    </summary>
  </entry>
  <entry>
    <title>Shin Megami Tensei IV wasn&#39;t everything I hoped it would be</title>
    <link href="https://www.wavebeem.com/blog/2026/review-shin-megami-tensei-iv/" rel="alternate" />
    <updated>2026-05-24T05:02:56.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-shin-megami-tensei-iv/</id>
    <summary>
      Sometimes being disappointed is worse than disliking something. Interesting demons, fantastic music, and a great battle system aren&#39;t enough to make me love this game. [...]
    </summary>
  </entry>
  <entry>
    <title>MOUSE: P.I. for Hire is a gouda game</title>
    <link href="https://www.wavebeem.com/blog/2026/review-mouse-pi-for-hire/" rel="alternate" />
    <updated>2026-05-24T05:02:56.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-mouse-pi-for-hire/</id>
    <summary>
      Reminiscent of DOOM (1993), but with a large emphasis on its WWII allegorical story, and MC Jack Pepper&#39;s wise-cracking and &quot;cheesy&quot; narration. [...]
    </summary>
  </entry>
  <entry>
    <title>I liked Demon Tides, but I really wanted to love it</title>
    <link href="https://www.wavebeem.com/blog/2026/review-demon-tides/" rel="alternate" />
    <updated>2026-04-09T04:38:52.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-demon-tides/</id>
    <summary>
      Demon Tides is a competent 3D platformer with a few too many layers of unnecessary stuff. Development studio Fabraz really makes some endearing games, though. [...]
    </summary>
  </entry>
  <entry>
    <title>I got sucked in to Cyberpunk 2077&#39;s dark, depressing world</title>
    <link href="https://www.wavebeem.com/blog/2026/review-cyberpunk-2077/" rel="alternate" />
    <updated>2026-03-12T06:39:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-cyberpunk-2077/</id>
    <summary>
      What I had assumed was a sci-fi sandbox of gang shootings and carjackings was actually an emotionally devastating tragedy about a horrifying new way to die. And the Phantom Liberty DLC felt like a killer spy movie video game adaptation. [...]
    </summary>
  </entry>
  <entry>
    <title>NINJA GAIDEN 4 proves that PlatinumGames still has the sauce</title>
    <link href="https://www.wavebeem.com/blog/2026/review-ninja-gaiden-4/" rel="alternate" />
    <updated>2026-02-09T07:55:20.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-ninja-gaiden-4/</id>
    <summary>
      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 &quot;extras&quot;. [...]
    </summary>
  </entry>
  <entry>
    <title>The Hundred Line -Last Defense Academy- is Kazutaka Kodaka&#39;s magnum opus</title>
    <link href="https://www.wavebeem.com/blog/2026/review-hundred-line/" rel="alternate" />
    <updated>2026-01-25T22:16:43.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-hundred-line/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>I threw cakes, robbed banks, and stomped a monarch in Claire a la Mode</title>
    <link href="https://www.wavebeem.com/blog/2026/review-claire-a-la-mode/" rel="alternate" />
    <updated>2026-01-25T19:56:18.000Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-claire-a-la-mode/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>Curse Crackers: For Whom the Belle Toils made my heart jingle</title>
    <link href="https://www.wavebeem.com/blog/2026/review-curse-crackers/" rel="alternate" />
    <updated>2026-01-19T23:48:01.552Z</updated>
    <id>https://www.wavebeem.com/blog/2026/review-curse-crackers/</id>
    <summary>
      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&#39;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! [...]
    </summary>
  </entry>
  <entry>
    <title>Mega Dimension is frustrating, overpriced, and doing little to evolve Pokémon as a series</title>
    <link href="https://www.wavebeem.com/blog/2025/pokemon-mega-dimension/" rel="alternate" />
    <updated>2026-01-01T00:09:20.079Z</updated>
    <id>https://www.wavebeem.com/blog/2025/pokemon-mega-dimension/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>The cute caterpillar game: Öoo</title>
    <link href="https://www.wavebeem.com/blog/2025/ooo-the-caterpillar-game/" rel="alternate" />
    <updated>2025-12-31T06:04:13.022Z</updated>
    <id>https://www.wavebeem.com/blog/2025/ooo-the-caterpillar-game/</id>
    <summary>
      Nama Takahashi does it again! A perfect bite-sized puzzle platformer. [...]
    </summary>
  </entry>
  <entry>
    <title>Bonne Maman advent calendar 2025</title>
    <link href="https://www.wavebeem.com/blog/2025/bonne-maman-advent-calendar/" rel="alternate" />
    <updated>2025-12-29T08:04:55.026Z</updated>
    <id>https://www.wavebeem.com/blog/2025/bonne-maman-advent-calendar/</id>
    <summary>
      I tried 24 different jams and spreads in the days leading up to Christmas. [...]
    </summary>
  </entry>
  <entry>
    <title>I just can&#39;t PKMN.help myself</title>
    <link href="https://www.wavebeem.com/blog/2025/i-just-cant-pkmn-help-myself/" rel="alternate" />
    <updated>2025-12-21T01:38:37.679Z</updated>
    <id>https://www.wavebeem.com/blog/2025/i-just-cant-pkmn-help-myself/</id>
    <summary>
      I&#39;m gaming again a little, but the ball is still very much rolling on PKMN.help updates. [...]
    </summary>
  </entry>
  <entry>
    <title>What&#39;s new? (November)</title>
    <link href="https://www.wavebeem.com/blog/2025/whats-new-november/" rel="alternate" />
    <updated>2025-12-03T08:03:11.448Z</updated>
    <id>https://www.wavebeem.com/blog/2025/whats-new-november/</id>
    <summary>
      Little big changes to pkmn.help! A curated links page. And my head is full of TV static. [...]
    </summary>
  </entry>
  <entry>
    <title>Pokémon Legends: Z-A trapped me in a Potemkin village</title>
    <link href="https://www.wavebeem.com/blog/2025/review-pokemon-legends-za/" rel="alternate" />
    <updated>2025-11-05T02:04:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-pokemon-legends-za/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>What&#39;s new? (October)</title>
    <link href="https://www.wavebeem.com/blog/2025/whats-new-october/" rel="alternate" />
    <updated>2025-11-01T21:48:47.458Z</updated>
    <id>https://www.wavebeem.com/blog/2025/whats-new-october/</id>
    <summary>
      Grand Archive, Pokémon Legends Z-A, and a new site design. [...]
    </summary>
  </entry>
  <entry>
    <title>Everdeep Aurora lets you explore the apocalypse as a cute kitty</title>
    <link href="https://www.wavebeem.com/blog/2025/review-everdeep-aurora/" rel="alternate" />
    <updated>2025-10-09T04:07:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-everdeep-aurora/</id>
    <summary>
      A cute little exploration game with no combat. Short and sweet, but also a bit obtuse and backtracking heavy. [...]
    </summary>
  </entry>
  <entry>
    <title>Pipistrello and the Cursed Yoyo felt like an identity crisis</title>
    <link href="https://www.wavebeem.com/blog/2025/review-pipistrello/" rel="alternate" />
    <updated>2025-10-09T03:43:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-pipistrello/</id>
    <summary>
      Waiter, there&#39;s Hollow Knight in my Zelda! I at least fumbled my way through using accessibility settings. [...]
    </summary>
  </entry>
  <entry>
    <title>Pokémon Type Calculator: Pokédex sorting &amp; UI updates</title>
    <link href="https://www.wavebeem.com/blog/2025/pkmn-help-sorting/" rel="alternate" />
    <updated>2025-09-27T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/pkmn-help-sorting/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>SHINOBI: Art of Vengeance failed to excite me</title>
    <link href="https://www.wavebeem.com/blog/2025/review-shinobi-art-of-vengeance/" rel="alternate" />
    <updated>2025-09-20T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-shinobi-art-of-vengeance/</id>
    <summary>
      An overstuffed and challenging action platformer with gorgeous hand drawn art [...]
    </summary>
  </entry>
  <entry>
    <title>DELTARUNE Chapter 4 cements this series as one of my favorites</title>
    <link href="https://www.wavebeem.com/blog/2025/review-deltarune-ch-4/" rel="alternate" />
    <updated>2025-09-14T20:09:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-deltarune-ch-4/</id>
    <summary>
      Now *this* is videogaming. It&#39;s fun, silly, sad, serious, and made me cry multiple times. [...]
    </summary>
  </entry>
  <entry>
    <title>NINJA GAIDEN: Ragebound sliced its way to my heart</title>
    <link href="https://www.wavebeem.com/blog/2025/review-ninja-gaiden-ragebound/" rel="alternate" />
    <updated>2025-09-12T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-ninja-gaiden-ragebound/</id>
    <summary>
      The Game Kitchen deserves a blue ribbon for this action platforming masterpiece. Absolutely no fluff or filler. [...]
    </summary>
  </entry>
  <entry>
    <title>Stop giving me the finger: An argument against the pointer cursor on buttons</title>
    <link href="https://www.wavebeem.com/blog/2025/stop-giving-me-the-finger/" rel="alternate" />
    <updated>2025-09-11T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/stop-giving-me-the-finger/</id>
    <summary>
      Putting the pointer cursor (👆) on every button is ugly, unnecessary, and dilutes its power for signaling links. [...]
    </summary>
  </entry>
  <entry>
    <title>DELTARUNE Chapter 3 spreads its wings with increased time and budget</title>
    <link href="https://www.wavebeem.com/blog/2025/review-deltarune-ch-3/" rel="alternate" />
    <updated>2025-08-16T02:48:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-deltarune-ch-3/</id>
    <summary>
      Toby Fox and friends really outdid themselves with this one. [...]
    </summary>
  </entry>
  <entry>
    <title>Playdate Season 2 asked me to dig holes and help a dog poop</title>
    <link href="https://www.wavebeem.com/blog/2025/playdate-season-2/" rel="alternate" />
    <updated>2025-08-16T02:19:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/playdate-season-2/</id>
    <summary>
      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... [...]
    </summary>
  </entry>
  <entry>
    <title>What&#39;s new? (July)</title>
    <link href="https://www.wavebeem.com/blog/2025/whats-new-july/" rel="alternate" />
    <updated>2025-07-30T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/whats-new-july/</id>
    <summary>
      Grand Archive TCG, Hunter × Hunter, finishing Dragon Age: The Veilguard, Playdate Season Two, a new site theme, and health updates. [...]
    </summary>
  </entry>
  <entry>
    <title>Pokémon Type Calculator: UI updates</title>
    <link href="https://www.wavebeem.com/blog/2025/pkmn-help-ui-update/" rel="alternate" />
    <updated>2025-06-14T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/pkmn-help-ui-update/</id>
    <summary>
      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&#39;s important. [...]
    </summary>
  </entry>
  <entry>
    <title>I need juicier interfaces</title>
    <link href="https://www.wavebeem.com/blog/2025/i-need-juicier-interfaces/" rel="alternate" />
    <updated>2025-05-12T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/i-need-juicier-interfaces/</id>
    <summary>
      Flat design is easier to make, but I feel like we&#39;re all malnourished from lack of lighting and ornamentation. I juiced up my site with more color, and even more fun lighting effects. [...]
    </summary>
  </entry>
  <entry>
    <title>CSS obfuscation and userstyles</title>
    <link href="https://www.wavebeem.com/blog/2025/css-obfuscation-and-userstyles/" rel="alternate" />
    <updated>2025-05-10T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/css-obfuscation-and-userstyles/</id>
    <summary>
      HTML is not an API for site visitors; do not expect stability. The days of userstyles are essentially over, and they&#39;re not likely to come back. [...]
    </summary>
  </entry>
  <entry>
    <title>Jade &amp; Lime: A new theme is unveiled</title>
    <link href="https://www.wavebeem.com/blog/2025/jade-and-lime/" rel="alternate" />
    <updated>2025-05-04T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/jade-and-lime/</id>
    <summary>
      I created a new theme to enhance the reading experience of my blog posts and better feature different shades of green. [...]
    </summary>
  </entry>
  <entry>
    <title>A Balatro-style holographic card hover effect</title>
    <link href="https://www.wavebeem.com/toybox/2025/balatro/" rel="alternate" />
    <updated>2025-05-01T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2025/balatro/</id>
    <summary>
      Balatro&#39;s hover effect on cards is the perfect example of UI juice that just makes you have fun without even &quot;playing&quot;. I was inspired to do a similar effect on the web. [...]
    </summary>
  </entry>
  <entry>
    <title>Min-maxing dinner with my Zojirushi and Dutch oven</title>
    <link href="https://www.wavebeem.com/blog/2025/min-maxing-dinner/" rel="alternate" />
    <updated>2025-04-07T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/min-maxing-dinner/</id>
    <summary>
      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 &quot;intuitive cooking&quot;. [...]
    </summary>
  </entry>
  <entry>
    <title>I played Pokémon Crystal for the first time, 24 years after its release</title>
    <link href="https://www.wavebeem.com/blog/2025/review-pokemon-crystal/" rel="alternate" />
    <updated>2025-03-17T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-pokemon-crystal/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>In defense of the “for...of” Loop</title>
    <link href="https://www.wavebeem.com/blog/2025/js-for-of-loop/" rel="alternate" />
    <updated>2025-03-10T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/js-for-of-loop/</id>
    <summary>
      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&#39;s time to revisit this commonly banned syntax. [...]
    </summary>
  </entry>
  <entry>
    <title>Enhancing the Pokédex: Input lag, React, and monitor refresh rates</title>
    <link href="https://www.wavebeem.com/blog/2025/pokedex-upgrades/" rel="alternate" />
    <updated>2025-03-01T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/pokedex-upgrades/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>Creating a colorized disjoint union of graphs</title>
    <link href="https://www.wavebeem.com/toybox/2025/disjoint-graph-union/" rel="alternate" />
    <updated>2025-02-28T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2025/disjoint-graph-union/</id>
    <summary>
      I used graph traversal to implement an error detection system for a graph editor at a previous job. [...]
    </summary>
  </entry>
  <entry>
    <title>I actually had to use algebra at work one time</title>
    <link href="https://www.wavebeem.com/toybox/2025/fun-algebra/" rel="alternate" />
    <updated>2025-02-25T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2025/fun-algebra/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>Simulating JS await with generator functions</title>
    <link href="https://www.wavebeem.com/blog/2025/js-await-generators/" rel="alternate" />
    <updated>2025-02-23T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/js-await-generators/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>Pokémon Type Calculator updates</title>
    <link href="https://www.wavebeem.com/blog/2025/pkmn-help-updates/" rel="alternate" />
    <updated>2025-02-18T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/pkmn-help-updates/</id>
    <summary>
      I made a few nice updates to Pokémon Type Calculator in the last week, adding new features and improving clunky interfaces. [...]
    </summary>
  </entry>
  <entry>
    <title>Ittle Dew 2 failed to nail everything I love about 2D Zelda</title>
    <link href="https://www.wavebeem.com/blog/2025/review-ittle-dew-2/" rel="alternate" />
    <updated>2025-02-15T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-ittle-dew-2/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>Automated image manipulation with ImageMagick</title>
    <link href="https://www.wavebeem.com/blog/2025/imagemagick/" rel="alternate" />
    <updated>2025-02-09T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/imagemagick/</id>
    <summary>
      ImageMagick is one of the best tools I&#39;ve ever used for automating image manipulation. This post explains some of my common use cases, and links to ImageMagick&#39;s full list of commands. [...]
    </summary>
  </entry>
  <entry>
    <title>Blog questions challenge</title>
    <link href="https://www.wavebeem.com/blog/2025/blog-questions/" rel="alternate" />
    <updated>2025-02-04T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/blog-questions/</id>
    <summary>
      I&#39;ve been tagged to answer seven questions about my blog! [...]
    </summary>
  </entry>
  <entry>
    <title>Cobalt Core does basically everything right</title>
    <link href="https://www.wavebeem.com/blog/2025/review-cobalt-core/" rel="alternate" />
    <updated>2025-02-03T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-cobalt-core/</id>
    <summary>
      I loved Cobalt Core! A deckbuilding roguelike with an engaging time loop story, great music, gorgeous pixel art, and fun gameplay. [...]
    </summary>
  </entry>
  <entry>
    <title>Goodboy Galaxy is an authentic GBA game, down to its faults</title>
    <link href="https://www.wavebeem.com/blog/2025/review-goodboy-galaxy/" rel="alternate" />
    <updated>2025-01-25T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/review-goodboy-galaxy/</id>
    <summary>
      Goodboy Galaxy (2024) is extremely cute and oozing with style, but I also got a little annoyed in the home stretch [...]
    </summary>
  </entry>
  <entry>
    <title>Video games roundup (2024)</title>
    <link href="https://www.wavebeem.com/blog/2025/video-games-roundup/" rel="alternate" />
    <updated>2025-01-11T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/video-games-roundup/</id>
    <summary>
      My thoughts about the games I played in 2024. Contains thoughts about 28 games, over 2 per month. Yeah, I&#39;m a gamer. [...]
    </summary>
  </entry>
  <entry>
    <title>Editorial style &amp; shrines progress</title>
    <link href="https://www.wavebeem.com/blog/2025/editorial-style/" rel="alternate" />
    <updated>2025-01-06T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2025/editorial-style/</id>
    <summary>
      A new design era: Editorial style. Two color design returns, but I&#39;m aiming for something more elegant than retro. I&#39;ve also started working on my long awaited shrines! Contains 17 screenshots. [...]
    </summary>
  </entry>
  <entry>
    <title>A memorial for Curry</title>
    <link href="https://www.wavebeem.com/blog/2024/curry/" rel="alternate" />
    <updated>2024-12-30T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/curry/</id>
    <summary>
      A memorial post about Curry, our beloved cat of the last 12 years. [...]
    </summary>
  </entry>
  <entry>
    <title>Tidying up the website again</title>
    <link href="https://www.wavebeem.com/blog/2024/tidying/" rel="alternate" />
    <updated>2024-12-21T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/tidying/</id>
    <summary>
      I took some free time to improve the desktop navigation on my website, and better organize information and links. Enjoy the screenshots. [...]
    </summary>
  </entry>
  <entry>
    <title>Very Verdant: Even More Green</title>
    <link href="https://www.wavebeem.com/blog/2024/even-more-green/" rel="alternate" />
    <updated>2024-12-17T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/even-more-green/</id>
    <summary>
      After starting Firefox and VS Code themes, I realized my website didn&#39;t have enough green. I massively improved dark mode, and added more green everywhere. Enjoy the screenshots. [...]
    </summary>
  </entry>
  <entry>
    <title>Creating a fresh new green theme</title>
    <link href="https://www.wavebeem.com/blog/2024/fresh-new-green/" rel="alternate" />
    <updated>2024-12-14T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/fresh-new-green/</id>
    <summary>
      Exploring the process behind my fresh new green, including a design I discarded and the inspiration for my new style. [...]
    </summary>
  </entry>
  <entry>
    <title>A memorial for Cory</title>
    <link href="https://www.wavebeem.com/blog/2024/cory/" rel="alternate" />
    <updated>2024-12-12T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/cory/</id>
    <summary>
      A memorial post about Cory, one of my closest friends. [...]
    </summary>
  </entry>
  <entry>
    <title>Health is temporary</title>
    <link href="https://www.wavebeem.com/blog/2024/health-is-temporary/" rel="alternate" />
    <updated>2024-12-11T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/health-is-temporary/</id>
    <summary>
      After a year of chronic pain, I wish I had more relief. But I am making progress. I also discovered I don&#39;t even use my teeth and tongue correctly, lol. [...]
    </summary>
  </entry>
  <entry>
    <title>Home page update</title>
    <link href="https://www.wavebeem.com/blog/2024/home-page-update/" rel="alternate" />
    <updated>2024-12-05T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/home-page-update/</id>
    <summary>
      I updated my home page and added more decoration to the site. I want it to be easier to browse and more fun looking. [...]
    </summary>
  </entry>
  <entry>
    <title>Creating an HTML “spoilers” element with no JS</title>
    <link href="https://www.wavebeem.com/blog/2024/spoilers-element-no-js/" rel="alternate" />
    <updated>2024-11-27T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/spoilers-element-no-js/</id>
    <summary>
      It&#39;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. [...]
    </summary>
  </entry>
  <entry>
    <title>Diagnosing a common source of race conditions in JS</title>
    <link href="https://www.wavebeem.com/blog/2024/expression-statements/" rel="alternate" />
    <updated>2024-11-14T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/expression-statements/</id>
    <summary>
      My thoughts on why expression statements can be a source of bugs—especially in async code—and a proposal for reviving JavaScript&#39;s nearly unused void operator. [...]
    </summary>
  </entry>
  <entry>
    <title>Getting weirder with fonts, and: Too much of a good thing</title>
    <link href="https://www.wavebeem.com/blog/2024/getting-weirder-with-fonts/" rel="alternate" />
    <updated>2024-11-12T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/getting-weirder-with-fonts/</id>
    <summary>
      PP Talisman from Pangram Pangram Foundry is my new heading font---or &quot;cool font&quot; as I&#39;m calling it in the code. But I&#39;m trying not to overuse it! [...]
    </summary>
  </entry>
  <entry>
    <title>Becoming an Astro-not</title>
    <link href="https://www.wavebeem.com/blog/2024/becoming-an-astro-not/" rel="alternate" />
    <updated>2024-11-10T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/becoming-an-astro-not/</id>
    <summary>
      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. [...]
    </summary>
  </entry>
  <entry>
    <title>Experiment: Puffy 3D mode</title>
    <link href="https://www.wavebeem.com/blog/2024/3d-puffy-experiment/" rel="alternate" />
    <updated>2024-11-09T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/3d-puffy-experiment/</id>
    <summary>
      Taking inspiration from Claymorphism, I made an experimental version of my site with a puffy 3D look. [...]
    </summary>
  </entry>
  <entry>
    <title>wavebeem 2.0: Slime Mode</title>
    <link href="https://www.wavebeem.com/blog/2024/wavebeem-2.0-slime-mode/" rel="alternate" />
    <updated>2024-10-27T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/wavebeem-2.0-slime-mode/</id>
    <summary>
      With cohost.org going away, I decide to lean even harder towards working on my personal website. I&#39;ve created a new theme, with a softer, more playful aesthetic than ever before. I&#39;ve also created many new sections on my website. [...]
    </summary>
  </entry>
  <entry>
    <title>Open world fatigue</title>
    <link href="https://www.wavebeem.com/blog/2024/open-world-fatigue/" rel="alternate" />
    <updated>2024-10-20T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/open-world-fatigue/</id>
    <summary>
      A brief reflection on the Legend of Zelda and the popularity of open world video games. [...]
    </summary>
  </entry>
  <entry>
    <title>JS context managers</title>
    <link href="https://www.wavebeem.com/blog/2024/js-context-managers/" rel="alternate" />
    <updated>2024-10-14T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/js-context-managers/</id>
    <summary>
      See how to adapt Python&#39;s context managers for use in JavaScript. Break free from clunky try...finally blocks with this one weird trick. [...]
    </summary>
  </entry>
  <entry>
    <title>Cool 3D buttons</title>
    <link href="https://www.wavebeem.com/toybox/2024/cool-3d-buttons/" rel="alternate" />
    <updated>2024-10-06T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2024/cool-3d-buttons/</id>
    <summary>
      A nice collection of buttons you&#39;ll want to push over and over again. These 3D buttons call back to a time of shiny silver plastic and tactile experiences. [...]
    </summary>
  </entry>
  <entry>
    <title>Introducing: The Toybox</title>
    <link href="https://www.wavebeem.com/blog/2024/toybox/" rel="alternate" />
    <updated>2024-10-06T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/toybox/</id>
    <summary>
      The Toybox is a new section of my site for web toys, jokes, and experiments. [...]
    </summary>
  </entry>
  <entry>
    <title>Making a theme selector</title>
    <link href="https://www.wavebeem.com/blog/2024/making-a-theme-selector/" rel="alternate" />
    <updated>2024-10-05T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/making-a-theme-selector/</id>
    <summary>
      How to make a theme selector for your website, and why you might want to have more than one theme. [...]
    </summary>
  </entry>
  <entry>
    <title>I made a new 88×31 site button</title>
    <link href="https://www.wavebeem.com/blog/2024/site-button/" rel="alternate" />
    <updated>2024-09-21T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/site-button/</id>
    <summary>
      I made a new site button GIF for folks who want to link to my website. [...]
    </summary>
  </entry>
  <entry>
    <title>10 years of themes for wavebeem.com</title>
    <link href="https://www.wavebeem.com/blog/2024/10-years-of-themes/" rel="alternate" />
    <updated>2024-08-23T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/10-years-of-themes/</id>
    <summary>
      An image gallery and reflection of 10 years of themes I&#39;ve made for wavebeem.com [...]
    </summary>
  </entry>
  <entry>
    <title>JS compare function</title>
    <link href="https://www.wavebeem.com/blog/2024/js-compare-function/" rel="alternate" />
    <updated>2024-04-02T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/js-compare-function/</id>
    <summary>
      Exploring a small but mighty function that supercharges the JS Array sort method to rival Lodash&#39;s orderBy [...]
    </summary>
  </entry>
  <entry>
    <title>How to query shadow DOM, and why you might not want to</title>
    <link href="https://www.wavebeem.com/blog/2024/querying-shadow-dom/" rel="alternate" />
    <updated>2024-01-27T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/querying-shadow-dom/</id>
    <summary>
      Examples of how to query shadow DOM, and when you actually don&#39;t want to. Based on real life testing with Stencil.js web components. [...]
    </summary>
  </entry>
  <entry>
    <title>Turning your mouse cursor into a flashlight</title>
    <link href="https://www.wavebeem.com/toybox/2024/flashlight/" rel="alternate" />
    <updated>2024-01-24T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2024/flashlight/</id>
    <summary>
      Turns the lights off and navigate the page using a flashlight. [...]
    </summary>
  </entry>
  <entry>
    <title>Making an interactive flashlight toy for the web</title>
    <link href="https://www.wavebeem.com/blog/2024/flashlight-making-toys-for-the-web/" rel="alternate" />
    <updated>2024-01-24T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/flashlight-making-toys-for-the-web/</id>
    <summary>
      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! [...]
    </summary>
  </entry>
  <entry>
    <title>JS proxy and private properties</title>
    <link href="https://www.wavebeem.com/blog/2024/js-proxy-and-private-properties/" rel="alternate" />
    <updated>2024-01-15T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2024/js-proxy-and-private-properties/</id>
    <summary>
      The default `Proxy` implementation doesn&#39;t work well with private properties, but we can fix this! I also explore other approaches to private data in JS. [...]
    </summary>
  </entry>
  <entry>
    <title>Developing with web components</title>
    <link href="https://www.wavebeem.com/blog/2023/developing-with-web-components/" rel="alternate" />
    <updated>2023-11-25T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2023/developing-with-web-components/</id>
    <summary>
      Thoughts on developing with web components from scratch; no UI libraries. This covers custom elements and very basic use of the `&lt;template&gt;` element. Shadow DOM is mentioned but not used. [...]
    </summary>
  </entry>
  <entry>
    <title>Windows Vista in CSS</title>
    <link href="https://www.wavebeem.com/toybox/2023/windows-vista-css/" rel="alternate" />
    <updated>2023-10-11T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2023/windows-vista-css/</id>
    <summary>
      Pure CSS nostalgia. [...]
    </summary>
  </entry>
  <entry>
    <title>What pronouns does a jester use?</title>
    <link href="https://www.wavebeem.com/toybox/2023/as-a-jester/" rel="alternate" />
    <updated>2023-09-07T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2023/as-a-jester/</id>
    <summary>
      Press to reveal the punchline. [...]
    </summary>
  </entry>
  <entry>
    <title>You deserve to be happy, or: The web wasn&#39;t a mistake</title>
    <link href="https://www.wavebeem.com/blog/2023/the-web-wasnt-a-mistake/" rel="alternate" />
    <updated>2023-07-05T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2023/the-web-wasnt-a-mistake/</id>
    <summary>
      A discussion of why people hate JS, Electron, and the web. Also a plea about how excessive negativity hurts you and those around you. [...]
    </summary>
  </entry>
  <entry>
    <title>The web is an app platform</title>
    <link href="https://www.wavebeem.com/blog/2023/the-web-is-an-app-platform/" rel="alternate" />
    <updated>2023-06-25T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2023/the-web-is-an-app-platform/</id>
    <summary>
      The web has been an app platform for most of its life. I discuss the history of the web and my definition of &quot;app&quot;. [...]
    </summary>
  </entry>
  <entry>
    <title>ザ・ワールド (The World)</title>
    <link href="https://www.wavebeem.com/toybox/2022/za-warudo/" rel="alternate" />
    <updated>2022-11-13T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/toybox/2022/za-warudo/</id>
    <summary>
      無駄 無駄 無駄 無駄 (MUDA MUDA MUDA MUDA) [...]
    </summary>
  </entry>
  <entry>
    <title>I made a Geocities site button</title>
    <link href="https://www.wavebeem.com/blog/2022/site-button/" rel="alternate" />
    <updated>2022-09-27T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2022/site-button/</id>
    <summary>
      88×31 GIFs were all the rage back on Geocities; I decided to finally make one for my own site. [...]
    </summary>
  </entry>
  <entry>
    <title>Best dip ever</title>
    <link href="https://www.wavebeem.com/blog/2022/recipe-best-dip-ever/" rel="alternate" />
    <updated>2022-03-20T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2022/recipe-best-dip-ever/</id>
    <summary>
      My favorite IBS-friendly dip to make at home. [...]
    </summary>
  </entry>
  <entry>
    <title>Why I don&#39;t like useState</title>
    <link href="https://www.wavebeem.com/blog/2022/why-i-dont-like-usestate/" rel="alternate" />
    <updated>2022-01-25T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2022/why-i-dont-like-usestate/</id>
    <summary>
      Why useState is so hard to use correctly, and what we can do about it. [...]
    </summary>
  </entry>
  <entry>
    <title>Buttermilk biscuit recipe</title>
    <link href="https://www.wavebeem.com/blog/2021/recipe-buttermilk-biscuits/" rel="alternate" />
    <updated>2021-03-11T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2021/recipe-buttermilk-biscuits/</id>
    <summary>
      Detailed instructions on how to make fluffy biscuits at home. [...]
    </summary>
  </entry>
  <entry>
    <title>Adventures in de-Googling</title>
    <link href="https://www.wavebeem.com/blog/2020/adventures-in-degoogling/" rel="alternate" />
    <updated>2020-11-29T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2020/adventures-in-degoogling/</id>
    <summary>
      My successes and failures in trying to de-emphasize Google&#39;s presence in my life. [...]
    </summary>
  </entry>
  <entry>
    <title>Crispy tofu recipe</title>
    <link href="https://www.wavebeem.com/blog/2020/recipe-crispy-tofu/" rel="alternate" />
    <updated>2020-11-02T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2020/recipe-crispy-tofu/</id>
    <summary>
      How to make delicious crispy tofu at home. [...]
    </summary>
  </entry>
  <entry>
    <title>Tagged unions in JavaScript</title>
    <link href="https://www.wavebeem.com/blog/2020/tagged-unions/" rel="alternate" />
    <updated>2020-10-21T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2020/tagged-unions/</id>
    <summary>
      A disciplined approach to state management and domain modeling for JavaScript and TypeScript. Also known as algebraic data types / discriminated unions. [...]
    </summary>
  </entry>
  <entry>
    <title>SeaGL 2019</title>
    <link href="https://www.wavebeem.com/blog/2019/seagl-2019/" rel="alternate" />
    <updated>2019-11-10T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2019/seagl-2019/</id>
    <summary>
      Building Your own keyboard with free software. [...]
    </summary>
  </entry>
  <entry>
    <title>Mechanical keyboards 201: Beyond pre-built</title>
    <link href="https://www.wavebeem.com/blog/2019/mechanical-keyboards-201/" rel="alternate" />
    <updated>2019-07-08T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2019/mechanical-keyboards-201/</id>
    <summary>
      Thinking beyond pre-built gear, this guide will help prepare you to build your own keyboard. [...]
    </summary>
  </entry>
  <entry>
    <title>Mechanical keyboards 101: An introduction</title>
    <link href="https://www.wavebeem.com/blog/2018/mechanical-keyboards-101/" rel="alternate" />
    <updated>2018-07-28T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2018/mechanical-keyboards-101/</id>
    <summary>
      An introduction to the exciting world of mechanical keyboards. [...]
    </summary>
  </entry>
  <entry>
    <title>7 tips for better bash</title>
    <link href="https://www.wavebeem.com/blog/2018/better-bash-7-tips/" rel="alternate" />
    <updated>2018-07-04T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2018/better-bash-7-tips/</id>
    <summary>
      Bash is not easy or enjoyable, but it can be very useful once you understand a few of its quirks [...]
    </summary>
  </entry>
  <entry>
    <title>Generators, iterators, and iterables in JS</title>
    <link href="https://www.wavebeem.com/blog/2017/js-iterators/" rel="alternate" />
    <updated>2017-08-27T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2017/js-iterators/</id>
    <summary>
      A comparison and overview of generators, iterators, and iterables in JS. [...]
    </summary>
  </entry>
  <entry>
    <title>React without JSX</title>
    <link href="https://www.wavebeem.com/blog/2017/react-without-jsx/" rel="alternate" />
    <updated>2017-08-11T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2017/react-without-jsx/</id>
    <summary>
      A quick overview on using React without JSX or any build tools. [...]
    </summary>
  </entry>
  <entry>
    <title>Broken promises: how to use promises effectively</title>
    <link href="https://www.wavebeem.com/blog/2016/broken-promises/" rel="alternate" />
    <updated>2016-12-29T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2016/broken-promises/</id>
    <summary>
      How to use promises effectively (written before async/await existed) [...]
    </summary>
  </entry>
  <entry>
    <title>Compiler code generation</title>
    <link href="https://www.wavebeem.com/blog/2016/compiler-code-generation/" rel="alternate" />
    <updated>2016-12-19T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2016/compiler-code-generation/</id>
    <summary>
      How to make code generation for a compiler. [...]
    </summary>
  </entry>
  <entry>
    <title>Making a Lisp-style programming language interpreter in JS</title>
    <link href="https://www.wavebeem.com/blog/2016/making-a-language/" rel="alternate" />
    <updated>2016-11-01T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2016/making-a-language/</id>
    <summary>
      How to make a programming language from scratch in JS. [...]
    </summary>
  </entry>
  <entry>
    <title>The leaning tower of Babel</title>
    <link href="https://www.wavebeem.com/blog/2016/leaning-tower-of-babel/" rel="alternate" />
    <updated>2016-08-22T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2016/leaning-tower-of-babel/</id>
    <summary>
      An exploration of Babel&#39;s caveats. [...]
    </summary>
  </entry>
  <entry>
    <title>JS gotchas with this and new</title>
    <link href="https://www.wavebeem.com/blog/2015/js-gotchas-with-this-and-new/" rel="alternate" />
    <updated>2015-12-23T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2015/js-gotchas-with-this-and-new/</id>
    <summary>
      How JS&#39;s `this` and `new` work, and how to avoid issues with them. [...]
    </summary>
  </entry>
  <entry>
    <title>Squiggle: an immutable, value oriented, compile-to-JS programming language</title>
    <link href="https://www.wavebeem.com/blog/2015/squiggle-a-js-language/" rel="alternate" />
    <updated>2015-07-01T00:00:00.000Z</updated>
    <id>https://www.wavebeem.com/blog/2015/squiggle-a-js-language/</id>
    <summary>
      An introduction to Squiggle, a compile-to-JS programming language I made. [...]
    </summary>
  </entry>
</feed>
