Protecting our freedom at the corner of 18th and S NW, Dupont Circle
While occasionally it is dangerous for the residents of the mainland colony known as the District of Columbia, it is mostly absurd. Over the weekend, I came across the above picture of the National Guard in D.C. on Bluesky. It’s at the corner of 18th and S Streets NW, in Dupont Circle. Yes, they are standing in a formation that limits the ability of my neighbors to ambush them.
But that’s not the most absurd thing. The taupe building they’re standing in front of recently, according to Zillow, sold for three million dollars. When I looked at the crimes at that intersection, going back to 2012, there have never been any violent crimes during daylight hours (in fact, all but one of the crimes to have occurred there happened between 2022-2023, when crime in D.C. had a surge*).
In other words, this is an extremely safe neighborhood, and we certainly don’t need to park four guardsmen on the corner there during the daylight hours. But freedom isn’t freedom, as they used to say…
In one month, my new book will be in folks’ hands. “Data Are Made, Not Found: A Story of Politics, Power, and the Civil Servants Who Saved the US Census” tells the story of what it takes to produce democracy’s data – and how hard it was to do this in 2020 during a pandemic and while struggling with what I call “Jenga politics” (when various forces keep taking out planks and putting more pressure on top). It’s an ethnography, a love letter to civil servants, and a warning to us all about how brittle our democratic project is. It’s also a reminder that we can fight for our democracy. It’s also a reflection on how the legitimacy of high-stakes data stems from the social fabric that surrounds it, not any inherent property of the data. (Hint: data politics are not just a concern for the census… they also concern our AI future.)
This book is over 10 years in the making. I really reallyreallyhope I can convince you to buy a copy. Or to ask your library to order a copy so you can check it out! (Pretty please with a cherry on top!)
PLEASE pre-order my book if you can. The book will be available in English and French. You can listen to it as an audiobook or read it on your e-reader. If you pre-order it from Chicago University Press, you can get 30% off by using the code UCPNEW. Or feel free to turn to Bookshop | Amazon | Barnes & Noble or your local book store. Or just request the book from your local library.
Come to a talk near you! I will also be embarking on a book tour in the hopes of meeting other people who care about data and/or what it takes to make American democracy work. As of now, the tour starts on September 22 in Ithaca before continuing on to DC, Chapel-Hill+Durham, Cambridge+Boston, Toronto, Seattle, DC again, SF+Berkeley, Ann Arbor, Boulder, New Brunswick, NYC, and some virtual events. If you’re near one of these cities, check out my website for times and dates. And stay tuned for more! I’d love to see you!
Help get the word out! If you’ve read this far (thank you!) and you’d love to help me out, here are some great ways that you can help me:
Encourage two friends to pre-order the book in their favorite format. Pre-orders really reallly make a difference in the ability to get the word out.
Reserve a copy with your local library, both so that they order the book and so that others might get exposed to it when they’re browsing.
Once you have the book in hand, write a review on your favorite platform. Reviews on booksellers’ sites and places like Goodreads can be really helpful! But also your own newsletter!
Host a book club conversation! If you do, let me know. I’d love to pop in to say hi or share a note with your club.
Let me know of other opportunities where I could help get the word out!
I’m very open to doing virtual meet-and-greets with groups of readers. Or to stop by at other gatherings while I’m in tour. Please reach out!
And thanks y’all for your ongoing support. I can’t wait to hear what you think of the book!
File: A SpaceX Falcon 9 rocket stands at Space Launch Complex 40 (SLC-40) at Cape Canaveral Space Force Station. Image: Adam Bernstein/Spaceflight Now
SpaceX will launch a Falcon 9 rocket from Florida early Tuesday morning, using a first-stage booster making a record-breaking 37th flight.
The Starlink 10-49 mission will add another 29 broadband internet satellites to the company’s low Earth orbit constellation consisting of more than 11,000 spacecraft. It could be the last Starlink flight from Cape Canaveral for a while, with no further missions for the company’s internet service appearing on the near-term schedule.
So far this year, SpaceX has launched 44 out of 76 Starlink missions from its West Coast launch site at Vandenberg Space Force Base in California. The company’s Cape Canaveral workforce has been refocused on Starship preparations.
Liftoff from Space Launch Complex 40 at Cape Canaveral Space Force Station is scheduled for 5:33 a.m. EDT (0933 UTC). The rocket will head off on a north-easterly trajectory upon leaving the pad.
Spaceflight Now will have live coverage beginning about an hour prior to liftoff.
The 45th Weather Squadron forecast a 90 percent chance for favorable weather during the launch window. Launch weather officers said they’re watching for a small possibility of interference from cumulus and anvil clouds.
SpaceX’s flight-leading booster, tail number B1067, will make its 37th mission after entering service in June 2021.
Nearly 8.5 minutes after liftoff, B1067 will target a landing on the droneship, A Shortfall of Gravitas, positioned in the Atlantic Ocean. If successful, this will be 165th landing on this vessel and the 654th Falcon booster landing to date.
There’s been a blizzard of commentary about the breakdown of U.S.-Canadian trade talks. Friend of TPM Paul Krugman has a good rundown of just how dependent the U.S. is on key Canadian exports — oil, lumber, hydropower electricity in addition to many other commodities. Of course, the U.S. is a net exporter of oil. But that’s in aggregate. As Paul explains, the details aren’t that simple. The upper Midwest gets most of its oil from Canada while a lot of oil produced in Texas, Louisiana and the Gulf Coast gets exported. These patterns could only be changed over many years and then at great expense. There are similar embedded dependencies on lumber and electricity. Then there are things like potash (for agriculture and some industrial production) where the U.S. gets almost all of its supply from Canada.
Of course, so far this is all hypothetical. Canada isn’t pulling these levers. The U.S. is conspicuously avoiding placing tariffs on these supplies on which it has a critical dependence. But that only highlights U.S. vulnerability. Nothing is stopping Canada from pulling those levers as Trump’s trade war of whim heats up.
What is striking about this picture, setting aside all these nitty-gritty details, is how much it mirrors Trump’s Iran debacle, another war not so much of choice but of whim. Both illustrate the difference between theoretical and de facto power. On paper, the U.S. could convincingly defeat Iran militarily. It could invade the country, dismantle its military and government, eliminate the threats to the Strait of Hormuz. But that would require vast sums of blood and treasure, in addition to huge domestic economic pain, something the U.S. simply has no appetite for. That lack of appetite became clear soon after the war started and it’s shaped everything since. There’s zero domestic support for that in the U.S. And the U.S. has no pressing strategic interest to do that, certainly not at the cost it would require. Meanwhile, the Iranian government is in a fight for its life. America’s capacity to inflict pain on Iran is immense. But Iran’s willingness to endure pain is far greater.
This almost perfectly mirrors Canada’s current position vis a vis the U.S. The U.S. economy dwarfs Canada’s. The impact of an all-out trade war on Canada is vastly greater than the impact on the U.S. But Canada’s whole society and politics are consumed with this issue. That is even more the case when it emerged over the weekend that Trump is not only demanding unequal trade terms but attacking Canadian sovereignty in the form of demanding an end to domestic protections for the French language and a veto over Canadian trade deals with other countries. If anything, Prime Minister Mark Carney is trying to keep up with popular anger at the U.S. rather than getting the Canadian public to back up his hard line.
Meanwhile, most Americans only barely know this is even going on. When they hear about it their reaction is mainly bafflement. Like, ‘I’m confused. Why is this happening?’ That is probably one half the ordinary privilege of superpowerdom in which people barely have to pay much attention to what’s happening beyond their borders and one half the fact, that for those do pay attention to these things, our own country is in the midst of being dynamited and/or sold off or stripped for parts. Carney’s approval numbers were just below 60% before this latest crisis; I’d assume they’re a bit higher now, as they generally peak during moments of confrontation with the U.S. So basically the inverse of Trump’s, which are in the mid-30s.
A country can withstand a lot of pain when it’s invested in or feels it has no choice but to fight a war, whether its literal armed combat or a trade war. The U.S. can barely withstand comparatively modest hikes in fuel costs because very few Americans think the U.S. should have started this war in the first place. This is the actual measure of national power: Not the absolute measure of a military or GDP but popular and elite will to endure the inevitable hardships of any conflict.
Let me close on a personal note. I wrote two posts over the weekend about the breakdown of negotiations and the incipient trade war. In response to these posts and discussing them on social media, I had several fairly acrimonious encounters with Canadians in which the reader either caught a shard of a conversation and thought I was arguing against Canada’s position or zeroed in on a piece of text and insisted it was an example of American indifference to or myopia about Canada. One I think occasional reader wrote in and insisted that a sentence about the size of the Canadian economy compared to America’s was actually claiming that I meant Canada was a geographically small country when in fact it’s the largest country, by landmass, in the world. These encounters were exasperating in the particular but edifying in the aggregate. In each case I’d try to say something to the effect of, “Wait, no, I’m arguing your side of this. What we’re doing here is stupid and wrong,” before realizing there was no point.
To be clear, I’m not saying that Canadians have some national deficit in reading comprehension. I’m noting that the fury is so intense that it bleeds through in the sort of ordinary quibbles over wording or minor misunderstandings that are commonplace for any kind of public writing but with a mammoth intensity and even with Americans who are trying to argue their case. It helped confirm and illustrate to me what is already crystal-clear in public opinion polls, anecdotal accounts and the actions of the Canadian government. Canadians are full of fury and rage not only over the damage that the U.S. is doing to their economy and livelihoods but because, as Carney has repeatedly made clear, it is a thoroughly unprovoked and unjustified attack on a friendly neighbor which has stood by the U.S. in basically every conflict the U.S. has fought in for a century and is as thoroughly integrated into our national, economic and cultural lives as any country on earth. As I’ve argued here, Canada’s position is probably much stronger than it looks. But that will be at the cost of immense pain we’re inflicting for no reason or justification. And it won’t be forgotten for a long, long time.
Originally a creation of The Iconfactory, BitCam is now in the good hands of Héliographe (coiners of the best icon-design zinger ever). Version 2.0 has everything great about BitCam 1, and so much more. Just a wonderful ode to the original Mac, with so muchextraordinaryattention to detail. Great fun on the iPhone (especially as a camera), and great fun on the Mac (especially to explore the details of its OG-style UI). Free to download on the App Store, and a one-time purchase of just $10 to unlock the full feature set.
If BitCam doesn’t speak to you, you’re not hooked up right.
Jewish Insider, the source of this passage, often has what I’d consider tendentious coverage of this issue. But these words from Hasan Piker really speak for themselves …
In his commentary, Piker added that Jews who tie their “entire identity” to Israel, which he referred to as “Jewish ISIS,” are “making antisemitism worse.”
“People don’t f*** with Israel any longer,” Piker said two hours into his nearly seven-hour stream on Thursday. “If Jews in America keep putting this idea out there that they are singularly invested in Israel, eventually someone’s going to come around and take action, not against the State of Israel, mind you, but against American Jews.”
“I don’t know how people don’t recognize how dangerous this predicament is, how dangerous this is for Jews,” Piker continued. “You’re running around basically tying your entire identity to a country that inevitably will be seen as Jewish ISIS and you’re saying, as Jews, this is all we care about. You’re making antisemitism worse.”
Piker has a long-standing history of antisemitic rhetoric — including justifying Hamas’ Oct. 7, 2023, terrorist attacks and calling Orthodox Jews “inbred,” a comment he recently defended in an interview with the far-left outlet Zeteo: “I have a policy of using pejoratives when describing any kind of like ethno, racial supremacist groups,” he said. He has also stated that he would “vote for Hamas over Israel every single time,” describing Hamas as “a thousand times better than a fascist settler colonial apartheid state.”
This roof-mounted air sensor in Addis Ababa, the capital of Ethiopia, is one of 10 used by NASA’s Multi-Angle Imager for Aerosols (MAIA) to study the city’s air quality. MAIA’s air sensors provide a detailed look at particulate matter that is 2.5 micrometers or less in diameter, also known as PM2.5, one of the world’s deadliest forms of air pollution.
Black carbon, or soot, is an important component of particulate pollution in Addis Ababa and is produced by diesel vehicles, fires, and other combustion sources. Detailed measurements from the MAIA air sensors reveal how pollution changes by time of day and season, including spikes produced by rush-hour traffic and holiday celebrations. The findings are relevant to cities around the world, including in the United States.
The 2025 State of Global Air Report, cited in the paper, estimates that these particles, some of which are tiny enough to enter the human bloodstream, are linked to around 4.9 million excess deaths per year globally. Of the many kinds of PM2.5, black carbon in particular has been linked to impacts on low birth weight, brain development, respiratory conditions, and premature mortality.
Mapping Air Pollution With MAIA Sensors in Addis Ababa
PIA26694
Credits: NASA/JPL-Caltech
Downloads
Mapping Air Pollution With MAIA Sensors in Addis Ababa
PNG (456.55 KB)
Description
This map of Addis Ababa, the capital of Ethiopia, shows the locations of 10 air sensors that NASA’s Multi-Angle Imager for Aerosols (MAIA) mission is using to provide one of the most detailed looks ever at the city’s air pollution. Over the course of three years, these sensors measured particulate matter that is 2.5 micrometers or less in diameter, also known as PM2.5. Black carbon, or soot, is an important component of particulate pollution in Addis Ababa, which studies have linked to impacts on low birth weight, brain development, respiratory conditions, and premature mortality.
The color bar at right indicates air quality variations from 20 to 40 micrograms per cubic meter across the monitoring stations, with the darkest red being the poorest air quality.
In Ethiopia, black carbon is commonly produced by diesel vehicles, fires, and other combustion sources. Detailed measurements from the MAIA sensors reveal how Addis Ababa’s air pollution changes by time of day and season, including spikes produced by rush-hour traffic and holiday celebrations. The findings are relevant to cities around the world, including in the United States.
MAIA’s air pollution research is focused on a dozen regions around the globe, including three in the U.S. centered on Los Angeles, Atlanta, and Boston. The mission consists of a ground-based sensor network already in operation as well as a space observatory, which uses a camera built at NASA’s Jet Propulsion Laboratory, that will be launched by the Italian Space Agency (ASI) on an ASI satellite no earlier than late 2027. The camera is specially designed to help identify different types of PM2.5 aerosols based on how they reflect light, making it possible to map particle concentrations over each region that the mission studies.
NASA’s Perseverance Mars rover used its Mastcam-Z camera to capture the silhouette of Phobos, one of the two Martian moons, as it crossed in front of the Sun on Aug. 12, 2026, the 1,948th Martian day, or sol, of the mission.
The animation has been tinted to simulate what a human would see if they were watching the transit from the Martian surface through protective solar eclipse glasses.
Perseverance has capturedseveral Phobos transits since its landing at Jezero Crater in February 2021. By comparing the various recordings, scientists can refine their understanding of the potato-shaped moon’’ orbit, learning how it is changing. Eons from now, Phobos’ orbit is expected to eventually send the moon toward the Red Planet’s surface.
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.
NASA’s Jet Propulsion Laboratory, which is managed for the agency by Caltech in Pasadena, California, built and manages operations of the Perseverance rover.
Imagine you rent office space for a three-day event. You quickly set up a few
Ethernet switches and tape some cables on the floor to get everyone online.
Unfortunately, Stan, your clumsiest coworker, kicks out a cable every time he
gets up for coffee. Spare cables would fix that, but a loop turns into a
broadcast storm: Ethernet packets multiply until nothing else gets through.
That’s where the spanning tree protocol comes in: it blocks just enough of the
spare cables to leave a loop-free tree, and rebuilds it in a second each time
Stan strikes again.
This content is also available as a text version, with interactive demos
that run a real implementation directly in your browser!
This video is an experiment.1 Honestly, except for Radia Perlman reading
her poem,2 you should read the original article instead. It presents the same content, but you can play with the
interactive examples, which are the main contribution. On the other hand, if you
happen to like the video, be sure to tell me in the comments!
I thought automated tools would produce this video in a couple of
hours. In the end, it was another rabbit hole and it took me more than 12. ↩
The audio was extracted from a Youtube video and cleaned up. ↩
This post contains interactive examples. To visualize and interact
with them, you need to leave your RSS reader.
Imagine you rent office space for a three-day event. You quickly set up a few
Ethernet switches and tape some cables on the floor to get everyone online.
Unfortunately, Stan, your clumsiest coworker, kicks out a cable every time he
gets up for coffee. You could add extra cables, but then you’d get a broadcast
storm: Ethernet packets that loop and multiply until nothing else gets through.
That’s where the spanning tree protocol (STP) comes in. STP blocks just enough
of your spare cables to leave a loop-free tree. When Stan strikes again, it
rebuilds the tree in a second, leaving some time for Blobby, your one-person
support crew, to reconnect the cable. See for yourself: the diagram below runs a
real STP implementation in your browser!
:demo
A1 @0,0 prio=4096
A2 @0,1
A3 @0,2
A4 @0,3
B1 @1,0 prio=8192
B2 @1,1
B3 @1,2
B4 @1,3
C1 @2,0 prio=8192
C2 @2,1
C3 @2,2
C4 @2,3
A1 -- A2 hazard=0
A2 -- A3 hazard=0
A3 -- A4 hazard=0
B1 -- B2
B2 -- B3
B3 -- B4
C1 -- C2 hazard=0
C2 -- C3 hazard=0
C3 -- C4 hazard=0
A1 -- B1 cost=10
B1 -- C1 cost=10
A4 -- B4 cost=20
B4 -- C4 cost=20
Leo @-0.3,0.7 proto=none icon=👦🏻
Mia @-0.3,1.3 proto=none icon=👧🏽
Joy @0.3,0.7 proto=none icon=👱🏻♀️
Roy @0.3,1.3 proto=none icon=👨🏾
A2 -- Leo hazard=0 A2:edge
A2 -- Mia hazard=0 A2:edge
A2 -- Joy hazard=0 A2:edge
A2 -- Roy hazard=0 A2:edge
Max @-0.3,1.7 proto=none icon=👨🏽
Zoe @-0.3,2.3 proto=none icon=👩🏾
Ada @0.3,1.7 proto=none icon=👵🏾
Amy @0.3,2.3 proto=none icon=👩🏼
A3 -- Max hazard=0 A3:edge
A3 -- Zoe hazard=0 A3:edge
A3 -- Ada hazard=0 A3:edge
A3 -- Amy hazard=0 A3:edge
Eli @0.7,0.7 proto=none icon=👦🏼
Jay @0.7,1.3 proto=none icon=👨🏻
Kai @1.3,0.7 proto=none icon=🧑🏽
Ben @1.3,1.3 proto=none icon=👱🏼
B2 -- Eli hazard=0.2 B2:edge
B2 -- Jay hazard=0.2 B2:edge
B2 -- Kai hazard=0.2 B2:edge
B2 -- Ben hazard=0.2 B2:edge
Ava @0.7,1.7 proto=none icon=👩🏻
Lea @0.7,2.3 proto=none icon=🧑🏾🦱
Ivy @1.3,1.7 proto=none icon=🧕🏽
Rex @1.3,2.3 proto=none icon=👴🏿
B3 -- Ava hazard=0.2 B3:edge
B3 -- Lea hazard=0.2 B3:edge
B3 -- Ivy hazard=0.2 B3:edge
B3 -- Rex hazard=0.2 B3:edge
Ana @1.7,0.7 proto=none icon=👩🏿
Eve @1.7,1.3 proto=none icon=👧🏼
Abe @2.3,0.7 proto=none icon=🧓🏿
Ian @2.3,1.3 proto=none icon=🧔🏾
C2 -- Ana hazard=0 C2:edge
C2 -- Eve hazard=0 C2:edge
C2 -- Abe hazard=0 C2:edge
C2 -- Ian hazard=0 C2:edge
Ned @1.7,1.7 proto=none icon=👨🏼🦳
Lou @1.7,2.3 proto=none icon=🧑🏿
Fay @2.3,1.7 proto=none icon=👧🏻
Sue @2.3,2.3 proto=none icon=👩🏽🦰
C3 -- Ned hazard=0 C3:edge
C3 -- Lou hazard=0 C3:edge
C3 -- Fay hazard=0 C3:edge
C3 -- Sue hazard=0 C3:edge
Note
This article is also available as a video, but I advise you to
keep reading here to try the interactive demonstrations.
Designed in the ’80s, the spanning tree protocol has evolved into a “rapid”
flavor (RSTP) and a “VLAN-aware” variation (MSTP).1 Any sound-minded
network engineer knows there are better alternatives, like BGP EVPN VXLAN.
Yet, because any switch speaks it, the venerable spanning tree protocol still
fills a niche.
We focus on RSTP: it replaced the original protocol in 2004. To eliminate
network loops, RSTP implements a complex state machine. Timers, link state
changes, and the link-local control frames a bridge receives from its neighbors
drive its transitions. These Ethernet frames are the Bridge Protocol Data
Units (BPDUs). You can watch them in action below: hit the “Start” button.
After some time, the topology converges to a tree: from the root
C11, there is a path to each bridge2 and no loop. In the upper right
corner, the interface displays a tree icon 🌳 followed by the time it took to
reach this state. Cut a link and see how the protocol
finds an alternate path to reach C12 in less than a second. You can stop the
simulation, move it forward step by step, reset it to its initial state, or slow
it down with the “snail” mode 🐌. Don’t worry about all the displayed
information: I explain it later.
All examples run in your browser, powered by MSTPD—an open-source
user-space3 implementation of RSTP.4
I think that I shall never see
A graph more lovely than a tree.
A tree whose crucial property
Is loop-free connectivity.
A tree which must be sure to span
So packets can reach every LAN.
First, the root must be selected.
By ID, it is elected.
Least cost paths from root are traced.
In the tree, these paths are placed.
A mesh is made by folks like me,
Then bridges find a spanning tree.
To build a tree, RSTP first elects the bridge with the lowest bridge
identifier as the root bridge. The bridge identifier combines the priority
and the MAC address: 8192.6e:2b:10:a0:5f:29.
In the example below, S1 and S2 have priorities of 4,096 and 8,192: S1 becomes
root. S4 has a priority of 12,288, while S3 keeps the default priority of
32,768:5 S4 becomes root. S5 and S6 don’t have a specific priority, so
the lowest MAC address wins and S5 becomes root.
Each non-root bridge chooses its root port, the one with the lowest-cost
path to the root. Unless you override it, each bridge derives the link cost
from the speed: 20,000 for 1 Gbps. In case of equality, the lowest port
identifier wins.
Each remaining port becomes a designated port if the BPDU it sends is
“better” than the BPDU it receives. Otherwise, it becomes an alternate port.
Later, if the root port goes down, the “best” alternate port becomes the new
root port. The tiebreakers for the best BPDU are:
In the example above, after convergence, S1 is the root bridge
because it has a priority of 4,096, while the other bridges have a priority of
32,768. All its ports are designated ports because the accumulated cost to the
root is 0.
S2’s port facing S1 becomes a root port because it has the lowest accumulated
cost to the root—20,000 vs 40,000. S3 has two ports facing S1, and the one with
the lowest port identifier becomes the root port—0x8000 vs 0x8001. The other
candidate is an alternate port because the remote port on the link sends a
better BPDU, with an accumulated cost of 0. On the segment between S2 and S3,
S2’s port wins: while both bridges have the same accumulated cost to the root
(20,000), S2’s bridge identifier is smaller—32768.02:00:00:00:00:01 vs
32768.02:00:00:00:00:02.
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) Root Identifier: 4096.02:00:00:00:00:00
Root Path Cost: 20000
Bridge Identifier: 32768.02:00:00:00:00:01
Port identifier: 0x8002
Unless a specific event happens, designated ports send BPDUs every 2
seconds.8 If a bridge does not
receive BPDUs from its neighbor for 3 consecutive hello periods, it considers
the neighbor dead and removes the port information.
Port state transition
Each port can have one of three states. The diagram displays a background color
for each state:
discarding (red),
learning (yellow), or
forwarding (green).
A root port transitions automatically to the forwarding state. An alternate
port stays in the discarding state. A designated port has two options to
transition from the discarding state to the forwarding state:
If the port is an edge port, either through configuration or because the
remote device does not speak any flavor of STP, the bridge assumes it won’t
participate in the protocol and cannot create a loop. In this case, the
designated port immediately transitions to the forwarding state.
Otherwise, it sends a proposal to its downstream neighbor. If the remote
bridge agrees that the received BPDU is “better” than any other BPDU stored
for other ports, it elects the receiving port as its root port and starts the
synchronization process: it transitions all non-edge non-synced designated
ports to the discarding state to avoid a loop. Then, it sends back an
agreement. Upon receiving the agreement, the peer designated port
transitions to the forwarding state.9
In the topology above, H1, H2, H3, and H4 are end devices not participating in
the protocol. We configure the ports they connect to as edge ports, so these
ports immediately move to the forwarding state.
Use the “step” button to move the simulation forward. The clock moves to 1
second. Step again and S1 and S2 send a proposal to
each other. Here is the proposal from S2:
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) BPDU flags: 0x4e, Agreement, Port Role: Designated, Proposal
0... .... = Topology Change Acknowledgment: No
.1.. .... = Agreement: Yes
..0. .... = Forwarding: No
...0 .... = Learning: No
.... 11.. = Port Role: Designated (3).... ..1. = Proposal: Yes
.... ...0 = Topology Change: No
Root Identifier: 32768.02:00:00:00:00:01
Root Path Cost: 0
Bridge Identifier: 32768.02:00:00:00:00:01
Port identifier: 0x8001
S1 ignores it: its own root identifier is lower. When S2 receives a similar
proposal from S1, it accepts S1 as its root bridge. It also elects the port to
S1 as the root port and starts the synchronization process. The two designated
ports are already discarding, so no change here. Step
again and S2 sends two BPDUs to S1. In one of them, the
agreement bit is 1 and the proposal bit is 0. It also shows that S2 accepted S1
as the root bridge and its root port is now in the forwarding state. When
receiving this BPDU, S1 transitions its own designated port to the forwarding
state. From this point, the link between S1 and S2 forwards user traffic.
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) BPDU flags: 0x79, Agreement, Forwarding, Learning, Port Role: Root, Topology Change
0... .... = Topology Change Acknowledgment: No
.1.. .... = Agreement: Yes
..1. .... = Forwarding: Yes
...1 .... = Learning: Yes
.... 10.. = Port Role: Root (2).... ..0. = Proposal: No
.... ...1 = Topology Change: Yes
Root Identifier: 4096.02:00:00:00:00:00
Root Path Cost: 20000
Bridge Identifier: 32768.02:00:00:00:00:01
Port identifier: 0x8001
Let’s look at what happened to S5. Reset the simulation and step
twice. S5 exchanges BPDUs with both S3
and S6. Since S5 has a lower root identifier than S3 and S6, it stays the root
bridge, while S3 and S6 accept the proposal and elect their root ports. S3 and
S6 start the synchronization process. S6’s port to H4 stays up because this is
an edge port. Move one step. Both S3 and S6 send
an agreement back to S5, which transitions both designated ports to the
forwarding state. Yet, the link between S5 and S3 keeps discarding user traffic!
If you look carefully, S3’s port toward S5 is now a designated port, not a root
port. During the same step, S3 also receives a better BPDU
from S2 with S1 as the root bridge. It elects its port to S2 as the root port
and downgrades the port to S5 to a designated port, which stays in the
discarding state.
On the next step, things get a bit tricky. S3 sends a
proposal to S5:10
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) BPDU flags: 0x4f, Agreement, Port Role: Designated, Proposal, Topology Change
0... .... = Topology Change Acknowledgment: No
.1.. .... = Agreement: Yes
..0. .... = Forwarding: No
...0 .... = Learning: No
.... 11.. = Port Role: Designated (3).... ..1. = Proposal: Yes
.... ...1 = Topology Change: Yes
Root Identifier: 4096.02:00:00:00:00:00
Root Path Cost: 40000
Bridge Identifier: 32768.02:00:00:00:00:02
Port identifier: 0x8002
S5 elects S1 as its root bridge and the port toward S3 as its root port. It
starts its synchronization process, but the designated port to S6 does not
move into the discarding state. Why? That port stays a designated port and its
neighbor S6 had already sent an agreement on the link, so the port keeps its
synced status.
Now, let’s step back to look at what happens to S6. At this point,
S6 believes S5 is the root bridge. Step once and S4 sends
a new proposal to S6. S6 accepts the proposal, elects S1 as the root bridge and
the port to S4 as its root port. The role of the port facing S5 changes: from a
root port, it becomes a designated port. Because its peer keeps advertising an
inferior BPDU on the link, this port becomes disputed and moves to the
discarding state. The root port transitions to the forwarding state and the link
starts forwarding immediately because S4’s designated port is already in the
forwarding state. If we step one more time, S5 and S6
exchange two BPDUs. The one from S5 is better because of its lower bridge
identifier. S5’s port stays a designated port, while S6 downgrades its own port
to an alternate port.
Let’s rewind one last time from the start: cut the link between S1 and S2, run
the simulation until the topology is stable, stop the
simulation, and restore the link between S1 and S2. During the first
step, S1 and S2 exchange proposals. S2
elects S1 as the root bridge instead of S5 and the port to S1 as the root port.
It downgrades the previous root port to a designated port and moves it into the
discarding state. The other designated port stays synced and keeps its
forwarding state. At the next step, S2 sends
an agreement to S1 and the link between them starts forwarding user traffic. It
also sends a proposal to S3, but not to S4.
Instead, it sends a regular BPDU to S4. S4
still elects S1 as its root bridge and the port to S2 as its root port. It
demotes its previous root port, the one to S3, to a designated port, which
transitions to the discarding state because of the root port change. The other
alternate port, to S6, also becomes a designated port and stays in the
discarding state. The new root port moves to the forwarding state. On the next
step, S4’s port to S3 settles as an
alternate port after receiving a “better” BPDU from S3.
RSTP is a giant state machine split into smaller ones: bridge detection, port
information, port protocol migration, port role selection, port role
transitions, port receive, port state transitions, port timers, port transmit,
and topology change. Some of them are per bridge, some per port. Each bridge
runs an instance. Time, operational port state changes, and the BPDUs it
receives from other instances drive the transitions. Being event-driven makes
RSTP more efficient but also more difficult to understand.
Placeholder for the Port Information state machine extracted from IEEE 802.1Q-2005, page 182. Pending IEEE authorization for reproduction, this is the blueprint for the Western Australian Government Railways class Msa Garratt articulated steam locomotive.
Topology change notification
A bridge populates a MAC address table: it associates each source MAC address
with the port that last received it. When forwarding an Ethernet frame, it looks
up this table to choose the right port.11 When a link fails, a connected
fridge reachable through one port may become reachable through another one. The
affected bridges should flush the MAC addresses they learned, because these
entries may now be wrong.
For this purpose, RSTP implements topology change notifications using a
flooding mechanism. When a non-edge port transitions to the forwarding state, a
bridge generates BPDUs with the topology change (TC) bit set. It sends them to
all the non-edge designated ports and to the root port. It also flushes the MAC
address table on these ports. When a bridge receives such a BPDU, it propagates
the notification to all non-edge designated ports and the root port, except the
one the notification came from. It also flushes the MAC address table on these
ports. In the examples, the BPDUs with the TC bit set to 1 have a red circle.
Start the simulation and wait a few seconds for the topology to
settle. Stop the simulation and disable the link between S2 and
S5. S5 elects the port facing S4 as the root port, which
transitions immediately to the forwarding state. Step
once and S5 emits a BPDU with the TC bit set to 1:
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) BPDU flags: 0x79, Agreement, Forwarding, Learning, Port Role: Root, Topology Change
0... .... = Topology Change Acknowledgment: No
.1.. .... = Agreement: Yes
..1. .... = Forwarding: Yes
...1 .... = Learning: Yes
.... 10.. = Port Role: Root (2).... ..0. = Proposal: No
.... ...1 = Topology Change: Yes
Root Identifier: 4096.02:00:00:00:00:00
Root Path Cost: 40000
Bridge Identifier: 32768.02:00:00:00:00:04
Port identifier: 0x8002
S4 receives this BPDU. It flushes the MAC address table on the port facing S1:
while LPT was previously reachable through this port, it is now reachable
through S5 instead. Step once. S4 sends S1 a BPDU
with the TC bit set to 1. When S1 receives this BPDU, it flushes the MAC address
table on the ports facing S2 and S3. Step
once and S1 sends a notification to S2 and
S3. Step once again and S2 sends a notification to
S3, while S3 does nothing because the port toward S2 is an alternate port. S3
does not flush any MAC address table: LPT is still reachable through its port to
S1.
If you step a bit more, you will see that some of the
periodic BPDUs keep the TC bit set to 1. Each port runs a timer equal to the
hello timer plus one second.12 The timer starts when the port emits a
notification. Until it expires, the port sets the TC bit to 1 in every BPDU it
sends. You can also see some periodic BPDUs
without the TC bit: they originate from a port that only received a notification
and therefore did not arm its timer.
Security
RSTP is weak against configuration errors and malicious actors. A bridge not
talking RSTP can create a loop. An attacker can insert themselves into the
topology to disrupt the service, spy on the traffic, or alter it.
To mitigate such problems, you need to identify the edge ports. An edge port
connects to an end device, like a PC or a printer. Such devices do not generate
BPDUs and cannot create a loop. RSTP defines two related flags:
When true, AdminEdge initializes a port as an edge port. It defaults to
false.
When true, AutoEdge lets a port become an edge port when it does not
receive BPDUs for 3 seconds. It defaults to true.
If an edge port receives a BPDU, regardless of the values of these two flags, it
reverts to a non-edge port.
In the topology above, S1, S2, S3, S4, S5, and S6 act as bridges, while H1, H2,
H3, H4, H5, and H6 act as end devices:
S1 and H1 are on a port without a specific configuration: AutoEdge is true,
AdminEdge is false,
S2 and H2 are on a port where AdminEdge is true,
S3 and H3 are on a port where AutoEdge is false and AdminEdge is true,
S4 and H4 are on a port where AutoEdge is false.
If you start the topology and wait about 20 seconds, links to S1,
S2, S3, S4, H1, H2, H3, and H4 eventually forward user traffic: none of the
flags matter.
But what about the two remaining pairs? S5 and H5 connect to a network port.
Such a port enables a non-standard feature: bridge assurance. The port
transmits BPDUs regardless of its role. If it does not receive BPDUs for 3
consecutive hello periods, it transitions to the discarding state. On the link
between R0 and S5, you can see BPDUs traveling in both
directions, unlike the other links, where only
designated ports send BPDUs.
S6 and H6 connect to a port where AdminEdge is true and BPDU guard is
enabled. This is another non-standard feature that shuts down a port if it
receives a BPDU.
In summary, if you expect a port to be an edge port, you should set AdminEdge
to true and enable BPDU guard. Otherwise, declare it as a network port.
Why RSTP today?
A compelling use case for RSTP today is an out-of-band network for a datacenter,
since you can tolerate an outage of a few seconds. The configuration is minimal
and you can use cheap switches, like a Cisco 2960X.13 You need two
switches acting as root bridges, and you build several loops to connect OOB
switches in each cabinet. This simple design survives one failure on each
loop.14
This topology converges in about 6 seconds. Each loop should stay
small (around 16 bridges) to reduce the probability of a double failure and to
avoid sharing too much bandwidth. The design can evolve a bit without adding too
much complexity: one VLAN per loop or one bridge domain per loop.
How large can a network be?
The maximum age, whose default value is 20, governs the maximum distance of a
node from the root. The topology below is too big for BPDUs from R1 to reach
beyond S20.15
Once the topology settles, part of the network considers R1 the
root, while the other votes for R2. At the boundary, S20 tries to start a
synchronization with S21 to move its designated port to the forwarding state.
The BPDU looks like this:
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) BPDU flags: 0x4e, Agreement, Port Role: Designated, Proposal
Root Identifier: 4096.02:00:00:00:00:00
Root Path Cost: 400000
Bridge Identifier: 32768.02:00:00:00:00:15
Port identifier: 0x8002
Message Age: 20
Max Age: 20
S21 rejects it because the message age equals the maximum age. On the other
hand, the BPDU S21 sends to S20 looks like this:
Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) BPDU flags: 0x7c, Agreement, Forwarding, Learning, Port Role: Designated
Root Identifier: 4096.02:00:00:00:00:01
Root Path Cost: 320000
Bridge Identifier: 32768.02:00:00:00:00:16
Port identifier: 0x8001
Message Age: 16
Max Age: 20
This is not enough to change S20’s root port because S20 has a lower root
identifier—4096.02:00:00:00:00:00 vs 4096.02:00:00:00:00:01.
Fixing the link between R1 and R2 resolves the issue. The
maximum message age any packet carries is now 18, below the configured maximum
age. But it only works until another link breaks. A plausible fix is to increase
the maximum age to 40.16
How fast is RSTP?
RSTP usually converges in a couple of seconds at startup. It often repairs a
tree in less than a second. Even the 38-bridge topology takes less than 10
seconds to converge.17 Some topologies can take a bit more time to recover
when the root bridge becomes unavailable.18
First, S1 loses its root port. It has no more information about R0 and elects
itself as the root bridge. It keeps its ports to S2 and S3 as designated ports
in the forwarding state. Step once and it
sends a BPDU to both S2 and S3 to let them know about the root change. When
receiving it, S2 accepts S1 as its root because it does not have a better root
on another port. It elects the port to S1 as its root port. The other port stays
a designated port. Both ports keep forwarding.
When receiving the BPDU from S1, S3 behaves differently: it knows R0 as a better
root than S1 through its alternate port to S2. It promotes this port to a root
port and demotes the port facing S1 to a designated port, which requires a new
agreement. Step once and S3 sends a proposal to
S1 with R0 as the root bridge. S1 elects R0 as the root bridge and promotes its
port to S3 as a root port.
During the same step, S3 also receives a BPDU from
S2 stating that S1 is the root bridge. Therefore, S3 has no port left with R0 as
the root bridge: it elects S1 as the root bridge and its port to S2 as the root
port. Step once and its next BPDU to S1 includes
this information: S1 elects itself again as the root bridge. But during the
same wave, S1 sends a proposal to S2 with R0 as
the root bridge. While S1 and S3 agree that S1 is the root bridge, S2 now
believes this is R0! In turn, S2 again convinces S3
that R0 is the root bridge, S3 convinces S1, S1 convinces S2, and S2 convinces
S3.
This could go on forever, but it does not. The BPDUs saying “R0 is root”
eventually age out when the message age goes past the maximum age. In the
example above, at the eleventh second, S2 sends a
BPDU to S3 with R0 as root, but S3 drops it because its message age reached the
maximum. With some luck, the topology can also converge faster if a port stops
transmitting new BPDUs after tripping the transmit hold count, whose default
value is 6 per second.
About MSTP
MSTP is the “VLAN-aware” version of RSTP: it runs several instances of RSTP and
lets the administrator map each VLAN to a specific instance. For example, you
can map VLANs 100 to 200 to a first instance, and 300 to 400 to a second
instance. The remaining VLANs map to a special instance named the Internal
Spanning Tree (IST). MSTP adds its own complexity, but the gist is that you have
several logical topologies acting independently. If you want to dig deeper, have
a look at “MSTP Tutorial Part I: Inside a Region.”
About the interactive examples
The interactive examples run MSTPD directly in your browser, compiled to
WebAssembly with emscripten. A C API replaces the code talking to the
Linux kernel: it manages bridges and ports, exports state as JSON, and drives
time deterministically. A JavaScript wrapper makes it more user-friendly:
import{loadMSTPD}from"./dist/mstpd.mjs";constmstp=awaitloadMSTPD();// Create 3 bridgesconsta=mstp.createBridge("A",{priority:4096});constb=mstp.createBridge("B",{priority:8192});constc=mstp.createBridge("C");// Each bridge has two portsconsta1=a.addPort("a-b",{portno:1});consta2=a.addPort("a-c",{portno:2});constb1=b.addPort("b-a",{portno:1});constb2=b.addPort("b-c",{portno:2});constc1=c.addPort("c-a",{portno:1});constc2=c.addPort("c-b",{portno:2});// Build a triangle topologymstp.link(a1,b1);mstp.link(a2,c1);mstp.link(b2,c2);// Enable all bridges and portsfor(constbrof[a,b,c])br.enable();for(constpof[a1,a2,b1,b2,c1,c2])p.enable();// Execute 40 seconds' worth of wall clock and display the topologymstp.step(40);console.log("Topology:",mstp.topology());
Several dozen unit tests explore the features of MSTPD and check that they work
correctly in this environment:
$ node--test*.test.mjs
✔ two bridges: lower priority becomes root (41.657342ms)✔ triangle loop: exactly one port blocks and all agree on the root (5.832ms)✔ breaking the active link reconverges and restoring recovers (18.730753ms)[…]ℹ tests 40ℹ pass 40ℹ fail 0[…]ℹ duration_ms 396.190897
Additional JavaScript code looks for specific <pre> blocks containing a
topology definition and turns them into the interactive widget. You can inspect
and modify the definition by hitting the “edit” button.
There is also a cool trick to tell whether the topology has converged. After
each step, we save a snapshot of the simulation memory, play 50 seconds’ worth
of simulation to check if the topology is stable, and travel back in time by
restoring that snapshot. 🕰️
The complete code lives on GitHub. I am happy with the result. It can be
difficult to follow everything happening during a single step, but stepping
forward and backward helps. I plan to use the same approach in future blog posts
about networking features.
Note
Michael Lynch reviewed a first draft of this article. He authored
“Refactoring English,” a book to sharpen your writing for blog posts,
documentation, commit messages, and tutorials. Any errors are still mine!
The priority is a multiple of 4,096: with MSTP, the lower 12 bits
of the bridge priority encode the MST instance identifier, leaving only the
upper 4 bits for the configured priority. ↩
To inspect the BPDUs crossing a link, select it, click the
“Download packets” button, and open the file with Wireshark. ↩
A backup port only exists if the bridge has several ports on the same
collision domain. This should not happen in a switched network. ↩
This is the value of the “hello” timer. It used to be configurable,
but IEEE 802.1Q-2005 pins it to 2. MSTPD does not allow another value. ↩
If the peer port does not receive an agreement after the hello
timer elapses—or the maximum age if the port has just come up—it falls back
to the timer-based method for compatibility with STP: it transitions to
the learning state, waits again for the hello timer to expire, and
transitions to the forwarding state. ↩
As in many proposals, S3 also sets the agreement bit to 1. The
proposal bit says “I am the designated port on this link and I want to
transition to the forwarding state.” The agreement bit says “I am already in
sync with the rest of my bridge on this root information.” Both can be true. ↩
If it finds no entry, the bridge duplicates the Ethernet frame on all
ports, except the incoming one. The same happens if the destination MAC
address is the broadcast one (ff:ff:ff:ff:ff:ff). This behavior bootstraps
the learning process. ↩
If you look closely at what happens at t=2s, you can see that R2 is
gaining popularity as root: S17 to S36 believe R2 is the root bridge. S16
does not follow because we hit the maximum age. Later, S17 to S20 reverse
their position. I’ll let you explore the state of the various bridges to
understand the root cause. ↩
When increasing the maximum age to 40, you also need to
increase the forward delay to 21 (:forward-delay 21), as the standard
enforces this condition: 2 × (Forward Delay − 1) ≥ Max Age. For this
specific topology, you could also increase the maximum age to 37 and
forward-delay to 20. ↩
The simulation may seem slow, but it does not run in real time. Look at
the current timestamp in the upper right corner to know the wall clock, e.g.
“t=8s.” Once the topology stabilizes, the same corner shows the convergence
time, e.g. “🌳 2s.” ↩
Last week was the thirteenth week of videos from the 250 to 250 Project that we’re producing to honor the 250th anniversary of the Declaration of Independence.
Our hope was for the videos to emphasize the agency of Americans—mostly everyday Americans—to change the country. Each falls into a category that defines what it means to be an American, including community, democracy, innovation, mobility, civil rights, education, conservation, and creativity. Once again this week, some of our narrators chose their own topics adding wonderful new stories.
This was yet another week of spectacular narrators who themselves represent the innovation, talent, and civic-mindedness we were hoping to celebrate.
You can follow the project at the sites listed below, or under “videos” at my own YouTube page: Heather Cox Richardson. Or just wait until I send out the week’s roundup.
John Palfrey, recognized as one of the best leaders in America by U.S. News & World Report, is an American educator, legal scholar, and author who serves as the president of the John D. and Catherine T. MacArthur Foundation. He is the great-grandson of President Theodore Roosevelt, who won the Nobel Peace Prize for brokering the Treaty of Portsmouth.
Robert “Fighting Bob” La Follette, Narrated by Ben Wikler
is an American political organizer and New York Times best-selling author who served as the chair of the Democratic Party of Wisconsin from July 2019 to July 2025. Wikler’s latest book This Is The Plan: How to End America’s Meltdown and Save Democracy is now available. Wikler profiles Robert “Fighting Bob” La Follette, the Wisconsin reformer who battled corporate power and drove some of the Progressive Movement’s greatest victories.
I.M. Pei, Narrated by Billie Tsien
Billie Tsien is a renowned Chinese-American architect, co-founder of Tod Williams Billie Tsien Architects, National Medal of Arts recipient, and lead designer behind the Obama Presidential Center. Tsien profiles architect I.M. Pei, whose bold geometric designs—from the National Gallery’s East Wing to the Louvre pyramid—helped define American modernism.
Edward R. Murrow, Narrated by Scott MacFarlane
is anchor of “Scott MacFarlane Reports” and Chief Washington Correspondent for MeidasTouch Network. MacFarlane has earned 20 Emmy and Edward R. Murrow awards and the Anna Quindlen Award for excellence in journalism from the Child Welfare League of America. Edward R. Murrow was a radio and television newscaster whose unflinching reports set the standard for American broadcast journalism.
Norman Rockwell, Narrated by Kahlil Greene
, the “Gen-Z Historian,” is a well-known digital educator, Peabody Award winner, and two-time Emmy nominee with an audience of over 50 million views across TikTok, Instagram, and author of History Can’t Hide on Substack. Greene profiles illustrator Norman Rockwell, whose beloved images of everyday American life evolved to confront war, civil rights, and the nation’s conscience.
Tlingits, Narrated by Rosita Worl
Dr. Rosita Worl is a Tlingit American anthropologist, educator, and president of the Sealaska Heritage Institute recognized as an expert in Southeast Alaska Native culture and history. Worl introduces the Tlingit people, “People of the Tides,” who have stewarded Southeast Alaska’s coasts since time immemorial and fought to defend Indigenous rights.
Wright Brothers Narrated by Governor Josh Stein
of North Carolina is lifelong public servant who previously served in the state Senate, as Senior Deputy Attorney General for consumer protection, and as North Carolina Attorney General. Governor Stein celebrates the Wright brothers, whose 12-second flight at Kitty Hawk in 1903 launched the age of aviation.
Head Start, Narrated by Jill Biden
Dr. Jill Biden is a highly regarded educator and former First Lady and Second Lady of the United States of America. Dr. Biden is a strong advocate for education, early learning initiatives, military families, and women’s health. Here, her history of Head Start reminds us that participation improves children’s language, literacy, and social skills.
Lemon Grove, Narrated by Marianna Vinson
Marianna Vinson is a first-generation Mexican-American educator. The Superintendent of the Lemon Grove School District, Vinson formerly served as the Deputy Director for the Office of English Language Acquisition at the U.S. Department of Education. In 1931, the San Diego County Superior Court ruled that the segregation at Lemon Grove violated California law.
Battle of Fallen Timbers, Narrated by Wes Siler
is an independent journalist who has spent the last 24 years writing about the intersection of public lands, conservation, and politics. He’s currently building a new Substack newsletter about those topics. He tells the story of the brief battle that forced Native American displacement from most of modern-day Ohio, opening it to white American settlement.
Mount St. Helens Eruption, Narrated by John Ebel
Dr. John Ebel is a highly regarded senior scientist at the Weston Observatory at Boston College whose expertise has made him the go-to source for media reporting on earthquakes in New England and around the world. He explains what happened in 1980, when Mount St. Helens erupted in the most destructive volcanic event in American history.
Woodlot Revolt, Narrated by Paula Peters
Paula Peters is a journalist, educator and activist. A citizen of the Mashpee Wampanoag Tribe, she travels internationally to speak and educate on the true Wampanoag story. Here she tells the story of the 1833 Woodlot Revolt, in which Wampanoag activists were arrested but the Wampanoag achieved a period of self-rule until 1870.
Mayo Clinic, Narrated by Dr. Stephen Ray Mitchell
Dr. Stephen Ray Mitchell is an award-winning medical expert who currently serves as the Joseph Butenas Professor of Medicine and Pediatrics and Dean Emeritus for Medical Education at Georgetown University School of Medicine. Dr. Mitchell has chaired the North American Liaison Committee for Medical Education (LCME) and has led accreditation visits to over 20 other Medical Schools. He tells the story of the founding of the Mayo Clinic, which pioneered many hallmarks of modern health care.
Wilma Mankiller, Narrated by Julie Reed
Julie Reed is a citizen of the Cherokee nation, Native American historian, author, and professor whose reflective essays include a widely syndicated piece about Wilma Mankiller, the first female principal chief of Cherokee Nation.
The rugged terrain of the Silver Island Mountains and Crater Island rises above the pale playa and bright salt flats of former Lake Bonneville. The image was acquired with the OLI (Operational Land Imager) on Landsat 8 on June 4, 2026, and overlaid on a digital elevation model.
NASA Earth Observatory/Michala Garrison
At its peak, ancient Lake Bonneville would have been a sight to behold. Nearly as large as Lake Michigan, the Ice Age lake spread across much of western Utah and parts of Nevada and Idaho. When it eventually receded, it left behind flat, bright playas and salt flats rich with minerals—a landscape that would later serve as the setting for feats of engineering and technological ingenuity, as well as epic tales of exploration and desperation.
Lake Bonneville began forming about 55,000 years ago during a cool, wet period, when volcanic eruptions in what’s now southeastern Idaho diverted the Bear River, causing water to gather in Gem Valley and other basins to the south. For tens of thousands of years, a natural dam at Red Rock Pass helped confine the lake.
Then, about 18,000 years ago, water breached that dam, unleashing a torrent that entered the Columbia River system. Over a six-week period, amid one of North America’s largest floods, lake levels plummeted by more than 350 feet (105 meters). As the climate warmed and dried in subsequent millennia, the lake shrank dramatically, leaving remnants that include today’s Great Salt Lake, Utah Lake, and Sevier Lake.
Lake Bonneville may be gone, but its imprint on the region’s landscape remains—even in satellite imagery. In this image (below) captured by the OLI (Operational Land Imager) on the NASA-USGS Landsat 8 satellite, bathtub-like rings and wave-cut terraces trace the position of former shorelines. The dried lakebed—where fine-grained clay, marl, and sandy sediment settled out of the water—appears pale in comparison to the darker, rockier, more vegetated surroundings.
NASA scientists analyzed the terrain in this part of Utah when testing technologies that will be used on NASA’s DAVINCI mission to Venus. This image was acquired with the OLI (Operational Land Imager) on Landsat 8 on June 4, 2026.
NASA Earth Observatory/Michala Garrison
In deep parts of the basin, where runoff and groundwater still pool, bright deposits of evaporite minerals coat the land surfaces, forming salt flats. These remarkably flat surfaces are the product of water gradually evaporating and concentrating minerals to produce brines and hard mineral crusts, typically including halite and gypsum, along with potassium- and magnesium-bearing salts. Brines and deposits like these—particularly of potash, which is used as a fertilizer—have long made the playa a target for mining, as seen in the rectangular evaporation ponds above and below.
In contrast, the darker, more rugged terrain—including the Silver Island Mountains, the Newfoundland Mountains, and the Pilot Range—that rises above the playas is built from layers of erosion-resistant sedimentary and metasedimentary bedrock that is hundreds of millions of years old. These mountains also contain younger igneous and metamorphic rocks that formed when magma intruded into the ancient sedimentary sequence.
Crater Island, for instance, is composed of sedimentary rocks, including silica-rich sandstones and quartzites that formed as sands accumulated in a shallow ocean, as well as intrusions of quartz monzonite, granites, and other igneous rocks. Periods of crustal stretching later produced the fault-block mountains that define the landscape.
This animation shows the descent over Crater Island, Utah, of the camera system that will one day fly aboard NASA’s DAVINCI mission to Venus. It was created by stitching together 37 infrared images captured during a test on June 24, 2026.
Malin Space Science Systems/NASA/Jay Friedlander
Mapping geological distinctions like this took center stage in June 2026 when NASA scientists and engineers working with the agency’s DAVINCI mission came to Crater Island—a place they call “Venus on Earth”—to field-test the design of a set of cameras and a package of instruments that will eventually descend through the thick atmosphere of Venus and photograph mountains at scales finer than these Landsat images. During a 60-minute descent, the pioneering probe will capture near-infrared images, measure the atmospheric chemistry, and explore the environment of a world in unprecedented detail.
During the rehearsals at Crater Island, the camera system took hundreds of images of various rock formations, including iron-rich and silica-rich rock units, while suspended from a helicopter as it descended toward the surface. Using only the images acquired by DAVINCI’s camera systems, the team made three-dimensional maps of the area consistent with existing geologic maps, giving the scientists confidence that they will be able to map the geology of an analogous mountainous region on Venus that DAVINCI will study, an area called Alpha Regio.
Other epic adventures have played out on and around Lake Bonneville’s playas, as well. The flat, smooth surfaces have often been the setting for new land speed records. In 1960, Mickey Thompson became the first American to break the 400-miles-per-hour (640 kilometers-per-hour) barrier, hitting 406.60 miles per hour (654.36 kilometers per hour) in a streamlined race car on the Bonneville Salt Flats. The feat temporarily earned him the nickname “fastest man on Earth.”
People mine minerals from the Bonneville Salt Flats and use its flat surface to pursue land speed records. This image was acquired with the OLI (Operational Land Imager) on Landsat 8 on June 4, 2026.
NASA Earth Observatory/Michala Garrison
More recently, in August 2026, Andy Green, the first person to break the sound barrier on land, set a record for the fastest land speed in a hydrogen-fueled internal-combustion vehicle, reaching 406.320 miles per hour (653.909 kilometers per hour). By burning hydrogen rather than gasoline, the “rocket car” produced no carbon dioxide.
Nearly two centuries earlier, in August 1846, members of the ill-fated Donner-Reed Party also passed along the southern edge of Crater Island. As part of a shortcut toward Pilot Peak, they journeyed from Hastings Pass, past Floating Island, and toward Donner Spring. However, in an ominous sign of challenges to come, their heavy wagons broke through the thin salt crust and became mired in underlying mud, slowing them down and prompting them to abandon several wagons in the desert.
NASA Earth Observatory images by Michala Garrison, using Landsat data from the U.S. Geological Survey.Story by Adam Voiland.
Across Southwest, a mid-late summer characterized by exceptional and sustained overnight warmth Following a record warm winter across most of the American West, it has also been a record (or near-record) warm summer across most of the interior West (and fire season from the Southern Rockies to the Great Basin to the Pacific Northwest has […]
Federal debt is in the news. There were many headlines last week about the debt exceeding $40 trillion and now being bigger than the economy. There were also headlines about rising interest rates on long-term debt and the showy, ineffectual attempt of Scott Bessent, the Treasury secretary, to manipulate them down.
Some of this is hype. Properly measured, debt is “only” $32 trillion. The comparison with GDP involves apples and oranges. And as I argued the other day, rising rates do not signal an imminent fiscal crisis.
Yet the debt is indeed very large and some concern is warranted. In the next installment of this series, I will address policy recommendations for a future Democratic administration to address the debt. I say a Democratic administration because Republicans will deny that there is a debt problem as long as they hold the White House.
But first we need to ask the question of how we got here. JD Vance says that it’s Joe Biden’s fault, because of course he does. Many others blame either reckless public spending or the fiscal burden of an aging population.
The reality, however, is that U.S. debt would be much lower as a percentage of GDP, and would barely be in the news at all, without the revenue loss from tax cuts enacted by Republican presidents: George W. Bush in the 2000s, then Donald Trump during both of his terms.
Today’s primer will examine the causes of high current U.S. debt. Beyond the paywall I will discuss the following:
1. U.S. spending, taxes and debt in historical and international perspective
A few interesting numbers in this FT story gathered from "people with knowledge of the matter":
Anthropic's "annualized revenue" for July is up to $65bn - it was $47bn in May, and I collected more historic numbers here.
Anthropic expect Q3 to be profitable according to the same model they used to declare Q2 profitable. "It also told investors that it had 6,000 customers that spend $100,000 annually or more."
As for OpenAI, "annualised revenue has jumped 35 per cent in the quarter to date and is now over $40bn, with the launch of GPT 5.6 in July jolting the company’s performance after a sluggish start to the year".
This article also introduced me to the Ramp AI index, which uses billing data from 70,000 Ramp credit card using companies to estimate model adoption.
Here's Ramp's breakdown of Anthropic model spend for July 2026, which looks reasonable given that Opus 5 was only released on July 24th, and supports the idea that Fable's cost has made it a less popular model:
Prior to Fable, it felt silly to waste too much time improving your coding harness or context strategies. A new model would arrive at the same price (or cheaper!) and paper over most of your problems.
But then Fable landed. It was (and still is!) incredible. But the cost was so high and Opus was good enough (as was 5.6, K3, and even GLM) for most of the code we needed.
So we started to think about what work went where.
China's "Manned Space" program issued a terse announcement on Sunday regarding its much-anticipated Chang’e 7 lunar exploration mission.
The agency stated: "In keeping with the principle of proceeding prudently and reliably, and ensuring absolute success, after a comprehensive assessment it has been determined that the Chang’e 7 mission does not meet the conditions for launch and therefore cannot be carried out during the planned launch window this year."
The Chinese message offered no explanation for the cause of the delay from the Wenchang Space Launch Site, located on an island in the South China Sea. Consisting of a lunar orbiter, lander, rover, and a mini-hopper of a probe, the mission was due to launch as early as Sunday on a Long March 5 rocket. It is intended to land at the South Pole of the Moon.
John Moltz, in his weekly members-only column for Six Colors (no gift links, but Moltz’s column is worth the subscription in and of itself):
This week Anthropic announced that in order to identify AI from
human-generated content it would be watermarking all text it
generates by subtly altering the randomness at which its models
picked the next word. While this might seem a perfectly cromulent
means of accomplishing a worthy goal, it really rubbed John Gruber
the wrong way, as if someone suggested putting autocomplete Swiss
on his Philly cheesesteak AI.
Cooper Sharp cheese is the way to go. The best new cheesesteak joint in town — Uncle Gus’s — only offers Cooper Sharp, in fact.
Surely a fair number of the hundreds and hundreds of bees that
have nested in Gruber’s extremely fancy bonnet are a result of the
fact that this is all ostensibly in response to a mandate from the
EU. But, as James Thomson has suggested, Anthropic might actually
want to watermark so that it doesn’t scoop up its own output to
train its models, thereby degrading the results. In fact, the
company would probably love to be able to figure out other
companies’ watermarks and have them not be able to figure out its
watermark.
For the record, my opposition to Claude’s plan to begin watermark-adulterating all generated text, worldwide, has nothing to do with it ostensibly being to comply with a regulation from the EU. I do think the EU regulation is deeply ill-considered (and, having been drafted in 2024, already technically out of date), but I’d have written everything I wrote (and will continue to write) about the matter even if the EU had no AI-related regulations in place. In fact, while writing my initial piece, I really wished this had nothing to do with the EU, because pointing out the folly of the regulation (and the ridiculousness of a company supposedly worth $2 trillion being technically unable to comply with an EU regulation without applying the changes globally) seemed a distraction from my point, regarding the ramifications of watermarking text by way of detectable word choices. Moltz’s aside here confirms that.
Also, more and more, I do think this has little to do with the EU regulation and everything to do with Anthropic and Google wanting to watermark the text that Claude and Gemini generate for their own purposes, to identify text to avoid training future models on to avoid model collapse/AI inbreeding. I suspect blaming the decision on the EU “Code of Practice” regulation is just scapegoating on Anthropic’s part.
(As a bonus, Moltz has a deliciously sharp (no cheese pun intended) take on the schadenfreude-rich saga of MacStories returning to Twitter/X.)
A few more thoughts on the collapse of U.S.-Canadian trade negotiations and the over-the-top U.S. predation that led to it. (See my earlier post here.) Here’s a portion of an analysis piece from the Toronto Star …
Doing a deal under the conditions Carney described would clearly have undermined Canada’s pivot to new markets by putting Carney firmly under the thumb of the U.S.
As the prime minister described it, he was faced with a trade agreement that was suddenly transformed into an attack on Canadian sovereignty, an attempted psychological annexation that could have turned Canada into an American client state, a sort of North American Belarus.
It does, however, jive with Trump’s repeated 51st state taunts when he returned to the White House.
And Trump’s National Security Strategy said of America’s neighbours in the Western Hemisphere: “We want other nations to see us as their partner of first choice, and we will (through various means) discourage their collaboration with others.”
As Donald Trump not so much dismantles the U.S.-backed global order as dynamites it, that destruction coupled with the rise of a more vocal and electorally prominent U.S. left has renewed the discussion of just what that U.S.-backed global order was. This passage and this whole U.S.-Canada breakdown illustrates a lot of it.
The U.S. has been a great power by various definitions for more than a century. It was one of two for most of the latter half of the 20th century and the sole one starting in the final decade of the 20th century.
To understand this now-receding era, we must recognize that U.S. power functioned differently with the relatively wealthy states primarily in the global north and those poorer states mainly in the south. Its power was based largely on two key alliance structures: One based in Europe (NATO) which is really the western fringe of Eurasia and another based on the littoral and island fringe of East Asia — Japan, South Korea, Taiwan, et al. It was a book I read by Zbigniew Brzezinski about 20 years ago that really shaped my understanding of how these two alliance structures fit together with global geography. The U.S. completely dominates North America by its economic, military and even geographical heft and faces no real strategic competitors in South America. So we’re free of any real foes in our whole hemisphere.
Meanwhile, these two alliance structures create counterweights to Eurasia’s two great land powers, Russia and China. One of the reasons this has been a sustainable arrangement is that it worked for both sides. The U.S. gets things it wants. For Western Europe and littoral East Asia, it provides a counterweight to the local potential dominator/bully. But, critically, that counterweight comes from a partner which isn’t too close at hand. The U.S. is big and powerful. But they are and will always be across the sea, over the horizon.
This schema of course leaves out a huge amount of the globe. But it was a stable and mutually beneficial system, and at least until quite recently covered most of the globe’s wealth, as well as real and potential military power. (It’s also no accident that most of the U.S.’s problems, wars and blunders over the last two generations have been in another place that doesn’t fit into this schema geographically, culturally or really any other way: the Greater Middle East.) And the key to its stability is that in those two alliance structures, the U.S. didn’t ask that much. No, the U.S. isn’t a global philanthropist bringing peace and prosperity to all. But its terms are fairly generous. In these two theaters, the U.S. has acted not as a dominator but more like a first among equals.
Critics of U.S. power have always stumbled on this basic fact. For all the purported similarities between the U.S. and Russian great power models, why are countries in Europe trying to stay in or enter into our imperium rather break free of it? Ukraine illustrates all of this. It’s why Russia’s Eurasian Economic Union and its security counterpart, the Collective Security Treaty Organization, have been basically a bust while the EU and NATO have grown. Yes, yes, yes, the CIA and Victoria Nuland are the secret hands and all the rest. The reality is that the proof of the pudding has been in the eating.
The basic answer on all these fronts is that the U.S. imperium, for those who wish to call it that, is, in these two theaters, a good deal. It doesn’t ask that much. The U.S. has operated as a first among equals, not a mob boss. The centerpiece of Trumpism is that it wants to be a dominator, especially in the regions where that’s plausible, the Americas. (It’s no accident that the Star says the Trump wants to make Canada into an American Belarus, a nominally sovereign client state.) And in the short term the U.S. has a lot of power to do that, or at least extract big costs from countries which don’t comply. But the U.S. was never powerful enough and certainly isn’t powerful enough now to be the dominator of Europe and littoral East Asia, and certainly not the entire globe — not without infinitely larger spending on military power. We’re already seeing the de facto limits of U.S. military might with an adversary as comparatively feeble as Iran.
The simple fact is that for all the other evils of Trumpism, they simply don’t understand the basis of American power, military or economic. That’s the basis of the absurdity of the last decade, in which the U.S. is somehow the defiant rebel against the system it created for its own prosperity and security and which has ensured both for going on a century. Listen to their thinking and you see it clearly: We’re the big power. We’re in charge. But we don’t act like we’re in charge. We let ourselves get pushed around. Now we’re going to be in charge. They simply don’t understand that to the extent we are “in charge,” the underlying basis of the agreement puts us in charge. It’s the comparatively easy terms of American global power. They really do imagine that U.S. allies are something like colonies or Finlandized client states that we’ve just let get over their skis.
The truth is that this precedes Trumpism. We saw this in that pivotal 18 months or so between the 9/11 terrorist attacks in 2001 and the invasion of Iraq in early 2003. (I actually wrote a review essay about this conversation and the books it spawned in a review essay in The New Yorker at the end of 2003.) It was less impetuous and feral. But the outlines are the same: We’re in charge. But we haven’t been acting like we’re in charge. And it’s that lackadaisical approach to managing the globe that made things like 9/11 possible. So now we’re going to actually be in charge. Again, a basic misunderstanding of the basis on which we are “in charge.”
In truth, though I’ve been a partisan in these debates for half my life, a lot of this was probably inevitable with the end of the Cold War and the collapse of the major counterweight to American power, which shaped the “good” decisions America made to put this whole system in place. A different and more fecund line of argument is whether the deal America made with its major allies drove unequal shifts in America’s domestic economy which ended up undermining the American domestic political foundations of these global alliances. That’s a complicated question. But there’s at least a there there.
I’ve talked a lot here about big think and the nature and limits of American power. I should conclude with what I hope goes without saying but still needs to be said. This breakdown in U.S.-Canada relations isn’t just a misapprehension of the nature of American power. It’s deeply wrong, an unprovoked assault on friendly neighbors and longstanding partners with whom we share so much. As I wrote to a Canadian, discussing this this morning, this whole episode is a source of shame and embarrassment for the United States.
On Tuesday, August 18, during a debate for a runoff to win the South Carolina Republican senatorial primary, Senator Darline Graham (R-SC) answered a question about Taiwan and the importance of the South China Sea by saying: “I’m not that informed on national security.” She paused, and added: “But I do support the military.”
The audience reacted with boos and gasps. Senators are supposed to manage national security.
Trying to clean up her mistake, Graham went to an interview with the friendly Sean Hannity at the Fox News Channel, where she tried to make a virtue of her error by saying it reflects that she is not a politician. Then she added that people in South Carolina are worried less about foreign affairs than they are about affordability, “boys in girls’ sports,” the Second Amendment, “illegal immigration,” and the SAVE America Act.
Journalist Parker Molloy noted that trans girls have been banned from competing in K–12 girls sports since 2022 and are banned from competing in the NCAA and the Olympics. “This is literally an issue that doesn’t affect SC at all anymore,” Molloy noted. “They got what they wanted. How is this still a priority?”
Graham perfectly represents the modern Republican Party. South Carolina governor Henry McMaster appointed her to fill the vacancy caused by the death of her brother, Senator Lindsey Graham. McMaster said Trump “thought it was a great idea” for her to replace her brother, and she has indicated her loyalty to Trump and her willingness to pass the SAVE America Act he so badly wants in order to rig the 2026 midterm elections. Graham has little political experience, and with little to offer voters other than loyalty to Trump, she is simply echoing Republican culture war talking points that worked for him in 2016.
But it appears voters don’t like living in the world Trump is creating.
As Cleve R. Wootson Jr. noted yesterday in the Washington Post, Trump went to South Carolina last night to help Graham’s campaign. He told those attending the rally that the election was really about him. Although Graham’s opponent in the runoff, Representative Ralph Norman, has made much of Graham’s inexperience, Trump told rally attendees: “They’re only fighting Darline because they want me to lose.”
Wootson notes that Trump is hoping for a Graham win to restore some of the power that is slipping away as his popularity continues to slide to new lows. Primary candidates he backed for governor in Iowa, Georgia, Wyoming, and Minnesota all lost, as did those he backed in congressional primaries in Michigan and Tennessee.
Indeed, as Graham was fumbling the debate last Tuesday, two former teachers endorsed by Democrats flipped the Sarasota, Florida, school board. That board had been dominated by right-wing candidates since 2022, led by Moms for Liberty co-founder Bridget Ziegler, who has said public schools are “indoctrination centers for the radical left” and that she wanted to bring “religious values” to them.
Formed in 2021, Moms for Liberty was behind the book banning of the past several years. Ziegler is married to the former chair of the Florida Republican Party, who was forced out of his position after a woman alleged he had raped her in relation to the three-way sexual relationship she had with the Zieglers. Bridget Ziegler refused to step down from the school board after the scandal broke.
As Kerry Sheridan of WUSF reported, Beth Mayberry and Megan Tennimon ran on issues of school funding, academic achievement, and helping students in underserved areas. Both won their races by more than 10 percentage points.
As political historian Joanne Freeman put it Saturday morning in our chat on What the Heck Just Happened?, when Republican leaders in 2020 decided not to write a political platform at all, but simply to “reassert the Party’s strong support for President Donald Trump and his Administration” and to say it would “continue to enthusiastically support the President’s America-first agenda,” they gave him every reason to think that “all of the things that he’s doing to promote himself—the races and the gold and everything else—that that’s all campaigning. It’s all about him.”
Then, when party leaders in 2024 essentially turned Trump’s social media posts into a platform, they embraced the idea that the party could stay in power through slogans. They promised to “DEFEAT INFLATION, AND QUICKLY BRING DOWN ALL PRICES,” to “BRING BACK THE AMERICAN DREAM AND MAKE IT AFFORDABLE AGAIN FOR FAMILIES, YOUNG PEOPLE, AND EVERYONE,” to “promote a Foreign Policy centered on the most essential American Interests, starting with protecting the American Homeland, our People, our Borders, our Great American Flag, and our Rights under God,” and so on.
The Republican Party tied itself to Trump and remains tied to him as he devotes his time to celebrating himself with his ballroom, a UFC cage match at the White House, his triumphal arch, renovations to the Lincoln Memorial Reflecting Pool, and now this weekend’s “Freedom 250 Grand Prix” around the National Mall in Washington, D.C., in which 25 IndyCar drivers are covering 147 laps at speeds up to 150 mph around a 1.7-mile (2.7 km), 7-turn street circuit loop past the U.S. Capitol, the Washington Monument, the National Archives, and the National Gallery of Art.
The race has required workers to weld down more than 200 manhole covers, move traffic lights, and put up barriers that have disrupted traffic, while the National Gallery of Art has had to protect its sculptures from vibrations and airlines have had to reroute flights.
Meanwhile, the country remains embroiled in an apparently purposeless war in Iran; the economy is slowing and prices of food and gas are rising; Americans are horrified by the tactics of ICE and Border Patrol, who have abused and killed immigrants and U.S. citizens alike; Trump, his family, and his allies have put at least $2.2 billion in Trump’s pockets; and Trump has alienated our closest allies.
Just after midnight on August 21, Trump imposed a 50% tariff on a range of goods from Canada. Canada’s prime minister Mark Carney suspended trade negotiations with the U.S. and said Canada will impose retaliatory tariffs on the U.S. beginning September 8. In a statement, Carney said: “We have recognised from the beginning that America has changed, and that we will not return to our old relationship.” Canada, he said, will be “focused on building our strength at home [and] diversifying our partnerships abroad.”
And now the story that the closest advisor to the President of the United States is a 35-year-old woman who seems unhealthily obsessed with him ties Republican Party leadership to the reality that they are permitting the destruction of the United States with barely a whimper.
As Trump led Republicans into a box canyon, they have left an open field for Democrats to redefine the nation’s politics.
On August 17, former transportation secretary Pete Buttigieg recorded a video to assure those Americans who oppose the Trump administration that they are in the large majority. He noted that the strategy Republicans are pursuing shows how unpopular they are.
“Think about it,” he said. “They’re not out there showing that the economy is somehow better than it looks…. They’re not defending their cuts to healthcare, they’re not defending the tax cuts for the wealthy. They’re not defending the corruption that’s going on in Washington.”
“It’s too late for that,” he said, because “we’ve all seen that those policies have failed. They made us all pay tariffs and said the reason we got to do this is to bring back manufacturing jobs…. Well, we paid the tariffs, and then America lost manufacturing jobs. They cut taxes for the rich. They said we’ve got to do that in order to speed up economic growth. And what happened? Economic growth slowed down…. They said they were going to cut costs and prices. Inflation is actually higher now than the day Donald Trump took office. They said they were gonna drain the swamp. And then they expect us to be okay with the first family making a billion dollars or more in crypto deals while the president’s in office….
“A lot of people believed this president and Republicans when they said no new wars. Then, what do we get? A war with Iran in the Middle East right now, which means all of us here at home are paying higher gas prices.”
The Republican strategy is not to change their policies, Buttigieg said. “It’s changing the maps. Changing the rules. Because that’s the only way they could win. They know they’re on the wrong side of the American people….
“You’re already in the majority if you think that we need healthcare for all, not Medicaid cuts and cutting Obamacare…. Right now, if you think that the wealthiest people in the country need to be paying their fair share in taxes, which is more than they’re doing today, where they currently pay less than a lot of teachers and nurses and firefighters. You are definitely in the majority if you believe that the wealthiest nation in the world ought to do the best job of funding public education and making sure it works. Not this Republican approach, which is to literally eliminate the Department of Education. You’re not alone if you think that in any decent economy, one job ought to be enough. And you’re certainly not alone if you believe that a woman’s healthcare decisions ought to be up to her and no one else, that in a free country, you should get to be who you are, and love who you love, and live a life of your choosing. When you believe these things, you’re not just not alone. You’re part of a powerful majority. Really a supermajority of the American people.
“So, whether you’re a Democrat, an independent, or someone who has generally voted Republican in the past, most voters want the same things right now: to be led and represented by normal people who are good at getting things done. People want leaders who respect those who disagree or vote differently instead of calling them the enemy. People who know that God does not belong to a political party in the United States of America. Most voters want to elect leaders who are not simply trying to rebuild the past, but trying to create something new and better.”
I complained last week that starting with an update last month, the list of apps I’m testing in Apple’s TestFlight app has been sorted alphabetically, rather than by recency. Whatever is going on with this sort order, it isn’t affecting everyone. John Siracusa, amongst many others, has the same problem I do — his list is now alphabetical, and it’s driving him nuts too. Ryan Booker, amongst many others, still has his list sorted by recency.
The weird thing is, back on August 13, the iPhone version of TestFlight started showing my lists in recency-of-last-update order once again. There was no update to the TestFlight app itself. I just started seeing the list in the correct order once again. It was only on my iPhone though — on my Macs and iPad, TestFlight continued to sort apps alphabetically. Then, two days later, my iPhone went back to alphabetical order, and it’s been stuck there ever since.
When the list is sorted by recency, there’s also a “Currently Testing” header at the top of the list, and there are other (disclosable) categories like “Incompatible” and “Previously Tested” at the bottom of the list. When the list is sorted alphabetically, none of these category headers are visible.