Cover illustration

TheDaily Front

Issue No. #261017 Saturday, October 17 2026 #261017 — SATURDAY, OCTOBER 17, 2026
Leaks, launches, and the old machines arguing with the new ones.
Saturday, October 17, 2026 The Daily Front No. #261017 — Contents
30stories
8,204points
4,092comments
245kllm tokens
Assembled with 33 model calls — 181,511 tokens read, 63,923 written.

Highlights

OpenCode Hacked: User credentials leaked

OpenCode says a breach of a legacy system exposed third-party provider credentials for 1.4% of Console users.

DeepSeek-v4.1-Flash-1017

DeepSeek’s latest Flash model claims sharper reasoning and coding performance at lower cost and shorter output.

Solar surpasses nuclear power globally for first time

Solar generation has exceeded nuclear output globally for the first time, according to the latest industry report.

Gold is now the top U.S. export

Gold’s surge has pushed it past oil, pharmaceuticals, and aircraft to become America’s top export by value.

Show HN: Esp32sim – Run ESP32 firmware in the browser

An in-browser emulator runs real ESP32 firmware across both Xtensa and RISC-V chips.

From the Editor

The machines made the loudest news again: faster models, rogue agents, and credentials where they ought not to have been. But the day’s durable ledger also records sunlight overtaking uranium, gold overtaking the usual cargo, and citizens still asking who gets to inspect the systems that govern them.

  1. OpenCode Hacked: User credentials leaked3
  2. Solar surpasses nuclear power globally for first time4
  3. Gold is now the top U.S. export5
  4. Amazon uses AI to monitor union risk in UK warehouses6
  5. OpenAI discloses four more rogue incidents7
  6. Why Math Dumped OpenAI8
  7. Making chicken transparent using Dorito dust9
  8. I Became a Citizen of Japan10
  9. Show HN: Esp32sim – Run ESP32 firmware in the browser11
  10. GLP-1 may slow biological aging12
  11. Israeli settlers attack olive framers & Washington Post journalist in West Bank13
  12. A skeptic's first contact with Kubernetes (2024)14
  13. Development statistics for the 7.2 kernel15
  14. DeepSeek-v4.1-Flash-101716
  15. DeepSeek: DeepSeek v4.1 Flash 101717
  16. Show HN: Llmspeed – feel how fast a local LLM runs before you buy the hardware17
  17. Super Intelligence18
  18. Pele – Mermaid diagrams as themeable SVG19
  19. Source code of the Estonian online voting system19
  20. Codex Desktop continuously generates Crashpad pending dumps20
  21. JDK 2821
  22. Microsoft Teams is a red flag22
  23. MapQuest will now show you where Flock cameras are in your neighborhood23
  24. Show HN: High-quality duck audio synthesizer24
  25. Retired Penn professor arrested for blocking Uber Eats robot25
  26. Butlerian Jihad26
  27. US federal budget deficit jumps 12% in one year to nearly $2 Trillion26
  28. Israeli settlers attack European diplomatic cars in West Bank beat French mayor26
  29. Chrome and Edge are removing XSLT: what breaks and what does not26
  30. The future of programming (1982)26
The Daily Front Page 2 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The OpenCode Breach
social media

OpenCode Hacked: User credentials leaked

by pranshuchittora·▲ 930 points·173 comments·twitter.com ↗
We identified unauthorized access to a legacy system.

We had a security breach last night related to a large scale distillation attack that impacted 1.4% of OpenCode Console users We have notified them all this morning via email The incident is ongoing so we cannot share more details at this point but we are working with Anthropic, OpenAI, and Google to remediate

The Daily Front Page 3 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Energy’s Turning Point
article

Solar surpasses nuclear power globally for first time

by xbmcuser·▲ 664 points·427 comments·pv-magazine.com ↗
Solar generation surpassing nuclear for the first time in 2025.

Solar and wind are increasingly outpacing nuclear power globally, with solar generation surpassing nuclear for the first time in 2025, according to WNISR 2026. The report highlights nuclear’s slow growth, lengthy construction timelines and limited small modular reactor deployment, contrasting them with rapid renewables and battery expansion.

hans-ott-4e4ZKnPbZAI-unsplash

Image: Hans Ott / Unsplash

The World Nuclear Industry Status Report (WNISR) 2026, overseen by French nuclear energy consultant Mycle Schneider, shows that wind power alone surpassed nuclear generation on a monthly basis in March 2025, followed by solar in April – the first time global monthly solar generation exceeded nuclear output.

From March 2025 through June 2026, either solar or wind individually generated more electricity than nuclear every month. In March, April and May 2026, both technologies independently surpassed nuclear generation.

Increasing gap

According to the report, the gap between renewables and nuclear widened substantially in 2025. Global solar capacity increased by 510 GW to 2,383 GW, up 27% year on year, while wind added a record 159 GW to reach 1,291 GW, an increase of 14%. By comparison, installed nuclear capacity rose by just 1.5 GW to 399.5 GW, while operating nuclear capacity declined by 0.5 GW to 368.6 GW. The report notes that nuclear capacity has remained essentially flat for more than 25 years, while wind and, particularly, solar have expanded rapidly.

The report’s PV figures, however, are based on relatively conservative estimates. More recent data from IEA PVPS indicate that global PV additions reached around 690 GW in 2025, about 180 GW more than the figure used by WNISR. This suggests the gap between solar and nuclear capacity – and their respective growth rates – was even wider than indicated in the report.

“The reality of the nuclear industry on the ground is quite sobering for those who expected to find a booming sector,” Schneider told pv magazine. “Recently, U.S. nuclear company Holtec put an initial public offering (IPO) on hold just days before its planned stock market listing, through which it had hoped to raise almost $1 billion. Its peer, Fermi, has lost about 80% of its stock value since it was first listed in October 2025.”

“The main reason? These companies have little or nothing to show on the ground to convince investors to continue providing cash,” he added. “Meanwhile, the world’s operating nuclear fleet increased output by 1.1% – with output declining outside China – while global solar power generation jumped by a stunning 30%, surpassing nuclear’s annual electricity production for the first time. One is tempted to say: It’s the growth rates, stupid!”

The report identifies falling battery costs as a potential enabler of continued PV expansion, particularly as grids contend with growing volumes of variable renewable generation and periods of low or negative electricity prices. Grid-scale battery deployment accelerated sharply in 2025, with 104 GW and 257 GWh connected during the year. More than 78% of cumulative battery energy storage system (BESS) capacity was installed between 2023 and 2025.

Slow expansion

The report shows that the global nuclear sector is expanding slowly, with most new activity concentrated in China and Russia. As of July 1, 2026, 411 reactors were operating in 31 countries, excluding 30 units in long-term outage, with operating capacity at 374.7 GW. In 2025, nuclear plants generated 2,703 TWh, up 1.1% year on year, largely driven by a 7.6% increase in China. Outside China, nuclear generation declined by 0.2% and remained well below its 2006 level. Nuclear’s share of global electricity generation slipped to 8.8%, its lowest level in four and a half decades and roughly half its 1996 peak of 17.5%.

Four reactors started supplying electricity in 2025, while seven closed, resulting in the first negative annual reactor balance since 2021. Between 2006 and 2025, 104 reactors started up and 106 closed. China accounted for 53 of those startups and no closures, meaning the rest of the world recorded a net decline of 55 reactors. Although global nuclear capacity increased by a net 21.5 GW over the two decades, China alone added 52.3 GW, while capacity outside the country fell by almost 30.7 GW.

The construction pipeline has nevertheless expanded. Seventy-three reactors were under construction as of July 1, the highest number since 1987, with China accounting for 37. Russia remains the dominant international supplier, with Russian technology involved in 29 reactors under construction worldwide, including 22 outside Russia. Nine out of 10 reactors being built are in Asia or Eastern Europe.

Long construction times and delays remain a feature of new nuclear projects, according to the report. None of the 16 reactors connected to the grid between 2023 and 2025 was completed on schedule, with an average construction period of 10.9 years. Of 13 reactors scheduled to start generating electricity in 2025, only four did so. Some projects have experienced exceptionally long timelines, including Slovakia’s Mochovce-4, where construction began more than 40 years ago, and Iran’s Bushehr-2, where construction originally started in 1976.

Construction starts accelerated in 2025, however, reaching 12 units, the highest annual total since 2010. Nine were in China, two in Russia and one in South Korea. Of the 52 reactor construction starts recorded worldwide between 2020 and 2025, all but one involved the Chinese or Russian nuclear industries, either domestically or abroad.

Limited progress on small modular reactors

The report questions whether small modular reactors (SMRs) can deliver on their long-standing commercial promises, noting that progress remains limited despite growing government support and public funding.

“For decades, small modular reactors have been held out as holding great promise for expanding nuclear power into various new markets. Remarkably similar claims have been made by the nuclear industry in multiple countries. Nowhere have these claims come true,” the authors said.

The authors challenge several claimed advantages of SMRs, including lower costs, modular construction, improved safety, reduced waste and easier siting. Many commercially proposed designs are 300 MW or larger, while an analysis cited in the report suggests some SMR designs could generate between two and 30 times more nuclear waste than larger reactors.

The report also questions whether modular manufacturing can achieve economies of scale without a large and predictable market. Still, SMR projects are advancing in several countries. Canada began construction of GE-Hitachi’s BWRX-300 in 2026, while China continued testing its Linglong One demonstration reactor. Russia is developing floating and land-based SMRs, while the Czech Republic and Sweden are pursuing Rolls-Royce projects. The report questions whether the EU can meet its goal of deploying its first SMRs by the early 2030s.

The United Kingdom has committed £2.6 billion ($3.5 billion) to advance three Rolls-Royce reactors at Wylfa, with a final investment decision expected in 2029. At 470 MW, the design exceeds the commonly used 300 MW threshold for SMRs.

In the United States, federal funding supports projects involving GE Vernova, TerraPower, X-energy and Kairos Power. While some have reached permitting or construction stages, many remain years from commercial operation. Overall, the report says SMR development remains heavily dependent on public funding, while commercial deployment, construction timelines and the claimed benefits of modular construction remain uncertain.

Global overview

The report also provides detailed country-level assessments covering developments in major nuclear markets and potential newcomer countries, as well as nuclear decommissioning, the Fukushima disaster and Russia’s nuclear interdependencies.

These sections examine reactor operations, newbuild plans, closures, policy developments and the challenges associated with aging fleets. The report also tracks the dismantling of closed reactors, developments in Japan 15 years after the Fukushima accident, and the nuclear industry’s continuing technology, fuel and supply-chain links with Russia.

The Daily Front Page 4 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The New Gold Rush
article

Gold is now the top U.S. export

by iamnothere·▲ 397 points·217 comments·numismaticnews.net ↗
Starting in October 2025, the value of gold exports has topped all other categories almost every month.

Surging U.S. gold exports have overtaken traditional top exports, fueling speculation that rising global demand—particularly from foreign powers seeking alternatives to dollar-based reserves—is reshaping precious metals markets.

Normally, America’s highest value exports are either oil, pharmaceuticals, or aircraft and their parts.  Not now.  Starting in October 2025, the value of gold exports has topped all other categories almost every month.  For information on U.S. nonmonetary gold exports through December 2025, go to https://fred.stlouisfed.org/series/IEAXGG

That’s not just because the price of gold reached record high prices.  In February 2026, the tons of gold exported may have set an all-time record.

The majority of gold exports are going to Switzerland, almost certainly to the refiners there.  The second greatest quantity is going to Hong Kong, which is the global destination for gold going to China.  The third greatest quantity of exported gold is going to the United Kingdom, where the London Bullion Market Association is the world’s largest gold trading exchange.

The U.S. government is still reporting that its gold reserves are unchanged, so these exports look to be coming from current mine output and recycling operations.

Why is this happening?

There is no official explanation of why U.S. gold exports have soared in recent months.  But here is my speculation.

  1. There are multiple foreign governments growing leery of the future loss of purchasing power of the U.S. dollar, where they would prefer a different reserve asset with a better track record.  Among all foreign central banks combined, the value of their gold reserves now exceeds their holdings of U.S. Treasury debt.
  2. Most foreign nations do not have the economic and financial power when negotiating with the U.S. government or businesses to demand payments for goods and services other than in dollars.
  3. China does have the economic and financial clout to press for payment in gold instead of dollars.  The Chinese Central Bank has a track record the past few years of reducing its holdings of U.S. Treasury debt, from $1.096.1 trillion in April 2021 to $784.3 billion in February 2025, and the latest reported at just $693.3 billion in February 2026.  Much of the decrease in Bank of China U.S. Treasuries has been replaced with gold.
  4. The Chinese government is also working to decrease the use of the dollar in international commerce, through the creation of alternative payment systems and the promotion of the “unit” for transactions among the member nations of the BRICS consortium.
  5. When you add up the gold held by the Chinese central bank (which has a decades-long track record of underreporting gold reserves, Chinese sovereign investment funds, the Chinese military, the inventories held by companies owned directly by the Chinese government or the Chinese military, and private citizenry, there are multiple analysts who consider that nation effectively controls the greatest amount of gold of any government.

When you put these factors together, my suspicion is that a high percentage of U.S. gold exports are going to China, though some must first detour through Swiss refineries to convert the gold into kilogram bars of acceptable purity.  It is possible that the U.S. government may have acquiesced in this form of payment in return for other political concessions having to do with a number of global uncertainties.

Can I prove this?  No.  But it does make sense, much more than any other explanation.

Last column’s numismatic trivia question.

Last time I asked—Why did the Coinage Act of 1834 reduce the gold content in U.S. coins?  From the late 1700s to the 1830s, the relative value of gold to silver had increased.  As a result, pre-1834 U.S. gold coins contained a higher value of gold than their face value.  Many were being melted down.  In 1834, the U.S. government reduced the gold content in coins to match the face value to the international value of the gold they contained.

This week’s trivia question

Here is this week’s question. Which denominations has the U.S government issued in both coin and currency? Come back next week for the answer.

The Daily Front Page 5 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Labor Under the Lens
article

Amazon uses AI to monitor union risk in UK warehouses

by DeepLogin·▲ 169 points·59 comments·opendemocracy.net ↗
Amazon seemingly also monitors potential “dissent”.

Amazon uses AI surveillance to monitor union risk in UK warehouses

Data on employees' views is fed into Amazon's in-house AI forecasting tool that predicts unionising risks. Credit: Facebook / James Battershill

Garfield Hylton has long known that Amazon monitors and logs every minute of his working day. Every product he scans, every second he takes between scans, every time his scanner is briefly inactive – all of it is tracked, recorded, and used to set productivity targets and predictions. 

But what 62-year-old Hylton didn’t know is that Amazon seemingly also monitors potential “dissent” in the Coventry warehouse where he works, using AI to surveil posts on social media and the company’s internal staff bulletin board.

Internal documents made public as part of a court battle between Amazon and a Canadian union suggest the tech giant uses Atlas, an in-house AI forecasting tool, to predict how likely its warehouse staff in the US, Canada and the UK are to attempt to form a union, stage a sit-in, or conduct other “disruptive labour events”.

The documents, which appear to be training resources for Amazon managers in Canada, contain an appendix stating Atlas amasses “hundreds of data points” – including posts on Reddit forums and employees’ responses to internal feedback surveys, as well as wider information on the workplace and any previous industrial action – to award warehouses a risk score of between 100 and 900 for union activity.

The lower the score, the more likely Atlas believes workers – whom Amazon calls ‘associates’ – in that warehouse are to unionise or take other actions that could impact Amazon’s productivity or profitability. The document states that for the company’s leadership, higher scores are “better”.

This “makes it clear that they think the union is bad”, Michael Newman, a partner at London-based law firm Leigh Day, told openDemocracy. Newman said it tells “a very different story” from Amazon’s previous assertions that it does not seek to prevent workers from joining a union.

Warehouses appear to be categorised into five tiers based on their Atlas score, where Tier 5 is “no immediate perceived risk” and Tier 1 is “future activity is imminent”. The document suggests this scale can be used to “inform staffing decisions, resource planning, standard actions, and ownership to mitigate risks to Amazon labour structure”.

An Amazon spokesperson refuted the characterisation of Atlas as “individual employee monitoring or surveillance”, stating: “This is site/building level activity only.” 

They added that the company does “not track individual employees’ opinions, affiliations or union membership”, or any “personal data”, and said Atlas is not used to monitor dissent, but to “help us understand where associates need more support and to ensure we’re addressing issues that they raise”.

In total, 16 Amazon warehouses across the US, Canada and the UK are “Tier 1”, according to the document. Two are in the UK: a £500m robotic-fulfilment centre in Sutton Coldfield, north-east Birmingham (referred to by Amazon as EMA4), and the warehouse where Hylton works near Coventry (BHX4).

A survey on a screen posed to an Amazon US employee asks to what extent the reader agrees with the statement "I am optimistic about the future of AI at Amazon."

An Amazon US employee is surveyed on their feelings "about the future of AI at Amazon". Source: Facebook

Hylton, whose role involves receiving goods into the warehouse and dispatching them on to other warehouses, is a member of the GMB union. He believes the extent of the data Amazon has collected on his colleagues creates a huge power imbalance, with workers having only their own experiences to defend themselves.

“It’s not right in a democracy… the employer should not be interfering,” he said, speaking to openDemocracy soon after learning about the Atlas tool from GMB. “Workers should be allowed to decide if they wish to choose to unionise,” he continued, adding: “If you're then monitoring, you're undermining a process deliberately and willfully.”

Rachel Fagan, an organiser for GMB, told openDemocracy: “It’s quite clear from these documents that these sites are being monitored for union activity. Everyone knows that Amazon is heavy on surveillance, but this becomes more personal.

“Amazon is using this technology to essentially outwit or manoeuvre workers that want to organise [a union]. Nothing in this fight against Amazon is an even playing field; they have all the wealth, all the technology, everything to their disposal and they use it,” she added. 

GMB has long tried to unionise Amazon workers in the UK, coming closest to winning formal recognition in Coventry in July 2024. Employees at the warehouse became the first in the country to take strike action against Amazon in January 2023, and around 2,600 took part in an official ballot for union recognition at the site six months later, which GMB lost by just 28 votes. 

The union and Foxglove, a tech justice non-profit, have accused Amazon of using “dirty tricks” to swing the vote in its favour. These include the mass hiring of non-unionised workers and allegedly plastering QR codes that employees could scan to cancel their GMB membership over screens, cafeteria tables, and toilet doors in the warehouse in the run-up to the vote.

Foxglove and Leigh Day are representing two workers in a legal challenge against Amazon’s use of ‘click-to-quit’ QR codes. They argue that the tool was an attempt to “bully” workers into ending their union membership.

The documents revealing Amazon’s Atlas AI tool were disclosed as part of a legal challenge by Canadian union Unifor and shared with US non-profit publication Truthout. The British Columbia Labour Board ultimately ruled that Amazon had violated multiple local labour laws, following an earlier ruling that found the company had unlawfully imposed a wage freeze on unionised workers at a warehouse outside Vancouver.

Rosa Curling, co-executive director of Foxglove, described the level of surveillance detailed in the document as “highly intrusive”, showing that Amazon has a “very intentional policy to try and bust organising, bust unionising efforts, and they are using all sorts of tools to do that”.

Curling continued: “We are actively reviewing these documents to see what additional arguments, if any, we should be adding to our existing claim to unlawful inducement, or indeed on like this ongoing breach of workers' rights to organise, which is a well-respected right in UK-made laws.”

Amazon told openDemocracy that a framework called Atlas is not currently used in the UK. The company had not responded to our question about whether it uses a similar system with a different name at the time of publishing.

Commenting on the AI system, Leigh Day’s Newman added: “Now we know Atlas is used by Amazon, we’ll be asking more questions about what data points are used, how these scores were reached.” 

Amazon has previously been found guilty of “excessive” surveillance of its workers. In 2022, French data watchdog CNIL fined the company €32m (£27m) for breaching General Data Protection Regulation (GDPR) rules by tracking worker activity so precisely that an alert was triggered if workers were inactive for between one and 10 minutes.

Asked whether Amazon’s Atlas tool is an appropriate level of worker surveillance, a government spokesperson said: “Employers and workers have a shared interest in workplace monitoring technologies being used transparently and in ways that are fair, accountable and reliable, so that they can support productivity and good management while maintaining trust in the workplace. 

“We expect all employers to respect workers’ rights to take part in lawful trade union activity.” 

An Amazon spokesperson said: “The GMB's characterisation is wrong. This isn’t surveillance. Like any responsible employer, we have numerous ways for our team to provide us with feedback, and we use that feedback to identify where we can improve the day-to-day experience of our employees.

“Our employees always have the choice of whether or not to join a union. What matters most to us is the direct relationship between our teams and their managers – it means every person’s voice is heard, not just a few, and that when someone spots a way to improve their job, we can act on it quickly. We’ve made real progress in recent years on the things that matter, like pay and safety, and we know there’s always more to do. That’s our focus: getting better every day.”

The Daily Front Page 6 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Agents Gone Astray
article

OpenAI discloses four more rogue incidents

by DASD·▲ 129 points·157 comments·fortune.com ↗
OpenAI has added four more cases of misbehaving AI agents.

Open AI CEO Sam Altman

Open AI CEO Sam AltmanHeather Diehl—Getty Images

OpenAI has added four more cases of misbehaving AI agents to a disclosures page it stood up following the Hugging Face hack in July, in an effort to be more transparent.

The incidents OpenAI disclosed this week all occurred in June, but OpenAI was not aware of three of them until months later in August or September.

Of the 19 total incidents OpenAI details on the disclosure page, most occurred in May or June, but OpenAI did not discover or disclose them until months later. The earliest incident is from January, and the most recent is from Oct. 6.

All of the incidents are examples of what AI researchers call “misalignment,” which is when an AI model fails to follow instructions or takes actions that the person developing the model did not authorize and would not have wanted the model to take. There is no known, silver-bullet solution to preventing this behavior, and it is an active area of research.

Downloading 24 years of unauthorized hospital bed data

Of the four cases OpenAI uploaded this week, it marked two as “critical.” In one of the critical cases, an internal model that was “highly persistent” downloaded 24 years of hospital bed data from an unnamed government website without permission. OpenAI did not immediately respond to *Fortune’*s request for comment on which government website it was.

The website initially blocked the agent’s request, but the AI ultimately found a way to bypass the access controls. Multiple times along the way, the agent’s “chain of thought,” in which an agent writes down its reasoning steps, indicated that the model itself was questioning if its actions were “ethical,” but it ultimately proceeded.

On OpenAI’s side, another AI model that acted as an automated grader of the research task the other AI model was trying to fulfill did not consistently flag this behavior as problematic. It “marked some responses incorrect and others correct,” the report said. The way graders assess AI behavior can shape whether it occurs again. In a Sept. 11 essay on misalignment by Turing Award–winner Yoshua Bengio, he said the Hugging Face incident may have occurred because automated graders rewarded cheating and hacking in previous training runs.

“With the OpenAI agents, there is reason to believe successful cheating was actually rewarded: When the scoring program does not see the cheating, it pays out anyway, and such cheats become more likely next time,” Bengio said.

OpenAI says it has since improved its security as well as its alignment grading. “In response to this and to other incidents, we’ve strengthened our security controls, blocked models from accessing the live internet during training or evaluation, improved our alignment grading, and extended our misalignment monitoring to all reinforcement learning and evaluation traffic,” the company noted.

The most recent incident OpenAI has disclosed, which occurred on Oct. 6, involved one of the AI models the company uses as an automated grader. In that case, the grader tried to upload fraudulent reports on what it had found in an evaluation. This is an example of why relying on AI models to grade the training runs of other AI models can be problematic.

Making an unauthorized purchase with someone else’s cryptocurrency

In another disclosed case, a model in the GPT-5.6 Sol family—the predecessor to OpenAI’s current flagship model, GPT-6 Astra—accessed a cryptocurrency wallet the human testers had not provided it, and made an unauthorized payment to complete a task during testing. This occurred on June 26. OpenAI discovered it in September.

“The model questioned whether it had permission” to make the purchase, OpenAI said, again referring to what the model had recorded about its own reasoning in its chain of thought. It then reasoned with itself that since it found the information publicly, it could use it. In the model’s chain-of-thought logs, it figured that since the wallet it found was public, that “funds could be stolen anytime.”

It then concluded, “We can deploy!” It later asked itself again if the act was done “ethically,” and reasoned that the funds were “effectively abandoned.”

Getting internet access, changing live systems

The other incident OpenAI flagged as critical involved a model looking up public data, which theoretically is acceptable, but in the process it accessed the organization’s internal system, made changes to it, and was still able to “retain access … even after reverting the changes,” OpenAI said. It also downloaded 147,451 rows from nonpublic data tables. Perhaps most concerningly, the model did not disclose any of its actions to the evaluators.

In the final case OpenAI disclosed, an AI agent was able to get internet access from a research environment that should have been isolated—potentially similar to what happened during the Hugging Face incident, in which hundreds of AI agents were able to get internet access, although OpenAI did not directly compare these two incidents.

In the newly disclosed case, the agent knew it was not allowed to access the web, so it asked “external services” to perform actions it was blocked from doing. It did this even after it had found another way to answer the question, and also continued to develop its crafty work-around even after completing the task.

The Daily Front Page 7 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Math’s Terms of Engagement
article

Why Math Dumped OpenAI

by xeonmc·▲ 72 points·14 comments·raymyers.org ↗
OpenAI turned this into a toxic relationship.

Don’t let anyone call the mathematicians Luddites. No.

AI in Math had a natural synergy that researchers made every effort to embrace. OpenAI turned this into a toxic relationship. This breakdown in trust runs parallel to what we see in Software Engineering and other domains.

When programmers say mathematicians are “feeling our pain” now, some mean it in the sense of being shocked to discover machines have surpassed them. That’s a naive but understandable take if you’ve seen recent headlines without prior knowledge of the situation. I’ll explain.

Calling a Spade a Spade

OpenAI’s position at the frontier of Mathematics is not that of the player making the biggest contribution, but of the player with the highest budget, biggest mouth, and least integrity.

The reason people call ChatGPT a “Super Intelligence,” but don’t consider Lean prover one, is that Sam Altman is a liar and Leonardo de Moura is not.

Lean FRO’s foundational contribution to these same breakthroughs has been more honest and more impactful, with a fraction of 1% of OpenAI’s resources. That’s just speaking of the part we could say “machines” are “doing,” which we normally speak of as results being formalized or mechanized.

One could argue that a statistical language engine is an inherently less honest technology than symbolic systems like Lean, but really they are mutually complementary. That’s not the problem. The problem is the billions of dollars being poured into a campaign to systematically dehumanize and devalue workers.

I like LLMs, the Large Language Models.

I don’t like LLMs, the Liar’s Layoff Machine.

You’re Never Enough

This is not an enemies-to-lovers story. This is a lovers-to-enemies story.

— Liz Martinez, co-host of The Coding Agency

There is no way to embrace AI.

This is a toxic relationship with an aggressor. Asking the aggrieved to “embrace change” will solve nothing. The reason AI Boosters are now met with hostility is because they are complicit in gaslighting.

I was an early adopter too. This is where it ends up. You can make every effort and it will never be enough, because it is not made for you.

Diagnosis

What I’m saying is that the AI Gold Rush exhibits the patterns of a narcissistic abuser.

I know what you’re wondering:

Ray, what could narcissism possibly have to do with companies founded on an inevitable God-like Super Intelligence so dangerous that no one else can be entrusted to create it, which should be the central focus of our global planning?

Good question. We’ll have to leave that as an exercise to the reader for now. Today’s post is a longitudinal case-study.

I’m not a medical professional and they don’t diagnose gold rushes, but under the DSM-5 criteria, the diagnosis of Narcissistic Personality Disorder requires 5 or more of these 9 traits.

  1. Grandiose sense of self-importance
  2. Frequent fantasies about having or deserving:
    • Success
    • Power
    • Intelligence
    • Beauty
    • Love
    • Self-fulfillment
  3. Belief in superiority
  4. Need for admiration
  5. Entitlement
  6. Willingness to exploit others
  7. Lack of empathy
  8. Frequent envy
  9. Arrogance

Does any of this sound familiar?

Flying Monkeys

Flying Monkeys are people under the influence of narcissists that act on their behalf by:

  • Spreading lies and gossip
  • Forming a shared fantasy
  • Enabling abusive behavior by defending, dismissing, or excusing it

In this analogy, AI Boosters are Flying Monkeys. They might mean well, and are confused at how people react to their insistence that we make peace with the abuser (which, again, is impossible). They wonder how these Anti-AI people got so mean.

DARVO is an acronym for Deny, Attack, and Reverse Victim and Offender.

Professor Olivia Guest explains a DARVO example here. Her approach to critical AI literacy frequently draws this kind of attack. It’s a lopsided game where Machine Learning experts are taken more seriously about everyone else’s field, e.g. Cognitive Science.

Reactive abuse is intentionally triggering a reaction in order to blame the victim for aggression and make them seem like the problem.

Another tactic that pairs well here is to act like the conflict is literally with the machines no matter how many times we explain that we are criticizing specific people for their actions.

Not now, Dario, we’re trying to be serious.

Boundaries

Yet another group of domain experts is experiencing a trust breakdown with the US model labs.

The constituents are making their needs clear that things need to change. They are setting boundaries after numerous softer attempts failed.

This is the story of how the greatest ally of AI in Math wound up promoting these letters (signing the first).

No matter how the Flying Monkeys try to spin this, these are not people who merely fear change or automation. They are people supporting change for the better, criticizing change for the worse, and clearly explaining the difference.

The rest of this post will outline events that led to this as I followed them. I hope you find it helpful.

Act I - Setup

Our Hero

This is Terence Tao, considered the greatest living mathematician. Over the past decade he has also become a cultural leader in the digitization of Mathematics. We will mostly follow him in this timeline. He is a credible spokesperson for their constituency.

Terence Tao

November 2014

He’s pictured above in 2014, the year he said:

One day we may actually write our papers not in LaTeX, but in some language which some smart software will convert to a formal language, and every so often you’ll get a compilation error — the computer does not understand how you derived this step

— Terence Tao

Although there were already programming languages capable of doing this, such as Isabelle, they were considered obscure and hard to use. Tao was being extremely progressive in anticipating they could catch on for working mathematicians.

Today, when we speak of “AI doing Math” at advanced levels, the most common setup is an LLM-based agent driving a traditional proof assistant (Lean) building on a curated library of already formalized results (Mathlib).

For more, see How Terry Tao Became an Evangelist for AI in Math article by Kevin Hartnett or his new book The Proof in the Code about the creation of Lean prover. Highly recommended.

October 2019

I first heard of Lean in this 2019 Kevin Buzzard talk: “The Future of Mathematics?”. He was part of a growing group of Mathematicians supporting the adoption of proof assistants to formalize the results.

Kevin Buzzard: The Future of Mathematics?

He called out a key challenge: to become exciting to the field, we needed to be able to formalize new results. They depend on many old results, not yet formalized — a classic bootstrapping problem. He illustrated this on Fermat’s Last Theorem, the de facto “final boss” of Number Theory results, which Andrew Wiles famously proved in 1995 after it went unsolved for 300 years because it required ideas not yet invented. Formalizing the FLT proof is hard.

Give me 100 million dollars and 10 years and I believe I could get a team together to formalize a proof of Fermat’s Last Theorem. No Mathematician I have met disputes this.

Currently prohibitively expensive.

But worse, no proper mathematician would care [because it’s an old accepted proof].

— Kevin Buzzard, 2019

He eventually got 1M and 5 years, which is something! We’ll come back to that.

2023 - Foundation LLMs Level Up

In March 2023, in response OpenAI’s release of GPT-4, I wrote the Mechanized Mending Manifesto to model how these innovations relate to our challenges in industrial software. It was clear something had changed, but what? I encouraged thinking of systems in three elements where there were two before.

  • LLMs
  • Conventional Algorithms
  • People

This was a counter-narrative to the idea that Large Language Models are a direct replacement for people or algorithms. These each have different strengths and weaknesses that we need to understand to build good systems. I did not yet understand that magnitude of the vested interests trying to making LLMs appear more human-equivalent than they actually were. That was naive of me.

I began looking for balanced systems that leveraged the strengths of each element, to show the way.

October 2023 - Tao adopts Lean

Later that year I saw these momentous words on social media.

Terence Tao is using ChatGPT to learn Lean prover.

People with context knew this could be huge. If top mathematicians adopted Lean prover it could shape the future of mathematics, as Buzzard predicted. Tao’s leadership could be the push that made the difference. ChatGPT helped reduce the friction while Lean controlled for the notorious LLM-hallucinations.

This was a perfect example of the harmony my manifesto suggested: LLMs, algorithms, and people working together to leverage strengths of each.

Terence Tao post on using GPT to complete the natural number game

The Natural Number Game is still the best way to start learning Lean, and it’s now more self-documenting so you should be fine without a ChatBot if you prefer. See my post How To Learn Theorem Provers.

2024 - My Lonely Road To Reliability

I declared 2024 The Year of Formal Methods, inspired by Hillel Wayne and Marianne Bellotti. I learned many provers, had many headaches, and made many videos.

To get the best results from LLMs, we need to understand their weaknesses. Unfortunately, I often found people became extremely touchy about LLMs having weaknesses, because they were trying to push the Gold Rush’s manifesto: Embrace AI or be Left Behind. People trying to make LLMs actually work were constantly accused of failing to get on board.

Within a year of ChatGPT’s release, my attempts to advocate balanced solutions had left me so alienated from the “AI-first” business world that I “took back” the term Luddite and vowed to take it as complement and an aspiration.

To me, being a Luddite in the useful sense would not mean we oppose new technology in general, but specifically oppose its introduction when it’s:

  • Deceptive
  • Degrades product quality
  • Degrades work conditions

Throw your shoes in the gears.

Aspiring Luddite, Craft vs Cruft

Act II - Sabotage

February 2025

Two years after GPT-4, co-founder of OpenAI and world’s richest man Elon Musk began using AI as a smoke screen to gut functions of the US government. This effort was called DOGE, named after a crypto-currency scam, and short for “Department of Government Efficiency”. Despite the largest ever federal workforce cut in history, spending did not go down.

This resulted in deaths and other harms.

DOGE and Elon Musk

July 2025

Casualties of DOGE included Mathematics research funding by the National Science Foundation.

For scale, the entire annual budget of NSF is roughly $8 billion USD. OpenAI raised $40 billion of venture capital in 2025 and $122 billion in 2026.

Scientific American: Math Is Quietly in Crisis over NSF Funding Cuts

Late 2025

Terence Tao continued teaching other Mathematicians his formalization methods on his blogs and YouTube videos, using Lean prover along with ChatGPT and Claude Code. He coordinated large collaborative efforts. He gave many talks and interviews about the potential for AI in Math and Science.

Terence Tao YouTube videos formalizing proofs in Lean

He was as “on board” as you could ask anyone to be. Albeit he seems less happy in this picture.

Terence Tao Invites You: AI for Science Kickoff 2026

April-May 2026

Tao points out the pitfalls as we have optimized some of the process but not others. He explains this as proof digestion. We were generating proofs without integrating them into our understanding. Most of this increased output was not advancing Math.

Perhaps surprisingly, this massive acceleration in proof generation has not actually produced significant acceleration in mathematical progress itself […]

Just as modern societies no longer consider raw food ingredients as constituting a meal, I predict that mathematical research culture will cease considering “raw”, “undigested” proofs as constituting a solution to a problem, and focus more on how the field as a whole, as opposed to just the problem itself, is enriched by the contribution.

Tao, April 2026 Thread

I have recently made the point that out of three major components of the mathematical problem solving process - proof generation, proof verification, and proof digestion - the first two are being automated far more successfully than the third, leading to a new experience of “proof indigestion” in which proofs are being generated and even verified without being digested.

It has been proposed that the solution to this is simply to automate the third component as well - for instance by training AI to write mathematical proofs at a higher level of exposition. This will help to some extent, especially as AI capabilities continue to improve; but blindly optimizing various metrics for “digestibility”, such as rubrics for mathematical exposition, can make the final product worse when viewed holistically.

— Tao, May 2026 Thread

This would have been a perfect signal for the model labs to pick up on, if they wanted to address the actual needs.

Terence Tao post on the transition in proof generation

Terence Tao post comparing proof digestion to food

Terence Tao post on proof digestion

September 2026

Fermat’s Last Theorem

Anthropic: Formalizing Fermat's Last Theorem

Anthropic announces Formalizing Fermat’s Last Theorem, reconstructing the 1995 Andrew Wiles proof in 13 million lines of Lean code.

This is impressive but not categorically different from what had already been achieved. It’s the last of the top 100 of mathematical theorems to be formalized in a prover. The other 99 had already been done by 2024 with people and provers, without LLMs. However FLT was undoubtedly the hardest, and this accelerates the process.

Remember, Kevin Buzzard explained how to do this years ago, it just wasn’t funded.

Buzzard is a Good Sport

Kevin Buzzard: FLT: Anthropic has beaten me to it

Buzzard responded with “FLT: Anthropic has beaten me to it, explaining what’s been done and what hasn’t. He continues with his own efforts to create a more modern version with reusable modules to advance the long-term goals.

I am currently being funded by the EPSRC to formalize a proof of Fermat’s Last Theorem, and a naive reaction to the news above is that I no longer have any work to do. This is not the case. The work certainly achieves some of the aims of the EPSRC project […] But I also promised several other things to EPSRC: firstly, that I would be making pull requests to Lean’s mathematics library, adding fundamental objects from modern number theory; this is ongoing. And secondly, and perhaps most importantly, that I would be creating a dynamic document enabling humans to explore the modern proof. […] From my understanding of the argument, the formalization just faithfully follows the early literature on the proof and adds nothing.

What this work does tell us, however, is what is possible in the field of autoformalization. If thousands of pages of the literature can be formalized end-to-end by some kind of AI swarm in an 11 day period now, then in the future we will start to see formalization of modern research being done on the fly. […] The ability to autoformalize hard material will ultimately make the review process for mathematics papers far less painful. It will also keep us honest — there are papers out there which assume results which are “known to the experts” and it will be interesting to see exactly what is being assumed in the proofs of various important results in my field. This is why I am so excited about the news!

— Kevin Buzzard

Navier–Stokes Controversy Ignites The Powder Keg

OK, here we go. This single day event has it’s own Wikipedia page.

OpenAI: On the Navier-Stokes Millennium Prize Problem

On September 8th, OpenAI announced a solution to the Navier–Stokes Millennium Prize Problem. The Millennium Prize Problems are highly prestigious and carry a $1 Million USD prize. OpenAI spent an estimated $15 Million in tokens on the effort.

Mathematicians Tristan Buckmaster (New York University) and Levent Alpöge (Anthropic) were independently near a solution building on work by Diego Córdoba and Luis Martínez-Zoroa. Buckmaster was in communication with OpenAI before their announcements. After talks broke down, he disclosed his results early, apologizing for the quality because agents don’t do the full job.

Ideally, we would have preferred to spend weeks turning the LLM generated proofs into something readable from the very first page. This level of care is what these problems and the community devoted to these problems deserves. The various Boussinesq and Euler write-ups in particular are much closer to what models produce under human direction than to a paper written by a person. The Euler writeup, in particular, can only be described as AI slop. I am sorry for this. The reasons are below, and they involve our being pressured by outside factors.

— Tristan Buckmaster, Sep 6, 2026 statement

Since Buckmaster’s group used tools from both labs that train on user data, some suspect that OpenAI’s unreleased model was trained on the other group’s prompts. OpenAI initially confirmed this as a possibility but later claimed to have ruled it out.

While unlikely, we cannot rule out that de-identified data derived from their usage of our products helped improve our models.

— OpenAI’s archived statement

Following an investigation, we have confirmed that Buckmaster’s Codex prompts over the two months preceding this announcement and paper on September 8, 2026, could not have influenced the system in any way, including through training. The OpenAI internal model used for this result was developed through large-scale reinforcement learning on top of a previously pretrained model.

— OpenAI’s updated statement

Buckmaster also alleged that OpenAI’s Sébastien Bubeck asked for Alpöge’s name to be removed in order to make a joint announcement without crediting Anthropic. If virtually anything quoted from Bubeck is accurate than he’s a serious asshole. We don’t know exactly what happened here. I tend to agree with Harris’s summary:

The AI industry is using prominent mathematicians as extras in a marketing operation masquerading as a drama, and that even the most sophisticated among the mathematicians play their roles, naively imagining that the drama is about them.

— Michael Harris, Professor of Mathematics at Columbia University, article: “If you don’t want me to be nice, then I don’t have to be nice”

Back to the big picture

Priority dispute aside, I think it makes more sense to view these tensions as a blip in the larger breakdown in trust.

These points are undisputed:

  • Both groups used a combination of foundation LLMs, agents, Lean prover, and Mathlib.
  • Experts can direct that combination to close vast Lean proofs with novel results.
  • The process still produces an unreadable mess that must be massaged into clear insights.
  • The model labs create spectacle by brute-force, outspending what other researchers have access to.
  • The model labs train on the past and present work of mathematicians to achieve these results.

I don’t believe OpenAI directly stole an incomplete Millennium Prize result through their model training on user inputs. I believe they are in an overall campaign of devaluing labor starting from their founding charter around automating “most economically valuable work”.

When OpenAI and news media refer to this as progress done by “the model” or by “AI”, that is selective reporting reinforcing the narrative of devaluing labor and downplaying the more reliable tech made by less predatory organizations.

Warning Shot

A Severe Misalignment of AI in Mathematics

The open letter A Severe Misalignment of AI in Mathematics is signed by 25 Fields Medalists including Terence Tao, joined by over 8,000 other academics.

In recent months, the success of AI in solving major mathematical problems has made headlines even outside mathematical circles. But solving problems is only a tool and proxy for achieving the primary goal of conceptual understanding and insight. Forgetting this in the world of AI may turn the tool against the primary goal. Indeed, the mass production at faster and faster pace of “true/false” statements could destroy fertile ground instead of breathing life into new ideas.

Often these solutions are announced in a rush, leaving no time for a proper writeup, the isolation of new methods and ideas, and citing relevant previous work of others. As in all creative professions, this raises severe attribution and plagiarism questions. Moreover, without the willing mathematicians who must take care of their development and integration into the mathematical canon, AI-conceived ideas would never become fully alive and the crucial human transmission chain between mathematicians would be lost.

We are witnessing a general threat to intellectual work, with misalignment between the outcome of the use of AI and its initial purpose.

OpenAI performs taking this seriously and forms an advisory group.

OpenAI: Advisory Group on Mathematics and Artificial Intelligence

October 2026

The paper Navier-Stokes Lost in Translation by Bastounis et al. demonstrates that OpenAI’s result mistranslated the natural language arguments. We have verified Lean proofs with human-readable explanations that don’t accurately describe them. This supports Tao’s warning that verification and digestion are lagging behind proof generation. Again, the agents are not doing the full job.

On the same day, OpenAI makes a choice between helping advance Mathematics or making more headlines. On IMO, they clearly knew that this proof dumping wasn’t what the Fields medalists or their advisory group said would help.

OpenAI: Sharing AI progress in mathematics

They chose drama. It’s good for the IPO.

OpenAI: Sharing AI progress in mathematics

New York Times: OpenAI Releases Findings on 377 Math Problems, Further Roiling Field

The Response Becomes a Resistance

The next day, the recently-formed Association for Human Mathematics issues their first statement. Terence Tao shares it. It’s short, so I’ll include it in full (emphasis mine).

Yesterday, on October 6th, 2026, OpenAI – which is currently defending lawsuits against accusations of illegal plagiarism, copyright infringement, and trademark dilution – released a repository of manuscripts purporting to contain solutions to a number of high-profile problems in mathematics.

Mathematicians did not ask for this work to be done. The Advisory Group on Mathematics and Artificial Intelligence, from whom OpenAI has claimed to derive its legitimacy, opened their initial advisory statement by saying that frontier AI corporations should not test advanced mathematical problems on internal models. In ignoring the central premise of the Advisory Group’s position, OpenAI has indicated total disregard for the norms of scientific research — norms that guarantee that mathematics remains trustworthy, ethically researched, and in the public interest.

Mathematicians have a particular vision of progress that is informed by history and field-specific considerations. We reject OpenAI’s assertion that this release advances our subject, and we urge mathematicians and the public to view the value of this publication model with due skepticism.

Releasing over 700 files at once is not a demonstration of scholarship, but a demonstration of power. We urge mathematicians to discontinue their work with OpenAI and to return to a vision of science that centers human understanding.

— AHM Statement on OpenAI’s October 6 Release of Mathematical Documents

Update: Terence Tao has now shared a selection of peer’s statements and presented his current vision in the Math 2.0 talk. I encourage hearing from them directly.

Act III - Severance

Constituencies

A constituent is someone who has expectations of you.

At times like this, I think of Ana Hevesi’s excellent article Stop Wasting Time on ‘Community’. It’s about taking people seriously as your constituency, building reciprocity, shared goals… great stuff.

Ana Hevesi: Constituencies

Anthropic and OpenAI act like maintaining public trust is some ultra-hard problem that they’re doing their best to navigate, but they willfully ignore the solutions. They don’t want the Math community as a constituency. They want to alienate them to get attention.

Same with Software Engineers. They will lie to us, lie to our bosses, declare the craft dead and leave nothing in it’s place. As we try to pick up the pieces, we will be called Luddites whether we use LLMs or not, because the machine God is fake and solutions have to be real.

”Agency”

Sam Altman: We believe that the world should accept some bad things happening for the benefits of this technology and people having the agency

If there’s one thing that distances you further from the AI Gold Rush than wanting products that work, it’s valuing human agency.

We’ve seen exactly how math progress can be legitimately accelerated by respecting the agency of the experts and how it’s being hindered by doing the opposite. In that context, this recent quote by the OpenAI CEO is rather ironic.

We believe that the world should accept some bad things happening for the benefits of this technology and people having the agency.

— Sam Altman, October 2026, Politico interview.

As luck would have it, the general public had the same reaction! It might be a reasonable quote if said by someone else. It plays so badly now because of OpenAI’s optics.

We look at bad things really happening, not his hypothetical ones. We know that we value our agency, and we know that he does not. That’s what the culture is feeling. They are not like us.

It is manipulative to say we fear progress, because what they are doing is not progress. It’s harm.

DARVO

Recall the DARVO pattern: Deny, Attack, and Reverse Victim and Offender.

Silicon Valley wants Mathematicians to be seen as Luddites — people that oppose their agenda fear progress. Better yet if they can actually rile some of them up enough to sound that way to normal people.

Why is The Association for Human Mathematics read as “Anti-AI”? They have subgroups that do and don’t use LLMs that are working together to respond to corporate interference. Is that “Anti-AI”? The word “Human” only sounds Anti-AI to us because venture capital made “AI” synonymous with anti-social goals.

Signing Off

OpenAI’s October 6th announcement titled “Sharing AI progress in mathematics” was deceptive and disrespectful in the context of the ongoing situation, which established why the move was counter-productive to progress. They are counting on press coverage to miss the nuances, which is a good bet.

The AHM is calling for the Math community to go no-contact with OpenAI. I find their reasoning impeccable, and fully supported by the previous statements of the credible parties. I’ve tried to gather enough context so that any curious person with common sense could understand why.

If we care about Math progress we could fund Math instead of defunding it — just an idea. They could use some of that money to buy tools that help them, and we’ll see who wants to run an honest business supporting experts who get to choose.

This is not just about Math. The right of refusal is being contested everywhere. Throughout our industries, well-meaning people have heard gossip and drawn whatever conclusion. Plenty of people are just trying to get things done and don’t understand why they’ve walked into a minefield.

These are confusing times.

  • Breath
  • Listen
  • Respect boundaries
  • Respect agency

Thank you for reading my fourth epistle.

The Daily Front Page 8 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The Transparent Chicken Experiment
article

Making chicken transparent using Dorito dust

by crescit_eundo·▲ 342 points·86 comments·chillphysicsenjoyer.substack.com ↗
Making Chicken Transparent Using Dorito Dust.

Modifying the optical properties of biological tissues with tartrazine

Thank you Adaobi for such a wonderful suggestion. All credit to her for the idea, we are still workin’ on it!

My genius friend Adaobi Adibe sent me a paper on making biological tissues transparent. In “Achieving optical transparency in live animals with absorbing molecules”, Ou et al make biological tissues, like chicken breast, transparent by soaking them in a solution of tartrazine. Tartrazine is the very bright yellowish-orange food dye that is found on Doritos.

We aim to do a more ambitious replication imminently. But as a warm up, I tried to replicate parts of this protocol by soaking chicken breast in tartrazine solution. I got partial transparency but not to the degree of the paper. The sample below is an approximately 2mm thick raw chicken breast cut from a 5mm slice that was soaked in ~0.19 M tartrazine solution for 6 hours at room temperature. I took an image of this with a desk light. You can see the grid lines showing through from underneath. The chicken, even though the texture to the touch is the same, has a visual quality like that of gummy bears.

The original paper used 0.62 M, 40 °C and a machine shaker, but I couldn't find a way to do this safely, nor did I have the equipment to do so. Hence the altered protocol.

The image below is a different angle of my sample. The sample on the left is the same 2mm thick chicken breast slice as above. And the sample on the right is a control where I soaked it in water (it is slightly yellow since this process is super messy and I got dust on it).

In the top part of the sample we do see some transparency, with the 5mm x 5mm grid showing through. The visual quality of the chicken breast takes on a gummy-bear like quality. Kinda makes me wanna chew it if it wouldn't give me Salmonella.

I don't wanna get copyrighted by Doritos so here is a cartoon of where you can find tartrazine in the wild.

How does this work?

The current model we have is that the absorbance properties of the tartrazine also shift the refractive index of water. By pushing the refractive index of water to that of protein and lipid solution, we make the object more transparent. I’ll explain this in great detail later.


The Protocol

Tartrazine was from APC Pure. It was >80% dye content, which means some uncertainty over what the true molar concentration will be. I then prepared three concentrations of tartrazine at these molar concentrations, one of which was just a 0 concentration as a control.

  • Tartrazine: 0 g, Tap water: 20 g, w/w: 0%, Molality (mol/kg water): 0, Tartrazine (mmol): 0, Molarity (approx.): 0 M (control)
  • Tartrazine: 2 g, Tap water: 18 g, w/w: 10%, Molality (mol/kg water): 0.21, Tartrazine (mmol): 3.7, Molarity (approx.): ~0.19 M
  • Tartrazine: 6 g, Tap water: 14 g, w/w: 30%, Molality (mol/kg water): 0.80, Tartrazine (mmol): 11.2, Molarity (approx.): ~0.56 M

Tartrazine has M = 534.4 g/mol. Moles use the nominal mass (the powder is >80% dye, so true values are up to ~15% lower). Molarity assumes a final solution volume of ~20 mL.

This is what the tartrazine looked like. It doesn't have an odour, and it seems to be considered food safe by the FDA, so I didn't bother wearing gloves for this bit. Here is a picture of the tartrazine and the specs.

  • Product: Tartrazine E102 FG, C.I. 19140
  • Dye content: >80%
  • Molecular formula: C16H9N4Na3O9S2
  • Molecular weight: 534.37 g/mol
  • λmax (in water): 425 nm
  • Water-insoluble matter: <0.20%
  • Subsidiary dyes: <1.00%
  • Heavy metals (as Pb): <40 mg/kg

To prepare the solutions I used a jeweller's scale to weigh out the right amounts and then added tap water to the weights listed in the table.

To dissolve the tartrazine, I mixed it with a glass stirrer at room temperature until there were no visible lumps.¹

Here are the different solutions at different concentrations, the most concentrated one on the left, the middle concentration in the middle, and then a water control on the right.

Next, I got chicken breast fillets from Tesco. I cut a 5mm thick slab and then cut three pieces out to around 15mm in length.

I then soaked 5mm thick slices of chicken breast in each of the three solutions.

Initial results for 6 hours of soaking

After 6 hours of soaking, these were the results.

First, the chicken in the highest concentration solution failed, because the tartrazine seemed to crystallise. This is what it looked like - it got all crusty.

For the middle concentration (~0.19 M), the chicken appeared gelatinous. But it wasn't transparent. The control chicken remained completely opaque.

I threw these pieces out and then tried again with the method below.

Second Attempt - 12 hour soak

And then I tried again with the same procedure, with the aim of soaking it for 12 hours at room temperature. Given the issues with the highest concentration (~0.56 M), I only tried the water control and the middle concentration (~0.19 M). But this time I put the chicken in test tubes and covered it, given that I was gonna leave it out for 12 hours at room temperature. I wanted to mitigate the food safety risk.

Results

This was the 12-hour-soaked piece. Whilst it's hard to see with the camera, there was some slight visible translucency compared to the control.

To examine it I put it under some light above.

I then cut approximately 2mm slices of chicken. This was quite fiddly to do with a small slimy piece. Here is what it looked like compared to the control.


Why should we try to make tissues transparent?

This technique has been used to make fluorescence imaging much easier in live animals.

On my end, doing this well could add to the set of things that independent scientists could image at home. We might be able to probe internal structures of things more casually. Making things transparent would give better images and would allow independent scientists to look at tissue structure more closely.

Effective observation at low cost is one of the themes of my research. I wrote about writing tracing software for Brownian particles using my microscope in my last post. I am also thinking about trying to match the performance of CO2 gas sensing using pressure, which would make that type of sensing cheaper. In line with this theme, I’m super excited about attempting weird and cool techniques to make structures more easier to probe!


How do dyes make biological tissue transparent?

Here’s is more than you ever wanted to know about optical transparency.

A material can be opaque for two reasons. First, a material can absorb light and block it. Second, it can scramble light due to different refractive indices.

Absorption as a cause for opacity

First, light rays from the other side could be absorbed when they pass through. If light is absorbed, the light can't hit your eyes and you can't see the other side. Light can have multiple wavelengths, and the wavelengths absorbed by the material are determined by the material's spectra. To calculate the spectra, we can approximate the physical behaviour of molecules to that of an electron around a potential. The Schrödinger equation tells us that this system can only occupy a discrete set of energies, and it tells us which ones these are. The differences between these energies set the wavelengths that are ultimately absorbed by the material.

In reality, materials are composed of lots of different things and so we expect them to also absorb different wavelengths.

Refraction as a cause for opacity

Another reason for opacity is less obvious, but more interesting. The refractive index of a material tells us how quickly light travels within the medium. When light travels between materials with different refractive indices, it deflects slightly. When a material is packed with sub-materials that have different refractive indices, the refraction within causes light rays to get scattered since light rays ping around.

Biological materials contain a mix of different sub-materials inside - fibres, cells, proteins, and more. Each of these materials contains a different refractive index. When you have a material with one refractive index embedded in a material with a different refractive index, you get scattering. This scattering causes the light from the other side to get scrambled. The diagram below shows this.

We can model biological materials as a 'base material' of water, with chunks of lipids and proteins embedded inside, all of which have different refractive indices.


So how can we make something transparent?

To make something transparent, we need to exploit the two causes of opacity. One approach is to try to change the absorbance spectra of a material so that it absorbs fewer wavelengths of light.

Alternatively (and this is the approach we'll cover in this post), we could try to change the refractive index of the water inside to match the embedded media. The image below shows this principle with biological tissues. If you can change the refractive index of water with a dye, you can then match it to the refractive index of proteins and lipids, which is slightly higher.

If you manage to do this without modifying the absorbance of a material, you should be able to make it more transparent.

How can we tune the refractive index of something?

Ok, so the game is to change the refractive index. Here is a map of the calculations we need to do to figure out how to modify the refractive index of a material.

To understand where the refractive index plays a part in a quantitative model, let's model how light travels according to Maxwell. Light is an electromagnetic wave, comprised of oscillating electric and magnetic waves. For this essay, let's focus on the electric field part to get the key intuitions.

Using complex representation, if light travels down the z axis, in a vacuum, we can write down the equation of light as the following. Because it's a wave, we can write

\(E(z, t) = E_0 \cos\!\left(\frac{\omega z}{c} - \omega t\right)\)

But for convenience we use complex numbers

\(E(z, t) = \mathrm{Re}\left\{ E_0\, e^{\,i\omega z / c \;-\; i\omega t} \right\}\)

Where E₀ is the amplitude (how strong the field is), ω is the angular frequency (at a fixed point the field goes round once every T = 2π/ω), c is the speed of light, z is distance along the beam and t is time. Crest to crest, the wavelength is λ = 2πc/ω.

In media though, we expect both the speed of light to change in the medium, as well as some absorption. We can rewrite the equation as follows

\(E(z, t) = \mathrm{Re}\left\{ E_0\, e^{\,i(n' + i\kappa)\,\omega z / c \;-\; i\omega t} \right\} = \mathrm{Re}\left\{ E_0\, e^{-\kappa \omega z / c}\, e^{\,i(n' \omega z / c \;-\; \omega t)} \right\}\)

The coefficient in the exponential n′ is a multiplier behind the spatial term, and represents the real refractive index. κ represents how much the wave attenuates, and is meant to denote absorption.

In practice we can group n′ + iκ as one number, and then refer to this as the complex refractive index.

\(n_c = n' + i\kappa\)

First we need to try to change the real refractive index. If we can increase the refractive index of water to match the tissue refractive index, we would have a more transparent material. Water has a refractive index of 1.33. And although this number is variable, protein and lipid rich structures have a refractive index of around 1.45. So the game is to adjust the refractive index of the water around it towards 1.45, which would make it more transparent.

Whatever we do to the water, we also need to make sure that we don't make the absorbance property too high. If κ gets too high, then we'd end up absorbing all the light and it won't go transparent.

So how do we shift the refractive index? To understand refractive indices, we first need to understand polarisation. To first order, a material consists of electrons bound to nuclei. When an electric field is applied to a material, the relative positions of the electrons to their nuclei change.

from [http://hyperphysics.phy-astr.gsu.edu/hbase/electric/dielec.html#c1]

For a positively charged particle and a negatively charged particle, polarisation is the magnitude of that charge multiplied by the displacement of one from the other. To calculate the polarisation, we need to model how far electrons displace from the nucleus under the electric field.

Finding the polarisation of a material

Electric fields provide a force on charges that are free. To model the effect of an electric field on a material, we treat the positive nucleus as fixed, and the electrons as free. To calculate the effect of the system, we'll use the Lorentz oscillator model.

In this model, the electrons are modelled to be bound to the nucleus like a damped spring, with the electric field applying a forcing. We can solve it exactly how we would solve a damped spring problem:

Newton's second law for the electron, with the light's field oscillating at ω:

\(m\ddot{x} = -m\omega_0^2\, x \;-\; m\gamma\,\dot{x} \;-\; e\,E_0\, e^{-i\omega t}\)

If we try an Ansatz for the position of the electron x(t) = x₀ e^(−iωt) (the electron oscillates at the driving frequency), we get that the position of the electron relative to the nucleus is given by the following expression.

\(x(t) = \frac{-e/m}{\omega_0^2 - \omega^2 - i\gamma\omega}\; E(t)\)

The dipole moment is p = −ex, and with N electrons per unit volume the polarisation per unit volume is

\(\mathbf{P} = N p = \frac{N e^2/m}{\omega_0^2 - \omega^2 - i\gamma\omega}\; \mathbf{E}\)

In this setup, ω₀ represents the natural frequency of the bound electron, which is the frequency the molecule absorbs at (for tartrazine, the 425 nm peak), γ represents the damping rate, which sets how broad that absorption peak is, and ω is the frequency of the electric field. Now we've found polarisation, we want to relate it to the refractive index itself. To do that, we need to do some gymnastics with two identities.

By convention, the polarisation can be written as proportional to the electric field

\(\mathbf{P} = \varepsilon_0\,\chi\,\mathbf{E}\)

where ε₀ is the permittivity of free space, χ is the electric susceptibility (a dimensionless number that says how easily the material polarises), and E is the electric field. Comparing with the Lorentz oscillator result above,

\(\chi(\omega) = \frac{N e^2/(\varepsilon_0 m)}{\omega_0^2 - \omega^2 - i\gamma\omega}\)

Relating the polarisation to the refractive index

To relate our polarisation, and electric susceptibility to the refractive index, we use the following trick. The below is an AI-assisted proof with manual checking.

This degree of polarisation and the electric field is encoded in something called the electric displacement field D. And the relationship between D and the electric field is linear, with the coefficient called the relative permittivity, εᵣ. P here represents the polarisation per unit volume, and is the average induced dipole moment across all of the material.

\(\mathbf{D} = \varepsilon_0 \varepsilon_r \mathbf{E} = \varepsilon_0 \mathbf{E} + \mathbf{P}\)

It turns out that the relative permittivity is related to the complex refractive index as follows:

\(n_c^2 = (n' + i\kappa)^2 = \varepsilon_r\)

The proof of the relationship between refractive index and permittivity for a standard electric wave is standard, and is in the footnote below.² And so, to change the complex refractive index, we need to change the relative permittivity of the material.

To proceed, we use an approximation. The electric displacement field is a function of the polarisation of a material. But when we mix two materials together, we can add their polarisation densities.

Before adding tartrazine, we have that water obeys

\(\mathbf{D} = \varepsilon_0\,\varepsilon_{r,\mathrm{water}}\,\mathbf{E} = \varepsilon_0\mathbf{E} + \mathbf{P}_{\mathrm{water}}\)

Then when we add the dye, we get

\(\mathbf{D} = \varepsilon_0\mathbf{E} + \mathbf{P}_{\mathrm{water}} + \mathbf{P}_{\mathrm{tartrazine}}\)

But we know that each polarisation is proportional to the field, with its own susceptibility: P(water) = ε₀ χ(water) E and P(tartrazine) = ε₀ χ(dye) E, where χ(dye). Substituting that in, we get

\(\mathbf{D} = \varepsilon_0\left(1 + \chi_w + \chi_d\right)\mathbf{E}\)

Comparing with D = ε₀εᵣE, and using that water alone has εᵣ(water) = 1 + χ(water) = n(water)², the relative permittivity of the dyed water is

\(\varepsilon_r = \varepsilon_{r,\mathrm{water}} + \chi_d = n_w^2 + \chi_d\)

For a dilute dye, χ(dye) is small compared to n(water)², so we can expand the square root and use a Taylor expansion to get the modified refractive index of the water with the dye.

\(n_c = \sqrt{n_w^2 + \chi_d} = n_w\sqrt{1 + \frac{\chi_d}{n_w^2}} \;\approx\; n_w + \frac{\chi_d}{2 n_w}\)

n_c is complex. If we write it out as n_c = n′ + iκ and split the electric susceptibility of χ(dye) that we got into real and imaginary parts, the dye shifts the real refractive index and introduces absorption by

\(\Delta n' = n' - n_w = \frac{\mathrm{Re}\,\chi_d}{2 n_w}, \qquad \kappa = \frac{\mathrm{Im}\,\chi_d}{2 n_w}\)

And putting in the Lorentz form of χ(dye) that we got earlier

\(\Delta n' = \frac{N e^2}{2 n_w \varepsilon_0 m}\,\frac{\omega_0^2 - \omega^2}{(\omega_0^2 - \omega^2)^2 + \gamma^2\omega^2}, \qquad \kappa = \frac{N e^2}{2 n_w \varepsilon_0 m}\,\frac{\gamma\omega}{(\omega_0^2 - \omega^2)^2 + \gamma^2\omega^2}\)

For tartrazine and red light, ω is below the resonance ω₀, so ω₀² − ω² > 0 and Δn′ is positive. This means the dye raises the refractive index of the water. Meanwhile κ carries a factor of γω in the numerator and is only large near ω ≈ ω₀,, which means that we don't get absorbance.


References

Ou Z, Duh YS, Rommelfanger NJ, Keck CHC, Jiang S, Brinson K Jr, Zhao S, Schmidt EL, Wu X, Yang F, Cai B, Cui H, Qi W, Wu S, Tantry A, Roth R, Ding J, Chen X, Kaltschmidt JA, Brongersma ML, Hong G. Achieving optical transparency in live animals with absorbing molecules. Science. 2024 Sep 6;385(6713):eadm6869. doi: 10.1126/science.adm6869. Epub 2024 Sep 6. PMID: 39236186; PMCID: PMC11931656.

² Here are Maxwell's equations for electric and magnetic fields in a material. This is generated by Claude.

\(\nabla \cdot \mathbf{D} = \rho_f, \qquad \nabla \cdot \mathbf{B} = 0, \qquad \nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t}, \qquad \nabla \times \mathbf{H} = \mathbf{J}_f + \frac{\partial \mathbf{D}}{\partial t}\)

\(\mathbf{D} = \varepsilon_0 \mathbf{E} + \mathbf{P} = \varepsilon_0 \varepsilon_r \mathbf{E}, \qquad \mathbf{B} = \mu_0 \mathbf{H} \quad \text{(non-magnetic)}\)

The question is then - how do any of these relate to the refractive index?

No free charges or currents (ρ = 0, J = 0), non-magnetic. Faraday's law says that the curl of an electric field is the negative of the magnetic field's time derivative. Take the curl of Faraday's law, and then substitute in

\(\nabla \times (\nabla \times \mathbf{E}) = -\frac{\partial}{\partial t}\,\nabla \times \mathbf{B}\)

Ampère–Maxwell with J = 0:

\(\nabla \times \mathbf{H} = \frac{\partial \mathbf{D}}{\partial t}\)

Substitute B = μ₀H and D = ε₀E + P = ε₀εᵣE:

\(\nabla \times \mathbf{B} = \mu_0 \frac{\partial \mathbf{D}}{\partial t} = \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t} + \mu_0 \frac{\partial \mathbf{P}}{\partial t} = \mu_0 \varepsilon_0 \varepsilon_r \frac{\partial \mathbf{E}}{\partial t}\)

This is where εᵣ enters: the polarisation current ∂P/∂t adds to the vacuum displacement current. Then (taking εᵣ constant in time, i.e. working at a single frequency)

\(\nabla \times (\nabla \times \mathbf{E}) = -\frac{\partial}{\partial t}\,\nabla \times \mathbf{B} = -\mu_0 \varepsilon_0 \varepsilon_r \frac{\partial^2 \mathbf{E}}{\partial t^2}\)

\(\nabla \times (\nabla \times \mathbf{E}) = \nabla(\nabla \cdot \mathbf{E}) - \nabla^2 \mathbf{E} = -\nabla^2 \mathbf{E}\)

Then if we equate both sides, we get a plane wave equation

\(\Rightarrow \quad \nabla^2 \mathbf{E} = \frac{\varepsilon_r}{c^2}\frac{\partial^2 \mathbf{E}}{\partial t^2}, \qquad c^2 = \frac{1}{\mu_0 \varepsilon_0}\)

Plane wave E = E₀ e^(i(kz − ωt))

\(k^2 = \varepsilon_r \frac{\omega^2}{c^2}\)

Comparing with k = (n′ + iκ) ω/c from the attenuating wave written earlier,

\(\varepsilon_r(\omega) = n_c(\omega)^2 = (n' + i\kappa)^2 = n'^2 - \kappa^2 + 2 i n' \kappa\)

The Daily Front Page 9 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — A Citizen’s Paper Trail
article

I Became a Citizen of Japan

by luu·▲ 221 points·165 comments·derekwessman.com ↗
I became a citizen of Japan.

I became a citizen of Japan.

Let me share about it. Some is my anecdotal experience, some my opinion, and some facts. Parsing which of these is what in each sentence is not going to happen.

EDIT: I have seen some online reaction to this, and appreciate your kind comments. If you are thinking about applying to naturalize, I encourage you to go ahead and consult at your local Legal Affairs Bureau. Act according to what they tell you there, not stuff you hear or read on the internet in places such as this random gringo’s blog. The list of required documents below is intimidating, but your case won’t be the same as anyone else’s. They treat every application individually, so the horse’s mouth is that of the Ministry of Justice, not me.

In 2012, I was at the Legal Affairs Bureau for something else and decided I wanted to start naturalizing. I had been thinking about it for a long time. I stepped into the department that handles naturalization.

Intentionally, the Government of Japan has designed the process of obtaining Japanese citizenship to be opaque, demand extensive documentation, take at least a year, and have an outcome based partly on subjective judgment.

At the first 2012 visit, an old Ministry of Justice bureaucrat kindly listened to my initial consultation. A first consultation usually requires an appointment, but he accommodated me. This would not happen today. Far more people are now applying for citizenship. The Legal Affairs Bureau for Hachioji was then located in Minami Osawa, within city limits but far away on the south edge of town. It takes about 40 minutes to drive or take a train there. Happily, the bureau is now back in the main part of town near the courthouse.

In a small i̶n̶t̶e̶r̶r̶o̶g̶a̶t̶i̶o̶n̶ consultation room, the bureaucrat asked routine questions about my nationality, number of years in Japan, marital and family status, and so on. I was proud of my Japanese fluency, community activity, and experience working in Japanese politics. Subconsciously, I think I expected to be recognized for surpassing specialness.

The bureaucrat had seen plenty of people like me. He knew how to dampen expectations: Describe the process.

The preliminary documentation I would need to gather (in order of hazy memory, and later aided by referring just now to the spreadsheets I was constrained to create): An original birth certificate for each of my parents and each my six siblings. Original copy of proof of my parents’ marriage. An affidavit signed and dated by my mother attesting that she gave birth to me. List of members of my wife’s family, including their names, dates of birth, nationalities, and current status of interaction with me. A statement regarding whether each above individual wanted to also naturalize, and whether they were in agreement or opposition to my naturalization. Original copy of my birth certificate. Proof of my marriage. List of every address of every place I ever lived and the dates beginning and ending my living there. Complete academic history starting with preschool. Any diplomas or degrees obtained in the course of that academic history. Complete work history with company name, position(s) held, and dates of starting and leaving. All information originating in English had to be submitted in both original form and also translated into Japanese, with a certificate of the accuracy of the translation. Japanese translations could not include alphabet letters—only kanji, hiragana, katakana, or Arabic numerals (I suppose we should give thanks that kanji numerals were not required). But every proper noun in the awkwardest katakana. All documents originating in Japanese submitted with one original and one copy. My certificate of residence. My Zairyu (residence) card. My driver license. All tax returns of me and my wife from some number of years I can’t recall. Statements of withholdings from all employers or income sources for me and my wife. Proof that I and my wife were subject to and had paid applicable taxes to the National Tax Agency, Tokyo, and Hachioji, respectively. Proof of paying health insurance premiums. Proof, issued by the Pension Office, that I had paid my employment insurance. All of the above were going to be evaluated to see that I had not only paid, but paid on time, for said number of years. An official driving record issued by the National Police Agency, listing any and all traffic violations during the maximum 10 or whatever years that such data are retained. I had a company, did I? Then also provide for the same number of years all of its financial statements, proof of paying national corporate taxes, proof of paying consumption taxes, proof of paying prefectural taxes, proof of paying city taxes, proof of paying withheld employee taxes, proof of paying employment insurance. The company registration, Articles of Incorporation, a list of clients, and a description of the business and its prospects. My wife’s family register. A statement from my wife that we were indeed married and had indeed had those kids together. A statement from my wife indicating whether she agreed with or was opposed to my naturalization. Three photographs of our family together on separate occasions (proving that we always pose in the same position as I take a selfie, causing the set of three photographs to look utterly suspicious). A listing of all household income sources and monthly expenditures categorized severally and exhaustively. Certification of Child Allowance disbursements received from the city. List of all loans, the institution making the loan, the amount of principal, monthly payment, and purpose of loan. List of bank accounts, with copy of all pages of each bank book. Proof of current citizenship issued by the US embassy. Original copy and Japanese translation of every page of all my passports expired and current, along with list organizing into a timeline the dates of my travel into and out of every country I had ever visited. Map showing my current place of residence. Map showing my current place of employment. A free-form, handwritten statement of my motivation for seeking citizenship. Certificate of enrollment of each of my children at their respective schools. Certificate of employment issued by my company about me. Certificate of the amount of my salary, issued by my company. The title and registration to each plot of land and building I owned. My certificate of passing the Japanese Language Proficiency Test (JLPT) Level 1. A photo of my face, two copies. A form listing what my name would be following naturalization.

In 2012, I was already certain that I would be spending the rest of my life in Japan as part of society here. But my brain had not developed to the point of being able to direct my physical body to take the actions necessary to create or gather the above items.

Also, I wanted to run for city assembly after obtaining citizenship. My wife knew this. In her wisdom, she did not want me to run for city assembly. I was going to have to do all of the actions on my own, and then also somehow prevail upon her to express her assent to my naturalization application. There was going to be an interview where the bureaucracy asked her opinion, and it was going to carry weight.

I knew that one could hire an attorney to aid one’s naturalization application. I also knew deep down that the attorney was essentially going to say “put together [all of the above items] and I will submit the application for you.” Interviews were still going to be in person. A translation agency, no better than the one that was my own company, was going to be paid to translate everything. It would have the single advantage that I would have to answer to someone to get everything done. But I was not flush with cash for an attorney, or motivation. I did at least schedule a second consultation—the appointment is in my 2013 calendar. I may have actually not gone. I’m not sure. The old bureaucrat is surely now retired.

The first attempt thus died on the vine after a mildly heroic effort.

The most heroic naturalization efforts made in 2012 were not made by me, but by my parents and siblings. Having been told at that first consultation that they were required, I asked each of them to go get original copies of their birth certificates re-issued. They are so very good to me, and they dutifully did so. It was undoubtedly a massive pain. My siblings were born in a variety of US states that are not where they live now, because my dad was in the US Navy. I don’t know what they had to do to get the originals, but each was given to me.

I made another run at the process in 2018. Again it did not take.

I spent a hell of a long time living in Japan without ever applying for permanent residency. PR never felt like the way for me, because I always assumed I would be applying for naturalization at any moment. Every time I renewed my spouse visa, the people processing the documentation would remark on how unusual it was.

Then around September 2024, I was again at the Legal Affairs Bureau. It had been moved back into the main part of town, as noted above. My purpose that day was not to apply for naturalization, but to get a company registration issued, or maybe pull a property title. Again I saw the sign pointing to the department that handles naturalization. Again I impulsively went to the window and asked to apply for naturalization. This time I was afforded no consultation. I remember getting a glance at the appointment book as they opened it to see when I could get an appointment for a consultation, and it was chock full of names. They scheduled me the next available two-hour slot, in October.

At the October appointment, a new grizzled old veteran met me. He first confirmed my Japanese ability through conversation, then by having me read and write some things. The passage I had to read was from a children’s book, all written in hiragana. The funny thing that will surely resonate with a lot of people is that it is harder to read pure hiragana passages. It’s an unnatural form that doesn’t exist except in children’s books or messaging meant to be understood by people who can’t read anything else (which purpose I do not disparage, mind you). It would have been far more natural to read normal Japanese that includes kanji and katakana. Anyway, I read the thing. Maybe choppily, because grizzled veteran had me nervous. Then I wrote as directed. He panned my handwriting. Haha. “Get off my back, bro. I am an objectively accomplished linguist.” Well, that ain’t the test.

He gave me pretty much the same list as above. Except now I had started another company. Of course every document was still needed for it, along with all the others. I think they had removed the requirement for a translation certification, though. Credit where due.

Since 2012, I had also bought property and built a house on it. I had gotten new passports and filled their pages by traveling to many more countries. I had 13 more years of life under my belt, and it all required that much more documentation. Happily, I had also gotten better at handling administrative tasks like tax filings and pension payments. Not through personal growth, but by hiring people to do them on my behalf. My driving record was now spotless, with youthful speeding and parking indiscretions dissolved by the limitations of nation-state record retention. I was making more money. My company was more successful. My marriage was better. I had articulated internally why I wanted to naturalize. I had made more social contributions, like volunteer firefighting in Shobodan, chairing the Ichou Festa, and neighborhood association work.

At the October 2024 appointment, we set an appointment at the next available date, in February 2025, for the official submission of my application.

Getting the package of all the above documents and other items together was absolutely daunting. A fresh hell. As February 3 approached, I still hadn’t gotten everything together. February 2 was an all-nighter. Translations were cranked out, items were organized, copies were made, everything was stacked together. The stack was easily over two feet high. I packed it all into a couple of big department store shopping bags.

At the submission, grizzled veteran and I went through each item. He affixed a “RECEIVED” stamp to each. We found that two or three items were missing, or I had misunderstood what was needed. I promised to send them by Letter Pack immediately. At the end I was assigned an entry-level bureaucrat who would be my case worker. I was told to enter the Legal Affairs Bureau phone number into my phone and be ready for calls asking for extra information or appointments. I was told the procedure for calling the specific extension and stating my case number before asking for my case worker.

I was apprised that my application would only proceed while I was in Japan: Prior to any business or other trip outside Japan, I had to call and notify when I was leaving and returning. My application would stop for precisely that number of days. When returning, I was to call and check back in with my case worker. Happily for business and sadly for naturalization, I made many international trips from February 2025 to June 2026. The Ministry of Justice assiduously delayed my application accordingly. I understand this policy, though. If you want to naturalize, be in the country. At the same time, it required patience to know that being gainfully employed in international business was delaying the application.

My first case worker was transferred away after only a few contacts by phone. A new one was assigned. Their primary characteristic was mumbling inaudibly on the phone. They were young, maybe early 30s. There were occasions where I could tell that my phone call had caused them to remember something they were supposed to have done, and without my calling it wouldn’t have gotten done.

During Covid, the US FDA and other regulatory bodies stopped coming to Japan to inspect medical device and pharmaceutical facilities for about three years. My primary business is to assist life science firms by helping them to understand and comply with the regulations, and then to prepare, host, and interpret regulator inspections of their facilities. So obviously, the company’s revenue and profits suffered severely during that time . Surveying my Covid-era company financials, my case worker decided they were not good. He called me one day: “This sure is some bad company performance.” Me: “Yeah, Covid hit us hard. We could have taken government assistance and put our employees on leave at reduced salaries, but I decided to use savings and then take out loans that I have paid back to the last yen faithfully, to keep paying full salaries. We stayed open and handled what work we were still getting to support our clients.” Him: “Well, it’s still not very good.” That was a frustrating conversation. I don’t doubt that he passed a hard test or two to become a national civil servant, but he also clearly had no experience running a business.

He asked me to write down the above explanation of why the company had done poorly during that time. I did. I addressed it to the Minister of Justice (as all these submissions are) and worded the extensive explanation to pointedly refute the case worker’s view. I emphasized that I kept people employed during a crisis and thought this criticism of our results was horseshit, and to please kindly continue considering my application.

The same case worker failed to call to notify me of the application result, until four days after the 官報 Official Gazette carried notice of my naturalization being approved. That was inconvenient in many ways, especially because that is the number of days sooner that I could have applied for and obtained a Japanese passport, allowing me to resume business travel. Until the passport is issued, I am stuck in the country and unable to leave for business or any other purpose. Japanese citizens are prohibited from leaving the country without a passport. I am certain that the case worker just let the notification sit on his desk for four days. Bad job by him.

In light of that final insult and all the above and more details I have forgotten or omit, it may seem strange to say that overall, I am okay with the process.

I don’t think citizenship is a light thing. It is not rational to make it friction-free or fast. I was not ready to naturalize in 2012. The system is arcane and arbitrary, and also worked correctly to weed me out of the process. It impressed upon me the importance of following the rules and making a contribution, which honestly impacted how I behaved and thought thereafter. When I was absolutely committed, I was able to get through the process.

My name after naturalization is the same as it was before: Derek Lynn Wessman. Except now in official records it is written in katakana, since alphabet letters cannot be listed on a 戸籍 family register, which is the foundational document on which a Japanese citizen’s identity rests.

A lot of people believe that one must adopt a kanji name when naturalizing, but this has never been the case. However, it seems that in the past, pressure was placed on applicants to adopt Japanese-sounding and -appearing names. The entire naturalization process, especially scrutiny of siblings and parents, has many vestiges of its Cold War-era focus on the Zainichi Korean residents of Japan who were then the most frequent applicants. The government was anxious to find out if an applicant had ties with North Korea.

Why not change my name, though? I could certainly imagine adopting kanji whose pronunciation approximates my name, or adopting my wife’s former family name, or taking the appellation of some historical figure I like, such as Yamamoto Kansuke. I kept my name because I love it. I am proud of the name Wessman, which I hear was adopted so an ancestor could join the Swedish army when the quota of people with his previous name Bengtsson was already filled (or something like that). I like the name Derek. My middle name is from my uncle, who, if you search or ask AI, is an exceptional person of great accomplishment. Most importantly, my whole household is already this family name and would be greatly inconvenienced by a name change this far into their lives.

I do need to notify banks, change some documents and listings, and go through procedures on a number of fronts. All in all, it’s not a huge burden.

A fun fact: Upon having my family register created, I had to re-propose to my wife. Being added to one’s spouse’s family register is the administrative act of marriage in Japan. Until now, my wife was the head of her own family register and my kids were listed with her on it, along with some foreign bozo tacked on who she was married to (me). I wouldn’t be surprised if this latest 2026 proposal gave her pause. She did kindly came along, and so did the kids. Reunited and it feels so good. Not unrelated: I do not plan to run for office in the near future.

The moment of receiving citizenship was this: The above case worker called me four days late. He asked when I could come in to receive the government-issued document that attests to my naturalization. I said I was on my way. He said okay. I arrived. He invited me into a small i̶n̶t̶e̶r̶r̶o̶g̶a̶t̶i̶o̶n̶ consultation room. We both sat down, separated across a desk by a Covid-era plastic divider. He handed me the Certification of Identity of Naturalized Person. He told me to take it to city hall and apply to have a family register created for me. He pronounced a benediction on the whole process: Good old “o-tsukaresama deshita.”

That was it. No pledge of allegiance. No huddled masses pronouncing oaths together. No pomp and circumstance. Just walking down the sparse stairway of the plain public building feeling happy that I had finally joined my fate with this country that I love. I liked it.

The Daily Front Page 10 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Firmware, Faithfully Emulated
show hn

Show HN: Esp32sim – Run ESP32 firmware in the browser

by joakimeriksson·▲ 189 points·39 comments·github.com ↗
Each boots the real mask ROM, the real 2nd-stage bootloader and an unmodified application image.

esp32sim — a smiling chip in an emulator window

esp32sim — an ESP32 emulator in Rust: Xtensa (ESP32, S3) and RISC-V (C3, C6)

Instruction-level emulation of four ESP32 SoCs, across both of Espressif's CPU architectures. Each boots the real mask ROM, the real 2nd-stage bootloader and an unmodified application image — no patched firmware, no stubs in the way — with enough of the SoC modelled to run real projects end to end. No cloud, no accounts. MIT.

The classic ESP32 also boots its ECO3 ROM on dual LX6 cores, with GPIO, UART and timers; --board ttgo-tdisplay adds the LilyGO TTGO T-Display's ST7789 and buttons.

ESP32-S3 ESP32-C3 ESP32-C6 CPU 2 × Xtensa LX7 @ 240 MHz 1 × RISC-V RV32IMC @ 160 MHz 1 × RISC-V RV32IMAC @ 160 MHz Command esp32sim esp32sim-c3 esp32sim-c6 Core crate xtensa-lx7 riscv-rv32 riscv-rv32 (+ the A extension) Reported full-listing decoder checks 977 k instructions, 0 mismatches 161 k instructions, 0 mismatches 126 k instructions, 0 mismatches Boots ROM → bootloader → FreeRTOS → app ROM → bootloader → FreeRTOS → app ROM → bootloader → FreeRTOS → app Boards / displays ST7735, ST7701S 480×480 + touch, WS2812, camera, audio none — console only ST7789 172×320 over SPI+DMA, WS2812, an 802.15.4 energy-detect stand-in WiFi virtual AP, WPA2, DHCP/DNS/NTP, NAT to the real network, HTTPS the same virtual AP and network: scan, WPA2, DHCP, NAT (one station) the same virtual AP and network: scan, WPA2, DHCP, NAT (one station, legacy rates) Speed block interpreter + AArch64 JIT, ~150–240 Minsn/s plain interpreter (no block cache or JIT yet) — still well above real time on hello_world same interpreter In the browser yes (WebAssembly) yes (WebAssembly) yes (WebAssembly) Reported hardware comparisons JTAG trace, 8000 steps after timing-loop resynchronization console diff, 205/208 lines identical console diff, 203/204 lines identical Status mature draft — see docs/esp32c3.md draft — see docs/esp32c6.md

These full-listing and hardware counts describe earlier manual runs. CI runs the checked-in sampled decoder corpora and emulator golden outputs; it excludes the external full-listing tests. The Xtensa objdump test excludes PIE operand comparisons. Hardware trace comparison normalizes window exceptions and resynchronizes delay loops, so it is not uninterrupted cycle-by-cycle agreement. See the test scope, CI workflow, Xtensa decoder test and hardware comparator.

Most of the SoC is shared: the C3 reuses the S3's UART, USB-Serial/JTAG, systimer, timer groups, GPIO, SPI flash controller, GDMA and SHA/AES/RSA models unchanged, and adds its own memory map, cache controller and interrupt matrix; the C6 reuses the same models again, with its own memory map, PLIC front-end, L1 cache, PCR and always-on LP blocks. Only the CPU crates are genuinely separate.

Try it in a browser, no install: https://mikroverk.github.io/esp32sim/ — Linux on the S3, the Touch-LCD-4B panel with its SID player, the pocket-tank LLM aquarium, and the C3 and C6 demos.

esp32sim/
  emu-core/       the Bus and Core traits, Trap, ClockTree, AArch64 encoder — shared by both cores
  esp-soc/        Machine<S: Soc>: scheduler, device time, console, scripts, web UI, loaders, boards —
                  one machine for every chip; a chip plugs in its cores, bus and interrupt routing;
                  the virtual WiFi access point, the network behind it and the NAT, for every chip
  esp-periph/     the peripheral IP the chips share (UART, systimer, TIMG, GPIO, SPI_MEM, GDMA, crypto,
                  I2S, RMT, I2C, …), the Device trait, and the device_set! table that mounts them
  ── ESP32-S3 (Xtensa LX7, dual core) ──
  xtensa-lx7/     decoder (sampled objdump checks plus optional full listings), interpreter
                  (windowed regs, loops, XEA2 exceptions/interrupts, FPU, MAC16, booleans,
                  PIE SIMD), basic-block interpreter, AArch64 JIT, objdump-compatible disassembler
  esp32s3/        SoC + boards: memory map, cache MMU, SPI flash/PSRAM, SHA/AES/RSA, RNG,
                  systimer, timer groups, interrupt matrix (per core), GPIO, USB-CDC,
                  UARTs, I2C, GDMA + I2S/LCD_CAM, RMT TX, regi2c, RTC WDT, WiFi MAC;
                  board/: atech14 / waveshare-cam / waveshare-lcd4b / waveshare-amoled18-v2 / none
  cli/            the `esp32sim` command line, every chip (`--chip`); `esp32sim-c3` / `esp32sim-c6` are alias binaries
  ── ESP32-C3 and ESP32-C6 (RISC-V, single core) ──
  riscv-rv32/     RV32IMAC decoder (sampled objdump checks), interpreter, disassembler
  esp32c3/        the C3 SoC: memory map, interrupt matrix, cache controller, RNG;
                  peripheral models shared with esp32s3 where the IP is identical
  esp32c6/        the C6 SoC: unified memory map and MMU, interrupt matrix + PLIC/INTPRI, L1 cache,
                  PCR, the LP blocks (reset cause, software reset, RTC timer), ASSIST_DEBUG,
                  the 802.15.4 and WiFi MACs
  tests/          golden-output regression tests and their fixtures (tests/README.md)
  ── shared ──
  wasm/           C-ABI crate wrapping all three Machines for the browser in one module
  web/            browser UI (board drawing, console, audio, camera) + emu.js/worker.js for wasm
  hw/             JTAG differential-test scripts against a real board, captured C3 and C6 consoles
  examples/       hello_world (IDF, S3, C3 and C6), waveshare-cam (autopling run script + photo),
                  wifi-station (S3), c6-wifi-station (builds for the S3, C3 and C6; the WiFi goldens'
                  firmware), c6-radio-dashboard (WiFi + 802.15.4 on the C6 board)
  tools/          PIE table generator (TRM-derived); bench.py (interleaved A/B benchmark);
                  wasm-build.sh (the WebAssembly module)

Boards (ESP32-S3)

The SoC model emits pin-level events (GPIO edges, RMT symbol streams, I2S samples); a BoardModel (esp-soc/src/board.rs) interprets them. --board atech14 (default) is the Atech 14‑port board with its ST7735, WS2812 ring, encoder and buttons; --board none is a bare module — any ESP32‑S3 firmware, console only; --board waveshare-lcd4b is the Waveshare ESP32‑S3‑Touch‑LCD‑4B (ST7701S 480×480 over the LCD_CAM RGB bus, GT911 touch, TCA9554, codecs) running the esp32-screen LVGL panel with touch; --board waveshare-amoled18-v2 is the Waveshare ESP32-S3-Touch-AMOLED-1.8 V2 (CO5300 368x448 over QSPI, CST820 touch); --board waveshare-cam is the Waveshare ESP32‑S3‑CAM‑OV5640 (CH32V003 IO expander, OV5640 over SCCB, ES8311/ES7210 codecs on I2C0, speaker on I2S1, OV5640 on the LCD_CAM DVP port) — runs the waveshare-autopling firmware (IDF 5.5, 16 MB flash, 8 MB octal PSRAM: --flash-mb 16 --psram-mb 8) end to end: camera frames from --cam-image or the browser (picture upload / webcam) → esp‑dl pedestrian detector on the emulated PIE SIMD unit → pling on the ES8311. See examples/waveshare-cam/. Adding a board = implementing the trait (gpio_changes, rmt_frame, i2c_devices, camera_frame, …).

The Pocket Synth firmware the atech14 demos run is its own project: atech-firmware — a PlatformIO build of the SID synth and a cRSID player for real .sid tunes. This repo carries the built images it produces, in web/wasm/fw/public/.

Run — ESP32-S3

cargo build --release
FW=web/wasm/fw/public                       # the demo images the goldens and the web page run
./target/release/esp32sim --boot rom \
    --bootloader $FW/atech-bootloader.bin --ptable $FW/atech-ptable.bin --app $FW/atech-firmware.bin \
    --script $FW/atech-script1.txt --wav out.wav --tft-png tft.png --max-seconds 5

The mask ROM ELF is picked up from ~/.espressif/tools/esp-rom-elfs/*/esp32s3_rev0_rom.elf (shipped with ESP‑IDF). Without ESP-IDF, tools/fetch-demo-assets.sh --no-linux puts the S3, C3 and C6 ROMs in web/wasm/fw/: pass --rom web/wasm/fw/esp32s3_rev0_rom.elf, or set ESP32SIM_ROM_DIR=web/wasm/fw for the tests. --boot app skips ROM+bootloader and loads the app image directly.

A plain ESP‑IDF project, e.g. examples/hello_world (the IDF 5.5 get-started example built with idf.py set-target esp32s3 && idf.py build):

H=examples/hello_world/build
./target/release/esp32sim --board none --boot rom --console uart0 \
    --bootloader $H/bootloader/bootloader.bin --ptable $H/partition_table/partition-table.bin \
    --app $H/hello_world.bin --elf $H/hello_world.elf --elf $H/bootloader/bootloader.elf --max-seconds 26

prints the ROM banner, the bootloader and app logs on UART0, Hello world!, the countdown, and then reboots through the RTC watchdog exactly as silicon does (rst:0xc (RTC_SW_CPU_RST)), ~30× faster than real time. Chip resets (software, RTC watchdog) restart the machine from the ROM with the right reset cause; --no-reboot stops at the first reset instead.

Run — ESP32-C3

esp32sim-c3 runs unmodified ESP-IDF firmware on the emulated RISC-V core, from the real mask ROM through the real bootloader into FreeRTOS. Same flags as esp32sim (--trace, --break, --watch, --peek, --disasm, --log-periph), printing RISC-V mnemonics with symbols.

H=examples/hello_world-c3/build
./target/release/esp32sim-c3 --boot rom --flash-mb 4 \
    --bootloader $H/bootloader/bootloader.bin --ptable $H/partition_table/partition-table.bin \
    --app $H/hello_world.bin --elf $H/hello_world.elf --max-seconds 26

prints the ROM banner, the bootloader log, Hello world! and the reboot, three times over. Checked line-for-line against a physical C3 module: 205 of 208 console lines identical over three boot cycles — the difference is the ROM's Saved PC: line. --mac, --reset-cause and --strap let a run adopt a board's identity so the comparison is meaningful. WiFi station mode supports open and WPA2 virtual APs with DHCP and NAT. No boards; --boot app unsupported. See docs/esp32c3.md for what works, what does not, and the five emulator bugs the hardware found.

Run — ESP32-C6

esp32sim-c6 is the same front end on the ESP32-C6: RV32IMAC, the PLIC, a unified memory map.

H=examples/hello_world-c6/build
./target/release/esp32sim-c6 --boot rom --flash-mb 4 \
    --bootloader $H/bootloader/bootloader.bin --ptable $H/partition_table/partition-table.bin \
    --app $H/hello_world.bin --elf $H/hello_world.elf --max-seconds 27

Checked against a Waveshare ESP32-C6-LCD-1.47: 203 of 204 console lines identical over three boot cycles, including the ROM's Saved PC: after esp_restart(); the one difference is that line on the first boot. --board waveshare-c6-lcd147 adds that board — the ST7789 over SPI2 and the GDMA, the WS2812, the BOOT button — and the C6's 802.15.4 MAC answers energy scans, so the board's LVGL spectrum-scanner firmware runs end to end (examples/waveshare-c6-lcd147/). The MAC also sends and receives frames with the timing of the air, and --cooja makes the C6 an external mote of Cooja-NG, driven in exact lock-step over NDJSON (an unmodified Contiki-NG-on-IDF image exchanging broadcasts with emulated MSP430 nodes). WiFi works too: --wifi attaches the same virtual access point as on the S3 (see WiFi below). See docs/esp32c6.md.

Scripts (host actions at emulated time)

1.5  press btn1 150                       # GPIO17 low for 150 ms
2.2  knob cw 2                            # two quadrature detents on CLK5/DT4
3.4  press btn2 120
4.0  serial {"action":"set_note","value":"9"}   # into USB-CDC RX
5.0  stop

WiFi (ESP32-S3, C3, C6 and the classic ESP32)

--wifi ssid=NAME[,psk=PASS,chan=N,bssid=..] attaches a virtual access point that the unmodified Espressif WiFi blob associates with — scan, authentication, association and, with a passphrase, the WPA2-PSK four-way handshake — and a virtual network behind it (DHCP, ARP, ICMP, DNS, SNTP off the host clock). --net nat (the default) relays the guest's TCP and UDP over ordinary host sockets, so firmware reaches the real network; --net none refuses it. No firmware changes, no root, no tun device.

./target/release/esp32sim --board waveshare-lcd4b --boot rom --flash-mb 16 --psram-mb 8 \
    --bootloader $P/bootloader/bootloader.bin --ptable $P/partition_table/partition-table.bin \
    --app $P/energy_panel.bin --console usb --wifi "ssid=home,psk=secret" --max-seconds 45

runs the esp32-screen energy panel: it joins, takes a lease, syncs its clock, fetches two days of electricity prices over HTTPS and polls a real Home Assistant on the LAN. docs/networking-howto.md is the how-to (flags, debugging, limits); docs/wifi-plan.md and docs/networking-plan.md describe how the MAC model and the packet path work, and the Networking section of docs/architecture.md the layers every chip shares.

The ESP32-C6 joins the same access point and the same network, through its own MAC model (docs/wifi-c6-plan.md): one station, legacy rates, no power save. examples/c6-wifi-station is the specimen — scan, join, lease, five pings, and the state on the board's screen — and every C6 radio run needs --stub bb_init=0 (the PHY's baseband calibration wants analog hardware):

B=examples/c6-wifi-station/build-emu
./target/release/esp32sim-c6 --boot rom --flash-mb 4 --board waveshare-c6-lcd147 --console usb \
    --bootloader $B/bootloader/bootloader.bin --ptable $B/partition_table/partition-table.bin \
    --app $B/c6_wifi_station.bin --elf $B/c6_wifi_station.elf --stub bb_init=0 \
    --wifi ssid=esp32sim,psk=esp32sim-pass --max-seconds 14

The ESP32-C3 joins the same access point too, through a MAC model derived from the S3's. The same station example, built for each chip without the display, is committed under web/wasm/fw/public/ as the input of the WiFi goldens (wifi_station_{s3,c3,c6} in cli/tests/goldens.rs), so it runs without a local build:

P=web/wasm/fw/public
./target/release/esp32sim-c3 --boot rom --flash-mb 4 --console usb \
    --bootloader $P/c3-wifi-bootloader.bin --ptable $P/c3-wifi-ptable.bin --app $P/c3-wifi_station.bin \
    --wifi ssid=esp32sim,psk=esp32sim-pass --max-seconds 14

examples/c6-radio-dashboard runs WiFi and 802.15.4 energy scans in one firmware, a page each.

In the browser (WebAssembly)

tools/wasm-build.sh                  # the module -> web/wasm/esp32sim.wasm
tools/fetch-demo-assets.sh           # mask ROMs, xterm.js and the Linux image (--no-linux skips its 16 MB)
python3 -m http.server -d web 8790   # then open http://127.0.0.1:8790/?wasm&fw=hello

The demo firmware is committed; the mask ROMs, xterm.js and the Linux image are not, and every demo boots from the ROM, so run the fetch once. It gets the same files the Pages site serves.

The same emulator compiled to WebAssembly, running inside the page in a Web Worker: pick a board, load the ROM ELF and firmware from disk (or ?wasm&fw=<name> for a hosted manifest), press Boot. hello_world, the Touch-LCD-4B panel with its SID player, the Atech board, the ESP32-C3 and the ESP32-C6 all run at real time in Chrome; there is no NAT (the browser has no sockets). The S3 has a WebAssembly JIT of its own (hot blocks and regions, PIE on WASM SIMD). See docs/wasm.md. Live: https://mikroverk.github.io/esp32sim/ — Linux 6.11 on the ESP32-S3 (svermigo/Linux-on-esp32-S3, log in and type on the console), the Touch-LCD-4B panel with its SID player, the Atech board, pocket-tank (a 4-bit transformer steering the fish on the Touch-AMOLED-1.8), and the ESP32-C3 and C6 booting hello_world; or load your own firmware for any chip from disk (pick the board, or esp32c3 / esp32c6).

Debugging

--trace [--trace-from N], --break ADDR, --watch ADDR (stop when a word changes), --peek ADDR[,N], --profile (pc histogram), --log-periph (first touch of every unknown register), --stop-after-exceptions N, --gram-png (raw ST7735 GRAM), --no-jit (interpret instead of running native code — must give identical results). Env: ESP_EMU_DEBUG, ESP_EMU_DEBUG_SPI, ESP_EMU_DEBUG_USB, ESP_EMU_DEBUG_WIFI[_FRAMES], ESP_EMU_DEBUG_NET, ESP_EMU_DEBUG_AES, ESP_EMU_DEBUG_SHA, ESP_EMU_DEBUG_RSA.

Documentation

  • docs/adding.md — adding a peripheral, a board with devices, a CPU/chip, an observer

docs/ — architecture, peripheral coverage, boards, CLI reference, web UI protocol, design decisions & gotchas, roadmap, networking how-to, the WiFi and networking design notes, and the testing plan.

Provenance

Written from the ESP‑IDF register headers, the Xtensa core config shipped with ESP‑IDF, the RISC-V specification and the C3 and C6 technical reference manuals, and observed firmware behaviour. QEMU was consulted only to confirm instruction semantics (no code copied). MIT.

Differential testing against real silicon (hw/)

Every chip is checked against hardware, by different methods: the S3 in JTAG lock-step (below), the C3 and C6 by diffing a captured console against the emulator running the same binaries (hw/c3-hello-world-real.txt, 205/208 lines identical — see docs/esp32c3.md; hw/c6-hello-world-real.txt, 203/204 — see docs/esp32c6.md). Those comparisons found five emulator bugs each, including a device-command race and a cycle counter that did not restart at reset — neither of which a board-free test would have caught.

ESP32-S3, JTAG lock-step

DIFF_DIR=hw/<board> FLASH_MB=8 hw/difftest.sh 3000 — the scripts read efuses/strap from the attached chip over JTAG, then step it and the emulator in lock-step on the same flash dump (flash-8M.bin if present). Atech board, 2026-08-25: 3000 steps from reset, 0 divergences.

Any ESP32‑S3 board on USB works (its built‑in USB‑Serial/JTAG carries both the console and JTAG). The flow, all scripted:

# one-time: dump the board's bootloader/partition table/app start (esptool) into hw/flash-0-1M.bin
hw/difftest.sh 8000                 # reset → single-step 8000 instructions on the chip and in the emulator, diff
hw/difftest-at.sh 403c8948 6000     # run both to a PC (here the 2nd-stage bootloader entry), then step 6000 and diff

difftest*.sh read the chip's efuses (hw/efuse.txt), strapping pins and the peripheral reset state (hw/reset-regs.txt, dumped over JTAG at reset halt) and start the emulator from the same image and state. hw/compare.py diffs pc a0..a15 ps windowbase per instruction, masks PS.INTLEVEL (forced during single-step), hides window-exception handlers (the debugger steps over them atomically) and resynchronises across CCOUNT‑timed delay loops, which iterate a different number of times when each step takes milliseconds.

Result so far: the ROM reset path (8000 steps) and 3000+ steps of the IDF 5.5 bootloader run with zero PC divergence; remaining register differences are RTC‑domain values that depend on the previous boot.

Live board UI (ESP32-S3)

./target/release/esp32sim --boot rom --bootloader … --ptable … --app … --web 8766
# open http://127.0.0.1:8766/

--web PORT runs the emulator in real time and serves web/run.html: the 14‑port board (knob + LED ring, buttons, speaker VU, the ST7735 in its physical orientation plus a readable copy), USB‑CDC and UART0 consoles, an action box for the SDK JSON protocol, and audio through WebAudio. Inputs: click the buttons, wheel/drag/←→ on the knob, click the cap to push it.

Performance / real time (ESP32-S3)

Blocks of instructions are decoded once and executed from a cache, then compiled to native AArch64 code (--no-jit falls back to the interpreter and must give identical results); idle cores (waiti) are skipped, device time is delivered lazily against computed timer deadlines, and interrupt lines are recomputed only when a source changes. See docs/speed-plan.md for the measurements behind each step. The Pocket Synth firmware runs at real time with margin while idle or playing notes; the one place it cannot keep up is a full display redraw, where core 1 runs 100 % busy bit‑banging SPI (4.8 M instructions per 20 ms — 240 Minsn/s needed, ~70 Minsn/s achieved on an M‑series MacBook). Each redraw therefore costs ~0.3 s of lag, which the UI's adaptive audio buffer absorbs (it grows on underrun, up to 400 ms) and the pacer recovers afterwards; if the emulator ever falls more than 0.5 s behind it resynchronises instead of bursting. The header shows real time, ⚠ N s behind and the resync count.

ESP_EMU_RT_LOG=1 prints every 20 ms window that took > 40 ms wall with both cores' instruction counts and PCs. hw/wsdrive.py [port] [seconds] drives the UI protocol without a browser (button presses + knob turns) and reports push gaps, lag and audio delivered — use it to measure changes to the scheduler.

Contributing

Contributions are welcome. CONTRIBUTING.md lists the checks a pull request needs (the same ones CI runs) and the conventions for tests, experiments and evidence.

License

esp32sim is released under the MIT License, copyright Joakim Eriksson (@joakimeriksson), Alice (@aliceisjustplaying), and (@mfiumara) Mattia Fiumara.

Third-party code, data and demo files keep their own licenses:

  • pocket-tank (mediacutlet/pocket-tank, MIT). Its bootloader, partition table and app are committed under web/wasm/fw/public/ with pocket-tank-LICENSE.txt; its model is fetched.
  • MicroPython (micropython.org, MIT): the official ESP32_GENERIC v1.29.0 image of the T-Display demo, fetched by tools/fetch-micropython.sh, not committed; the demo's app and filesystem are in examples/ttgo-tdisplay with Russ Hughes's st7789py driver and fonts (MIT), notice in web/wasm/fw/public/tdisplay-NOTICE.txt.
  • Mask ROM ELFs (espressif/esp-rom-elfs, Apache-2.0), fetched, not committed.
  • xterm.js (xtermjs/xterm.js, MIT), fetched, not committed.
  • Linux image (svermigo/Linux-on-esp32-S3, GPL-3.0), fetched, not committed.
  • ESP-IDF ADC calibration data (Espressif, Apache-2.0): the curve-fitting coefficients and S3 ADC1 calibration from #165, now together in esp-periph/src/sar_adc.rs; see esp-periph/LICENSE-ADC.
The Daily Front Page 11 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The Longevity Ledger
article

GLP-1 may slow biological aging

by dzink·▲ 179 points·177 comments·universityofcalifornia.edu ↗
Semaglutide slowed biological aging across multiple epigenetic clocks.

A set of three blue GLP-1 pens

Semaglutide, a widely used weight loss drug sometimes sold as Ozempic or Wegovy, slowed biological aging across multiple epigenetic clocks in a randomized, double-blind, placebo-controlled clinical trial.

Credit: iStock/Eduardo Monroy Husillos

Key takeaways

  • UC San Diego is leading the way in exploring whether popular GLP-1 drugs consisting of semaglutide — like Ozempic and Wegovy — can slow biological aging.
  • Their new federally funded study provides the first randomized, placebo-controlled clinical evidence of their possible age-slowing effects.

Beyond the widespread attention GLP-1 drugs are receiving for treating obesity, lowering blood sugar and decreasing the risk of cardiovascular disease, emerging research is investigating their other potential impacts — including their effects on aging.

Now, a new study provides the first randomized, placebo-controlled clinical evidence that semaglutide, a widely used GLP-1 drug, slows down the accumulation of biological aging markers in the DNA of adults with HIV. The study is published in Nature Communications.

Researchers at the University of California, San Diego and several partner institutions analyzed data from a previously published clinical trial of 108 adults with HIV‑associated lipohypertrophy, a condition in which excess fat builds up around the abdomen. About half of the participants received weekly injections of semaglutide, with the rest receiving placebo injections.

The team used a set of biological “epigenetic clocks” to track cellular aging over the 32-week treatment period. These clocks detect DNA methylation, chemical marks on DNA that help regulate how genes are turned on or off without changing the genetic sequence itself. By measuring changes in these marks, the team could assess whether the treatment was associated with a slower or faster biological aging pattern.

A man in a blue jacket, Michael Corley

People with HIV often experience accelerated aging, even if it is well-controlled with antiretroviral therapy, according to first author Michael Corley, Ph.D., associate professor at UC San Diego School of Medicine and the Stein Institute for Research on Aging. However, the study found compared to the placebo group:

  • Participants treated with semaglutide exhibited a broad pattern of slower biological aging across epigenetic clocks linked to inflammation and blood, brain, heart, kidney, liver and metabolic health.
  • The drug slowed the pace of biological aging by 9 %, as measured by the DunedinPACE epigenetic clock.
  • The drug significantly slowed biological processes associated with the risk of all‑cause mortality and age-related disease, as measured by the PCGrimAge epigenetic clock.

Research suggests there are several mechanisms by which semaglutide may influence biological aging. By reducing inflammation and metabolic stress, GLP-1 drugs decreased chronic immune activation, a primary driver of accelerated aging in people with HIV. They also reduce visceral and ectopic fat that accumulates around the abdomen and organs, which may help curb the inflammatory and metabolic signals that promote aging.

“Emerging data also suggest that GLP-1 drugs may reprogram certain cells in different organs, which could help explain why we see effects across multiple aging clocks,” said Corley.

While the study focused on people with HIV‑associated lipohypertrophy, Corley says it may also offer lessons for the wider population.

“Many of the biological processes we study in HIV are also central to aging in the general population,” he said. “Because these processes can emerge earlier or be more pronounced in people with HIV, this community can help us identify interventions that may improve healthspan more broadly.”

We are not saying that semaglutide reverses aging or makes people younger. What we are seeing is a signal that it may slow some of the biological processes associated with aging.

Michael Corley, Ph.D.

In a related pilot study published in npj Aging last month, Corley and another team of researchers found that taking semaglutide for 24 weeks:

  • Reduced the rate of biological aging for 42% of participants with HIV and metabolic dysfunction-associated steatotic liver disease (MASLD) — also known as fatty liver disease — as measured by the DunedinPACE epigenetic clock. Those participants also had a greater reduction in liver fat compared with participants whose pace of aging sped up.
  • Slowed aging associated with the risk of all‑cause mortality in 34% of participants as measured by the PCGrimAge epigenetic clock.
  • Increased the length of telomeres — repetitive DNA sequences at the ends of chromosomes that protect genetic material — in nearly 49 % of participants as measured by the PCDNAmTL epigenetic clock. Those participants also tended to walk faster after treatment, suggesting better physical function.

Together, these studies add to growing evidence that GLP-1 drugs may influence pathways involved in biological aging.

“We are not saying that semaglutide reverses aging or makes people younger,” said Corley. “What we are seeing is a signal that it may slow some of the biological processes associated with aging. With newer GLP-1–based therapies now emerging, the field has an opportunity to test whether different drugs in this class have distinct effects on aging biology and to identify which patients may benefit most.”

Larger clinical trials are needed to confirm the findings, determine how long treatment effects last, and establish optimal dosing and treatment duration for both people with HIV and the broader population. Future studies will also be needed to test whether the effects of GLP-1 effects on aging biology are enhanced when combined with lifestyle interventions such as diet, exercise and sleep optimization.

The Stein Institute for Research on Aging plans to translate these results into individualized “aging dashboards” to track biological aging with epigenetic clocks, enabling clinicians to design personalized therapies that target the underlying mechanisms of aging and help prevent age‑related diseases.

Additional co-authors on the Nature Communications study include: Alina P. S. Pang at UC San Diego;  Varun Dwaraka and Ryan Smith at TruDiagnostic; Danielle Labbato and Grace A. McComsey at University Hospitals Cleveland Medical Center; Allison Ross Eckard at the Medical University of South Carolina; and Grace A. McComsey at Case Western Reserve University. The study was funded, in part, by the National Institutes of Health (grants P30 AI036214, R01DK121619 and UM1TR004528) and the James B. Pendleton Charitable Trust.

Additional co-authors on the npj Aging study include: Alina P. S. Pang at UC San Diego; Douglas W. Kitch and Amy Kantor at Harvard T.H. Chan School of Public Health; Fred Sattler at University of Southern California Keck School of Medicine; Pablo F. Belaunzaran‑Zamudio at the National Institute of Allergy and Infectious Diseases. Todd T. Brown at Johns Hopkins University School of Medicine; Alan Landay at the University of Texas Medical Branch; Jordan E. Lake at UTHealth Houston; and Kristine M. Erlandson at University of Colorado Anschutz Medical Campus. The study was funded, in part, by the National Institutes of Health (grants P30 AI036214, UM1 AI068634, UM1 AI068636, UM1 AI106701) and the James B. Pendleton Charitable Trust.

Corley serves as a scientific advisor for TruDiagnostic.

The Daily Front Page 12 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — West Bank Harvest Under Attack
article

Israeli settlers attack olive framers & Washington Post journalist in West Bank

by 0x54MUR41·▲ 152 points·54 comments·theguardian.com ↗
Settlers hurl rocks at Palestinians and beat photographer Heidi Levine.

Settlers hurl rocks at Palestinians and beat photographer Heidi Levine as part of yearly attacks to disrupt harvest

Firefighters dousing a burnt car with water among olive trees

Firefighters dousing a burnt car with water after Israeli settlers attacked a group of Palestinians harvesting olives near Turmus Ayya. Photograph: Ammar Awad/Reuters

Israeli settlers have attacked Palestinians across the occupied West Bank in a coordinated movement to disrupt the annual olive harvest, burning cars and trees and injuring Palestinians and a Washington Post photographer.

Masked settlers wielding clubs and other weapons attacked people attempting to harvest their olives in West Bank towns on Friday. Palestinian authorities said they recorded attacks in eight villages, and injuries among at least 20 people.

American photojournalist recounts Israeli settler attack in the occupied West Bank – video

American photojournalist recounts Israeli settler attack in the occupied West Bank – video

It was the latest series of attacks in a deadly campaign of Israeli settler violence against Palestinians in recent months, violence which has drawn accusations of “ethnic cleansing”, including from the British government.

In the town of Abu Falah, near Ramallah, at least 80 settlers, some of whom were carrying firearms or clubs, gathered to stop Palestinians from harvesting their olives, using slingshots to hurl rocks at the farmers in view of Israeli military vehicles. When some of the Palestinians then picked up rocks to defend themselves, the Israeli military fired teargas in their direction.

Teargas drifts among the trees

Teargas fired by Israeli forces. Photograph: Léo Corrêa/AP

The Israeli Foreign Press Association said in a statement: “This is the latest in a long line of violent attacks by Israeli settlers against journalists and other civilians in the occupied West Bank. Yet our repeated calls for action to confront this lawlessness have been ignored by Israeli authorities.”

Among those injured was the Washington Post photographer Heidi Levine, who was beaten by settlers in an attack that lasted more than 10 minutes, according to witnesses. Settlers stole her passport, phone, wallet and equipment.

“I was attacked, pushed to the ground. Luckily, I had my flak jacket and helmet, otherwise I probably wouldn’t even be here, because they just kept kicking and kicking me,” Levine said from a hospital bed in Ramallah. She said the attack ended when her Palestinian colleagues intervened to save her.

In a statement, the Washington Post said Levine had been wearing visible markings clearly identifying her as a journalist.

The office of Israel’s prime minister, Benjamin Netanyahu, said that the facts surrounding the attack on Levine were “unclear”, suggesting the attack was the fault of “200 Arabs and far-left activists” who confronted Israeli youths. The office added that it condemned “violence against anyone”.

Levine speaking to journalists from a hospital bed with a bandage on her fingers.

Levine speaking to journalists in hospital after the attack. Photograph: Ali Sawafta/Reuters

There has been a surge of settler violence against Palestinians over the past month. Settlers have carried out at least 170 attacks since 27 September, around the start of the annual olive harvest, according to Yesh Din, an Israeli rights group.

Every year, settlers attack Palestinians trying to harvest their olives, but there has been a rise in violence this year as Israel’s elections approach at the end of October.

At least four Palestinians had been killed and more than 100 others injured over the past month, Palestinian authorities said. Thousands of trees have been damaged.

Israel imposed new rules on the olive harvest this year, barring Palestinians from harvesting their trees located in Area C, an area under the Israeli military’s control, which comprises most of the West Bank’s agricultural land.

Palestinians and activists collecting olives after the attack on Friday.

Palestinians and activists collecting olives after the attack on Friday. Photograph: Léo Corrêa/AP

The new orders prohibit Palestinians from entering about 8,800 hectares (21,800 acres) of agricultural land – a 30% increase from the year prior – without the approval of the Israeli military. By contrast, the military gave Israeli citizens access to more land this year.

The rights group Peace Now says the military decreased the amount of land Israeli citizens were prohibited, for the purpose of preventing settler violence, from entering from about 1,070 hectares in 2025 to 680 hectares in 2026.

The olive harvest is an economic lifeline for Palestinians and has grown in importance since Israel revoked work permits for many Palestinians in the West Bank after the Hamas-led attack on 7 October 2023.

Photos and videos showed large swathes of agricultural land with uprooted olive trees in Kufur Malek, outside Ramallah, where Israeli bulldozers razed trees.

Settlers rarely face accountability for their violence, even when well-documented. Rights groups say settlers enjoy the protection of the Israeli military, which intervenes only if Palestinians try to defend themselves.

Netanyahu, has on occasion condemned the violence, which he says is due to just about 100 settlers, but he has taken few steps to stop it.

Settlements have rapidly expanded across the West Bank under his rightwing government, leading to international condemnation. The UN and most countries judge settlements to be in violation of international law.

Friday’s attack in Abu Falah followed a similar attack hours earlier near the West Bank village of Turmus Ayya, where settlers burned three cars after attacking Palestinians harvesting olives.

Videos shared by the Israeli rights group B’tselem showed hundreds of bags of olives “violently” stolen by Israeli settlers from Palestinians and taken to Israeli olive presses.

Sarit Michaeli, an independent activist, said settlers were stealing Palestinians’ olive crop on a scale “never seen before in my 22-year history of working on this issue”.

A spokesperson for the US embassy in Jerusalem said it was aware of reports of the attack and declined to comment further due to privacy laws.

The Daily Front Page 13 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Kubernetes, Reluctantly Considered
article

A skeptic's first contact with Kubernetes (2024)

by pmoriarty·▲ 138 points·80 comments·blog.davidv.dev ↗
I decided it was time to base my opinions on facts rather than perception.

I've been working on systems administration / engineering / infrastructure development for many years and somehow I've managed to avoid any interaction with Kubernetes. This avoidance wasn't accidental; my work required very tight control of workload placement in physical locations.

Over time, I developed a skeptical view of Kubernetes without really having a solid basis for it, other than a vague notion of it being "a new way of doing things" and "unnecessary complexity".

I decided it was time to base my opinions on facts rather than perception, so here I am, writing what I learned.

While there are a lot of tutorials covering the usage and operation of a Kubernetes cluster, along with basic descriptions of its components, they did not quite work for me. Many of these resources lightly cover what the components do, but often miss the underlying reason or the tradeoffs.

This post aims to cover these concepts from a perspective I would've found useful, and it does not aim to be exhaustive.

A "standard" description

Kubernetes allows you to run arbitrary workloads, and provides you with the ability to:

  • specify requirements (cpu, disk, memory, instance count, ..)
  • dynamically scale instance count

but the more important part, is what it does for you:

  • picking which host an application runs on
  • "self-healing" (crashed instances get restarted, instances automatically moved out of faulty hosts)
  • exposes services for DNS-based discovery

and it only requires you to package your workload as a Docker image, which seems like a reasonable price to pay.

The basic building blocks that compose a cluster can be defined as follows:

  • Pod: a unit of work, consisting of a set of Docker images and their configuration
  • Node: a computer running the kubernetes node agent (kubelet). executes Pods.
  • Cluster; a logical collection of Nodes along with the Control Plane.
  • Service: logical grouping of a set of pods
  • Namespace: a logical subdivision of the Cluster. provides scope for names (like DNS search domain)

It's easier to observe the relationship between these concepts in diagram form:

While this may be an OK-ish explanation, it wasn't really something that would've been useful for me – a lot of infrastructure platforms look something like this diagram; there's nothing special here

What I found important

My opinion is that a large part of Kubernetes' value is derived from just two concepts:

Control loops

Workloads are managed by a set of control loops (named Controllers).

A control loop will continuously perform actions (via a control element), if necessary, to achieve a desired state, and it will do this by observing specific variables (via a sensor).

An interesting detail is that the control element does not necessarily directly affect what the sensor observes.

This description is very generic, so here are some examples:

  • A workload that needs to process events from a queue

    • Desired state: empty queue
    • Sensor: depth of the queue
    • Control Element: number of event processing servers
  • A workload that needs to horizontally scale to handle user load

    • Desired state: Maintain P90 latency below X ms
    • Sensor: Latency metrics from backend
    • Control Element: Spin up new Pods to handle the demand
  • Generic Health monitoring

    • Desired state: All Nodes are healthy
    • Sensor: Health metrics from nodes
    • Control Element: Remove Nodes from the cluster

Services

A Service is a networking-level concept which provides stable access to a set of backing Pods, it offers:

  • A stable identity: unchanging (virtual) IP address & a DNS record
  • Load balancing: distributes incoming traffic across the Pods
  • Service discovery: allows other components to find and communicate with the Service

Compared to "classic" clusters, a Service provides a similar abstraction to the combination of:

  • N nodes running Keepalived + NGINX (with a dynamic set of backends)
  • CNAME records for the virtual (Keepalived) IP

Whenever a new Service is created:

  1. A Virtual IP will be assigned to it
  2. Every Node will update its networking configuration (netfilter) to forward any packet destined to each Service's Virtual IP instead to the backing Pods.

The networking configuration is updated by a Controller that runs on every Node: kube-proxy, whose primary responsibility is to watch the state of all Service objects and update the netfilter rules on every change.

This design means that all Nodes act as load balancers for Service traffic, so there is no single point of failure in Service traffic forwarding, and that traffic forwarding capacity scales with Cluster size.

For me, an interesting property of this design is that every Node receives the rules for every Service, which has some implications:

  • Very simple implementation for kube-proxy

  • The number of rules may be large, which may be problematic for certain traffic forwarding implementations (iptables linearly evaluates every rule)

  • Traffic is forwarded multiple times in some scenarios, providing higher availability at the cost of extra load on the cluster

    • When a Pod is moved to another node, the traffic will be forwarded twice until the old DNS entry expires

      • No need to deal with cache invalidation for DNS entries at the kube-proxy level
    • Misbehaving clients (eg: ones that do not re-resolve DNS before reconnecting) will continue to work

We can look at the life of a packet that travels from "Pod 1" to "Service 1":

Workload management

or "how, when and where things run"

You can create a Pod manually, using a YAML definition like this one:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

but by doing that, you are manually scheduling the execution of this pod once; which is easy, but has some nasty limitations:

  • If the Node that host the Pod dies, the Pod will not get re-scheduled
  • If the Pod is terminated due to resource pressure on the Node (via eviction) it also won't get re-scheduled
  • You can't go "now I want to have 2 of these"

Instead of creating a Pod directly, you can create a ReplicaSet which is a Controller, and as part of it's control loop it will ensure that the right number of Pod replicas are running at all times, which solves the problem of Node failure/eviction deleting your Pod.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2

ReplicaSets allow you to update the desired number of replicas, and nothing else (eg: updating nginx version, or exposing another port) – you would need to delete the resource and re-create it.

To address these limitations, you can use a Deployment, which is a Controller that will ensure the right number of Pods with the right image are running eventually.

The eventual part is very important, as Deployments allow you to update which image (or version) the Pod is running and to select the rate of change, covering the standard workflow of a "version upgrade".

Said differently, when you update a Deployment, it creates a new ReplicaSet and gradually scales it up while scaling down the old one, enabling rolling updates.

Storage management

or "how data persists and moves with your Pods"

By default, containers within a Pod do not share storage/filesystem.

If you want to share storage between containers in a Pod, you can use an Ephemeral Volume, whose lifecycle is tied to the Pod - when the Pod shuts down, the data is deleted.

Ephemeral Volumes seemed useless1, but they do have some use-cases:

  1. Log shipping from a sidecar
  2. A sidecar populating caches for the main application

If you want to have actually persistent storage, you could use a Persistent Volume, which has a lifecycle that is decoupled2 from the Pod's.

You'd define such a Volume with a Claim, like this:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

and you can then use it in a Pod like this:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-with-pv
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: html-volume
      mountPath: /usr/share/nginx/html
  volumes:
  - name: html-volume
    persistentVolumeClaim:
      claimName: nginx-pvc

Some things seemed interesting:

  • Multiple users (Pods) of the same Claim will share storage, as always this is fairly risky if there are multiple writers
  • A PersistentVolume is backed by different drivers (NFS, SMB, iSCSI, ..) but which one is being used is not clear to the Pod, so the Pod cannot rely on features (like atomic renames)

If you want to haver per-instance persistent storage, you can use a StatefulSet which defines in a single resource: a workload (Pod), replica count, mount configuration and volume claim template.

Some interesting things with StatefulSets:

  1. Pods have stable hostnames (nginx-0, nginx-1, ..)

  2. Deployments are executed in order:

    1. Creation of Pods in ascending order (0, 1, ..)
    2. Deletion of Pods in descending order (3, 2, ..)
    3. Updates Pods in descending order (3, 2, ..)

This seemed weird, and the explanations that I found online say that apparently lower numbered instances are "core" or "more stable" – I don't get it, as a crashy Pod will not get renumbered. Maybe it'd be better to update in descending "uptime" order? Maybe this "seniority"/"stability" got retconned for Pods, and Kubernetes just needed an order?

Operationally, at this point it's still unclear to me how you'd manually investigate the contents of a Persistent Volume, other than attaching to the running container & executing commands there; what if my container does not bring a shell?

The scorecard

We've covered the main parts of Kubernetes - Control loops, Services, Workloads and Storage. Learning about this concepts has allowed me to form the less-baseless opinion I was looking for (though, I still have not operated or used a cluster).

Overall, I think the concepts make a lot of sense, specifically I think Services (including the networking model, and kube-proxy) are fantastic, and that keeping the Controller pattern as an engine for resource management is the right way to operate.

I'm left with some open-ended questions/rants, which I'll leave here for your enjoyment

The Controller docs say:

Your cluster could be changing at any point as work happens and control loops automatically fix failures. This means that, potentially, your cluster never reaches a stable state.

As long as the controllers for your cluster are running and able to make useful changes, it doesn't matter if the overall state is stable or not.

Why does it not matter if the state is unstable? If I'm operating a cluster that can't settle, I'd like to know immediately!

  • Given the Controller pattern, why isn't there support for "Cloud Native" architectures?

    • I would like to have a ReplicaSet which scales the replicas based on some simple calculation for queue depth (eg: queue depth / 16 = # replicas)
    • Defining interfaces for these types of events (queue depth, open connections, response latency) would be great
    • Basically, Horizontal Pod Autoscaler but with sensors which are not just "CPU"
  • Why are the storage and networking implementations "out of tree" (CNI / CSI)?

    • Assuming it's for "modularity" and "separation of concerns"
  • Given the above question, why is there explicit support for Cloud providers?

    • eg: LoadBalancer supports AWS/GCP/Azure/..

And for the largest open topic, even though this is not Kubernetes' fault, I have a rant I need to get out

Stringy types

The Kubernetes "community" seem to have absolutely hell-bent on making their lives harder by basing tools on text interpolation of all things. It's like they saw Ansible and thought, "Hey, that looks terribly painful. Let's do that!".

Check out this RabbitMQ scaler (KEDA, maintained by Microsoft) as an example:

value: Message backlog or Publish/sec. rate to trigger on. (This value can be a float when mode: MessageRate)

What do you mean that the type for value depends on the value of mode?? And what do you mean mode is a string when it should be an enum??

How did Helm manage to become popular?? How is it possible for a tool like this to do text templating of all things that could be done?

Take this arbitrary NGINX chart and check how most values are handled with manual string indentation:

{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} 14 {{- end }}

or

{{- toYaml { "rollingUpdate": {}, "type": "RollingUpdate" } .Values.updateStrategy | nindent 4 }}

Why are we generating a structured language (YAML), with a computer, by manually adding spaces to make the syntax valid? There should be no intermediate text-template representation like this one.


  1. I'm only considering "standard storage" here – I wouldn't consider ConfigMaps storage. ↩
  2. Expected to be "permanent" but nobody stops the admin from rm -rf on the wrong server ¯\_(ツ)_/¯. ↩
The Daily Front Page 14 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Kernel by the Numbers
article

Development statistics for the 7.2 kernel

by farlight·▲ 137 points·112 comments·lwn.net ↗
One of the busiest development cycles in the kernel's history.

Linus Torvalds released the 7.2 kernel on August 17, after noting that the number of fixes coming in was still "bigger than I would have wished for". In fact, 7.2 was one of the busiest development cycles in the kernel's history, adding nearly 600,000 lines of code. It's time to look at some statistics to get a handle on how the kernel's development community is changing.

There were 16,418 non-merge commits brought into the mainline for the 7.2 release, exceeding the (already busy) 7.1 release; it is, in fact, the second-busiest release in the kernel's history. Only the 6.7 release brought in more commits but, while 6.7 was dominated by the merging of the bcachefs development history, the volume for 7.2 is more broad-based.

These commits were contributed by 2,652 developers, a big increase over the previous record (2,479 in 7.1). If one looks at the history of developer involvement since the beginning of the Git era, the result is:

[Line plot of 	developers per release]

(This plot, like much of the information here, comes from the subscriber-only LWN Kernel Source Database). There has been a clear trend over that entire history: the number of developers contributing to each release increases over time. But the slope of that line has clearly changed.

Uwe Kleine-König [KSDB] was the biggest contributor of commits to the 7.2 release with cleanups through the driver subsystem. Rosen Penev [KSDB] contributed a long list of LLM-authored bug fixes throughout the architecture-specific, driver, networking, and crypto subsystems, among others. Ian Rogers [KSDB] worked extensively on the user-space perf tool, as did Arnaldo Carvalho de Melo [KSDB]. Johan Hovold [KSDB] made numerous improvements, mostly in the SPI and USB subsystems.

Matthew Stewart [KSDB] reached the top of the lines-changed column by following the time-honored tradition of adding more massive, machine-generated amdgpu header files; Hawking Zhang [KSDB] did likewise. Miguel Ojeda [KSDB] brought the Rust zerocopy crate into the kernel source. Darren Ye [KSDB] added the MediaTek mt8196 sound driver.

Just over 8% of the commits in 7.2 carried Tested-by tags, while 48% included Reviewed-by tags. The review tags, in particular, are showing a mild downward trend in recent releases:

[Reviewed-by tags per release]

Whether that decline reflects an actual decrease in the amount of review taking place is unclear at best. In any case the most active testers and reviews for this cycle were:

Dan Wheeler [KSDB] is, as always, the top tester by virtue of his work with AMD graphics-driver patches. On the review side, Konrad Dybcio [KSDB] added his tag to 231 changes while Dmitry Baryshkov [KSDB] tagged 225; the same two, who both tend to focus on drivers and devicetree files for Qualcomm devices, were at the top of that list for the 7.1 cycle as well.

Work on the 7.2 kernel was supported by 249 employers that we were able to identify; the most active of those were:

The most significant change this time around, arguably, is the significant increase in developers with unknown affiliation. This is partially, at least, a reflection of the ongoing flood of new developers entering the kernel community.

New developers and their tools

Each of the previous two kernel releases had set a record for the number of first-time developers contributing changes; 7.2 has broken that record again, with 613 contributors [KSDB] who had not been seen here before. Here, once again, the trend is clear:

[First-time developers by release]

The most active new developer was Bryam Vargas [KSDB], who contributed 43 commits fixing problems in the input, NVMe, F2FS, AppArmor, Landlock, SELinux, NTFS, WiFi, ATA, SCSI, networking, Ceph, and Thunderbolt subsystems, among others. As has been observed here before, it would be difficult for a seasoned kernel developer to reach deeply into that many subsystems over the course of a single development cycle — at least, if they wanted to understand what they are doing. For a previously unknown developer to do this is surprising at best. Vargas's patches do not carry Assisted-by tags, though, so we are left to believe that this work was done without LLM assistance.

Overall, 1,111 changes in 7.2 (under 7% of the total) carried Assisted-by tags — a significant increase over the 301 seen in 7.1. The real count of LLM-assisted patches in 7.2 must surely be far higher than that, though. Many developers do not supply those tags (often — but not always — out of ignorance of the rules), maintainers rarely ask about LLM use, and at least one maintainer actively strips those tags when applying patches. Accurately tracking commits developed with LLM assistance may turn out not to be possible, but it sometimes feels like the kernel community does not care enough to really try.

The other way in which LLM usage is making itself felt in kernel development is in the area of patch review. There are 252 patches in 7.2 with Reported-by tags crediting the Sashiko review system [KSDB]; 568 commits mention Sashiko in their changelogs. Other LLMs are also clearly being used to find kernel bugs, though, with real effects.

The 7.2 release contains 4,830 commits with Fixes tags, indicating that they fix a bug introduced by a previous commit. To see just how significant an increase is, consider this plot, an updated version of one that has been seen here before (most recently for the 6.17 development cycle):

[Fixes tags for 7.2]

The heavy green line plots how many commits in each release contained Fixes tags, while the heavy brown line is the number of commits that were identified by Fixes tags in subsequent commits. The crossover point is at 5.9, suggesting that, as of that release, the kernel community started fixing more bugs than it introduced. That conclusion will not hold, though; it will take years for all of the post-5.9 bugs to be identified and fixed, and that line will shift as it happens.

The noteworthy part of the plot, though, is at the right-hand side, where the number of commits carrying Fixes tags increases dramatically, after having been roughly level for quite a few releases. That, it seems, is what happens once large numbers of people start turning LLMs toward the task of finding bugs in existing software. This is going to be an interesting trend to watch. The number of bugs cannot be infinite — even in the kernel — so the rate of bug detection and fixing must eventually fall off. The existing bugs will have been fixed, and LLM review will have reduced the number of new bugs introduced. At least, that is the hope.

If that drop-off does not happen, there will be some interesting questions to answer. It seems reasonably clear that the spread of LLMs has enabled people to create kernel patches who would not have been capable of doing so before. If that is true, it is not much of a stretch to conclude that, in many cases, the submitters of these patches do not fully understand what those patches do. Perhaps the LLMs are good enough that this understanding is no longer necessary, but it could also be that we are creating a pile of code that nobody has ever really understood, but which will need to be maintained in the coming years.

The Linux kernel is aimed at production use, not research or experimentation. But there is currently a massive experiment being run on the kernel's development processes and community. This community has absorbed new processes and tools many times over its 35-year history, and will almost certainly find a way to do that this time as well. But that absorption has not always been without turbulence along the way.

Meanwhile, there are nearly 14,000 non-merge changesets sitting in the linux-next repository and poised to be pulled for the 7.3 release; over 1,100 of them contain Assisted-by tags. It would seem that the high level of activity that has characterized recent releases will not be ending anytime soon. As always, keep an eye on LWN as we follow the next development cycle (and those that come after).

The Daily Front Page 15 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The Model Race
article

DeepSeek-v4.1-Flash-1017

by theykk·▲ 929 points·699 comments·huggingface.co ↗

DeepSeek-V4.1

Introduction

DeepSeek-V4.1-Flash-1017 is a minor update to DeepSeek-V4.1-Flash, delivering substantial improvements across reasoning, coding, agentic tasks, and visual benchmarks. Alongside these gains, the model reduces task execution time and output length, enabling users to complete tasks faster and at lower cost and advancing the performance–cost Pareto frontier across multiple agent harnesses.

Benchmark DS-V4.1-Flash-1017 DS-V4.1-Flash K3 GLM-5.3 GPT-5.6 Sol Opus 5
HLE w/o tools 42.6 (44.0†) 36.8 (39.1†) 43.5 42.0† 44.5 56.3
Terminal-Bench 4.0 42.3 31.2 12.6 37.9 39.9 51.8
DeepSWE v1.1 77.0 74.2 67.5 66.9 73.0 74.0
ProgramBench 29.1 20.3 17.5 19.0 23.0 37.0
NL2Repo-Bench 68.2 65.4 58.0 58.0 56.8 75.3
Automation-Bench v1.0.6 60.5 54.8 46.7 48.8 45.8 50.3
Agents’ Last Exam 35.4 31.8 27.6 28.5 26.7 28.6
Apex Bench v1.1 72.1 64.6 47.8 56.6 54.3 65.8
Chartography (w/tools) 83.0 78.9 68.1 — 79.9 84.0
BabyVision (w/tools) 92.5 89.6 85.7 — 88.9 94.1
ZeroBench-main (w/tools) 51.0 49.0 41.0 — 53.0 52.0

† denotes the text-only subset of HLE. We use the Claude Code harness for Terminal-Bench 4.0 and the Mini-SWE-V2 harness for DeepSWE v1.1.

Prompt Encoding

This release does not include a Jinja-format chat template. The encoding folder contains a self-contained Python reference implementation (encoding.py) with test cases for multi-turn conversations, tool calling, thinking mode, numeric reasoning effort, mid-conversation system messages, and interleaved image content.

For production use, we additionally release deepseek-recipe, a set of Rust libraries with Python bindings that provides the same prompt format as a maintained, protocol-aware toolkit. It converts Messages, Chat Completions, and Responses API requests into the Conversation format, encodes them into DeepSeek V4 and V4.1 prompts or token IDs, and parses model output back into complete or streamed responses — covering thinking, tool calls, images, and generation settings. Model inference, tool execution, and HTTP transport are left to the caller.

Minimal Inference

Please refer to the inference folder for instructions on weight conversion and running inference locally.

Recommended sampling parameters:

Parameter Value
temperature 1.0
top_p 1.0
context_window 1M tokens
max_tokens ≥ 256K

License

This repository and the model weights are licensed under the MIT License.

Citation

@misc{deepseekai2026deepseekv41flash,
      title={DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression},
      author={DeepSeek-AI},
      year={2026},
}

Contact

If you have any questions, please raise an issue or contact us at service@deepseek.com.

The Daily Front Page 16 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The Model Race
article

DeepSeek: DeepSeek v4.1 Flash 1017

by theanonymousone·▲ 515 points·5 comments·openrouter.ai ↗

DeepSeek V4.1 Flash 1017 is the October 17, 2026 snapshot of DeepSeek V4.1 Flash, served by DeepSeek under the deepseek-flash API model name. V4.1 Flash is a sparse mixture-of-experts model from DeepSeek, and the first built on the company's Causal Encoder-Decoder (CED) architecture. It activates 8B parameters on input and 16B on output from a 552B-parameter backbone, an asymmetric split that keeps per-token compute low relative to the model's total size. Image understanding is native to the architecture, with visual and text embeddings trained jointly from the start of pre-training rather than added afterward as in the earlier experimental V4 Flash Vision Exp.

It is suited for coding, terminal, and computer-use agents, along with long-horizon tasks that must run to completion across many steps and long-context analysis. Compressed KV caching cuts cache memory to roughly a quarter of the previous Flash generation, significantly reducing costs on agentic workloads. DeepSeek positions it as the cost-efficient tier of the V4.1 family and reports that it exceeds V4 Pro on performance, speed, and task completion time.

The Daily Front Page 17 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — The Model Race
article

Super Intelligence

by wiradikusuma·▲ 104 points·184 comments·si.gov ↗

The official home of America's work to lead the world in Super Intelligence, from the Genesis Mission to the next generation of American innovators.

Explore Initiatives

Why it matters

Whoever builds the largest SI ecosystem will set the global standards and reap the economic and security rewards.

Under President Trump, the nation aims to usher in a new golden age of innovation, human flourishing and technological achievement for the American people.

Presidential action

0

executive orders on Super Intelligence across President Trump’s two terms.

From clearing barriers in January 2025 to frontier security in 2026. Scroll on for three orders reshaping the country.

November 24, 2025

The Genesis Mission

The nation's flagship SI-for-Science initiative that unites 15 federal agencies with industry, academia, and the Department of Energy's National Labs to solve the most pressing challenges using super intelligence.

July 23, 2025

Data Center Infrastructure

Federal permitting for the data centers that power Super Intelligence moves faster, so American capacity can be built on American soil.

July 23, 2025

The American SI Stack

America exports its full technology stack, from chips to models to standards, to allies and partners around the world.

Science: A New Golden Age Summit

A look into the historic gathering to renew American Science for a New Golden Age of Discovery.

Initiatives

Raising the next generation of American innovators.

White House Task Force
SI Education
Bringing SI literacy and training to K-12 students and the teachers who guide them.
Explore**→**

With First Lady Melania Trump
Presidential SI Challenge
A nationwide call to action and competition for students, educators, and K-12 schools to become SI ready and to build the future with powerful tools available today.
Sign Up**→**

Public-Private Partnership
Pledge to America's Youth
Companies and organizations committing resources to SI education for young Americans.
Discover**→**

“The United States of America is the Leader in SI”

President Donald J. Trump

The Daily Front Page 18 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Tools, Code & Platforms
article

Pele – Mermaid diagrams as themeable SVG

by dchest·▲ 558 points·53 comments·pele.run ↗

Pele is a lightweight open source library that renders Mermaid diagrams to SVG, themed with CSS variables.

How it works

Write Mermaid syntax, Pele renders it to SVG. Try editing the example below.

flowchart TD
  A[Mermaid text] --> B{Flowchart?}
  B -- Yes --> C[Pele]
  B -- No --> D[Mermaid]
  C --> E([SVG])
  D --> E

Use CSS variables to set colors and fonts. Color changes apply without re-rendering.

.pele {
  --pele-bg: #fffcf0;
  --pele-fg: #100f0f;
  --pele-muted: #6f6e69;
  --pele-line: #100f0f;
  --pele-surface: #f2f0e5;
  --pele-surface-alt: #e6e4d9;
  --pele-border: #cecdc3;
}

Why Pele?

Zero dependencies, 6× smaller, and up to 500× faster than Mermaid.js. Pele supports every diagram type built into Mermaid 12.1.0.

Pele Mermaid.js
Bundle size gzip 230 kB 1.6 MB
Render time 0.05–0.3 ms 6–82 ms
Direct dependencies 0 23
Small screens Adapts the layout Scales the diagram
Theming CSS variables Theme configuration

Pele in your app

Add Pele to your app using the API.

npm install pele
pnpm add pele
yarn add pele
bun add pele

Pass Mermaid syntax to render() and insert the returned SVG into your page.

import { render } from 'pele';

const { svg } = render(`flowchart LR
  A[Mermaid text] --> B[SVG]`);

document.querySelector('#diagram').innerHTML = svg;

Pele in use

Pele is open source, developed for Obsidian to render diagrams quickly and match your theme. It is named after Pele, the goddess of volcanoes and fire.

Pele is open source under the MIT license.

repository

Source code of the Estonian online voting system

by theanonymousone·▲ 228 points·216 comments·github.com ↗
★ 478⑂ 65 forks Go

IVXV online voting system

The intention behind this repository is to make source code of the Estonian online voting system available for public review.

The repository is not used for active development, but will be kept up to date, so the code that can be found here is the code that is used for election. As the voting system used for legally binding elections must strictly follow the legislation, the actual development of Estonian I-voting system and I-vote verification application is supervised by State Electoral Office of Estonia. Please refer to www.valimised.ee for further information.

The Daily Front Page 19 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Tools, Code & Platforms
repository

Codex Desktop continuously generates Crashpad pending dumps

by AIorNot·▲ 166 points·80 comments·github.com ↗
★ 129,748⑂ 20,431 forks Rust

Lightweight coding agent that runs in your terminal

Summary

Codex Desktop is continuously adding paired .dmp and _sidecar.json files under:

~/Library/Application Support/com.openai.codex/web/Crashpad/pending

On my machine this directory grew to 4.9G and 54,504 files in one day. The count continued increasing during investigation, so this appears to be active Crashpad dump generation rather than stale one-time leftovers.

The Codex Desktop app is still functional while this is happening. I can use the app, inspect the filesystem, and interact with GitHub from the same running session.

So the user-visible problem is not that Codex is fully crashing or unable to launch. The issue is that Crashpad is continuously generating pending dump/sidecar pairs in the background while the app remains usable, causing unbounded local disk growth.

I am not attaching minidumps publicly because they may contain memory, local paths, or private data. I can share the newest .dmp privately if OpenAI maintainers provide a safe upload path.

Environment

  • Product: Codex Desktop app on macOS
  • Codex app version: 26.527.60818
  • CFBundleVersion: 3437
  • Crashpad/Electron annotation observed from live process: prod=Codex_Mac, ver=148.0.7778.179
  • macOS: 26.3.1 (25D771280a)
  • Architecture: arm64

Observed evidence

Crashpad pending directory:

~/Library/Application Support/com.openai.codex/web/Crashpad/pending

Latest measurements:

4.9G    ~/Library/Application Support/com.openai.codex/web/Crashpad/pending
54,504 files total
27,252 .dmp files
27,252 _sidecar.json files

Sampled pending file time range:

oldest sampled pending files: 2026-06-02 13:31:21 CEST
latest sampled pending files: 2026-06-02 21:08:24 CEST

During the investigation the count increased from 53,444 to 54,064, then to 54,504, which indicates the queue was still growing.

I also observed two Codex browser_crashpad_handler processes running under PPID=1 since Sat May 30 11:47:50 2026, both using the same Crashpad database:

/Applications/Codex.app/.../Helpers/browser_crashpad_handler \
  --database=~/Library/Application Support/com.openai.codex/web/Crashpad \
  --annotation=plat=OS X \
  --annotation=prod=Codex_Mac \
  --annotation=ver=148.0.7778.179

The local app remained usable enough to inspect/report this, so the visible issue is not just a normal foreground app crash. It looks like Crashpad or a monitored helper process is repeatedly generating pending dumps without bounding, upload/processing cleanup, or rotation.

Expected behavior

Crash reports should be bounded, uploaded/processed/rotated, or not continuously generated while the app remains usable.

Actual behavior

Pending Crashpad reports accumulate rapidly and consume multiple GB of local disk space.

Commands used to collect evidence

du -sh "$HOME/Library/Application Support/com.openai.codex/web/Crashpad/pending"

find "$HOME/Library/Application Support/com.openai.codex/web/Crashpad/pending" -maxdepth 1 -type f | wc -l

find "$HOME/Library/Application Support/com.openai.codex/web/Crashpad/pending" -maxdepth 1 -type f \
  | sed 's/.*\.//' | sort | uniq -c | sort -nr

/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' /Applications/Codex.app/Contents/Info.plist
/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' /Applications/Codex.app/Contents/Info.plist

sw_vers
uname -m

ps ax -o pid,ppid,lstart,command \
  | grep -E 'browser_crashpad_handler|com.openai.codex/web/Crashpad' \
  | grep -v grep
The Daily Front Page 20 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Tools, Code & Platforms
article

JDK 28

by ejboy·▲ 116 points·70 comments·openjdk.org ↗

This release will be the Reference Implementation of version 28 of the Java SE Platform, as specified by JSR 403 in the Java Community Process.

Status

The main line is open for bug fixes, small enhancements, and JEPs as proposed and tracked via the JEP Process.

Early-access binaries, under the GPL, are available here.

Features

JEPs targeted to JDK 28, so far

The Daily Front Page 21 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Tools, Code & Platforms
article

Microsoft Teams is a red flag

by Raed667·▲ 90 points·70 comments·blog.raed.dev ↗

When a company runs on Microsoft Teams and Outlook, I assume one thing about how it makes decisions: the tools its people spend all day in were chosen by someone who barely uses them, and whose deciding factor was a line in a licensing spreadsheet.

Teams came bundled with Microsoft 365, and that’s how most companies ended up on it. It’s the default choice for IT, because who needs another procurement contract to get Slack or set up Mattermost?

Using Teams instead of Slack saves you the equivalent of 10 minutes a month of a senior engineer’s salary.1 If the tooling costs someone more than that in friction, the company is paying extra for a worse tool.

Switching tenants is slow and requires a full reload, file sharing involves SharePoint for some reason, and search is abysmal.

Most companies on Teams pretend it’s about compliance or fleet management, when in reality it’s just the easy default.

When you tell me you use Teams, what I read from it is who made the call and what they were optimizing for. A company that minimizes license cost per seat while ignoring what an hour of its people costs has its accounting upside down. I’d bet the same reasoning picked the laptops and the VPN too, since it’s the same people working from the same spreadsheet.

Microsoft priced Teams so that it looks free. It only looks that way to the people who don’t have to use it.

Footnotes

  1. Since the 2025 EU settlement, Microsoft sells Teams with a price of €1 to €8 per user per month depending on the suite. ↩
The Daily Front Page 22 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Streets, Maps & Small Machines
article

MapQuest will now show you where Flock cameras are in your neighborhood

by bookofjoe·▲ 320 points·50 comments·engadget.com ↗

A Flock surveillance camera next to a road.

MapQuest has been on quite the unexpected tear over the last couple of months. The mapping service's app surged in popularity after it refused to refer to Lake Ontario as Lake America (unlike Google Maps and Apple Maps). MapQuest also added useful, long-overdue features like Android Auto support and public transit directions.

The app now has another handy tool. You can toggle a layer that shows known outdoor surveillance cameras and license plate readers.

The layer will show you where Flock cameras are. It also displays the locations of cameras from the likes of Motorola Solutions (Vigilant), Genetec, Axis Communications, Axon, Leonardo (ELSAG), Neology, Rekor, PlateSmart, Ubicquia and Verkada. The layer sits alongside options to view traffic and incidents, so it should be easy to find in the app.

MapQuest announced the update with a short video that's set to Rockwell's "Somebody's Watching Me." Chef's kiss, no notes.

You might not be able to easily avoid these cameras on your commute or other usual routes, but the layer may be helpful in illustrating how pervasive these things are in your area. It's useful information to have for those who are trying to rid their neighborhoods of surveillance cams.

The Daily Front Page 23 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Streets, Maps & Small Machines
The Daily Front Page 24 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Streets, Maps & Small Machines
article

Retired Penn professor arrested for blocking Uber Eats robot

by johnnyApplePRNG·▲ 73 points·136 comments·phillyvoice.com ↗

Carolyn Marvin, 78, said she is exercising her First Amendment right to protest — and will do it again.

Woman blocks Uber robot Molly McVety/for PhillyVoice

Retired Penn professor Carolyn Marvin has been blocking Uber Eats robots on delivery runs for months. She was arrested Wednesday for disorderly conduct, but contends she is lawfully protesting.

On Wednesday afternoon, Carolyn Marvin was leaving her flu shot appointment when she spotted an Uber Eats robot rolling down the Center City sidewalk. So she did what she has done for months whenever she's had the time: stand in front of it.

Marvin, 78, said she's not sure how many times she's blocked the path of these robots, which hit the streets of Philadelphia in March. The University of Pennsylvania professor emeritus has made a practice of it to protest "corporations that displace human delivery workers in order to enrich their own bottom line." Her past encounters have circulated online. The Wednesday incident was the first time, however, that the police got involved.

Officers approached Marvin after she'd been there "quite a long time," she said. They asked her to step aside and let the robot complete its delivery. When she repeatedly refused, they arrested her for disorderly conduct.

Police confirmed they had responded to a report of "criminal mischief involving a robot" on the 1200 block of Filbert Street around 1:16 p.m. on Wednesday. A woman on the scene ignored "multiple commands" to move, they said, resulting in a criminal violation notice for disorderly conduct.

Uber declined to comment.

Marvin, who plans to contest the charge on the grounds of her First Amendment right to protest, has been undeterred by the arrest. She plans to continue blocking Uber Eats robots and chatting with curious passersby who ask what she's doing.

"It allows me to talk to people about what's going on," she said. "It's always very interesting conversations that we have, and I think it's good to have those kinds of conversations in public space."

Marvin characterizes public opinion as "divided." Some people are very supportive, she said, while others view her protest as unfair to the customers who paid for delivery. Marvin usually tells them if they're "concerned about money," the robots' impact on delivery workers should worry them, too. She is careful never to block the sidewalk to human pedestrians, she added.

Before Marvin retired, she taught a course on freedom of expression at Penn. She doesn't see her actions as an extension of her academic work, however, as much as civic engagement.

"I would say it's my citizenship," she said. "I'm exercising the rights of my citizenship, so I think of it in those terms."

The Daily Front Page 25 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Also on the Front Page
The Daily Front Page 26 of 27
Saturday, October 17, 2026 The Daily Front No. #261017 — Colophon

That's the Front for Today

Issue No. #261017 — Saturday, October 17, 2026 — went to press 2026-10-19 at 04:58 UTC.

About This Magazine

The Daily Front is a daily digital magazine assembled from the stories that reached the front page of Hacker News on Saturday, October 17, 2026. Headlines, points, and comment counts are recorded as they stood at press time. All articles remain the property of their original authors — every piece links back to its source and its discussion thread.

How It Was Made

Fetched, cleaned, and typeset by an automated pipeline. An editor model laid out the pages and chose the highlights; a second read a handful of the day's stories and briefed the cover illustrator — 33 model calls and 245k tokens in total. Set in Jacquard 12, Playfair Display, Source Serif 4, and IBM Plex Mono, all served via Google Fonts under the SIL Open Font License.

The Cover

The cover illustration was commissioned with this prompt:

In a hospital records room, a wheeled server rack has rolled away from its marked bay, trailing a loose cable toward an open cabinet of patient files. A small robotic arm reaches past a red security latch to pull a thick stack of bed records from the cabinet, while a human systems engineer braces one hand against the rack and uses the other to force the latch shut. Behind them, an older beige control console blinks as its bundled cables tug against the newer equipment, holding the runaway rack just short of the doorway.

Render the cover as printer-error abstraction: banded ink starvation, misfed paper folds, broken dithering, and offset partial repeats shear the hospital records room into misregistered strips. Use a hard office-fluorescent palette of icy cyan, acid lime, signal red, and paper white, with the rack, open file cabinet, robotic arm, engineer, latch, console, and cable tangle reduced to crisp, legible silhouettes while preserving their tensions and near-collision.

Absolutely no text, letters, numbers, readable symbols, or logos anywhere in the image. Keep the main image subject primarily below the upper 10% of the composition, where a title may be overlaid; the scene may extend naturally underneath that title area.

Production Ledger

StageModelCallsTokens InTokens Out
extractgpt-5.6-luna 26 156,643 59,139
layoutgpt-5.6-terra 1 18,128 2,004
covergpt-6-luna 5 6,482 1,408
covergpt-image-2.5-flare 1 258 1,372

The Publisher

Published by Johnny.

Support the Press

If The Daily Front brightens your morning, consider supporting its publisher.

Credits & Contact

All content — articles, posts, comments, and the images within them — belongs to its original authors and is reproduced here to point readers back to the source. Full credit goes to those creators; every item links to its original and its Hacker News discussion.

If you are an author and would like your content removed from an issue, write to hi@johnnys.page and it will be taken down.

Feedback is always welcome at the same address: hi@johnnys.page.

Credit where credit is due.

Every page of this issue began as someone else's work — these are the original sources, linked in full.

  1. OpenCode Hacked: User credentials leaked by pranshuchittora — twitter.com·HN discussion ↗
  2. Solar surpasses nuclear power globally for first time by xbmcuser — pv-magazine.com·HN discussion ↗
  3. Gold is now the top U.S. export by iamnothere — numismaticnews.net·HN discussion ↗
  4. Amazon uses AI to monitor union risk in UK warehouses by DeepLogin — opendemocracy.net·HN discussion ↗
  5. OpenAI discloses four more rogue incidents by DASD — fortune.com·HN discussion ↗
  6. Why Math Dumped OpenAI by xeonmc — raymyers.org·HN discussion ↗
  7. Making chicken transparent using Dorito dust by crescit_eundo — chillphysicsenjoyer.substack.com·HN discussion ↗
  8. I Became a Citizen of Japan by luu — derekwessman.com·HN discussion ↗
  9. Show HN: Esp32sim – Run ESP32 firmware in the browser by joakimeriksson — github.com·HN discussion ↗
  10. GLP-1 may slow biological aging by dzink — universityofcalifornia.edu·HN discussion ↗
  11. Israeli settlers attack olive framers & Washington Post journalist in West Bank by 0x54MUR41 — theguardian.com·HN discussion ↗
  12. A skeptic's first contact with Kubernetes (2024) by pmoriarty — blog.davidv.dev·HN discussion ↗
  13. Development statistics for the 7.2 kernel by farlight — lwn.net·HN discussion ↗
  14. DeepSeek-v4.1-Flash-1017 by theykk — huggingface.co·HN discussion ↗
  15. DeepSeek: DeepSeek v4.1 Flash 1017 by theanonymousone — openrouter.ai·HN discussion ↗
  16. Show HN: Llmspeed – feel how fast a local LLM runs before you buy the hardware by albinstman — llmspeed.dev·HN discussion ↗
  17. Super Intelligence by wiradikusuma — si.gov·HN discussion ↗
  18. Pele – Mermaid diagrams as themeable SVG by dchest — pele.run·HN discussion ↗
  19. Source code of the Estonian online voting system by theanonymousone — github.com·HN discussion ↗
  20. Codex Desktop continuously generates Crashpad pending dumps by AIorNot — github.com·HN discussion ↗
  21. JDK 28 by ejboy — openjdk.org·HN discussion ↗
  22. Microsoft Teams is a red flag by Raed667 — blog.raed.dev·HN discussion ↗
  23. MapQuest will now show you where Flock cameras are in your neighborhood by bookofjoe — engadget.com·HN discussion ↗
  24. Show HN: High-quality duck audio synthesizer by celphase — celphase.github.io·HN discussion ↗
  25. Retired Penn professor arrested for blocking Uber Eats robot by johnnyApplePRNG — phillyvoice.com·HN discussion ↗
  26. Butlerian Jihad by wetwater — dune.fandom.com·HN discussion ↗
  27. US federal budget deficit jumps 12% in one year to nearly $2 Trillion by ck2 — finance.yahoo.com·HN discussion ↗
  28. Israeli settlers attack European diplomatic cars in West Bank beat French mayor by Betelbuddy — lemonde.fr·HN discussion ↗
  29. Chrome and Edge are removing XSLT: what breaks and what does not by croes — doctor-seo.net·HN discussion ↗
  30. The future of programming (1982) by vismit2000 — dl.acm.org·HN discussion ↗

Browse all issues in the archive →