Studio
2024
The Plague of a Thousand Socials
I See You (Seattle, USA — December, 2023) H...
Wow It's October Already
Cindy and Barb (Seattle, USA — September, 2...
Delete Your Backlog
Delete your backlog. Unread books, unplayed games, unwritten essays, unwatched movies. They are all cognitive weight. Yo...
Talk to Me Human Devlog
Automating Screenshots
I wrote a small script to automate taking screenshots of webpages. The script summoned enough little edge cases that I t...
Cooking Up the Metagame
July 2024 Monthly Digest - The PhD Metagame, and press for Talk to Me Human.
A Big Move and a Small Game
June 2024 Monthly Digest - What I've been up to: moving to NYC, and releasing Talk to Me Human.
Microblog, Garage ?
let’s see how it did. level 2 # some text here level 3 # gosh this is structured level 4 # you have to be kidding level ...
One thing blogs do that I’m jealous of is make posts that say “here’s what I think about X right now.” These posts are b...
Source: https://rive.app/community/files/12005-22970-spaceship-hud/ Process observation: explicit base material screensh...
2D Notebook
From "[BEST] 日本のお金を作るプロセス。新札1万円、500円玉を作る日本の工場" (https://www.youtube.com/watch?v=m5F8rFcJq3c) TODO: There was also a co...
Stub This is a placeholder for me to write more. Bug me if you want to read it. I think havi...
Stub This is a placeholder for me to write more. Bug me if you want to read it. There’s way ...
You notice something a lot once you become aware of it. The frequency illusion (AKA “Baader-Meinhof phenomenon”) is a f...
On understanding a domain's true complexity. So many good and well-told ideas from Ted Chiang's essay that I keep referr...
I am in denial of my own advice and attempting to write everything in my essay backlog.
Dev startups, "It's important to listen to your developers, like _really_ listen to them. That's how we have achieved su...
Trying to have one page display previews of others. For example a "monthly digest" post shows previews of posts written ...
Just had the most fascinating Internet dopamine experience. This afternoon, I realized today was a bad one in consuming ...
Trying to get Electron setup has made me realize I don't understand so many aspects of my build and deploy and hosting s...
Contrary to popular perception, frontend engineering is enormously more difficult. It's not even close.
This is a way to create a tailwind class that applies to a custom select `[&>p]`.
All I want for Christmas is to design for fixed pixel dimensions. (Rather than, say, 93 vastly different screen sizes.) ...
2023
Taiwan
Hualien
The general feel of both thriving and falling apart at the same time.
Taiwan
Chishang
Hope you like rice paddies.
Taiwan
Kaohsiung
Where'd all the art go?
Taiwan
Tainan
Unexpectedly vibrant pocket.
Taiwan
Alishan
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.
Taiwan
Taichung
Long walks through warm pastel evenings---glimpses into Taiwan's second biggest city.
Taiwan
Taipei
Still suffering from bubble tea withdrawal.
Wintermission
On good cameras, Seattle, and San Diego.
Bali
Every ounce of local kindness is a heroic feat in the face of Disneylandification.
Penang
Street eats and a melting pot of traffic.
Singapore
Once you hear "Disneyland with the Death Penalty," you can't un-think it.
The Philippines
El Nido
Islas de Instagram.
The Philippines
Bohol
Tiny primates, grassy lumps, gatorade shores.
The Philippines
Manila
We exit the airport and are immediately confronted by a man holding a shotgun.
Vietnam
Ho Chi Minh City
I feel a bit guilty now about avoiding the day trip OMTAs here. But hey, sometimes you gotta just do you. Eat bun cha, w...
Vietnam
Dalat
At least if we were doing stupid shit, we were doing stupid shit locals do.
Vietnam
Sapa
And The Tiny Agony of Inauthentic Experiences
Vietnam
Hanoi
Wonderful food, terrifying roads, and dead fish.
Korea
Jeju
Seoul / Jeju is the busiest passenger air route in the world. So... where is everybody?
Korea
Busan
Busan feels full of potential, but it also carries the slowness of a town that's always playing second fiddle.
Korea
Seoul
Our favorite place of 2022, of the eighteen countries we visited, was Seoul.
dotfiles ↗
My helper scripts, configs, and instructions for setting up new environments.
Georgia
A subway whose platforms are carved so deep underground that you must ride bulky lumbering escalators for a small eterni...
git-checker ↗
A tiny tool to find git repositories on your computer and tell you if any are dirty or unpushed.
Sketch: Ramen ode
Hello, this is a sketch of mine, please enjoy
Sketch: Muji Page Please
Hello, this is a sketch of mine, please enjoy
Israel
Israel is a million multi-layered and multi-textured sand colored walls; a hundred different outfits and religious denom...
Bosnia and Herzegovina
Everything about Bosnia has fractal-like complexity. For example, there are five presidents. Why? We must go deeper.
Serbia
“It’s all quite run down, isn’t it?” We were all thinking it, but I wished he wouldn’t say it so loudly.
Microblog, Garage ?
Went through a sculpture garden. Sweet idea: sculpture gardens should make 3D-printed mini models of sculptures for visu...
After writing TypeScript for (how many years?!) I just discovered their reference sheet for utility types and I can’t be...
This page is: JS Template Test Page This is a simple test of a JavaScript template in Eleventy. Hello...
I just realized that trying to make something pretty when you’re making a first draft is like trying to edit your writin...
Summary # I stumbled upon a great type to enforce object immutability at compile time if that’s all you’re worried about...
It seems that now, it's nearly impossible to know about niche things. Not because it's too hard, but because it's too ea...
Photo Notebook
I’m inline ya dig. def main(): # Setup device device = torch.device( f"cuda:{args.device}" if torch....
Inline # cityMap # Static Animated "plain big" cityPic # ...
Is it possible to have images save space and render placeholders before they’ve loaded? Site-wide # I went down the elev...
Photo Notebook
Apple Photos # Apple Photos is simultaneously a blessing and a bane. The interface for viewing and editing photos is ext...
Photo Notebook
Photo Notebook
There’s probably a better term for it, but by shooting street I mean getting primed to take photos more quickly while wa...
Photo Notebook
I quickly stumbled on what I believe to be the best shooting mode: aperture priority.01 This means that you pick apertur...
Photo Notebook
Photo Notebook
Photo Notebook
Photo Notebook
Photo Notebook
Photo Notebook
Fake diary entries in a language textbook are surreal when you think about it a bit. You have an adult human going about...
Whoops it’s been a minute, huh? Here’s some low quality content to keep this alive. Huh, low quality content to keep som...
All I want for Christmas is for Nunjucks to support trailing commas instead of crashing.
After one month of exposure and careful consideration I would like to confirm that, yes, indeed, stinky tofu smells bad....
Encountered a cool instant ramen format twice now on accident. It comes with two bowls. Thought it was a packing mistake...
Ideas This is a post in its idea generation phase. I'm collecting notes for what to write about. ...
I’d like to try putting sidenotes in the margins for large enough pages. (This page has previews of the sidenotes if you...
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 b...
Never seen an area like this before on Google Maps:
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. Fr...
3D Notebook
Second place we’ve visited now because of a really high Google maps rating that turns out to offer bribes for Google map...
Karaoke. Every day. Starting midday. I want to appreciate the cultural context that allows total abandon, atonal bellows...
Attribute Investigation # NB: The following numbers change as I add more text here because the images are getting pushed...
Interesting design: this overhead light changes the number of bulbs that are on every time you turn it off and on again....
Summary: 100MB → 5MB initial load, drastically improved interactive times (roughly ~10s → ~1s). Longer summary: repentin...
Haven’t scrolled twitter in a long time. Wondered whether opening it up would release… wait, is there a name for the ver...
Starting a microblog. Will I finally be able to contain my verbosity? Time will tell.
Ideas This is a post in its idea generation phase. I'm collecting notes for what to write about. ...
Draft This is a rough draft of a post. I'm still writing and revising it. It probably reads terri...
Draft This is a rough draft of a post. I'm still writing and revising it. It probably reads terri...
2022
London
I like visiting cities, especially big ones, after waiting a long time. I seem to end up with completely non-overlapping...
Scotland Roadtrip
Part V: Glasgow Terminus
I had high hopes for Glasgow. Modern city, seemed to have good public transport and millennial hipster comforts: craft b...
Scotland Roadtrip
Part IV: Oban, Fingal’s Cave, and Car Troubles
Hiking here is appropriately called "hill walking."
Scotland Roadtrip
Part III: Isle of Skye
Isle of Skye is one of those places that is dramatic when you're there but totally doesn't photograph well. I have never...
Scotland Roadtrip
Part II: Inverness, Loch Ness, and Booking-less
With Loch Ness so famous because of its Monster, it had not occurred to me that it might actually turn out to be a compl...
Scotland Roadtrip
Part I: Aberdeen, British Royalty, and Expensive Castles
We took a two week roadtrip through Scotland. We got soaked and the food sucked, but the nature was awesome. 10/10.
In Praise And Critique of Digital Gardens
A digital garden may be the solution to creative friction. But is it worth the cost?
My Media Snapshot
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 read...
Sleeper Train to Sapa
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 wil...
Blank Screen Manifesto
This is something I hope to rework into a proper post someday. It’s crazy how much visual distraction there is by defaul...
Get the Picture
We’re staying near the Dongdaemun Design Plaza, this enormous swoopy blob of a multi-building complex that looks like s...
Just Moving and Making
This is the first time I’ve used the “post before 6am Monday” to its extreme. (That’s our deadline for weekly posts.) I...
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 o...
Edinburgh
Ahh, back to the motherland, where I final...
Infrastructure
The Recurrent Agony of Naming Things # I feel guilty naming this post “infrastructure” because it’s such a good word. I...
Writing vs Blogging
Meeting some new folks and talking about our travels, I mentioned I wrote a blog. I only then realized this is lightly ...
Paris
Ultra light entry on Paris. What struck me the most this visit was basically any district we went to, there was a...
Montpellier
We spent three weeks visiting cities we hadn’t seen before in France. (Okay, plus Paris.) Top priorities were to ...
Lyon
Lyon was my favorite French city we visite...
Aix-en-Provence
Just call it “Aix,” pronounced like the letter X. I felt like I didn’t quite connect with Aix. It’s hard to judge...
weatherspread
When you're figuring out where to go, or when to go there, remember that a great shadow force will shape your experience...
Slovenia
Mentioning Slovenia, a few friends have said, “oh I’ve heard it’s really beautiful and still undiscovered!” I regret to ...
Croatia
Dubrovnik # We arrived in Dubrovnik and im...
Crete
We visited Crete, the biggest Greek island, for one week. After a brief stopover in Heraklion, we stayed in Chani...
Naxos
Among tourist destination islands (probably all o...
Athens
Gritty and sprawling. Anarchist enthusiast youth districts. Generous seafood, meat, and salads, especially in the outski...
Seattle in May
Back across the pond for about a week. Seattle is so green. It’s sooooooo green. I think what we lack in sun we ...
Madrid
We popped by Madrid for a couple days. We both liked Madrid much more than we expected! I’m not sure why we thoug...
Basque Country
Basque is a culture, language, and cultural region spanning a chunk of northern Spain and southwest France. I hadn’t eve...
Peneda-Gerês National Park
Second big day trip from Porto. Also coupl...
Douro Valley
Back in Porto, this is one of a couple day trips we took. Huge wine region, ~1–2hr drive east out of Porto. Wine ...
Córdoba
Córdoba was a wonderful change of pace fro...
Granada
...
Nerja
Beach vibes. So many Brits here signs outs...
Sketch: Wood Shelf Room
Hello, this is a sketch of mine, please enjoy
Málaga
I was surprised how many tourists are here...
Seville
A lovely feature of Spanish cities seems t...
Porto
Porto was, like Lisbon, completely flooded...
Lisbon
Without knowing locals or speaking the language, it feels like you can go a mile wide but will remain an inch deep.
Sketch: Red Wine
Hello, this is a sketch of mine, please enjoy
Washington, D.C.
D.C. felt vibrant and friendly in a your-favorite-block-in-NYC kinda way. Plus this kind of New England brick urb...
Rewrites and replants
What I’ve been up to: I rewrote my website from...
Building an ECS in TypeScript
Deeper Dive: Systems
We’ve already covered the basics of how Systems work. Here I’ll touch on four advanced topics: ordering, disabling, clea...
Building an ECS in TypeScript
Aspects
Disclaimer: I’m not sure whether “Aspects” are really a standard thing for ECS. (Or, if they are, whether my usage is t...
Microblog, Garage ?
Stub This is a placeholder for me to write more. Bug me if you want to read it. Before/after...
Spent a bit of time working on a different header style to use for articles (on this website). WIP. Notes for myself: l...
Stub This is a placeholder for me to write more. Bug me if you want to read it. This is one ...
Stub This is a placeholder for me to write more. Bug me if you want to read it. Notes: Goog...
Worklist # [x] nav [x] desktop [x] color themes [x] mobile [x] footer [x] desktop [x] color themes [x] mobile [x]...
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...
Starting a new project, each new technology you use adds a time cost for figuring out how it works. You really notice th...
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 th...
Some notes—hope to expand further—on the surprising number of additional website issues I faced when trying to include m...
What’s interesting is that voxel resolution isn’t the same thing as level of detail used. This goes both ways. There ar...
3D Notebook
Due to preliminary pixel density tests in the image layout test page, I've been exporting my images assuming an @3x devi...
Attempting resolution of issue seen in recent photo blog posts: scrolling down, or even back up, results in Chrome re-de...
A quick test to see whether folks' browsers are able to display this (somewhat) new image format called "WebP."
3D Notebook
I want to experiment with wider layouts, so want to have HTML/CSS formulas for breaking out of the normal content flow. ...
Public vs Private Spaces # I’m interested in the difference between public and private spaces (/ groups) (/ communities...
Visiting climbing gyms that are just getting their legs under them—usually in smaller cities—is bittersweet. It’s lovely...
This is my devlog for working with the prettymaps library to try to generate maps for cities that I visit. I ran into a ...
3D Notebook
3D Notebook
3D Notebook
2021
Building an ECS in TypeScript
What is an ECS?
Preface # This series is intended to be a simple walkthrough of building an ECS-based game engine in TypeScript. It’s ba...
Sketch: Chicken
Hello, this is a sketch of mine, please enjoy
Misclicking Live Search
This post is about problems with search-as-you-type features, like search on an iPhone or Spotlight on macOS. An Exampl...
Building an ECS in TypeScript
Dirty Component Optimization
Backstory: Crates # A while into development, my co-developer Cooper made a level with a ton of objects. Specifically, c...
Who Has Been Speaking?
For years, I have wanted a simple pie chart to be visible during meetings that plotted how much time each person has sp...
Sketch: A
Hello, this is a sketch of mine, please enjoy
The Power of Lists
I often find it extremely helpful when people simply enumerate all of the options for something. Here are some examples...
Building an ECS in TypeScript
Deeper Dive: Components
As with Entity, our Component implementation is also quite minimal. /** * A Component is a bundle of state. Each instanc...
Building an ECS in TypeScript
Deeper Dive: Entities
Our Entity implementation is about as simple as can be. /** * An entity is just an ID. This is used to look up its assoc...
Building an ECS in TypeScript
Tests
The one time I ever wrote tests in making the game Fallgate was after writing the ECS at the very beginning of the proje...
Building an ECS in TypeScript
A TypesScript ECS in 99 Lines of Code
Without further ado, this post is a minimal but complete TypeScript implementation of an ECS. Overview # Here’s a brief ...
Building an ECS in TypeScript
Why build an ECS? Why TypeScript?
There are several questions we should ask ourselves upfront: Why build an ECS? Why build a game engine at all? Why use ...
Force Click for Layer Selection
Force Click # Apple’s recent trackpads have a feature where you can press harder on them and get a “deeper” click. This ...
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 f...
Fixing Mobile Page Layouts
/* "ScreenShot" */ .sc { border-width: .125rem; border-style: solid; border-color: #565656; } .br5 { border-ra...
Hot
It is very hot in Seattle right now. Today was the hottest day in recorded history. Tomorrow is supposed to be hotter. I...
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 s...
Sketch: Cube Room
Hello, this is a sketch of mine, please enjoy
Sketch: New Damien Who Dis
Hello, this is a sketch of mine, please enjoy
Voxel Web Renderer Ft. Bar Table
Hello, this is a sketch of mine, please enjoy
Sketch: Bar Table
Hello, this is a sketch of mine, please enjoy
Sketch: Mimyc
Hello, this is a sketch of mine, please enjoy
Sketch: City Parts
Hello, this is a sketch of mine, please enjoy
Sketch: Symmetry Tools Study
Hello, this is a sketch of mine, please enjoy
Sketch: Material Study
Hello, this is a sketch of mine, please enjoy
Sketch: Lighting Height Study
Hello, this is a sketch of mine, please enjoy
Sketch: Taco
Hello, this is a sketch of mine, please enjoy
Sketch: Wide Blue Truck
Hello, this is a sketch of mine, please enjoy
Sketch: Tiny Red Truck
Hello, this is a sketch of mine, please enjoy
Sketch: Coffee Mug Scale Study
Hello, this is a sketch of mine, please enjoy
Sketch: Coffee Bowl
Hello, this is a sketch of mine, please enjoy
Sketch: Green Screen
Hello, this is a sketch of mine, please enjoy
Don't Justify Web Text
In print, or when typeset with a good program, justified text is beautiful. All of the academic writing in my field is s...
Sketch: Stars
Hello, this is a sketch of mine, please enjoy
Fragment Shader on iPhone
A tiny project to put a fragment shader on my iPhone
Microblog, Garage ?
3D Notebook
Turns out Perlin noise is great, much nicer than what I can do by hand. Run shader tergen (or tergen2 for selected area ...
3D Notebook
For me it’s not immediately obvious how to use them, sometimes even after reading about it. Brush grass - shader mode ...
3D Notebook
(The actual ground may be a terrain — i.e., not just z=0.) Have different color voxels underneath, then run drop shader ...
3D Notebook
I think Layer doesn’t determine draw order, but Outline does. Manipulating the order with the Outline is awkward. In Wor...
3D Notebook
3D Notebook
A personal example catalog # Unintentional # Caffeine filling the brain — Optimism about current and pot...
3D Notebook
3D Notebook
3D Notebook
This is a commonly held belief in the tech world, so I’m writing this really for myself. Creating prototypes that fail i...
The spirit of discovery is wanting to figure something out for yourself rather than look up the answer. While it feels s...
I’ve written about creative friction before. But I just realized a new source: how much effort it takes to start a new p...
It feels silly and trivial to talk about any bad aspects of the Internet. Specifically that it allows us access to huge ...
Output a string with "{value}", run the whole thing again and make it f"{value}". Misspell a com...
When I’m creating something, a nonzero portion of my thoughts are about whether it will become big and successful. This ...
I read about this idea in the context of Charlie Munger’s process for drawing good maps for pilots: Think about all th...
In science—or at least in machine learning—we have a culture of rewarding positive results and omitting (or misinterpret...
This is a mode of thinking that looks at the web/cloud/set of causes and conditions leading up to—and surrounding—an eve...
Over many years of independent work during the PhD, I’ve pieced together components of a process for getting work done w...
Working blocks are periods of focused work.01 Benefits # Getting started. You can do anything for twenty-five minutes. W...
I didn't finish, but they helped a lot.
I wrote about this quote in Hot, but I wanted a way to reference it later. When you’re new at something, you get excite...
“The mind is a great servant but a terrible master.” – proverb One tendency I struggle with is how to balance two mode...
createGraphics() makes a new <canvas> # I thought I had a bug with resizeCanvas() because a bunch of extra <can...
Especially when inexperienced with a medium, it can be difficult to pick which creative ideas to pursue. If you just let...
If you’re not a teacher, and you need to figure out how to do something challenging—like lose weight, reach a high depth...
“There are only two hard things in computer science: cache invalidation and naming things.” – Phil Karlton The word “s...
The home base feeling is when you are comfortable enough with what’s going on that the idea of embarking on a new quest ...
The garage01 is a new experiment (starting June 2021) with “working with the garage door up.” It’s inspired by Alex’s ev...
2020
python-utils ↗
My helper functions for python.
Appropriate Quality
One skill I have avoided learning for years is doing work at the appropriate level of quality. My default is to try to ...
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 abu...
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 ...
Use Examples
Examples vastly improve communication. Teaser: Examples take significantly more effort to make, but they are densely im...
Sparking Joy with Python
Conventions Are Small Magic
Adapted from photo by RISE, CC BY 2.0. I have started following a few simple rules when I write Python that helps me...
Sparking Joy with Python
Why
Adapted from photo by RISE, CC BY 2.0. I’ve been writing Python for about eight years. When you come from Java, Pyth...
Sparking Joy with Python
Decluttering with Tools
Adapted from photo by RISE, CC BY 2.0. Use a code formatter to wash away all of your stupid opinions about how your ...
Sparking Joy with Python
Static Typing Is the Key to Joy
Adapted from photo by RISE, CC BY 2.0. Static typing is the main point of this series of posts. Static type checking...
Deeply Knowing
I think the most important distinction in knowledge is whether you intellectually understand something to be true, or d...
Sketch: Limes
Hello, this is a sketch of mine, please enjoy
Sketch: Follow Me
Hello, this is a sketch of mine, please enjoy
Sketch: Color World
Ping
T-Shirt: Monologue
Hello, this is a sketch of mine, please enjoy
Sketch: Primitives
A digital sketch on some visual transformation primitives.
2019
Calorie Counting × Meal Planning
I made a really simple calorie counting × meal planning web app. It’s open-source, and you can use it here if you’d lik...
food ↗
A simple Desktop-only app for calorie counting and meal planning.
Sketch: Thinking
A digital sketch about thinking.
Sketch: Circles
A digital sketch featuring some circles.
Creative Friction
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 ...
Fallgate
Fallgate is a game my friend Cooper and I made as a hobby project. It is a pixel-art action-adventure game about questi...
2016
Paralysis
During the past seven years I have struggled immensely to produce independent creative work. Today I realized one reaso...
Writing
Travel
Taipei
Taiwan
Mar 14, 2023
Taichung
Taiwan
Mar 21, 2023
Alishan
Taiwan
Mar 25, 2023
Tainan
Taiwan
Mar 30, 2023
Kaohsiung
Taiwan
Apr 5, 2023
Chishang
Taiwan
Apr 8, 2023
Hualien
Taiwan
Apr 11, 2023
Manila
The Philippines
Nov 25, 2022
Bohol
The Philippines
Nov 30, 2022
El Nido
The Philippines
Dec 4, 2022
Hanoi
Vietnam
Nov 11, 2022
Sapa
Vietnam
Nov 7, 2022
Dalat
Vietnam
Nov 15, 2022
Ho Chi Minh City
Vietnam
Nov 20, 2022
Georgia
Oct 2, 2022
Israel
Sep 20, 2022
Bosnia and Herzegovina
Sep 6, 2022
Serbia
Aug 28, 2022
London
Aug 23, 2022
Part I: Aberdeen, British Royalty, and Expensive Castles
Scotland Roadtrip
Aug 3, 2022
Part II: Inverness, Loch Ness, and Booking-less
Scotland Roadtrip
Aug 6, 2022
Part III: Isle of Skye
Scotland Roadtrip
Aug 10, 2022
Part IV: Oban, Fingal’s Cave, and Car Troubles
Scotland Roadtrip
Aug 13, 2022
Part V: Glasgow Terminus
Scotland Roadtrip
Aug 17, 2022
Edinburgh
Jul 31, 2022
Paris
Jul 17, 2022
Lyon
Jul 13, 2022
Aix-en-Provence
Jul 9, 2022
Montpellier
Jul 4, 2022
Slovenia
Jun 28, 2022
Croatia
Jun 20, 2022
Crete
Jun 10, 2022
Naxos
Jun 3, 2022
Athens
May 31, 2022
Seattle in May
May 26, 2022
Madrid
May 18, 2022
Basque Country
May 16, 2022
Peneda-Gerês National Park
May 7, 2022
Douro Valley
May 5, 2022
Córdoba
May 4, 2022
Granada
May 1, 2022
Nerja
Apr 27, 2022
Málaga
Apr 24, 2022
Seville
Apr 21, 2022
Porto
Apr 18, 2022
Lisbon
Apr 11, 2022
Washington, D.C.
Apr 3, 2022
Programming
- Building an ECS in TypeScript
- Sparking Joy with Python
Design
Misclicking Live Search
This post is about problems with search-as-you-type features, like search on an iPhone or Spotlight on macOS. An Exampl...
Who Has Been Speaking?
For years, I have wanted a simple pie chart to be visible during meetings that plotted how much time each person has sp...
The Power of Lists
I often find it extremely helpful when people simply enumerate all of the options for something. Here are some examples...
Force Click for Layer Selection
Force Click # Apple’s recent trackpads have a feature where you can press harder on them and get a “deeper” click. This ...
Fixing Mobile Page Layouts
/* "ScreenShot" */ .sc { border-width: .125rem; border-style: solid; border-color: #565656; } .br5 { border-ra...
Don't Justify Web Text
In print, or when typeset with a good program, justified text is beautiful. All of the academic writing in my field is s...
Creating & Thinking
- Delete Your Backlog
- Cultural Wisdom
- Appropriate Quality
- Creative Reading
- Use Examples
- Deeply Knowing
- Creative Friction
- Paralysis
Health
Projects
Software
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
- The Plague of a Thousand Socials
- Wow It's October Already
- Cooking Up the Metagame
- A Big Move and a Small Game
- 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: Sep 17, 2024
Dev startups: “It’s important to listen to your developers, like really listen to them. That’s how we have achieved such amazing usability.”
Google: “It is physically impossible to contact us. Do not try.”
Something is wrong when even Microsoft is easier to get ahold of (an engineer replied to my email within an hour!)
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?
let’s see how it did. level 2 # some text here level 3 # gosh this is structured level 4 # you have to be kidding level ...
One thing blogs do that I’m jealous of is make posts that say “here’s what I think about X right now.” These posts are b...
Source: https://rive.app/community/files/12005-22970-spaceship-hud/ Process observation: explicit base material screensh...
2D Notebook
Stub This is a placeholder for me to write more. Bug me if you want to read it. There’s way ...
Stub This is a placeholder for me to write more. Bug me if you want to read it. I think havi...
From "[BEST] 日本のお金を作るプロセス。新札1万円、500円玉を作る日本の工場" (https://www.youtube.com/watch?v=m5F8rFcJq3c) TODO: There was also a co...
You notice something a lot once you become aware of it. The frequency illusion (AKA “Baader-Meinhof phenomenon”) is a f...
On understanding a domain's true complexity. So many good and well-told ideas from Ted Chiang's essay that I keep referr...
I am in denial of my own advice and attempting to write everything in my essay backlog.
Trying to have one page display previews of others. For example a "monthly digest" post shows previews of posts written ...
Contrary to popular perception, frontend engineering is enormously more difficult. It's not even close.
Trying to get Electron setup has made me realize I don't understand so many aspects of my build and deploy and hosting s...
This is a way to create a tailwind class that applies to a custom select `[&>p]`.
This page is: JS Template Test Page This is a simple test of a JavaScript template in Eleventy. Hello...
Summary # I stumbled upon a great type to enforce object immutability at compile time if that’s all you’re worried about...
Photo Notebook
I’m inline ya dig. def main(): # Setup device device = torch.device( f"cuda:{args.device}" if torch....
Inline # cityMap # Static Animated "plain big" cityPic # ...
Is it possible to have images save space and render placeholders before they’ve loaded? Site-wide # I went down the elev...
Photo Notebook
Photo Notebook
Photo Notebook
Photo Notebook
Photo Notebook
Photo Notebook
I quickly stumbled on what I believe to be the best shooting mode: aperture priority.01 This means that you pick apertur...
Photo Notebook
There’s probably a better term for it, but by shooting street I mean getting primed to take photos more quickly while wa...
Photo Notebook
Photo Notebook
Apple Photos # Apple Photos is simultaneously a blessing and a bane. The interface for viewing and editing photos is ext...
Photo Notebook
I’d like to try putting sidenotes in the margins for large enough pages. (This page has previews of the sidenotes if you...
Ideas This is a post in its idea generation phase. I'm collecting notes for what to write about. ...
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. Fr...
3D Notebook
Attribute Investigation # NB: The following numbers change as I add more text here because the images are getting pushed...
Summary: 100MB → 5MB initial load, drastically improved interactive times (roughly ~10s → ~1s). Longer summary: repentin...
Draft This is a rough draft of a post. I'm still writing and revising it. It probably reads terri...
Draft This is a rough draft of a post. I'm still writing and revising it. It probably reads terri...
Ideas This is a post in its idea generation phase. I'm collecting notes for what to write about. ...
Stub This is a placeholder for me to write more. Bug me if you want to read it. Before/after...
Spent a bit of time working on a different header style to use for articles (on this website). WIP. Notes for myself: l...
Stub This is a placeholder for me to write more. Bug me if you want to read it. Notes: Goog...
Stub This is a placeholder for me to write more. Bug me if you want to read it. This is one ...
Worklist # [x] nav [x] desktop [x] color themes [x] mobile [x] footer [x] desktop [x] color themes [x] mobile [x]...
Starting a new project, each new technology you use adds a time cost for figuring out how it works. You really notice th...
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...
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 th...
Some notes—hope to expand further—on the surprising number of additional website issues I faced when trying to include m...
What’s interesting is that voxel resolution isn’t the same thing as level of detail used. This goes both ways. There ar...
3D Notebook
Due to preliminary pixel density tests in the image layout test page, I've been exporting my images assuming an @3x devi...
Attempting resolution of issue seen in recent photo blog posts: scrolling down, or even back up, results in Chrome re-de...
A quick test to see whether folks' browsers are able to display this (somewhat) new image format called "WebP."
3D Notebook
I want to experiment with wider layouts, so want to have HTML/CSS formulas for breaking out of the normal content flow. ...
Visiting climbing gyms that are just getting their legs under them—usually in smaller cities—is bittersweet. It’s lovely...
Public vs Private Spaces # I’m interested in the difference between public and private spaces (/ groups) (/ communities...
This is my devlog for working with the prettymaps library to try to generate maps for cities that I visit. I ran into a ...
3D Notebook
3D Notebook
3D Notebook
3D Notebook
I think Layer doesn’t determine draw order, but Outline does. Manipulating the order with the Outline is awkward. In Wor...
3D Notebook
(The actual ground may be a terrain — i.e., not just z=0.) Have different color voxels underneath, then run drop shader ...
3D Notebook
For me it’s not immediately obvious how to use them, sometimes even after reading about it. Brush grass - shader mode ...
3D Notebook
Turns out Perlin noise is great, much nicer than what I can do by hand. Run shader tergen (or tergen2 for selected area ...
3D Notebook
3D Notebook
A personal example catalog # Unintentional # Caffeine filling the brain — Optimism about current and pot...
3D Notebook
3D Notebook
3D Notebook
This is a commonly held belief in the tech world, so I’m writing this really for myself. Creating prototypes that fail i...
It feels silly and trivial to talk about any bad aspects of the Internet. Specifically that it allows us access to huge ...
I’ve written about creative friction before. But I just realized a new source: how much effort it takes to start a new p...
The spirit of discovery is wanting to figure something out for yourself rather than look up the answer. While it feels s...
Output a string with "{value}", run the whole thing again and make it f"{value}". Misspell a com...
When I’m creating something, a nonzero portion of my thoughts are about whether it will become big and successful. This ...
This is a mode of thinking that looks at the web/cloud/set of causes and conditions leading up to—and surrounding—an eve...
In science—or at least in machine learning—we have a culture of rewarding positive results and omitting (or misinterpret...
I read about this idea in the context of Charlie Munger’s process for drawing good maps for pilots: Think about all th...
I didn't finish, but they helped a lot.
Working blocks are periods of focused work.01 Benefits # Getting started. You can do anything for twenty-five minutes. W...
Over many years of independent work during the PhD, I’ve pieced together components of a process for getting work done w...
“The mind is a great servant but a terrible master.” – proverb One tendency I struggle with is how to balance two mode...
I wrote about this quote in Hot, but I wanted a way to reference it later. When you’re new at something, you get excite...
createGraphics() makes a new <canvas> # I thought I had a bug with resizeCanvas() because a bunch of extra <can...
If you’re not a teacher, and you need to figure out how to do something challenging—like lose weight, reach a high depth...
Especially when inexperienced with a medium, it can be difficult to pick which creative ideas to pursue. If you just let...
The home base feeling is when you are comfortable enough with what’s going on that the idea of embarking on a new quest ...
“There are only two hard things in computer science: cache invalidation and naming things.” – Phil Karlton The word “s...
The garage01 is a new experiment (starting June 2021) with “working with the garage door up.” It’s inspired by Alex’s ev...
sep
17
2024
sep
05
2024
jan
05
2024
dec
29
2023
nov
17
2023
oct
10
2023
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