
I wanted to thank all of you before I launch into yesterday’s shenanigans. I’ve been doing this whole “blogging” thing for a bit, but never really done a “live blog” where I talk about what I’m doing. Most of you seem to be enjoying it and letting me know, which means a lot. I’d been trying to be less cynical and write about things that make me happy instead of angry, so I’m glad this is resonating. Arigato!
Yesterday was our first full day in Nagoya, and my first ever. We d...
Today, some more words on memory management, on the practicalities of a
system with conservatively-traced references. The context is that I have finally started banging
Whippet into
Guile , initially in a configuration that
continues to use the conservative Boehm-Demers-Weiser (BDW) collector
behind the scene. In that way I can incrementally migrate over all of
the uses of the BDW API in Guile to use Whippet API instead, and then if
all goes well, I should be able to switch Whippet to use an...
harman phoenix kinda rules actually
Olympus OM-20, Zuiko 200mm f/4, Harman Phoenix 200
harman phoenix kinda rules actually
Olympus OM-20, Zuiko 200mm f/4, Harman Phoenix 200
harman phoenix kinda rules actually
Olympus OM-20, Zuiko 200mm f/4, Harman Phoenix 200
Olympus OM-20, Zuiko 200mm f/4, Harman Phoenix 200

I’ve been bragging about my website software for years! For… whew, it’s been 5 years!
I didn't want to make a CMS! I did it out of spite!
I’ve been teasing folks about the cool things I did from the beginning — here’s
all the articles and series I’ve written that mention it:
2020: A new website
2021: Don’t shell out!
2022: Updating fasterthanli.me
2024: Face cams: the missing guide
2024: State of the fasterthanlime
...
There's No Escape!
Programming Emacs Vim
Posted on 2025-04-23
If you’re not already at the point where all your little AI agents are churning
out code for you — well, I guess it’s true if you’re extensively prompting via
text too — chances are you’re spending a significant time bashing on your
keyboards still?
Thought so!
This is a short post on the very niche topic of how I exit back to <NORMAL>
mode in the misc vim emulations I us...

I've recently been playing Blue Prince , which is a great time if you are a fan of puzzle games like Return of the Obra Dinn or Outer Wilds and also a fan of roguelike games like Slay the Spire.
One of the game's rooms, the Parlor, features a logic puzzle that is different on each run. In this post we'll be doing some modelling and analysis of these puzzles. Some people might consider that a spoiler!
In the parlor, there are three boxes, a blue box, a white box, and a black box. Each box ma...
Against Horizontal Scroll Apr 22, 2025
What’s in common between these two blog posts (pardon me, my fellow crustaceans of lobster variety)?
They both have horizontal scroll on mobile! Horizontal scroll is very distracting – when you scroll
vertically with your thumb, you necessarily scroll horizontally as well. Any amount of horizontal
scroll clips the left edge of the screen, chopping off the beginning of every sentence!
This is a hard problem to fix, or at least I do...
Block non-human crawlers with lighttpd
2025-04-20 19:05
Recently, I've put a copy of some ZIM files online with kiwix-server. I posted the url of this site on the Fediverse and, a few days later, the little server was a bit overloaded. The logs showed that the site was being crawled by search engines and AI training bots. There was no reason to let them. A robots.txt file calmed some, but not others.
Analysing user agents and IP addresses is not the answer, because, everything is done to...
My $6k Advance as a Self-Published Technical Author
mtlynch.io
I just received $5,947 in advance sales for my first technical book, even though it’s only 25% complete, and I’m self-publishing it. The book is called Refactoring English , and it’s a guide for software developers to improve their writing.
In March, I ran a three-week pre-sale for the book on Kickstarter . The pre-sale raised $6,551 from 191 customers. After Kickstarter’s fees, I get $5,946.92, or 91% of the total.
P...
This is the 87th edition of People and Blogs , the series where I ask interesting people to talk about themselves and their blogs. Today we have Frills and her blog, frills.dev
To follow this series subscribe to the newsletter . A new interview will land in your inbox every Friday. Not a fan of newsletters? No problem! You can read the interviews here on the blog or you can subscribe to the RSS feed .
If you're enjoying the People and Blogs series and you want to see it grow, consider su...
Right after the election I wrote a post predicting what would happen to higher education under Trump, most of which is coming true, but I had a massive failure of imagination missing the direct attacks on major universities. I won't detail all the challenges to higher ed, which change daily with every new executive order and court ruling. The Chronicle has a good tracker of these changes. But often lost in all the news are the actual people who aren't making the news hurt by these actions, ...
Gaussian noise is data that is added to a signal in order to introduce a distortion. The data follows a Gaussian/Normal distribution. It's a well understood distribution often used to introduce noise to training data as an augmentation technique. Generating noise to add to a signal is pretty straight forward using numpy. x = np.arange(0, 10, 0.1)
y = np.sin(x)
mean = 0
std_dev = 0.2
size = len(y)
noise = np.random.normal(mean, std_dev, size) Plotting this yields a nice visualization plt.plot(x,...

So. Many. Interesting. Links. Not got time for all this? I’ve marked 🔥 for my top reads of the month :)
Data Engineering
🔥 Data Engineering: Now with 30% More Bullshit
🔥 A good article from Andrew Jones on the concept of "shift left"
Data Model Smells
A love letter to the CSV format
The 2025 State of Analytics Engineering Report
Useful writeup from Anders Swanson on [Iceberg, the Iceberg REST Catalog Specification, and more
Georg...

A couple of months ago, my colleague Shayan Mohanty
published a technical overview of the series of papers describing
the deepseek AI models. He's now gone through that article, adding
more explanations to make it more digestible for those of us who don't
have a background in building these kinds of models.
more… A couple of months ago, my colleague Shayan Mohanty
published a technical overview of the series of papers describing
the deepseek AI m...
I've been a developer, a manager, a cofounder, and now I'm a developer
again. I ran away from each position until being a founder because I
felt like I was limited by what I was allowed to do.
But I reached an enlightment of sorts during my career progression:
that everyone around me was dying for someone to pick things up, for
employees to show engagement and agency.
We think of our titles as our limits. We're quick to say and believe,
"that isn't my job". While in reality titles reflect th...

Name: Nikhil Daimari Location: Assam, India Occupation: Graphic Designer Room size: 12 m² (14×9 ft) Cost of setup: $2K Social media: Instagram Hello! Tell us a bit about yourself I’m a 26-year-old graphic designer working full-time at a digital marketing agency. Beyond my 9 to 5, I take on freelance projects focused on 3D modelling and environment creation. This creative journey wasn’t my original path, but the COVID era pushed me to explore something new. That period became a buffe...

I used part three (here's parts one and two ) of Dave Guarino's series on evaluating how well LLMs can answer questions about SNAP (aka food stamps) as an excuse to explore Promptfoo , an LLM eval tool.
SNAP (Supplemental Nutrition Assistance Program) is a very high stakes domain to be operating in, but also one where LLM-powered question answering can provide very material value to people who need help navigating the notoriously opaque system.
Dave's evals focus on eligibility questio...

Today’s issue will be a little shorter than usual because Ben and Andrew are both in SF this week for SF Climate Week, talking about deeptech, space, and climate. If you’re around, f eel free to reach out !
...
📝 22 April 2025 at 13:35 - The can is open and there are worms everywhere buds...
kevquirk.com
The can is open and there are worms everywhere. 🤦🏼♂️🪱🪱🪱
(buds were free on an offer, I didn't really need them as my Sony ones are fine.)
Thanks for reading this post via RSS. RSS is great, and you're great for using it. ❤️
Reply to this post by email ●
Sign my guestbook
The ...
How cheap can it pull CO2 from the air? ...
Read More
How cheap can it pull CO2 from the air? ...
Read More
How cheap can it pull CO2 from the air? ...
... Read More Read More
Lately I've been experimenting with map algorithms. I have three starting points:
Generator
Elevation
Biomes
Rivers
Editable?
mapgen1
noise
noise
down
no
mapgen2
distance field
distance field
down
no
mapgen4
noise
simulation
up
yes
(What happened to mapgen3? It was a failure. I had tried to change the programming language, data structures, and algorithms at the same time. I had better luck changing ...
Moon Monday #222: How China navigated failure to nail down lunar navigation success
jatan.space
I’m thrilled to welcome Catalyx Space as the latest sponsor of my Moon Monday blog+newsletter. 🌗 Having raised $1.7 million in pre-seed funding, Catalyx is building fully integrated autonomous labs and re-entry capsules for microgravity and hypersonic sci-tech studies. The company is hiring for multiple positions . 🚀 Despite odds, China achieves an Earth-Moon navigation link Top left: Illustration of the attached DRO-A and DRO-B small lunar satellites; Bottom left: A schema...
By default, Go copies values when you pass them around. But sometimes, that can be
undesirable. For example, if you accidentally copy a mutex and multiple goroutines work on
separate instances of the lock, they won’t be properly synchronized. In those cases, passing
a pointer to the lock avoids the copy and works as expected.
Take this example: passing a sync.WaitGroup by value will break things in subtle ways:
func f ( wg sync . WaitGroup ) {
// ... do something with the wa...