Studio
Writing
Travel
- Taiwan
- Wintermission
- Bali
- Penang
- Singapore
- The Philippines
- Vietnam
- Korea
- Georgia
- Israel
- Bosnia and Herzegovina
- Serbia
- London
- Scotland Roadtrip
- Part I: Aberdeen, British Royalty, and Expensive Castles
- Part II: Inverness, Loch Ness, and Booking-less
- Part III: Isle of Skye
- Part IV: Oban, Fingal’s Cave, and Car Troubles
- Part V: Glasgow Terminus
- Edinburgh
- Paris
- Lyon
- Aix-en-Provence
- Montpellier
- Slovenia
- Croatia
- Crete
- Naxos
- Athens
- Seattle in May
- Madrid
- Basque Country
- Peneda-Gerês National Park
- Douro Valley
- Córdoba
- Granada
- Nerja
- Málaga
- Seville
- Porto
- Lisbon
- Washington, D.C.
Design
- Misclicking Live Search
- Who Has Been Speaking?
- The Power of Lists
- Force Click for Layer Selection
- Fixing Mobile Page Layouts
- Don't Justify Web Text
Programming
- Building an ECS in TypeScript
- What is an ECS?
- Why build an ECS? Why TypeScript?
- A TypesScript ECS in 99 Lines of Code
- Tests
- Deeper Dive: Entities
- Deeper Dive: Components
- Dirty Component Optimization
- Aspects
- Deeper Dive: Systems
- Sparking Joy with Python
Creating & Thinking
- Cultural Wisdom
- Appropriate Quality
- Creative Reading
- Use Examples
- Deeply Knowing
- Creative Friction
- Paralysis
Health
Projects
weatherspread FallgateSoftware
A simple Desktop-only app for calorie counting and meal planning.
I wrote this to use it myself. You can read much more about it in my post on Calorie Counting × Meal Planning.
My helper functions for python.
I add this tiny library as a dependency to all my projects. It contains little functions I kept writing over and over. There’s very little here—probably a positive testament to Python—but I like the idea of having a personal helper library so much I couldn’t resist including it.
A tiny tool to find git repositories on your computer and tell you if any are dirty or unpushed.
I wrote this to use it myself. Over time, it’s also expanded to check other directories on your computer for any files that aren’t expected, and offer to delete them. These two functionalities are part of an effort to have things backed up at all times, so a hard drive failing is no big deal.
My helper scripts, configs, and instructions for setting up new environments.
I think dotfiles (named because they often start with a dot, like .bashrc
) are a fun window into someone’s work environment. (And probably a time capsule of when they started working with unix-esque systems.) My favorite trick is to name custom scripts starting with a comma.
You might also be interested in checking out my research software.
Sketches
Blog
In Praise And Critique of Digital Gardens My Media Snapshot Sleeper Train to Sapa Blank Screen Manifesto Get the Picture Just Moving and Making Climate and Schedule Infrastructure Writing vs Blogging Rewrites and replants Hot The Distant Rumble of Change Smaller Postsµblog
Latest: Aug 29, 2023
It seems that now, it’s nearly impossible to know about niche things. Not because it’s too hard, but because it’s too easy. In other words, knowledge that used to be niche is now easily accessible. The reason is that any niche thing you know about is now covered on YouTube. So whether you know a niche thing is just whether you’ve watched a particular YouTube video. My example: I remember learning that the original Roller Coaster Tycoon was programmed in assembly by a single guy. I have held onto this as a bizarre and fascinating nugget. I was recently suggested a YouTube video explaining this fact. I am sure people felt this phenomenon about the Internet itself.* But something about the explosion of knowledge on YouTube has made rare knowledge feel less valuable. Maybe it’s because YouTube video makers are incentivized to make videos as engaging as possible. So acquiring niche knowledge used to be a function of whether you were sufficiently interested in something such that you would pass the activation energy required to look it up. People who weren’t interested in it would never know about it because they would be too bored to tolerate the process of finding the information. But since YouTube videos are entertaining, this barrier no longer exists. * Thinking more about this re: the Internet in general, it is certainly true. Going to a library and finding a book was a lot more effort than Googling something. I guess people probably felt the same about libraries. And writing.
Garage
The garage is an experiment in "working with the garage door up." These evolving notes are written for me but posted publicly here. Read more in What is the garage?
- TypeScript readonly wrapper
- Image Placeholder Test Page
- Photo Notebook
- About
- Aperture
- Crop
- Exposure
- Focus
- Mode
- Shooting Street
- Shutter Speed
- Software
- Study: Photographing Drinks, Q2
- Vs Phone
- Image Placeholder Development Page
- Code layout test page
- Image layout test page
- Image transition test page
- Reflections on Maintenance
- On WaniKani
- Sidenote test page
- Templating Languages Considered Harmful
- 3D Notebook
- About: Restructuring my 3D notes
- MagicaVoxel: Importing
- MagicaVoxel: Layer vs Outline
- MagicaVoxel: Project Objects to Ground
- MagicaVoxel: Shaders
- MagicaVoxel: Terrain
- Study: Chicken
- Study: Ocean Floor
- Study: Ryu (BoF III)
- Study: Ryu (BoF III): II
- Three.js: Cube confusion
- Topic: Colors
- Topic: Level of detail
- Topic: Lighting
- Topic: Projections
- Image lazy load test page
- Speeding up my website
- Lastpass Lockout
- Site Design Refresh 2022
- Big Header Design
- Website Redesigns
- Google's and Facebook's Software
- When Lists Don't Work
- New tech time budget
- Producing lots of work
- On Neon White
- Mo Photos Mo Problems
- Image scroll test page
- Image size test page
- WebP test page
- Small communities
- Spectators
- City maps with prettymaps
- Mandelbrot
- Shader stress test
- Pixi.js graphics stress test
- Generative voxel world editor
- Ways of looking
- Bézier basics
- Personal infrastructure graveyard
- Benefits of creating prototypes that fail
- Video game graveyard
- Website graveyard
- Critiquing Internet use
- Does k-means on an image's colors make a good palette?
- Reducing creative friction: starting a new project
- Spirit of discovery
- Simulation: Basic street
- Animating SVGs from Sketch with anime.js
- Stupid things I do constantly in Python
- Creation and virality
- Causes and conditions
- Omitting negative results precludes thinking in reverse
- Thinking in reverse
- Summer 2021 website goals
- Working blocks
- Working process
- Deciding and following
- Deeper ideas in pocket
- Notes on fragment shaders and p5.js
- Teachers are responsible for multiple perspectives
- Tension between discovery and intentional creation
- Home base feeling
- Tiny naming woes
- What is the garage?



aug
29
2023

















































may
17
2023
















apr
24
2023























mar
29
2023











mar
19
2023







mar
05
2023






mar
04
2023











feb
26
2023







feb
25
2023



feb
24
2023





feb
23
2023



feb
22
2023





feb
21
2023


































































































































































































































































































































































































































