Studio
list-icon
card-icon

Writing

Travel

Programming

Design

Creating & Thinking

Health

Projects

Software

food
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.

python-utils
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.

git-checker
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.

dotfiles
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

µblog

See all.

Latest: Jan 5, 2024

All I want for Christmas is to design for fixed pixel dimensions.

(Rather than, say, 93 vastly different screen sizes.)

Boy howdy I get the appeal print design too now.

If I’m feeling greedy, I’ll ask for browsers to stop having myriad subtle incompatibilities too. (What is this, 2009?)

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?

JS Template Test Page

TypeScript readonly wrapper

Study: Photographing Drinks, Q2

Photo Notebook

Code layout test page

Image Placeholder Test Page

Image Placeholder Development Page

Vs Phone

Photo Notebook

About

Photo Notebook

Aperture

Photo Notebook

Crop

Photo Notebook

Exposure

Photo Notebook

Focus

Photo Notebook

Mode

Photo Notebook

Shooting Street

Photo Notebook

Shutter Speed

Photo Notebook

Software

Photo Notebook

Image transition test page

Sidenote test page

Templating Languages Considered Harmful

About: Restructuring my 3D notes

3D Notebook

Image lazy load test page

Speeding up my website

Lastpass Lockout

Reflections on Maintenance

On WaniKani

Site Design Refresh 2022

Big Header Design

Google's and Facebook's Software

When Lists Don't Work

Website Redesigns

New tech time budget

Producing lots of work

On Neon White

Mo Photos Mo Problems

Topic: Level of detail

3D Notebook

Image size test page

Image scroll test page

WebP test page

Study: Ryu (BoF III): II

3D Notebook

Image layout test page

Small communities

Spectators

City maps with prettymaps

Topic: Lighting

3D Notebook

Topic: Projections

3D Notebook

Mandelbrot

Shader stress test

Pixi.js graphics stress test

Three.js: Cube confusion

3D Notebook

Generative voxel world editor

Study: Ryu (BoF III)

3D Notebook

MagicaVoxel: Layer vs Outline

3D Notebook

MagicaVoxel: Project Objects to Ground

3D Notebook

MagicaVoxel: Shaders

3D Notebook

MagicaVoxel: Terrain

3D Notebook

Study: Ocean Floor

3D Notebook

Ways of looking

Topic: Colors

3D Notebook

MagicaVoxel: Importing

3D Notebook

Study: Chicken

3D Notebook

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?

A Big Move and a Small Game

2

min

read

Me symbolically emerging from under a rock. (Niseko, Japan — June, 2023) Hi everyone, Welcome back! This is the...

jun

07

2024

All I want for Christmas is to design for fixed pixel dimensions.
(Rather than, say, 93 vastly different screen sizes.)
Boy howdy I get the appeal print design too now.
If I’m feeling greedy, I’ll ask for browsers to stop having myriad subtle incompatibilities too. (What is this, 2009?)

jan

05

2024

Went through a sculpture garden. Sweet idea: sculpture gardens should make 3D-printed mini models of sculptures for visually impaired folks. Kids would love them too. Heck, adults probably would as well.

dec

29

2023

After writing TypeScript for (how many years?!) I just discovered their reference sheet for utility types and I can’t believe what I’ve been missing. Even just the simple Record<K,T> I could have used so many times.
This is one side benefit of having GPT-4 try to write code for you: it will use common stuff you didn’t realize was common and you’ll learn about it.

nov

17

2023

JS Template Test Page
This page is: JS Template Test Page This is a simple test of a JavaScript template in Eleventy. Hello from within a...

1

min

read

nov

12

2023

I just realized that trying to make something pretty when you’re making a first draft is like trying to edit your writing while you write.
(It’s harder, don’t do it.)

oct

10

2023

TypeScript readonly wrapper
Summary I stumbled upon a great type to enforce object immutability at compile time if that’s all you’re worried about:...

5

min

read

sep

19

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.

aug

29

2023

Photo Notebook: Study: Photographing Drinks, Q2

17

min

read

Summary of Findings I conducted this set of experiments to try out the feasibility of photographing drinks01 with my...

aug

05

2023

Code layout test page
I’m inline ya dig. def main(): Setup device device = torch.device( f"cuda:{args.device}" if torch.cuda.is_available()...

1

min

read

jul

23

2023

Image Placeholder Test Page
Inline cityMap Static Animated "plain big" cityPic v1 (img) Full-width (Just switching to v2 but using old (“v1”)...

1

min

read

jul

16

2023

Image Placeholder Development Page
Is it possible to have images save space and render placeholders before they’ve loaded? Site-wide I went down the...

15

min

read

jul

08

2023

Photo Notebook: Vs Phone

1

min

read

I thought it’d be interesting to take the same photo on the camera and the phone and compare them. In particular, I’m...

jun

11

2023

Photo Notebook: About

2

min

read

Resting Taxi at Tazawako Station [f1.7] After taking thousands of iPhone photos while traveling over the course of a...

jun

10

2023

Photo Notebook: Aperture

5

min

read

My range: f1.7 – f16 Case Study: Pourover Starting on full auto to just begin using the camera, wide apertures were...

jun

10

2023

Photo Notebook: Crop

3

min

read

Cropping to digital zoom presets, keeping the aspect ratio. “Focal length” Pixels (ref) Scale (1-dim) 28mm 8368 x 5584...

jun

10

2023

Photo Notebook: Exposure

3

min

read

Setting EV Picking exposure every single photo so that whites aren’t clipping is tedious. It seems so obvious why...

jun

10

2023

Photo Notebook: Focus

3

min

read

The yin to aperture’s yang, focusing is the only other stylistic thing I must do consciously now that not everything is...

jun

10

2023

Photo Notebook: Mode
I quickly stumbled on what I believe to be the best shooting mode: aperture priority.01 This means that you pick...

2

min

read

jun

10

2023

Photo Notebook: Shooting Street
There’s probably a better term for it, but by shooting street I mean getting primed to take photos more quickly while...

2

min

read

jun

10

2023

Photo Notebook: Shutter Speed

2

min

read

I started with no minimum,01 which led to stuff like a needless 1/50s when at ISO 100, which meant motion blur....

jun

10

2023

Photo Notebook: Software
Apple Photos Apple Photos is simultaneously a blessing and a bane. The interface for viewing and editing photos is...

4

min

read

jun

10

2023

Taiwan: Hualien

6

min

read

The general feel of both thriving and falling apart at the same time.

jun

04

2023

Taiwan: Chishang

4

min

read

Hope you like rice paddies.

jun

02

2023

Taiwan: Kaohsiung

4

min

read

Where'd all the art go?

jun

01

2023

Taiwan: Tainan

4

min

read

Unexpectedly vibrant pocket.

may

31

2023

Taiwan: Alishan

10

min

read

We couldn't swim in Sun Moon lake, and we didn't hike Yushan, but by god I observed the hell out of this forest.

may

30

2023

Fake diary entries in a language textbook are surreal when you think about it a bit. You have an adult human going about their day and then writing about it using pre-preschool-level grammar.

may

17

2023

Taiwan: Taichung

4

min

read

Long walks through warm pastel evenings---glimpses into Taiwan's second biggest city.

may

14

2023

Taiwan: Taipei

15

min

read

Still suffering from bubble tea withdrawal.

may

08

2023

Wintermission

4

min

read

On good cameras, Seattle, and San Diego.

apr

30

2023

Bali

2

min

read

Every ounce of local kindness is a heroic feat in the face of Disneylandification.

apr

29

2023

Penang

2

min

read

Street eats and a melting pot of traffic.

apr

25

2023

Whoops it’s been a minute, huh? Here’s some low quality content to keep this alive.
Huh, low quality content to keep something alive. That this does something psychologically is interesting.

apr

24

2023

Singapore

12

min

read

Once you hear "Disneyland with the Death Penalty," you can't un-think it.

apr

24

2023

The Philippines: El Nido

6

min

read

Islas de Instagram.

apr

11

2023

The Philippines: Bohol

4

min

read

Tiny primates, grassy lumps, gatorade shores.

apr

10

2023

The Philippines: Manila

12

min

read

We exit the airport and are immediately confronted by a man holding a shotgun.

apr

08

2023

Vietnam: Ho Chi Minh City

5

min

read

I feel a bit guilty now about avoiding the day trip OMTAs here. But hey, sometimes you gotta just do you. Eat bun cha, wander the streets, and absorb the big city.

apr

05

2023

Vietnam: Dalat

10

min

read

At least if we were doing stupid shit, we were doing stupid shit locals do.

apr

03

2023

Vietnam: Sapa

12

min

read

And The Tiny Agony of Inauthentic Experiences

apr

02

2023

Vietnam: Hanoi

14

min

read

Wonderful food, terrifying roads, and dead fish.

mar

30

2023

All I want for Christmas is for Nunjucks to support trailing commas instead of crashing.

mar

29

2023

Korea: Jeju

9

min

read

Seoul / Jeju is the busiest passenger air route in the world. So... where is everybody?

mar

29

2023

Korea: Busan

6

min

read

Busan feels full of potential, but it also carries the slowness of a town that's always playing second fiddle.

mar

26

2023

Korea: Seoul

22

min

read

Our favorite place of 2022, of the eighteen countries we visited, was Seoul.

mar

22

2023

After one month of exposure and careful consideration I would like to confirm that, yes, indeed, stinky tofu smells bad.

mar

19

2023

Software: dotfiles ↗
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...

1

min

read

mar

18

2023

Image transition test page

2

min

read

I omitted the last image from this one to make sure I didn't screw up the closure in the script. (This gives it a...

mar

15

2023

Encountered a cool instant ramen format twice now on accident. It comes with two bowls. Thought it was a packing mistake, but the instructions say to use one bowl + seasoning to make a soup from the noodle broth, and the second bowl for noodles + paste.
Big soup culture. Most restaurant meals seem to come with a starter soup. Nice.

mar

05

2023

Sidenote test page
I’d like to try putting sidenotes in the margins for large enough pages. (This page has previews of the sidenotes if...

2

min

read

mar

05

2023

Templating Languages Considered Harmful
I.e., frontend templating languages like Liquid and Nunjucks. Can’t set attribute on object...

2

min

read

mar

05

2023

Playing so much Pokémon Puzzle League that not only do I dream about it, but my normal dreams—i.e., where I am in some bizarre situation and must accomplish some task—have Pokémon Puzzle League gameplay as the substance. E.g., I have to solve some relationship problem, but the way I do that is trying to get a vertical 4-combo on water blocks. It’s actually too much.

mar

04

2023

Georgia

14

min

read

A subway whose platforms are carved so deep underground that you must ride bulky lumbering escalators for a small eternity to make it to their depths. More things are painted red than normal.

mar

02

2023

Software: git-checker ↗
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...

1

min

read

feb

27

2023

Sketch: Ramen ode

0

min

read

Hello, this is a sketch of mine, please enjoy

feb

27

2023

Never seen an area like this before on Google Maps:

feb

26

2023

3D Notebook: About: Restructuring my 3D notes
Studies. I’d like to work on focused studies. If I want to, I can post the result as a sketch, but it’s not required....

2

min

read

feb

26

2023

Sketch: Muji Page Please

0

min

read

Hello, this is a sketch of mine, please enjoy

feb

26

2023

Second place we’ve visited now because of a really high Google maps rating that turns out to offer bribes for Google maps reviews. This one was a bar that gives you a free beer (!) if you left a review. Evil, but brilliant.

feb

25

2023

Karaoke. Every day. Starting midday. I want to appreciate the cultural context that allows total abandon, atonal bellows, long and confused vibrato following along to what I can only imagine are classics. I want to.
But I cannot.
Karaoke. Every day. Starting midday.

feb

24

2023

Image lazy load test page
Attribute Investigation NB: The following numbers change as I add more text here because the images are getting pushed...

3

min

read

feb

24

2023

Interesting design: this overhead light changes the number of bulbs that are on every time you turn it off and on again. It goes between 3, 2, 1, and 0 (probably could have skipped that one), and then cycles back to 3.

feb

23

2023

Speeding up my website
Summary: 100MB → 5MB initial load, drastically improved interactive times (roughly ~10s → ~1s). Longer summary:...

6

min

read

feb

23

2023

Haven’t scrolled twitter in a long time.
Wondered whether opening it up would release… wait, is there a name for the version of impostor syndrome where it’s not that you’re not capable, but it’s that everyone in the world is doing more interesting & successful things than you?
Anyway, it did.

feb

22

2023

Israel

19

min

read

Israel is a million multi-layered and multi-textured sand colored walls; a hundred different outfits and religious denominations and historical interpretations; a dozen eras and languages and scripts. All crammed together with zero breathing room.

feb

22

2023

Starting a microblog. Will I finally be able to contain my verbosity? Time will tell.

feb

21

2023

Lastpass Lockout
LastPass MFA: Too Risky If your phone is stolen, how would you log into LastPass with multi-factor auth (MFA)? Circular...

3

min

read

feb

06

2023

Reflections on Maintenance
Maintenance is beautiful. I’d never really considered how widespread it is, and how much it’s a sign of life, until...

7

min

read

feb

06

2023

On WaniKani
Good Visual design: colors, URLs API design: that extensibility is possible Quirkiness Teaching you just a couple...

6

min

read

feb

06

2023

Bosnia and Herzegovina

18

min

read

Everything about Bosnia has fractal-like complexity. For example, there are five presidents. Why? We must go deeper.

jan

30

2023

Serbia

11

min

read

“It’s all quite run down, isn’t it?” We were all thinking it, but I wished he wouldn’t say it so loudly.

jan

13

2023

London

8

min

read

I like visiting cities, especially big ones, after waiting a long time. I seem to end up with completely non-overlapping experiences. Another illuminated sliver of the whole.

dec

28

2022

Site Design Refresh 2022
Before/after screenshots in assets/garage/site-design-refresh-2022/.

1

min

read

dec

25

2022

Scotland Roadtrip: Part V: Glasgow Terminus

5

min

read

I had high hopes for Glasgow. Modern city, seemed to have good public transport and millennial hipster comforts: craft beer, snobby coffee, and rock climbing.

dec

15

2022

Scotland Roadtrip: Part IV: Oban, Fingal’s Cave, and Car Troubles

5

min

read

Hiking here is appropriately called "hill walking."

dec

09

2022

Scotland Roadtrip: Part III: Isle of Skye

5

min

read

Isle of Skye is one of those places that is dramatic when you're there but totally doesn't photograph well. I have never been anywhere like it.

dec

06

2022

Scotland Roadtrip: Part II: Inverness, Loch Ness, and Booking-less

6

min

read

With Loch Ness so famous because of its Monster, it had not occurred to me that it might actually turn out to be a completely boring normal lake until we were standing in front of it.

dec

03

2022

Scotland Roadtrip: Part I: Aberdeen, British Royalty, and Expensive Castles

11

min

read

We took a two week roadtrip through Scotland. We got soaked and the food sucked, but the nature was awesome. 10/10.

dec

01

2022

Big Header Design
Spent a bit of time working on a different header style to use for articles (on this website). WIP. Notes for myself:...

1

min

read

nov

29

2022

In Praise And Critique of Digital Gardens

8

min

read

A digital garden may be the solution to creative friction. But is it worth the cost?

nov

27

2022

Google's and Facebook's Software
Notes: Google: high latency, high bandwidth TF vs Pytorch Tensorboard vs Whatever FB’s was Angular vs React

1

min

read

nov

27

2022

When Lists Don't Work
This is one note I’d like to just turn into a normal post. Webrings https://macmenubar.com/ Why? Something about lack of...

1

min

read

nov

27

2022

Website Redesigns
Worklist [x] nav [x] desktop [x] color themes [x] mobile [x] footer [x] desktop [x] color themes [x] mobile [x] new h...

2

min

read

nov

26

2022

My Media Snapshot

3

min

read

I’m keeping lots of notes while traveling. But I’m trying not to write about travel in the blog (i.e., what you’re...

nov

13

2022

Sleeper Train to Sapa

2

min

read

Hello, I write to you from the sleeper train from Hanoi (Hà Nội) to Lao Cai (Lào Cai). The journey from the capital will...

nov

04

2022

Blank Screen Manifesto

3

min

read

This is something I hope to rework into a proper post someday. It’s crazy how much visual distraction there is by...

oct

30

2022

New tech time budget
Starting a new project, each new technology you use adds a time cost for figuring out how it works. You really notice...

2

min

read

oct

15

2022

Producing lots of work
One of the core things I believe about doing good work is that you first need to produce a lot of (probably bad) work in...

2

min

read

oct

15

2022

Get the Picture

4

min

read

We’re staying near the Dongdaemun Design Plaza, this enormous swoopy blob of a multi-building complex that looks like...

oct

10

2022

Just Moving and Making

3

min

read

This is the first time I’ve used the “post before 6am Monday” to its extreme. (That’s our deadline for weekly posts.)...

oct

03

2022

Climate and Schedule
A couple little notes so I don’t owe Max C $5 this week. Gotta feed the blog machine. Climate I’m spending more time on...

4

min

read

sep

18

2022

Edinburgh

10

min

read

Ahh, back to the motherland, where I finally get the respect and admiration I deserve as bishop. It was a strange...

sep

05

2022

Infrastructure

5

min

read

The Recurrent Agony of Naming Things I feel guilty naming this post “infrastructure” because it’s such a good word. I...

aug

28

2022

Writing vs Blogging

4

min

read

Meeting some new folks and talking about our travels, I mentioned I wrote a blog. I only then realized this is lightly...

aug

21

2022

On Neon White
I never play FPSes, and I never (anymore) try to 100% games. So why I am I so hooked on Neon White, and achieving all...

7

min

read

aug

17

2022

Mo Photos Mo Problems
Some notes—hope to expand further—on the surprising number of additional website issues I faced when trying to include...

1

min

read

aug

14

2022

3D Notebook: Topic: Level of detail
What’s interesting is that voxel resolution isn’t the same thing as level of detail used. This goes both ways. There are...

1

min

read

aug

10

2022

Aix-en-Provence

5

min

read

Just call it “Aix,” pronounced like the letter X. I felt like I didn’t quite connect with Aix. It’s hard to judge cities...

aug

07

2022

Lyon

3

min

read

Lyon was my favorite French city we visited. I would love to go back. The city is beautiful—w/ the river Rhône running...

aug

07

2022

Montpellier

3

min

read

We spent three weeks visiting cities we hadn’t seen before in France. (Okay, plus Paris.) Top priorities were to eat...

aug

07

2022

Paris

1

min

read

Ultra light entry on Paris. What struck me the most this visit was basically any district we went to, there was a ton of...

aug

07

2022

Image size test page
Due to preliminary pixel density tests in the image layout test page, I've been exporting my images assuming an @3x device pixel ratio and a moderately large screen (939 CSSpx height).

4

min

read

jul

29

2022

Image scroll test page
Attempting resolution of issue seen in recent photo blog posts: scrolling down, or even back up, results in Chrome...

1

min

read

jul

28

2022

WebP test page
A quick test to see whether folks' browsers are able to display this (somewhat) new image format called "WebP."

0

min

read

jul

24

2022

3D Notebook: Study: Ryu (BoF III): II

1

min

read

I tried another version with a much lower voxel resolution. Critique Good Size +level of detail much better than last...

jul

19

2022

Image layout test page
I want to experiment with wider layouts, so want to have HTML/CSS formulas for breaking out of the normal content flow....

23

min

read

jul

10

2022

Small communities
Visiting climbing gyms that are just getting their legs under them—usually in smaller cities—is bittersweet. It’s lovely...

1

min

read

jul

07

2022

Spectators
Public vs Private Spaces I’m interested in the difference between public and private spaces (/ groups) (/ communities)....

3

min

read

jul

07

2022

weatherspread

2

min

read

When you're figuring out where to go, or when to go there, remember that a great shadow force will shape your experience. The weather.

jul

03

2022

Slovenia

6

min

read

Mentioning Slovenia, a few friends have said, “oh I’ve heard it’s really beautiful and still undiscovered!” I regret to...

jun

28

2022

Croatia

4

min

read

Dubrovnik We arrived in Dubrovnik and immediately realized with sinking hearts: the entire walled city is a tourist...

jun

20

2022

Crete

4

min

read

We visited Crete, the biggest Greek island, for one week. After a brief stopover in Heraklion, we stayed in Chania and...

jun

10

2022

Naxos

1

min

read

Among tourist destination islands (probably all of them?), this one seemed laid back. Accordingly we did almost nothing....

jun

03

2022

Athens

2

min

read

Gritty and sprawling. Anarchist enthusiast youth districts. Generous seafood, meat, and salads, especially in the outskirts.

may

31

2022

Seattle in May

3

min

read

Back across the pond for about a week. Seattle is so green. It’s sooooooo green. I think what we lack in sun we make up...

may

26

2022

Madrid

1

min

read

We popped by Madrid for a couple days. We both liked Madrid much more than we expected! I’m not sure why we thought we...

may

18

2022

Basque Country

6

min

read

Basque is a culture, language, and cultural region spanning a chunk of northern Spain and southwest France. I hadn’t...

may

16

2022

Peneda-Gerês National Park

1

min

read

Second big day trip from Porto. Also couple hours way, north / northeast. Pretty park, might be the big nature reserve...

may

07

2022

Douro Valley

1

min

read

Back in Porto, this is one of a couple day trips we took. Huge wine region, ~1–2hr drive east out of Porto. Wine grown...

may

05

2022

Córdoba

1

min

read

Córdoba was a wonderful change of pace from other Andalusian towns. Large streets, parks, water, greenery, great for...

may

04

2022

City maps with prettymaps
This is my devlog for working with the prettymaps library to try to generate maps for cities that I visit. I ran into a...

10

min

read

may

02

2022

Granada

1

min

read

How much of the Alhambra is original vs rebuilt to be like the original? Does it matter? Would it matter if it was...

may

01

2022

3D Notebook: Topic: Lighting

1

min

read

Lighting is everything. MagicaVoxel I changed some other stuff here (some more objects, floor texture, some...

apr

28

2022

3D Notebook: Topic: Projections

1

min

read

Spent a ton of time a while back trying to finally really understand the difference between different projections to...

apr

28

2022

Sketch: Wood Shelf Room

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

27

2022

Nerja

1

min

read

Beach vibes. So many Brits here signs outside bars like “Liverpool match at 15:00.”

apr

27

2022

Málaga

2

min

read

I was surprised how many tourists are here! (Also, please forgive how much I seem to complain about tourists.) I think...

apr

24

2022

Seville

2

min

read

A lovely feature of Spanish cities seems to be big public plazas you can go and hang out in. Art and water features make...

apr

21

2022

Porto

3

min

read

Porto was, like Lisbon, completely flooded with tourists. But its bigger streets and more open public spaces left us...

apr

18

2022

Lisbon

2

min

read

Without knowing locals or speaking the language, it feels like you can go a mile wide but will remain an inch deep.

apr

11

2022

Sketch: Red Wine

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

05

2022

Washington, D.C.

1

min

read

D.C. felt vibrant and friendly in a your-favorite-block-in-NYC kinda way. Plus this kind of New England brick...

apr

03

2022

Mandelbrot

2

min

read

/* TODO: See whether we can just remove and let the vanilla one work. */ .custom-full-width { width: calc(100vw - 10px);...

mar

21

2022

Rewrites and replants

1

min

read

What I’ve been up to: I rewrote my website from Jekyll/Liquid into Eleventy/Nunjucks. It was somewhat painful and...

mar

13

2022

Shader stress test

1

min

read

Answering maybe a silly question: how many shaders can we run?

feb

05

2022

Building an ECS in TypeScript: Deeper Dive: Systems

9

min

read

We’ve already covered the basics of how Systems work. Here I’ll touch on four advanced topics: ordering, disabling,...

jan

24

2022

Pixi.js graphics stress test

0

min

read

How many rectangles can pixi.js' Graphics API smoothly draw per frame?

jan

23

2022

3D Notebook: Three.js: Cube confusion

1

min

read

I’m having an issue with slowdown where the same number of cubes renders quickly when arranged in a plane, but slowly...

jan

18

2022

Generative voxel world editor

1

min

read

A voxel experiment.

jan

11

2022

Building an ECS in TypeScript: Aspects

7

min

read

Disclaimer: I’m not sure whether “Aspects” are really a standard thing for ECS. (Or, if they are, whether my usage is...

jan

03

2022

3D Notebook: Study: Ryu (BoF III)

1

min

read

HAHAHA, he came out so terrifying. Look at this thing LOOK AT HIM I think I made him too big for the amount of detail...

dec

31

2021

3D Notebook: MagicaVoxel: Layer vs Outline
I think Layer doesn’t determine draw order, but Outline does. Manipulating the order with the Outline is awkward. In...

1

min

read

dec

30

2021

3D Notebook: MagicaVoxel: Project Objects to Ground
(The actual ground may be a terrain — i.e., not just z=0.) Have different color voxels underneath, then run drop shader...

1

min

read

dec

30

2021

3D Notebook: MagicaVoxel: Shaders
For me it’s not immediately obvious how to use them, sometimes even after reading about it. Brush grass - shader mode...

1

min

read

dec

30

2021

3D Notebook: MagicaVoxel: Terrain
Turns out Perlin noise is great, much nicer than what I can do by hand. Run shader tergen (or tergen2 for selected area...

1

min

read

dec

30

2021

3D Notebook: Study: Ocean Floor

1

min

read

Part 1 I experimented with the grass shader to make some underwater… uh… grass? Kelp? The kelp right on the boundary...

dec

23

2021

Building an ECS in TypeScript: What is an ECS?

2

min

read

Preface This series is intended to be a simple walkthrough of building an ECS-based game engine in TypeScript. It’s...

nov

25

2021

Ways of looking
A personal example catalog Unintentional Caffeine filling the brain — Optimism about current and potential endeavors...

1

min

read

nov

16

2021

3D Notebook: Topic: Colors

1

min

read

Postprocessing Colors Funny enough, I have the same problem with my renders as I do my photos: the colors aren’t that...

nov

15

2021

3D Notebook: MagicaVoxel: Importing

1

min

read

How to import You can just drag’n’drop a .obj file into MagicaVoxel to import it. Need to paint, though. Importing...

nov

15

2021

3D Notebook: Study: Chicken

1

min

read

Notes The first one is cute. It’s modeled after a simple chicken from a game (Breath of Fire III), and I think it...

oct

19

2021

Sketch: Chicken

0

min

read

Hello, this is a sketch of mine, please enjoy

oct

19

2021

Misclicking Live Search

3

min

read

This post is about problems with search-as-you-type features, like search on an iPhone or Spotlight on macOS. An Example...

oct

18

2021

Building an ECS in TypeScript: Dirty Component Optimization

13

min

read

Backstory: Crates A while into development, my co-developer Cooper made a level with a ton of objects. Specifically,...

oct

17

2021

Who Has Been Speaking?

2

min

read

For years, I have wanted a simple pie chart to be visible during meetings that plotted how much time each person has...

oct

11

2021

Sketch: A

0

min

read

Hello, this is a sketch of mine, please enjoy

oct

09

2021

Figure Creation Tutorial: Making a Figure 1

11

min

read

.bg-rot-blue { background-color: D0DFF4; } Intro One of the things I think our lab01 does well is that we put a lot of...

sep

30

2021

The Power of Lists

1

min

read

I often find it extremely helpful when people simply enumerate all of the options for something. Here are some examples....

sep

13

2021

Building an ECS in TypeScript: Deeper Dive: Components

11

min

read

As with Entity, our Component implementation is also quite minimal. /** * A Component is a bundle of state. Each...

sep

12

2021

Building an ECS in TypeScript: Deeper Dive: Entities

2

min

read

Our Entity implementation is about as simple as can be. /** * An entity is just an ID. This is used to look up its...

sep

07

2021

Building an ECS in TypeScript: Tests

4

min

read

The one time I ever wrote tests in making the game Fallgate was after writing the ECS at the very beginning of the...

sep

05

2021

Building an ECS in TypeScript: A TypesScript ECS in 99 Lines of Code

7

min

read

Without further ado, this post is a minimal but complete TypeScript implementation of an ECS. Overview Here’s a brief...

sep

04

2021

Building an ECS in TypeScript: Why build an ECS? Why TypeScript?

8

min

read

There are several questions we should ask ourselves upfront: Why build an ECS? Why build a game engine at all? Why use...

sep

01

2021

Bézier basics

1

min

read

Illustration of cubic Bézier curve constructed using De Casteljau’s algorithm, inspired by this wonderful Bézier video...

aug

29

2021

Personal infrastructure graveyard

2

min

read

I think it’s important to create experiments and prototypes, and also to let them go. To celebrate these, I’ve created a...

aug

24

2021

Benefits of creating prototypes that fail
This is a commonly held belief in the tech world, so I’m writing this really for myself. Creating prototypes that fail...

1

min

read

aug

23

2021

Video game graveyard

1

min

read

I think it’s important to create experiments and prototypes that don’t end up working out. To celebrate these, I’ve...

aug

23

2021

Website graveyard

3

min

read

I think it’s important to create experiments and prototypes, and also to let them go. To celebrate these, I’ve created a...

aug

23

2021

Critiquing Internet use
It feels silly and trivial to talk about any bad aspects of the Internet. Specifically that it allows us access to huge...

1

min

read

aug

22

2021

Does k-means on an image's colors make a good palette?

3

min

read

I was trying to come up with a color palette for an illustration, and I came across this image: source For whatever...

aug

22

2021

Reducing creative friction: starting a new project
I’ve written about creative friction before. But I just realized a new source: how much effort it takes to start a new...

1

min

read

aug

22

2021

Spirit of discovery
The spirit of discovery is wanting to figure something out for yourself rather than look up the answer. While it feels...

1

min

read

aug

22

2021

Simulation: Basic street

1

min

read

// No easy CSS I can find to set height based on width, so using JS. function setHeightToWidth() { const c =...

aug

15

2021

Force Click for Layer Selection

3

min

read

Force Click Apple’s recent trackpads have a feature where you can press harder on them and get a “deeper” click. This...

aug

04

2021

Animating SVGs from Sketch with anime.js

7

min

read

Animating SVGs is great, it makes posts more lively. Animating SVGs, at least in the pipeline I’m using (Sketch and...

jul

31

2021

Stupid things I do constantly in Python
Output a string with "{value}", run the whole thing again and make it f"{value}". Misspell a command...

1

min

read

jul

30

2021

Creation and virality
When I’m creating something, a nonzero portion of my thoughts are about whether it will become big and successful. This...

1

min

read

jul

28

2021

Cultural Wisdom
Let me take a crack at defining what I mean by cultural wisdom right at the start. Cultural wisdom Wisdom you get for...

3

min

read

jul

27

2021

Fixing Mobile Page Layouts

8

min

read

/* "ScreenShot" */ .sc { border-width: .125rem; border-style: solid; border-color: 565656; } .br5 { border-radius: 2rem;...

jul

22

2021

Causes and conditions
This is a mode of thinking that looks at the web/cloud/set of causes and conditions leading up to—and surrounding—an...

1

min

read

jul

20

2021

Omitting negative results precludes thinking in reverse
In science—or at least in machine learning—we have a culture of rewarding positive results and omitting (or...

1

min

read

jul

20

2021

Thinking in reverse
I read about this idea in the context of Charlie Munger’s process for drawing good maps for pilots: Think about all the...

1

min

read

jul

20

2021

Summer 2021 website goals
I didn't finish, but they helped a lot.

2

min

read

jul

15

2021

Working blocks
Working blocks are periods of focused work.01 Benefits Getting started. You can do anything for twenty-five minutes....

1

min

read

jul

15

2021

Working process
Over many years of independent work during the PhD, I’ve pieced together components of a process for getting work done...

1

min

read

jul

15

2021

Deciding and following
“The mind is a great servant but a terrible master.” – proverb One tendency I struggle with is how to balance two modes:...

1

min

read

jul

11

2021

Deeper ideas in pocket
I wrote about this quote in Hot, but I wanted a way to reference it later. When you’re new at something, you get excited...

1

min

read

jul

11

2021

Hot
It is very hot in Seattle right now. Today was the hottest day in recorded history. Tomorrow is supposed to be hotter. I...

2

min

read

jun

27

2021

Notes on fragment shaders and p5.js
createGraphics() makes a new <canvas> I thought I had a bug with resizeCanvas() because a bunch of extra...

2

min

read

jun

27

2021

Teachers are responsible for multiple perspectives
If you’re not a teacher, and you need to figure out how to do something challenging—like lose weight, reach a high depth...

3

min

read

jun

25

2021

Tension between discovery and intentional creation
Especially when inexperienced with a medium, it can be difficult to pick which creative ideas to pursue. If you just let...

1

min

read

jun

25

2021

Home base feeling
The home base feeling is when you are comfortable enough with what’s going on that the idea of embarking on a new quest...

1

min

read

jun

24

2021

Tiny naming woes
“There are only two hard things in computer science: cache invalidation and naming things.” – Phil Karlton The word...

1

min

read

jun

24

2021

What is the garage?
The garage01 is a new experiment (starting June 2021) with “working with the garage door up.” It’s inspired by Alex’s...

3

min

read

jun

22

2021

The Distant Rumble of Change
Even just writing a “blog post” and calling it a “blog post” feels like a cop-out. But this is actually exactly what I...

5

min

read

jun

20

2021

"Every PhD Is Different"

14

min

read

I heard this phrase a handful of times when I started my PhD. Like most platitudes, I immediately dismissed it.

jun

13

2021

Sketch: Cube Room

1

min

read

Hello, this is a sketch of mine, please enjoy

apr

21

2021

Sketch: New Damien Who Dis

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

14

2021

Voxel Web Renderer Ft. Bar Table

1

min

read

Hello, this is a sketch of mine, please enjoy

apr

13

2021

Sketch: Bar Table

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

10

2021

Sketch: Mimyc

1

min

read

Hello, this is a sketch of mine, please enjoy

apr

07

2021

Sketch: City Parts

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

06

2021

Sketch: Lighting Height Study

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

05

2021

Sketch: Material Study

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

05

2021

Sketch: Symmetry Tools Study

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

05

2021

Sketch: Taco

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

04

2021

Sketch: Tiny Red Truck

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

02

2021

Sketch: Wide Blue Truck

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

02

2021

Sketch: Coffee Bowl

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

01

2021

Sketch: Coffee Mug Scale Study

0

min

read

Hello, this is a sketch of mine, please enjoy

apr

01

2021

Sketch: Green Screen

0

min

read

Hello, this is a sketch of mine, please enjoy

mar

30

2021

Don't Justify Web Text

3

min

read

In print, or when typeset with a good program, justified text is beautiful. All of the academic writing in my field is...

mar

29

2021

A Modest Proposal: Let’s Stop Lying To Each Other in Our Research Papers

8

min

read

I was reviewing for ACL01 last week, and it was a particularly depressing time. It was depressing because it made me...

mar

26

2021

Fragment Shader on iPhone

0

min

read

A tiny project to put a fragment shader on my iPhone

feb

17

2021

Sketch: Stars

1

min

read

Hello, this is a sketch of mine, please enjoy

feb

17

2021

Software: python-utils ↗
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....

1

min

read

dec

02

2020

Appropriate Quality

4

min

read

One skill I have avoided learning for years is doing work at the appropriate level of quality. My default is to try to...

sep

02

2020

Creative Reading
A little bit ago, I spent a weekend by a lake. We rented a cabin. I passed two days cooking and soaking in nature’s...

3

min

read

aug

27

2020

Smaller Posts
I’m going to try writing some smaller posts. Each time I’ve tried to write something small recently, it’s become quite...

2

min

read

aug

26

2020

Use Examples

15

min

read

Examples vastly improve communication. Teaser: Examples take significantly more effort to make, but they are densely...

aug

18

2020

Sparking Joy with Python: Conventions Are Small Magic

8

min

read

Adapted from photo by RISE, CC BY 2.0. I have started following a few simple rules when I write Python that helps me...

jul

21

2020

Sparking Joy with Python: Static Typing Is the Key to Joy

7

min

read

Adapted from photo by RISE, CC BY 2.0. Static typing is the main point of this series of posts. Static type checking,...

jul

20

2020

Sparking Joy with Python: Decluttering with Tools

4

min

read

Adapted from photo by RISE, CC BY 2.0. Use a code formatter to wash away all of your stupid opinions about how your code...

jul

20

2020

Sparking Joy with Python: Why

4

min

read

Adapted from photo by RISE, CC BY 2.0. I’ve been writing Python for about eight years. When you come from Java, Python...

jul

20

2020

Deeply Knowing

3

min

read

I think the most important distinction in knowledge is whether you intellectually understand something to be true, or...

apr

08

2020

Sketch: Limes

1

min

read

Hello, this is a sketch of mine, please enjoy

feb

18

2020

Sketch: Follow Me

1

min

read

Hello, this is a sketch of mine, please enjoy

feb

05

2020

Sketch: Color World

1

min

read

Ping

feb

04

2020

T-Shirt: Monologue

1

min

read

Hello, this is a sketch of mine, please enjoy

jan

21

2020

Sketch: Primitives

1

min

read

A digital sketch on some visual transformation primitives.

jan

14

2020

Calorie Counting × Meal Planning

15

min

read

I made a really simple calorie counting × meal planning web app. It’s open-source, and you can use it here if you’d like...

nov

26

2019

Software: food ↗
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.

1

min

read

oct

21

2019

Sketch: Thinking

0

min

read

A digital sketch about thinking.

sep

16

2019

Sketch: Circles

0

min

read

A digital sketch featuring some circles.

jun

29

2019

Creative Friction

9

min

read

I made a new website. (You are probably on it right now.) It’s been over five years since I made my last one.01 I made...

may

27

2019

Fallgate

3

min

read

Fallgate is a game my friend Cooper and I made as a hobby project. It is a pixel-art action-adventure game about...

jan

04

2019

Procedural City Layout Generation with GANs

16

min

read

Preface This was my project for a computer graphics class I took back in 2017. (I’m writing this now in 2021.) I was...

dec

15

2017

Ordinary least squares, ℓ² (ridge), and ℓ¹ (lasso) linear regressions

6

min

read

Delightful derivations all in one place, plus pytorch implementations.

nov

21

2017

Downloading books from Project Gutenberg
Note: I wrote this in 2016, and am posting it now in 2021. Others have found it helpful. In case it’s still a bit...

3

min

read

nov

22

2016

Paralysis

5

min

read

During the past seven years I have struggled immensely to produce independent creative work. Today I realized one reason...

apr

23

2016

Making Plots Pretty

2

min

read

Preface Back in 2014, I gave this talk to my robotics lab on how to make good looking plots / figures. I’m posting it...

apr

24

2014