Blog Programming guides, project updates, video game reviews, life events, and more. Subscribe to stay up to date. 2025 Min-maxing dinner Review: Pokémon Crystal In defense of the “for...of” loop Enhancing the Pokédex: input lag, React, and monitor refresh rates Creating a colorized disjoint union of graphs I actually had to use algebra at work one time Simulating JS await with generator functions Pokémon Type Calculator updates Review: Ittle Dew 2 Image manipulation with ImageMagick Blog questions challenge Review: Cobalt Core (2023) Review: Goodboy Galaxy (2024) Video games roundup (2024) Editorial style & shrines progress 2024 Curry Tidying up the website again Very verdant: Even more green Fresh new green Cory Health is temporary Home page update Creating an HTML “spoilers” element with no JS Diagnosing a common source of race conditions in JS Getting weirder with fonts, and: too much of a good thing Becoming an Astro-not Experiment: Puffy 3D mode wavebeem 2.0: Slime Mode Open world fatigue JS context managers Cool 3D buttons Introducing: The Toybox Making a theme selector I made a new 88×31 site button 10 years of themes JS compare function Querying shadow DOM Flashlight Flashlight: Making toys for the web JS Proxy and private properties 2023 Developing with web components Windows Vista in CSS What pronouns does a jester use? You deserve to be happy, or: the web wasn't a mistake The web is an app platform 2022 ザ・ワールド (The World) I made a Geocities site button Recipe: Best dip ever Why I don't like useState 2021 Recipe: Buttermilk biscuits 2020 Adventures in de-Googling Recipe: Crispy tofu Tagged unions in JavaScript 2019 SeaGL 2019 Mechanical keyboards 201 2018 Mechanical keyboards 101 7 tips for better bash 2017 JavaScript iterators and more React without JSX 2016 Broken promises Compiler code generation Making a language The leaning tower of Babel 2015 JS gotchas with this and new Squiggle: a JS language