| 2025-11-23 |
Classes considered harmful when authoring a JavaScript library |
| 2025-10-25 |
Writing metadata to CBZ files with Calibre |
| 2025-10-18 |
Narrowing TypeScript Unions without the `in` operator |
| 2025-06-23 |
Minifying private properties and methods with Terser |
| 2024-10-16 |
Making setTimeout return number instead of NodeJS.Timeout in TypeScript |
| 2023-09-10 |
Animating a pirate treasure map path |
| 2023-05-16 |
Service Class vs Service Module |
| 2023-04-24 |
Inconsistent JavaScript imports can lead to duplicate code |
| 2023-03-13 |
This blog is now a Progressive Web App! |
| 2023-02-20 |
Creating a tuple from the values of an enum in TypeScript |
| 2022-12-26 |
Exploiting ChatGPT |
| 2022-12-18 |
Exporting the Version of an NPM package |
| 2022-01-21 |
Typing a function wrapper with TypeScript |
| 2021-03-26 |
Apple doesn't care about Album Cover Art |
| 2020-11-15 |
Shaders Case Study: Pokémon Battle Transitions - Part II |
| 2020-10-19 |
Shaders Case Study: Pokémon Battle Transitions |
| 2020-10-05 |
regl: Rendering a Texture |
| 2020-09-14 |
Writing Good Test Descriptions |
| 2020-08-04 |
My Top Movies of the 2010s |
| 2020-04-12 |
Animated NBC Peacock Logo |
| 2020-03-29 |
Installing Gems per Project Directory |
| 2019-12-15 |
Using Bundler with System Ruby |
| 2019-05-11 |
Simplifying TypeScript code with Union Types |
| 2018-10-16 |
Null Object pattern, ES6 default params and React defaultProps |
| 2018-09-16 |
Using System Ruby |
| 2017-09-14 |
Validating Form Objects |
| 2017-06-22 |
Rails Quiz: XSS Edition |
| 2017-04-20 |
Saving multiple models with Form Objects and Transactions |
| 2017-03-13 |
Creating Form Objects with ActiveModel |
| 2016-10-23 |
D3: Encoding values as circles |
| 2016-08-20 |
D3: Animating between scales |
| 2016-01-21 |
YouTube's new morphing play/pause SVG icon |
| 2015-04-15 |
D3: Animating bars “going down” |
| 2013-01-25 |
Never remove CSS outlines |