Commercial Space Federation (CSF) Welcomes Two New Members

Commercial Space Federation 20th anniversary logo

September 21, 2026— Washington, D.C.—The Commercial Space Federation (CSF) is pleased to welcome ORBITInsure and Renaissance Strategic Advisors (RSA) as its newest members. ORBITInsure joins CSF as a Space Supply […]

The post Commercial Space Federation (CSF) Welcomes Two New Members appeared first on SpaceNews.

When does a nebula look like a comet? When does a nebula look like a comet?


Banning self-recursive improvement in AI models?

Some people are suggesting this, including Ezra Klein.

I do not understand how it is supposed to work.  Put aside the issue of foregone innovations, let us say I seek to access an AI from overseas.  Am I allowed to visit their website?  So many sites have AI behind them, including Chinese open source AI.  Do all of those sites get banned?  And how?  Firewall imposed on Americans?  And we cannot put the good open source models on our hard drives?  How enforced?  Does the government have to read the creation logs of the model (how can they?), and then decide whether I can use that model or not?

What if Anthropic licenses its IP to an independent subsidiary in the Cayman Islands and they keep on using code to improve the AI?  Or maybe only foreign nations are allowed to have the best models and the really fast rates of improvement?  How are multinationals supposed to operate across borders?  (Presumably you cannot just use the RSI of your foreign affiliate, but then the whole MNC is crippled and eventually rendered uncompetitive?)  How are we to keep “AI sovereignty” for Americans?

Does this whole thing mean that regular companies can use AI to write code, but the main labs cannot?  Solve for the equilibrium there.  Or the whole code writing function goes away for everybody?

I do not find this to be a workable idea.  I think it is “people wanting to do something that sounds reasonable and less scary,” without thinking through the practical details.  I have made a related point before, but one does best with AI policy when you start with the stuff that otherwise you might put into your last two or three paragraphs of an essay (“It remains to be seen how…but we are all human beings and surely we should not give up hope…”).  Even if you believe in a deal with China, and I do not, we (and others) now know competitors can catch up more quickly than we had thought, at least if they think they have a chance of winning.  They might even buy some space compute from Elon.

C’mon people, I know for many of you this is a difficult take to swallow, because it feels like “we don’t care enough” if we do not take some dramatic steps.  Nonetheless the reality is that, a long time ago, we made a whole series of decisions that imply…we have no other choice than to just see this one through and get it more or less right.  The longer we deny that truth, the harder it will be for all of us.

The post Banning self-recursive improvement in AI models? appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

An Epic View of the Seasons

Four full-disk images of Earth are arranged in a two-by-two grid. The December image on the upper left shows the South America centered with Antarctica visible. The June image features parts of North America and Arctic sea ice that were not visible in December. The March and September images have South America and North America in more intermediate positions.
Images from NASA’s EPIC (Earth Polychromatic Imaging Camera) aboard the NOAA mission DSCOVR (Deep Space Climate Observatory) show Earth on the December and June solstices and the March and September equinoxes, illustrating how the tilt of Earth’s axis shifts the continent’s apparent positions through the year.
NASA Earth Observatory/Michala Garrison

Most kids learn in elementary school that the seasons are caused by Earth rotating on a tilted axis during its yearly orbit around the Sun. The substantial tilt, about 23.5 degrees, is thought to be the result of an ancient planetary body, Theia, smashing into Earth about 4.5 billion years ago, in the same cataclysmic collision that formed the Moon.

To visualize why Earth has seasons, imagine the planet as a spinning top tilted to one side. Around the June solstice, the Northern Hemisphere leans toward the Sun, bringing more direct sunlight and longer days. Around the December solstice, the Southern Hemisphere does the same. That’s why June ushers in summer and warm weather in the Northern Hemisphere, while December does so in the Southern Hemisphere.

The March and September equinoxes serve as the midpoints between these two seasonal extremes. On those days, the terminator—the boundary between the sunlit and dark sides of Earth—runs directly through both poles. As a result, the Northern and Southern Hemispheres receive almost the same amount of sunlight, and day and night are nearly equal in length.

What do the seasons look like from about one million miles away? That’s the view provided by NASA’s EPIC (Earth Polychromatic Imaging Camera) aboard the NOAA mission DSCOVR (Deep Space Climate Observatory). By maintaining an orbit that puts the spacecraft between the Sun and Earth roughly 1.6 million kilometers (1 million miles) from Earth, the camera has a nearly continuous view of the sunlit hemisphere. As Earth spins during the course of a day, EPIC captures a full-disk image of the planet’s sunlit face every few hours.

The four images above, taken at roughly the same time of day, show how EPIC’s view of the Western Hemisphere changes over the year, from the December solstice (upper left) to the March equinox (upper right), June solstice (lower left), and September equinox (lower right). The most striking difference is between the two solstices. In December, South America lies near the center of the disk and much of Antarctica is visible, while North America is partially out of view. In June, Earth’s tilt means the situation is reversed: the Northern Hemisphere and North America are more centered, Arctic sea ice comes into view, South America is offset, and Antarctica is completely out of view.

There are other notable differences among the four images. Earth looks slightly smaller during the March and September equinoxes, for instance. That’s because DSCOVR was tens of thousands of miles farther away from Earth on those dates than on the solstices. On December 21, 2023, DSCOVR was 1,447,327 kilometers (899,327 miles) from Earth compared with 1,561,901 kilometers (970,520 miles) on September 22, 2024.

The slight difference in Earth’s apparent size has nothing to do with Earth’s tilt. Instead, it occurs because DSCOVR follows a looping, three-dimensional path called a Lissajous orbit to keep the spacecraft near Lagrange point 1, where the combined gravitational pull of the Sun and Earth and the centrifugal pull of the satellite balance out, making it easier for engineers to maintain the spacecraft’s position without using much fuel. DSCOVR’s distance from Earth swings between its maximum and minimum roughly every three months, and the timing drifts throughout the year because of lunar influences and orbital maneuvers. In 2024, the orbit happened to put the spacecraft slightly farther from Earth at both equinoxes, but that is not always the case.

There’s one other notable way the images differ. Because of DSCOVR’s Lissajous orbit, the angle between the Sun, Earth, and satellite varies between 2 and 12 degrees, explained Alexander Marshak, the deputy project scientist for the DSCOVR mission. Earth appears as a fully illuminated disk at smaller angles and less rounded at larger angles, like a “bite” has been taken out, similar to a gibbous phase of the Moon. For this set of images, the September 22 image has a slightly lower angle (8.1°) than the December 21 image (10.3°), making it appear slightly rounder and fuller. The angle between the Sun, Earth, and satellite in the other two images is between 9° and 10°.

“You can see the subtle influence of the changing orbital geometry in these images,” Marshak said. “But the most obvious changes—the apparent location of the continents—are due to Earth’s tilt.”

EPIC’s vantage point offers a perspective that makes it easier to understand and visualize why Earth has seasons, but after more than a decade in space, the mission has also opened up new approaches to understanding and observing how daily and seasonal cycles play out on a planetary scale. It has collected more than a decade of diurnal and seasonal data on many key features on Earth, including vegetation, clouds, ice, snow, UV radiation, ocean color, and aerosols.

NASA Earth Observatory image by Michala Garrison, using data from DSCOVR EPIC. Story by Adam Voiland.

References & Resources

You may also be interested in:

Stay up-to-date with the latest content from NASA as we explore the universe and discover more about our home planet.

A Moonlit Earth as Seen From Artemis II
4 min read

An astronaut’s photo, taken en route to the Moon, reveals our planet and its place in space in a novel…

Article
June 2026 Satellite Puzzler
2 min read

Your challenge is to tell us the location of the satellite image and why it is interesting.

Article
Great Balls of Fire
4 min read

An astronaut on the International Space Station was surprised to photograph a shower of light streaking through the darkness while…

Article

The post An Epic View of the Seasons appeared first on NASA Science.

Stargazing 5

The sun and the moon appear the same size in the sky, even though in real life the sun is more than twice as big. Some call this lucky alignment coincidence; others say it's proof that sometimes things can be the same size.

Jev introduces a new shape of LLM - System One, aka Decision Models

Last week TypeSafe AI unveiled Jev, their first example of a new category of model that they are calling "System One models" (I'm with Maggie Appleton, I think "decision models" is a better name for these). Jev is an interesting variant on the usual LLM format: it still accepts text inputs, but instead of text output it returns floating point numbers corresponding to categories, yes/no questions, ratings, and associated confidence scores.

TypeSafe describe Jev like this:

Think of Jev as a frontier-intelligence function call: unstructured state in, typed probabilistic decisions out.

It's also very fast, and really cheap. Regular LLMs are priced in terms of input and output tokens, with output generally charged at significantly higher rates. Jev charges only for input - output is free - and the input price of their first model is $0.042 per million tokens - cheaper even than OpenAI's GPT-5 Nano ($0.05/million).

Jev lets you ask questions about text or semi-structured data. You compose a "state" object containing a string, array of strings, or set of name-value pairs - this might describe an article, or a customer, or any other kind of record. You then send that to their API with one or more questions, and get a reply back for each.

You can ask three kinds of questions:

  • Yes/No questions, which Jev calls "Noul" questions - their CEO confirmed on Hacker News that this is short for Bernoulli, from the Bernoulli distribution. You pose a statement and get back a floating point number between 0 and 1 for how confident the model is that the statement is true.
  • Choice questions, where the model picks one from a set of provided options - actually a confidence score plus a probability distribution across all of the options.
  • Score questions, where you provide sequence of numeric levels with descriptions and it provides a floating point score somewhere along that range.

The Jev API can accept a single document ("state") and as many questions as you can cram into the context window. Questions are evaluated in parallel, so sending many questions should take a similar time to sending just one.

I think the decision model framing is useful for understanding where to use Jev. It's great for anything that can be expressed as a classification task - think spam detection, suggesting labels, prioritization and ranking.

I've also been experimenting with it for search reranking, where you fetch 100 likely matches using an inexpensive algorithm like BM25, then have Jev score those 100 candidates for relevance against the original query.

Black boxes are back in fashion

Something I've found a little uncomfortable about Jev is how it very much represents a regression even further towards black box machine learning systems.

LLMs are black boxes already - you can ask them to justify their decisions, but you can't guarantee that what they say is useful or accurate.

Jev doesn't even give you that: put in all the text you want, the only thing you're going to get back is a floating point number. If Jev marks something as spam, which content signals tipped it off?

This also means that concerns about bias should be front and center. I really hope nobody uses Jev to rank job applicants - that floating point number could conceal all manner of unseen bias baked into the models, and experimentally picking that bias apart is going to be a tricky business.

(I tried one experiment where I had Jev score every city in the San Francisco Bay Area on a yes/no answer to whether they were a "Good city?" - it rated Cupertino top and East Palo Alto bottom. Huh.)

In practice, this all means that evals and structured experiments are even more important than they are for regular LLM projects. Thankfully, Jev is so cheap that running hundreds or even thousands of experimental prompts through it costs just a few cents.

Unconventional uses for Jev

It's been really fun watching the wider community come up with potential use-cases for Jev over the past few days. Here are some creative ones that caught my eye:

  • jevchat by Kyle Pena turns Jev into a (terrible) chat model. "At every step it asks Jev one question: Given the user's question and the reply written so far, which symbol comes next?". ericpruitt on Hacker News: "It's the digital equivalent of Morty speaking with the death crystal".
  • jev-leftpad by Fatih Kadir Akın implements left-pad with the prompt "How many spaces are needed before value to reach targetLength?" and a choice query allowing options from "0 spaces are needed" to "10 spaces are needed".
  • jev-2048 by Andy Gayton uses Jev to play the 2048 sliding puzzle game.

Open weight recreations

There's also been a flurry of projects attempting to create a model like Jev using on top of open weight models. Kev is one interesting example, using Qwen 3.5 to produce 0.8B, 4B, and 9B models. Here's the accompanying Hacker News thread, where someone linked to a JevBench benchmark that has already cropped up to compare "Jev-class decision models".

Given Jev was released just under a week ago, the amount of activity around it is extremely impressive.

Tags: ai, generative-ai, llms

Cloudflare Python Workers are now generally available

Cloudflare Python Workers are now generally available

After a two year preview, Cloudflare's support for running Python code in their server-side Workers platform is now stable: "Python is now a first-class, fully supported language on the Cloudflare Developer Platform".

A neat thing about this is how it works. Cloudflare are running Python compiled to WebAssembly via Pyodide in their V8-based workerd runtime.

This comes with some limitations, documented here - most notably both multiprocessing and threading are non-functional in the WebAssembly VM.

One particularly interesting detail of this is the local development environment story - their pywrangler development tool (confusingly packaged as workers-py on PyPI) runs a full local simulation of their stack, including executing code with Pyodide in WebAssembly in V8 in a 123MB workerd binary, which for me ended up in node_modules/@cloudflare/workerd-darwin-arm64/bin/workerd.

Python Workers represent a significant investment in the wider Python ecosystem by Cloudflare. The release announcement is credited to Gyeongjae Choi, Dominik Picheta, and Hood Chatham - Gyeongjae and Hood are both Pyodide core maintainers.

Via Hacker News

Tags: python, cloudflare, webassembly, pyodide

MCP was always a bad idea?

My comment on MCP was always a bad idea? — Hacker News.

This article entirely misses the value that MCP brings today.

Sure, there's almost no reason to use MCPs if you are running a full-blown terminal agent (Claude Code, Codex, Meta Muse, OpenClaw etc) with unfettered internet access - just let it call APIs directly.

If you want to operate something that's less YOLO than that, you'll find yourself wanting:

  1. Control over exactly which external services it can access
  2. A way to handle authentication that doesn't allow the agent to directly access API keys
  3. A sensible UI to allow users to connect and authenticate further services
  4. Strong audit logging for what's going on

MCP makes all of that so much easier to provide.

Thinking MCP is obsolete because full coding agents don't need it misses out on all of the other things we might want to build.

Tags: hacker-news, model-context-protocol

Monday 21 September 1663

Up very betimes by break of day, and got my wife up, whom the thought of this day’s long journey do discourage; and after eating something, and changing of a piece of gold to pay the reckoning, we mounted, and through Baldwicke, where a fayre is kept to-day, and a great one for cheese and other such commodities, and so to Hatfield, it being most curious weather from the time we set out to our getting home, and here we dined, and my wife being very weary, and believing that it would be hard to get her home to-night, and a great charge to keep her longer abroad, I took the opportunity of an empty coach that was to go to London, and left her to come in it to London, for half-a-crown, and so I and the boy home as fast as we could drive, and it was even night before we got home. So that I account it very good fortune that we took this course, being myself very weary, much more would my wife have been. At home found all very well and my house in good order. To see Sir W. Pen, who is pretty well, and Sir J. Minnes, who is a little lame on one foot, and the rest gone to Chatham, viz.: Sir G. Carteret and Sir W. Batten, who has in my absence inveighed against my contract the other day for Warren’s masts, in which he is a knave, and I shall find matter of tryumph, but it vexes me a little. So home, and by and by comes my wife by coach well home, and having got a good fowl ready for supper against her coming, we eat heartily, and so with great content and ease to our own bed, there nothing appearing so to our content as to be at our own home, after being abroad awhile.

Read the annotations

Of Donald and Diesel

Plumes of smoke rise from fires (centre) at an oil refinery following what the authorities say is a Ukrainian drone strike in the course of the Russia-Ukraine conflict, in Moscow

A Moscow refinery burning

A little over a week ago Donald Trump, who has made many unreasonable demands on Volodymyr Zelenskyy, the Ukrainian president, added a new one:

Mr. Zelensky has to do one thing. He has to stop knocking out diesel fuel in Russia. Let him go after targets but not diesel fuel, because he’s causing a shortage of diesel fuel.

Even for a New Yorker, the chutzpah was striking. For those not familiar with the term, chutzpah is when you murder your mother and father, then plead for leniency because you’re an orphan.

Trump has effectively created this situation by cutting off all aid to Ukraine, while in addition denying the Ukrainians even the ability to buy Patriot interceptors. Those missiles would have allowed them to fend off Vladimir Putin’s relentless missile attacks on civilian targets. Trump’s actions were clearly intended to leave Ukraine defenseless. But the Ukrainians — with help from the democracies of Europe — have survived, responding to Putin’s attacks by using their own, home-grown, drones and cruise missiles to make effective strikes against Russia’s energy infrastructure.

Last night, for example, a massive, coordinated Ukrainian assault set Moscow’s largest oil refinery ablaze.

Now Trump, having already betrayed Ukraine to Putin, is demanding that Zelenskyy commit strategic suicide. He wants the Ukrainians to go easy on Russia because the indirect effects of those attacks are hurting Republicans’ prospects in the midterm elections. As I said, chutzpah.

Aside from the outrageous nature of his demands, Trump’s remarks were interesting because they reveal the extent to which refined products, especially diesel, have replaced crude oil as the key bottleneck in the global energy crisis.

I still sometimes see commentators asserting that fears about the effects of Trump’s disastrous Iran war on energy prices were overstated, because the price of crude oil is “only” $102 a barrel, far above prewar prices but well below the $150-$200 range some analysts warned was possible. But nobody burns crude oil; they burn products refined from crude oil, mainly gasoline and diesel. And here’s what has happened to the price of diesel:

Diesel is currently selling at more than $200 a barrel. It’s true that there is always a “crack spread” between crude and diesel, but it’s typically on the order of $20. So the price of diesel is currently roughly what we would normally expect with crude at around $190.

The current world energy crisis, then, is largely a crisis in petroleum products, refined from crude oil, rather than in petroleum itself. And its proximate cause is a global shortage of refining capacity. As an informative report by Matthew Dalton in the Wall Street Journal put it, “Refineries Are Now the Main Chokepoint for Global Energy Supplies.”

Regular readers may recall that I’ve been making this point for a couple of months. And the shortage of refining capacity is, in turn, helping to keep crude prices down. As I wrote last month, “Buyers aren’t willing to pay extremely high prices for oil they can’t refine.”

So, chutzpah aside, is Trump right to attribute high diesel prices to Ukraine’s campaign against Russian refineries? No and yes.

Much of the world’s refining capacity is located in the Middle East, where it has been disrupted by Trump’s war. As Dalton notes,

the diesel blocked in the Persian Gulf is around three times as large as supplies missing from Russia compared with before the Iran war

However, the way refineries have replaced crude production as the world’s main energy chokepoint reflects the fact that refining capacity has been reduced more than crude production. And the disruption of shipments through the Strait of Hormuz has reduced world supplies of both crude and refined products. It’s at least arguable that Ukraine’s air campaign, which has done much more damage to Russia’s refining than to its crude production, has therefore played a disproportionate role in driving up diesel prices.

And expensive diesel is a big problem for the economy.

High diesel prices raise the cost of living, mainly through indirect effects. Relatively few passenger cars burn diesel — but diesel powers almost all large commercial trucks and two thirds of farm and construction equipment. So high diesel prices raise the cost of production across the economy, cost increases that eventually get passed on in the form of higher inflation.

Furthermore, rising diesel prices are even more likely than rising gasoline prices to drive up interest rates.

Why? The Federal Reserve, which sets short-term interest rates, normally focuses on “core” inflation, which excludes volatile food and energy prices. I’ve written many times about the reasons this focus makes sense. And the focus on core inflation typically leads the Fed to “look through” surges in gasoline prices, which affect headline inflation but not core inflation.

However, because surging diesel prices mostly raise inflation indirectly, via producer costs, they drive up core inflation in a way rising gas prices don’t. And this makes it hard for the Fed to avoid raising rates in the face of higher inflation.

One could argue that the Fed should adjust its measure of core inflation to exclude the effects of diesel prices too. But right now the Fed’s credibility is wobbly: It’s under constant pressure from Trump to cut rates, and many people are still suspicious about the motives of Kevin Warsh, Trump’s hand-picked Fed chair. So this is not a time when the Fed can afford to be seen changing its criteria for monetary policy in a way that might weaken its fight against inflation.

Between their direct effect on inflation and their indirect effect on interest rates, then, high diesel prices are an economic problem for America and a political problem for Donald Trump. Ukraine’s strikes on Russia are contributing to that problem. So Trump actually has good reasons to want Ukraine to stop its highly effective air campaign.

But he neither should nor will get what he wants. Remember the chutzpah factor. You don’t get to betray a nation, then demand that it help you politically, offering nothing in return.

MUSICAL CODA

Reverse-Engineering Flock Cameras

Hackers captured a Flock camera and got a look (alternate link) at the software:

While much of the automatic license plate reader’s (ALPR) most sensitive storage remained encrypted and inaccessible, the joint analysis of the recovered data shows that software running on the device explicitly detects people as well as vehicles, license plates, and bicycles. The camera can produce dozens of images of a single passing vehicle and, according to several weeks of recovered logs, generated more than a million images. Its computer-vision software also sometimes isolated bumper stickers and other graphics, including, in one case, an American flag patch on a motorcyclist’s saddlebag.

If you’re wondering how the hackers got by disk encryption, one of the unencrypted partitions contained the key for an encrypted partition. That’s pretty bad security engineering.

Links 9/21/26

Links for you. Science:

Remembering Dr. Joe Romm
Outer membrane changes enable evolutionary escape from bacterial predation
Was the Teen Who Died From Measles Immunocompromised
‘Babies are dying’: How Pennsylvania’s measles outbreak changed the vaccine mindset of this Amish country midwife
Vought pushes for scrutiny of NIH grants and budget in Oval Office clash
There’s A Big New Crater On The Moon
AI is giving scientists more ideas than they can test. A new report from Google, Google DeepMind and M.I.T. finds that researchers are using AI—a lot. It’s just not helping as much in the lab

Other:

A.I. Is a Threat, but Not in the Way You Think
What if we’re wrong about party asymmetry? (excellent)
In Fighting for Every Black Child, Did I Betray My Own?
A.I. Risk And The End Of The Neoliberal Style In Politics
The Bullshit Machine Did Some Bullshit
Trump’s arch will harm historic sites but must proceed, federal officials say
Can Two Friends Complete a Game No One Has Ever Finished? The Campaign for North Africa, a staggeringly complicated World War II board game, has stymied players for decades. Now two guys in England are giving it a serious go.
Jared Kushner’s Dollar Diplomacy: Donald Trump’s son-in-law represents the kind of Washington figure for whom public office serves as a means to extraordinary wealth.
Immigrants’ Lawyers Say U.S. Is Redacting Documents Proving Legal Status
Those Viral Bodega Peptides Aren’t Actually Peptides
A Gender War Explodes in Utah Over the Courts, Abortion and Representation
Lauren Boebert accused of sex with three staffers in complaint alleging $200K hush payment
Trump Is a Runaway Train—and Nobody’s Pulling the Brakes
Inside the US ‘Kill Chain’ That Destroyed an Iranian School
A Hispanic Republican in Florida is facing her FAFO moment
LeBron James Wants Your Paycheck To Become His Paycheck, By Way Of Polymarket
MAGA Commentator Roasted For Suggesting Veggie Burgers Amid Rising Beef Prices
Voting groups sound alarm on funding shortfalls that they say could affect midterm turnout
CNN’s Dana Bash Takes Aim At ‘Gross’ Michigan Voter Bias In Poll
The working class face a ‘class ceiling’ in elite occupations
Robert Kraft Once Said He’d ‘Fight Like Hell’ for a Palestinian Homeland. Now He’s Fighting Against ‘Free Palestine’
Why Democrats Might Choose to Impeach Cabinet Members (yes, they should do this)
‘Doom Loop’: OpenAI and Microsoft Admits LLMs Are Destroying the Web and Built on Theft
Kash Patel’s attack dog act does more than please Trump. The FBI director’s testimony is part of a larger MAGA strategy to sow cynicism
University Rescinds Job Offer to Activist Who Allegedly Wiped Phone Before DHS Could Search It
Trump’s made man leaves the family without a single indictment
I Hijacked a Real Artist’s Spotify with AI Music. It Was Disturbingly Easy
White House doesn’t want voters to see the real Trump
How American Jews Find Meaning on Yom Kippur
The election experts and the models can’t both be right

Atlantic Tropical Weather Outlook


Atlantic 2-Day Graphical Outlook Image
Atlantic 7-Day Graphical Outlook Image


000
ABNT20 KNHC 220524
TWOAT

Tropical Weather Outlook
NWS National Hurricane Center Miami FL
200 AM EDT Tue Sep 22 2026

For the North Atlantic...Caribbean Sea and the Gulf of America:

Active Systems:
The National Hurricane Center is issuing advisories on Tropical
Storm Fay, located several hundred miles southwest of the Azores.

Far Eastern Tropical Atlantic:
A tropical wave is forecast to move off the coast of western Africa
by Wednesday. Although environmental conditions are not expected to
be particularly conducive, some slow development of this system is
possible when it moves west-northwestward or northwestward across
the far eastern Atlantic. Interests in the Cabo Verde Islands
should monitor the progress of this system as gusty winds and areas
of heavy rain are possible there by the end of the week.
* Formation chance through 48 hours...low...near 0 percent.
* Formation chance through 7 days...low...30 percent.

$$
Forecaster Cangialosi


Eastern Pacific Tropical Weather Outlook


Eastern North Pacific 2-Day Graphical Outlook Image
Eastern North Pacific 7-Day Graphical Outlook Image


439
ABPZ20 KNHC 220518
TWOEP

Tropical Weather Outlook
NWS National Hurricane Center Miami FL
1100 PM PDT Mon Sep 21 2026

For the eastern and central North Pacific east of 180 longitude:

Active Systems:
The National Hurricane Center is issuing advisories on Tropical
Storm Odalys, located well west-southwest of the southern tip of
Baja California, and on Hurricane Polo, located a few hundred miles
south-southeast of Manzanillo, Mexico.

Southeast of the Hawaiian Islands (Former TD 15-E):
The remnants of Tropical Depression Fifteen-E, located several
hundred miles southeast of the Hawaiian Islands, continue to produce
showers and thunderstorms that are gradually becoming better
organized. Environmental conditions are forecast to be conducive for
further development, and a tropical depression is likely to form
during the next day or two while the system moves slowly
west-northwestward or northwestward. Interests in the Hawaiian
Islands should monitor the progress of this system.
* Formation chance through 48 hours...high...70 percent.
* Formation chance through 7 days...high...90 percent.

South of the Gulf of Tehuantepec:
An area of low pressure could form in a few days to the south of the
Gulf of Tehuantepec. Thereafter, environmental conditions appear
favorable for gradual development, and a tropical depression could
form late this week or this weekend while the system moves slowly
west-northwestward to northwestward, parallel to the coast of
southern and southwestern Mexico.
* Formation chance through 48 hours...low...near 0 percent.
* Formation chance through 7 days...medium...60 percent.

$$
Forecaster Kelly


Apple TV to Finally Air ‘The Savant’ in Early 2027, Supposedly

Nellie Andreeva, reporting for Deadline:

The release of The Savant is back on. A year after Apple TV put the thriller starring Jessica Chastain on hold three days before it was slated to premiere on Sept. 26, 2025, the streamer has rescheduled it for spring, 2027. The exact timing, which is still being finalized, will make the series eligible for the 2027 Emmys, I hear.

As Deadline reported at the time of the postponement, The Savant’s last-minute benching was due to its storyline about preventing extremist attacks and some imagery, including sniper attacks, that were considered potentially triggering two weeks after the assassination of right-wing political activist Charlie Kirk.

The only people who were potentially “triggered” by this would be whoever answers the phone in Cupertino when the White House calls. Variety and Dark Horizons both echo Deadline’s reporting that Apple TV is finally going to air The Savant early next year, but Apple TV’s own press page still lists it as “Premiere Date: Coming Soon”.

 ★ 

Yours Truly on CNBC’s ‘Squawk on the Street’ Friday

I genuinely enjoyed that Sara Eisen laughed a little when introducing me as having written a 5,000-word review of the iPhone 18 Pro.

 ★ 

Ichiro, at 52, Throws 127-Pitch Shutout Against All-Star Girls Team in Japan

Sofia Schwarzwalder, reporting for The Seattle Times:

Since turning 50, the Mariners legend has been inducted into the Hall of Fame, launched eight homers at the Mariners Alumni Home Run Derby this summer and, most recently, tossed a 127-pitch shutout with 17 strikeouts during an annual All-Star Game against the best high-school girls in Japan. [...]

The All-Star Game took place Sunday at the Tokyo Dome in front of a reported 25,000 fans. The game also featured former New York Yankees All-Star outfielder Hideki Matsui. In addition to his dazzling performance on the mound, Ichiro led off the game and had a pair of hits.

Speaking to reporters in Japanese, Ichiro said, “I wanted to see what my current limits were, and this gave me confidence in myself.”

Trung Phan, on X, posted a short video of clips. Ichiro was tossing some nasty stuff.

 ★ 

Glenn Fleishman on the Increasing Impracticality of Shipping From the U.S. to the E.U.

Glenn Fleishman:

Recent protectionist changes by the European Union further effectively exclude U.S. small businesses like mine from selling to EU customers. It’s a little complicated, but it has to do with how tax and customs fees are collected and extracted from low-value packages. This is not a tariff issue, unbelievably, but one about reducing competition.

The summary:

Delivering items under €150 per shipment into the EU now costs at least €3 per package, and may require hiring a specialty firm to manage time-of-purchase tax collection and payment because of the many differences in filing by EU nation. Shipping prices have swelled. No shipper currently offers rates close to affordable for modestly priced items, like books, while properly collecting the €3+ customs fee.

If these new rules were prompted by Chinese companies like Temu taking advantage of de minimis shipping exceptions (basically by shipping zillions of cheap items one at a time, rather than in bulk), the new rules ought to apply only for items arriving from China.

 ★ 

David Pogue: ‘125 Tests of the New AI Siri’

David Pogue:

The hardest part will be getting out of the habit of opening apps, and remembering that you have Siri. Give it a few tries. Learn to trust it. You’ll save incredible amounts of time and fumbling.

I used the beta-test version all summer, growing more and more excited. Now that the final version is out, I wanted to see how often it gets things right. It is AI, after all. So I ran it through 125 tests.

Some of these tasks are things Apple said are possible. Some ideas, I picked up from people on Reddit trying stuff. Some, I just wondered if Siri could do. It failed a handful of times. But a few other times, it absolutely blew me away. It did amazing things I bet you never suspected Siri could do.

I’ve been using iOS 27 with the new Siri AI since the week after WWDC, and the single biggest problem I have echoes Pogue’s: remembering that Siri is now useful. I keep doing things manually, then thinking “Hey, I should have tried that with Siri...”, trying it again with Siri after the fact, and realizing only then that Siri accomplished the thing.

 ★ 

Matthew Butterick: ‘Big AI to Humanity: Drop Dead’

Matthew Butterick:

So let’s not take the bait. Nor overcomplicate. We needn’t spin our collective wheels spitballing answers to big-picture, long-term Al-policy questions. We don’t know enough yet. The best next steps are the concrete ones: Big Al needs to follow all current laws — just like everyone else. So far — they haven’t. When Big Al breaks those laws, they must face prosecution and penalties — just like everyone else. So far — they haven’t. The state and federal agencies tasked with enforcing those laws need to apply them to Big Al — just like everyone else. So far — they haven’t. In short, we have to attend to the basic features of the rule of law. So far — we haven’t. If we can’t or won’t insist on that now, then we shouldn’t expect to be able to later.

 ★ 

‘Measuring Nothing (With Great Accuracy)’

Seth Godin back in 2014:

You can’t tell if a book is any good by the number of words it contains, even though it’s quite easy and direct to measure this.

(Vis-à-vis my sidenote over the weekend about Apple refusing to publish mAh battery specs for iPhones.)

 ★ 

Things Fall Apart (in the Middle East): The Donald Trump Story

One of the key arguments for a great power — other than the great power itself wanting to be one — is that they act as a guarantor of stability and the status quo. That is far from the only public or global good. And a great power will ensure that status quo on its own terms and mostly to its own advantage. But if you have any acquaintance with history, you know you can do a lot worse than relative peace and the status quo. Trump’s Iran War has been a bracing illustration of all these realities. Once the great power starts letting things break, those breakages can start multiplying very fast. Eventually you’ll find a new equilibrium, of course. But eventually can take a long time. And again, even a passing acquaintance with history tells us that things can suck without end for extended periods of time.

There’s an interesting New York Times piece from over the weekend that illustrates all these things. We know the outline. But it provides new details. As a knock-on effect of the U.S. war with Iran, the ongoing battle between Saudi Arabia and the Houthi rebel government in Yemen has again become hot. In recent weeks, the Houthis have partly cut off Saudi Arabia’s other path to the ocean. Put simply, the Saudis can export oil through the Strait of Hormuz or the Red Sea. The former has been mostly closed for months. Now the Houthis are in de facto or near control of the second. That’s a big crisis for the Saudis. This is part of the larger U.S.-Iran battle because the Houthis are clients of Iran. And Iran’s core strategy has been to create enough pain for the U.S.’s regional allies that they will force the U.S. to end the war. Remember, each time the U.S. attacks Iran, they respond by attacking the various Gulf emirates.

The de facto leader of Saudi Arabia, Mohammad bin Salman (MBS), has been urging Trump to help Saudi Arabia beat back the Houthis. He’s mainly been refusing them. What the Times story details is that on Thursday MBS called Trump and apparently literally begged him for help, to the extent that Trump gave in and agreed to join the Saudis’ fight. Trump had told his advisors the day before he wanted to stay out. Then MBS convinced him. But by Sunday he was back to wanting to stay out. That’s where things stand. This is an inconstant, impressionable and weak man. This is the nature of personalized rule when the would-be autocrat is in physical and mental decline.

There’s nothing righteous about teaming up with the Saudis in this case. It’s two pretty nasty players who’ve been fighting for years and causing huge civilian carnage along the way. But Trump has been willing to help before. From what I can tell, at least some of Trump’s current resistance is tied to the fact that he’s miffed at MBS for not helping with opening up the Strait. (Put a pin in that for a future post; it’s probably playing a bigger role than we imagine.) But he also doesn’t want more escalation of his politically and electorally disastrous war before the midterms. That pitiful and comical back-and-forth also demonstrates the role of personalism. The U.S. doesn’t really have a policy. It has the mindset and top fears, on any given day, of Donald Trump.

If my narrative above was a documentary, this is where you freeze the shot and say: this is why you think long and hard before you launch a war like this for essentially no reason. Lots of things can go wrong and you may end up needing to do things you don’t want to do and really shouldn’t do. But you have to because you’ve created a set of circumstances where you have no choice.

Here’s another thing to consider. The Saudis have a huge, huge amount of military hardware. On paper, they should have one of the most potent militaries in the world. But it’s always been known or mostly suspected that it’s vastly weaker than the price tag would suggest. U.S. reporting sometimes gives you the sense that the Houthis are some mountain folk on horseback. That’s not true. They control most of the country and have for some time. In practice, they’re an internationally isolated government. But Yemen is still a poor and war-torn country. The fact that the Saudi military can’t prevent them from basically blockading Saudi Arabia tells us the story. The truth is what everyone has always suspected. The Saudis have a paper army (let’s be generous and call it cardboard); when it gets into trouble, they have to call the U.S. Now they’re calling because of a crisis the U.S. started on its own. But the U.S. isn’t helping. And now Saudi Arabia is mostly blocked off from the sea.

Let me be emphatically clear: MBS isn’t some valiant player who has become yet another victim of Trump’s perfidy. He is awful in basically every way you can imagine. And the Saudis’ war in Yemen has been horribly destructive. Tens of thousands of Yemenis have died in the conflict.

But the supply of oil rests on that promise that the U.S. will take care of things if its regional allies — with their generally feeble militaries — get into trouble. The U.S. is now failing that promise two or three times over: by starting the war in the first place, by letting the Gulf kingdoms deal with the blowback on their own. That’s a reality that can’t hold. These patrimony states will either find other protection or build real militaries themselves.

In a way, it is a more brutal and militarized version of the breakdown in relations with America’s NATO and EU allies in Europe. The U.S. has become a chaos power which is not meeting the terms of the regional deal, and the other players are trying to figure out what to do in its place, what Plan B is — only there’s no immediate Plan B available. It’s not that there aren’t any downsides to the U.S. global hegemony or that it doesn’t have its critics. But what we’re seeing here isn’t the U.S. global hegemony being replaced by some more inclusive, less militarized successor. We’re seeing it just disappear. Perhaps Canadian Prime Minister Mark Carney will make some progress with his “middle powers” banding together to create a new and more just world order. But it’s definitely not here yet.

What is telling, of course, is that the Trump White House is filled with people with all sort of culture war hang-ups about Western Europe. They like sticking it to the Europeans, even if they’re not quite clear on the longterm consequences. But the Saudis and the other Gulf emirates are Trump’s guys. They’re supposed to be top oligarchic players in the new Trumpian, regional, spheres-of-influence world. But they’re getting hosed too. And Trump is doing things that will lead to even more chaos and even higher prices down the line because he mostly wants to avoid them in the next six weeks.

Simply put, when dumb leaders do impulsive things and then leave the consequences to others to clean up, things can degenerate really, really fast. And that’s exactly what’s happening.

GM Confirms They’re Still Smoking Crack

Joanna Stern, on X:

GM has confirmed it is NOT rolling phone projection to GM EVs. Instead this announcement is specific to JUST their new gas powered light-duty pickups, which have always supported Apple CarPlay and Android Auto.

 ★ 

America’s Decline Can Be Measured by the Names of Ballparks and Arenas

MLB:

Comerica Park has had several alternate identities since it became the Tigers’ home in 2000. Some have called it Comerica National Park for its spacious dimensions. Some fans simply came to call it Comerica, or abbreviated it to CoPa, as they grew comfortable with it over the years.

Starting next year, the Tigers’ ballpark will have a new formal name: Fifth Third Park.

Filth Turd Park.

 ★ 

Perseverance’s View of ‘Turquoise Bay’

1 Min Read

Perseverance’s View of ‘Turquoise Bay’

A panoramic view of a barren, reddish-orange Martian landscape stretching toward distant hills, partially obscured by the jagged black silhouettes of a rover in the foreground.
PIA26815
Credits: NASA/JPL-Caltech/MSSS

Description

NASA’s Perseverance Mars rover used its Mastcam-Z camera to capture this 360-degree panorama of “Turquoise Bay,” a geologic area of interest in the “Margin Unit.” The 818 images used to create the natural-color panorama were captured between Oct. 5 and Oct. 16, 2023, the 933rd to 944th Martian days, or sols, of the mission.

Figure A is an enhanced-color version, in which color bands were processed to improve visual contrast and accentuate color differences.

NASA’s Jet Propulsion Laboratory, which is managed for the agency by Caltech in Pasadena, California, built and manages operations of the Perseverance rover. Arizona State University leads the operations of the Mastcam-Z instrument, working in collaboration with Malin Space Science Systems in San Diego, on the design, fabrication, testing, and operation of the cameras, and in collaboration with the Niels Bohr Institute of the University of Copenhagen on the design, fabrication, and testing of the calibration targets.

For more about Perseverance: science.nasa.gov/mission/mars-2020-perseverance/

The post Perseverance’s View of ‘Turquoise Bay’ appeared first on NASA Science.

Further results on AI and labor market reallocation

This paper documents how artificial intelligence has affected stocks and flows in the U.S. labor market. Combining CPS and JOLTS data with AI exposure and adoption measures from OpenAI and Lightcast, respectively, we construct labor force stocks, worker flows, and market tightness by AI exposure and adoption. Since the introduction of LLMs, workers with high AI exposure and adoption have experienced larger declines in job-finding and job-switching rates than other groups, while their within-job activity switching has increased noticeably relative to others. The positive effects of AI on nominal wage growth and hours worked attenuate markedly in the post-LLM period, suggesting that LLM-driven reallocation has operated through within-firm task reorganization and a reconfiguration of labor inputs, alongside weaker demand for workers most exposed to AI. To quantify LLM-driven reallocation pressure, we construct individual-level hirability and separability indices and showthat dispersion in job-finding prospects has risen markedly since 2023, largely driven by the AI factors. The natural rate of unemployment—recovered from the trend components of unemployment inflows and outflows by AI exposure and adoption, as well as from a theoretical model of structural unemployment—is estimated to have risen by about 0.1-0.2 percentage point since the introduction of LLMs, albeit with considerable uncertainty.

That is from a new NBER conference paper by Hie Joo Ahn and Nicholas A. Carollo.  Via Inclusive Productivity Network and Alex Imas.

The post Further results on AI and labor market reallocation appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

Monday assorted links

1. Avi Loeb video on UAPs.

2. “[The Mises] library now has a permanent independent home: https://freecapitalists.org/. It holds 945 books, 3,374 journal issues and 2,732 recorded lectures, all free, in PDF, EPUB and MOBI, with the rights recorded per work.”

3. “They invited me to come see it for myself at Sopchoppy’s annual worm grunting festival, which draws thousands of visitors.” (NYT)

4. The (small) movement to return Europe to Latin.

5. Political pro-Trump bias in Polymarket?

The post Monday assorted links appeared first on Marginal REVOLUTION.

       

Comments

 

SpaceX’s Super Heavy booster arrives at pad ahead of first orbital Starship launch

SpaceX rolled its Super Heavy booster, tail number B21, out to Pad 2 late Sunday night, Sept. 20, in preparation for the launch of Starship Flight 14 no earlier than Sept. 28. Image: SpaceX

SpaceX placed a Super Heavy booster on the launch pad at Starbase in Texas Monday, as it continues testing and preparations for the first planned orbital flight of Starship, scheduled for launch as soon as Sept. 28, pending final approval from the Federal Aviation Administration (FAA).

The Super Heavy booster, with the tail number B21, departed its assembly building shortly before midnight local time and was placed on the launch mount at Pad 2, roughly two hours later. The stainless-steel booster stands 236 feet tall (72 meters) and boasts a diameter of 9 m (29.5 ft). By comparison, a Falcon 9 rocket has a diameter of 3.7 m (12 ft). The downcomer pipe that carries methane fuel down the center of the Super Heavy Booster’s liquid oxygen tank to the Raptor engines at its base is roughly the size of an entire Falcon 9 rocket.

SpaceX hasn’t said whether it intends to perform a fully integrated wet dress rehearsal tanking test of the rocket once assembled prior to the upcoming launch attempt.

As of Monday morning, there were no road closures published for the City of Starbase, suggesting that it may be a day or two at least before the Starship upper stage, tail number S41, is rolled out to join B21.

Although SpaceX is targeting the launch for Sept. 28 at 7:15 a.m. CDT (1215 UTC), it can only proceed once the FAA approves the license modification needed for SpaceX’s orbital flight plan.

This would be the first time that the FAA grants an orbital license for an object the size of a Starship upper stage (171 ft/52 m in height).

If something were to go wrong that prevented Starship making a planned deorbit burn, it could pose a danger during an uncontrolled reentry. Its heat shield and bulk could result in large portions of the craft crashing to Earth. The FAA wants to ensure that the vehicle and SpaceX are truly ready for this next step.

“In addition to completing the environmental review, license applications must also meet FAA safety, policy/payload, and financial responsibility requirements to receive authorization for flight,” the FAA said in a statement.

SpaceX rolled its Super Heavy booster, tail number B21, out to Pad 2 late Sunday night, Sept. 20, in preparation for the launch of Starship Flight 14 no earlier than Sept. 28. Image: SpaceX

Orbital flight is at hand

Depending on when Starship Flight 14 takes place, it very well may be the next Starlink mission for SpaceX and has been given the additional designation of Starlink 31-1. The company recently ceased launches of its V2 mini broadband internet satellites from Florida, but continues to build and replenish its fleet with missions from Vandenberg Space Force Base in California.

SpaceX needs Starship in order to begin launching the larger and more capable Starlink V3 satellites.

During the most recent test flight in July, SpaceX deployed several Starlink V3 satellites along the same suborbital trajectory as the Ship 40 upper stage. Those satellites were able to deploy their solar arrays, capture imagery of the Starship’s heat shield, and briefly connect with the broader Starlink constellation using laser links before they met their planned demise.

On Starship Flight 14, SpaceX aims to deploy 26 Starlink V3 satellites into orbit a 171-mile (275 km) orbit, with an estimated orbital inclination of 30 degrees to the Equator.

“Each Starlink V3 satellite will add 1 Tbps of capacity to the constellation, for a total of 26 Tbps of capacity added on this mission alone. That’s ~10x the capacity compared to a single launch of V2 mini Starlink satellites on Falcon 9,” SpaceX said in a prelaunch mission writeup.

“After deploying from Starship, the Starlink V3 satellites will unfold their antennas and deploy their solar arrays and make initial contact with the ground and the rest of the Starlink constellation via radio frequency and laser links. The satellites will then begin raising their orbits with their onboard thrusters. Following their on-orbit checkouts, the satellites should begin serving customers as soon as a few weeks after launch.”

Markdown in /src

TLDR

  • Markdown is becoming source code, not documentation
  • That Markdown should be checked in to /src, next to the code it produces
  • Code and tests should be derived from that Markdown, rather than from ephemeral prompts (or at least prompt sessions should eventually turn into persisted Markdown)

Intro

In order to supplement my income as a professor at Montana State University, I do consulting on the side. I enjoy consulting and the act of writing code & helping build systems, both for their own sake and also because it keeps my skills relevant and allows me to teach students about the latest ideas in software development.

Obviously the biggest thing to happen in development in the last few years is agentic coding: using LLMs to generate code in lieu of hand coding. I have written a few essays on this topic:

In this essay I want to discuss an idea that is becoming increasingly clear to me as I work in companies that are prioritizing agentic coding:

Markdown is now source code, not documentation.

This is not a novel or particularly clever idea, of course.

In Markdown is the new source code, Hartley Brody writes:

It is starting to feel as if the application logic of the software is being defined and edited as markdown, and the actual code that is generated by the agent is sort of becoming a low-level implementation detail.

Now, as the essays above show, I am ambivalent about AI-generated code. However, my consulting work shows that organizations are headed in this direction, often at terrific speed.

What I want to do in the remainder of this essay is think about the ramifications of Markdown becoming, more and more, the source of truth for software systems.

The Missing Source Code

There is a line of thinking, captured in the quote above, that LLMs are akin to compilers, taking high-level specifications and turning them into low-level implementations. In this view, we don’t need to look at the code an LLM generates, just as we don’t look at the machine code a compiler generates.

As I mention in Code is Cheap(er), I do not totally agree with this analogy for a few reasons, but the one relevant to this essay is: compiler workflows retain their original source code while LLM workflows typically do not.

Today, LLM-generated code is often created via a string of prompts fed into an agent as a developer builds out a feature. In practice, this means that the generated code is the closest thing we have to “ground truth� for that feature. There may be documentation for the feature stored elsewhere (e.g. Linear, Slack threads, wikis, etc.) but, so far as the codebase is concerned, the generated code is the source of truth.

My opinion is that, in professional agentic coding environments, we need to accept that LLM-generated code that emerges from ephemeral prompting sessions is not ideal, and begin moving towards capturing and checking in Markdown alongside generated code in the source directory.

Markdown As Source

Markdown has many nice properties that make it similar to traditional source code:

  • It is plain text and therefore diffable, greppable and reviewable in pull requests
  • LLMs read and write it natively
  • Humans can read and edit it without tools

And, in fact, it is already acting as source, to an extent, in AGENTS.md, specs, plans, TASK.md and so forth. We just haven’t standardized capturing that source yet.

In Markdown is the new source code, Brody says he keeps his Markdown files in .scratch/research/ and .scratch/plan/ as he works. I have adopted the convention of creating a /tmp directory for similar ephemeral needs.

My proposal is that we promote some of these files to a new directory, alongside our existing source code: /src/md

The Markdown captured in this proposed directory would be lower level than traditional design documents:

  • It contains architectural decisions
  • It contains source-level decisions
  • It contains low-level data design decisions

It is much closer to a specification (although it is not one) than a design document as traditionally managed by a project manager or designer.

Locality

I am a fan of locality, and I think that moving Markdown into /src has strong locality advantages:

  • Code modules would now include the Markdown that explains the intent of the code
  • There is no spooky “specification at a distanceâ€�, where the logic of why is elsewhere in a wiki/Notion/Confluence/Jira
  • Markdown in /src can be consumed by both humans and agents
  • Agents no longer need to look elsewhere to get context on a given codebase

What About Linear/Wikis/etc.?

Other sources of truth for the behavior of the system can still exist. These sources would provide higher-level and/or “process-oriented� documentation: high-level design documents, issues that need a resolution workflow and so forth.

But the core, current and static intended behavior of the system would increasingly be captured directly in Markdown in the source directory.

What About Tests?

I have seen many people online saying that tests are the new specification (or always were). I think there is some truth to that.

However, tests are not a good mechanism for human/agent interaction:

  • They involve a lot of ceremony, often obscuring what they are testing
  • They are typically lower level than most humans want to deal with, particularly when understanding a system
  • Higher-level explanations such as Mermaid diagrams don’t fit naturally into them

I think the following division of labor makes sense:

  • Markdown sits in /src and is the specification(ish)
  • Tests sit in /test (or wherever) and are based on that Markdown, providing automated confirmation of correctness

Again, the core idea here is that, rather than generating code and tests from prompts, a developer would work on Markdown in the /src directory, from which the code and tests would be derived.

What /src/md Markdown Looks Like

The Markdown in /src/md sits between a formal specification for the system and high-level design documents.

As with source code, there is a Complexity Budget associated with this Markdown. It will require thoughtful management to keep these documents clean, well-factored and at the right level of abstraction.

Developers should be expected to interact with both the Markdown and the derived code, so synchronizing the two (when appropriate) will become an important skill.

For example, developers will often do subtractive, constraining work on generated code, and those changes may need to be moved back into the Markdown.

I believe that agents should not be used to generate much content in /src/md. This directory should be mainly human authored and curated.

A Proposed /src/md Convention

This is necessarily the weakest part of this essay because this is a new idea and I haven’t used it extensively yet. It is me thinking out loud and inviting discussion.

With that said, here is a possible /src/md standard:

src/
  md/
    README.md          # index of all md, entry point for agents
    TODO.md            # a list of general TODOs open for this module
    OVERVIEW.md        # a technical overview of this module
    features/FEATURE_1.md       # a set of feature-specific documents
    data/DATAMODEL_1.md         # descriptions of data models in the module
    api/API_1.md                # descriptions of APIs the module provides
    infrastructure/INFRASTRUCTURE_1.md   # descriptions of infrastructure used by the module

Here the features, data, api and infrastructure directories are all optional; the idea is to divide along different axes to best capture a solid working description of the module’s behavior directly in the /src/md folder.

Conclusion

As code gets cheaper to generate, what remains valuable is the intent behind the code: what it does, why it does it, and what it must not do.

Today that intent is often lost in ephemeral prompting sessions, or scattered across wikis, tickets and Slack threads.

I think that, in the name of locality, we should consider capturing this intent in Markdown and checking it in to /src, alongside the code it produces, where both humans and agents can find it.

I don’t know exactly what the right structure for something like /src/md is yet, and I expect my thinking will change as I (and others) get more experience with it.

But I am fairly confident that Markdown is becoming source code, and that we should increasingly treat it like source code.

(Even though, no, LLMs are not compilers :)

Bacon’s Rebellion

September 20, 2026

Thousands of people gathered outside the John F. Kennedy Center for the Performing Arts Friday evening to protest Trump’s takeover of the building and his threat to shut it down or even demolish it unless his name goes onto the facade. U.S. District Judge Christopher Cooper of the District of Columbia has ordered the board of the center to give 30 days’ notice before making any major physical changes to the building.

Recognizing the leeway the courts have given him over anything that falls under “national security,” Trump this morning decided to take a proactive approach to making sure the courts don’t stop his triumphal arch. He announced on social media:

“At the strong request of the United States Military, and for National Security purposes, I have agreed to convert the magnificent Triumphal Arch, planned since the Civil War Era many years ago, at the Receptive Circle adjoining the Arlington Memorial Bridge, into a top grade Military Complex/Triumphal Arch, to house, store, and have the rapid ability to use large numbers of drones, plus Snipers, on both the roof and plaza areas, and additionally have and hold large quantities of sniper ammunition in storage. There will be no facility like this anywhere in the World. Out of the 59 top cities and Capitals, Washington, D.C., IS THE ONLY ONE IN THE WORLD THAT DOES NOT HAVE A TRIUMPHAL ARCH, but it will now and, by far, the greatest of them all!”

This is the same justification he made for his ballroom where the East Wing used to be. When it became clear that his claim to need an entertainment space up to his aesthetic standards would not fly, he began to claim that the ballroom is imperative for national security. We have since learned that there already is a secure space under the White House, built in secret during President Barack Obama’s administration.

Dan Diamond reported in the Washington Post last Wednesday, September 16, that officials from the National Park Service have agreed that the construction will adversely affect Arlington National Cemetery, the Lincoln Memorial, and several dozen other historical sites, but urged those concerned about historic preservation to sign on to the project through a memorandum of agreement that will stand as approval by noon tomorrow anyway.

The document asserts that the arch is supposed “to celebrate 250 years of American independence by honoring America’s founding principles.” Now Trump says the arch is imperative for “National Security purposes” and will have drones and snipers.

Rebecca Miller, executive director of the DC Preservation League, responded to the request to sign the document: “This is not consistent with NPS practice, NPS regulations, or the intent of the National Historic Preservation Act.”

While Trump suggests he will defend the United States from atop his triumphal arch, our European allies are much more concerned with Russia’s drone strike last Sunday on a passenger train traveling from Kyiv, Ukraine, to Warsaw, Poland. The train was just over a mile—two kilometers—from the Polish border when the drone hit at a border crossing. The drone hit just after a convoy carrying former leaders and high-level diplomats, including former U.K. prime minister Boris Johnson, had passed through.

The train operators were warned of the coming drone and no one was hurt, but European leaders widely interpreted the strike so close to Poland as, in the words of Kaja Kallas, the European Union’s high representative for foreign and security policy, “clearly a message to the western world.”

Poland is a member of the North Atlantic Treaty Organization (NATO). Twelve nations founded NATO in 1949 to resist Soviet aggression. After the Soviet Union collapsed in 1991, NATO’s mission shifted toward crisis management, and then to resisting the aggression of Russia’s president Vladimir Putin.

Over the years, NATO has grown to include 32 countries, 30 of which are in Europe (the U.S. and Canada are the two NATO countries in North America). The success of their collective defense system rests on Article 5 of the North Atlantic Treaty, which states that an attack against any one member of NATO will be treated as an attack against all of them. So a threat to Poland threatens all the NATO countries.

Russia has been pushing NATO countries with what European leaders call “hybrid attacks.” Rather than launching classic military attacks, Putin has been allowing drones to go into NATO airspace, cutting undersea telecommunications networks on which European countries depend, and possibly placing bombs on a train in France.

Russia has been a bad actor for years, destabilizing NATO countries by flooding them with disinformation that affects elections, paying for political parties, bribing politicians, and so on. But the increase in Russian provocations now seems to be related to Putin’s attempt to undercut European support for Ukraine as Ukraine’s drones have brought the war home to Russia’s oil industry and to the Russian people.

In a speech on Wednesday, NATO Secretary General Mark Rutte, former prime minister of the Netherlands, noted that “Russia wants to stop us helping Ukraine—but their actions will only lead us to do more for Ukraine.”

Kurt Volker, who served as U.S. ambassador to NATO under President George W. Bush, told NPR’s Elissa Nadworny that President Trump “has largely looked at all of this and said, that’s a European problem. He doesn’t feel a threat to the United States from Russia, and he doesn’t see a need for the U.S. to increase its pushback on Russia at all.” “I disagree with this,” Volker said. “I think that we have a vested interest in freedom and free people everywhere being safe and prosperous. It creates a better world for us.”

Trump’s stand is interesting in light of news that Russia has been helping Iran in its fight against the United States, sending upgraded munitions as well as satellite imagery and targeting data to hit U.S. forces in the Middle East.

Last week, CNN reported that fourteen Russian spy satellites moved over the Prince Sultan Air Base in Saudi Arabia, used by the U.S., two days before a devastating March 27 attack by Iran. A CNN investigation showed that the spacecraft had access to a large spectrum of data. U.S. officials and international intelligence sources told CNN that the information the satellites gathered helped Iranian forces conduct some of its most precise attacks against American forces and assets.

Two months later, a Russian close to Putin footed the bill for a three-day celebration for Donald Trump Jr.’s wedding to Bettina Anderson. According to Justin Elliott, Brett Murphy, Joshua Kaplan, and Alex Mierjeski of ProPublica, Umar Kremlev spent hundreds of thousands of dollars on the event, held on private islands in the Bahamas.

On Tuesday, September 15, the Department of Justice announced charges against five people working for Russian intelligence “to conduct attacks and murders around the world, including in the United States.” The indictment alleges that a network of Russian hit men has operated since at least 2024 and has recruited U.S. citizens to surveil and murder people, intending to target “all the countries that are helping Ukraine.” As Daniel Boffey and Andrew Roth of the Guardian note, it was an unwritten rule of the Cold War that Russia would not attack people in the U.S. (although Russian agents are widely believed to be behind the murder of U.S. journalist Paul Klebnikov in Moscow in 2004).

On September 16, Congress passed a major sanctions package targeting Russian officials, the energy sector, financial institutions, and the “shadow fleet” of tankers that get around sanctions by using shell corporations and flying under the flags of countries with a loose regulatory system. The measure is named the Lindsey O. Graham Sanctioning Russia and Iran Act of 2026, in honor of the late South Carolina senator.

But on Thursday, September 17, Anton Troianovski of the New York Times reported that Trump is suggesting Putin will be more willing to end his war if the U.S. makes business deals with Russia regardless of whether it stops its assault on Ukraine. In February, Troianovski reported that Gentry Beach, a Texas investor with ties to the Trumps, signed an agreement last fall with one of the biggest energy companies in Russia to develop Alaska’s natural gas resources.

According to a September 14 piece by Dexter Filkins in the New Yorker, the Trump administration has essentially privatized U.S. foreign policy for their own interests. The “generally held view,” a former U.S. official told Filkins, is that Russia has offered administration officials and their allies business deals in exchange for their supporting Russian demands against Ukraine. A classified report a European intelligence agency provided to Filkins lists Trump, his son-in-law Jared Kushner, special envoy Steve Witkoff, former envoy Richard Grenell, and Gentry Beach as people who might participate in any of ten money-making ventures on the table.

The world, and the place of the United States in it, is changing fast. In June, Defense Secretary Pete Hegseth called it “shameful” that European allies did not help the U.S. attack on Iran and said the U.S. would review its military commitments to Europe. On September 17, Dan De Luce, Gordon Lubold, Courtney Kube, and Abigail Williams of NBC News reported that the Pentagon is weighing a plan to pull tens of thousands of troops and weapons, ships, and planes out of Europe despite the warnings of NATO allies about Russia’s increasingly aggressive moves.

In Wednesday’s speech, Rutte outlined what he called NATO 3.0. If NATO 1.0 was the phase of the organization that pushed back against the Soviet Union and NATO 2.0 was the period from then until now, he said, NATO 3.0 is one in which the weight of NATO shifts away from the United States and toward the United Kingdom, Europe, and Canada.

Notes:

https://www.pbs.org/newshour/politics/thousands-join-protest-outside-kennedy-center-expressing-concern-that-trump-might-tear-it-down

https://www.pbs.org/newshour/arts/judge-orders-kennedy-center-to-provide-30-days-notice-before-making-any-major-physical-changes

https://www.washingtonpost.com/politics/2026/09/16/trump-officials-say-planned-arch-will-harm-historic-sites-must-go/

https://www.washingtonpost.com/documents/b432bfa4-ff64-4fed-8543-337490a98a5a.pdf

https://www.nato.int/en/news-and-events/events/transcripts/2026/09/16/annual-lecture-by-the-nato-secretary-general

https://www.militarytimes.com/news/your-military/2026/09/15/russia-and-iran-deepen-weapons-partnership-amid-wars-in-ukraine-middle-east/

https://www.washingtonpost.com/national-security/2026/03/06/russia-iran-intelligence-us-targets/

https://edition.cnn.com/2026/09/16/world/video/russia-spy-satellites-iran-intelligence-strikes-us-assets-digvid-invs

https://www.npr.org/2026/09/19/nx-s1-5974199/worries-swirl-that-russia-is-planning-to-test-nato-with-direct-attacks

https://www.propublica.org/article/donald-trump-jr-wedding-bankrolled-russian-oligarch-umar-kremlev-putin

https://www.nytimes.com/2026/09/17/us/trump-putin-russia-sanctions.html

https://www.nytimes.com/2026/02/19/us/politics/trump-russia-deals-novatek.html

https://www.nbcnews.com/politics/national-security/pentagon-weighs-pulling-nearly-third-us-forces-europe-rcna597722

https://www.thetimes.com/us/news-today/article/us-troops-europe-nato-3tpm5hqw2

https://www.newyorker.com/magazine/2026/09/21/jared-kushners-dollar-diplomacy

https://www.justice.gov/opa/pr/members-russian-intelligence-services-network-charged-conspiring-finance-terrorism-and

https://www.theguardian.com/world/2026/sep/20/the-rules-have-changed-has-russia-begun-to-order-assassinations-on-us-soil

https://www.rferl.org/a/us-congress-sweeping-russia-iran-sanctions-bill/33857946.html

https://www.theguardian.com/world/2026/sep/14/ukraine-kallas-not-scared-russian-strike-train

Trump’s Truth:

statuses/41811

Share

The Tragedy of Nikole Hannah-Jones

Nikole Hannah-Jones famously sent her child to a predominantly black/lower-income public school in New York City. Now her child says she shouldn’t have been used as political fodder.

The essay makes for hard reading and I acknowledge NHJ’s courage in writing about her mistakes and the cost to her child. The piece is raw and true when talking about her personal choices, but the larger story in which NHJ embeds her personal history is mostly false. The problem isn’t funding. The failures she documents are failures of management and accountability, not lack of resources. NYC spends upwards of $40k per pupil on average, the highest of any large district in the country. Moreover, schools in NYC with lower-income students get more than the average. PS 307, where NHJ initially sent her child, is currently funded at just over 52k per student, far above the national average.

Nationally, there haven’t been big gaps in funding within states by race or income for decades. NHJ has reckoned with her failing her own child but she has not yet reckoned with the failure of her entire educational philosophy.

The role of ideology in blinding NHJ is dramatic. NHJ’s daughter earns high grades in her math classes but she fails standardized tests. Most parents, especially conservatives, know what that means. The classes are a lie. But NHJ is blinded by ideology and assumes it’s the standardized tests that are biased. It’s only when her daughter demands to go to a better school that she and her daughter confront the truth:

Najya knew very little algebra and had huge gaps in many of the building blocks of math that she should have learned in elementary school, like mastery of long division and fractions.

The confrontation is almost disastrous:

My child’s confidence wilted like an unwatered plant. She started to develop an almost debilitating anxiety around taking tests. She became sullen at school and began to act out. For the first time ever, I got messages from teachers about Najya’s behavior.

Fortunately, Najya battles back and recovers but much more could be said here about the costs of social promotion, DEI and mismatch on the so-called beneficiaries.

Ironically, NHJ invokes the heroic history of Black Americans integrating schools to justify keeping her own child in a segregated one. Painful.

NHJ thought that she and her husband–politically connected, astute people who were not afraid to speak up–could do well for their daughter and the other kids in the school. But in the end she has written a great piece on why voice fails–even a powerful voice–in the absence of the threat of exit. Hannah-Jones could have saved herself some grief and her child a poor education by reading my post The tragedy of Jonathan Kozol.

It’s been said that Ayn Rand’s heroes don’t exist, but her villains do. Case in point. Hannah-Jones says that she and her husband “felt an obligation to make educational decisions based on the collective good.” But she wasn’t just sacrificing herself for her ideology; she was sacrificing her child, who had no choice in the matter. “I don’t think she’s deserving of more than other kids,” she said in 2017. Nearly a decade later, Najya reminded her that in the abstract your child may not deserve more than other children, but she is nevertheless entitled to expect more from you. “Sometimes I wish instead of always thinking about other kids, you would have thought about me.” You don’t have to be a Randian to think that your child should not be sacrificed to the collective good, but it doesn’t hurt.

The post The Tragedy of Nikole Hannah-Jones appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

w/e 2026-09-20

Back over to Essex this weekend.

We had a holiday flat in Walton-on-the-Naze which we used to spend a lot of time at. Around the time we were moving to the opposite side of the country some friends and neighbours there were looking to downsize and rent. So they’ve been our lovely tenants up until now when they’ve moved away.

So we drove over (well, Mary did the driving as usual) on Friday to check the place was fine. It was. hmu if you want a nice two-bed flat with a sea view in a well-maintained block!

On Sunday we drove back (ditto) via the old family home to pick up a lot of stuff. I now have around ten boxes full of a wide variety of things to find new homes for. Items that are too interesting or (not very) valuable to throw away or leave for a house clearance, but that none of us want or need to keep. It’ll take a while.

A photo of two large teddy bears. The one on the left is old and jointed and is wearing a blue top with BRIAN BEAR written on it. The one on the right has a smile and is wearing a camouflage hat and some tinsel.
Brian, left, came home with us and is definitely staying.

§ Interactive Investor are still unable to show the correct price of that “null” fund. Amazing.


Read comments or post one

Sound guardians

Photo of a man with closed eyes wearing headphones, appearing focused, against a blurred green background.

As Indonesia builds a new capital city, the race is on to preserve the sounds of the rainforest before they vanish forever

- by Aeon Video

Watch on Aeon

He was probably right

Classical marble busts in a museum setting with focus on a detailed male figure in the background.

Cicero’s life and thought are a testament to the idea of probabilia: we should be confident in our beliefs, but never certain

- by Massimo Pigliucci

Read on Aeon

Commemoration Done Right

September 11, 2026

On the morning of September 11th, 2001, American Airlines flight 11, and United Airlines flight 175, took off from Boston’s Logan International Airport, only minutes apart. Both were bound for Los Angeles. Neither, of course, ever got there.

The idea of constructing a memorial to the 2001 terror attacks, at the airport from which two of the four hijacked planes departed, was perhaps to be expected. But it needed to be done just right. There’s a fine line sometimes between commemorative and jingoistic. What they came up with, I’m pleased to say, is superb, and ought to serve as a model for such memorials everywhere.

Reached along an ascending pathway that twists upward amidst grass and trees, the main structure is a sort of open-topped glass chapel, inside of which are two vertical slabs, one for each of the two aircraft that struck the World Trade Center — and mimicking the shapes, one can’t help noticing, of the twin towers themselves — engraved with the names of the passengers and crew. There’s one for flight 11, the 767 that struck the north tower, and the other for flight 175, which hit the south tower minutes later.

The glass and steelwork allow the entire space to be flooded with silvery light, creating an atmosphere that’s quiet and contemplative without feeling maudlin or sentimentalized.

There are no flags or any of the crudely patriotic touches one might expect (and dread). It’s everything it should be: beautifully constructed, understated, and respectful.

Officially it’s called the “Place of Remembrance,” and it was built by the Boston-based firm of Moskow Linn Architects, as part of a public competition. The final design was chosen by airline workers, airport representatives, and family members of the victims.

The engraved names are separated into columns of crew and passengers, and the names of off-duty United employees on the flight 175 plate include the small “tulip” logo of United Airlines. This might seem a strange touch, but this memorial was built primarily for the community of people who work at the airport. Among the passengers and crew killed on the two jets were more than a dozen Logan-based employees.

But anyone is welcome, of course, and I wish more people knew about it. Although it’s easily accessible from terminals A or E, it’s not well advertised. It sits on a knoll just to the southern side of the central parking garage, across from the Hilton hotel.

The easiest way to find it is to follow the signs to the ride-share pickup point for terminals A and E. There are two pickup points; go to the one closest to terminal A. Once you step out of the elevator it’s just a one-minute walk around the corner.

An event was held this year on the 25th anniversary of the attacks, during which a sculpted wreath and plaque were added.

Related Stories:
THE DAY OF THE COCKROACH
WELCOME TO HIDDEN AIRPORT

Photos by the author

The post Commemoration Done Right appeared first on AskThePilot.com.

How deep is Tulainyo Lake?

Regular readers may recall that I put a visit to Tulainyo Lake on my bucket list a few years ago. Last week I did it.

Impossibly remote, otherworldly beauty, and an enduring mystery. Just how deep was this lake? Wikipedia claims not to know. Measuring it is non-trivial. A worthy challenge.

The skinny: This relatively small alpine lake is about 117 m deep! That makes it the 25th deepest natural lake in North America, and by far the deepest lake on Earth for its size.

Enjoy our interactive report here.

If you went outside at the same time every day and If you went outside at the same time every day and


A wheel fit for a giant

In a cleanroom at the Max Planck Institute for Extraterrestrial Physics (MPE) in Garching, Germany, two engineers look up at the heart of MICADO. One of the first instruments that will operate on ESO's Extremely Large Telescope (ELT) in Chile’s Atacama Desert, MICADO will observe the Universe in the infrared, and each slot in this giant rotating wheel carries a different filter that lets light through at different colours or wavelengths.

This so-called Centre Wheel Mechanism was built by the Netherlands Research School of Astronomy (NOVA), part of the MICADO consortium, led by MPE. What makes this photograph so astounding is the sheer scale of the device compared to the engineers working on it, Jeongha Lee and Federico Biondi. In today’s telescopes, a filter wheel is typically a few tens of centimetres across. This mechanism measures about 1.5 metres — an extremely large telescope, it turns out, also demands extremely large instruments.

Size is only part of the challenge. Since MICADO observes at infrared wavelengths, the mechanism has to work at cryogenic temperatures to prevent its thermal glow from contaminating the observations. But materials behave differently at very low temperatures, which complicates the accurate positioning of the optical elements in this wheel. Some of them, like special masks that will be used to observe planets around other stars, need to be placed with an accuracy of just a few microns, which is less than the width of a human hair.

Once in place in Chile, MICADO will image the Universe with a sensitivity comparable to the NASA/ESA/CSA James Webb Space Telescope, but six times sharper. It will pick out individual stars in distant galaxies, characterise planets outside the Solar System, and track the stars orbiting the supermassive black hole at the centre of the Milky Way. For now, though, it is taking shape in Garching, a few hundred metres from ESO’s Headquarters, a whole hemisphere away from the mountain where it will eventually get to work.

Obama on agentic AI

Obama recently said:

“If we are thinking about AI just in terms of how do we cure cancer or get better energy, you can do that without having agentic AI and having it just roaming free in the internet.”

As Roon noted: “this sounds completely incoherent to me”

From Rob Saker:

An agent is a system that can plan, use tools, write code, query data, run experiments, check its own work, and keep going. That is how the work gets done. Treating “agentic” as optional decoration, as if the serious version of AI is a polite chatbot locked in a box while the unserious version “roams free on the internet”, is the kind of sentence you write when you’ve heard the buzzwords and never watched a lab actually use the technology. You do not cure cancer with a model that only answers questions. You cure cancer with systems that can read the literature, propose hypotheses, design assays, analyze results, rewrite the next experiment, and do that loop a thousand times faster than a human postdoc. That loop is agentic. Strip the agency out and you are left with a very expensive autocomplete.

I agree with those points, but my main concern is different.  How would we enforce such a prohibition on commercial agents?  Set up a Chinese-like firewall that bans Americans from accessing sites with foreign agents?  Monitor all those sites over time, so we know which suppliers to ban?  Ban VPN as well?  Give our government the power to inspect hard drives, in case agentic functions might be embedded there?  Set up FBI “phishes,” luring Americans in with the prospect of agent access from abroad, and then arresting them, as we do with child ****?

Something else?  How about insisting that all American (and foreign?) web sites set up tough captcha problems, so that agents may not be used (ha ha)?

You might also ask how an AI “agent” is to be defined, after all even O3 had some “agentic” abilities, such as opening up museum web sites to see which exhibits are on.  Is it typing things into boxes and filling out forms that is to be prohibited?  How much regulation of software would that require, how would that regulation actually occur, and what else would end up being restricted?

I do not think Obama intends to be supporting massive restrictions on freedom of speech and civil liberties.  Rather this is a good example of how some political factions will simply have “ideas about what might be good,” without having freedom concerns — or for that matter practicality and civil liberties concerns — center of mind in the first place.

And this would cause the immediate bankruptcy of both Anthropic and OpenAI, right?

I can readily imagine that, upon the advent of agentic AI, we need some significant changes in our cyber laws.  Now would be a good time to both commission and also cite some peer-reviewed academic literature on this matter!?  That is not an impossible thing to do, yet our public discourse seems oddly resistant to the notion.

Addendum: And do not forget the classic Gwern piece, remarkably early in its prescience.

The post Obama on agentic AI appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

Arctic Melt Season Length Levels Off

2000-2009
2010-2023
Two Arctic maps compare changes in melt season length by decade. Red indicates areas where the season grew longer; blue, where it grew shorter. The 2000–2009 map is mostly dark red. The 2010–2023 map shows a mix of lighter red and blue, indicating smaller changes.
NASA Earth Observatory/Michala Garrison
Two Arctic maps compare changes in melt season length by decade. Red indicates areas where the season grew longer; blue, where it grew shorter. The 2000–2009 map is mostly dark red. The 2010–2023 map shows a mix of lighter red and blue, indicating smaller changes.
NASA Earth Observatory/Michala Garrison
Two Arctic maps compare changes in melt season length by decade. Red indicates areas where the season grew longer; blue, where it grew shorter. The 2000–2009 map is mostly dark red. The 2010–2023 map shows a mix of lighter red and blue, indicating smaller changes.
NASA Earth Observatory/Michala Garrison
Two Arctic maps compare changes in melt season length by decade. Red indicates areas where the season grew longer; blue, where it grew shorter. The 2000–2009 map is mostly dark red. The 2010–2023 map shows a mix of lighter red and blue, indicating smaller changes.
NASA Earth Observatory/Michala Garrison
2000-2009
2010-2023
Since the start of the satellite record, the Arctic sea ice melt season has lengthened in most decades, particularly in the 2000s (left). Since 2010 (right), the melt season appears to have stabilized. NASA Earth Observatory images by Michala Garrison based on data from Boisvert, L., et al.

For decades, Arctic sea ice has been melting earlier in spring and freezing later in fall, extending the melt season and contributing to widespread ice loss. A new NASA-led study has found that while the Arctic melt season has lengthened dramatically since satellite records began, that trend unexpectedly stabilized around 2010.

The Arctic sea ice melt season is now about 40 days longer than it was in 1979, according to the study. Most of the increase occurred before 2010. Since then, the average melt season length has remained relatively unchanged, despite large year-to-year fluctuations.

Researchers analyzed satellite observations between 1979 and 2023 to track when sea ice begins to melt each spring and refreezes each autumn. They found that the change was driven primarily by sea ice freezing later in the year rather than melting earlier in the spring.

“Previously, there was more of this multiyear ice that didn’t melt away each summer,” said Linette Boisvert, a co-author on the study and ice scientist at NASA’s Goddard Space Flight Center. “Now that the ice is thinner and there’s less of it, there’s a lot more variability.” On average, though, the decline in sea ice thickness and extent that occurred during the 2000s appears to have stopped for the time being.

To understand why, the team examined changes in the Arctic’s energy balance—the net difference between incoming heat from the Sun, atmosphere, and ocean and the outgoing infrared radiation emitted back to space.

During the period of rapid ice loss in the 2000s, reduced ice cover exposed darker ocean water, which absorbed more sunlight. The additional solar energy delayed freezing and helped extend the melt season. In the left map above, the reddest areas mark where the melt season grew fastest that decade, by up to 5 days per year. Much of the Arctic ice today is younger and thinner than the multiyear ice that was once more widespread in the Arctic Ocean, leaving it more vulnerable to variations in cloud cover, storms, and winds.

Since 2010, changing cloud patterns have reduced the amount of sunlight reaching parts of the Arctic Ocean. The result has been a melt season that fluctuates from one year to the next but remains relatively stable over longer periods. The right map above reflects this shift, with the lighter blues and reds showing the more modest rates of change during that decade.  

These findings don’t suggest that shifts in Earth’s climate have stopped affecting the Arctic. The region continues to warm nearly four times faster than the global average, and the remaining sea ice is substantially thinner than it was several decades ago. Instead, the study suggests that the Arctic may have entered a new phase, in which annual weather patterns exert a stronger influence on melt season than they once did.

“Melt season length is much more dependent on atmospheric effects,” Boisvert said. “They seem to be playing a bigger role because the ice is generally thinner and more vulnerable to begin with.”

The researchers caution that the apparent stabilization may prove temporary. Thick Arctic ice still exists throughout the year to the north of Greenland and the Canadian Arctic Archipelago. Continued thinning of ice in those regions could trigger another period of rapid sea ice loss, with the potential to further extend the melt season.

For now, the study highlights the importance of continued satellite observations of Arctic sea ice and the energy balance that controls its growth and melting. Whether the recent stabilization represents a lasting change in the melt season or a pause before another period of rapid change remains an open question.

NASA Earth Observatory images by Michala Garrison, using data from Boisvert, L., et al. (2026). Story by James Riordon/NASA’s Earth Science News Team.

References & Resources

You may also be interested in:

Stay up-to-date with the latest content from NASA as we explore the universe and discover more about our home planet.

A Changing World for Emperor Penguins
7 min read

Experts are analyzing decades of images from Landsat satellites for clues about how the iconic birds have responded to sea…

Article
A Bare Summer for Barnes Ice Cap
4 min read

The expanse of glacial ice on Canada’s Baffin Island lost its snow cover quickly and early in summer 2026, revealing…

Article
Pink Penguin Guano Provides Diet Clues
3 min read

The color of Adélie penguin droppings reveals what the birds are eating, offering scientists a way to track how sea…

Article

The post Arctic Melt Season Length Levels Off appeared first on NASA Science.

Georeferencing Fire Insurance Maps

Dan Vanderkam: “Over the past few months I’ve been working on mapsnap, a program to automatically georeference old insurance maps. This post explains why these maps are interesting, how mapsnap works, and why this is worth… More

Mapping Tariffs

Mapping Tariffs visualizes the impact of U.S. tariffs on Canadian businesses. “Since May 2025, Tara Vinodrai and Karen Chapple have led a team of researchers at the School of Cities to develop interactive mapping and… More

datasette-explain 0.2.2

Release: datasette-explain 0.2.2

  • Explain plans now work on read-only stored-query pages.

I upgraded datasette.simonwillison.net to Datasette 1.0a40, which inspired me to ship a new version of this explain plugin.

Tags: sqlite, datasette

Sunday 20 September 1663

(Lord’s day). Up, and finding my father somewhat better, walked to Huntingdon church, where in my Lord’s pew, with the young ladies, by my Lord’s own showing me the place, I stayed the sermon, and so to Hinchingbroke, walking with Mr. Shepley and Dr. King, whom they account a witty man here, as well as a good physician, and there my Lord took me with the rest of the company, and singly demanded my opinion in the walks in his garden, about the bringing of the crooked wall on the mount to a shape; and so to dinner, there being Collonel Williams and much other company, and a noble dinner. But having before got my Lord’s warrant for travelling to-day, there being a proclamation read yesterday against it at Huntingdon, at which I am very glad, I took leave, leaving them at dinner, and walked alone to my father’s, and there, after a word or two to my father and mother, my wife and I mounted, and, with my father’s boy, upon a horse I borrowed of Captain Ferrers, we rode to Bigglesworth by the help of a couple of countrymen, that led us through the very long and dangerous waters, because of the ditches on each side, though it begun to be very dark, and there we had a good breast of mutton roasted for us, and supped, and to bed.

Read the annotations

Why Does Everyone Hate Trump’s Tariffs?

President Trump Unveils 'Liberation Day' Tariffs|Daily News  Digest|2025-04-03|web only

On April 2, 2025 — “Liberation Day” — Donald Trump imposed high tariffs – ranging from 10 to 48 percent — on imports from virtually every one of our trading partners. With that announcement the United States abruptly turned its back on generations’ worth of solemn international agreements, effectively voiding a rules-based international trading system the U.S. itself had largely constructed.

Although the Supreme Court eventually ruled that most of the tariffs were illegal, the Trump administration reinstated many of them using other dubious legal strategies. Businesses are, to say the least, unhappy about the uncertainty created by these unilateral, unstable actions. However, the consequences of Trump’s liberation tariffs have been very different from what both supporters and opponents originally expected.

Contrary to Trump administration expectations and predictions, there has been no revival of U.S. manufacturing employment, and investment in manufacturing — at least as measured by construction spending — has fallen off a cliff. And import prices, even excluding petroleum, have gone up, not down, belying claims that foreigners would pay the tariffs.

However, the Trump tariffs haven’t caused a recession, either in the U.S. or globally. Nor have they led to a 1930s-style global spiral into protectionism: Retaliation by other nations against U.S. tariffs has been limited, and there has been hardly any sign of emulation — of other nations deciding to follow Trump’s lead by imposing their own high tariffs on trading partners. Instead, a number of countries have made substantial moves to strengthen their trading relations — e.g., after decades of stalled negotiations, India and the European Union agreed to a free trade deal. And Canada, of course, is trying to compensate for its now-troubled relations with the U.S. by becoming an “associate member” of the EU (although nobody quite knows what that might mean).

Yet for me the biggest surprise arising from the Trump tariffs has been the complete absence of a significant domestic political constituency. This failure has been driven home by polling on Trump’s confrontation with Canada, which appears to be nearly as unpopular as his war with Iran.

This is not, I believe, what most economists or political analysts would have predicted. Conventional economic analysis, while arguing that free trade raises real income for a nation as a whole, also suggests that tariffs can nonetheless benefit significant groups within a nation. Moreover, because the beneficiaries from tariffs are often localized and organized while the costs are dispersed, tariff advocates often wield disproportionate political influence. Indeed, one of the main purposes of world trade rules has historically been to strengthen governments’ hands against their own domestic anti-free-trade constituencies.

However, the actual political response to Trump’s tariffs hasn’t followed this traditional model. Rather, support for the tariffs appears to be limited to that segment of the population — around 20 percent — that supports almost anything Trump does.

Beyond the paywall, I will address the following:

1. Why conventional economics says about tariffs

2. Polling on the Trump tariffs

3. Explaining low support I: Value chains

4. Explaining low support II: The service economy and affordability

5. Explaining low support III: The Trump factor

6. A policy without a constituency

Read more

Quoting voxium

It has been half a month since I started a new role at a big company. Nobody knows anything here. The specs, code, tests, PRDs, tickets, resolution of those tickets, reports, etc., everything is made by Claude Code. Nobody on my team likes this. They are being forced to ship as much as they can. I have heard multiple times from higher management that pushing code is not a bottleneck, so why are we slow? People are working 12 to 13 hours a day just to press enter. Nobody is reading anything. Everyone, literally everyone, from an L1 to an L7 engineer here is doing the same thing. Talk to Claude.

voxium

Tags: ai-misuse, llms, ai, generative-ai

llm-keys-ui 0.1

Release: llm-keys-ui 0.1

This plugin solves a very specific problem.

I've started using Codex Remote to run coding agents on various machines while controlling them from my phone.

Sometimes I use those machines to hack on LLM projects, and occasionally that means I need to configure an API key.

I don't like pasting API keys into agent sessions, so I wanted a way to get those keys onto a machine without pasting them into the ChatGPT app directly.

With this plugin, I can tell Codex to run:

uvx --with llm-keys-ui llm keys-ui --all

Then have it tell me the URL - including local network or Tailscale device IPs - for an interface to save additional API keys.

Then later it can use a command like llm keys get anthropic as part of a shell command when it needs to use a key.

Chat conversation requesting uvx --with llm-keys-ui llm keys-ui --all, with a response listing four server URLs on port 8010 and confirming the server is still running. LLM keys web interface listing anthropic, openai, openrouter, and qwen-dummy as stored keys, with a form containing Key name and New value fields and a Save key button. Existing key values are never displayed.

Tags: llm, coding-agents, codex

Links 9/20/26

Links for you. Science:

New wild cat species is identified for first time in 100 years
This Is Your Brain on Short-Form Video. Scientists know very little about how TikTok and its copycats affect human cognition, but the signs aren’t good.
Boreal and subarctic freshwaters harbour a diversity of jumbophages
RFK Jr. Bolsters Vaccine Skepticism at Children’s Health Defense Conference
The Next Gene-Editing Technology May Also Be the Oldest
The State of AI Antibody Design
Amid measles outbreaks, RFK Jr. headlines anti-vaccine conference

Other:

The Mistakes That The Democrats Keep Making. Author Ed Burmila says Democrats must get out of the pattern of winning elections based on anti-GOP sentiment but then governing in a milquetoast way that helps Republicans get back in power.
Trump’s Debt Crisis Will Be Easy to Fix. All that’s needed is the political will to staff the government and nudge up taxes.
When is a river no longer a river?
Trump Aides Are Prepping an AI Takeover of Government Services
Loopholes For The Lesser People
Neighbors Are Upset Over Federal Agents’ Presence at a D.C. School
Textured
How Purple-State Democrats Should Talk About Trans Issues
Urgent motion filed to stop carving of Trump’s name into US Institute of Peace building
He’ll Burn It All Down
NYC deploys robotoilets. The public bathrooms have a strict 10-minute time limit.
An empty lot in Ward 7 was due to get a grocery store decades ago. What’s happening now?
Step through this magical portal to a DC with 800,000 people
Pennsylvania’s Amazon data center boom is fueled by a lucrative tax break
A Path to a Texas Breakthrough
RFK Jr.-Linked Group Offered Access to US Officials for Fee
Error by AI scribe during medical appointment leaves patient devastated
Noncitizens Don’t Sway Elections, Even in a Pro-Trump Tally
The Census Bureau Is Overrun With Staffers From a MAGA Think Tank
Build columns, not Trump’s arch, D.C. official tells administration
Not just a river in Egypt
American Principles Project Warns Republicans That Targeting Trans People “May Not Be Sufficient” To Win 2026. The organization is one of the leading anti-trans political organizations in the United States.
How Three Brothers Built an AI Slop Empire by Buying Legitimate News Sites and Turning Them Into Zombie Content Farms That They Say Get 50 Million Page Views per Month
US military had close call after using AI for false intelligence report, sources say
Trump Reportedly Plans To Blow $84,000 To Publicly Shame The Smithsonian
Urgent motion filed to stop carving of Trump’s name into US Institute of Peace building
Judge demands ’emergency’ answers as forklift rams Kennedy Center after Trump threat
Everyone hates Workday
Trump administration has cut or frozen $177 billion in grants across every state
Oh what a beauty! How the mangelwurzel is making a comeback

In Case You Missed It…

…a week of Mad Biologist links:

As Part of Early ‘Detrumpification’, Democrats Should Investigate the ‘Optimus Prime’ Scandal

The Singularity, Such As It Is, Will Be Boring and Mundane

If Democrats Take Back the House, They Should Impeach Hegseth, Kennedy, and Vought

Yet Another OK Week for D.C.’s Crime Stats

How we can beat China

Art by GPT-6, original by Zhang Zeduan

In 1946, George Kennan, who was acting as the head of the U.S. Embassy in Moscow, wrote a message to the Secretary of State, known as the “Long Telegram”. In the Long Telegram, Kennan laid out a theory of how Soviet power could be defeated. He argued that Soviet leaders would always be hostile to the U.S., but that they were also cautious — they wouldn’t recklessly start a world war like Germany had. He also argued that the Soviet system was weak and unstable, and that given enough time, it would collapse from its own internal contradictions. This became known as the doctrine of “containment”, and it ended up being exactly the strategy that the U.S. used to win the Cold War. It took 45 years for the strategy to work and the USSR to fall.

I am certainly no George Kennan. I’ve never lived in China, I haven’t been there in many years, I don’t speak Chinese, and I certainly don’t talk to any leaders there. I’m also not a career diplomat or a professional geopolitics guy of any kind. So although I’m going to write a blog post with the same general goal as Kennan’s Long Telegram, I don’t want to suggest that it’s anywhere near as authoritative or insightful.

But I’m still going to write a post about “how to beat China”, because I think it’s useful to think through these sorts of big strategic questions. This post is also an important follow-up to a series of posts I wrote about geopolitics during the Biden years, about U.S.-China competition:

(There were more, but I figure your appetite for clicking through old posts is limited.)

The basic premise of those posts was that the competition between a China-led New Axis and the U.S. and our old allies — Europe, Japan and Korea, hopefully India, etc. — would define the upcoming era of geopolitics. And my conclusion was that we should use an updated version of the basic strategy we used against the USSR in Cold War 1. I recommended that we should build up economic power within our bloc of allies, establish military deterrence, and wait for China’s internal contradictions to do the heavy lifting of removing the threat.

That strategy was always going to be harder than it was in Cold War 1, because China A) is a lot bigger than the USSR, B) has a better economic model, and C) is a lot more globally integrated. The strategy I recommended was much tighter economic cooperation between the U.S. and a maximally large set of allies, to build up a bloc capable of overmatching even the mighty Chinese manufacturing juggernaut. This is the approach that’s being promoted by experts like Rush Doshi and Kurt Campbell. If you’re interested in reading about how that approach would work, and why it would be helpful, I recommend Doshi’s interview with ChinaTalk:

ChinaTalk
Allied Scale: Net Assessment with Rush Doshi
How should America maximize its odds when competing with China? Can Trump’s approach to alliances succeed in strengthening deterrence? And what will it take for China to diplomatically capitalize…
Read more

Anyway, I still think building up an anti-China economic juggernaut would be a great thing to do, and I still think the U.S. would benefit from closer economic integration with its friends and allies. But I think the election of Trump shows why this strategy probably isn’t going to work. The United States is simply too internally divided to engage in the sort of far-seeing, purposeful, smart kind of international competition that we pursued so effectively in the 20th century. Americans care more about fighting other Americans than about fighting the Chinese, and that state of affairs will persist for a while.

Donald Trump’s presidency is an outgrowth of America’s internal divisions; he cares much more about fighting his own internal enemies than about prosecuting international rivalries. He has willfully degraded or torn up America’s key alliances, especially with Europe, and created enmity where friendship once reigned. He has flagrantly trampled on every principle of human rights, mutually beneficial economic cooperation, democracy, and international non-aggression that the post-WW2 U.S.-led international order fought to uphold. He has, in short, made it impossible to prosecute the sort of Cold War 2 strategy that I spent the Biden years advocating.

This doesn’t mean America’s alliance system is necessarily dead forever. As Doshi and Campbell pointed out in a recent article, the old alliances could be reconstituted, if America credibly overcame its internal divisions and returned to being the mostly unified, stable, reliable great power that it was last century. But overcoming those divisions is going to take decades at the very least, and that’s exactly the window of time during which China will be at its peak of relative power.

So I think we’ve basically missed the chance to use that strategy effectively, and I’ve recalibrated my thinking. This post is meant to explain my recalibration. I do think there’s a path to defeating Chinese power, but it doesn’t look like what I previously had in mind.

Who is “we”, what does it mean to “beat” China, and why should we even care?

Before getting to the question of how to beat China, we need to answer the questions of who and why should do this “beating”. In 2024 the answer was obvious — the U.S. and its erstwhile allies still represented a far more liberal power than China and its allies, so ensuring that the former was more powerful than the latter would further the cause of global liberalism. China threw minorities in concentration camps, threatened its neighbors with invasion and war, supported Russia’s invasion of Ukraine, and repressed free expression all over the world. That was — and is — behavior worth resisting.

But the election of Trump changes that calculus. Trump threatens other countries with invasion, and sometimes even attacks them if he thinks they’re weak enough. He can’t throw minorities in camps just for being minorities yet, but he’s building a sort of gulag archipelago under the fig leaf of immigrant detention. His foreign policy is increasingly based on “civilizational” concerns1 instead of human rights or democracy.

Trump has thus forfeited America’s claim to moral superiority over China. It’s true that Trump and his ragtag movement are far less competent than the Chinese Communist Party, but that doesn’t mean that increasing American power will lead to a more liberal world. At this point, it probably won’t. And of course Democrats will try to undo some of Trump’s geopolitical shifts, but if past experience is any guide, they will have only marginal success. Moreover, the GOP is not going to revert back to Reaganism after Trump leaves office; they will keep fighting for their illiberal visions both at home and abroad for a long time to come.

None of that means, however, that liberalism as an idea is dead. Europe, Japan, and many other countries that were on America’s side in the Cold War still uphold the basic ideas of democracy and human rights, as do many developing nations. The average person living in Tokyo or Paris or Bangalore still enjoys far more personal freedom and dignity than does the average person in Shenzhen or Shanghai.

And even leaving aside the relative merits of different social and governmental systems, there are plenty of people in plenty of countries who simply don’t deserve to be trampled on by the bootheel of the CCP. Japanese people, Indians, Filipinos, Koreans, and so on deserve to be able to determine their own destiny without being subject to the whims of the powerful men in Beijing. And Ukrainians, Estonians, Poles, etc. deserve to be free from the Russian tyranny that China quietly backs.

So when I say “how we can beat China”, what I actually mean is how we can keep China from dominating other countries. This doesn’t mean we should try to make China collapse, or impoverish the Chinese people, etc. Instead, it just means how smaller nations — and nations who value human rights and democracy — can resist Chinese power.

And at some point, if the U.S. ever does manage to tamp down its internal divisions and return to being a liberal power, it will still mean the same thing.

Many hegemons eventually beat themselves

Read more

GM Revives CarPlay for 2027 Trucks

Natalie Neff, Autoweek:

General Motors is reversing course after having begun to remove Apple CarPlay from its vehicles, showing off instead a redesigned infotainment interface for the 2027 Chevrolet Silverado and GMC Sierra pickups that melds the smartphone apps with the truck’s native vehicle controls on the same screen.

The new system, which will roll out later this year, marks a significant walk-back after the automaker faced widespread criticism for removing Apple CarPlay and Android Auto from its Ultium-based electric vehicles beginning with the 2024 Chevrolet Blazer EV.

One of the dumbest own goals in recent memory. Tesla gets away with not supporting CarPlay because they created their own system that’s so good that many Tesla owners prefer it, or, at least find it good enough as an alternative. GM tried to replace CarPlay with a system that no one liked.

 ★ 

Marques Brownlee’s iPhone 18 Pro Review

He takes the same “this is pretty much exactly what Apple used to label an ‘S’ year” angle I did, so, unsurprisingly, I think his review is spot-on. Brownlee emphasizes one point that I should have, but didn’t: according to Apple’s published specs, the regular iPhone 18 Pro gets longer battery life than the iPhone 17 Pro Max. That’s just a year-over-year spec that anyone can understand, for an attribute that everyone cares about.

Sidenote, per that point: Brownlee wonders why Apple still refuses to publish the capacities of iPhone batteries in mAh. We eventually find out when people take new iPhones apart, so why not publish the numbers? Brownlee only mentions batteries but I’ll point out that Apple still does the same thing with RAM. There is no spec on the tech specs page for any iPhone telling you how much RAM it has. In some ways this is a little silly, but the way Apple thinks about it is that they only publish specs that they think are useful for comparison. Storage is useful for comparison, so Apple dutifully publishes storage capacities. In fact that is the spec by which they price higher tiers. Battery life is useful for comparison, so Apple publishes that as a spec, based on multiple use cases. But mAh capacity of the battery, to Apple’s mind, isn’t useful for comparison. Not for comparison to Android phones, especially, and not even for comparison to other iPhone models. If they published a spec that says iPhone A has a 4,000 mAh battery and some Samsung phone has a 5,000 mAh battery, one could conclude that the Samsung phone “wins”. Obviously a bigger battery leads to longer battery life, but battery capacity alone doesn’t tell the battery life story for any device. The main reason that the year-over-year iPhone Pro battery life has improved so much that the regular iPhone 18 Pro gets longer battery life than the 17 Pro Max isn’t related to battery size — it’s the increased efficiency of the A20 Pro SoC (and perhaps secondarily the improved thermal system). Same thing for RAM. To Apple’s mind, iPhones perform much better with less physical RAM than Android phones do, so they don’t think RAM-vs.-RAM is a useful comparison. In fact, they think looking at RAM would be misleading. So they don’t publish it. They know that those of us who care are going to learn how much RAM is in these phones (12 GB, just like last year’s 17 Pro models), and how big the batteries are in mAh. But they’re only going to list the specs that they think are useful for comparison purposes.

 ★ 

Bot-free self-hosted analytics with GoatCounter on NixOS

In 2016, I removed Google Analytics from this blog to avoid being complicit in feeding the biggest machine for harvesting personal data. Instead, I relied on GoAccess to analyze my server logs.1 For the past couple of years, the statistics have made no sense, despite my attempts to filter bots: AI scrapers inflate the number of visitors to around 2,000 per day. Eventually, I settled on GoatCounter, an open-source, privacy-friendly web analytics platform. I replaced the JavaScript client to filter bots more aggressively and added a CSS fallback. To improve reliability, I implemented a local proxy running on each of the five web servers serving this blog. The rest of this post details how these pieces fit together and how I deploy them on NixOS. ❄️

Why GoatCounter?

GoatCounter does not collect personal data: instead of storing the reader’s IP address or relying on cookies, it creates a session identifier valid for 8 hours from the user agent and the IP address. Its feature set is modest but sufficient for a blog. If you want to look at the interface, GoatCounter’s author runs a public instance for his site. A hosted version lets you try it before running your own instance. With a single binary and an SQLite database, GoatCounter is one of the lightest self-hosted solutions. Privacy-friendly alternatives, in increasing order of complexity, include Umami, Plausible, and Rybbit.

GoatCounter dashboard showing some statistics from my blog, including an
article on the spanning tree protocol with 1,224 views for the past week, the
referrers, and the breakdown of browsers (52% Chrome, 32% Firefox, with 16% for
Firefox 155 and 6% for Firefox 156)

Custom JavaScript client

GoatCounter includes a small JavaScript client—2,189 bytes minified and gzipped. It ships some features I don’t use: a visitor counter, tracking clicks, configurable settings, etc. I replace it with this function to register a hit:

const count = ({ event, title } = {}) => {
  const params = new URLSearchParams({
    p: event || location.pathname,
    t: title || document.title,
    r: document.referrer,
    q: location.search,
    s: document.documentElement.clientWidth,
    e: !!event,
    rnd: Math.random().toString(36).slice(2, 7),
  });
  fetch(`/count?${params}`, { keepalive: true }).catch(() => {});
};

To filter bots,2 I go the extra mile by requiring a user interaction—an idea I stole from Bear Blog.

let sendHit = () => (sendHit = () => {}, count());
["touchmove", "mousemove", "keydown", "pointerdown"].forEach((eventName) =>
  document.addEventListener(eventName, sendHit, {
    once: true,
    passive: true,
  }),
);

If a reader has disabled JavaScript in their browser, I record the hit using a CSS image. The :hover pseudo-class loads it only after an interaction, another trick stolen from Bear Blog. About 2% of my visitors fit into this bucket.3

<!DOCTYPE html>
<html lang="en" class="nojs">
  <head>
    <script>
      // The JavaScript code for this blog requires ES6
      if ("noModule" in HTMLScriptElement.prototype)
        document.documentElement.classList.remove("nojs");
    </script>
  </head>
  <body>
  <!-- ... -->
    <style>
      .nojs body:hover {
        border-width: 0;
        border-image: url('/count?p=/en/blog/2026-kpi-goodhart&t=Building...&r=NoJS&e=false');
      }
    </style>
  </body>
</html>

Where GoAccess reported around 2,000 visitors a day, GoatCounter counts fewer than 200 humans.4 I assume AI scrapers use a low-effort approach: if the content is available without barriers, as on this blog, they don’t spawn a complex mechanized browser that could trigger a page view. Even crawlers running JavaScript, like Googlebot with its headless Chromium, do not interact with the page and never trigger the events I listen to. The interaction-based “proof of humanity” I use is likely to keep working.

Local proxy

Five servers across the world in Europe and in North America serve the content of this website, but GoatCounter runs on only one of them. To avoid losing track of visitors when GoatCounter is down, I run a local proxy listening on the same /count endpoint. On each server, it stores the hits in memory with a buffer large enough to survive several days of downtime. It sends them in batches to the upstream backend using the /api/v0/count authenticated endpoint.

Servers on a map. web02 is in Paris, web03 in Helsinki, web04 in Nuremberg,
web05 in Ashburn, web06 in Chicago.

I proposed the code for the proxy in pull request #909. GoatCounter’s maintainer declined to maintain so much code for such a niche use case. As a fellow open-source developer, I often hold the same position for my own projects: a one-time contributor effort may translate into a long-term maintainer commitment.

I expose the endpoint for the proxy on the domain of this website to evade ad blockers. This sounds like I don’t respect the reader’s choice, but as GoatCounter is privacy-friendly, I find it acceptable.

location = /count {
  access_log off;
  proxy_pass http://127.0.0.3:8087/count;
  proxy_pass_request_headers off;
  proxy_set_header Accept-Language $http_accept_language;
  proxy_set_header User-Agent $http_user_agent;
  proxy_set_header X-Real-Ip $remote_addr;
}

Deploying on NixOS

My web servers run NixOS, a declarative Linux distribution with built-in configuration management. I manage this small fleet with Colmena, a stateless deployment tool for NixOS. My configuration is available on GitHub.

Deploying applications in containers

For better isolation, each application runs inside an ephemeral lightweight container, powered by systemd-nspawn. Each container runs a stripped-down NixOS instance. A module wraps NixOS’s containers options to avoid repeating the same options for each application.5 The containers share their network namespace with the host: the additional isolation is not worth the increased complexity. For a smaller footprint, I also disable a few non-essential services.

{ config, lib, ... }:
let
  cfg = config.luffy.containers;
in
{
  # User-configurable settings for our custom module
  options.luffy.containers = lib.mkOption {
    default = { };
    description = "Ephemeral containers sharing the host network.";
    type = lib.types.attrsOf (lib.types.submodule {
      options = {
        config = lib.mkOption {
          type = lib.types.deferredModule;
          default = { };
          description = "NixOS configuration of the container.";
        };
      };
    });
  };

  # Translate our options to NixOS containers
  config = {
    containers = lib.mapAttrs
      (name: container: {
        ephemeral = true;
        autoStart = true;
        privateNetwork = false;
        extraFlags = [ "--resolv-conf=replace-host" ];
        config = {
          imports = [ container.config ];
          networking.firewall.enable = false;
          system.stateVersion = config.system.stateVersion;
          systemd.services = {
            console-getty.enable = false;
            systemd-logind.enable = false;
            systemd-oomd.enable = false;
          };
        };
      })
      cfg;
  };
}

To configure a GoatCounter instance running in a container and listening on 127.0.0.4:8088, we import the module6 and declare the container in the config.luffy.containers attribute set:

{ pkgs, config, ... }: {
  imports = [ ./modules/container.nix ];
  config.luffy.containers.goatcounter = {
    config = {
      services.goatcounter = {
        enable = true;
        address = "127.0.0.4";
        port = 8088;
        proxy = true;
      };
    };
  };
}

As the containers are ephemeral, we need to keep persistent data in directories on the host. We add a mounts option and ask NixOS’s containers to expose the configured directories through the bindMounts option.

{ config, lib, ... }:
let
  cfg = config.luffy.containers;
in
{
  options.luffy.containers = lib.mkOption {
    type = lib.types.attrsOf (lib.types.submodule {
      options = {
        mounts = lib.mkOption {
          type = lib.types.listOf lib.types.str;
          default = [ ];
          description = "Host directories mounted read-write at the same place.";
        };
      };
    });
  };

  config = {
    containers = lib.mapAttrs
      (name: container: {
        bindMounts =
          lib.genAttrs container.mounts (path: { hostPath = path; isReadOnly = false; });
      })
      cfg;
  };
}

For example, to persist GoatCounter’s database in the /var/db/goatcounter directory on the host, we add the directory to the mounts option and alter the service definition to tell GoatCounter where the database is.

{ config, ... }:
let
  databaseDirectory = "/var/db/goatcounter";
in {
  config.luffy.containers.goatcounter = {
    mounts = [ databaseDirectory ];
    config = {
      services.goatcounter = {
        extraArgs = [ "-db=sqlite+${databaseDirectory}/db.sqlite" ];
      };
    };
  };
}

A container may also need some secrets. Colmena can upload secrets without storing them in the Nix store. We add a keys option to our containers. It takes an attribute set mapping secret names to the commands to populate them. Then, the module declares the required secrets to Colmena in the deployment.keys option, makes the container depend on the presence of the secrets, and exposes them to the container.

{ config, lib, ... }:
let
  cfg = config.luffy.containers;
in
{
  options.luffy.containers = lib.mkOption {
    type = lib.types.attrsOf (lib.types.submodule {
      options = {
        keys = lib.mkOption {
          type = lib.types.attrsOf (lib.types.listOf lib.types.str);
          default = { };
          description = "Secrets, as a command to run locally. They are mounted in /etc.";
        };
      };
    });
  };

  config = {
    # Colmena uploads each secret in `/var/keys` and make them available
    # to the group "keys".
    deployment.keys = lib.concatMapAttrs
      (_: container: lib.mapAttrs
        (_: keyCommand: {
          inherit keyCommand;
          group = "keys";
          permissions = "0640";
          destDir = "/var/keys";
        })
        container.keys)
      cfg;

    # The container can only start if the required secrets are available.
    systemd.services = lib.mapAttrs'
      (name: container:
        let
          units = map (key: "${key}-key.service") (lib.attrNames container.keys);
        in
        lib.nameValuePair "container@${name}" {
          requires = units;
          after = units;
        })
      cfg;

    # Mount each secret inside the container.
    containers = lib.mapAttrs
      (name: container: {
        bindMounts = lib.mapAttrs'
          (key: _: lib.nameValuePair "/etc/${key}" {
            hostPath = "/var/keys/${key}";
            isReadOnly = true;
          })
          container.keys;
      })
      cfg;
  };
}

For example, GoatCounter needs credentials to download the GeoIP database. I provide a local command to fetch the secret from my password manager and expose it inside the container through the /etc/goatcounter.env environment file.

{ pkgs, config, ... }: 
let
  keyCommand = variable: [
    "${pkgs.runtimeShell}"
    "-c"
    "pass show personal/nixops/secrets | grep '^${variable}='"
  ];
in {
  config.luffy.containers.goatcounter = {
    keys."goatcounter.env" = keyCommand "GOATCOUNTER_GEODB";
    config = {
      systemd.services.goatcounter.serviceConfig = {
        EnvironmentFile = "/etc/goatcounter.env";
        SupplementaryGroups = [ "keys" ];
      };
    };
  };
}

GoatCounter server

Nixpkgs already packages GoatCounter. By overriding the src and vendorHash attributes, I reuse its definition for my custom version with the proxy:

{ goatcounter, fetchFromGitHub }:
goatcounter.overrideAttrs (_: {
  src = fetchFromGitHub {
    owner = "vincentbernat";
    repo = "goatcounter";
    rev = "feature/proxy";
    hash = "sha256-dJRlQlFu3tjcEgabT1LEbyFrasJlhmYu4L/T7EkoNcY=";
  };
  vendorHash = "sha256-c9Q5OrbZR+q6pD3SgPPWe8JUzcZco1AVUKGaV61k5DE=";
})

I wrote a NixOS module to encapsulate GoatCounter: the container definition, the service definition, and the secrets. The module accepts the following options: package, serve.enable, serve.listenAddress, serve.port, and serve.databaseFile. I already detailed the container configuration in the previous section. In the end, I chose not to reuse the GoatCounter module from NixOS: it’s small, so it’s better to insulate my module from unexpected future changes.

{ config, pkgs, lib, ... }:
let
  cfg = config.luffy.goatcounter;
  databaseDirectory = builtins.dirOf cfg.serve.databaseFile;
  chown = "${pkgs.coreutils}/bin/chown -R";
in {
  config.luffy.containers.goatcounter = {
    config.systemd.services.goatcounter = {
      description = "GoatCounter Web Analytics";
      wantedBy = [ "multi-user.target" ];
      serviceConfig = {
        EnvironmentFile = "/etc/goatcounter.env";
        SupplementaryGroups = [ "keys" ];
        DynamicUser = true;
        Restart = "always";
        ExecStart = lib.escapeShellArgs [
          (lib.getExe cfg.package)
          "serve"
          "-listen=${cfg.serve.listenAddress}:${toString cfg.serve.port}"
          "-tls=none"
          "-db=sqlite+${cfg.serve.databaseFile}"
          "-automigrate"
        ];
        # Transfer database ownership to dynamically assigned user "goatcounter".
        ExecStartPre = "+${chown} goatcounter:goatcounter ${databaseDirectory}";
        ReadWritePaths = databaseDirectory;
      };
    };
  };
}

The following snippet configures GoatCounter to listen on 127.0.0.4:8088:

{
  luffy.goatcounter = {
    serve = {
      enable = true;
      listenAddress = "127.0.0.4";
      port = 8088;
    };
  };
}

The last step is to configure nginx to expose GoatCounter on the Internet. I disable the /count endpoint as the local proxy handles it.

{ config, ... }:
let
  cfg = config.luffy.goatcounter.serve;
in
{
  services.nginx.virtualHosts."goatcounter.luffy.cx" = {
    forceSSL = true;
    locations = {
      "/" = {
        proxyPass = "http://${cfg.listenAddress}:${toString cfg.port}";
      };
      "= /count".extraConfig = ''
        return 404;
      '';
    };
  };
}

GoatCounter proxy

The same NixOS module configures the local proxy, with the following options: proxy.enable, proxy.listenAddress, proxy.port, and proxy.site—the site receiving the batches of page views. The local proxy has no persistent data, but it needs the API key to authenticate to the main GoatCounter instance: its container uses the keys option but not the mounts option.

{ config, pkgs, lib, ... }:
let
  cfg = config.luffy.goatcounter;
  keyCommand = _: [ "…" ];
in
{
  config.luffy.containers.goatcounter-proxy = {
    keys."goatcounter-proxy.env" = keyCommand "GOATCOUNTER_API_KEY";
    config.systemd.services.goatcounter = {
      description = "GoatCounter Proxy.";
      wantedBy = [ "multi-user.target" ];
      serviceConfig = {
        EnvironmentFile = "/etc/goatcounter-proxy.env";
        SupplementaryGroups = [ "keys" ];
        DynamicUser = true;
        Restart = "always";
        ExecStart = lib.escapeShellArgs [
          (lib.getExe cfg.package)
          "proxy"
          "-site=${cfg.proxy.site}"
          "-listen=${cfg.proxy.listenAddress}:${toString cfg.proxy.port}"
          "-ratelimit=10/1"  # 10 requests per second per IP
        ];
      };
    };
  };
}

For each server, I enable the local proxy with the following snippet. The nginx configuration shown earlier exposes the /count endpoint under the same domain as my blog.

{
  luffy.goatcounter = {
    proxy = {
      enable = true;
      site = "goatcounter.luffy.cx";
      listenAddress = "127.0.0.3";
      port = 8087;
    };
  };
}

Backup of the SQLite database with Litestream

Litestream is a streaming replication tool for SQLite databases. It compresses the changes committed to the write-ahead log (WAL) next to the database and sends them to a remote destination. I encapsulate its configuration in a NixOS module, which takes an attribute set databases mapping a name to the path of the database to back up.

Litestream also runs in a container. I mount the databases to replicate, as well as the secrets to push the backups to a Hetzner storage box using SFTP:

{ config, pkgs, lib, ... }:
let
  cfg = config.luffy.litestream;
  databaseDirs = lib.unique (map builtins.dirOf (builtins.attrValues cfg.databases));
in
{
  config = lib.mkIf (cfg.databases != { }) {
    luffy.containers.litestream = {
      mounts = databaseDirs;
      keys."litestream.env" = [
        "${pkgs.runtimeShell}"
        "-c"
        "pass show personal/nixops/secrets | grep '^SQLITE_BACKUP_'"
      ];
    };
  };
}

Inside the container, I configure Litestream through NixOS’s services.litestream options:

  • full snapshots every day, kept for 15 days,
  • three levels of compaction for transaction files: 5 minutes, 30 minutes, and 3 hours,
  • auto-recovery,7
  • replica stored in a directory matching the host name, and
  • credentials read from /etc/litestream.env and exposed through variable expansion.
{ config, pkgs, lib, ... }:
let
  cfg = config.luffy.litestream;
in
{
  config.luffy.containers.litestream = {
    config = {
      # The databases belong to dynamically allocated users, whose UID is
      # not known here, so Litestream runs as root.
      systemd.services.litestream.serviceConfig = {
        User = lib.mkForce "root";
        Group = lib.mkForce "root";
      };
      # Use NixOS service.
      services.litestream = {
        enable = true;
        environmentFile = "/etc/litestream.env";
        settings = {
          auto-recover = true;
          snapshot = {
            interval = "24h";
            retention = "360h";
          };
          levels = [
            { interval = "5m"; }
            { interval = "30m"; }
            { interval = "3h"; }
          ];
          dbs = lib.mapAttrsToList
            (name: path: {
              inherit path;
              replica = {
                type = "sftp";
                host = "\${SQLITE_BACKUP_HOST}";
                user = "\${SQLITE_BACKUP_USER}";
                password = "\${SQLITE_BACKUP_PASSWORD}";
                host-key = "\${SQLITE_BACKUP_HOSTKEY}";
                path = "${config.networking.hostName}/${name}";
              };
            })
            cfg.databases;
        };
      };
    };
  };
}

To back up GoatCounter’s database, I declare a goatcounter attribute in luffy.litestream.databases, set to the database path:

{ config, ... }:
let
  cfg = config.luffy.goatcounter.serve;
in
{
  luffy.litestream.databases.goatcounter = cfg.databaseFile;
}

On the SFTP server, we can inspect Litestream’s work, with the compacted transactions and the full snapshots:

ls web02/goatcounter/ltx
web02/goatcounter/ltx/0
web02/goatcounter/ltx/1
web02/goatcounter/ltx/2
web02/goatcounter/ltx/3
web02/goatcounter/ltx/9
ls -lh web02/goatcounter/ltx/1
29.1K Sep  5 01:25 0000000000003f2a-0000000000003f2b.ltx
72.4K Sep  5 02:03 0000000000003f2c-0000000000003f2d.ltx
63.3K Sep  5 02:24 0000000000003f2e-0000000000003f2f.ltx
[…]
ls -lh web02/goatcounter/ltx/9
 8.5M Sep  5 02:00 0000000000000001-0000000000003f2b.ltx
 8.5M Sep  6 02:03 0000000000000001-0000000000004008.ltx
 8.6M Sep  7 02:03 0000000000000001-00000000000043a8.ltx
[…]

We can restore the database from the backup with a few shell commands. First, we stop the containers. Then, we move the damaged database away, invoke litestream restore from the right environment, and restart the containers.8

# systemctl stop container@goatcounter container@litestream
# mv /var/db/goatcounter/db.sqlite{,.old}
# ( . /etc/nixos-containers/litestream.conf ; 
>   set -a ; . /var/keys/litestream.env ; set +a ;
>   $SYSTEM_PATH/sw/bin/litestream \
>     restore -config $SYSTEM_PATH/etc/litestream.yml /var/db/goatcounter/db.sqlite)
# ls -lh /var/db/goatcounter/db.sqlite
-rw-r--r-- 1 root root 20M Sep 20 07:33 /var/db/goatcounter/db.sqlite
# systemctl start container@goatcounter container@litestream

Ten years after removing Google Analytics, JavaScript-based analytics is back on this blog, but without storing cookies or IP addresses, and without involving a third party. I still write for myself first, notably because it lets me dig into a topic and refer back to it years later. But knowing a bit more about my fellow human readers is a nice bonus, even the ones disabling JavaScript. 🐐


  1. Nginx scrambles IP addresses before storing them, thanks to the ipscrub nginx module

  2. GoatCounter already filters some bots based on the user agent or the IP address. But AI scrapers lie about their user agent and hide behind residential proxies

  3. Without JavaScript, I cannot send the real referrer. I insert “NoJS” instead. 

  4. I am missing the humans reading the RSS feed. I am not comfortable adding a tracking pixel, and bots are likely to fetch it, compromising the statistics. I’ll live without counting these readers. 

  5. A NixOS module is a function receiving the configuration of the whole system as config and returning three attributes:

    • imports adds other modules to import,
    • options declares user-configurable settings, each with a type and a default value, and
    • config sets values for options declared by any module, like containers from NixOS.

    If a module does not need to declare options, you can return the config attribute set directly. When a module does not require any argument, you can define it as an attribute set instead. 

  6. Most of the time, you don’t need an explicit import. NixOS automatically imports the modules shipped with Nixpkgs. For my own modules, some machinery also imports them automatically. 

  7. Litestream warns against using the auto-recover option as it can cause data loss. But I don’t properly monitor my servers and I prefer uninterrupted backups to a slight chance of losing the last few records. 

  8. In my case, the process is slow: around 20 minutes for a 20 MiB database. You can test by restoring to a copy with the -o option, but you still need to stop the Litestream container. 

Sunday assorted links

1. Nobel Laureates in support of the California billionaire wealth tax include Krugman, Acemoglu, Diamond, Stiglitz, Banerjee, and Duflo (FT).

2. Secretariat as GOAT.

3. Dead brains and the piano??

4. “A real contribution of AI is showing the critical weaknesses of humans and human structures.”  But can we take it?

5. When did the Chinese reach New Zealand? (speculative)

6. “Everyone needs to realize we are fighting the summation of the last 100 years of war that never got settled they just slowed down at times

7. “you have no idea how fast the world will accelerate AI progress if a world war began” — no major war (in addition to the status quo) would be one excellent move in the direction of AI (and other) safety.

The post Sunday assorted links appeared first on Marginal REVOLUTION.

       

Comments

 

This shot captured an unexpected silhouette. Which is it? This shot captured an unexpected silhouette. Which is it?


House prices survived the last interest-rate rise. Will they this time?

Supports that shored up the housing market when borrowing costs last rose are gone

Muse

It is excellent.  It has one of the best user interfaces I have seen on any product.  The model is good and the speed and clarity exemplary.  It integrates with your calendar and email, if that is want you want, very easily and smoothly.  It all feels very…American.

Kudos to the team!

The post Muse appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

Trying the Software factory pattern.

One of the interesting challenges of the AI ecosystem in 2026 is that new, effective patterns emerge faster than I can adopt them. I’ll find a handful, get back to work, and realize a month later that I’d missed four or five more. The adoption cycle for Imprint this year has been something like:

  1. January: get every engineer onto Claude Code every single day
  2. March: ok, let’s also get everyone else onto Claude Code or Claude Cowork every single day
  3. April: local development is bottlenecked on checkout and worktree model, instead create ~10 local workspaces which each have an independent checkout of every repository, and operate at the workspace level, not at the repository level, so it can generate cross-repository pull requests across frontend, backend, infrastructure and data monorepos
  4. June: oh boy, agent-driven development is heavily constrained by lack of a common task management system with higher visibility and less permission complexity than Jira, so let’s migrate the entire company over to Linear and hard stop on Jira
  5. July: yikes, now we have visibility into all these tickets, many of them are trivial but managing them through local development isn’t scaling, let’s roll out an orchestrated harness which internally we call “Agent Fleet”, along the lines of Stripe’s Minions

The most recent question for me has been figuring out how to adopt the software factory pattern. (After some light research, the specific AI-context origin of this term is slightly messy to attribute, but I think it might be Justin McCarthy in February 2026’s Software Factories And The Agentic Moment.)

The software factory pattern is looping on a broad goal, and then relying on the harness to drive progress towards that goal. Our first pass at implementation is fairly basic:

  1. An agent skill /linear-project-loop which reads in a Linear project and starts by auditing that project’s goal definition on these dimensions:

    1. An RFC in Notion that describes the project’s goals, how those goals are measured, and the general approach
    2. A Datadog dashboard or Snowflake queries that measure progress against those goals

    If those are missing, or the Linear project is missing in its entirety, it iterates with you on creating those missing tools.

  2. Then it reviews the state of the metrics and issues for the project. If new work is identified, it adds those issues to the project. It updates the state of issues that have moved.

  3. It works on the non-blocked tasks based on the project’s current state. This is often writing a pull request, updating a pull request, pinging for review, asking a clarifying question, etc.

  4. When a task completes, if the project description is fresh, it takes on the next task. If the description hasn’t been updated in a while, it reruns the loop starting with the first step.

Right now I am running this locally in a local harness, but it’s working well enough that I anticipate moving the behavior to be driven by the same orchestrated harness that we assign one-off tasks to.

What I particularly like about the factory pattern is that it parallels very closely how I’ve been working locally, while forcing me to recognize the places where I was accidentally hording parts of the state for myself regarding the goals of the project. I was already asking agents to iterate on specific Linear projects, but they didn’t have the ability to evaluate if they were going in the right direction, or if it was missing necessary tasks. Now it does. The other place this has been extremely helpful for me is checking in on projects post release. For example, I shipped our passkeys implementation earlier this year, but some months go by without my checking in on how it’s going. If we saw adoption spike, or error rates start to turn, I might miss it, but running the factory in a less frequent post-release mode would catch it immediately.

The final thought that’s been interesting to me is how much all of the pieces here compound only to the extent that you have the other pieces. For example, this factory pattern depends on having Datadog MCP and Snowflake access available to manage goal-tracking, but it also depends on Linear being the single source of state for the company’s work, and an orchestrated harness that can perform work independently from your laptop. Keeping up with this many migrations is a fascinating industry moment.

September 19, 2026

On September 19, 1676, three hundred and fifty years ago today, Nathaniel Bacon and his followers burned Jamestown, the capital of the Virginia Colony. The destruction of the seat of government was the culmination of a year of conflict between Governor Sir William Berkeley and poor settlers in the colony. Fears of another such uprising in the future led Virginia lawmakers to make sure poor men would not make common cause, passing laws to divide them along racial lines.

The crisis had begun a year before, in the fall of 1675, when Thomas Mathew refused to pay members of the Doeg tribe what they believed they were owed for goods they had sold him. They raided his farm on the Northern Neck of Virginia, taking some of his pigs. A number of Doegs were killed in the skirmish.

The Virginia militia retaliated for the raid but mistakenly fell on a village of Susquehannocks, who were actually allied with the Virginia government. Blindsided and furious, the Susquehannocks began to raid local farms.

The raids set a smoldering power struggle within the colony ablaze.

Since the colony’s beginning in 1607, both English custom and the drive to produce cash crops had created a clear line between men who had land and power and those who worked for them. Horrific death rates made those men who had paid for the passage of workers from England to North America drive them hard to get as much labor out of them as possible before they died.

After the arrival of Africans to the colony in 1619, those enslaved people joined indentured white workers to make common cause against their “masters.” They worked and socialized together and, according to advertisements and court cases, ran away, committed crimes, and had children together.

They also suffered similar punishments when they ran afoul of the law. And those few who lived past the deadly early years of their servitude shared similar access to the benefits of freedom, although slaves could not simply outlive their contracts but had to buy their way out of bondage with money they earned in their spare time.

At first, so many poor Virginians died in the colony that the few who survived posed little threat to their former masters. But by the 1660s, the survivors had grown into a large population of poor men, white and Black both, who were free but could not afford prime land in the eastern part of the colony, so they migrated to the western frontier hoping to become farmers.

There, these settlers thoroughly resented the eastern government that seemed to ignore their interests. In 1675 they saw the increased fighting with the local tribes as an opportunity to weaken those tribes and take their lands.

But Governor Berkeley disagreed. He wanted to avoid an expensive war and he wanted to honor a 1646 treaty under which allied tribes paid an annual tribute to the colonial government and fought alongside the English against tribes that didn’t have such an agreement.

Nathaniel Bacon had arrived in the colony in 1674. He was well connected and wealthy—he was actually related to Berkeley by marriage—but was frustrated that Berkeley wasn’t following his advice. Bacon began to speak for the angry westerners and by spring 1676 had welded them into a powerful coalition that was attacking local Indigenous tribes without the government’s blessing. Finally, Berkeley declared Bacon a rebel.

Under Bacon, vagrants and poor farmers, including former slaves and servants, went to war against the Pamunkey tribe and the Indigenous tribes who lived around them. And then they marched on Jamestown. On July 30, 1676, Bacon issued the Declaration of the People of Virginia, complaining that the governor had raised taxes too high, was corrupt, had put his own “ignorant” judges in place, and had failed to protect settlers against Indigenous Americans. He included a list of Berkeley supporters he called “Confederates, aiders, and assisters” of Berkeley’s perfidy. Bacon ordered them all to surrender to him within four days and declared that he and his men intended to confiscate their estates.

In a dramatic affront to the colonial system in which leaders held their positions by virtue of the Crown, Bacon signed his name “Nathaniel Bacon, Generall by Consent of the people.”

Bacon’s men held control of Jamestown from July through September before Berkeley’s forces forced them to retreat. Berkeley’s men abandoned the town when Bacon’s men tried to recapture it. Aware that more of the governor’s men were on their way, Bacon’s forces burned the town down on September 19.

On October 26, Bacon died from dysentery, the “Bloodie Flux,” and the rebellion fell apart. But the crisis had left the colony in ruin with its people dead or wounded, farms plundered or burned, crops ruined from lack of care.

In the wake of Bacon’s Rebellion, Virginia’s wealthy elite set out to preserve their control over the colony. They pushed Indigenous Americans off their land and enslaved those who fought back. From 1670 to 1715, colonists enslaved between 30,000 and 50,000 Indigenous Americans. Entire tribes disappeared, and white farmers moved onto their lands.

And the elites set out to drive wedges between Black slaves and white servants, establishing greater punishments for Black Virginians. In 1705 the Virginia Slave Codes pulled all those regulations together and went further. They prohibited Black Americans from owning cattle, hogs, or horses. They made it legal to kill an enslaved Virginian in the process of “correcting” them. And they made enslavement hereditary.

At the same time, they gave white servants new legal rights and limited the length of white indentures. The assembly passed laws requiring masters to provide white servants with food and clothing, as well as money to set themselves up after they earned their freedom. This, combined with a booming tobacco market, enabled more white men to buy land. The assembly also reduced the poll taxes for voting, making it easier for poor white men to vote.

And they made it costly for white and Black Virginians to socialize. Any white person attempting to marry across race lines would be fined and sent to jail, and the minister performing such a marriage would be fined the astonishing price of ten thousand pounds of tobacco. White servant women who had mixed-race children had to either pay a whopping fine or have their term of service extended for five years. And the child would be a slave until they turned thirty-one.

As leaders bound Black Americans more tightly into slavery, they courted white Virginians into joining the cultural and social world from which they had previously been excluded. Wealthier Virginians reached out to their less-prosperous neighbors, rubbing elbows with poorer white men in taverns and welcoming them into their imposing homes to emphasize that they were all friends.

Indeed, the needs of poor white landowners were not all that different from those of wealthier planters, and it was easy to believe that all Virginia voters had the same interests. They understood what it meant to be under the thumb of a tyrant, for they saw enslaved people and their enslavers all around them. They believed that owning land made a man independent, for that was their experience. And, unlike the royal officials who used their offices to enrich their friends, Virginia voters could argue that they had the best interests of the country at heart. They were free and independent.

They were, one might say, created equal.

Notes:

For more information about Jamestown, check out the work of my friends at

https://historicjamestowne.org/

https://en.wikisource.org/wiki/Declaration_of_the_People_of_Virginia

https://www.jyfmuseums.org/learn/research-and-collections/essays/a-history-of-bacons-rebellion-in-six-sources

https://www.nps.gov/jame/learn/historyculture/bacons-rebellion.htm

https://encyclopediavirginia.org/entries/bacons-rebellion-1676-1677/

Share

Market Design Impact Award to Yan Chen

 Here's the announcement from INFORMS:

Announcing the Winner of 2026 Market Design Impact Award

 "The Auctions and Market Design section of INFORMS is pleased to announce that Yan Chen, Daniel Kahneman Collegiate Professor of Information at the University of Michigan School of Information, has been selected as the recipient of the 2026 Market Design Impact Award. The award will be presented at the AMD Business Meeting at the INFORMS Annual Meeting in San Francisco, tentatively scheduled for Monday, November 2, 6:45–7:45 PM.

Award citation:
"For pioneering behavioral market design-combining theory, digital experiments, and large-scale field experiments-with lasting impact on the practice of market design, including the reform of Chinese college admissions, the organization of gig workers on ride-sharing platforms, and the design of recommender systems that increase contributions to digital public goods."

Now in its second year, the Market Design Impact Award recognizes major contributions to market design-original research from the past fifteen years that has had a lasting impact, directly or indirectly, on the field and/or the practice of market design.

Award Committee:
Eric Budish, The University of Chicago Booth School of Business
Tim Roughgarden, Columbia University
Nicolas Stier, Meta

Conflicts of interest were carefully handled such that they would not influence the committee decision. "

#########

Here's last year's (inaugural) award:

Friday, October 31, 2025 Market Design Impact Award to Hassidim, Romm, and Shorrer

 

Empathy gaps

I observed, for example, that when I got an invitation to travel to give a talk in a different time zone, it mattered what time zone I was in when I got the invitation.  if well rested, in my home time zone, I would think, No big deal, about making a long trip and would likely accept.  However, if I was jet-lagged in a different time zone when the invitation came in, and in reach with the misery of travel, I would be far more likely to decline.

…Perhaps you’ve noticed when taking a long-haul flight that waiting for a connecting flight feels much worse if your layover is close to your final destination.

That is from the new and very stimulating The Opposite of Happiness: How Bad Feelings Make and Break Us, by George Loewenstein.  A very Smithian book I might add.  Reading this book, one also wonders if the researchers who do behavioral economics are more depressed than average?  (“I’ve met many depressive characters in my life, but one of the most reliably miserable people I’ve ever known is my friend and collaborator Matthew Rabin.”)

The post Empathy gaps appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

UK productivity higher than we had thought

UK productivity rose at almost twice the pace previously estimated in the decade after the 2008 global financial crisis, according to new official figures that make Britain look much less of an international outlier.

Output per hour worked, the main measure of labour productivity, grew by an average of 1.3 per cent per year between 2009 and 2019, the Office for National Statistics said on Thursday. The ONS had previously estimated average annual growth of 0.7 per cent over the period.

The figure is based on a new “component-based” methodology that has already been adopted by many other national statistics institutes. It draws on a range of data sources to improve the ONS’s count of both the number of workers contributing to UK output and the number of hours worked.

Here is more from Delphine Strauss at the FT.

The post UK productivity higher than we had thought appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

The polity that is Singapore

…this month, Singapore launched a scheme promising actual cash to citizens as a reward for logging reading time on a government website.

It’s unlikely to make you megabucks – you have to rack up 50 reading sessions of at least 15 minutes to earn one Singapore dollar (£0.59), with only one logged session allowed per day. But behavioural scientists and psychologists told the Guardian such a scheme could still help boost a habit in precipitous decline…

We all know reading has long-term benefits, but a key element of the Singapore scheme hinges on introducing a short-term reward for the activity, mimicking the immediate dopamine hit of scrolling. In fact, the “gamified” element may be “smarter” than the financial reward offered, says Patrick Taylor, director of education at the Behavioural Insights Team (which originated in David Cameron’s Cabinet Office, also known as the “nudge unit”). “Having a manageable 15-minute daily goal, built around existing routines like commuting or bedtime, with streaks and tracking to keep progress visible” are the aspects that could make the scheme a success, he says.

Here is the full article.

The post The polity that is Singapore appeared first on Marginal REVOLUTION.

       

Comments

Related Stories

 

Heavy Rainfall and Flooding in the Southwest and Along the East Coast

WorkOS: How SSO Works and the Fastest Way to Add It

My thanks to WorkOS for sponsoring this last week — a big week — at DF.

SSO is table stakes for enterprise deals, but building it into your app yourself means writing SAML controllers, parsing XML assertions, and handling IdP-specific quirks for each provider. Learn how SAML flows work, the tradeoffs between building or buying, and best practices for security, routing, and UX.

Or, skip the hassle and add SSO with WorkOS. Read their developer’s guide to learn more.

 ★ 

Central Pacific Tropical Weather Outlook


Central North Pacific 2-Day Graphical Outlook Image
Central North Pacific 7-Day Graphical Outlook Image


561
ACPN50 PHFO 220518
TWOCP

Tropical Weather Outlook
NWS Central Pacific Hurricane Center Honolulu HI
Issued by NWS National Hurricane Center Miami FL
800 PM HST Mon Sep 21 2026

For the central North Pacific...between 140W and 180W:

Active Systems:
The National Hurricane Center is issuing advisories on Tropical
Storm Odalys, located well west-southwest of the southern tip of
Baja California, and on Hurricane Polo, located a few hundred miles
south-southeast of Manzanillo, Mexico.

Southeast of the Hawaiian Islands (Former TD 15-E):
The remnants of Tropical Depression Fifteen-E, located several
hundred miles southeast of the Hawaiian Islands, continue to produce
showers and thunderstorms that are gradually becoming better
organized. Environmental conditions are forecast to be conducive for
further development, and a tropical depression is likely to form
during the next day or two while the system moves slowly
west-northwestward or northwestward. Interests in the Hawaiian
Islands should monitor the progress of this system.
* Formation chance through 48 hours...high...70 percent.
* Formation chance through 7 days...high...90 percent.

$$
Forecaster Kelly
NNNN