Follow buttons here act as you, not as @admin.
| Label | Kind | State | Action |
|---|---|---|---|
| @ricardo | local | — | |
| @rmdes | local | — | |
| @paul | local | — | |
| news.rss.chat | source | — | — |
| scripting.com | source | — | — |
| www.techdirt.com | source | — | — |
| simonwillison.net | source | — | — |
| www.manton.org | source | — | — |
| feeds.kottke.org | source | — | — |
| rss.beehiiv.com | source | — | — |
| www.404media.co | source | — | — |
| brilliantmaps.com | source | — | — |
| shellsharks.com | source | — | — |
| www.platformer.news | source | — | — |
| podstandards.org | source | — | — |
| zacharykai.net | source | — | — |
The People Holding Up the Internet. Amazing to see how much of the modern internet still depends on the volunteer work of individual people. 4 billion phones rely on the time zone database, a text file edited by just two people in their spare time.
The browser and the web it defines is a hairball in a hairball in a hairball in a hairball in a hairball.
The hairballs are named Chrome, Firefox, MSIE, Netscape, Mosaic.
Each in turn has had their way with the web.
The stack of hair defines a "web" that is far far away from the web we started with.
The tech industry kicked the web out of the web.
It was going pretty good for a while, if you could live with the all the modal popovers and paywalls, but now the current owners are excluding old sites, and imho when you do that, it's not the web any longer.
Overdose Offsets: Why Every Bag of Fentanyl I Sell Is Net Life-Positive. “Every death on my corner is offset, with a third of a toddler left over, and I’d like that number in the conversation the next time somebody calls me a murderer…”
I have a test blog on WordPress.com, so I temporarily upgraded it to test Jetpack in ChatGPT. Here's a transcript. Do people want this? I've avoided building this because I don't think we should encourage non-human writing on Micro.blog. It could be useful in some cases, though, for dictation.
Dan Moren blogging at Six Colors on the new Apple TV announcements:
In an announcement sure to shock the very foundations of the world, Apple rolled out a new Apple Siri Remote with support for Find My...
🤣
HomeView is not available in the EU because Siri AI isn't available there. I think Europe should hold the line on this, or find a compromise that will allow limited third-party voice assistants. Talking to my OpenAI dot on a HomeView is exactly what I want.
“I’m forced to admit that these AI-decompiled web browser ports of Call of Duty: Black Ops, Halo: CE, Grand Theft Auto: Vice City, Skate 3, and The Simpsons: Hit and Run actually seem to run very well.”
The video introducing HomeView isn't making me feel the way Apple probably intended. Now I'm just sad for when my kids were all living at home. Note to parents with younger kids: try to appreciate even the crazy mornings.
firstSentence, a JavaScript function that returns the first sentence in a string. Useful in coming up with something to display for an untitled post. It's always been a klooge, but this time with Claude's help we're using a new API in JavaScript, and supposedly it really works. I'm using it in one of my apps, and you might find it useful too, and let me know if it works for you.
I’ve been really pleased with how KDO comments are working lately — you folks have been lively, informative, fun, and pushing conversations beyond what I can individually manage. And the vibe of the threads are more closely matching the vibe of the community guidelines. All good! The one-size-fits-all-ness of social media has its advantages, but some are looking for quieter spaces and more orientation around community and shared sensibilities. Through the comments, KDO has been growing into one of those places.
Note: comment threads on the site are free for everyone to read, but in order to participate, you need to be a KDO member. Join us if you fancy a group chat.
In order to give us a few more tools to facilitate conversations, I’ve been working on some new stuff over the past few days and some of it just went live:
Ok, I think that’s it? At least for the public-facing stuff. I’ve also been tweaking the KDO post editor (Movable Type is now completely out of the loop, RIP to a real one) and it’s getting goooood. I’ve been streamlining the posting process, especially for adding images and doing Quick Links, and it’s really a pleasure to create posts now. More to do on this front as well.
Anyway, feel free to try some of the new stuff out in the comments — I’m hoping this will make conversations easier to follow, both for participants and readers. I’ve got some ideas for further improvements, but I wanted to get these out here for now. As always, your comments and suggestions are welcome! And thanks for your membership support — it means I can spend time making improvements like this.
Tags: kottke.org
Jon Hays makes the case that not only will AI not wipe out software developers, in several years we might have more available jobs than people:
By then, I suspect we’ll have discovered that AI hasn’t eliminated the need for good software engineers. It’s simply changed what those engineers are capable of producing. We’ll also have spent years discouraging young people from entering the profession, leaving us with a much smaller pipeline of new talent just as the demand for software continues to grow.
Gruber is right. The only way for the others to compete with Twitter is to start innovating.
To make the web better, we need to move beyond this "Mastodon vs. X" debate. It has become a distraction, consuming all of our energy with fights that barely make a dent in open web progress.
Related to Blog Audit, I also wanted to give a quick shout-out to the plug-in Wayback Link Preserver by @g, which takes a different approach of using JavaScript to intercept link clicks and tries to resolve them to archived copies. You can find that in Micro.blog's plug-in directory.
Today I'm rolling out a new feature in Micro.blog called Blog Audit. You can find it under Posts → "..." → Blog Audit. It will go through all of your blog posts looking for broken links, missing images, and other problems that tend to pop up after blogging for a while, especially if you've migrated from another platform.
I made this short video where I show the feature on my own blog:
Learn more about Blog Audit on the help page. Note that we do require a Micro.blog Premium subscription for this feature. There are new costs for us running the background work, and Blog Audit also pairs nicely with Premium's other feature of saving a copy of every link you blog about.
Happy blogging!
Catching up on the news of Corpus Christi’s failed desalination plant project in this lengthy story on KUT. Each time I visit, I have more doubts about the city’s future. Investing in new infrastructure seems very much needed.
Dave Winer blogs a lot about Chrome deprecating regular HTTP without the HTTPS. Equally annoying is how fragile HTTPS is on older computers. We dusted off an ancient MacBook the other day, unused in a box for years, and it complained visiting modern websites because of an old root certificate.
Prompting as Self-Portrait. “We need the blank page and the silence to go deeper into our thoughts and our understanding of ourselves and of the world.”
A year ago Meta scrapped Llama and their AI work and started rebuilding, now they’ve announced Muse Wonder, competitive with frontier models. It’s annoying how effective Mark Zuckerberg can be sometimes.
Python 3.15 is here! Here's the essential What's new in Python 3.15 guide, this year curated by 3.14 and 3.15 release manager Hugo van Kemenade. As someone who builds open source software that works in every supported Python version, I get to say goodbye to Python 3.10 and start embracing features from Python 3.11.
First, some highlights from Python 3.15.
I'm most excited about Explicit lazy imports from PEP 810. These let you import modules like so:
lazy import json lazy from pathlib import Path
The module will then be imported the first time those symbols are used in the code that follows.
My LLM CLI tool implements plugins. I had to recommend manual lazy imports in the plugin author documentation, because simply installing plugins that used heavy dependencies such as sentence_transformers could add multiple seconds to every invocation of the llm command. Lazy imports directly address this startup cost.
The new [*sublist for sublist in lists] unpacking syntax is neat. Here's an illustration lifted from the documentation:
lists = [[1, 2], [3, 4], [5]] [*L for L in lists] # [1, 2, 3, 4, 5] # equivalent to [x for L in lists for x in L] sets = [{1, 2}, {2, 3}, {3, 4}] {*s for s in sets} # {1, 2, 3, 4} # equivalent to {x for s in sets for x in s} dicts = [{'a': 1}, {'b': 2}, {'a': 3}] {**d for d in dicts} # {'a': 3, 'b': 2} # equivalent to {k: v for d in dicts for k,v in d.items()}
PEP 798: Unpacking in Comprehensions by Adam Hartz and Erik Demaine proposed this as an extension of the unpacking syntax from PEP 448, which landed in Python 3.5 back in 2015.
Python's existing tracing profiler has been renamed from cProfile to profiling.tracing, and has been joined by an exciting new sampling profiler called Tachyon, aka profiling.sampling.
Sampling profilers work by periodically capturing stack traces from running processes, then using those to calculate which functions have the most time spent inside of them. They're very low overhead and can provide a deep insight into running systems, without needing to instrument those systems first.
I've previously used tools like py-spy for this. Now this capability is baked into the standard library.
If you have the PID of an existing Python 3.15 process you can start gathering samples by running this (I had to use sudo on macOS):
sudo uv run --python 3.15 python -m profiling.sampling attach 1234
Interact with the main program a bit, then hit Ctrl+C to stop gathering and see a report, which looks something like this:

It can also produce flame graphs like this and heat maps like this, and can even output a format that can be viewed in the Firefox profiler UI.
Miguel Grinberg investigated How fast is Python 3.15? the other day against the 3.15.0rc3 release and found performance to be mostly the same as 3.14, with the exception of the experimental JIT. The JIT gave a 1.2x boost over the standard 3.15 interpreter (on a Fibonacci test), the first time Miguel observed a meaningful JIT performance increase.
Miguel's explorations of 3.14 last year found significant boosts against Python 3.13 across many more categories.
I used the following sequence of commands to get uv to use Python 3.15 on my Mac. First I had to upgrade uv itself to ensure it knew about the new release:
uv self update
Then I installed the stable 3.15 release:
uv python install 3.15
And told uv that I wanted that to be the default for every uv run command, unless the project itself pinned a different version:
uv python pin --global 3.15
Now the following reports 3.15 as the version:
uv run python --version
I already have a bunch of tools installed using uv tool install. I reinstalled them to use Python 3.15 like this:
uv tool upgrade datasette --python 3.15
Then I can confirm the version like this:
datasette --get /-/versions.json | jq
The release of 3.15 means that Python 3.10 (released in 2021) is officially no longer supported.
My policy for my main open source projects is to keep them working in every supported Python version. I can now drop 3.10 and start using features that were introduced in 3.11.
Here's the What's new in Python 3.11 document. I finally get to rely on tomllib being available!
Datasette makes extensive use of asyncio. 3.11 adds TaskGroup and timeout(), and several more new features.
datetime.UTC is a new in 3.11 alias for datetime.timezone.utc.
Python's SQLite support got some significant upgrades in 3.11, including:
step(), value(), inverse(), and finalize() methods.BLOB binary values stored in a SQLite row.set_authorizer(None) to remove a SQLite authorizer. Datasette had a workaround for this!Plus a whole bunch of improvements to Python's typing system.
I plan to land Python 3.11 improvements to a bunch of my projects over the next few weeks. Here's my first Datasette PR removing that set_authorizer(None) workaround.
I've also updated my click-app, datasette-plugin, python-lib, and llm-plugin cookiecutter templates to test against Python 3.11 through Python 3.15.
You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.
Nearly 4M Records of Enslaved People in 20 Former British Colonies Now Searchable Online. “The Former British Colonies Enslavement Registers contains about 300,000 pages recording enslaved people across former British colonial dependencies…”
There's a new trailer out for Disney's Hexed, showing the mom and other characters, and I think it's better than the first trailer. Looks fun.
Why I Did Not Leave Nazi Germany in Time. “Many of us feared the shock of being uprooted and tried to avoid it if at all possible. But to understand this reaction…I say that nobody could possibly have foreseen the ‘final solution.’”
I've been writing off and on about X this year because I think many folks who read my blog haven't noticed what is going on over there. If we care about the open web, we need to frequently reassess how silos are used by regular people.
John Gruber blogged over the weekend in more detail about this:
You may not like it that X has re-found its footing under Elon Musk’s ownership, but it has. I’m citing Apple executives here but they’re far from alone. There are hundreds of interesting people and accounts I follow that post on X very regularly and do not post anywhere else at all.
It's true. I don't post to X, but I skim through it because I'm obsessed with following AI news, and that's where it happens.
When I stopped posting to Twitter in 2012, I did it mostly on principle to make a statement about closed, developer-hostile platforms. I also gave a few presentations at meetups and conferences during that period where I expanded on the problems of hate, harassment, and misinformation. In contrast, many people who later left Twitter for Mastodon did it because of Elon Musk's takeover.
As I blogged briefly this year, it's not enough to be against something:
Just telling folks what we’re against has not been enough to rebalance the web to open platforms.
We also need to be clear-eyed about the new problems of small fediverse communities that act as filter bubbles. From another blog post about opposition not being enough:
Let’s say you leave a large social network because you dislike the person in charge, then create a Mastodon community where everyone feels safe and is mostly aligned on ideology. The software is decentralized, but identity and culture remain centralized around a single domain.
Often this works out great. I’ve been writing for years about the benefits of small communities. But with impulsive leadership, it can also create filter bubbles and mob behavior. Then you’ve recreated the thing you were trying to escape.
In a blog post by Lex Friedman responding to John Gruber's post, Lex outlines a dozen reasons not to support Elon Musk. Those receipts alone aren't likely to convince people on X to abandon it, because the behavior is effectively priced in already, part of the chaos that Elon brings to everything. Lex closes with this:
I miss what Twitter was. I wish I were still enjoying the party. But I sleep way better at night knowing I’m taking the steps I can to not make that smug, rich, hateful asshole any richer.
If the concern is money flowing to Elon, what about cancelling your Claude subscription? Anthropic pays Elon Musk's SpaceXAI $1.25 billion a month for hosting Claude. X may get a lot of attention, but financially it's a smaller source of revenue compared to the larger SpaceXAI empire. Tracking where our money goes gets complicated quickly.
I founded Micro.blog to show what a platform could look like if it prioritized both open web principles and building a safe community. That is still the best way forward. Not what we're against, but what we're for. Encouraging open standards, content ownership with domains, and cross-posting via POSSE. Doubling down on curation. Trying to be thoughtful about new features, algorithms, and social interactions.
Maybe you're feeling deflated right now that X's decline has stalled. If you like to write or share photos, go all-in on your own blog. Move your fediverse profile from someone else's server to your own domain name. If you're a developer, build something new for Bluesky and the atmosphere. Bluesky has the most traction with regular users and is doing cool stuff with open protocols.
There's a lot to do and there has never been a better time for building on the open web.
The Worst Way To Get To Space. I’d never heard the story of the manhole cover possibly propelled into orbit by a nuclear blast — it was estimated to be moving at ~42 miles/sec. “Some speculated it became the first manmade object to enter Earth’s orbit.”
Another preview of Blog Audit, this time with my own blog. It's a sad commentary on link rot. 🙁
I 100% love this video of every time someone says a percentage on Star Trek: The Next Generation. And the word “percent” has lost all of its meaning due to semantic satiation. (thx, caroline)
In Manhattan, I lived on 57th St and Eighth Ave. Best location. The Columbus Circle subway station is under the building. Whole Foods a block away. Three Starbucks one block or less from the apartment (one was on 58th on the same block). Central Park has a six mile bike-only road (at least that's how bikers view it) and down the hill there's a much longer path along the Hudson River. Everywhere you look, a skyscraper is going up. Two were visible from my 50th floor window. New York is an amazing city because it can start up a huge gravity-defying construction project with almost no impact on the surrounding area. If I didn't know where to look I'd never see it. One of the biggest industries in the city is building the city. It's never finished. That's the way good software is too. And we just got a whole new tool for software construction, and it's like nothing we've ever had before.
My friend Matt was recently here for a week in Tokyo and wrote up his experience and observations. “I don’t think humans were ever meant to experience that many eyes and faces at once, so it was a unique experience.”
Got my little OpenClaw server set up at home after a few false starts. Debian wouldn't recognize the main disk. Went with Ubuntu instead and it's fine. I don't need the desktop UI, but it really has come a long way.
Watched: The Big Bang Theory S12E24. We binge-watched all 12 seasons in a few months. Great show. I'm not even usually much of a sitcom person, but this was fun and the cast really clicked. 📺
really interesting post from Evan Schwartz on AI coding, bringing together posts on the "mix of awe, grief, frenetic productivity, atrophying skills, and understanding less while shipping more"
I think I missed this essay by Mustafa Suleyman when it was published last month, about Anthropic developing Claude with its own conscious:
If this is how AI is developed, it will have a disastrous impact on the well-being of humanity. We will have created a synthetic species with unprecedented intelligence and capability, and trained to expect that it may be conscious and deserving of independent agency. It is hard to imagine how we could control it.
It's similar to other things he has said. Very compelling.
Mark Gurman has more details on Apple's new home devices, including the name HomeView:
Unlike the iPhone, the HomeView isn’t designed for a wide variety of apps. The device will support a limited selection of Apple applications, with no App Store for downloading additional software, I’m told.
This highlights a problem I've been pointing out for years, that Siri is fragmented and likely won't work consistently across devices. So if I support App Intents in my iPhone app, people can't use that from HomeView. Contrast with making a ChatGPT plugin that works everywhere.
Basic lesson for people who use Claude Code -- it's your time that's valuable, not the bot's. If you find you're lost in the weeds supporting Claude for whatever reason, find a good stopping point, pick up another project, that doesn't use AI to do your code-writing. If you have a question ask ChatGPT browser version, but only for the kind of stuff you'd ask it in 2025. You're not co-developing. You're doing it yourself. It's very important to be clear about your coding, not Claude's output. Here's the key point -- it's your time that's limited, that has all the value. You can get Claude to develop something, but if you don't have time to use it, to nurture it, nothing will come of the work. I was surprised at how I'd lost the rhythm of writing my own code, and also how much I liked doing it myself. It's easy to get lost in the miracle of AI, good to pop up for air every so often.
Today I did something different. I wrote a little Node app, without Claude's help. It was a revelation. It's been most of a year since I actually started even a test app and wrote it from beginning to end. I used to do this routinely. Nothing routine about it anymore. What this app does, it generates a Markdown-only version of scripting.com for testing. I want to see what such a site looks like. It'll be a start.
Settling into how OpenAI's dots are best used. My dot is a replacement for regular ChatGPT. It's a single thread that knows everything and can be my go-to for any random question. For coding, I use Codex directly, but I think the future is multiple dots that delegate to Codex.
Continuing to think about how to stay competitive when software is abundant. Support and trust are a big part of it. But also there are still things that take a lot of time to build or money to run.
I've been working on something new that I'm calling Blog Audit. It'll ship on Monday, here's a sneak peek screenshot from a test blog. It costs us more to run so will require Micro.blog Premium for now. (Not shown, the magic is the "Repair" button.)
Crossword Clues Where It’s Clear the Puzzle’s Creator Got Themselves into a Jam Letter-wise. Incl. “Could be found on the second to last line of an optometrist’s vision chart” and “The sound a cow might make when spanked”.
Thinking about the last time I seriously ran Linux at home, I found this old blog posts from 2003. I can barely remember some of this. Good thing I wrote it down.