MathJax.Hub.Config({ CommonHTML: { scale: 105 } }); table.xyz { table-layout: fixed; border-collapse: collapse; margin-left:auto; margin-right:auto; } table.xyz th, table.xyz td { border: 1px solid black; } table.blueTable { border: 1px solid #1C6EA4; background-color:...
I was just in the washroom with the CEO of our company in the adjacent stall. We had an awkward eye contact while we both were washing hands. Should I address it with him directly ...? Firstly, I feel like it was his fault for coming to this washroom, this is mine. Ours I mean, the plebians'. Like, don't they have a separate hoity-toity one...
In the past few weeks, I’ve seen some blog posts of a very similar vein to my recent post Technoelitism and the IndieWeb Movement. It seems I’m not the only one with some critical thoughts about this movement and the goals it both claims to have and actually seems to express. I realized while surveying some of these posts that I actually had some...
There’s a common refrain in online discussions about software that “most people don’t use or need that, it’s just a niche that doesn’t matter.” As someone who works in user experience every day, I’m constantly surprised by the
Teens wrote secret binary messages in One Million Checkboxes. I found them.
I love to see this sort of thing. In fact, nothing makes me happier on the web than seeing something simplified and improved because of that simplification. This article demonstrates that beautifully and teaches you how to write some pretty dang solid CSS that is battle tested in the real world. What also makes me happy is accessibility was...
I love @pytest.mark.parametrize—so much so that I sometimes shoehorn my tests to fit into it. But the default style of writing tests with parametrize can quickly turn into an unreadable mess when the test complexity grows. For example: import pytest from math import atan2 def polarify(x: float, y: float) -> tuple[float, float]: r = (x**2 + y**2)...
free desktop-only browser game where you photograph bugs by resizing and moving the browser window #
Previously, we explored how coupling and cohesion are not separable concepts. When our software is cohesive, everything fits. Each part is shaped by its relationships. Together, they comprise an undirected graph, which we will call a structure. Each structure is an amplifier; by explaining one vertex, we begin to explain the others. Often, these...
Anthropic’s decision to publish Claude’s system prompts is a curious mix of transparency and marketing, as it attempts to position itself as the ethical choice in AI. While it’s refreshing to see some behind-the-scenes insight, one can’t help but wonder if this is just a clever way to distract from the fact that these models are still just...
Time is state Imagine I put an ordinary ticking quartz clock in an empty room. I walk in, and ten minutes later I walk out with two photograph prints.1 In the 1st one, the second hand is pointing at the top of the clock, in the 2nd it's pointing at the bottom. Are these two copies of the same photo, or are they two different pictures? There's...
Free/open source has been on my mind lately – more than usual. (FOSS or OSS for short, the distinction matters, a lot, but for the purposes of this post the two are similar enough to lump together.) This was triggered by reading a couple of posts the other day: Tara Tarakiyee’s Is the Open Source Bubble about to Burst?. Ben Werdmuller’s post that...
I love doing research. My first reaction to a gnarly problem is to try to discover everything I can about it and, crucially, to see how others have tackled it. It’s not just because other people’s work often means I have to do less of my own, but experiencing the plurality of expression that’s available out there i a thing of joy. For example, a...
As an entrepreneur who has experienced both venture capital-backed and bootstrapped startups, I'm often asked about the pros and cons of each approach. Recently, a fellow entrepreneur considering starting a new venture after leaving his job asked me how to choose between these two paths.My response?They're not as different as you might think.The...
Think with me for a moment. Pick a time you presented an idea to your boss. Do you remember your excitement and motivation?Now, recall how you felt when your boss suggested "improvements" to your idea, or worse, a better way to do it. Sucks, right?Deep inside, we know that unprompted feedback can have this effect on us: It can ruin our motivation and fun.Yet, we do this very thing at home.Your young daughter comes to you with a silly play in mind, and you...
Zach Leatherman Zach Leatherman is a builder for the web at is a builder for the web at Font AwesomeFont Awesome and the creator/maintainer of and the creator/maintainer of
MiniJinja: Learnings from Building a Template Engine in Rust
Given that I can't stop creating template engines, I figured I might write a bit about my learnings of creating MiniJinja which is an implementation of my Jinja2 template engine for Rust. Disclaimer: this post might be a bit more technical. There is a good chance you have come across Jinja2 templates before as they became quite common place in...
There are few technical decisions I regret more with Buttondown than the decision to combine the author-facing app, the subscriber-facing app, and the marketing site all under a single domain. Most technical decisions are reversible with sufficient grit and dedication; this one is not, because it requires customers to change their URLs and...
There are few technical decisions I regret more with Buttondown than the decision to combine the author-facing app, the subscriber-facing app, and the marketing site all under a single domain. Most technical decisions are reversible with sufficient grit and dedication; this one is not, because it requires customers to change their URLs and...
There are few technical decisions I regret more with Buttondown than the decision to combine the author-facing app, the subscriber-facing app, and the marketing site all under a single domain. Most technical decisions are reversible with sufficient grit and dedication; this one is not, because it requires customers to change their URLs and...
There's nothing glamorous about being a designer at a startup. It's a role that frequently values speed and pragmatism over going deep in the craft. It's not all big launches, viral tweets, building for happy paths, and clear-cut product requirements. However, it can be incredibly rewarding. The fun comes from being able to excel at learning new...
Given that I can't stop creating template engines, I figured I might write a bit about my learnings of creating MiniJinja which is an implementation of my Jinja2 template engine for Rust. Disclaimer: this post might be a bit more technical. There is a good chance you have come across Jinja2 templates before as they became quite common place in...
In Zig an array always has a compile-time length. The length of the array is part of the type, so a [4]u32 is a different type than a [5]u32. But in real-life code, the length that we need is often known only at runtime so we rely on dynamic allocations via allocator.alloc. In some cases the length isn't even known until after we're done adding...
I’m going to try to convince you to start a company — especially if you’re a Pivot.
Besides the obvious curiosity about what will happen to entry-level pricing, I’m curious to see if 16GB RAM as the new standard will translate in a stepwise shift in their (sometimes grating) incremental improvement approach across other product lines (like the iPad, of course). But it does feel like they could have done this a long while ago...
Barry Jones has written an excellent article on why story points are pointless. I believe his core arguments can be expressed more succinctly. In my reading of it, there are two of them: Effort estimation needs to be grounded in reality to be meaningful. Story points are – by design – separate from reality, and thus not meaningful. Within...
I’m excited to offer the next giveaway, 5 1-year subscriptions ($96 value each) for Obsidian Sync. Obisidan is an amazing tool that’s free to use, but if you want to sync and share your vaults, settings, and more, you’ll want to upgrade with Obsidian Sync. This giveaway is for a free year! From the developer: Obsidian Sync works in the...
I’m excited to offer the next giveaway, 5 1-year subscriptions ($96 value each) for Obsidian Sync. Obisidan is an amazing tool that’s free to use, but if you want to sync and share your vaults, settings, and more, you’ll want to upgrade with Obsidian Sync. This giveaway is for a free year! From the developer: Obsidian Sync works in the...
I’m excited to offer the next giveaway, 5 1-year subscriptions ($96 value each) for Obsidian Sync. Obisidan is an amazing tool that’s free to use, but if you want to sync and share your vaults, settings, and more, you’ll want to upgrade with Obsidian Sync. This giveaway is for a free year! From the developer: Obsidian Sync works in the...
I turned thirty-nine today: the start of the last 365 days of my youth, according to too many people who sent me a quick happy birthday message. As if I needed a reminder. Should I get myself a big bike next year? I don’t think the mid-life crisis will make a full frontal assault next year. Judging by the average life span of people close to me,...
In a recent internal meeting, Amazon Web Services CEO Matt Garman made a bold prediction: within two years, most developers might stop coding altogether, thanks to the rapid advancement of AI. This claim, while attention-grabbing, reveals a fundamental misunderstanding of the software development process and the critical role that human...
Implementing something like a compiler, there is the understanding that we want different representations of a program for different purposes. This is why we have stuff like a “control-flow graph” or “SSA form.” Some kinds of analyses and transformations are easier in more abstract representations that have thrown away certain information. But...
Implementing something like a compiler, there is the understanding that we want different representations of a program for different purposes. This is why we have stuff like a “control-flow graph” or “SSA form.” Some kinds of analyses and transformations are easier in more abstract representations that have thrown away certain information. But...
Positron - an upside-down and portable 3D printer I've been getting into 3D printing lately. I have an older Ender 3 V2 at home I bought during COVID. And in the past year I've acquired an Ender 3 S1, Bambu Labs P1S, and Prusa MK4. I also dove head-first into 3D CAD, and designed a number of small SBC cases or parts to help with...
Suppose you have two normal random variables, X and Y, and that the variance of X is less than the variance of Y. Let M be an equal mixture of X and Y. That is, to sample from M, you first chose X or Y with equal probability, then you choose a sample from the […] The post Variance matters more than mean in the extremes first appeared on John D....
Setting up a new computer can be a lot of work, but I've made it much simpler with Homebrew, a popular package manager. Creating a list of installed software As a general rule, I prefer to install all software on my Mac using Homebrew. I always try Homebrew first and only resort to downloading software directly from websites if it is not...
“TBM 308: No Unforced Errors - by John Cutler”. At times it feels like my career is nothing more than a series of unforced errors on my part, one after another, and then getting occasionally 😅 “Why JavaScript variables don’t always update” “Erika Hall Knows How to Fix Your Design Process (But You’re Probably…”. “I’ve been reading Behave by the...
As I mentioned in a few recent posts, I’ve been working on some significant work in coverage.py to take advantage of new capabilities in Python.Mark Shannon has been improving the sys.monitoring API so that branch coverage can be done with low overhead. I want to take advantage of that in coverage.py, but I needed to do some refactoring work...
Here's an unordered list of symptoms that might indicate more profound issues with an organizational culture - one that's preventing it from delivering on its true potential. You're "doing agile" by using some sort of iterative development pattern, and have gained enough efficiencies compared to any other way of working that you've ceased trying...
I can’t believe Piccalilli links have been here since January and I still haven’t plugged the book I co-wrote with Heydon. We first published the book 5 years ago and it’s now in its 3rd addition. I’m biased, sure, but we still religiously use these layouts to build stunning websites over at Set Studio. In fact, these layouts are the first thing...
The amazing events that let us temporarily escape from our lives, and how to deal with the emotional crash that comes afterward.
Why do governments go after companies and executives of services of more weakly encrypted tools? It’s very hard, this early, to pierce through what’s going on with the French authorities’ arrest of Pavel Durov, the CEO of Telegram — but that doesn’t stop people from having pet theories. Was it retaliation from the US and […]
We spent $85,000 for buttondown.com in April; this was the biggest capital expenditure I've ever made, and though it was coming from cash flow generated by Buttondown rather than my own checking account it was by rough estimation the largest non-house purchase I've ever made. As of August, we're officially migrated over from buttondown.com to...
We spent $85,000 for buttondown.com in April; this was the biggest capital expenditure I've ever made, and though it was coming from cash flow generated by Buttondown rather than my own checking account it was by rough estimation the largest non-house purchase I've ever made. As of August, we're officially migrated over from buttondown.email to...
I. I always thought of myself as weird. Well, not really. But when I did start thinking of myself as weird, my life improved a lot. As a kid, I struggled to conform to other’s expectations of normalcy. Everyone played fútbol during school recess, but I hated it. One of the few times I ventured to the field, a classmate accidentally kicked the...
No time to read the whole post? I get it. Here’s the quick and dirty resource list to get you straight to the good stuff: (source: Wale Akinfaderin) Disclaimer: These aren’t necessarily the best resources on the subject, nor have I mastered all of them. Instead, they’re the ones I’ve personally tried and liked or have been recommended by credible...
About six months ago, I decided to switch from marketing to coding. To make the switch, I would need to map the territory. After binge-watching countless YouTube videos and soaking in all the advice I could find, I decided to read a book called Machine Learning with PyTorch and Scikit-Learn. But soon after, I hit a wall. I realized that to truly...
We spent $85,000 for buttondown.com in April; this was the biggest capital expenditure I've ever made, and though it was coming from cash flow generated by Buttondown rather than my own checking account it was by rough estimation the largest non-house purchase I've ever made. As of August, we're officially migrated over from buttondown.email to...
Look, I'm sorry, but if the docs say not to do something that's like catnip. Then I just have to do it. So when I saw that the Typesense docs say not to use it as a primary datastore? Well well well, that's what we'll have to do. I spent a little bit of time figuring out what a bad but plausible use-case would be. The answer is: a chat app. Most...
Allison Johnson writing for The Verge: European iPhones are more fun nowWhining about stuff is a treasured American pastime, so allow me to indulge: the iPhone is more fun in Europe now, and it’s not fair.And Federico Viticci linking to the above piece: The DMA Version
The week turned out to be far from auspicious, and I ended up spending an unwholesome chunk of it pondering a recent setback that is still too fresh in my mind. Getting back into AI stuff seems frivolous in comparison, so I got back into reading again, with minimal more electronics stuff and hardware maintenance (continued heat is still a problem...
Good evening. Tonight, notes on things I have learned recently while hacking on the Whippet GC library.service updateFor some time now, the name Whippet has referred to three things. Firstly, it is the project as a whole, consisting of an include-only garbage collection library containing a compile-time configurable choice of specific collector...
On a sweltering August evening, I gathered a bunch of friends for dinner. It had been a while since we'd met, so there was a backlog of updates and stories to catch up on. We settled in and placed our orders. I opted for a cottage cheese steak. As the food arrived, we traded "gossip" - interesting stories from our recent past, ranging from mildly...