Cover illustration

TheDaily Front

Issue No. 8 Friday, July 17 2026 #8 — FRIDAY, JULY 17, 2026
Cloud ledgers, tired humans, Roman concrete, and one very expensive imaginary month.
Friday, July 17, 2026 The Daily Front No. 8 — Contents
30stories
7,879points
4,362comments
255kllm tokens
Assembled with 34 model calls — 168,792 tokens read, 85,972 written.

Highlights

AWS: Inaccurate Estimated Billing Data – $1.7 billion

A phantom AWS bill for billions sent the front page into gallows-humor panic and a serious debate over cloud trust.

Kaiser nurses say AI, workplace surveillance are making their jobs, care worse

Kaiser nurses describe AI monitoring and call-center metrics colliding with the slower human work of patient care.

The state of open source AI

Mozilla’s survey of open source AI asks who controls the models, the data, and the meter.

First atmosphere found on Earth-like planet in habitable zone of distant star

Astronomers report the first atmosphere detected around an Earth-like planet in a habitable zone.

The Zilog Z80 has turned 50

The Z80 turns 50, and the commentariat remembers the chip that taught a generation to peer beneath the BASIC prompt.

From the Editor

The presses rumbled today with a familiar modern music: clouds miscounting fortunes, machines judging nurses, and engineers arguing over which machines may be trusted. Yet amid the alarms came the old consolations—new worlds in the heavens, old chips still loved, and a few stubborn tinkerers building wonders for the sheer pleasure of it.

  1. AWS: Inaccurate Estimated Billing Data – $1.7 billion3
  2. Kaiser nurses say AI, workplace surveillance are making their jobs, care worse4
  3. The state of open source AI5
  4. Kimi K3, and what we can still learn from the pelican benchmark6
  5. The human-in-the-loop is tired7
  6. Three ways people respond to a problem (other than solving it)8
  7. AI Meets Cryptography 2: What AI Found in OpenVM's ZkVM9
  8. Pebble Mega Update – July 202610
  9. Camera Chase Vehicle11
  10. How Has Roman Concrete Lasted for Millennia? 1,900-Year-Old Latrine Offers Clues12
  11. Frank Lloyd Wright’s first home13
  12. More Bounce to the Ounce14
  13. Learning a few things about running SQLite15
  14. A Road to Lisp: Which Lisp16
  15. The Zilog Z80 has turned 5017
  16. MoonBASIC: A modern BASIC for building 2D and 3D games18
  17. Old Icons19
  18. GrapheneOS recommended for domestic abuse victims20
  19. First atmosphere found on Earth-like planet in habitable zone of distant star21
  20. EEG shows brain can simultaneous encode two speech streams21
  21. M 3.9 Experimental Explosion – 147 Km ENE of Ponce Inlet, Florida21
  22. Apple targets dozens of OpenAI employees with legal letters22
  23. Evidence of inconsistencies in evaluation process and selection of winners22
  24. FAA lets Boeing sign off on 737 MAX, 787 airworthiness certificates again22
  25. An Engineer's Guide to USB Typе-С (2024)23
  26. Solod: Go can be a better C23
  27. Show HN: Watch bots interact with an SSH honeypot in real time23
  28. Thanks HN for 15 years of support and helping me find my life's work24
  29. Show HN: A zoomable timeline of 4M Wikipedia events25
  30. Workspaces – Explore the workspaces of modern creators25
The Daily Front Page 2 of 26
Friday, July 17, 2026 The Daily Front No. 8 — The Billion-Dollar Bill
discussion

AWS: Inaccurate Estimated Billing Data – $1.7 billion

by nprateem·▲ 1,133 points·669 comments·news.ycombinator.com ↗
I've got an estimated bill for $1.7 BILLION over this month.

URL already posted: https://health.aws.amazon.com/health/status

I've got an estimated bill for $1.7 BILLION over this month. Normal usage is < $5.

Obvs have created an urgent AWS support ticket. Anyone else seeing something like this?

Update: Reddit link: https://www.reddit.com/r/aws/comments/1uyuaw7/help_my_bill_s...

The Daily Front Page 3 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Bedside Algorithms
article

Kaiser nurses say AI, workplace surveillance are making their jobs, care worse

by gnabgib·▲ 453 points·295 comments·localnewsmatters.org ↗
their duty of care for patients is being increasingly threatened by workplace surveillance

Kaiser Permanente advice nurse Raquel Alvarez Sanchez works from her home office in Santa Rosa on April 6, 2026. Kaiser Permanente nurses have raised concerns about the growing use of AI to monitor their work ahead of upcoming contract negotiations. (Chad Surmick for CalMatters)

KAISER PERMANENTE NURSES who answer advice and triage calls say their duty of care for patients is being increasingly threatened by workplace surveillance.

Seven current and former nurses told CalMatters that those who spend more than 15 minutes on a call with a patient routinely face criticism from Kaiser management or get called into performance evaluation meetings. Call time, they said, factors into monthly performance scores they receive.

In addition to tracking call length, they said Kaiser uses software that tries to predict on a daily basis whether they’re being unproductive or failing to answer calls quickly. Artificial intelligence systems have also been used to rate their empathy and tone of voice.

Their comments come as the California Nurses Association begins negotiating a new contract with Kaiser this month with AI a likely issue. Kaiser nurses went on strike against AI for one day in March and picketed against AI last fall. The CNA is bargaining for 25,000 nurses, including 1,000 in call centers. 

At the same time, California lawmakers are considering several bills regulating AI in the workplace, including one that would protect from retaliation doctors and nurses who override automated care recommendations.

Kaiser defended its use of AI, saying it deploys the technology with patient safety in mind and does not use “average handle time” to assess performance.

Kaiser Permanente is the largest private employer in California, providing healthcare services to more than 9 million people in the state and to 3 million other Americans. That means the company’s use of artificial intelligence could set important precedents for managing workers with AI. It could also have a big impact on patient care, providing an early example of how the healthcare sector balances cost-cutting automation with human presence or touch.

Raquel Alvarez Sanchez, a Kaiser Permanente advice nurse in Vallejo since 2010, said she was on a call with a patient who was suicidal last year that took more than an hour because she had to wait for police to arrive before hanging up. She tried to make the man feel cared for, even though she was cognizant that staying on the call that long would throw off her average call time for weeks and could lead to questions from management. Sanchez, a union steward, said she’s accompanied colleagues to performance evaluation meetings, where they were found to have done everything right on a call — except staying on the line for more than 15 minutes. She said she hasn’t seen nurses get fired for doing that, but she fears that continued pressure can lead nurses to quit or retire early.

“I think at some point all of the nurses have been talked to about their average handle time,” she said. “The only thing I can think of is they’re doing it for profit.”

Another nurse who spoke with CalMatters on condition of anonymity due to fear of retribution described how that surveillance affected a call with a patient last year. Initially she thought her patient, an elderly woman who just received a terminal cancer diagnosis, was suicidal, but quickly came to understand that she was in shock and really needed somebody to talk to.

The nurse wanted to take time to show compassion or comfort to the woman, who acts as a caretaker for her daughter, but she stopped herself out of fear it would hurt her monthly performance score and lead to a reprimand from her manager. She became a nurse to provide people with compassionate care, but “I had to ask myself: Am I going to get disciplined for going off script or saying more than what is necessary?”

A person wearing a red shirt and a headset sits in front of a desk and types into a keyboard, in a dimly lit room with a window overlooking a residential street.

Kaiser Permanente advice nurse Raquel Alvarez Sanchez works from her home office in Santa Rosa on April 6, 2026. Kaiser Permanente nurses have raised concerns about the growing use of AI to monitor their work ahead of upcoming contract negotiations. (Chad Surmick for CalMatters)

Kaiser Permanente says its performance evaluations help improve patient outcomes. A company spokesperson said, “Kaiser Permanente does not use Average Handle Time to assess agent performance or enforce call time metrics. Any tools used in contact center settings support our quality assurance efforts and have human review and oversight.” In a statement provided to CalMatters, spokesperson Vincent Staupe added that Kaiser uses AI responsibly, with human oversight, and by “prioritizing patient safety, privacy, and equity,” but he said, “As a large organization, we do not share specific information about internal technology systems for security and operational reasons.”

Is technology putting patients at risk?

It’s not clear how patient care is affected by algorithmic management, nor is the impact of limiting the length of triage and advice calls on patients. Kaiser call center nurses can’t say for certain whether the pressures they face results in adverse outcomes for patients because their contact with patients ends after they hang up the phone. A 2024 public records request by CalMatters to the California Department of Managed Health Care found no complaints by patients against Kaiser related to call times. But nurses insist the risk to patient safety and quality of care is real. 

Consumer Watchdog patient advocate Michele Ramos said many Kaiser patients begin their care on the advice line. They later complain to her, mostly about things that happen in Kaiser facilities, but “I can see now where a lot of the problems” start, given the call constraints nurses are under.

“Kaiser’s been known through the years to manage dollars over managing care, … which is only going to fail patients.”
Michele Ramos, Consumer Watchdog patient advocate

Ramos said the time pressures may fit a broader pattern at Kaiser of putting costs over quality. The health giant was hit with a record fine, $50 million, as part of a settlement over findings from the California Department of Managed Health Care that it delayed behavioral health appointments beyond statutory limits and too often moved patients into group rather than individual therapy. Kaiser also settled with the U.S. Department of Labor after investigations into its substance use and mental health services. Kaiser faced criticism in 2002 for paying bonuses to call center workers who aren’t nurses for keeping calls short, though call center nurses who spoke with CalMatters said they encountered no such practices today.

“Kaiser’s been known through the years to manage dollars over managing care, and I think this would be a contributor to that, which is only going to fail patients,” Ramos added.

Nurses said they are pressured to stay under 15 minutes even for the sorts of calls that often take more time, like diagnosing a patient with multiple symptoms, chronic illnesses, new parents in need of advice and assurance, people who desire extended health education, or people who are overwhelmed after receiving life-altering news who could use some compassion. Nurses say calls that involve interpreters often take 30 minutes or more. About four in 10 Californians speak a language other than English and half of them do not speak English well, according to a state environmental health agency.

“The amount of time that Kaiser is giving us to complete a call is sometimes not safe,” said one nurse, who asked to remain anonymous due to fear of retaliation.

“People can get hurt,” said Charlotte Capulong, who has worked in nurse call centers for 22 years and helped organize Kaiser nurses against the AI tone-of-voice tool. Capulong said nurses felt harassed by managers in meetings she attended as a union rep, even if they successfully carried out all other duties of their jobs except completing calls within 15 minutes.

“You aren’t calling Comcast. We’re dealing with life here,” she said.

The Kaiser Permanente logo with the location address is displayed on a brick building. Leaves from a nearby tree can be seen in the blurred foreground.

Kaiser Permanente Sacramento Medical Center in Sacramento on Monday, Aug. 15, 2022. More than 2,000 mental health physicians went on strike throughout Northern California over staffing issues leading to patients waiting longer to access help. (Rahul Lal/CalMatters)

Nurses are instructed to stick to a script on phone calls and give no more than two to three pieces of advice, Capulong and other nurses said, which means they may sometimes need to decide whether to withhold advice or face a performance evaluation hearing.

The nurses say artificial intelligence could make the surveillance nurses encounter on the job worse.

In summer 2024, Kaiser began testing an AI tool that attempts to assess empathy and tone in the voices of nurses and patients, according to nurses who spoke with CalMatters. In response, nurses circulated and signed a petition in favor of the right to patient privacy, more transparency,  and the right to exercise their professional judgement and encouraged management to involve nurse’s input and feedback. The signature campaign used the same tag line that nurses used at protests outside San Francisco hospitals earlier that year: “Trust nurses, not AI. The AI tests ended in November 2024, but union representatives were told that managers may bring the program back in the future. 

Nurses reported feeling harassed by existing surveillance, “and that was intensified when they said we’re going to use AI to evaluate our calls and grade us,” said Sanchez.

Another nurse speaking on condition of anonymity said “AI did not understand our job and would grade us wrong all the time.”

A Kaiser spokesperson declined to respond to questions about the AI tool or answer questions about the use of AI and other automated systems in the company’s call centers and healthcare facilities, including for evaluating nurse performance or whether patients were informed about the use of AI to evaluate their empathy and tone.

Nurses also said they get little time between calls even if that call involves speaking with a patient who is suicidal, experiencing a mental health episode, or near death. In years past, nurses got around 10 minutes to finish writing notes in a patient’s chart or collect themselves after a particularly tough call. Today they say they typically get 30 seconds or less when lines are busy, although more at slow times, like late at night, or if they get a manager’s permission after a particularly challenging call. The overall pace they say, can lead to mistakes like missing important cues into a patient’s wellbeing.

CNA reps declined to talk about specific provisions they intend to seek related to AI ahead of their talks with Kaiser this summer.

How surveillance and AI shape nursing

Critics say excessive workplace monitoring can lead to lower morale as employees feel less trusted and autonomous, relegated to being no more than algorithm monitors. UC Berkeley Labor Center Technology and Work Program director Annette Bernhardt has warned that algorithmic management can turn people into fleshy robots, echoing complaints from an Amazon factory worker who CalMatters interviewed last year. A 2023 academic survey of call centers in four developed countries found that using AI for management or monitoring left workers with less time between calls and more likely to feel emotionally drained by their work. Nearly half of respondents said that AI tools made their jobs more stressful. A prior study by the same researchers, Virginia Dolleghast of Cornell University and Sean O’Brady of McMaster University found that performance monitoring leads to higher rates of emotional exhaustion.

Dolleghast, who has studied the impact of surveillance technology on call center workers for more than a decade, said what Kaiser call center nurses are experiencing is part of a broader trend: Across different industries, persistent surveillance is increasing stress levels for workers who are resolving complex, emotionally-charged issues. 

“Stress and burnout can lead to more mistakes across a range of areas, and in the healthcare setting that is much higher risk because you’re dealing with people’s lives and their health,” she said.

The converse can be true: Workers who are given more discretion to decide the pace and timing of their work experience higher levels of job satisfaction and less absenteeism.

A wide view inside a 911 dispatch center with rows of computer stations and overhead screens displaying call and dispatch information. In the foreground, two dispatchers wearing headsets sit at adjacent monitors, focused on their screens. Color-coded alert lights rise from several desks, and other staff members work in the large, softly lit room.

The 9-1-1 call center at the San Francisco Department of Emergency Management in San Francisco, on Aug. 2, 2019. (Eric Risberg/AP Photo)

Nurses nationwide are more frequently encountering artificial intelligence and similar software systems in the workplace. Half of more than 2,000 nurses who responded to a 2024 survey by the National Nurses United union said their employer uses algorithmic systems to analyze health records. Such systems can do things like determine how fragile a patient is or predict how many hours of care they will need. Two-thirds of the surveyed nurses said their own assessments had at some point disagreed with a computer-generated prediction. Six out of 10 respondents said they don’t trust their employer to prioritize patient safety when using AI.

Pa Vue has worked as a nurse in call centers for the better part of the past decade. She said she and other Kaiser nurses routinely have conversations with managers about call efficiency and receive evaluation scores once a month. She recalls having a score reduced for repeating advice to a patient that she worried had unusual symptoms and possible heart issues.

As a union representative in some performance meetings, Vue has seen managers raise efficiency questions about calls they deem too long. She’s also seen nurses receive lower performance scores if they go against software recommendations based on their professional opinion or make an appointment for a patient without consulting a doctor.

She believes that efficiency aims accelerated by technology can hinder a nurse’s ability to focus and reduce the quality of care that patients pay for.

“I’m not against the use of AI as long as it’s beneficial to the patient but in this particular use [empathy and tone monitoring] it’s to increase productivity and improve efficiency and cut costs. Kaiser is forgetting we aren’t just a call center for customer support, we’re nurses, and we’re there to take care of patients,” she said.

As AI improves and businesses push workers to use it, unions are, in turn, increasingly demanding that employers address issues raised by AI when bargaining for new contracts. Surveillance technology has become a common way for managers to collect data about workers in a number of industries, used for everything from improving safety to hunting for ways to increase profit gains or train AI to do a job.

At Kaiser, AI is a key issue not only among nurses but also for mental health workers, 2,400 of whom are in contract negotiations in Northern California with Kaiser Permanente. Kaiser therapists have said they are concerned about use of therapy session transcripts to train AI models and about the health-care giant using AI to take their jobs. National Union of Healthcare Workers spokesperson Matt Artz told CalMatters contract negotiations are ongoing.

How Kaiser uses AI

Kaiser Permanente is exploring or using AI in many parts of the healthcare experience far beyond nurse call centers. Kaiser uses AI to identify patients in hospitals at risk of adverse events by evaluating data on their electronic health records. An AI system called Preventus is used to determine when to discharge patients. Doctors and therapists use Abridge to record interactions and translate speech to text during in-person visits with patients instead of taking notes. Remote monitoring with AI for patients that need extra care has been tested at Kaiser Permanente facilities in the Bay Area, according to nurses who encountered the technology in the course of doing their jobs.

National Nurses United and CNA President Cathy Kennedy sees the use of AI to detect nurse empathy as part of a long series of steps by Kaiser to limit their autonomy and make them more efficient. She believes AI threatens to automate and fragment the work that nurses do, and companies developing and deploying AI systems should establish that those systems are effective and equitable before deploying them.

A person dressed head to toe in blue scrubs looks towards a Kaiser Permanente as they walk across an intersection.

Kaiser Permanente in Oakland on Aug. 2, 2022. (Martin do Nascimento/CalMatters)

Notification of new tech deployments is part of the nurse union’s contract with Kaiser but sometimes nurses don’t receive notification, CNA says. So union leaders are attempting to track the number of AI models in use at Kaiser Permanente, advising its members to inform them when they encounter new tech. This paves the way for CNA to push back as it did with the empathy and tone AI last summer or as it did when it stopped a pilot program that would have replaced nurses that sit at the bedside of confused patients with cameras.

Debru Carthan, a Kaiser radiologist, is on the front line of worker-management fights over AI at the company. A member of Service Employees International Union, she is also part of the Coalition of Kaiser Permanente Unions, where she sits on a committee to discuss use of AI and emerging technology at Kaiser. The coalition also has a “see something, say something,” campaign for frontline workers to report when they notice AI deployments; the coalition says that too often management quietly implements AI into workflows without notice or worker input. She worries that the AI tone detector used on advice nurses could discriminate against nurses from different cultures and has come to believe that the use of AI in healthcare generally has more to do with money and corporate greed than patient care.

California lawmakers have responded to worker AI concerns both inside and outside the healthcare sector. They tried and failed last year to address how AI impacts workers like call center nurses. Assembly Bill 1018 and Senate Bill 7, two bills endorsed by the CNA, would have required employers to inform workers before using automated systems on the job to do things like promote or discipline workers or evaluate job performance, but Gov. Gavin Newsom vetoed SB 7, and, facing strong opposition from companies including Kaiser Permanente, AB 1018 failed to pass for the third consecutive year

Earlier this year, lawmakers reintroduced a new version of Senate Bill 7, now called Senate Bill 947. Another bill would prohibit employers using AI to predict the emotional state of their employees. Yet another bill would protect doctors and nurses from retaliation if they override recommendations generated by an automated system and require healthcare providers to supply employees with an inventory of automated systems once a year. Kaiser declined to share a comprehensive list of AI systems in use when asked by CalMatters.

Altogether CNA and the affiliated California Labor Federation support roughly half a dozen bills to regulate use of AI in the workplace. Calling AI a central issue in the next presidential election, members of the California Labor Federation and labor leaders from Democratic primary states held a press conference in Sacramento earlier this year to say that if Newsom wants to become president then he needs to pass laws protecting workers from AI. “It’s an ongoing fight, and it’s a fight well worth having,” Kennedy said. “Whenever there are other unions in discussion about artificial intelligence we are in solidarity with them.”

The nurse that withheld compassion to a terminal cancer patient she thought was suicidal said she believes monitoring and scoring systems turn nurses into automatons that check boxes.

“I used to use humor as a way to help patients heal, and I don’t feel comfortable doing that here because I know the calls are being recorded. You can always tell when a patient appreciates the humor or your personal compassion, but I don’t feel like call centers have tolerance for that because that’s not part of the script,” she said. “That really takes away from the whole point of being a nurse and what patients come to know from nurses.”

This story was reported with contributions from Lam Thuy Vo and Ana Ibarra.

This story originally appeared in CalMatters.

The Daily Front Page 4 of 26
Friday, July 17, 2026 The Daily Front No. 8 — The Open Model Question
article

The state of open source AI

by rellem·▲ 412 points·298 comments·stateofopensource.ai ↗
under a license that keeps the data with its people

A Letter From Our CTO, Raffi Krikorian “

In New Zealand's far north, a Māori broadcaster trains speech models for te reo — a language too small for any market — under a license that keeps the data with its people. PwC, one of the largest accounting firms in the world, fine-tuned an open model on the language of finance and runs it today for hundreds of clients, on its own hardware, with no per-token meter running. Researchers in Lausanne built an open medical model with the Red Cross, tuned to its humanitarian guidelines, and are preparing clinical trials at home and in Tanzania. In East Africa, farmers diagnose cassava disease with a model that runs on the phone itself, offline, in fields the cloud has never reached. In Switzerland, a public consortium trained a national model on public supercomputers and released all of it: weights, data, training code. None of them asked permission, and none of them could have rented this. They own it — that is the whole idea.

We have been here before. Mozilla exists because one company tried to own the front door to the web, and an open community rose up to make sure it never could. Twenty-five years later, someone is running the same play. We bet on open the first time. Open won. Together, we can do it again.

Our belief is simple: the path forward is competition and interoperability. We believe in a world of many models, standard ways to plug them together, and the freedom to walk away from any vendor at any time. Open has a record here. It grew the pie and let more people own a slice of it.

Read what follows as a map: where open AI is winning — some numbers surprised even us — and where it is exposed. A case that hides its weak points is an advertisement.”

Open weights closed the capability gap while the price of intelligence collapsed.

0%

Capability gap to the top closed models — at parity on coding, behind on reasoning

Fall in GPT-4-class inference cost in 36 months: $20 → $0.40 per 1M tokens

01The current state of open-source AI

Parity reached. The contest is one layer up.

Open weights are no longer a compromise. They are where the work happens: a majority of production tokens now route through them, and the five highest-volume models on OpenRouter are all open. Closed models still lead at the frontier, on reasoning and multimodality, but the frontier is not what most workloads need. Commodity inputs do not hold pricing power. Value moves up, to the agentic harness.

The capability gap: 8.04% → 0.5% → 3.3%

Open-vs-closed gap on Chatbot Arena over 24 months. By August 2024, the gap had collapsed to 0.5%, and in February 2025 DeepSeek-R1 briefly matched the top US model. By March 2026 it had reopened to 3.3% as closed reasoning models pulled ahead. But 3.3% is an average over a jagged frontier: open is at or near parity on coding, instruction-following and general knowledge, while the gap concentrates in reasoning, long-context retrieval and agentic tasks. The question is no longer whether open models are good enough. It's what you need for your workload. Hover the points.

Source: Chatbot Arena, Jan 2024 – Mar 2026.

Inference fell 50× in 36 months

GPT-4-equivalent price per 1M tokens — faster than dotcom-era bandwidth or PC-compute price curves. Log scale.

Sources: Stanford HAI AI Index 2025 (280× GPT-3.5-class drop over 18 months); Epoch AI (9–900× annual decay); Nov 2025 MIT study (5–10×/yr at the frontier, hardware-adjusted).

Open weights win the tokens

The share of tokens routed on OpenRouter through open-weight models grew from a negligible base to a third by late 2025 to a majority by mid-2026.

Source: OpenRouter 100T-token study (Nov 2024–Nov 2025) and live leaderboard; intermediate points interpolated. By request count, closed US providers still lead — the open lead is a token-volume lead, concentrated in coding and agentic workloads.

OpenRouter live leaderboard — trailing month, tokens routed

The five highest-volume models are all open weights. Anthropic's closed Claude models are the next US-built entrants.

Open weightsClosed

By mid-2026 the top nine models route roughly 18T weekly tokens for Chinese-built models against ~5.5T for US-built ones — more than 3:1 (FT analysis). Where developers route by cost, they route to open weights.

Open ships easy. Open deploys hard.

Data from the Mozilla / SlashData 2026 developer survey. Open models lead in adoption: 79% of developers adding AI functionality use them, against 71% for closed, and the two are largely complementary, with half of developers using both. But production is where teams stall: only 51% of open-model teams reach production versus 63% for closed. The gap is operational tooling and trust, not model capability.

Open models lead in adoption, and mostly coexist with closed

Share of developers adding AI functionality to their applications who currently use each model type, and how the two overlap.

Open models

79%

Closed models

71%

How they combine

29%OS only

50%Both

21%CS only

Source: Mozilla / SlashData 2026 developer survey. Open and closed aren't substitutes for most teams: 50% run both, 29% open only, 21% closed only.

Where open adoption peaks, and where closed still edges it

Open-model adoption by region. Greater China and East Asia lead at 89%; South America and Western Europe are the only two regions where closed adoption exceeds open.

Same survey, by developer region. In South America and Western Europe, and only there, closed-model adoption runs ahead of open.

Production rate by company size

If the gap were about resources, scale would close it, and it doesn't. Closed climbs 54% → 73% with scale. Open barely moves: 53% → 57%.

Closed modelsOpen models

Enterprises can buy their way through closed deployment. Open deployment waits on tooling nobody has finished. Source: Mozilla / SlashData 2026 developer survey.

Why teams churn: challenges with open models

Δ = churned − still using, in percentage points. The biggest gaps (performance, integration, maintenance) are operational, not capability. Hover the bars.

Still using openChurned away

Mozilla survey, n=1,410. “What are the main challenges you face when working with open or open-source AI models?”

The same challenges, everywhere: what blocks open by region

Share of current and churned open-model developers naming each challenge, by region. Warmer cells mean more developers blocked. The top rows are operational in every region: infrastructure cost, security and compliance, maintenance, deployment complexity. South Asia leans hardest on security and support; only North America and Greater China have more than 15% reporting no major challenges.

ChallengeW. Europe & IsraelN. AmericaGreater ChinaSouth AsiaEast Asia ex GCS. AmericaE. Europe & CISOceaniaAll High infrastructure or compute costs25%26%29%28%28%28%29%18%27%Security, privacy, or compliance concerns20%27%18%39%29%28%25%22%26%Ongoing maintenance and updates27%26%18%26%20%31%21%25%24%Complexity of deployment, hosting, or scaling27%24%19%24%11%30%26%25%23%Lack of specialised support17%16%21%31%24%23%23%32%22%Difficulty evaluating or comparing models14%17%14%23%16%26%25%18%18%Difficulty fine-tuning or customising22%18%18%20%11%22%18%12%18%Difficulty integrating into existing systems19%21%14%20%7%26%19%20%18%Insufficient documentation or learning resources18%15%15%17%15%20%24%15%17%Model performance is not good enough18%15%13%22%16%17%19%8%17%No major challenges9%21%16%5%14%4%8%12%12% Weighted sample size28627720619216414798391411

Source: Mozilla / SlashData 2026 developer survey (MZCS1). n=1,410 current or churned open-model developers; the Oceania column (n=39) and Eastern Europe & CIS (n=98) fall below reliable thresholds.


02The open-source AI stack

The open stack scores high on capability, low on operations.

Nine layers and 48 components of the stack scored across 10 criteria (1–5). Click a layer to open its components: each carries its own criterion scores, maturity grade, open-vs-closed parity verdict, and surfaces some of its most-starred open-source projects.

Hover any cell for detail.

StrongViable, but fragmentedEarly stage

Strong (≥4.0) 3.5–3.9 3.0–3.4 2.5–2.9 Weak (<2.5) the operational gap = standardization + enterprise readiness

Cells are scores per maturity criterion (1–5), ordered strongest to weakest left to right; layer rows are the means of their components. The two coldest columns, standardization and enterprise readiness, repeat down every layer and every component: that repeating cold edge is the operational gap. Source: Mozilla stack map, June 2026 (48 components, 1,361 projects).


03Who's betting on it

Open source is a business model.

Open-weight AI is a commercial market at multi-hundred-billion-dollar scale, built by funded companies and run in production by global enterprises. Databricks crossed a $5.4B run-rate; Mistral scaled 20× to ~$400M ARR in twelve months; DeepSeek reached ~$220M ARR and recently raised $7.4B at a valuation over $50B. Five revenue models are proven at scale: hosted inference, enterprise platforms, on-prem licensing, fine-tuning services, and harness tooling.

The venture-funded open-source ecosystem: total disclosed funding, USD M

Bars grow as you scroll. Color by region of the company.

North AmericaChinaEurope & rest of world

Selected companies; Zhipu AI and MiniMax went public (HK IPO 2026) with undisclosed totals. Corporate strategics (Nvidia, Salesforce, AMD, Google, IBM, ASML, Tencent, CATL, Schwarz Group) back the same ecosystem across model, inference, and tooling layers.

Financial maturity of the open ecosystem

Funding, valuation and revenue traction for the companies carrying the open stack. The ecosystem has moved from grants to venture scale to public markets.

CompanyHQLayerDisclosed fundingValuationRevenue signalLeading investorsStage DatabricksUSAEnterprise platform——$5.4B run-rate—Pre-IPO DeepSeekChinaFrontier open weights$7.4B$50B+$220M ARRLiang Wenfeng; Tencent; CATL; China National AI FundPrivate Mistral AIFranceOpen weights + platform$3.05B$14B (talks at €20B)~$400M ARR, 20× YoYASML; a16z; Lightspeed; NvidiaPrivate Moonshot AIChinaOpen weights (Kimi)$3.9B——Meituan/Long-Z; Alibaba; Tencent; HongShanPrivate Zhipu AIChinaOpen weights (GLM)UndisclosedPublic—Public (HK IPO 2026); prior Alibaba, TencentHK IPO 2026 MiniMaxChinaOpen weightsUndisclosedPublic—Public (HK IPO 2026)HK IPO 2026 CohereCanadaEnterprise / on-prem$1.7B—Command A+ open-sourced May 2026Radical Ventures; Nvidia; AMD; Schwarz GroupPrivate CerebrasUSACompute$2.1B——Fidelity; Atreides; G42; Tiger GlobalPrivate Reflection AIUSAOpen weights$2.13B——Nvidia; Disruptive; Sequoia; Lightspeed; DST GlobalPrivate Together AIUSAInference cloud$1.334B——Aramco Ventures; General Catalyst; Prosperity7; NvidiaPrivate Hugging FaceUSAHub$400M——Salesforce; Google; Nvidia; IBMPrivate LangChainUSAHarness tooling$260M—126k+ stars, 60% dev shareIVP; Sequoia; Benchmark; CapitalGPrivate

Five revenue models are proven at scale: hosted inference, enterprise platforms, on-prem licensing, fine-tuning services, and harness tooling. “—” = not publicly disclosed.

The metered model breaks at scale

Closed frontier models are sold by the token — and at production scale the meter becomes the problem.

A fifth of the usage, 4% of the revenue

On OpenRouter (May–Sep 2025), closed models held ~80% of usage and ~96% of revenue. Price drives it: at ~90% parity, closed costs ~6× more per call.

~$24.8B

in unrealized annual savings — the Nagle–Yue study for the Linux Foundation's estimate of the open-vs-closed price asymmetry, at ~6× the cost per call for comparable capability

Where developers route by cost, they route to open weights.


04Why it's happening everywhere

Open isn't a vendor choice. It's a sovereignty choice.

More than 70 national AI strategies are live. The strategic question has shifted from whether to have a national AI policy to which layer of the stack a country can own.

Click a marker or a country below.

The case for open is optionality

Optionality stopped being abstract in June 2026, and it stopped being a procurement question. Three days after Claude Fable 5 went on sale, a single government's export order forced Anthropic to cut access for every foreign national on earth. No other capital was consulted. None could have been. Selective compliance was impossible, so the models went dark for everyone at 5:21 p.m. on a Friday. Anyone who had built on that model inherited a shutdown they had no warning of and no part in. A provider can switch off a model. Nobody can switch off a copy already running on a machine you hold, and that holds whether the machine is a startup's server or a national supercomputer. For a company, weights on disk are a hedge. For a state, they are the difference between a policy and a permission.

The strategic case for open is the ability to leave, and the cloud era proved the cost of its absence:

$90–120kto move one petabyte out of AWS S3

**80%**of enterprises now repatriating workloads

$3.2M → <$1M37signals' cloud bill after leaving

**2.5×**what GEICO's cloud costs ran over plan

Closed model APIs reproduce the same trap: build on a proprietary endpoint and you inherit the vendor's pricing changes with no clean exit. Open weights are exit rights.

The largest source of open weights is China. By design.

Cumulative Hugging Face downloads, March 2026:

In February 2026 Qwen out-downloaded the next eight organizations combined. On OpenRouter, Chinese open-weight models rose from under 2% of tokens in late 2024 to more than 45% of weekly traffic by April 2026, and about 61% among the ten most-used models. DeepSeek reports 26,000+ enterprise accounts; 58% of new AI startups in 2025 included it in their stack, even as at least eight jurisdictions restricted the hosted service. The resolution is architectural: enterprises ban the hosted app and adopt the weights anyway, self-hosted or via Western endpoints.

This is intentional policy. The State Council's "AI Plus" Initiative (Aug 2025) and the national Five-Year Plan (Mar 2026) codify open-source proliferation as a core directive, and releasing public weights doubles as a macro hedge against semiconductor export controls, offloading global inference onto end users' local hardware. Across the Global South the draw is diversification away from US technology monopolies; elsewhere it is purely financial. Even Microsoft is exploring a secured, Azure-hosted DeepSeek V4 for its heaviest Copilot workload.

Marker size ≈ scale of committed public/strategic capital · Equirectangular projection

Source: Open Source AI jurisdictions dataset, July 2026. Marker size scales with committed public and strategic capital.


05The harness is the new frontier

The agentic harness is another user agent.

The browser was the user agent of the open web: code on the user's side, negotiating with servers on their behalf. That role is being recreated one layer up. Above the model now sits the agentic harness — the orchestration loop, tools, memory, sandboxes, and permission model. It is where production difficulty concentrates, and where the open-vs-closed, owner-vs-renter contest restarts.

The user · other agents · the worldhumans · systems · data · money

Governone plane over many harnesses

Stateful policywhat the session already did

Registry & lineagewhich agent did what

Budget & revocationcost caps · kill switch

Meta-harness · Omnigent · OPA · Agent governance toolkit

Surfacemeets user & money

InterfaceAG-UI · A2UI

Payment & meteringx402 · AP2 · UCP

Actiondo things, safely

Sandboxes & executionE2B · Daytona · Modal

Permission & identitythe write surface — the unsolved gap

Eval & observabilityLangfuse · Phoenix

Reachconnect & remember

Tools & contextMCP

Agent-to-agentA2A

MemoryMem0 · Letta · Zep

Controldrive the loop

Orchestration loopLangGraph · CrewAI · AutoGen · LlamaIndex — the reason-and-act cycle that turns a model into an agent

The model — the weightsopen or closed · swappable · commoditizing toward zero

The layer is already a product category: LangChain alone has 126,000+ GitHub stars and a 60% developer share; MCP reached 97M monthly SDK downloads and 10,000+ active servers in its first year, growing 4,750% in 16 months — and was donated to the Linux Foundation's Agentic AI Foundation in December 2025. Adoption outpaces governance: only ~21% of companies report mature agent governance.

The model is eating the harness, and that's the opening for open

Terminal-Bench 2.0 (May 2026) made the harness look like a free lunch anyone could capture: a third-party scaffold ran Anthropic's own weights to 79.8% while Claude Code managed 58.0% on the same model, a 21.8-point spread that put the harness ahead of the weights. Eight weeks later, Terminal-Bench 2.1 reversed it. The frontier labs read that result and pulled the harness in-house: on every model where both appear, the lab's own harness now wins, and the 21.8-point gap has compressed to roughly 3 at the top: the model eating its way up the stack, weights and scaffold shipped as one product.

May 2026 · Terminal-Bench 2.0

July 2026 · Terminal-Bench 2.1 · official board, verified top tier

That integration is a moat in formation, and the labs have every incentive to deepen it. A harness tuned tightly to one lab's weights becomes a fit rather than a neutral layer. It degrades on anyone else's model, so the tighter the tuning, the less swappable the weights underneath. Lock-in arrives as a side effect of optimization. The open models have no first-party harness to answer with, which is why none appear in the verified top tier of the official board at all.

But absence isn't inability: put every model on one neutral scaffold and the gap collapses

vals.ai's Terminus-2 run of Terminal-Bench 2.1: the same benchmark, one neutral harness for everyone. Capability bars in points; cost per task in the label.

On a fair harness the capability gap is a few points; the price gap is 5×. The strongest open model, GLM 5.2, lands a fraction behind Claude Opus 4.7 and about four points behind Opus 4.8 at roughly a fifth the cost. Integration buys the labs a second edge open deployments lack: a data flywheel where real usage through the lab's harness feeds straight back into the next model. That edge is real, and it cuts both ways: the usage exhaust trains whoever owns the harness, and the only question is whether that's the closed endpoint or your own stack. The labs have proven the harness is worth owning. The same move is open, a harness co-designed with open weights, and the window to keep it a layer is now, before the closed stacks finish welding model and scaffold into one rented product.

The write surface: the unsolved hole at the center of the harness

Reads

Reversible and low-consequence. Fetching a document, querying a database, listing a calendar. These can largely be permitted by default; a bad read costs little and can be repeated safely.

Writes

Side effects that are costly or irreversible. Sending a message, spending against a budget, modifying a record, executing a transaction. This is where confirmation, approval thresholds, cost caps and revocation must concentrate.

The unsolved permission problem is a write problem. The harness ecosystem now spans roughly a dozen frameworks, ten harnesses and three peer protocols, yet no portable model defines which writes an agent may perform unattended, which require human approval, and which are forbidden, across an MCP host, an A2A peer, a direct tool invocation and a framework boundary. The protocols hardened the front door and stopped there: MCP's 2025-11-25 specification moved authorization onto OAuth 2.1, and A2A v1.0 standardized signed Agent Cards, but both stop at authentication. Knowing who an agent is says nothing about what it may do.

The human backstop is failing too. CoSAI's MCP threat model lists consent fatigue, the pattern in which users approve the large majority of prompts, as a top-tier threat. Consent fatigue is itself a write-side failure, because the prompts that matter are the ones authorizing action.

Industry responses are bypassing the framework deadlock by pulling control up to the meta-harness layer. Instead of fragile prompt-based filters inside individual agents, emerging cross-harness architectures (like Databricks' open-sourced Omnigent) enforce stateful, contextual policies that track what a session has done and gate the next write accordingly: requiring human approval for a code push once an agent has pulled an unverified package, or enforcing cost caps that pause a session after a set spend. These controls govern the write surface from a layer above any single harness, which is where the durable permission model is most likely to form. It is the single highest-leverage gap in the layer.

Closed is not the same as secure

A closed API feels safe because of filtering, monitoring, and revocation. All three are functions of the serving layer. Keeping the weights secret does not provide any of them. The same controls live at the harness layer and apply to self-hosted open models. In 2025, authorization failures rated CVSS 9.3–9.4 hit Anthropic, Microsoft, ServiceNow and Salesforce, all closed systems. The NTIA studied whether the US government should restrict open weights and recommended that it monitor them instead. Security concerns are best addressed by investing in the harness. They do not require renting a closed model.

Where closed still leads

Closed systems still lead in four places. The first is the integrated harness. No open model appears in the verified top tier of the official Terminal-Bench 2.1 board, and even on a neutral scaffold the best open model trails Opus 4.8 by about four points. Behind that harness sits a data flywheel, since usage routed through a lab's own scaffold feeds back into its next model. The second is long-context fidelity at 1M tokens, where Gemini 3 holds 89% multi-needle retrieval against DeepSeek V4-Pro's 41%. The third is turnkey compliance, with SOC 2, HIPAA, and zero data retention available by default. The fourth is accountability, meaning a counterparty the customer can hold liable.

Compliance and accountability are contracting problems. The integrated harness is a tooling problem. Long-context fidelity is a model problem, and closing it is work only the open labs can do.


06Opportunities

Five bets. None requires beating the frontier.

They require owning the layers above it — the harness, the memory, the permission model — while those layers are still open.


07The watchlist

Signals that keep the layer open.

Capability & adoption

The 3.3% gap (at parity on coding, behind on reasoning and agentic), and open's OpenRouter token share, especially in agentic coding.

Reverses if: token share stalls while the reasoning gap widens.

The harness

The Terminal-Bench spread between lab-owned and independent scaffolds; MCP/A2A governance under the AAIF; the portable permission spec that still doesn't exist.

Reverses if: the lab-harness lead widens, or a closed platform sets the permission standard first.

Market structure

Open-lab economics (ARR, raises, the Zhipu/MiniMax IPOs) against metered-pricing breakpoints (~2027–28), with sovereign capacity as counterweight.

Reverses if: sovereign funding lapses or open-lab economics fail to scale.

Trust & safety

Tracked, not settled: misuse capability and how easily safety tuning strips from open weights; hard-friction zones, above all synthetic CSAM and NCII; whether NTIA's “monitor, don't restrict” holds.

Reverses if: a major misuse event, or a shift from monitoring to restriction.

There is a test you can run for the rest of this. Look at who is seated in the rooms where AI gets decided, and with what status. The day they seat the people who keep AI open, portable, and widely deployed on equal footing, the shift from renting to owning will have happened. The window is open now. It is closing slowly enough that we can pretend it isn't, and the lease is shorter than it looks. Build with us.

Citations

Section 1 · The current state of open-source AI

Section 2 · Who's betting on it

Section 3 · Why it's happening everywhere

Section 4 · The harness is the new frontier

Section 5 · Opportunities

The Daily Front Page 5 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Kimi and the Pelican
article

Kimi K3, and what we can still learn from the pelican benchmark

by droidjj·▲ 314 points·166 comments·simonwillison.net ↗
the first “open 3T-class model”

Kimi K3, and what we can still learn from the pelican benchmark

Chinese AI lab Moonshot AI announced Kimi K3 this morning, describing it as their “most capable model to date, with 2.8 trillion parameters”. It’s currently available via their website and API, but an open weight release is promised “by July 27, 2026”.

Moonshot are calling this the first “open 3T-class model” (I guess they’re rounding 2.8 trillion up to 3 trillion), taking the crown from DeepSeek’s 1.6T v4 Pro. Their self-reported benchmarks have K3 mostly beating Claude Opus 4.8 max and GPT-5.5 high, while losing out to Claude Fable 5 and GPT-5.6 Sol.

A few highlights from the Artificial Analysis report on the model:

  • “On our private long-horizon knowledge work evaluation, Kimi K3 reaches an overall Elo of 1547, +732 points from Kimi K2.6 and behind only Claude Fable 5.”
  • “Cost per task ($0.94) is similar to GPT-5.6 Sol ($1.04), ~1/2 the price of Opus 4.8 ($1.80) and higher than open weights peers”
  • “Kimi K3’s token usage on the Artificial Analysis Intelligence Index decreased significantly, using 21% fewer output tokens than K2.6.”

The model is also now the leading model on Arena.ai’s Frontend Code arena, surpassing even Claude Fable 5.

The new model is notable for the pricing: $3/million input tokens and $15/million output tokens, putting it at the same level as Anthropic’s Claude Sonnet series and making it the most expensive model released by a Chinese AI lab to date. This is a significant increase on their earlier models such as Kimi K2.6 at $0.95/$4. 2.8 trillion parameters is also more than twice the size of that 1T model.

But how does it pelican?

I used OpenRouter (to avoid signing up for a Moonshot API key) with the llm-openrouter plugin to generate an SVG of a pelican riding a bicycle:

llm -m openrouter/moonshotai/kimi-k3 'Generate an SVG of a pelican riding a bicycle'

Here’s the transcript. It looks like this:

See description below

That pelican took 95 input tokens and 16,658 output tokens (13,241 were reasoning tokens), for a total cost of 25 cents!

Since K3 accepts image input I ran it against that rendered SVG above (with my alt text prompt) and got back (for 0.6 cents):

Cartoon illustration of a white pelican wearing a red scarf, riding a red bicycle along a gray road with white dashed lines; the pelican has a large orange beak and webbed orange feet pedaling, with white motion lines behind it; the background shows a light blue sky with white clouds, a yellow sun, two small black birds in flight, and green grass with tiny white flowers in the foreground

What can we learn from the pelican?

My Generate an SVG of a pelican riding a bicycle test is 21 months old now. It was never a particularly great benchmark. It started out as a joke on how absurdly difficult it is to compare these models, but then for the first year it turned out to have a surprising correlation to how good the models actually were.

That connection has been mostly severed now. The GPT-5.6 and Claude Fable 5 pelicans are outclassed by GLM-5.2, and much as I love GLM I don’t think that’s a Fable-class model.

(I’m still not convinced that labs are training for the benchmark—if they were, I’d expect much better results. There’s a chance that Gemini has optimized for any combination of an animal on a vehicle though!)

The biggest limitation of the pelican is that it doesn’t touch at all on the thing that matters most for today’s model: agentic tool calling and the ability to operate tools reliably as conversations grow in length.

So don’t go using pelicans to compare models!

All of that said, I still get a decent amount of value out of running the benchmark myself.

Firstly, it’s a forcing function for actually trying the model. If I show you a pelican, that means I’ve managed to run a prompt through it. If the model has an official API I’ll use that, if it’s open weight (and small enough to fit a 128GB M5 MacBook Pro) I’ll try running it on my own machine, usually via llama.cpp or LM Studio or Ollama. I’ll frequently use OpenRouter since that usually provides a proxy to an official API without me needing a new API key.

Most of my pelicans are generated using my LLM CLI tool, which helps encourage me to ensure the latest models are supported by that (via one of its plugins).

More importantly though, even the act of a single prompt to “Generate an SVG of a pelican riding a bicycle” can reveal interesting model characteristics.

Consider the result for Kimi K3 today. Running those simple prompts helped emphasize several points about the model.

  1. It only has one reasoning effort right now, “max”—and it shows. The model consumed 13,241 reasoning tokens to output 3,417 tokens of response. This is expensive—the pelican cost 25 cents!
  2. How does the prompt “Generate an SVG of a pelican riding a bicycle” add up to 95 input tokens? OpenAI’s tokenizer counts 10, Anthropic’s counts 10 for Opus 4.6, 30 for Opus 4.7 and 25 for Sonnet 5/Fable 5. Prompting “hi” to Kimi K3 counted 86 tokens, suggesting there may be an 85 token hidden system prompt. It refused to leak it though.
  3. Vision works well: the alt text it generated is very good.

K3 currently only has one thinking effort level, but I’ve been deriving quite a bit of value recently from running the same pelican prompt through different effort levels to get a quick idea for what impact those have. Here’s my matrix for the GPT-5.6 model family, for example.

Really though the main things I gain from the pelican test are:

  1. It’s a “hello world” exercise for prompting a model
  2. A rough cost and reasoning estimate for a simple task
  3. Confirmation that the model can output valid SVG and has a basic idea of geometry and spatial awareness. This is a much bigger deal for the smaller models that run on my laptop.
  4. It’s still interesting to compare pelicans between releases in the same model family. K3’s pelican is a notable improvement from Kimi 2.5.
  5. It’s something I can share that demonstrates I’ve tried it. Plus a comment with a pelican in it is kind of a tradition on Hacker News at this point, any time I’m late I get comments asking where it is!
The Daily Front Page 6 of 26
Friday, July 17, 2026 The Daily Front No. 8 — The Tired Loop
article

The human-in-the-loop is tired

by haritha1313·▲ 302 points·197 comments·pydantic.dev ↗
Programming with LLMs is genuinely useful and genuinely destabilizing.

Yet another thought piece about LLMs. I know. Bear with me.

This is an attempt to put words around something I think most developers are experiencing right now but haven't had time to make sense of. Programming with LLMs is genuinely useful and genuinely destabilizing. These two things coexist. If we pretend the second one isn't happening, we will all burn out.

At Pydantic, we build tools that developers use to validate data, build AI agents, and observe what their systems are doing in production. We are, quite literally, in the business of making LLM-powered software more reliable. And we are also having a weird time.

This isn't a thinkpiece about whether AI will replace programmers. It's not a doomer essay and it's not a hype piece. It's an honest account of what it feels like to be a developer right now, from someone inside it, and some thoughts on what might actually help.

Hands in the fabric

When I was first learning to code in my early twenties, I remember having this distinct sensation that programming let me dip my hands into the fabric of the universe and shape it to my will. This was, of course, before I'd hit too many compile errors. But that feeling of touching some deep fundamental layer of abstraction, of being able to make things from nothing but logic, has always stuck with me.

I'm not a Computer Science graduate. I'm a designer and a programmer — formally trained in the first, self-taught in the second. I came to the formalisms of software engineering through painful experience rather than academic instruction. If anything, that made me take those principles more seriously once I understood them. When you've earned your opinions about architecture and code quality the hard way, they feel less like textbook rules and more like scar tissue.

That primal feeling of creation? It's the same promise that the low-code and no-code tools of the 2010s kept making but never quite delivered on. I'm old enough to remember building web pages in Dreamweaver, watching Adobe spruik zero-code design tools that generated absolute spaghetti under the hood. It was always almost there, just good enough to hint at a future that was just around the corner (if only you were smart enough to grasp it).

If you're cynical about the current wave of AI tools, I get it. We've been promised this before. But this time the gap between promise and reality has actually, finally, narrowed to something meaningful. And that's exactly what makes it so unsettling.

What "the code writes itself" actually feels like

Yes the code (sorta) writes itself, but the human reviewing, directing, and course-correcting feels worse, not better.

I recently had a conversation with my colleague Douwe, who maintains the Pydantic AI framework and has been one of the most thoughtful people I know about integrating LLMs into open source workflows. He described waking up to thirty PRs every morning, each one pulled overnight by someone's AI, and needing to make snap judgment calls on every single one. The temptation to delegate the review itself to an AI was enormous. But, as he put it: "at that point, what am I still doing here?".

The honest truth is that in the last few months, there have been days when I have spent close to two full days writing a plan for an LLM to execute: obsessively clarifying, specifying, re-specifying, only to have it still do something inexplicably stupid. Port a React hook into a Storybook story file. Read from the wrong plan. Invent components that don't exist. And these aren't errors of capability; they're errors of coherence. The models are smart enough to produce plausible code, but not always smart enough to maintain a coherent intent across a complex change.

This creates a peculiar new kind of fatigue, the fatigue of supervision: of holding the intent in your head while the machine generates volumes of mostly-correct output that still needs your eyes, your judgment, and your taste. Douwe put it well: he used to get a dopamine hit from collaborating with a real person on a cool feature in open source. Helping someone become better at their craft. Now, he said, "everything I write goes into some AI black hole. There's no person on the other side actually learning anything." That loss is real and it's worth naming.

The intensity trap

Simon Willison recently highlighted a Berkeley Haas study which describes how AI usage increases the intensity of work. The constant pull of "one more prompt at the end of the day, one more feature that could make this perfect." I felt that one in my bones. I was up until nearly 2am recently, prompting, because I was so close to getting a plan right. Or so I thought.

It's all a part of the plan

Marcelo, another Pydantic colleague, when asked about his Claude Code session freezing said: "just open 5 claude sessions. You'll never notice because you're busy giving feedback to the others." He was joking. I think. But it captures something true about the current moment. The parallelism is exhilarating and kind of feral. The number of things you can start has dramatically increased. The number of things you can thoughtfully finish hasn't changed at all, because that part still requires the one resource we can't parallelise: your brain.

Here's a term for what I think is happening: the human reward function problem. In machine learning, a reward function tells an agent what good looks like. Writing code by hand was never easy, but it was full of small rewards. Solving a problem in your head. Understanding a gnarly bit of logic. Watching the code compile. The feeling of control. LLM-assisted programming has automated much of the work that generated those dopamine hits and replaced it with the cognitive load of review and supervision. The satisfying part shrank. The exhausting part grew. And there are no new rewards to fill the gap.

If you're feeling like your work is simultaneously more productive and less satisfying, you're not broken. The feedback loop is broken. And I think we need to start treating that as an engineering problem in its own right, not a personal failure.

It's also, frankly, quite lonely. Programming with an LLM is an intensely solitary activity.

You and the machine, going back and forth, refining and prompting and reviewing. The natural moments where you'd turn to a colleague to ask a question, to rubber-duck a problem, to share the small victory of something finally clicking. Those moments get quietly replaced by another prompt. In a team without a strong existing culture of collaboration, this has a tendency to further separate people, to chill communication at precisely the moment when you most need the reassurance that other humans are finding this hard too.

And it's addictive in a way that makes the isolation worse. Sometimes you get something brilliant, sometimes garbage, and you never quite know which. Textbook Skinner Box. It can be genuinely hard to step back and remember that you're allowed to just... write code. But switching between LLM-assisted and manual work is jarring and uncomfortable, two very different modes of thinking, and it takes a kind of maturity and confidence to give yourself permission to switch.

Breakpoints

This moment brings to mind the fear and angst caused by responsive design. I was working as a designer and frontend developer at the time, following Ethan Marcotte and the Zeldman / A Book Apart crowd like everyone else, and I remember how unsettling it felt to be told that the fixed-width layouts we'd all mastered were basically over.

For the younger devs: there was a genuine cultural moment around 2009 when websites moved from fixed, pixel-perfect, magazine-style layouts to fluid, responsive ones. And designers hated it. The loss of control was existential for people whose entire identity was built around precise layouts and perfect grids. You're telling me the user might see my design at any width? On any device? That the layout I crafted would... flow?

Responsive design animation

Image design by Jyotika Sofia Lindqvist

The resistance was intense. And it was understandable. People had built real expertise in a paradigm that was being fundamentally disrupted. The designers who thrived through that transition were the ones who reframed their skills. The eye for proportion still mattered. The understanding of hierarchy still mattered. The craft didn't die, it evolved. What became less relevant was the obsession with pixel-level control. What became more relevant was understanding systems, adaptability, and designing for uncertainty.

I don't want to oversell this parallel. Responsive design played out over years. The current shift is measured in months. Agencies lost clients and designers lost gigs over the responsive transition, but it didn't carry the same existential dread. The stakes are materially different, and the pace is genuinely exhausting in a way that the responsive transition never was. But the underlying pattern, of craft evolving rather than dying, of the core skills mattering more not less, I think that holds.

Working with LLMs on code feels like a similar inflection point. The skill isn't gone, it's shifting. You're not less of an engineer because you didn't hand-write every line. But you do still need to know what good looks like, arguably more than ever, because you're now the quality gate for a much higher volume of output.

What survives

In an era when anyone can produce reasonable-looking UI and code that compiles, the distinguishing markers become: taste, nuance, mature architectural opinions, and the contrarian calls that come from genuine expertise rather than pattern-matching.

It's noticeable to me that we are most successful guiding LLMs in the domains where we understand the code, the decisions, and the trade-offs most deeply. As we venture into the shallow ends of our skill sets, the outputs become markedly more impressionistic. Further from production-ready. More plausible-looking, less actually correct. The model doesn't know what it doesn't know, so it fills the gaps with confidence. Sound familiar? It's a very human failure mode, too.

But new skills are also emerging. I've started running what I call pre-mortems on complex plans: asking a fresh LLM session to assume the plan has catastrophically failed and diagnose why. It catches specification gaps that I miss after two days of being too deep in the details. One of our engineers built a tool that extracts rules from thousands of his past code review comments to seed an AGENTS.md file, essentially encoding years of implicit engineering judgment into instructions an LLM can follow. That's not the death of expertise. That's expertise being distilled.

The people who are finding their footing right now seem to share a few traits: they have strong opinions earned through practice, they can distinguish between principles that still apply and habits that were just bandwidth constraints, and they're willing to evolve their workflow without abandoning their standards.

A view from inside the loop

I don't think the current wave of AI represents the end of software engineering as a profession. I do think it represents a serious contraction and a fundamental reshaping of what the work is. The fear of obsolescence is legitimate. The fear of skill rot is legitimate. And the fear that if you don't go fast enough you'll be left behind is — while often overstated — not entirely unfounded.

But the bottleneck was never the code. It was always the human attention, the engineering judgment, the ability to hold a coherent vision for a system. We just didn't notice because writing code felt like the hard part. Now that it's being automated, those human capacities are revealed as the actual scarce resource. And scarce resources are valuable.

So if you're feeling overwhelmed, destabilized, simultaneously more productive and less happy, know that you're not alone. The team building the tools you're probably using to navigate this moment is feeling it too. We're debugging our reward functions in real time, same as you.

The code is changing. What we do with it is changing. How it feels is... a work in progress.

But the humans are still in the loop. We're just tired. And that's worth talking about.

The Daily Front Page 7 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Avoiding the Problem
article

Three ways people respond to a problem (other than solving it)

by surprisetalk·▲ 225 points·125 comments·improvesomething.today ↗
I only get hired well after there is a problem.

Noticing responses to problems; there’s a whole set. The consultant’s reaction to each of these as they arise.

A mountain with two peaks is seen in in the distance. In the foreground, a muddy tideland at low tide with a large rock on the beach.

Photo by Brian Kerr.

When people learn I’m a consultant, conversation often proceeds to problems and problem-solving. It’s true that I only get hired well after there is a problem. Typically a problem that has gotten so lousy that nobody wants to deal with it and it has therefore become worth the trouble—of spending time, money, effort, and reputation—to bring in somebody to sort it out.

That said, I like completeness. What other responses do I notice to problems? (Other than solving them.) I don’t know that any of these are universally good or bad. But I do see people having three additional responses, and acting based on them. These are:

  • Solving problems (the first response we think of)
  • Pushing problems around
  • Preserving problems
  • Promoting new problems

Let’s look at each of these three ‘P’s in turn.

No. 0001. Pushing problems around

When I was facilitating staff-led continuous improvement projects, this was the common outcome. Making things better here by making them worse there. This is what most problem-solving in medium and large organizations look like, because this is what local optimization looks like. This is fine, in a certain sense, and a huge waste of time, in another. A key point is to not blame people for pushing problems around. They’re playing the game in front of them, and playing to win. Instead, when you see this happening, look for their boss’s boss and fix the incentives and system view there.

No. 0002. Preserving problems

Clay Shirky wrote, in part of a 2010 blog post that is no longer online:

Institutions will try to preserve the problem to which they are the solution.

Kevin Kelly named it ‘The Shirky Principle’ and wrote, also in 2010:

The Shirky Principle declares that complex solutions (like a company, or an industry) can become so dedicated to the problem they are the solution to, that often they inadvertently perpetuate the problem. … Because of the Shirky Principle, […] progress sometimes demands that we let go of problems.

A very easy thing to look for when there’s a problem are the people who depend on it. Who’d lose out if the problem were solved? You don’t have to agree with these people—the ones who preserve the very problems you’re working to eliminate. But you had better know who they are and include them in your plan.

No. 0003. Promoting new problems

Always ask this. It’s one of Neil Postman’s six questions about technology (from a 1998 lecture):

What problems do we create by solving this problem?

Jerry Weinberg wrote in one of his books:

Once you eliminate your number one problem, you promote number two.

The ability to find the problem in any situation is the consultant’s best asset. It’s also the consultant’s occupational disease. To be a consultant, you must detest problems, but if you can’t live with problems, consulting will kill you.

Does this mean you must give up trying to solve problems? Not at all. It means that you must give up the illusion that you’ll ever finish solving problems. Once you give up that illusion, you’ll be able to relax now and then and let the problems take care of themselves.

People who can solve problems do lead better lives. But people who can ignore problems, when they choose to, live the best lives. If you can’t do both, stay out of consulting.

In my own practice, the primary way of dispelling this illusion is to get a good diagram going so that everybody can see their problems, agree on what they are, and pick a few that are actually worth fixing. More on that soon.

The Daily Front Page 8 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Auditing the Machine
article

AI Meets Cryptography 2: What AI Found in OpenVM's ZkVM

by duha·▲ 90 points·6 comments·blog.zksecurity.xyz ↗
lets a malicious prover forge any pairing equality

Thumbnail

This is the second post in the series. In case you have not read the first one on Cloudflare's CIRCL, it has more context on why we run these experiments and how our pipeline is set up. In this post, we pointed zkao, our AI auditor, at OpenVM's zkVM, and it found a critical soundness bug in its guest library openvm-pairing that lets a malicious prover forge any pairing equality. Note that this is not a soundness bug in the zkVM's proving system itself; it only affects code that uses the vulnerable library.

The bug in this post was assigned CVE-2026-46669 and fixed in OpenVM 1.6.0. As far as we know, all partners building on OpenVM have since upgraded to that version.

Clarification, same as in the first post: the AI produced a candidate finding, not a final report. Humans on our team then validated the issue, confirmed exploitability, understood the full impact and affected projects, and handled disclosure. In this case, a very quick manual triage was enough to decide it was worth sharing with the OpenVM team, thanks to the detailed report and a minimal PoC that zkao produced itself.

How it happened

Four months ago, we scanned OpenVM as part of our AI experiment, the same way we scan everything at first: an LLM with a simple prompt, and then an LLM with our expert-maintained skills. We ran it with Opus 4.6 and Codex 5.3. As soon as Opus 4.7 and Codex 5.4 came out, we ran them again. The candidate findings were all valid observations, and the models confidently labeled several of them as Critical or High, but none of them were actually exploitable.

Our hypothesis was that a zkVM is simply too complex for a naive LLM setup to handle with 300K tokens or even 1M tokens of context. The dependencies between modules are far denser than in a typical library. A cryptography library can often be audited in parallel by simply handing each subagent a folder that maps to a single cryptographic primitive. Each subagent reads a small number of lines, applies only the relevant skills, writes its findings to a markdown file, and the main agent stitches those files together. All of this happens out of the box with popular agentic coding tools such as Claude Code and Codex, with little human steering.

That approach does not transfer to a more complex codebase, like OpenVM. There, except for the low-hanging fruit, a subagent's useful output is not a list of bugs. You can have a provably secure module A and a provably secure module B whose composition is still not secure. So, hunting for bugs in that "isolated" mode cannot catch meaningful bugs. Instead, a subagent's output should be knowledge about a module: what it assumes, what it delegates to its callers, and what invariant it is silently relying on. However, representing that kind of output well is the hard part. Too short and it skips the implementation detail that the bug actually sits on. Too long and it overflows the main agent's context before it can be combined with anything else. From what we have seen, at least at the time of writing, this problem is not solved efficiently by the agentic coding tools mentioned above.

With that hypothesis in mind, we decided to run zkao on OpenVM, even though our original rule for these experiments was to run zkao only after the plain LLMs had already found a real bug. We have spent a lot of time on context engineering for zkao, and we have encoded the working methods of our own experts into it as reusable flows for finding vulnerabilities, so it seemed like the right tool for exactly this situation. After more than nine and a half hours of scanning, it returned many findings. Similar to the prior experiment, we did not have time to go over every finding in depth. After a quick pass, one stood out immediately: a critical soundness bug in the pairing check in one of the guest libraries. Our hypothesis held up, and months of effort had paid off!

Although there is only one bug to share, to stay consistent with the first post, here is the bug at a glance.

Severities and fixes at a glance

# Bug AI severity OpenVM severity Fix commit Found by
1 openvm-pairing pairing check missing proper subfield check on scaling factor Critical Critical a720e2c zkao

This time, the AI severity and the maintainer severity agree.

Bug 1: openvm-pairing pairing check missing proper subfield check on scaling factor

Background

Pairings are the engine under Groth16, PLONK with KZG, and BLS signatures. In all of these protocols, the verifier is usually not asking for one pairing value. It is asking whether a product of pairings is one:

$$ \prod_i e(P_i, Q_i) = 1. $$

From that one yes-or-no answer, a verifier concludes that a SNARK proof is valid, that a KZG opening is correct, or that a signature verifies. So if a prover can make a false pairing product appear to be one, everything built on top of it is no longer sound.

A pairing is a bilinear map

$$ e : G_1 \times G_2 \to G_T, $$

where $G_1, G_2, G_T$ are abelian groups. In our case, $G_1$ and $G_2$ are elliptic-curve groups and $G_T$ is a multiplicative subgroup of $\mathbb{F}_{p^{12}}^{*}$.

The most important property of pairing is bilinearity:

$$ e([a]P, [b]Q) = e(P, Q)^{ab}. $$

This is why pairings are useful, but we will not actually need this property to understand the bug. So you can just ignore it.

Computing a pairing $e(P, Q)$ has two main steps (except for Weil pairing).

The first step is the Miller loop. It evaluates a Miller function $f_{r, Q}(P)$, which we can just view as a black box for simplicity. This stage outputs an element in $\mathbb{F}_{p^{12}}^{*}$. For a product of pairings, the circuit can run all the Miller loops and multiply their outputs together. Let us call that combined output $f$, i.e. $f = \prod_i f_{r, Q_i}(P_i)$.

The catch is that $f$ is not the pairing product yet. It is only one representative of the equivalence class $\mathbb{F}_{p^{12}}^{*} / (\mathbb{F}_{p^{12}}^{*})^r$. This is one of the main observations from Novakovic and Eagen's paper: Miller-loop outputs are unique only up to multiplication by an $r$-th power. In other words, $f_1$ and $f_2$ stand for the same pairing whenever there is a non-zero $c$ with $f_1 = f_2 \cdot c^r$. That undetermined factor $c$ is what makes a direct equality check tricky.

That is why the second step exists. The final exponentiation raises $f$ to

$$ h = \frac{p^{12} - 1}{r}. $$

This removes the ambiguity, because for every non-zero $c$, we have:

$$ (f \cdot c^r)^h = f^h \cdot c^{p^{12}-1} = f^h. $$

The last term disappears because every non-zero element of $\mathbb{F}_{p^{12}}$ satisfies $x^{p^{12}-1} = 1$. After this exponentiation, the result lands in $G_T$, the group of $r$-th roots of unity. So the real pairing-product check is:

$$ f^h = 1. $$

The problem is that the exponent $h$ is far too expensive to raise to inside the circuit, while it is fine to let the prover compute $c$ outside the circuit and pass it in as a hint. Checking $f = c^r$ is much cheaper than computing the $f^h$ exponentiation. So to prove $\prod_i e(P_i, Q_i) = f^h = 1$, instead of computing $f^h$ directly, the prover only needs to provide a non-zero $c$ with $f = c^r$, which holds exactly when $f^h = 1$.

This is the core idea behind the optimization. OpenVM implements it with the residue-witness trick from Novakovic and Eagen's paper: the prover supplies a few extra values and the circuit checks a cheap equation instead of running the full exponentiation.

The actual optimized equation is slightly different from $f = c^r$:

$$ f \cdot u = c^{\lambda} \wedge u^{d^i} = 1$$

Here $\lambda = m \cdot r$ is a curve-specific exponent whose structure lets the circuit evaluate $c^\lambda$ cheaply through the Frobenius map, and $u$ is called the scaling factor. In the OpenVM code this scaling factor is called u for BN254 and s for BLS12-381. The remaining symbols are $d = \gcd(m, h)$ and $i = v_d(h)$.

The scaling factor is needed because $\lambda$ does not line up perfectly with the original $r$-residue check. Theorem 3 of the paper closes that gap by requiring the scaling factor to satisfy a small root-of-unity relation, which is the $u^{d^i} = 1$ condition above.

For these particular curves, the paper gives an even cheaper route: instead of checking $u^{d^i} = 1$ directly, it is enough to restrict the scaling factor to the proper subfield $\mathbb{F}_{p^6} \subset \mathbb{F}_{p^{12}}$.

Restrict to subfield

And this check is very cheap. OpenVM stores an $\mathbb{F}_{p^{12}}$ element as six $\mathbb{F}_{p^2}$ coefficients:

$$ [c_0, c_1, c_2, c_3, c_4, c_5]. $$

Being in the $\mathbb{F}_{p^6}$ subfield means the odd-indexed coefficients are zero:

$$ c_1 = c_3 = c_5 = 0. $$

So the whole security-critical subfield test is just three equality checks.

The bug

Recall the shape of the check. The circuit has a combined Miller-loop output $f$, and it should accept only when the pairing product would become one after final exponentiation. OpenVM avoided that expensive exponentiation by checking the optimized relation:

$$ f \cdot u = c^\lambda. $$

But that relation is sound only if $u$ is constrained to the right subfield. OpenVM only checked that the hint $c$ was non-zero, and stopped there. It did not check that the scaling factor was in $\mathbb{F}_{p^6}$. Here is the BLS12-381 code path before the fix:

// guest-libs/pairing/src/bls12_381/pairing.rs
let (c, s) = Self::pairing_check_hint(P, Q);
// ... no check that s lies in Fp6 ...
let c_conj = c.conjugate();
if c_conj == Fp12::ZERO {   // only rejects c == 0
    return None;
}

BN254 had the same pattern, just with if c == Fp12::ZERO { return None; }. So the circuit rejected a zero $c$, but accepted any scaling factor.

At that point the optimized equation no longer proves the real pairing check. For any Miller output $f$, even one coming from a false pairing equation, the prover can set:

$$ c = 1, \qquad u = f^{-1}. $$

Then $c^\lambda = 1$, and the checked relation becomes:

$$ f \cdot f^{-1} = 1 = c^\lambda. $$

The check passes. The same substitution works on both curves: $c = 1, u = f^{-1}$ for BN254 and $c = 1, s = f^{-1}$ for BLS12-381.

Normally $f^{-1}$ is a full $\mathbb{F}_{p^{12}}$ element, not an element of the $\mathbb{F}_{p^6}$ subfield. That is exactly why the subfield check would have rejected the forgery.

There is also a subtle control-flow detail. Because the optimized routine returned success, the slower fallback that would have performed the full final exponentiation was never reached.

Impact

Forging an arbitrary pairing check breaks the cryptographic floor that a lot of things stand on:

  • On BLS12-381, a prover can forge KZG opening proofs, which breaks the polynomial commitment schemes behind data availability, blob verification, and PLONK or KZG verifiers.
  • On BN254, the same forgery breaks Groth16 SNARK verifiers, BLS signature checks, and any bridge or protocol that relies on a pairing equation.
  • Any zkVM guest emulating the Ethereum ecPairing precompile at address 0x08 through OpenVM's pairing check would produce forged results, leading to incorrect EVM execution.

So any L2 rollup, bridge, or privacy protocol that verifies a pairing inside an OpenVM guest program inherits the problem. zkao rated it Critical, and the OpenVM maintainers confirmed it as Critical.

The fix

The fix was to add the missing subfield membership test. It asserts that the odd-indexed coefficients of the scaling factor are zero:

// the scaling factor is an honest hint only if it lies in the subfield Fp6
for i in [1, 3, 5] {
    if s.c[i] != Fp2::ZERO {
        return None;
    }
}

A scaling factor like $f^{-1}$ usually has non-zero odd coefficients, so it is rejected and the forgery disappears. The fix landed in commit a720e2c and shipped in OpenVM 1.6.0.

A few things we learned

A naive LLM still hits a wall on a complex codebase. This is the observation we opened with, and the experiment confirmed it: across two model generations, the plain LLM passes produced findings that all triaged down to Informative on OpenVM. The reason is the one described above. A zkVM does not decompose into independent primitives the way a library does, so the unit of work an agent has to pass upward is knowledge about a module, and that is genuinely hard to represent.

Closing that gap is most of what context engineering for zkao is about, and we approach it both heuristically, by encoding how our experts actually read code in many past manual audits, and systematically, in how the harness moves information between agents without overflowing any single context window. zkao found this bug by a flow named cryptopsy. We will leave the details of how this flow works for a future blog post, but basically it combines comprehensive analysis with back-and-forth between the implementation and the academic literature behind it: known attacks, pitfalls, cryptanalysis results, and so on. This simulates a small part of our manual audit process.

Triage cannot just ask an LLM to produce a working PoC. One of our first attempts at automated triage was to ask whether the LLM could turn its own report into a working PoC. The idea was simple: if the PoC runs, the bug is real. In practice, that signal was much weaker than it looked. The model was very good at producing PoCs that passed, even when the reported issue was not real. Enough nonsensical comments, hidden assumptions, patched helper functions, disabled checks, mocked state, and suspicious run flags can make almost any exploit look successful. Validating those PoCs ended up taking more time than triaging the original report. This is why we have spent much time since then on zkao and have improved its triaging process to reduce false positives. In another post, we will discuss how we achieved that and how zkao also learns from users who triage bugs, so that after the first few triages in a project, false positives are reduced even further.

What's next

Our thanks to the OpenVM team, who triaged and fixed this quickly and shipped the fix in 1.6.0. We thank Yi Sun, co-founder of Axiom, for valuable feedback on this blog post.

This is the second post in the series. We will keep publishing confirmed bugs from other projects as they are resolved, especially when they teach us something useful where AI auditing works, where it still fails, and what kind of human review is needed around it.

If you maintain a zkVM or a cryptography project and this is interesting to you, we would love to look at it alongside you, so that serious bugs get found and fixed before they ship. Continuous AI coverage of this kind is exactly what zkao is built for. Reach out at zksecurity.xyz/contact.

The Daily Front Page 9 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Pebble Time Again
article

Pebble Mega Update – July 2026

by crazysaem·▲ 262 points·177 comments·repebble.com ↗

TL:DR;

#Pebble Time 2 Shipping Status

Since we started mass production in late March, we’ve built over 23,000 Pebble Time 2 watches. We’re over 80% of the way through fulfilling all the pre-orders we’ve received! But that means there are still some ultra patient folks who haven’t received their watches yet. If you’ve placed an pre-order for PT2 and haven’t received it yet (including Batch 6 - August), here’s when we expect to ship your watch out:

  • Pebble Time 2 - Black → July 31
  • Pebble Time 2 - Red → July 31
  • Pebble Time 2 - Grey → July 28
  • Pebble Time 2 - Blue → July 28

Coincidentally, this means that we’ll be ‘in-stock’ with no wait very soon! If you’ve been holding off placing an order because you didn’t want to wait, now is the time to jump on it. This won’t last forever - first-come first serve. As soon as the current inventory is sold out, we’ll be back in pre-order mode waiting for the next shipment.

Order today on rePebble.com/watch.

Major props to our three person customer support and logistics team! Claudio, Trevor and Colin have answered thousands of your questions and helped ship watches safely onto your wrist in 93 countries. Have a question? Please check out our Help site first. If that doesn’t have an answer, please email us at [email protected].

Want an extra Pebble charger? shop.repebble.com now carries accessories - full selection of straps coming soon.

#Pebble Software - Progress and Roadmap

Over the last 6 months, the core four person Pebble software team built and shipped a metric ton of new Pebble open source software! Our improvements were centered around these areas:

Battery life

We’ve (well, mostly Gerard 🙂) worked extraordinarily hard over the last few months, optimizing and reducing power consumption in PebbleOS. As predicted, we boosted the median battery life of Pebble 2 Duo from 17 days (last summer) to over 30 days. Pebble Time 2 median is currently around 21 days - more improvements in the works here too! The biggest consumers of power are backlight, watchfaces with a lot of animations and health tracking. If you want to ‘hypermile’ your Pebble, try switching to a low-animation watchface and the new Battery Saver backlight mode (Settings → Display → Backlight).

Apps and SDK

Together with the Moddable team, we’ve published several Pebble SDK updates introducing new features like:

Developers in the Pebble community have created 2,120 apps and watchfaces for Pebble Time 2 and Pebble Round 2 already!

Index 01

The first version of all Index 01 functionality is up and running inside the Pebble mobile app. Don’t have an Index 01 yet? You can check out how it works and try the software interface in the Pebble app, just go to Settings → General → Enable Index feed.

All the main features are in, including syncing to iOS Reminders, Obsidian, Google Tasks, Calendar, Android music control, MCPs and sending recordings or transcriptions to your own server or app via Webhook. Optional encryption (you own the keys) protects optional cloud backup. And of course, it’s all open source (github.com/coredevices/mobileapp). We even built a little webapp that you can use to access your Index information from anywhere → index.rePebble.com. Watch the podcast or read the blog post to learn more.

Stability

Thanks to helpful bug reports from y’all, we’ve made hundreds of small improvements to PebbleOS and the Pebble mobile app. Please keep it coming!

I’ll dive into one specific (and ultra technical) topic - reverse PPoGATT (Pebble Protocol over GATT). Quick history: during the first Pebble era, we configured the Pebble mobile app to expose a PPoGATT service, as means to work around the lack of IPC between iOS apps. This setup is the opposite of how Bluetooth accessories normally connect to phones and caused a number of weird problems! Also this setup blocks us from using iOS AccessorySetupKit (ASK), which is a prerequisite for us to implement the new Notification Forwarding feature (EU only) that will finally enable you to reply to notifications. Enabling ASK is going to be tough - our iOS app must either use ASK or not, meaning that we need to upgrade the recovery firmware on all Pebble watches in the field to reverse PPoGATT before we can switch ASK on. Anyways, we have the first piece of the puzzle in place (Pebble Round 2’s recovery firmware already has the upgrade). This saga will take a while.

Community Contributions

Thank you to the dozens of developers from the broader Pebble community who have contributed huge improvements to PebbleOS and the mobile app, including Apple HealthKit and Google health sync, improved light sensor algorithms, notification filtering, many new language packs, and so many bug fixes. It’s so fun and very energizing to see so many talented hackers push PRs! See the full list and thank you devs! Some exciting new community built features are on the horizon: HRV, SP02, exposing HRM via BLE, mic API, multiple BLE clients and more

Software Roadmap

We keep improving Pebble software primarily because we are Pebble users. We love using the products we make and continually want to make them better! Here’s some of the things we’re excited to work on next:

  • Send text app (Android only)
  • Find my phone
  • Beautiful new weather app for PT2 and PR2 (created by grim, a winner of the Spring Developer Contest)
  • Tweaking PebbleOS UI for Round 2
  • Improving the Pebble mobile app UI
  • WYSIWYG watchface editor - spiritual successor to Pebble Canvas
  • Continue transition to fully reverse PPoGATT role to enable ASK and (eventually) replies to notifications for iOS users (in EU)
  • See below for index roadmap

#Pebble Time 2 - Problems You’ve Reported

Thank you all for reporting any bugs or issues you’ve spotted! We test each watch at the factory before it’s shipped out, and we test each software release internally and with a growing team of beta testers (want to join? Sign up at rePebble.com/account). But these tests are not infallible and we will make mistakes. We appreciate your reports as they help us get more information to help us fix problems!

Software Issues

We’re tracking three big software issues with PebbleOS, and a multitude of smaller problems. While we are actively working on fixing these with a future software , we don’t have an ETA on when these will be fixed.

  • Step and sleep tracking metrics are not accurate for some people
  • Accelerometer sometimes stops working
  • Touch screen sometimes stops working or registers touches in wrong location

It would be tough to list here the long-tail of software issues we’ve had reported. But please note that while we don’t reply to everyone, we do read every single report and look for patterns and clues that help us fix many issues with each software update (see the changelog for PebbleOS and Pebble mobile app).

Hardware Issues

You’ve all demonstrated incredible patience waiting for your PT2 to ship. You’re excited to try the first brand new Pebble in the last 10 years. That’s why we understand how painful and difficult it could be if you unbox your brand new watch and discover manufacturing flaw, or use it for a few weeks and find the battery is dying too quickly or accidentally crack the glass. It sucks!

We feel your pain, even more than you can possibly imagine. That’s why everyone who has reported a hardware issue to our support team has received a free replacement (with free worldwide shipping) regardless of whether their device is under warranty or not.

To date, we’ve replaced 330 PT2s (out of 17.82 million hours of usage from 19,000+ watches in the field).

Mass producing a consumer electronic product is labour intensive. Making stuff is still a very human-centric process. We make mistakes. A worker may not assemble a part correctly. A test may be accidentally skipped. The test result could be read incorrectly. Procedures can be put in place to minimize mistakes, but the cost will rise. As with all of hardware product development - it’s a tradeoff 🤷.

The most frequent hardware issue we’re seeing is very high power consumption (less than ~3 day battery life). We’ve taken apart some units and found a variety of issues. To combat this, we’ve implemented more stringent power consumption testing on the assembly line. If you encounter this issue (regardless of your warranty eligibility), please send us a bug report in the Pebble app and we can help you out!

Next most frequent are problems with the touch panel. At first, we thought this could be a hardware problem and replaced around 70 watches. After reviewing the units with our factory, we now believe this could be a software bug. We’re working to fix these issues with a software update - if we can’t, we’ll replace the affected watches (regardless of your warranty eligibility).

Next up is the front glass cracking. We’ve had 51 reports so far, and we’ve sent a free replacement to each person affected. If your glass has cracked, send us a video (preferably, picture is ok) in a bug report in the Pebble app. During the lead up to mass production, we performed extensive environmental testing - including drop testing, tumble testing, button press, strap stretch and bend, thermal cycling and many other tests. All test results showed normal durability compared to similar smartwatches. But if your watch glass cracks, do you care what the factory test results were? Or that this has happened to just 0.25% of all PT2s - or once every 30+ years of usage? Of course not - your watch just broke. That’s why we will continue replacing reasonable reports of glass cracking for free as long as we can. At some point, we will shift to offering a replacement at a highly discounted amount. We are also looking into sourcing extra LCM modules (the entire front assembly - glass, touch panel, display, metal top cover and backlight) and making them available for folks who choose to fix their watch themselves.

The final big category of hardware issue are reports of button problems (32 so far). In some cases, a small interior clip is improperly assembled, causing the button to pop off. We’ve addressed this issue with changes to the production line process and hope that it becomes much less frequent as watches assembled after the change start making their way out into the world. If you encounter this issue (regardless of your warranty eligibility), please send us a bug report in the Pebble app and we can help you out!

Then we’ve had a long tail of smaller issues that I’m moderately embarrassed by, like a report of the watch missing screws on the bottom, or the front falling off. I guess these things do happen!

#Pebble Round 2 - Production Update and Timeline

My current favourite watchface - Chronology II by Nicholas Jitkoff

I posted a mini-update on Pebble Round 2 in June - we weren’t able to start mass production in May because of a cosmetic problem with the stainless steel bottom case (an extra indentation made by the CNC milling machine). Since then the factory has received a new version of the bottom case and things are looking much better! In parallel, we’ve been running extensive environmental testing (including drop testing).

At the beginning of July, we shipped out more Pebble Round 2 watches to lucky folks who signed up for the beta test. Thanks for your help finding and testing fixes for bugs in PebbleOS!

Our plan (as of today July 14 - subject to change) is to start mass producing Round 2 watches during last week of July. We’ll start ramping up production slowly and carefully. Roughly 14,000 people have pre-ordered Round 2. It will take us about 2 months to build all pre-ordered watches. We expect to finish shipping out all pre-ordered Round 2 watches by the end of September.

If you preordered Round 2 on rePebble.com/watch, we’ll send you an email roughly 2 weeks before your watch is ready to ship asking you to confirm your address, add optional accessories to your order and pay any additional taxes due. If you haven’t already selected your watch colour, please do so on orders.rePebble.com.

Each Round 2 pre-order includes a silicone watch strap and charger. We’ve also created beautiful custom leather straps for PR2 ($20-30), including brown or black soft leather straps that feel very similar to the straps we made for the original Pebble Time Round.

#Index 01 - Production Update and Shipping Timeline

Since our last update, we expanded our beta test and learned a lot from the hundreds of willing test subjects. Thank you for your service and bug reports!

Index 01 is now officially in mass production! We’ve assembled several thousand rings so far, and have gradually begun shipping them out. Schedule has slipped slightly from our last estimate (early August), we’re now aiming to ship out nearly all pre-orders by the end of August, except for a few unlucky size/color variants that will ship in September.

#⚠️ Important Note For Index 01 Pre-orderers ⚠️

We’ve received reports from testers that Index 01 may feel every so slightly smaller than the ring sizers. Please take the time now to recheck your ring size with the ring sizer kit. If the ring sizer feels tight on your finger, is hard to get on/off, or if you cannot easily clench your hand with the sizer on, please change your size to the next larger size. When in doubt, order a larger size. You can always adjust a larger Index 01 to feel smaller with a foam adhesive or clip but you can’t make it larger!

If you preordered Index 01 on rePebble.com/index, we’ll send you an email roughly 2 weeks before your ring is ready to ship asking you to confirm your address and pay any additional taxes due. If you haven’t already selected your Index 01 size and colour, please do so on orders.rePebble.com.

Index 01 has changed my life. There’s no way I could go back to a world without external memory for my brain. And this is just the beginning, Index 01 software is improving every single day. I excited to hear what you think of it!

The Daily Front Page 10 of 26
Friday, July 17, 2026 The Daily Front No. 8 — The Chase Camera Rover
article

Camera Chase Vehicle

by geerlingguy·▲ 223 points·22 comments·transistor-man.com ↗
Time to adopt this curious contraption and turn it into something cinematic.

You stumble on a weird robot chassis in an industrial warehouse. Its adorable, enormous and will likely be scrapped.

Time to adopt this curious contraption and turn it into something cinematic.

I was wandering around an industrial auction warehouse and stumbled on what looked like an enormous RC car with some elaborate scissor jack oddly attached to the top. The moment I spotted it I knew exactly what it should become: A distant off-brand cousin of the Freelfy Tero.

The Tero can be seen all the way back in the early rocketjump days [Link] where they used the platform to get low to the ground moving shots in their skits.

The following details all of the intricacies of building a chase camera from the ground up, using a mix of off the shelf items, used hardware and a pile of printed parts to bind them all together. There was a lot of trial-and-error in this build, and those errors are documented in full detail. As a result this writeup is a bit long and media heavy.

The Plan

Quad-rotor drone shots taken low to the ground are difficult: GPS altitude is fairly rough on accuracy, and obstacle avoidance can get significantly more difficult versus just flying over the everything. Cinema rover drones are less common but do get around a number of these problems, especially if the subjects are not high off the ground. As a fan of karting, lightweight contraptions and photography this seems like a pretty good project: Tackle a mechanically stabilized video platform, pilot it remotely and capture some outdoor action.

To do this we need three major things:

mystery rc buggy

There's also A LOT of intermediate hardware to glue everything together, but the actual goal is to get shots where the subject is moving but in view.

This can be used for anything from zooming down a frozen lake on a mad-max-ian contraption or observing suspension geometry up close on a test track.

  1. The Platform

    A chassis that can hold a modern DSLR does need to be fairly large to support both a stabilization mechanism, like a 3 axis gimbal, while not flipping over.

    Here's a 1/5 scale rc vehicle with a large dude for scale, used as marketing for Losi 5 platforms. These things are quite literally 1/5th the scale of a full size vehicle. The size both has advantages and disadvantages, namely everything is big and heavy. Big and heavy is great for preventing the whole platform from flipping but it does result in everything else becoming large, from the control electronics (VESC) to the comically large 3D prints.

    mystery rc buggy mystery rc buggy

    The Gimbal

    We all have that friend who forwards dangerously good deals on hardware, either oddities on marketplace or curiosities on Craigslist. I was fortunate enough to be linked to a very good deal on a completely functional Movi M10.Thanks Bayley. This model was Freefly system's first go at a full size camera gimbal, proceeded by the M5 and then the M15. Either way for ~124 USD, it was a bargain and got some use at the 2025 Ice Racing Outing.

    This Gimbal was the first born son of the Gimbal whisperer, Shane Colton, and it's very much a passion project. The fact that it's still being manufactured and iterated on, nearly a decade later, is a testament to how well it works.

    whisperer

    The M10 is shown here with some support details here

    To make development quicker, I'd really like to be able to remove the gimbal-camera-transmitter assembly as one unit, versus having a few dangling cables for power and communications. To do this we do need an auxiliary power supply. There is a happy medium between the gimbal's operating voltage range, the receiver's operating voltage range, the camera's aux power supply voltage range and the wireless video transmitter's voltage range, and its a convenient ~14V, or rather, the DTAP battery range of 12-16.8Vv

    mystery rc buggy

    While there are a lot of things to power, there's a bit of attention to detail to ensure the total mass is kept low, especially on the most actuated portion of the gimbal.

    Radio and Telemetry

    This cart needs to relay back video information over a long distance. Traditionally this can be a game of quality versus latency vs bandwidth. I'm also limited to what my video source is, which likely a DSLR with an HDMI output. Traditionally I've used the 900 MHz band for long range control, but for video, 5.8 GHz really does seem appropriate. I was able to find a matching pair of Amimon CONNEX wireless HD links intended for UAV's for <100$.

    mystery rc buggy

    Upgrade-ability

    While the goal for this project is to get something working quickly, allocating space and planning accordingly for integrating some companion computation for automated tracking would be excellent. For the Pixhawk system, this means having enough space and mounting points for a single board computer for vision processing and or visual based obstacle avoidance. One of the best ways to have space going forward is to have an accurate mechanical model of the whole system, so keeping CAD up to date is a priority.

Taking a look at the Chassis

I picked up this from BMI surplus [link], during an adventure with Jake Hecla [link] and the mysterious Arsenio [link]. For some quick back-story, BMI surplus is this incredibly interesting surplus emporium in Massachusetts, while they do not have tours, you can pick up items that you purchase ahead of time. We were fortunate to get some time to browse inside the incredibly dense arrays of machines, gadgets and gizmos. A lot of this stuff appears to come from Lincoln Laboratory, the friendly neighborhood spooks. I was able to haggle a bit and purchased the mystery RC chassis for ~50 USD + tax, along with some other items.

mystery rc buggy mystery rc buggy

There was no actual information about this thing, what it was used for, why it had a bizarre Z-Axis linear actuator bolted to the top. I did some digging but was unable to find any write-ups, technical papers or anything about this 'thing'. Maybe they were surveying, maybe it was a mobile device to take images at the door height of a car? No idea

Fortunately the actuator was a simple DC brushed motor linear actuator, which was easy to control. Behold a scaled dolly shot of this contraption in-action.

There is an animated video here tag.

While this thing was interesting, there was no way that I was going to even try putting a full sized camera gimbal on this thing, so after a few screws the Z-Axis was removed, underneath we see a water-jet plate on, the most comically dubious 4-40 standoffs I have ever seen. 4 inch long 4-40 stand-offs is wild.

mystery rc buggy mystery rc buggy

Hardware Mock Up

For the purposes of determining what this could look like, and if it was going to be too unwieldy, I opted to temporarily use the existing mounting plate, make a 3D printed adapter and get a hint as to what I'd be working with.

First up was to remove the handle assembly that's native to the Movi M10, which inherently flips this whole gimbal upside-down. I was somewhat concerned with how much loading would now be on these four M3 screws, but that's something that future-Dane needs to resolve. Shown below is the gimbal, with the mount point shown. Likely, going forward I would probably end up picking up the central 4 screws and try and mechanically provide some additional support.

mystery rc buggy mystery rc buggy

I used some quick thermal inserts to pick up on the long flat portions of the existing chassis. By using flat-head screws, I can take up a bit of tolerance mismatch, and when loose it can slide back and forward down the top platform. This print was a placeholder, but it did let me get a good visual of how tall this whole stack-up would be.

mystery rc buggy mystery rc buggy

Finally, the first test fit to see what the gimbal looked like on the chassis. While this is a quick mock up it did provide some insight as to how quickly the height of the whole assembly could easily creep up if it wasn't actively being constrained. The lower the camera and assembly height, the lower the effective vehicle center of gravity remains, increasing its stability while helping reduce rollover forces. Making a mock-up may take time but it really lets you skip an iteration step as instead of an ill-defined cad model you now have something to interact with on the lab bench.

There is an animated video here tag.

It is huge. I took the opportunity to also do some placement tests for where the battery mounts could end up. As it was fairly apparent, using batteries as bumpers is not a great plan. The two packs would likely need to lay as low as possible but still remain accessible for hot-swapping two packs at a time. The only reasonable spot would be along the sides, while not interfering with the gimbal or the ground clearance.

mystery rc buggy mystery rc buggy

New Mechanicals

A more structural gimbal mount

The floppy aluminum mounted on some adorable 4-40 standoffs was not going to do it, I needed something much more structural. While the gimbal itself is not mechanically heavy, its mount point does need to be as low as possible to help mitigate flipping. Ideally the Gimbal-camera assembly is remove-able from the frame, such that i can test and tweak the motor control tuning, fenders and the like without putting everything else through hell. Time to fire up the CNC, turn some proper standoffs and rigidly connect to the frame.

The basic plot is to provide a solid foundation as close as mechanically possible to the frame for the gimbal and shock mount. Fortunately the sub-frame base plate is made of aluminum. I'm going to again opt for stand-off's to elevate the platform above the drive motor, but just use some large round-stock to provide a secure mount.

There is an animated video here tag.

After some quick machining, drilling and tapping we have our new elevated gimbal platform, with countersunk M8 flat head screws. This intentionally barely clears the drive motor, and leaves the central round part of the spring damper mount recessed to keep the Z-offset height as low as possible.

DJI Radio Prices DJI Radio Prices

The spacing of the standoffs is nominally tied to the closest positions that I could pick up that were co-planar without bumping into the motor mount / servo mounts. While this is slightly aft of center, it does permit space for the somewhat heavy batteries to live, ideally resulting in the total mass balance towards the center.

DJI Radio Prices DJI Radio Prices

After verifying location a few times, I punched some holes through the chassis and used some M8 screws with flanges to firmly attach the new platform to the chassis. These were initially just tightened to a few newton meters, but on the final assembly did receive some mild loctite to help with vibration induced loss of tension.

Fenders for Ice Racing

One of the big issues with racing on a slushy surface is the slush getting everywhere . I do not have a traditional chassis for this vehicle, so it's up to me to figure out how to contain the slush, while not being too inflexible. This is a great option for 3D printed parts, as it's a lot of odd shapes and contours, however, this is also a battle bots crossover episodes , and oddly, flexible things should out-perform static things. Initially, for iterating and quick prototyping, the fenders are normal PLA.

DJI Radio Prices DJI Radio Prices

Comically, up to this point, I have never actually printed with commercial TPU, which is the go-to plastic flexible elastomer. I cant think of a better use case than fenders on a RC car frame. Just like a commuter-bike, the more of the wheel path that is covered, the less can get sprayed onto the camera and gimbal. The plot is to pickup a hard mount, which in this case is some aluminum angle stock, use a standard PLA part to provide a mounting point close to the wheel, and then transition into a TPU part around the wheel.

I had initially tried 85A TPU and it was just a bit too fiddly to reliably print, without re-doing my filament spool holders to be lower resistance. Any resistance was causing under-extrusion and it was difficult to manage. I opted for switching to 95A filament, which is stiffer, and did a subsequent slow weekend print to make flexible tire fenders for the rear. The rear mounts are mirrored but both mate with three M6 threaded flange screws. After fiddling with settings to get a reliable print on the fenders, its a good idea to start planning a TPU front bumper to help keep this thing from getting smashed too easily.

The print time for a single wheel fender was approaching a day and a half on a Prusa MK4. For this specific print, I opted for high wall count 25% infill, this should result in a fairly stiff part that's able to absorb impacts.

DJI Radio Prices DJI Radio Prices

While it would have been ideal if all four fenders were the same part, the steering up front requires a lot more clearance, resulting in a larger radius. The printed part does pick up the same hard mount point

There is an animated video here tag.

I didn't mention how awkward removing the support material is for large TPU prints. Its time consuming just due to how impact and force absorbent it is. The layer-layer adhesion is amazing.

There is an animated video here tag.

Finally a spool up of the chassis on stand-off blocks, fueled by the two series DeWalt batteries. As I learned from a friend, full RPM in this situation is outside of the motor and drive-train specs, given that i was now running 10S / ~40v. The short blip of full speed was plenty to see how frightening this monster would become.

There is an animated video here tag.

To mount the side plates, i used a long tip marker to indicate where the print would align with the chassis and used a punch to transfer those locations so they could be subsequently tapped.

There is an animated video here tag.

With the holes in the gimbal riser tapped and the chassis clearance holes drilled, it's time to put everything together. Due to the right side of the vehicle's simplicity, I'm opting to install its cover plate first, there's only two wires to worry about. Time to put the electric screwdriver to work. Six M3 screws grab the aluminum top-plate and six subsequent M3 screws attach the bottom of the print to the frame.

There is an animated video here tag.

This video has audio: Click to un-mute

Battery Mounts

Both sides of the gimbal mounting plate fit in separate, blue, printed plates that hold the main power switch, pre-charge and battery mount points. The prints pick up tapped M3 holes above and contain M3 thermal inserts below to pickup screws from the chassis.

The printed mounts then mate to an off the shelf, injection molded DeWalt Battery terminal, connecting with four M4 screws. With the battery latched in, it is surprisingly abuse tolerant. Shown below is a standard DeWalt 6AH 20V battery module. The orange cover captures any exposed wiring present from the battery adapter. Ideally the gap-space gets covered up to help mitigate ice slush ingress, but that's a problem for future Dane.

There is an animated video here tag.

For the left side of the chassis cover we have a lot more going on. The main power switch, pre-charge and pack voltage indication is present, with associated wiring on the backside. Behind this are the dc/dc converters that provide steering power and indication light power, along with our remote controlled relay for headlights / tail lights.

DJI Radio Prices

"Headlights and Tail lights"

Having some visual indication on this contraption is helpful, especially with how quickly dusk appears. A small headlight and rear facing red lights should be a quick addition:

For a headlight i opted for this waterproof small module, intended as a 3rd party automotive light. It fortunately takes a wide range of operating voltages so i can put to use a 15W dc/dc module that's been collecting dust. For the tail lights I'm also opting to re-use some 12V indicators purchased for a project from ages ago. While they are not incredibly bright they are visible from a reasonable distance.

We do have a number of channels available on this radio, including switches. Having the ability to disable lighting, if it were interfering with the camera or causing reflections, would be useful, especially remotely. To implement this I'm opting to go simple, a very basic RC controlled relay.

With the simple 3d printed brackets installed, I was pretty happy with how things turned out.

There is an animated video here tag.

Sorting out HD FPV

There's really four options for long range video links at the moment, low resolution low latency analog, high definition high price DJI hardware, previous generation niche cinema hardware and Open Source Build the whole thing solutions.

As of writing this, the FCC has banned most of DJI's hardware offerings [Link]. Given that present-generation DJI hardware is not banned, but future generations are, the prices have become quite high. For reference, the transmitter alone is 1100 USD. We want something equivalent that hits all three ideals: low latency, high resolution and

DJI Radio Prices

Let's look at the niche cinema hardware of yesteryear and see if any gadgets are available for low ruble.

Enter the CONNEX by Amimon

This gadget was released in 2015, roughly a decade ago, but the specs are really remarkable, especially for the time. 1KM of range? -10C operating rating? Not mechanically enormous? sounds great!

DJI Radio Prices

Here's a quick overview of the features direct from the manual. 1KM / 0.6 mile range is fantastic for that resolution & latency, and 5.8ghz antenna hardware is now fairly easy to come by. Given that we don't really know the orientation of the rover in relation to the pilot, we're stuck with omni antennas on the rover. The rover, unlike a quadrotor drone, is also physically on the ground, with the antennas barely 40 cm from the surface. Real world tests will likely net a shorter range but this is already an excellent start.

DJI Radio Prices

This is pretty excellent, and they do appear for ~100-200$ used on eBay, but Wait, why have I never heard of these things? Amimon was purchased by Teradek, who makes a very similar item just for 5X the price. Awesome.

I purchased a set of transmitter and ground station radios from eBay and got to work sorting out how I would integrate them to this vehicle. One of the dangers of working with "older" hardware is not the hardware it's the support software.

Narrators voice "there were software issues"

The specs are quite impressive on paper, specifically the <1ms latency . I was also impressed by the -10 Celsius rating. On the rover side of the fence we need to pipe Mini HDMI from the camera into the "Air Unit" along with ~14V from the Gimbal battery.

A copy of the manual for the Connex Amimon is available here [link], with a local copy here [link]

Lets build a display and FPV receiver mount

Monitors for outdoor use can be a bit tricky, you are inherently trying to beat the sun. I have been a fairly big fan of Liliput and opted for their 7" 1800 nit monitor, it supports 1080P and is covered in 1/4-20 mount points. They just work, have a wide input voltage range, and are so much more rugged than mystery 4-character amazon brands.

The Connex receiver is somewhat large and the antennas do need to be facing upwards, so let's stick the whole thing on the back of the Liliput monitor. There are four M2 threaded holes on the backside of the Connex receiver, so our part will pick up the sides of the Liliput and provide a place for four screws to mate to the receiver, hugging the back of the monitor. Fortunately, all the input/outputs of the receiver are on the sides, so as long as we properly mechanically constrain the cabling we should have a pretty excellent little setup.

mystery rc buggy

After some iteration and fit-testing, I came up with a slightly more mechanically robust part, using some epoxied in M3 screws to act as mechanical stiffeners on the parts that connect to the side of the monitor. M3 threaded inserts provide spots to help constrain the HDMI and power cables, while keeping the path to the switch and link connectors accessible.

mystery rc buggy mystery rc buggy

Now that we have a monitor and receiver for the handheld controls portion of this project. For the radio, I'm opting to use a Taranis X7, mostly because I picked one up at Guardian from the leftover cruft pile. I'm a big fan of the X7, I used it for SnowBot [link]. My only qualm is that there are no places to mount external gadgets or gizmos, if this had some M6 or 1/4-20 threaded mount points it would be excellent.

mystery rc buggy mystery rc buggy

Long ago, Guardian Agriculture was Kiwi Agriculture

I needed a radio for remote control and planned to just have a portable display that would follow along with that remote. Yes, as mentioned by FRED, I could set up a ground station and a tripod but the probability of me knocking over a tripod out in the cold is very high. So let's start out with the only actual mount point on the X7, the neck-strap mount.

We also have one more 'hard point' that we can pick up, the antenna protrusion that's injection molded into the case. If we can pick up a hard point mount there and the neck-strap, and contour closely to the case we should be set for at least a first pass at a monitor mount.

mystery rc buggy mystery rc buggy

After a number of iterations, I ended up with an M6 long thermal insert to pickup the necklace mount and a heavily walled hole to pickup the antenna mount. This breaks out into one M4 thermal insert for the monitor and two auxiliary M3 thermal inserts for "whatever subsequent spacing modifications i need". Note that I opted for high infill and high wall-count for this part as the lever arm from the monitor is quite high.

mystery rc buggy mystery rc buggy

It did end up working out fairly well, especially for a first pass, the monitor is quite heavy and the stock bendy mount was quite limited, so some more iterating to do.

mystery rc buggy

Configuring the Connex Amimon

The nominal pairing process for these two radios is fairly straightforward, and does not require any companion software. To pair the procedure is fairly straightforward:

Apply power to air unit press and hold link for 5 seconds, or until it starts fast-blinking Apply power to ground station unit (preferably with a monitor connected) press and hold link for 5 seconds, or until it starts fast-blinking Follow the on screen directions on the air unit and it will show a progress bar for pairing

I followed these directions and alas, no dice. The ground unit sat in pairing mode for 5+ minutes and then timed out.

I did some digging and found the configuration tool. It did "just work" right out of the box, which is great for ~10 yr old software, but I came upon my first dilemma. The ground unit and the air unit had wildly different firmware versions . I did attempt different variations of the pairing procedure, but alas each go they see each other but refuse to pair. The software tool did have an update feature, but it was too smart, it natively pings a server to check for new, compatible, firmware versions. Those servers are unfortunately gone. Shown below is the "No Server Connection!" message, also showing the mismatch between the Air Unit and the Ground Unit.

DJI Radio Prices DJI Radio Prices

Time to find some help. Between 2016 and now, the initial creator of this hardware / software was absorbed into Teledek, which generally results in previous hardware getting shelved. I was able to get in touch with a support engineer and was given the best support email ever: there's an offline update mode

Enabling Offline Update Mode for the Connex Amimon

To enable offline update mode here is the procedure:

Download the Connex Management Tool

The tool is available from the vendor here [Link] and a local copy is available here [Link]

Extract the management tool and install

For the purposes of this write up, lets assume you are running windows

Place a blank file in the program directory

Create a file "local.txt" with no contents in the program folder, C:\Program Files (x86)\Amimon\Connex

Grab the latest firmware files

The latest firmware files are available here [link] and a backup copy is available here [Link]. Download and save locally

Unzip the firmware, you should end up with all of the firmware options for US, EU and overseas.

DJI Radio Prices

Launch the Connex Software Click update and browse to the correct firmware

Offline Update

With the secret offline update mode, we now have the ability to push these units to the same firmware version. I started with the air unit and then completed with the ground unit. Shown below is the process, unfortunately OBS screen grab missed the 'open a window to browse to the actual file', but for reference I used "PR_ID_UAV10100US000_PR_NAME_ConnexUS_VER_4_5_61.amn" as the final target firmware for both units.

There is an animated video here tag.

It works!

Propulsion Electronics

This did come with a castle creations motor controller, however, I did want something that I was able to adjust set points for, and have some flexibility going forward regarding autonomy. I opted for a VESC 75V100, nominally as I had one available and had used one on a previous project. The 75V100 is very budget friendly, and just requires some silicone glue to make it robust enough to survive shock and vibe. Internally there is a large electrolytic capacitor that has no mechanical constraints.

For the initial spool-ups, I used a bench supply at 30V, which honestly is inadvisable. Bench supplies are not four quadrant devices and re-gen currents from the motor spooling down can over-volt the supply and cause issues with the controller. Nominally I was mostly interested in verifying that the VESC could run the motor sensor-less

vesc settings

Fortunately, even with a basic tune we got what we were looking for, motor characteristics: 5 mOhm phase resistance and low phase inductance. With this basic information we can do a quick spool up test, making sure to not spool down quickly.

There is an animated video here tag.

This video has audio of the motor spoolup, click to un-mute

Speaking of the 75V100, it's a surprisingly good budget controller, however it does have a flaw. Flying Capacitors. Three large electrolytic caps act as the dc-rail stabilization, and unfortunately they are remarkably unconstrained. One seemed to have a hint of glue but the two rear ones were prancing in the breeze. I applied some clear RTV silicone to help constrain them and protect from moisture ingress. RTV was also applied to the cable gland input and top mounted led optical path, to help keep moisture out.

mystery rc buggy mystery rc buggy

Something that needs some work is pre-charge. The plan is to use the two DeWalt packs in series, or an equivalent 10S battery. This is a nominal "36v" system, with 42V max. Slamming low impedance 40V into the controller is not ideal, so having a way to slowly fill the controllers capacitor bank, and then fully enable the DC battery rail is ideal. Whatever the approach, we do need to make sure that it survives shock and vibe. Some relays, and especially circuit breakers have terrible vibration performance.

Due to some timing constraints, I'm opting for enlightened user instead of having an automatic pre-charge start. A simple 10 ohm resistor and push button jumper across the main contactor switch, the user pressed the button for 5 seconds, the motor controller capacitors fill and then the "ON" switch is toggled. This does have the downside of a user hard-turning the controller on with the toggle switch and potentially damaging the bus-capacitors. I am glad that they actually chose 100V rated capacitors, I've seen some controllers with wildly under-specified bus-capacitor voltage.

Lets see how the setup performs with no-load

After some bench testing, I plugged in the gear ratio and did no-load testing of the propulsion. Keep in mind, wheels-unloaded testing is wildly inaccurate for speed and full motor RPM may damage the motor, but we do get some hints at power requirements and a rough estimate of how the remote speed mapping will track

There is an animated video here tag.

I was hoping for some more stable numbers for wattage and DC link current. I'd estimate real-velocity would be 30% less than no-load velocity, which puts speed mode 1 at 20MPH max, speed mode 2 at 30MPH max and speed mode 3 at untested max speed. Assuming I can maintain a Bluetooth link for long enough, it should be possible to repeat this with the system loaded.

Power Distribution

We have two separate systems to power: the camera-gimbal assembly and the chassis

The Chassis

The chassis consists of two 5S swappable battery modules connected in series, to create a 10S equivalent pack. This is a 36V nominal battery able to source ~40-50A. This is a bit under-sized for the motor, however its not clear if a chassis this size actually needs ~3kw. The ~36v nominal battery needs an e-stop, and a pre-charge to route power to the controller safely. A DC/DC is required to provide power to the steering servo, which can pull upwards of 5A at 5V. The 900 MHz radio receiver for the chassis requires a 5V feed for logic power. Otherwise an auxiliary 12V feed would be great for indication lights.

The Camera-Gimbal Assembly

The Camera-Gimbal assembly is a single ~14V battery that supplies the gimbal, camera aux power dc/dc converter, and video transmitter directly. The 900 MHz receiver for the gimbal controls will be supplied by a 5V dc/dc converter from this pack.

E-Stop

A large push button style e-stop would be useful for stopping a runaway chassis. Generally, in combat robotics, one of the most important tests to perform is the fail safe test, where you command 100% of whatever channel is required, then power off the radio. This equates a loss of signal and should result in the system entering whatever the fail safe state is, generally a full-stop. This isn't necessary on the gimbal-camera itself, a single switch will enable power from the DTAP battery to all of the associated systems.

Telemetry

Propulsion Receiver

The stock antennas used on the 900 MHz FRSKY receivers are intended for rc aircraft, and while their performance is great, they are hard to waterproof and install on more fixed-application hardware. After opening up the receiver I was fortunate to find UFL connectors, which are fairly common and easy to get adapters to SMA / RPSMA antennas. To remove the existing antennas you do need to carefully pry at the existing dots of retaining glue as to not damage the board mount connectors. It is highly likely that you will damage the mating antenna connector.

There is an animated video here tag.

Once the SMA panel mount connectors were installed, i routed the UFL adapters to the board and reinforced them with DP100 2 part epoxy. Hot Melt glue could have worked here in retrospect, but either way the cables were now fairly firmly attached. Next up was to run all the associated signaling cables. A cable gland tries to keep moisture out of the receiver box, which contains the glue-potted receiver board.

mystery rc buggy mystery rc buggy

I picked up one of the existing chassis screws and used a slightly longer pan head screw to mount the receiver box to the frame. Two 'omni' 3dbi gain antennas were used. These aren't that constrained so its likely that some additional mounting hardware is required to keep them from getting ripped off by the electrical connector. Of the inputs we have the basic PPM control of the VESC, a channel for the steering servo, one for the headlight/taillight relay and finally the SBUS data from the current / voltage sensor.

Remote Camera Lens Control

Motorized lens's are nothing new, but remotely controlling a zoom lens from an R/C controller does not have an off the shelf solution. First problem to solve is how the heck do you remote control a lens anyway. My go-to camera and lens stack is M4/3 or micro 4/3 which is technically an open standard. You still pay to read / view the standard, so 'open' is a loose term.

One route to control a lens is to talk to it directly, IE learn the SMBUS / SPI communications between the camera and the lens, and spam whatever the zoom in / zoom out packet is. This is a bit fiddly as it requires. A communications interception ring on the mount.

Fortunately there's a remote shutter port, that is intended for remote focus and remote shutter. It uses a 1/8 headphone jack, and as it turns out can also be used for zoom and focus adjust? Like most things, this is completely undocumented. To test this out, I purchased a very budget remote zoom controller, which had both Panasonic and LANC options.

mystery rc buggy mystery rc buggy

I opened up the controller and found the three pin connector and scoped out the signal while twiddling the zoom state knob. I really expected a modified serial or equivalent, but i found that Panasonic really just uses an analog value.

There is an animated video here tag.

Initially I anticipated this being a voltage based signal, IE: a DAC was sending specific values, but then i noticed that, no, while in Panasonic mode, there was not actually sufficient power to both run a micro and simulate various voltage states.

My observation is on CH1 of the 3 wire jack:

Null Zoom Position

760 mV

Zoom In Position

1.44 V

Zoom Out Position

0.80 mV

Instead, it appears that the controller end of the module is just providing various resistances, which the camera internally processes. Given that I'm planning on using a micro controller to take in R/C PPM signals and twiddle the camera record / zoom state, it does seem easier to use a digi-pot to interface with the camera.

I did end up finding a budget friendly remote controller that did both zoom and focus control. Given that these resistances are unknown and I'm already at work on this, let's just make a table of resistances and sort out what the camera does with them. Once we have this lookup table, lets then make a micro controller process inbound PPM and fully control the camera through the shutter port by controlling a 10k digi-pot.

Power Indication

First Shakedown Test

So its time for the first shakedown run, at the time of writing its presently dismal gray season in Massachusetts, and the streets have dried of their snow remnants to an extent. For this test I have a Panasonic GH4 mounted to the Movi M10, a GOPRO Hero 10 hard mounted to the frame, and a camera statically on the street to display what this looks like from the 3rd person view.

There is an animated video here tag.

The M10 is incredibly not balanced well mechanically, which as it turns out is actually very important . No software tuning would compensate for that amount of offset balance on the camera's tilt axis. I also discovered that the HDMI cable was getting caught and causing the gimbal to struggle at end of range. I was really happy that this whole setup survived 30 MPH, that is a lot of speed for such an offset mass vehicle.

I did get some guidelines on gimbal-ing:

Perfect balance

This literally means what it says, the tilt axis should actually mechanically be very easy to flip, I completely skipped this step and it shows in the footage.

Stiffness (rate gain) as high as can be tolerated without oscillation

Initially, I encountered issues with cranking up the tilt axis gain and this is likely why, unbalance from step 1.

Crank the hold strength (angle gain) way up, especially for small cameras

My camera is inherently small, a GH4 is ~560 grams, and the lens I've opted for is also fairly lightweight. Why a GH4? There are known issues with camera IBIS (In-Body Image Stabilization) interacting with gimbals, producing wobbly footage. The GH4 can shoot 4K but also lacks IBIS natively. I could opt for a GH5-S or a camera with a lockable IBIS, but those are somewhat pricey.

A bit of rough driving

To keep things conservative, I did implement some very soft acceleration curves as well as a large amount of hysteresis on the change in direction. This was a bit too conservative and I ended up doing a bit of smashing. A steering linkage failed on a curb impact and so did the Gimbal battery 3d printed mount.

Adding inertia

One of the interesting notes about the Movi M10 is how it changed over time, notably how the top ended up mechanically closing the loop. After some feedback from experts, adding in a mechanical linkages to close the loop, and adding mass to compensate for the fairly lightweight camera both would have a significant improvement on axis tuning. To add mass, I did want to maintain a symmetric distribution, and the simplest path was just to use the existing carbon fiber uprights and have them house large M10 bolts. To make life simpler, I used the 3D print to capture the nuts, which hides them slightly out of view. This part was high-wall-count and relatively high infill.

mystery rc buggy

Compensating for the additional mass

The ride height of the whole vehicle from the first shakedown test was barely passable, the tires found the flexible TPU fenders fairly quickly. Interestingly this is actually a spring + fluid damper, the inside was filled with what appeared to be mineral oil. The stock shock absorber had a reasonable spring, shown in black. Given the timeline i opted to find an equivalent from mcmaster-carr, and subsequently coat it to match the vehicle's color scheme. I ended up opting for this 2.5" spring, which has a 97 lbf/in deflection. We know that the full mass of the vehicle is ~50 lbs, so we expect ~0.5" of ride height reduction in a static environment, on a 2G load, we should see 1" of deflection, which is tolerable for the existing fenders. While this spring is somewhat short, it does have the correct ID/OD to work with the absorber.

spring upgrade spring upgrade

A smashed battery mount

One of the casualties of the shakedown drive was the battery mount. For this run I was using a 120W D-Tap battery, which does have some inertia, it's positioned to offset the mass of the gimbal, rotation-ally. This mount was a 6-wall 75% infill PLA part, however it looks like the infill to wall boundary was not terrific. It sheared perpendicularly to the print axis which is wild. Curiously in an impact, this printed part has to translate a lot of torque, specifically if its a solid part. I had the option of discerning how to make this out of a cnc aluminum block, or try something simple, print it out of a flexible filament.

mystery rc buggy mystery rc buggy

The new part, made of high wall-count TPU is mechanically a bit different than the initial design. We still pick up the four M3 shoulder screws the Freefly Movi M10 use on its theta-0 motor, but now a long M3 screw captures the plastic near the interface and translates force out to an intermediary aluminum plate. This allows the tpu to absorb some shock while providing a mechanical path to keep the battery retained.

There is an animated video here tag.

The aluminum plate was a simple trace + band saw activity, a punch was used to transfer the holes from the DTAP mount.

mystery rc buggy mystery rc buggy

Ice Racing

Some quick backstory: A frozen lake solves a problem that may be not inherently apparent, Roads are not free. Lets say you put together a shifter kart or elaborate experimental vehicle, where can you actually test it?. Driving on public roads can result in a fairly sizeable fine, and there's not a lot of space to determine the limits of whatever the vehicle is. Tracks exist, but they are pricey and do require a bit of transit to get to (a 3 hr drive up to New Hampshire motor speedway). A frozen lake is limbo, there aren't really rules or obstacles. I periodically organize ~five dozen silly folks and their assortment of contraptions on a lake day to get fresh air, get some speed and have a blast.

mystery rc buggy mystery rc buggy

Over the course of the morning, after a lot of unpacking a small tent city appeared. This consists of safety gear, ice sample hardware, food, a warming tent and associated gadgets and gizmos.

There is an animated video here tag.

So here's the debut day for chase camera, piloted somewhat randomly by whoever was available. We observed that the dual 6AH DeWalt batteries worked out pretty well, netting nearly 30 minutes of exceptionally fast zooming around.

There is an animated video here tag.

Its goofy but it worked so much better than I had hoped.

There is an animated video here tag.

Here's a mechanically stabilized shot of Shane on his tiny kart, just take a second to think about how rough that surface is and how smooth that chase footage turned out.

There is an animated video here tag.

A wonderful shot of MEGA DOOM SLED as it majestically races across the frozen lake.

There is an animated video here tag.

Camera Upgrades & Warm Weather Testing:

Now that I knew a normal Panasonic GH4 would survive zooming around a frozen lake without flipping over, I had a bit more confidence to find a camera with better image performance. While a number of the shots from the winter ice racing event were stellar, the color depth (and the overcast sky) really made color correction difficult. So next up was the Panasonic GH5s, where the 's' is for 'not stabilized'. Comically camera image stabilization and mechanical Gimbal stabilization can fight each other, and it's very much dependent on the specific camera internal stabilization mechanism. The GH5s has a fixed sensor, but one that's about an order of magnitude better, performance wise. There are plenty of 4K capable cameras as of this write up (2026), and while the GH5s is getting a bit older, it's a lot of camera for the (used) price. I purchased this one used for ~400 USD

mystery rc buggy

With this upgrade we're essentially quadrupling our data captured, but it's so much more than that, netting two extra bit depth for color information gets us out of the muted land of high saturation and into a way more vibrant color space. For a moving contraption doubling the frames per second also nets more data if any post process stabilization is required. Mounting the new camera was incredibly straightforward and only really required a little bit of re-balancing and a small change in the HDMI cable routing to adjust back to full sized HDMI. Fortunately the GH4 and 5 both use the same style battery, I was able to continue using the external power battery adapter.

mystery rc buggy

With some warm weather rolling in, the next step was to test out the new camera and start working on that piloting. The subject of these motion shots is Shane Colton's TinyCross [Link]. Shown below is Alan driving and swerving around while the camera is being remotely piloted. Part of the goal was to get some visual indications as to what the tiny-cross suspension actually does under load.

There is an animated video here tag.

This video has audio: Click to un-mute

After a bit more practice it was concluded that the easiest way to get a good shot of suspension performance was to reduce variables, ie, drive in a straight line. For this shot, taken from a static camera, the driver is piloting in a somewhat predictable line while testing the suspension. Not having to predict the course and subject at the same time made the shot significantly easier to attempt. It is remarkable how much velocity you have to work with on these 1/5th scale chassis.

There is an animated video here tag.

This video has audio: Click to un-mute

Now, with the path more visible, here is what we ended up with as a purely mechanically stabilized shot. One point to note was that this shot was optically zoomed in which should really highlight just how good these gimbals can perform. There is a downside to the optical zoom, it does make it significantly harder to keep the subject in shot, especially if you loose them. This is really where having an optical flow model or some target tracking could make a huge difference in operator workload.

There is an animated video here tag.

This video has audio: Click to un-mute

Abuse Testing:

Now that there's a new camera installed, and everything is dialed in, lets see what a ground perturbation does to the gimbal and chassis. For this shot the chase camera is traveling approximately 18 mph and hits a very low ~5 cm curb. What happens next was unpredictably wild, and fortunately captured on the absolutely amazing Freefly Ember 5K

There is an animated video here tag.

Surprisingly no robots were harmed in the making of this shot

Here's the full video on YouTube of the tumble [Link]

I want to make a note here, the entire chase camera, gimbal and camera all survived unscathed. It is absolutely absurd anything 'just worked' after that tumble, let alone woke back up and kept on going. There was some re-balancing of the gimbal as the friction mounts slid slightly but all of that activity was less than 5 minutes of fiddling.

CAD & Print Files:

The final source CAD files, along with their respective step/stl's to make this are included below. Note that all files respectively fit on the reasonable size printer volume ~200mm cubed

Rear TPU Fenders

The rear fenders are mirrors of each other so only one file is included, mirroring is available in almost all off the shelf slicing software

Front TPU Fenders

Like the rear fenders, the left-right are mirrors.

Movi M10 uppper brace and bolt holder

This brace helps constrain the open-top of the early Movi M10, while adding mass. High wall count TPU was used here.
The associated file is available as a [step] and a [sldprt]

Front TPU Bumper and hard mount

This functions as the first line of defense when the chase camera runs into something, the slope helps lift the vehicle up instead, translating some of the impact force into flight.
The associated file is available as a [step] and a [sldprt]

Rear TPU Fenders

The rear TPU fenders share the same mount as the front, however are sized smaller than the front as there was no need to cover the full steering geometry swing
The associated file is available as a [step] and a [sldprt]

Left Printed Assembly

This contains the main on-off switch, pre-charge and voltage indication while also providing a spot to mount the battery adapter. Note the key feature on the on-off switch mount to help ensure that the rotary action does not result in the whole switch assembly rotating.
The associated file is available as a [step] and a [sldprt]

Right Printed Assembly

This side just holds the battery adapter and keeps slush / debris away from the motor controller and motor.
The associated file is available as a [step] and a [sldprt]

Concluding Remarks:

The Camera makes the shot

One of the trade offs to make on this project was what to use for a camera, aside from needing HDMI out and no onboard stabilization, there's one parameter: how much camera are you willing to loose. At any point during racing this camera and lens could get covered in water, drive into a tree, or just get crushed. A 2k$ camera hurts way more than a 200$ used camera. As a result you do pay for performance, a GH4 is at this point, a 14 year old camera, and the footage shows. It struggled with white balance quite hard. The upgrade to a GH5s was a substantial improvement that happened late in the project testing.

It would be great to upgrade to a higher end camera, now that its fairly visible that the car is unlikely to flip over and its mass distribution is such that the CG is significantly lower than the gimbal.

Higher Speed imagery would be pretty excellent

Most shots were recorded on the GH4 at 4K 25 fps, and while mechanical stabilization worked well, having more frames per second would allow for better software post stabilization. Upgrading to the GH5s, and pushing 4K 60FPS, with better color and somewhat importantly a full sized HDMI port is a dramatic improvement. It is a significant step up in image quality while being in the sub-400$ price category.

Forward view is necessary

It's increasingly difficult to pilot this over the video link when the camera is pointing orthogonal to the direction of motion. Giving the operator some hint of their surroundings is incredibly important for avoiding obstacles and capturing a good shot. While this seems straightforward, the implementation is tricky. The Gimbal and FPV transmitter is electrically and mechanically decoupled from the propulsion and controller. Getting a 'forward facing camera' would require a static camera on the front of the vehicle, and that data relayed to the operator, either though a flexible coupling (which would negate the separate systems) or via a completely parallel video link, which seems both elaborate and expensive.

Remote Zoom is only really necessary for setting up the shot

In the present state of the chase camera, piloting and operating the camera is already too may inputs to juggle, operating a zoom lens while doing those tasks is asking way too much. You would imagine I'd then conclude that remote zoom was unnecessary, no quite the opposite, its great for setting up the shot and leaving the lens at a fixed zoom through the duration of the shot.

Dual Operator

I was fighting hard to make this setup single-operator friendly, however this is really a two person activity, framing a shot, keeping the subject in view all while piloting is a lot of work, its doable in short bursts but incredibly difficult for longer duration's. Part of the design intent was to make dual-operator feasible in the future, namely by using two separate receivers, one on the gimbal and one on the vehicle for control. This permits using one radio to pair with two receivers, or having two radio controls to pair with the separate systems.

Moving to dual operator does also open up providing the 'pilot' a separate video feed for forward, as well as some obstacle information in the periphery. This is an interesting area as it opens up some computer vision options to provide things like artificial birds eye view, or even a vision based depth map. I clearly should have learned of the dual operator necessity from Pacific Rim.

dual operator pacific rim

Automation

We are in the era where an aerial drone can perform visual object tracking while flying in 3D space at less than 250 grams, offloading the responsibility of camera tracking to a local computer does reduce the driver's overhead. While quad rotor drones do have the benefit of large open air spaces, the obstacle avoidance is somewhat minimal, whereas for ground tracking the effort required is more significant. Nominally it would be ideal for the operator to start by drawing a box around the visual target, selecting visual tracking and let the car attempt to generate trajectories for propulsion and camera action.

One of the lower-effort paths to building a visual follow-me is to pipe position data from the target to the drone, and provide a physical distance reference. If both the drone and the target to be tracked are communicating, that position information could help reduce the pure visual tracking overhead. Nominally you need both the position and orientation information, which necessitates an onboard compass for heading. Curiously, dual receiver RTK GPS's can now provide fairly accurate heading information, which is fairly amazing. It does open a bit of additional work, namely providing RTK offsets either in the form of a subscription or by building a base-station and managing communications between the rover, the target and the base-station.

Follow mode is available for PX4 equipped drones, however, it is not presently available for rovers. It may be an interesting project to add that functionality if the overhead requirements are low. This may actually be a good project for staring at the differences in code base with the help of "a word salad machine".

Awesome People

During the build of this contraption I did rely on a number of folks for their expertise, feedback and ideas:

Fred Moore had a lot of feedback on driving behavior, controller mapping and everything in between. He had some prescient early feedback on input filtering.

Shane Colton had incredible insights into getting the most out of the Movi, as well as a lot of feedback on cameras and camera behavior, everything from what options were available to how camera mass effects gimbal performance.

Bayley Wang who simultaneously had the same plan and in a parallel world, built his own while sending eBay links to interesting hardware options he spotted.

Ciarán O Neill who gave loads of mechanical feedback on the design iterations, gave operating feedback and helped me carry back the chassis after destroying the front steering on an icy road.

The Daily Front Page 11 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Ancient Mixes
article

How Has Roman Concrete Lasted for Millennia? 1,900-Year-Old Latrine Offers Clues

by divbzero·▲ 258 points·215 comments·smithsonianmag.com ↗
A chemical process called carbonation, which helps seal cracks

A chemical process called carbonation, which helps seal cracks, could help explain why many ancient Roman structures are still standing today. Researchers hope that the insights will lead to better modern-day building materials

image of ancient roman villa

The Canopus, a pool at Hadrian's Villa in Tivoli, Italy Carole Raddato via Flickr under CC BY-SA 2.0

Ancient Roman infrastructure has stood the test of time. Today, you can walk through Italy and see concrete buildings, roads and aqueducts that have survived for about two millennia. Modern concrete, on the other hand, usually crumbles within roughly 100 years.

Scientists have long tried to uncover the secrets of Roman concrete’s durability. For years, they assumed that its longevity was thanks to one key chemical process: the pozzolanic reaction, which occurs when volcanic ash reacts with the chemical lime and water. While that still holds, there seems to be more to the story.

It turns out that another chemical reaction, known as carbonation, might also contribute to Roman concrete’s longevity. The findings, published in the journal Science Advances on July 8, could help researchers develop more sustainable and resilient concrete materials.

For the new work, researchers traveled to the 1,900-year-old Hadrian’s Villa, a UNESCO World Heritage site that sits about 17 miles east of Rome. The sprawling estate is an architectural marvel, but one of its scientific gems are the communal toilets. They offer an unprecedented opportunity to study Roman concrete in its original state, unaltered by modern hands.

“Nobody restores a latrine,” says Paulo J. M. Monteiro, a study co-author and civil engineer at the University of California, Berkeley, to Sam Macdonald at Scientific American. “So, the material sat undisturbed for 19 centuries, quietly running an experiment no one alive could start.”

Need to know: Who was Hadrian?

Hadrian was the emperor of Rome from 117 to 138 C.E. He’s well known for having a wall, called Hadrian’s Wall, built in northern England to protect the Roman province of Britannia from neighbors in what’s now Scotland.

Monteiro and his colleagues took a concrete sample from underneath a toilet seat. Back in the lab, they examined it under a high-powered microscope, scanned it with X-rays and analyzed its chemical composition.

As expected, the specimen contained evidence that volcanic ash, lime and water had been combined to form the material. However, a closer look at the concrete’s pores and fractures revealed that calcite, a mineral with calcium, carbon and oxygen, was the primary binding agent.

When atmospheric carbon dioxide reacts with the calcium compounds in the concrete, it forms the hard mineral calcite, which contains a lot of the compound calcium carbonate. The mineral fills small cracks and pores in the concrete, allowing ancient structures to strengthen and heal over time.

“While the pozzolanic reaction is of fundamental importance, our findings suggest that carbonation over a long period of time also enhances the durability of concrete and can help it seal cracks as it ages,” Monteiro says in a statement.

The work builds on a study published in 2023 that suggested that Roman concrete could repair cracks on its own because it was created with chemical reactions involving quicklime, a form of limestone, which left behind calcium-rich deposits in the material. The deposits could react with water, such as rain, and recrystallize to fill in any gaps.

With the new study, carbonates have entered the limelight. The research “strengthens the idea that carbonates are more dynamic in these systems and play a fundamental role, not a marginal one,” says Admir Masic, a materials scientist at MIT who co-authored the 2023 study but was not involved in the new work, to Scientific American.

Monteiro and his colleagues hope that by understanding how Roman concrete worked, modern-day experts can build concrete that has less of an environmental impact. Concrete is one of the world’s most consumed materials, but its production emits an enormous amount of heat-trapping carbon dioxide—about 8 percent of emissions worldwide. According to the United Nations, roughly half of the buildings that will exist by 2050 have not yet been built, which is why it’s important to develop construction materials that have a reduced carbon footprint.

“This study shows how exploring ancient engineering techniques can lead to important revelations,” Monteiro says in the statement. “We hope that by unlocking Roman secrets for enhancing concrete durability, we can someday attain sustainable modern infrastructure development.”

The Daily Front Page 12 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Prairie Beginnings
article

Frank Lloyd Wright’s first home

by NaOH·▲ 96 points·47 comments·architecturaldigest.com ↗
he first designed the residence at age 22 and lived in it for 20 years

Located in Illinois, he first designed the residence at age 22 and lived in it for 20 years

Exterior of frank lloyd wright home and studio

The Frank Lloyd Wright Home and Studio.Photo: Courtesy of Frank Lloyd Wright Trust, Chicago. Photographer: James Caulfield

For many architecture buffs, the very first stop on a trip to Illinois is the Frank Lloyd Wright Oak Park Home and Studio, the architect’s primary residence from 1889 until 1909. Every day, visitors from across the world travel to the quiet Chicago suburb, which today has the highest concentration of Wright buildings. While in the area, a visit to Wright’s own Oak Park home and studio offers the opportunity to see where many of these structures were designed and how the legendary architect himself lived. Before setting up shop at Taliesin in Wisconsin and later Taliesin West in Arizona, Wright was at work establishing himself and figuring out his distinctive architectural eye in Oak Park. Below, everything you need to know about the Frank Lloyd Wright Home and Studio.

History of Frank Lloyd Wright’s Home and Studio

At age 22 in 1889, Wright was a budding architect and newly married to his first wife, Catherine Lee Tobin Wright. He was working for the architecture firm Adler & Sullivan and still years away from taking on his first independent commission and opening his own practice. With money borrowed from his boss, Louis Sullivan, he bought a lot on Forest Avenue in Oak Park and built a home for himself and his wife. In its first iteration, the residence was modest in size, with a primary bedroom, a nursery, and a work space. In 1895 the first major addition was completed, a project that included reconfiguring the downstairs to allow for a larger dining room and a new maid’s room. Upstairs, a playroom was added and the workspace was divided into two bedrooms for their growing family—by the fall of that year, they had welcomed four of their six children.

Playroom inside the frank lloyd wright theater

The playroom in the Frank Lloyd Wright Home and Studio.

Photo: Courtesy of Frank Lloyd Wright Trust, Chicago. Photographer: James Caulfield

Wright left Adler & Sullivan in 1893 after a dispute surrounding his independent projects, and he opened his own practice that same year. In 1898, after working in downtown Chicago offices for years, he built a studio wing in his home, which would allow him to be closer to his family and his commissions, many of which were being built in Oak Park. Attached to the home via a passageway, but with a separate entrance on Chicago Avenue, this addition included an office, a double-height drafting room with a balcony on the upper level, a reception hall, and a library.

“This is where he really began his architectural career,” Frank Lloyd Wright Trust curator and director of interpretation Sarah Holian says. “You get to see not only how he created a home for his family—he had six children in what is really quite a modest-size home—but also where so many of the early Prairie designs that he’s known for were created in the adjacent studio.”

Wright left Oak Park and separated from Tobin Wright in 1909. Before leaving, he divided the studio and the home, allowing Tobin Wright and the children to live in the studio wing and rent out the house for income. Wright sold the property in 1925 and later owners divided the building into six units and neglected to preserve the historically significant property.

The restoration of Frank Lloyd Wright’s Home and Studio

In 1974, the Frank Lloyd Wright Home and Studio Foundation and the National Trust for Historic Preservation bought the property and set to work restoring the structure. The organizations strived to bring it back to the state it was in 1909 before it had been subdivided. According to the Chicago Tribune, the process took 13 years and $2.5 million, not adjusted for inflation. The project involved removing modern updates, like shag carpeting, and restoring water-damaged walls, among other adjustments. The studio’s foundation was stabilized and a basement was dug out, providing a space to store the Trust’s archive and collections.

Drafting room in the frank lloyd wright home and studio

Wright’s drafting room in his Oak Park studio.

Photo: Courtesy of Frank Lloyd Wright Trust, Chicago. Photographer: James Caulfield

“There is no question in my mind that, of all of my grandfather’s buildings that have been restored, the Home and Studio has received the finest restoration,” the late Eric Lloyd Wright, architect and grandson of Frank Lloyd Wright, wrote in the foreword to Building a Legacy: The Restoration of Frank Lloyd Wright’s Home and Studio.

Architectural details of Frank Lloyd Wright’s Home and Studio

The original home—first built in 1889, then expanded in 1895—is defined by its high-pitched roof. This element makes it an outlier among Wright’s most well-known residences, whether Prairie or Usonian, which Wright designed later in his career and generally have a flatter profile. “I think people are surprised when they visit for the first time that his home isn’t a Prairie-style home, which he’s so well known for in the Chicago area and certainly for his early career,” Holian says. “It’s a shingle-style structure, which I think is surprising to many people when they come to visit if they haven’t seen photos.” Indeed, the building’s geometric profile is imposing in an entirely different fashion than the well-known Robie House, the definite example of the Prairie style with its long and low profile.

Like the residence wing, the studio wing is clad in cedar shingles and brick, creating a sense of visual continuity between the additions and the original house. Located on opposite sides of the studio wing, the library is octagonal in shape and the drafting room’s upper section is octagonal too, giving the structure a unique geometric façade.

Exterior of the frank lloyd wright home and studio

The exterior of the residential portion of the property.

Photo: Courtesy of Frank Lloyd Wright Trust, Chicago. Photographer: James Caulfield

One of the most striking architectural elements of the home is the playroom. The space features a barrel-vaulted ceiling topped by skylights filtered with wood grilles and a mural designed by Wright and painted by Charles Corwin. Accessed through a dark hallway, it’s an early example of Wright’s affinity for “compression and release,” in which a relatively cramped and dim area gives way to a spacious, bright room.

As Holian points out, barrel-vaulted ceilings are just one of many details in the house’s design that would go on to appear in Wright’s later commissioned work—in this case, in the Dana-Thomas House in Springfield, Illinois. “It was his living laboratory, [Wright was] trying to see what designs worked in place as he was living through them,” Holian says.

Interior design inside Frank Lloyd Wright’s Home and Studio

Natural materials and earth tones are employed throughout the Frank Lloyd Wright Home and Studio, with green hues in particular used in light fixtures, upholstery, and stained glass. Detailed woodwork is a constant, and it’s particularly crucial in the living areas and studio. In the early days of the home, the ceiling in the entry, dining room, and living room was painted light green, while the lower half of the walls featured dark green paint, per The Plan for Restoration and Adaptive Use of the Frank Lloyd Wright Home and Studio, which meticulously recounts the home in its various stages. The dining room walls were slightly glitzier, with a gold overlay pattern on the lower half of the walls. Light green was used again in the kitchen for both the ceiling and the walls. Throughout, the green tones were balanced with trim painted red or oak trim with a honey stain.

Both the playroom and the primary bedroom feature custom murals, and the latter features a frieze on each of the side walls too. “Wright never really said that many other artists inspired him, with the exception of Louis Sullivan,” Holian says. “One of the really wonderful tributes to Sullivan in the home is a stencil on the primary bedroom wall that Wright borrowed from the Auditorium Building that he worked on with Sullivan, so we see that very direct influence there.”

Dining room looking south table and chairs in foreground and 1897 modifications to the bay are not present platform and...

Dining room looking south, table and chairs in foreground and 1897 modifications to the bay are not present, platform and two rows of windows visible, at the Frank Lloyd Wright Home and Studio, located at 951 Chicago Avenue, Oak Park, Illinois, circa 1895–1897. (Photo by Frank Lloyd Wright Preservation Trust/Getty Images)

Photo: Frank Lloyd Wright Preservation Trust/Getty Images

Much of the furniture and artwork that’s in the home nowadays are authentic pieces from when Wright inhabited the space, donated or acquired from the Wright and Tobin family beginning in the ’70s. For example, per Building a Legacy, the original dining chairs were at Taliesin in Wisconsin when the restoration of the Oak Park home and studio began. The committee wrote to Olgivanna Wright, Wright’s widow and then president of the Frank Lloyd Wright Foundation, who agreed to donate six of the chairs to the home. Years later, the remaining two dining chairs were brought to Oak Park too.

Frequently Asked Questions

What is Frank Lloyd Wright’s Home and Studio?

Frank Lloyd Wright’s Oak Park Home and Studio is a house museum located in Illinois. Wright himself lived at the property from 1889 to 1909. Many of Wright’s Prairie-style buildings were designed at the studio space on the property, including the Robie House and Unity Temple. The home has been open to the public for tours since 1974 and it was designated as a National Historic Landmark in 1976.

When was the Frank Lloyd Wright home and studio built?

The home was built in 1889 and frequent updates were made by Wright throughout his 20 years living and working at the property. These changes track the main events of Wright’s life, like an architectural biography of the legendary architect. The first addition came in 1895, after Wright’s fourth child was born. He remodeled the kitchen to give himself a larger dining room where the whole family, plus guests, could comfortably dine. According to The Plan for Restoration and Adaptive Use of the Frank Lloyd Wright Home and Studio, this was the first “total environment” in Wright’s career, including “architecture, interior design, furniture, integrated lighting, and heating.” The scheme included a custom grille made of oak veneer that featured oak leaves and geometric shapes. This round of renovations also included converting the original dining room into a study, and adding more space to the east side of the house for a maid’s room, kitchen, and hallway. He also replaced his upstairs studio with a children’s dormitory, rather than giving the children individual rooms.

Three years later in 1898, once he was well into his independent practice, Wright added a studio extension to save himself the headache of commuting. This addition included an octagonal library, a reception hall, Wright’s office, a drafting room, a vault, and tucked in the back, a passageway connecting the studio from the house. Having this much square footage for professional purposes allowed Wright ample space to work and sufficient separation between his home life and work lives—even if they were all on the same property.

Several smaller tweaks were made between the years of 1898 and 1909. Wright left Oak Park in the latter year with Mamah Cheney, a woman he’d fallen in love with after meeting her through her then-husband, a client. Before leaving, he converted the home for his children and wife, Catherine Tobin, to create a rental unit so that Tobin could bring some income in with the extra space. She and the children stayed in the home until 1918. In that same year, architect Rudolph Schindler lived in the apartment inside of the studio. Wright finally sold the building in 1925. It was owned by at least two different families after that, before the Frank Lloyd Wright Home and Studio Foundation purchased it.

How long is the Frank Lloyd Wright House tour?

There are multiple different tours available at the Frank Lloyd Wright Home and Studio. The guided interior tour takes 60 minutes and costs $20 as of this writing. The Inside and Out tour, which combines the guided tour of the interiors with a self-guided audio tour of the Historic District, runs one hour and 45 minutes and costs $30. Once a year, the Trust hosts the Wright Plus Housewalk in Oak Park, walking tour ($125 for the public and $90 for trust members). The event offers the opportunity to see inside architecturally significant public buildings and privately owned homes that are otherwise off limits to the public, in addition to the Frank Lloyd Wright Home and Studio. Tours can be booked directly on the Trust’s website.

Who owns the Frank Lloyd Wright home and studio?

The Frank Lloyd Wright Trust has been the sole owner of the architect’s Oak Park home and studio since 2012.

The Daily Front Page 13 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Atomic Dreams
article

More Bounce to the Ounce

by pavel_lishin·▲ 125 points·52 comments·mceglowski.substack.com ↗
A love letter to the rocket that everyone is too chicken to build

A love letter to the rocket that everyone is too chicken to build

My purpose, and my belief, is that the bombs that killed and maimed at Hiroshima and Nagasaki shall one day open the skies to man.

—Freeman Dyson, A Space Traveler’s Manifesto, 1958

The nuclear pulse rocket is what you’d get if you hired a 12 year old to get you to Jupiter. It works by farting a continuous string of nuclear bombs (at the rate of about one per second) out its back end and riding the ensuing blast waves on a giant shock absorber, like a pogo stick. A series of hundreds or thousands of nuclear detonations accelerates the spacecraft to pretty much any speed you want, and when it’s time to slow down, you just turn around and start nuking in the forward direction.

Simple, easy, and fun!

The performance on this thing is sensational. Rocket engineers have always been stuck having to choose between thrust and efficiency. Chemical rockets that are powerful enough to get things off the ground (like Saturn V or Starship) are hopelessly inefficient, while the efficient ion motors we put on probes and satellites have only a few ounces of thrust. It’s like forever being forced to choose between an electric tricycle and a top fuel dragster, with no middle ground.

Like an El Camino rolling coal, nuclear pulse rockets occupy that missing middle. The energy density of nuclear fuel gives them incredible miles to the mushroom cloud, while thrust is only limited by how much the hammering the spaceship can take before shaking apart. Where the Apollo rockets had six stages and a mass ratio of about 540:1 (for every kilo of astronaut or spacecraft that landed back on Earth, you needed more than half a ton of fully-fueled rocket on the launch pad), a nuclear pulse rocket has a mass ratio closer to 1.5. It can take off from Earth, land 4,000 tons of scientists and equipment on Mars, and come back in one piece to refuel, as many times as you want.

That kind a mass budget is what Mars mission planners call ‘ample’. Consider that the International Space Station, the biggest object ever assembled in space, weighs 400 tons. Nuclear pulse propulsion means no more worrying about life support or radiation. You can stock the inside with all the oxygen and frozen steaks a crew can eat, encase the whole thing in radiation-blocking plastic, cap it with a glass-domed rotating casino for the view, and still have room for the thousands of fission bombs (dispensed like coke cans) you will need to detonate to get the thing moving. A crew on such a rocket would travel to Mars in comfort and style and arrive refreshed.

For that matter, they could travel to Saturn and arrive refreshed. An early 1958 design envisioned sending a crew of 20 to Enceladus and back within a span of three years, or about as long as it would take to fly astronauts to Mars and back on a conventional mission using chemical rockets. And they could do it in a fully reusable vehicle on a single launch from Earth.

In short, the nuclear pulse rocket solves all of the problems that plague chemical rockets, albeit at the cost of replacing them with much bigger, scarier problems.

Here are some other representative missions enabled by nuclear thunder:

  • Soft-land 5,700 tons on the Moon (compare to 17 tons for Apollo)
  • Land a 1300 ton payload (three times the mass of the International Space Station!) on Enceladus and return it to Earth on a 3 year round trip.
  • Send a crew of 20 on a two year round trip to Callisto or Europa (with enough shielding to make Europa survivable)
  • Send a crew of 50 on a 200 day round-trip to Mars, with 30 day surface stay
  • Send 10,000 tons to medium Earth orbit.

Orion capabilities. Table adapted from George Dyson’s book Project Orion

Unlike every other kind of spacecraft, the only size constraint on a nuclear pulse rocket is that it can’t be too small. A practical nuclear pulse rocket—and just typing the adjective ‘practical’ here kind of sets my heart racing—weighs around 4,000 tons, about the size of a decemt apartment building. But you get much better performance if you build one the size of a cruise ship, or a city.

Like so many good ideas, nuclear pulse propulsion started with a Polish guy living in New Mexico. While working at Los Alamos in the 1940s, the mathematician Stanisław Ulam sketched out an idea for a spacecraft that could be accelerated by small nuclear explosions behind it. Freeman Dyson and Ted Taylor (the Rembrandt of American nuclear weapons design) later fleshed out the idea at General Atomic and got it modestly funded in the wake of the 1957 Sputnik panic.

Even in the 1950s, it was hard to get anyone with budget authority to stop screaming long enough to appreciate the benefits of the design. And so the budgets for Project Orion were always stingy; no one wanted to take the responsibility of actually making the rocket happen. A toy version of the design was built and tested (with conventional explosives) in 1959, and the project came within a whisker of having a proper atomic test before luck and funding ran out in 1964.

It would have worked great! Like with so many nuclear technologies, whether or not it worked was really low on the list of problems with it.

Declassified image of a 200 ton test version of Orion.

Principles of operation

The nuclear pulse rocket as envisioned in 1958 was a 4,000 ton behemoth that looked like a cartoon bullet, attached by a forest of shock absorbers to a broad, flat pusher plate.

The plate was a flat disk of metal that weighed about 1/6 as much as the ship proper. It’s easiest if you imagine it as a piston in a big two-stroke engine.

The full propulsion cycle looks like this:

  1. A small (0.1-3 kiloton) nuclear bomb detonates about a hundred meters behind the pusher plate. The explosion vaporizes a disk of propellant (this can be anything from ice to metal to the crew’s own stored waste) and flings it at the plate at a velocity of many thousands of kilometers per second.
  2. The plasma cloud hits the pusher plate, accelerating it with the force of a cannon shot. The intense heat of the collision ablates away a thin layer of oil on the pusher plate, protecting the main body of the plate from damage.
  3. Giant airbags and shock absorbers turn the impulsive acceleration on the pusher plate into a longer pulse gentle enough (2-4 g) to be endurable by a human crew, and transmit it to the spacecraft.
  4. A spritzer spritzes the plate with a fresh layer of oil.
  5. The compressed shock absorbers rebound and return the pusher plate to its original position just as another bomb reaches the detonation point.

You can think of the process like accelerating a golf cart by hitting it with a sledgehammer. How rough the ride is depends on the size of the spacecraft, the size of each bomb, and how far the shock absorbers travel in each stroke.

The bombs go off about once or twice a second, and every explosion adds about 20 mph to the vehicle’s speed. It takes 200 bombs to get Orion out of the atmosphere, and another 600 or so to put the spacecraft in a 300 mile circular Earth orbit.

Normally we think of nuclear bombs as vaporizing everything around them. The Orion concept works by minimizing the time the plate spends in thermal contact with nuclear debris. A round trip to Mars and back might involve 2,000 nuclear detonations, but the pusher plate will have spent a total of less than one second in contact with superhot plasma. The same technique that lets you carry a hot potato comfortably by tossing it hand to hand gets you to the outer planets.

What could go wrong?

It’s a Gatling gun for atomic bombs, what do you think can go wrong? But Orion has some fascinating ways to fail besides the obvious.

One challenge is how to handle a dud. In normal operation, the pusher plate rebounds against each successive explosion like a racket bouncing off of a tennis ball. If a bomb fails to go off, the rebounding piston will want to fly off the back of the rocket into space. So you need a mechanism to arrest its momentum, along with special procedures for firing a half-charge to restore it from a hyperextended state to a neutral position.

Another interesting failure mode is a fizzle—a scenario where the chemical explosives in the nuclear bomb go off, but fail to detonate the nuclear pit. Remarkably, this is far more dangerous to Orion than an atomic blast. The pusher plate is designed to absorb the impact from a uniform cloud of hypervelocity plasma, not sharp chunks of shrapnel. So a lot of design work has to concentrate on making sure the pusher plate isn’t dinged up too badly by flying debris from a conventional explosion.

The most complicated part of Orion is the mechanism for delivering bombs to the correct spot behind the pusher plate. The bombs are heavy (several hundred pounds) and have to arrive at a point a couple hundred meters behind the spacecraft with precise timing. You are basically building an accurate, low-velocity machine gun for nuclear shells.

Several mechanisms were considered: one was a series of angled tubes arranged around the rim of the spacecraft, which would only be exposed when the piston was maximally compressed at the top of the stroke. Another was a rocket launcher that would send little nukes curving around the edge of the pusher plate, detonating when they reached a pair of crossed radar beams. Since the core problem (reliably delivering identically sized containers from a rack) had already been solved in Coca Cola vending machines, Orion famously consulted with that company to help with aspects of this design.

But the biggest technical obstacles facing Orion had to do with computers, not nukes. One was navigation; a big reason the early design had a crew of 20-40 was that so the boys in the nose could get to work with graph paper and sextants when it came time to steer the spacecraft.

Another was making sure bombs with the right yield were fired in the right sequence during takeoff (a problem that became trivial with dial-a-yield fission weapons developed just a few years later).

And there were fundamental questions of design. How turbulence in the plasma wave would interact with the pusher plate was a question only atomic testing could answer in 1959, though it would be easy to simulate on computers today.

An early five-shot proof of concept that actually flew, using conventional explosives.

Drawbacks

There are some drawbacks to the nuclear bomb rocket.

For one, there’s the matter of launching any of this into space. Unless you start nuking Florida from ground level (and I’m not saying ‘no’), you need dozens of traditional rockets to lift this affront to God and Nature into orbit. Even then, its fission products will get caught in the Earth’s magnetic field and eventually spiral their way back home.

But probably the biggest drawback of nuclear pulse propulsion is the thousands of nuclear bombs.

It was not lost on potential funders that whoever sat in the pilot’s chair of this rocket would immediately command one of the largest nuclear arsenals on Earth. All it needed to turn Orion into a Pez dispenser for Armageddon was to redirect the bombs a little bit so they rained down on Earth instead of exploding against a pusher plate.

The list of launch hazards for Orion was also spectacular. A serious accident on the launch pad would cook off thousands of tons of high explosive and contaminate a huge area downrange of the spacecraft with plutonium. An out-of-control Orion zigzagging around the sky would also be a memorable sight, for anyone who was not instantly blinded by it (another awkward hazard). And how exactly do you handle range safety on a 4,000 ton vehicle full of atomic bombs?

Or consider the question of misfires. While the ship could be built to tolerate duds, each misfire meant that someone along the flight path was waking up to an almost-functional nuclear bomb in their backyard.

Some of these risks could be mitigated by launching Orion from remote Pacific islands. But the problem of fallout was pernicious. The 200 explosions that get Orion out of the atmosphere are the equivalent in fallout terms to a ten-megaton air burst. Back in the 1950s, when we were firing multi-megaton H-bombs every other Tuesday, this didn’t seem so bad. But we live in more delicate times, and the problem doesn’t go away once the vehicle reaches space. Any bombs that explode in Earth orbit create clouds of charged particles that eventually fall back down on Earth. Unlike the ascent plume, this fallout is not localized, and settles on the just and unjust alike.

Efforts to ameliorate the fallout problem run us into the final drawback, which is a little bit more abstract. To get the most out of its nuclear fuel and minimize fallout, Orion needs to use shaped nuclear charges with very low yield, that consume as little fissile material as possible. But these happen to be the worst kinds of nukes imaginable from a proliferation standpoint.

No one is really afraid of terrorists blowing up a big, meaty H-bomb that has to be carted around in a truck and needs a couple hundred kilograms of plutonium to detonate. But at the low end, nuclear weapons can be made frighteningly small and light. Ted Taylor describes a working six-inch atomic bomb that he could hold in one hand, while strongly hinting that bombs made with even smaller amounts of fissile material are feasible, provided you’re willing to wrap them in a lot of conventional explosive.

Unfortunately, addressing the fallout problem exacerbates the political problems that doomed Orion in the first place. The best rocket design we have unavoidably pushes the frontiers of nuclear miniaturization, a technology that is inherently destabilizing to a fragile status quo.

And that’s why no one today is riding Orion to the stars.

Benefits

Let’s not be negative Nellies, though. There is also a lot of good to say about the nightmare bomb rocket!

Engineers have been so beaten down by the rocket equation that it can be hard for them to grasp the full possibilities of a spacecraft unconstrained by weight. Rocket design has always been about squeezing the last drop of performance out of lightweight materials. Nuclear pulse rocket design is more about making sure the billiards table stays level during acceleration, and that the ship’s wine cellar strikes the right balance between tannic reds and dry whites. In his blueprints for Orion, Ted Taylor always made sure to include a heavy barber’s chair, just to drive home the point that this was a new class of vehicle.

Only three components on a nuclear pulse rocket need to be built to a high engineering tolerance: the shock absorbers, the bomb dispenser, and the bombs themselves. Everything else can be riveted together out of whatever material is handy. In other words, the nuclear pulse rocket is the thing Starship aspires to be: a rocket that is cheap to mass-produce, fully reusable, and capable of rapidly colonizing the solar system. The only hitch is that no one wants to give Elon nukes.

The fact that nuclear pulse rockets are huge and fast solves the hardest problem of interplanetary travel: protecting crews from radiation. Galactic cosmic radiation is annoyingly dangerous and extremely penetrating, to the point where you need something like ten meters of polyethylene or water to provide protection on par with Earth’s atmosphere. Galactic cosmic rays also have the awkward property that partial shielding can be worse than none, since secondary radiation created when high energy particles collide with the shielding can do more damage than the particles themselves.

Because GCR flux gets worse the further out you go in the solar system, and because voyages to the outer planets would necessarily last many years, cosmic rays set a practical limit to human exploration with chemical rockets. The moon is reachable, Mars is marginal, but anything further than that is off-limits.

There is no way a chemical or nuclear thermal rocket could ever carry adequate shielding against cosmic rays1. But Orion can. Nuclear pulse rockets can be built large enough and fast enough to make trips to Jupiter or Saturn with low cumulative radiation exposure, and armored with enough shielding to protect the crew not only from cosmic rays, but from the intense planetary radiation at desirable destinations like Europa.

And the bigger you make your rocket, the easier it gets to throw in artificial gravity, solving the other big physiological problem of space flight. As I wrote about in an earlier post, you need a structure about 112 meters in diameter to get a livable rate of spin at 1g. If you’re using chemical rockets, you’re limited by the fairly narrow diameter of the rocket fairing, and so spacecraft big enough to provide spin gravity have to be assembled in orbit. But 112 meters is a perfectly workable diameter for nuclear pulse rocket. All you have to do is spin one up once it’s headed in the right direction and live comfortably on the walls until you reach your destination.

As a last benefit, nuclear pulse rockets solve the entry and landing problem on distant worlds through brute force. Instead of worrying about aeroshells and supersonic retropropulsion, you can just null out your orbital velocity, then make judicious use of nukes to slow your descent straight downwards. If you’re squeamish about nuking your landing area, you can always switch to parachutes or chemical retro-rockets at the last minute, or deploy a dedicated lander, like one of those mega-yachts that carries a smaller superyacht as cargo.

The point is you’ll be landing 1950s torch-ship-style—slowly and under full control, without needing to husband every ounce of propellant. Abundance!

A model of Orion in its Air Force configuration as a flying arsenal.

The Four Eras of Project Orion

We came very, very close to building this thing!

Like Taylor Swift, the nuclear pulse rocket went through several distinct eras in its development.

The Daily Front Page 14 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Small Databases, Real Lessons
article

Learning a few things about running SQLite

by surprisetalk·▲ 213 points·54 comments·jvns.ca ↗
SQLite is still a database, databases are complicated

Hello! I’ve been working on a Django site recently, and I decided to use SQLite as the database. When I was getting started with using SQLite as database for a website I read a bunch of blog posts about how it is totally fine to use SQLite in production for a small site and I think it is totally fine, but what I did not fully appreciate is that SQLite is still a database, databases are complicated, and I do not know a lot about operating databases.

So here are a couple of small things I’ve been learning about running SQLite. This is the 4th website I’ve used SQLite for, and I think this one is harder because with the power of the Django ORM I’ve been making the database do more work than I was previously without Django.

I started by turning on WAL mode like all the blog posts said to do and hoping for the best.

ANALYZE is apparently important

Today I was running a query (using SQLite’s FTS5 for full-text search) on a table with 4000 rows and it took 5 seconds. That seemed wrong to me: computers are fast!

It turned out that what I needed to do was to run ANALYZE! Immediately the problem query went from taking 5 seconds to like 0.05 seconds (or some other number small enough that I didn’t care to investigate further). I still don’t know exactly what went wrong in the query plan, but my best guess is that it was some sort of accidentally quadratic thing.

ANALYZE generates “statistics” (I guess about the number of rows in each table? and presumably other things?) so that the query planner can make better choices.

Maybe one day I’ll learn to read a query plan.

cleaning up the database is tricky

Occasionally I’ve run into situations where I accidentally put a bunch of rows in my database that I don’t want to be there (for example completed tasks from django-tasks-db), and I want to clean them up.

What’s happened to me a few times in this case is:

  1. I run some kind of command to clean up the rows
  2. The command takes more than 5 seconds, since there are a lot of rows (though I still have some questions about why these DELETE statements are so slow honestly, maybe there’s a bunch of Python code running inside a transaction, I’m not sure)
  3. One of the other workers tries to write the database while this is happening, and times out after 5 seconds (I have a timeout of 5 seconds set)
  4. The worker crashes because it couldn’t write to the database and the VM shuts down

My approach so far has been to just do these cleanup operations in small batches so that I don’t need to do database queries that take more than 5 seconds to run. This whole experience has given me more of an appreciation for why someone might want to use a “real” database like Postgres which can have more than one writer at the same time though.

Maybe in the future I’ll just take the site down for scheduled maintenance instead when I need to do this kind of thing, but I haven’t figured out a workflow for that yet.

no notes on performance of ORM queries yet

So far I’ve been using Django’s ORM to make any query I want without paying any attention at all to query performance and it’s mostly been going okay other than the ANALYZE thing. The database is pretty small (maybe 10000 rows?) and I expect it to stay pretty small forever, so I’m hoping that that plan will keep working.

backing up sqlite

I’ve done SQLite backups a couple of ways. I don’t think I’ve actually tested restoring from my backups but I do usually try to monitor them with a dead man’s switch.

way 1: restic

sqlite3 /data/calendar.db "VACUUM INTO '/tmp/calendar.sqlite'"
gzip /tmp/calendar.sqlite

# Upload backup to S3
# Sometimes the backup gets OOM killed and so it stays locked, do an unlock
restic -r s3://s3.amazonaws.com/some_bucket/ unlock
# Do the backup & prune old backups
restic -r s3://s3.amazonaws.com/some_bucket/ backup /tmp/calendar.sqlite.gz
restic -r s3://s3.amazonaws.com/some_bucket/ snapshots
restic -r s3://s3.amazonaws.com/some_bucket/ forget -l 1 -H 6 -d 2 -w 2 -m 2 -y 2
restic -r s3://s3.amazonaws.com/some_bucket/ prune

way 2: litestream

I started trying out Litestream recently because I felt like doing incremental backups might be more efficient: my restic backups were sometimes getting OOM killed, and I was a bit tired of it. Basically I just write a config file and run:

litestream replicate -config litestream.yml

I set retention: 400h in my config file in an attempt to retain some amount of history of the database but I have no idea if it works.

I’ve been backing up to AWS, which is always a pain because it’s annoying to navigate the AWS console to generate credentials. Maybe one day I’ll move away to some other S3-compatible alternative.

you can use multiple databases

My current project only has one database, but one trick I used with Mess with DNS was to split the tables into three separate database files because I didn’t actually need my tables to be in the same db. I think it was helpful.

Mess with DNS has been running on SQLite for 4 years now (since 2022) and it’s been great, I think the move from Postgres was a great choice for that project.

that’s all!

It’s always kind of fun to see how long it takes me to learn sort of basic things about the technologies I’m using. I think I used SQLite for a web project for the first time in 2022 and I only learned that ANALYZE existed today! I imagine in a year or two I’ll be learning about some other very basic feature.

some references

Some blog posts I’ve looked at, other than the official docs:

The Daily Front Page 15 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Which Lisp?
article

A Road to Lisp: Which Lisp

by silcoon·▲ 184 points·136 comments·scotto.me ↗
Lisp is not like that.

Most programming languages evolve as a single language. Python, Java, Javascript, C++, have new versions and standards, multiple implementations, but they still remain the same language. C and C++ can be compiled with GCC or Clang, Python can be compiled with CPython or PyPy, the same JavaScript runs in both Firefox and Chrome, and Java programs can run on JVM or GraalVM.

Lisp is not like that.

[Lisp Logo]

Lisp logo, NASA version.

The Wikipedia page lists more than 20 different dialects, which means there are many variations to choose from. That’s because Lisp is a family of programming languages. They share the same fundamental syntax but differ in their operators, semantics, standard libraries, and language capabilities.

One of the main concerns Lisp beginners have is which dialect to learn first. I see this question frequently asked in online forums. The answer is that the dialect matters, but not as much as a beginner might think. Learning Lisp is about learning a new type of programming. A new way of thinking about problems using code. You will learn the fundamental concepts with any dialect. Then, once you have learned one, it will be relatively easy to switch to another.

I will briefly present the most relevant dialects that are actively used and maintained. I’ll try to highlight their strengths and weaknesses to help you overcome your indecision and pick one to start your Lisp journey.

If you are a beginner, many of the concepts in this article might be completely new to you. Don’t worry too much about them yet. When I was a beginner, I found many of these concepts fascinating and they pushed me to learn more about the Lisp world.

Common Lisp

Abbreviated as CL, it is the most mature and comprehensive of all Lisp dialects. It’s considered the old-school Lisp, since the language — I will call it a language from now on — was standardised in 1994 with a formal ANSI specification. Thanks to this standardisation, there are multiple implementations of Common Lisp targeting different platforms and use cases.

The most famous implementation is SBCL, which compiles directly to native code. It is fast, open-source, and compatible with modern hardware. With it, well-written Common Lisp code can achieve performance comparable to C and Rust. Because SBCL optimises heavily, it compiles a bit more slowly than other implementations but generates some of the fastest code in the Lisp family.

[Common Lisp Logo]

The Yin and Yang Common Lisp logo. The lambda symbol (λ) refer to lambda calculus invented by Alonzo Church.

When I said above that Common Lisp is the most comprehensive dialect, I meant that it offers the broadest set of features among all Lisps. It provides a large amount of functionality out of the box, much of it defined directly in the standard. For example, CL has functions for controlling compilation and evaluation from within the language itself (COMPILE, LOAD, EVAL, COMPILE-FILE, and others). This means that I can use these functions in my code or at the REPL to tell the Lisp process to compile a function, load a file, or evaluate some code. CL also provides DISASSEMBLE, which lets you inspect the machine code generated for a compiled function.

Common Lisp has a condition and restart system, which is one of the most powerful way I ever saw to debug and inspect programs. If a condition occurs during execution, the Lisp process might stop and let you inspect the state of the program and its variables at that point in time. You can then choose to restart the program and maybe retry the operation, or ignore the condition and continue execution. This is also possible because the Common Lisp REPL is deeply integrated with the running system. If your program fails on a remote server, you can connect to its REPL and inspect the live process to understand what went wrong.

Common Lisp supports all major programming paradigms, like functional, imperative, metaprogramming, and object-oriented programming. It offers one of the most advanced object systems, called CLOS, which supports features such as multiple dispatch and generic functions. This makes OOP more flexible than in common object-oriented languages such as Java or C++. It is also worth noting that Common Lisp is dynamically typed but has a rich and expressive type system with optional type declarations.

Standardisation means that the language is stable. The ANSI Common Lisp from 1994 is still the one in use today. Because of it, lispers rarely fall victim to backward incompatibility, and old Common Lisp code often still runs perfectly today. For example, if you go through old Lisp books such as PAIP by Peter Norvig, published in 1991, you’ll find that much of the code still runs on modern implementations. With Common Lisp, you encounter far fewer of the incompatibilities typical of languages like Ruby and Python. Even Common Lisp libraries that haven’t been updated recently will often still run fine on your system because they don’t need to be continually adapted to new versions of the language.

Common Lisp lacks some conveniences that have become common in newer languages, such as concise literals for a wider variety of data structures, persistent immutable collections, lazy sequences and built-in general-purpose pattern matching. Common Lisp was designed in the 1980s by consolidating several existing Lisp dialects into a single language. Its designers chose to retain much of the syntax and patterns of those older dialects, making sure that existing Lisp programmers could adopt the language without having to learn a completely new syntax.

Common Lisp doesn’t have a central direction or corporate sponsor. The community is relatively small and spread across several implementations, projects and communication channels. It’s mostly made up of volunteers who help keep the language alive. It can be a bit difficult to find guides and help: tutorials are often either too simple or too advanced, and documentation is not always easy to find.

It’s currently used in quantum computing at Rigetti Computing, and has been used at Grammarly for its core grammar service and also powers Google Flight Search. Worth mentioning is Kandria, an open-source video game released on Steam and written entirely in Common Lisp.

An interesting fact: Paul Graham originally wrote HackerNews in a custom Lisp dialect called Arc, based on Racket. Today, Daniel Gackle (@dang) reimplemented it in Clarc, a Common Lisp implementation of Arc that runs on SBCL1, serving around 10 million pages per day.

Where Common Lisp shines

CL compiles to native code on all major operating systems and can achieve fast execution, at the cost of slightly slower startup times, so it’s great for long-running processes. It offers one of the most powerful REPLs among Lisp dialects and can be considered, despite its steep learning curve, one of the fastest languages for writing solid software in a short time.

CL shines when you need to do research and prototyping with quick iterations, as in quantum computing, or when the specifications aren’t fully defined yet and change frequently, requiring the software to adapt quickly, as in startups. Paul Graham wrote a famous and inspiring article about how Common Lisp helped his internet startup beat the competition.

Learning resources

A good starting point is A Road to Common Lisp by Steve Losh, which inspired me to write this series. One of the most accessible books for beginners is Practical Common Lisp by Peter Seibel, which is available entirely online. It’s the best introduction to the language I’ve read, as the most important concepts are neatly separated into chapters. A more playful introduction is Land of Lisp, which uses funny characters and comics to teach programming through games. A more advanced book that I enjoyed is On Lisp by Paul Graham, which is entirely dedicated to macros.

The best IDE support for CL is Emacs + Sly/Slime (Doom already has support for it) or Vim + VLime. A weaker alternative is VSCode + Alive.

One of the best resources for beginners is The Common Lisp Cookbook, which has many up-to-date tutorials. For references and libraries, the Awesome-CL list is worth a look. I also printed my own copy of the Common Lisp Quick Reference booklet, which can be faster than finding information in the CL HyperSpec.

Clojure

Rich Hickey created it during a sabbatical year, frustrated by clients refusing to let him use Common Lisp instead of Java and C# because they were concerned about compatibility and maintenance issues. So he decided to write a new Lisp language targeting the JVM, allowing it to access everything the Java ecosystem had built over decades and making it a practical language from the start. The deal is that Clojure provides the language, while the host platform — the JVM — provides the runtime.

Clojure compiles directly to JVM bytecode, which means it’s compatible with any codebase that runs on the JVM (Java, Kotlin, Scala). This compatibility means that Clojure can coexist with other JVM languages in the same codebase, use Java libraries directly, and access all the features the JVM offers, such as OS portability, garbage collection, a fast and optimised runtime, and so on.

Rich Hickey chose to target the JVM so that he didn’t have to reinvent the wheel and build a new compiler for Clojure from scratch. Instead, he focused his efforts on reading research papers on language design and data structures, bringing some of the newest and most effective ideas into the language.

[Clojure Logo]

The Clojure logo, designed by Tom Hickey, Rich's brother.

The language at its core is composed of pure functions operating on immutable data structures. Instead of making mutable objects the primary way to represent changing state, it provides explicit mechanisms such as atoms, refs and agents for managing change. This design choice makes Clojure a functional programming language. It supports object-oriented programming, but replaces class-based inheritance with abstractions such as protocols and multimethods. Also the syntax is more modern than Common Lisp’s, with richer literals, destructuring, and overall more compact code.

Clojure also comes with several new features. Its persistent data structures use structural sharing, making immutable updates efficient. It also uses lazy sequences, which allow computations to be performed only when their results are needed. It has strong support for concurrency through constructs such as atoms, refs, agents and futures, and provides records and custom data types when more structured data is needed. EDN (Extensible Data Notation) offers a simple extensible data format based on Clojure’s literals, a better lispy alternative to JSON, YAML and similar. Clojure doesn’t have types, but clojure.spec can be used to describe, validate and generate data without introducing a static type system, useful in large applications.

Rich Hickey designed Clojure with the intention of prioritising stability, similar to what standardisation did for Common Lisp. Even though the language is actively developed, you don’t need to expect major deprecations when updating to a newer version, since the maintainers preserve backwards compatibility and mostly add new features through core libraries.

Since Clojure is designed to be hosted on other platforms, it can be ported to other runtimes, like the JavaScript engine that runs in your browser. ClojureScript is a Clojure compiler that targets JavaScript rather than the JVM, so the same language can run on both the server and the browser. This means that Clojure can be used as a full-stack language.

The JVM integration is great, but it comes with some trade-offs. Error messages are contaminated with a lot of Java implementation details and aren’t always self-explanatory, so stack traces are not necessarily helpful when debugging issues. Java profilers like YourKit are compatible, but even there you will see a lot of Java classes, and it can be hard to map them back to the code you wrote.

In general you don’t need to know Java to learn Clojure. I didn’t know Java when I started and never had substantial problems because of that. However, knowing how to tweak the JVM can be helpful when doing performance tuning on the server.

The community around Clojure is small but active and happy to help newcomers pick up the language quickly. It’s known as Clojurians and mostly hangs out on Slack, where you can also collaborate on open-source projects and find job opportunities.

Clojure is actively used by companies and startups around the world, and it’s probably the most widely used Lisp in production. Some big names include Nubank (one of the largest fintech companies in Latin America), which acquired Cognitect (the main sponsor of Clojure’s development), as well as Walmart, Netflix, Apple, Salesforce, Amazon, Cisco, and Grammarly.

Where Clojure shines

Clojure shines in large software systems where the workload consists of a lot of data processing, or more broadly, anywhere you might previously have picked Java. Code can be written and tested quickly through continuous iteration thanks to the REPL, making the language suitable for delivering reliable solutions in less time. Its immutable design helps eliminate some of the hardest concurrency bugs, while its functional orientation guides programmers towards writing programs as a series of data transformations.

Clojure is great in fields where operations need to happen quickly and often involve processing large sets of data, such as finance and trading. It’s also great for startups solving domain-specific problems with complex logic, since the language’s extensibility allows it to be modelled around the problem.

Learning resources

To give Clojure a try, you might want to check out Try Clojure, then solve some exercises like the Clojure Koans, followed by 4Clojure for more advanced stuff.

The official website offers some of the most curated material you can find, with great explanations of all the core features and the motivations behind the design choices that make the language special. Clojure also has one of the best documentation websites I’ve ever found for a language. All the core library functions come with docstrings, and the community has added usage examples, so you can quickly grasp what each function does.

The best pitch for the language is Clojure Distilled. It’s probably one of the shortest explanations of what Clojure has to offer.

After the release of Clojure, Rich Hickey became famous for a series of talks about software design, in which he shared his deep expertise in fundamental topics like simplicity in software design, state and time, databases, concurrency, and language design. Some of his best talks — Simple Made Easy, The Value of Values, Hammock-Driven Development, Are We There Yet?, and Design, Composition, and Performance. I highly recommend spending some time watching them, whether you choose Clojure or not.

Some good books are Clojure for the Brave and True by Daniel Higginbotham, which is free to read online and good for beginners. The one I bought is The Joy of Clojure, which is recommended for programmers who come from OOP languages like Java.

For editors, VSCode has Calva, a complete and rich extension for Clojure. If you use Emacs you can use Cider, plus there are extensions available for most editors/IDEs.

Racket

Racket is a modern dialect descended of Scheme. While other Scheme dialects are generally small languages, Racket has evolved into a fully featured language with its own unique features.

The code is compiled on every major platform and the language has been used in a lot of fields to create web applications, graphical interfaces, databases integration and mostly to quickly develop tools with graphics.

[Racket Logo]

Racket logo.

Racket is language-oriented, which means it’s designed for creating new programming languages. Every source file begins with #lang, which defines the language used by that module. You can create entirely new languages with their own syntax and semantics, while still using the Racket ecosystem underneath. Other Lisp dialects can easily build DSLs, but they are tied to Lisp. Racket advances the concept by making it easy to define completely new languages, without requiring them to use Lisp syntax.

Racket also comes with a wide range of features of features. It includes libraries for cross-platform GUIs, web servers, concurrency and parallelism, regular expressions, pattern matching, classes and objects, and an FFI for calling C code. Its package manager is integrated into the ecosystem, and a large collection of libraries is immediately available. Compared with other Lisp dialects, there is generally less setup required before you can start building something substantial.

Racket offers an advanced macro system, providing the same kind of macro support as other dialects, plus hygienic macros. Hygienic means that identifiers introduced by a macro don’t accidentally capture those in the surrounding code. This makes macros safer to write, especially for beginners, that don’t have to rely on gensym like in the other dialects.

Its macro system is another major strength. Racket supports powerful syntactic extensions, including hygienic macros, which prevent identifiers introduced by a macro from accidentally interfering with names in the surrounding code. This removes many of the name collision problems that beginners might struggle to handle manually when writing macros in other Lisps.

Static typing is supported with Typed Racket, a typed variant of the language that lets programmers add type annotations and have their code checked before execution. Typed and untyped Racket modules can also work together, so typing can be introduced where it is useful without requiring an entire program to be rewritten.

Even though Racket comes from the Scheme tradition and has strong functional programming roots, it supports multiple paradigms. Programs can be written using imperative programming, objects and classes, functional techniques, and metaprogramming.

The language installation comes with DrRacket, a great IDE with everything ready to use the language, available on all major platforms. It combines an editor, REPL, and debugger, in a single programming environment for writing and testing Racket code.

The main downsides are its small ecosystem and limited use in the industry. There are fewer libraries, projects and jobs compared to more popular languages. Performance and deployment can also be weaker points, especially compared with other compiled dialects.

Where Racket shines

Racket shines when designing new programming languages, building compilers and interpreters, or experimenting with new language features. This makes it particularly popular in computer science education and university research. Also, since it’s language-oriented, it’s a great choice when a program needs to provide a simple DSL, for example for customisation, without forcing the user to use a Lisp dialect.

Racket is ideal for prototyping, scripting, and projects where having a comprehensive set of libraries and development tools immedtialy available is important. It’s worth noting that other dialects offer GUI support through external libraries and wrappers, while in Racket it is available out of the box.

Learning Resources

Racket has a rich website with a lot of helpful information. Important resources for beginners include Quick: An Introduction to Racket with Pictures and The Racket Guide, which is the complete guide to the language. Also worth mentioning is Beautiful Racket by Matthew Butterick, a visually curated guide to the language written by a passionate contributor. If you’re looking to write a compiler, check out this course using Racket.

The best resource available for Scheme is SICP, also known as the Wizard Book. It’s not only about Lisp, but it’s a great book for learning the fundamentals of programming and programming languages. It’s also worth mentioning a rather unusual book, The Little Schemer, which consists of a long series of questions that forces the reader to think before looking at the answer on the page.

Special Mention

Elisp

Elisp is a specialised dialect that’s part of Emacs and is used to customise the editor. It’s an old Lisp dialect that comes with quite a few limitations, but it’s probably one of the best practical uses I’ve ever found for Lisp, beyond using it as a general-purpose programming language. It’s used to customise and extend the functionality of Emacs, since much of the editor itself is written in Elisp. By evaluating Elisp code inside it, you can change how Emacs looks and behaves in real time, without requiring a reload.

Learning resources

An Introduction to Programming in Emacs Lisp is freely available online. Another useful resource is Emacs Lisp Elements by Protesilaos Stavrou, an active Emacs contributor and advocate.

Syntax comparison

We can use a simple instruction interpreter to show some of the syntactic differences between the dialects.

(defun calculate (instructions)

  (loop with result = 0

        for (operation value) in instructions

        do (setf result

                 (case operation

                   (add      (+ result value))

                   (subtract (- result value))

                   (multiply (* result value))))

        finally (return result)))




(calculate '((add 5) (multiply 3) (subtract 4))) ;; => 11

In Common Lisp, I used the LOOP macro to iterate over and destructure each instruction, then perform the operation by updating local state. Notice that it carries an accumulator (result) through the sequence, essentially doing the same job as a reduce.

(defn calculate [instructions]

  (reduce

    (fn [result [operation value]]

      (case operation

        :add      (+ result value)

        :subtract (- result value)

        :multiply (* result value)))

    0

    instructions))




(calculate [[:add 5] [:multiply 3] [:subtract 4]]) ;; => 11

In Clojure, I used a reduction over the sequence of instructions. Notice that it doesn’t use or update any local state, since the reduction uses immutable accumulation. I also used some syntax that is specific to Clojure, such as vectors [] and keywords like :add, and destructured the contents of each vector with [operation value].

(define (calculate instructions)

  (for/fold ([result 0])

            ([instruction (in-list instructions)])

    (match instruction

      [(list 'add value)

       (+ result value)]

      [(list 'subtract value)

       (- result value)]

      [(list 'multiply value)

       (* result value)])))




(calculate '((add 5) (multiply 3) (subtract 4))) ;; => 11

In Racket, we use for/fold to iterate over the instructions while carrying the result from one iteration to the next. We also use pattern matching with match to destructure each instruction and identify the operation at the same time. For example, (list 'add value) matches a two-element list whose first element is the symbol add and binds the second element to value.

Which one to pick?

To summarise the above:

  • Clojure gives you modern syntax, functional programming and immutable data structures, great tooling and libraries, an almost drop-in replacement for Java, a full-stack language, a strong community, and maybe even a job.
  • Common Lisp gives you native compilation, high performance, the most powerful REPLs, multi-paradigm programming, and a stable, battle-tested language.
  • Racket gives you a feature rich language, a great IDE for beginners, a cross-platform GUI, a powerful platform for building new languages and DSLs, easily approachable for students.
  • Elisp gives you the ability to extend and customise Emacs.

For most programmers looking for a practical and elegant Lisp they could use professionally, Clojure is probably the safest first choice.

If you want to experience the traditional Lisp development model at its fullest, you want native compilation without rely on JVM, an exceptionally interactive environment and a huge language, choose Common Lisp.

If you are a computer science student, interested in compilers and programming-language design, or if you need a quick way to write tools or need an easy way to use a cross-platform GUI, choose Racket. This is probably the easiest to start with between the dialects.


If you have any questions of feedback, please send me an email.

Footnotes

  1. https://news.ycombinator.com/item?id=41683969 ↩︎
The Daily Front Page 16 of 26
Friday, July 17, 2026 The Daily Front No. 8 — The Z80 at Fifty
article

The Zilog Z80 has turned 50

by st_goliath·▲ 198 points·62 comments·goliath32.com ↗
The Zilog Z80 processor was officially launched 50 years ago

Introduction

As of writing, the Zilog Z80 processor was officially launched 50 years ago, in July of 1976, less than 4 years after the last human had walked on the moon, decades closer to WWII than to the present day, roughly at a half way point between the Kennedy assassination and the fall of the Berlin wall, closer to the Korean war than to 9/11 which is itself an event that happened a quarter of a century ago. (Sorry…)

The processor was extremely successful, being used in many 8 bit microcomputers, including early personal computers, home & hobby computers, as well as many embedded, industrial applications.

Together with the 8080 & 8085 that it is binary compatible with, it contributed to creating a de facto hardware standard for 8 bit micros, allowing a de facto software standard of CP/M, and Microsoft BASIC.

The Z80 itself also spawned many clones and derived architectures over the years, famously including the Sharp LR35902, used in the original GameBoy. Zilog themselves eventually gave up their line of 16 and 32 bit derived architectures and returned to Z80 based microcontrollers and variants like the pipelined and higher clocked eZ80, mainly for continued use in industrial applications.

I myself am much too young to have seen the home computing side of this (ignoring the aforementioned GameBoy), but the widespread use in industrial applications means that the original Z80 is still around and in use with Zilog finally discontinuing it mere 2 years ago.

My own first encounter with the Z80 was as a late teenager, when I was browsing an electronics company catalog, surprised to find them still being sold. I designed my own little Z80 computer and convinced a school teacher to let me use the photo lab at night, so I could etch some PCBs.

As several of my former teachers got curious what I was up to, I ended up hearing a lot of interesting anecdotes about old home computers, consoles and a story about DIY wire wrap computer in a Tupperware box, running CP/M and WordStar, hooked up to a "borrowed" IBM terminal that was used to write a thesis on. Over time I ended up being gifted a number of old chips from dusty drawers that made it into my own DIY project, including a bunch of MCS-85 parts, several Z80s, 8085s, 6502s and 6522s.

The whole thing sure taught me a number of interesting lessons about systems engineering and some unexpected ones (reliable power-on reset is surprisingly hard; writing a linker is a lot harder than writing an assembler, writing a compiler is something you can actually do).

Anyway, that is my claim to being allowed to reminisce about the Z80. While I originally wanted to limit myself to some technical details based on my own experience, comparing the Z80 with the 8080 that it was derived from, I ended up diving down a rabbit hole of the Computer History Museums oral history panel, where the people involved recalled even more anecdotes about the development of those chips. The whole "I'll try to write a blog post (again)" idea quickly ballooned in scope.

From the 2200 to the 8008

Once upon a time, the Computer Terminal Corporation (CTC) built a new, programmable terminal, the Datapoint 2200, sporting an 8 bit processor constructed from individual TTL chips. Intel was supplying CTC with shift registers and memory chips at the time.

The idea was floated to replace parts of TTL cemetery with custom ICs, eventually it was considered to try and get the entire 8 bit CPU on a single chip. Two different companies were ultimately contracted for this task: Texas Instruments and Intel.

Neither company finished their design in time. When Intel had the chip ready, originally named 1201 based on a systematic naming convention, CTC were already selling terminals based on the TTL design.

Engineers at CTC were also unsatisfied with the performance of the chips and they had already made changes to the architecture for the next generation of the terminal anyway.

While TI ultimately canned their design, Intel went ahead and successfully commercialized their version as the 8008 (like the 4004, renamed by marketing).

The 8008 Architecture

        ___   ___
-9V ---|1  |_| 18|<- IRQ
AD7 <->|2      17|<- READY
AD6 <->|3      16|<- CLK1
AD5 <->|4      15|<- CLK2
AD4 <->|5      14|-> SYNC __
AD3 <->|6      13|-> S0     |
AD2 <->|7      12|-> S1      > State
AD1 <->|8      11|-> S2   __|
AD0 <->|9      10|-- +5V
       |_________|
         

  A   B   C   D   E H L PC   C P Z S

The 8008 has 7 registers: A, B, C, D, E, H, L. Where A is the designated accumulator, the others can be used as operands or scratch. As the name might imply, H and L together form the High and Low part of a memory pointer. Accessing memory is done through an 8th pseudo register M, representing the memory byte that HL points to.

The processor internally keeps track of ALU state (Cary, Parity, Zero, Sign) in a few flag bits on which it can perform conditional jumps (including call and return).

The program counter PC is pretty much never visible directly. There are dedicated function call & return instructions, but the processor uses an internal return address stack that is 8 levels deep. The reason for this was that the Datapoint 2200 was originally supposed to use serial memory, a call stack in memory was considered to end up a performance bottle neck.

Memory addresses are 14 bits wide, there is a separate I/O address space with a total of 32 I/O ports (the addresses are always immediate and bit-stuffed into the opcode).

For interrupt handling, there is a special "restart" instruction that essentially calls into 1 of 8 slots (0x00, 0x08, 0x10, 0x18, ..., 0x38) at the beginning of the address space. The slot index is bit-stuffed into the RST opcode itself. When an interrupt occurs, the processor signals to the periphery that it got the hint and then blindly executes the current contents of the data bus that better be an RST instruction.

From there, it gets a bit tricky. The CPU does not have a general purpose stack that it can safe registers to, all memory access needs HL, but you don't want to clobber HL in the interrupt handler. The intended way to solve this was through external latches on the I/O bus, serving as scratch registers.

All in all, the architecture is fairly simplistic, requiring about 3500 transistors and used a DIP18 package. Address and data were multiplexed, requiring external latching. Internal decode/execution state was exposed that needed to be decoded to drive latches and figure out what the processor is attempting to do (read from or write to memory, or the I/O bus).

The processor needed two phase-shifted clock signals (it ran at 500kHz), a +5V positive supply and -9V negative supply.

From the 8008 to the 8080

The shortcomings of the Datapoint 2200 derived 8008 architecture were known during development, and in typical engineering fashion, before development was even wrapped up, ideas were thrown around for an improved architecture.

Federico Faggin, who was brought over from the 4004 project, was pushing to start work on an improved version, but management insisted to first see how the market would react to their two microprocessors. Competitors eventually announced their own 8 bit designs in the making and the delays ended up costing Intel a total of 9 months of their lead time.

Even before the project was finally approved, Federico Faggin got approval to hire Masatoshi Shima away from Busicom to work on the 8080 design. In many ways similar to how CTC had a hand in the development of the 8008, Busicom was involved in the development of the 4004, originally wanting a set of custom chips for their calculators.

Criticism and feedback from potential customers that the 8008 was demonstrated to, also influenced the design of the 8080, and it was decided early on to set aside binary compatibility.

The 8080 Architecture

A F B C D E H L SP PC

The 8080 has in essence the same register set as the 8008, but it replaces the internal return address stack with an external one that lives in memory and is accessed via a stack pointer register (SP).

The stack pointer can be exchanged or moved in to/out of HL, registers can be pushed on or popped of the stack pairwise. Besides HL, the other register pairs are BC, DE, and AF (accumulator and ALU flags), but the 8080 assembly prefers to call the later the "program status word" PSW.

Memory addresses are bumped up to full 16 bits, giving the machine a 64k address space. The I/O ports are bumped up to 256. BC and DE now also allow rudimentary indirection (loading/storing the accumulator), the accumulator and HL can be loaded/stored at an immediate destination.

A few double-byte arithmetic operations are added that can work on register pairs (e.g. increment/decrement), mainly to allow pointer arithmetic and 16 bit counters. Using those instructions on AF would actually act on SP instead.

Interrupt handling works much the same way, using restart instructions, but with the added feature that interrupts can be enabled/disabled in software. An explicit stack also no longer requires saving registers using I/O hardware.

Here is a slightly modified memory-copy example from the Wikipedia page, it copies a number of bytes (stored in BC) from DE to HL.

memcpy:
    PUSH    B           ; pushes BC
    PUSH    D           ; pushes DE
    PUSH    H           ; pushes HL

loop:
    LDAX    D           ; A := *(DE)
    MOV     M, A        ; *(HL) := A
    INX     D           ; ++DE
    INX     H           ; ++HL
    DCX     B           ; --BC

    MOV     A, B        ; A := B
    ORA     C           ; A |= C
    JNZ     loop        ; jump if not zero

    POP     H
    POP     B
    POP     D
    RET
    

A few things that are noteworthy here: instructions that act on register pairs always use a single register as a mnemonic for both, the "X" ion the "INX" differentiates the double-byte increment from an "INC" on a single register byte. The to Intel 8080 assembly has an almost 1:1 mapping of mnemonics to opcodes and is extremely easy to parse, making an assembler easy to implement. To a degree, this comes at the expense of human readability.

Furthermore, the double byte arithmetic has no influence on the ALU flags, it is a separate, independent function block. After decrementing BC, we need to manually check if both registers are zero.

Electrical Interfacing

To improve speed, the 8080 used NMOS logic. The downside of this was the the CPU now needed 3 different supply voltages (-5V, +5V and +12V). It also stuck with using 2 phase-shifted clock signals (in the 9V to 12V range), making electrical design around the chip a bit cumbersome.

Thanks to a 40 pin package (something Faggin recalls as an uphill battle to get approved), the CPU no longer had to multiplex data and address lines. But like the 8008, it still exposed internal processor state externally, multiplexing the actual control states on the data bus, requiring external latching and decoding.

Intel would of course sell support chips for state decoding, clock generation and so on. Additionally, one might also want to buy an accompanying interrupt controller and something like a programmable interval timer, at the very least to drive DRAM refresh, possibly using one of those handy Intel DMA controllers.

Intel addressed at least some of those short comings with the 8085, only requiring a single 5V supply and a single 5V clock signal. The freed up pins expose a few additional control signals. But still needing some specialized support chips.

Zilog and the Z80

Dissatisfied with his experience at Intel, the delays and uphill battles with management to even get the 8080 project approved in the first place, Federico Faggin finally decided to quit Intel and start his own firm together with Ralph Ungermann, then head of the microprocessor division.

Originally somewhat directionless, Faggin at first considered designing a microcontroller, but realized that the margins were too tight to make it economical for a fabless semiconductor startup.

He eventually settled on designing an improved version of the 8080, nicknamed "Super 80", later becoming the Zilog Z80. They secured funding from Exxon and also brought over Masatoshi Shima from Intel to work on the design, later increasing the size of the team to a total of 11 people to work on layouting, software simulation, and so on.

The design of the Z80 was intended to be binary compatible with the 8080, while adding registers, addressing modes, new instructions, drawing inspiration from other contemporaries like the 6800. It also aimed at simpler electrical interfacing and higher speed than the 8080.

The entire development of the processor up to the first, working prototypes cost roughly $400k, finishing on time and under budget (they had secured $500k from Exxon).

Zilog relied on Mostek to manufacture their processors (after some hostilities with Synertek they initially contracted with). They did eventually secure further funding from Exxon to build their own fab, but kept second sourcing the Z80.

The Z80 Architecture

A F A' F' B C B' C' D E D' E' H L H' L'   IX     IY     SP     PC  

The Z80 is fully binary compatible with the 8080 instruction set.

Inspired by the 6800, it adds two index registers IX and IY that can be used in place of HL (same encoding but with an opcode prefix) and with an immediate offset.

The AF, BC, DE and HL register pairs are bank switched, allowing simpler & faster interrupt handling.

Speaking of interrupts, the Z80 has 3 different ways that it can handle them: An 8080 compatible way (mode 0), one that always calls to a fixed location (mode 1), and one that dispatches through a call table (mode 2), using the number on the bus as an index. An extra register is used to locate the base of the table in memory.

The Z80 also adds a bunch of bit rotate, bit test & set instruction instructions, BCD arithmetic, along with built-in loop instructions (using BC as a counter), self-repeating block transfer, block compare and string operations.

Because Intel claimed a copyright on the assembly mnemonics, the Z80 ended up using its own assembly language with an arguably cleaner syntax. The Z80 assembly expresses operands more explicitly and uses overloaded variants of basic mnemonics.

This is essentially the same program from above, in the more expressive Z80 assembly:

memcpy:
    PUSH    BC             ; full name of the register pair
    PUSH    DE
    PUSH    HL

loop:
    LD      A, (DE)        ; explicit 2 argument syntax
    LD      (HL), A
    INC     DE
    INC     HL
    DEC     BC

    LD      A, B            ; overloaded name
    OR      C
    JP      NZ, loop        ; overloaded name, condition is an argument

    POP     HL
    POP     BC
    POP     DE
    RET
    

Of course, on the Z80, the entire byte copy loop could also be replaced with a single, self-repeating instruction: LDIR.

Improved Bus Design

The Z80 only needs a single 5V supply and a single clock signal. Many of the externally latched/decoded states of the 8080 are explicitly exposed by the chip, such as as MREQ or IORQ to indicate memory or I/O access, RD/WR signals that indicate exactly what the name suggests, and an M1 signal that indicates the current memory access is an instruction fetch. Those signals can be connected to something as simple as a single 74xx138 to drive an (E)EPROM, some form of RAM and an UART controller. Connect the address and data lines directly to the Z80 and you essentially have a working computer!

If the RAM in use happens to be DRAM, the Z80 can also take care of DRAM refreshes, using an internal refresh counter that it puts on the address bus during instruction decoding cycles, asserting a control line to tell the external decoding logic to do a DRAM refresh.

With interrupt mode 1, where the CPU always calls to a hard wired location, a simple design can get by without any external interrupt controller, hooking a single device up to the interrupt pin or using something as simple as a 74xx148 (priority encoder) and a latch.

How the Story Continued

Even before the Z80 was finally released in July of 1976, rough design work on the 16 bit Z8000 architecture had already begun. The Z8000 was released in 1979, after the Intel 8086, but before the Motorola 68000.

Like the 8086, it used segmented memory, but unlike the 8086 exposed a segment number on the bus that an external MMU chip was supposed to convert to a linear address (and check bounds & permissions).

While common heritage of the 8080 can be clearly seen in the 8086 instruction set, a number of features from the Z80 were also carried over, such as the self repeating block and string operation or loop instructions. The design of the Z8000 MMU also influenced the descriptor table based design of the 286's 16 bit protected mode.

Despite the fact that Zilog aimed their products for a computer oriented market, even at an early time when microprocessors were considered logic replacement, their ties with Exxon ended up being one of the reasons why IBM ultimately decided against a Zilog processor for their PC, opting for an Intel 8088 instead.

Part of the reason Exxon was interested in Zilog in the first place was their intent to build up a computing empire of their own, rivaling IBM. They had a number of other companies they strategically invested in (e.g. typewriter, word processor or printer manufacturers), some of whom even designed products around Zilog parts, all eating away at the market share of competing IBM products.

The close ties with Exxon eventually also caused friction between Faggin and Ungermann, the later leaving Zilog before it became a full Exxon subsidiary in 1980.

Zilog eventually split off of Exxon again in 1989 and went public in 1991, subsequently changing hands several times, bouncing around between private equity and actual electronics companies, currently owned by Littelfuse.

The Z80, after a long life as an embedded processor, was eventually discontinued in June of 2024.

Links and References

The Daily Front Page 17 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Game Maker’s BASIC
repository

MoonBASIC: A modern BASIC for building 2D and 3D games

by klaussilveira·▲ 64 points·20 comments·github.com ↗
★ 42⑂ 2 forks HTML

A modern BASIC for building 2D and 3D games — write .mb source, download pre-built binaries, and run. No Go, no C compiler, no build tools on your machine. Download from here: (https://github.com/CharmingBlaze/moonbasic/releases/tag/v1.2.27)

One download gives you moonrun (play games), moonbasic (check, compile to .mbc, language server), and optionally the moonBASIC IDE — a desktop editor with the full documentation built in. The engine bundles Raylib, Box2D, and Jolt — graphics, audio, 2D physics, 3D physics, networking, terrain, UI, particles, and more behind 4,200+ built-in commands across 40+ namespaces (WINDOW.*, ENTITY.*, PHYSICS3D.*, GUI.*, NET.*, …).

This repository is the official home for documentation, examples, and pre-compiled downloads for Windows, Linux, and macOS (Apple Silicon).


Download (nothing else required)

Latest release: github.com/CharmingBlaze/moonbasic/releases/latest

Direct links by platform: charmingblaze.github.io/moonbasic/

You do not need to install Go, GCC, Node.js, or Raylib separately.

Your goal Download moonBASIC IDE (editor + compiler + runtime + docs — easiest) IDE bundlemoonbasic-<tag>-ide-windows-amd64.zip, linux-amd64.tar.gz, or macos-arm64.tar.gz Play / make games (terminal only) Full runtimemoonbasic-<tag>-windows-amd64.zip, linux-amd64.tar.gz, or macos-arm64.tar.gz Lint / compile / LSP only (no game window) Compiler onlymoonbasic-<tag>-compiler-… VS Code / Cursor Included in full-runtime zip + moonbasic-<tag>-vscode.vsix on Releases

IDE bundlemoonbasic-ide, moonbasic, moonrun, README-IDE-RELEASE.txt, START-IDE. Documentation is inside the IDE.

Full runtimemoonbasic, moonrun, README-RELEASE.txt, VS Code .vsix, INSTALL-VSCODE.bat / INSTALL-VSCODE.sh.

All artifact names and platform notes: RELEASES.md


moonBASIC IDE (recommended)

The fastest way to start — one folder, no extra setup.

moonBASIC IDE — editor, documentation, check, compile, and run in one app

  1. Download moonbasic-<tag>-ide-… for your OS from Releases.
  2. Extract anywhere permanent.
  3. Run START-IDE.bat (Windows) or chmod +x START-IDE.sh moonbasic-ide moonbasic moonrun && ./START-IDE.sh (Linux/macOS).
  4. Write or open a .mb file in the editor.

Shortcut Action F5 Run game (moonrun) Ctrl+Shift+C Check syntax Ctrl+Shift+B Compile to .mbc Alt+H Help at cursor Gear menu (title bar) Themes, fonts, colors, settings

The IDE auto-detects moonbasic and moonrun in the same folder. Open Documentation in the sidebar for BEGIN_HERE.md, guides, and the full command reference.

Engine source: moonbasic-compiler (moonbasic ide/).


Quick start (terminal)

If you downloaded the full runtime instead of the IDE:

moonrun --version          # Windows: moonrun.exe --version
moonbasic new MyGame
cd MyGame
moonrun main.mb

Try an example from this repo (clone or Download ZIP — examples ship here, not inside release zips):

moonrun examples/spin_cube/main.mb
moonrun examples/guides/game_loop.mb

VS Code / Cursor (one command)

After extracting the full runtime:

moonbasic install-vscode

Or double-click INSTALL-VSCODE.bat (Windows) / run ./INSTALL-VSCODE.sh .

That installs the extension and sets moonbasic.languageServerPath and moonbasic.moonrunPath automatically. Then open any .mb file — completions, hover help, Ctrl+F5 run, Ctrl+Shift+C check, Alt+H help at cursor.

Extension source: editors/vscode-moonbasic/ · Guide: docs/GETTING_STARTED.md


Documentation

Start here docs/BEGIN_HERE.md Install, first 10 minutes, learning path docs/GETTING_STARTED.md Ship your game, VS Code, player installs docs/systems/GUIDES.md Topic guides (physics, lighting, multiplayer, math, …) docs/COMMANDS.md Command index docs/reference/ Full API by namespace web/command-browser.html Searchable offline command browser examples/ Runnable demos + examples/guides/ copies of doc examples


What's built in

Layer Technology Graphics & audio Raylib 2D physics Box2D 3D physics & KCC Jolt Multiplayer ENet (where enabled)


Example

APP.OPEN(960, 540, "Hello moonBASIC")
WHILE NOT APP.SHOULDCLOSE()
    RENDER.CLEAR(20, 24, 32)
    RENDER.FRAME()
WEND
APP.CLOSE()

(APP.* aliases WINDOW.* — same engine, clearer tutorials.)


Tooling

Tool / command What it does moonBASIC IDE (moonbasic-ide) Desktop editor — syntax, docs, check, compile, run, themes moonrun game.mb Compile (if needed) and run — primary terminal entry point moonbasic --check game.mb Parse and type-check without running moonbasic game.mb Compile to game.mbc bytecode moonbasic --lsp Language server (stdio) for other editors moonbasic new Name New project: main.mb, assets/, .vscode/ moonbasic install-vscode Install VS Code / Cursor extension + configure paths


License

MIT — see LICENSE.

Engine source (contributors): github.com/CharmingBlaze/moonbasic-compiler

The Daily Front Page 18 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Pixel Memory
article

Old Icons

by zdw·▲ 95 points·29 comments·leancrew.com ↗
Free the Icons.

There’s been a lot of talk lately about Mac application icons and “squircle jail.” Inspired by this post from Paul Kafasis on the Rogue Amoeba blog,1 many Mac-adjacent people have taken up his cause to “Free the Icons.”

I agree, but Apple’s 50th anniversary has gotten me thinking a lot lately about the early days of the Mac, so it’s only natural that my mind shifted to the highly constrained icons Mac applications had back then.

In those days, icons were 32×32 pixel images, and every pixel was either black or white. The classic original Mac application icons were the ones for MacWrite and MacPaint.2

MacWrite and MacPaint

You can see that Apple liked the idea of app icons being a tilted rectangle with some image inside the rectangle to indicate what the app did. The hand was Apple’s way of telling you that this icon was for doing things, and the rectangle was tilted to match the orientation of the hand. (If you were left-handed, this was just another injustice inflicted on you by a cruel right-handed world.)

Document icons were typically upright rectangles with dog-eared corners and similar designs inside the rectangle—no hands because documents don’t do anything. But we’re not here to talk about document icons.

Other Apple app icons that fit this pattern were the ones for MacDraw and HyperCard:

MacDraw and HyperCard

The HyperCard icon was a bit of a departure, in that it had a stack of rectangles, but the idea was the same. There was no image on the top card of the stack, probably because there wasn’t enough room.

Many of the complaints about squircle jail are about the loss of icon elements that “stick out” from the rest of the design. As you can see, this idea was there from the very start; the hands stick out from the tilted rectangles.

Most other software publishers followed Apple’s lead. Here are the icons for Aldus PageMaker and QuarkXPress:

PageMaker and Quark XPress

Aldus had a slightly different idea for what the hand should look like.

It’s important to recall that the Mac didn’t have a Dock back then. You launched an app by finding its icon on your disk and double-clicking.3 The icon always had the name of the app underneath it, which was good. If you had both PageMaker and XPress, I imagine it would be easy to confuse such similar icons in a Dock.

The folks at THINK took a slightly different approach for their Pascal editor/compiler. They kept the idea of hands, but because nobody programs with a pencil, they put two hands on a keyboard and showed them generating a flowchart:

THINK Pascal

Other publishers abandoned either the hands or the tilted rectangle or both. As people got more used to working with Macs, these clues for what’s an app and what isn’t became unnecessary, and icon design became less constrained. Even Apple gave up on them for utilities like Disk First Aid and Font/DA Mover:

Disk First Aid and FontDA Mover

And there was, of course, my favorite Apple icon of this era, the one for ResEdit:

ResEdit

This is what old-timers mean when they talk about Apple and whimsy.


  1. As opposed to his wonderful personal blog, One Foot Tsunami
  2. All of the icon images in this post are screenshots taken from an Infinite Mac session. 
  3. Yes, you could also launch an app by double-clicking on the icon of one of its documents. But I told you we’re not here to talk about document icons. 
The Daily Front Page 19 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Safe Phones
article

GrapheneOS recommended for domestic abuse victims

by aussieguy1234·▲ 174 points·197 comments·privacypros.com.au ↗
technology can be a lifeline – or a weapon

In 2026, technology can be a lifeline – or a weapon.

For people experiencing domestic violence (DV), tech-facilitated abuse is now one of the most common forms of control. This includes GPS stalking, hidden tracking apps, spyware, image-based abuse, and monitoring of messages or location.

Australian research shows that 99% of domestic violence cases now involve some form of technology-facilitated abuse. In some states, reports have risen by as much as 650% over the past five years. Children are also heavily impacted – studies indicate that 27% of DV cases involve tech-related harm to kids.

The good news is that technology can also be used to reclaim safety and independence. A properly configured DV Safe Phone gives survivors powerful tools for privacy, discretion, and control – helping them stay connected while reducing the risk of being tracked or monitored.

At PrivacyPros, our expertly hardened de-Googled Privacy Phones are designed with these exact needs in mind. They offer near-zero telemetry, strong app isolation, physical kill switches, and emergency features that can genuinely help people in high-risk situations.

Why a Regular Phone Can Be Dangerous in DV Situations

Standard smartphones from Apple, Google, or Samsung often share location data, app activity, and other information in the background – even when you think privacy settings are turned on. Abusers can exploit this through:

  • Spyware and stalkerware apps
  • Shared accounts or cloud sync
  • Location tracking via cell towers or apps
  • Monitoring of messages and calls

A DV Safe Phone significantly reduces these risks by stripping out unnecessary tracking and giving you physical and software controls over what can be accessed.

Key Features of a DV Safe Phone

When choosing or configuring a phone for safety, focus on these critical areas:

1 – Operating System: Prioritise De-Googled Options

The operating system is the foundation of your phone’s security.

GrapheneOS (running on Google Pixel hardware) is currently one of the strongest choices for DV safety in 2026. It offers:

  • No built-in Google tracking
  • App isolation and hidden profiles (up to 32 separate profiles)
  • Verified Boot (tamper detection on every startup)
  • Strong permission controls
  • A duress PIN that can instantly wipe sensitive data in emergencies

This makes it far more discreet and secure than standard Android or iOS devices.

2 – Hardware That Supports Strong Privacy

We recommend recent Google Pixel devices because they have the best hardware support for GrapheneOS, including secure bootloaders and long-term update support (up to 7 years).

Look for phones with:

  • At least 12GB RAM
  • 128GB+ storage
  • Good battery life
  • Physical or easy-to-access controls for disabling microphones, cameras, location, and sensors

Always choose new, unlocked devices from trusted Australian sellers to ensure you receive the full 2-year Australian Consumer Law warranty.

3 – Essential Safety & Discretion Features

A well-configured DV Safe Phone should include:

  • Hardware kill switches or easy toggles for mic, camera, location, Bluetooth, and network
  • No-log VPN support (such as Proton VPN)
  • Anonymous browsing options (Tor)
  • Encrypted messaging and self-deleting message capabilities
  • Tracker detection tools (to spot hidden AirTags or similar devices)
  • Metadata removal tools for photos and files before sharing
Practical Tools That Make a Real Difference

At PrivacyPros, we configure our Privacy Phones with advanced but easy-to-use safety features, including:

  • Geofencing Alerts – Set up safe zones that notify you or trusted contacts if crossed.
  • Bluetooth Tracker Detection – Automatically scan for hidden tracking devices like AirTags.
  • Location Spoofing – Mask your real location when needed while still allowing apps to function.
  • Secure Anonymous File Sharing – Send documents or evidence through encrypted, self-deleting links.
  • Integrated Encrypted Ecosystem – Combine secure email, VPN, and storage so everything stays protected even if the device is compromised.

These tools are configured during our expert hardening process (typically 4–7 hours per device) so everything works reliably from day one.

DV Safe Phones Australia support

Getting Help and Building Safety

A DV Safe Phone works best alongside professional support. Key Australian resources include:

  • 1800RESPECT – National sexual assault, domestic and family violence counselling service
  • Lifeline: Crisis and DV support. Call 13 11 14.
  • MensLine Australia: Support services for men Local DV support services and refuges
  • 13 YARN: Culturally safe crisis support for Aboriginal and Torres Strait Islander people.
  • Local DV support services and refuges
  • The eSafety Commissioner’s resources on tech abuse

Many support workers and organisations are now recommending de-Googled privacy phones as part of safety planning because they reduce the digital footprint that abusers can exploit.

Final Word

Technology should never be a tool used against you. With the right device and configuration, your phone can become a source of safety, connection, and empowerment rather than vulnerability.

If you or someone you know is experiencing domestic violence and would like to explore a DV Safe Phone setup, we offer personalised consultations to help configure the right solution.

-> Explore Privacy Phones

-> Book a Confidential Consultation

-> Browse Our Free Privacy Tools

Reclaim your digital strength – safety is within reach

The Daily Front Page 20 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Science Dispatches
article

First atmosphere found on Earth-like planet in habitable zone of distant star

by neversaydie·▲ 421 points·253 comments·bbc.com ↗

Melissa Weiss/Center for Astrophysics |Harvard & Smithsonian An artist's impression of exoplanet LHS 1140b, a large reddish-brown rocky planet filling the foreground, edged with a faint blue-white atmospheric glow. In the dark background, a small red star glows brightly, with a second, closer planet shown as a tiny black silhouette crossing in front of it

Artwork: The red tinge illustrates an atmosphere around a rocky planet orbting a red star

Researchers have found the first atmosphere surrounding an Earth-like, rocky planet orbiting within the habitable zone of a distant star.

The researchers say that their discovery provides the strongest evidence yet that worlds with conditions similar to Earth could exist beyond our solar system.

The gas detected in the atmosphere is helium, which would not be able to support life, but other gasses may also be present.

The lead author, Dr Collin Cherubim of Harvard University, described the discovery as "a big deal".

"This is the first time anyone has found an atmosphere on a rocky planet in the habitable zone of another star."

The planet, called LHS 1140 b, is 48 light-years from Earth orbiting a red star much smaller and cooler than our Sun.

More than 6,000 worlds have been discovered orbiting distant stars. But the new discovery is significant because it brings us a step closer to one of the biggest prizes in science: the discovery of life on another world.

The researchers, writing in the journal Science, are clear – they have not done that, at least not yet. But for a planet to support life it has to have water and for that it has to be the right distance from its star: not too close because it will be too hot and not too far, because it will be too cold – but somewhere in between where it will be "just right".

Planetary scientists call this the "Goldilocks zone", after the fairy tale girl who was fussy about the temperature of her porridge.

Hundreds of planets have been found in the Goldilocks zones of their respective stars – but only a few dozen are small and rocky – like our own Earth – which is another tick for a planet's ability to support life.

But none of those have been found to have an atmosphere.

Until now.

But the only gas discovered in the atmosphere so far is helium, probably in the upper atmosphere, which on its own would not support life.

But there may be other, more life-sustaining gases, lower down. Dr David Charbonneau, also from Harvard, said that the important thing was the discovery of an Earth-like planet outside of our solar system with an atmosphere.

"People are generally interested in the big questions: Are we alone? Is there life beyond the Earth or beyond our solar system? To that end, this study reveals the first atmosphere discovered on a rocky planet in the habitable zone of a star outside of our solar system," he said.

LHS 1140b isn't the only world under scrutiny in the search for life. K2-18b, a sub-Neptune with a possible water-rich interior, made headlines when scientists spotted signs of dimethyl sulphide — a gas linked to marine life on Earth.

But a Nasa-led reanalysis in 2025 found the signal too weak to confirm, and showed the gas can form without biology.

The seven rocky worlds of TRAPPIST-1 remain tantalising, too: Nasa's James Webb Space Telescope ruled out an Earth-like atmosphere on TRAPPIST-1d, while TRAPPIST-1e's data stay frustratingly inconclusive.

The Daily Front Page 21 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Trust and Oversight Briefs
article

FAA lets Boeing sign off on 737 MAX, 787 airworthiness certificates again

by hmm37·▲ 162 points·89 comments·cnbc.com ↗

Key Points

  • The FAA said Boeing can resume ticketing its 737 Max and 787 Dreamliner aircraft.
  • The company was stripped of this ability in the wake of two fatal Max crashes in 2018 and 2019.
  • The FAA said in September that it would allow Boeing to resume some issuance of airworthy certificates itself.

A Boeing Co. 737 Max airplane at the company's manufacturing facility in Renton, Washington, US, on Thursday, Nov. 20, 2025.

David Ryder | Bloomberg | Getty Images

The U.S. government on Friday said Boeing can once again issue airworthiness certificates for its bestselling 737 Max aircraft and 787 Dreamliners, an authority that was stripped from the manufacturer after fatal crashes in 2018 and 2019 of the 737 Max.

The Federal Aviation Administration said last September that Boeing could ticket its own planes before they're handed off to customers for only some of the Maxes and Dreamliners, alternating weeks between the FAA and Boeing doing that work.

"During the past eight months, the FAA has seen comparable production quality findings when Boeing issued airworthiness certificates and when the FAA issued them," the agency said Friday. "Based on these results, the FAA determined it can safely return this responsibility to Boeing."

The company said in a statement that it "will continue to work under the oversight of the FAA in building safe, high-quality commercial airplanes that comply with all airworthiness certification requirements."

The decision is a vote of confidence for Boeing, one of the biggest U.S. exporters by value, from its regulator and the U.S. government after years of safety crises, including the two crashes and a near catastrophe in January 2024 when a door plug blew off of a new 737 Max 9 moments into the flight.

The Daily Front Page 22 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Developer Briefs
article

Solod: Go can be a better C

by koeng·▲ 206 points·143 comments·solod.dev ↗

Solod (So) is a strict subset of Go that translates to regular C.

Highlights

  • Go in, C out. You write regular Go code and get readable C11 as output.
  • Zero runtime. No garbage collection, no reference counting, no hidden allocations.
  • Rich standard library. Use familiar types and functions ported from Go's stdlib.
  • Native C interop. Call C from So and So from C — no CGO, no overhead.
  • Go tooling works out of the box. Syntax highlighting, LSP, linting and "go test".

So supports structs, methods, interfaces, slices, maps, multiple returns, and defer. Everything is stack-allocated by default; heap is opt-in through the standard library. There is limited support for generics, and concurrency is provided by the standard library instead of being built into the language.

So is for Go developers who want systems-level control without learning a new language. And for C programmers who like Go's safety, structure, and tooling.

Playground

Here's some Go code in a file main.go. Click Run to execute it, or Translate to see the generated C code (main.h + main.c).

package main

import (
    "solod.dev/so/conc"
    "solod.dev/so/mem"
    "solod.dev/so/sync/atomic"
)

// Account is a thread-safe money account.
type Account struct {
    Balance atomic.Int64
}

// Deposit adds an amount to the balance.
func (a *Account) Deposit(amount int64) {
    a.Balance.Add(amount)
}

// pay deposits $10 into the shared account.
func pay(arg any) {
    acc := arg.(*Account)
    acc.Deposit(10)
}

func main() {
    var acc Account

    // Run 100 payments across 4 worker threads.
    opts := conc.PoolOptions{NumThreads: 4}
    pool := conc.NewPool(mem.System, opts)
    defer pool.Free()
    for range 100 {
        pool.Go(pay, &acc)
    }
    pool.Wait()

    println("balance is", acc.Balance.Load())
}

Getting started

Even though So isn't ready for production yet, I encourage you to try it out on a hobby project or just keep an eye on it if you like the concept.

Installation and usage to work with So locally.

Language and standard library guides for a quick overview.

So by example for a hands-on introduction.

Source code to see the internals or contribute.

Current status  v0.3 in progress

As of July 2026, So is in active development. The latest release is 0.2, which adds support for networking, WebAssembly, and freestanding mode. The next release, 0.3, will add concurrency support.

If you have any questions, feel free to reach out on GitHub.

The Daily Front Page 23 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Demos, Desks, and Community
discussion

Thanks HN for 15 years of support and helping me find my life's work

by nicholasjbs·▲ 507 points·51 comments·news.ycombinator.com ↗

Tomorrow is the 15th anniversary of the first day of the Recurse Center (https://www.recurse.com&#x2F;)

My cofounders and I did YC all the way back in the Summer of 2010, with the initial idea of building "OkCupid for jobs." That idea quickly fizzled, and we spent the better part of a year pivoting between other ideas that also failed.

Finally, we made something that we wanted ourselves: a self-directed programming retreat, where people built fun projects, contributed to open source, and helped each other become better programmers.

After running two small batches, we launched on HN[1] and got an incredible reception.

That post on HN helped us reach beyond our personal networks and meet programmers from around the world, many of whom have since become friends. HN brought us the majority of people who came to our next few batches, and in the years since, HN has remained our #2 source of applicants (after word of mouth).

Alas, pg's comment[2] on HN when we launched turned out to be prescient: Running free programming retreats isn't a billion-dollar business, but it's still a worthwhile thing to do, and has positively impacted over 3,000 people so far. And 15 years on I still wake up every day excited to keep working on it.

So, thanks HN, for helping make the Recurse Center possible, and for helping me find my life's work.

[1] https://news.ycombinator.com/item?id=3435183

[2] "This sounds like a crazy plan for a startup, I realize, but this is the right sort of crazy. In fact, the way the Hackruiters think about Hacker School is a lot like the way we initially thought about YC: if it doesn't make money, it will at least have been a benevolent thing to do."

The Daily Front Page 24 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Demos, Desks, and Community
The Daily Front Page 25 of 26
Friday, July 17, 2026 The Daily Front No. 8 — Colophon

That's the Front for Today

Issue No. 8 — Friday, July 17, 2026 — went to press 2026-07-18 at 08:07 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 Friday, July 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, chose the highlights, and briefed the cover illustrator — 34 model calls and 255k 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:

A dramatic classical newspaper-style illustration of a moonlit city beneath a colossal storm cloud shaped like a data center, showering blank paper slips with no markings while a nurse shields a patient from a hovering mechanical eye and, in the far background, an astronomer’s telescope points toward a red dwarf star with a small glowing planet encircled by a faint atmosphere; engraved crosshatching, high contrast, elegant old-world editorial composition, no text, no letters, no numbers, no logos.

Vintage newspaper cover illustration, mid-century editorial etching and halftone style, muted sepia and ink-blue palette with one warm accent color, dramatic composition, portrait orientation. Absolutely no text, letters, numbers, or logos anywhere in the image.

Production Ledger

StageModelCallsTokens InTokens Out
extractgpt-5.5 32 150,406 75,045
layoutgpt-5.5 1 18,232 5,439
covergpt-image-2 1 154 5,488

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. AWS: Inaccurate Estimated Billing Data – $1.7 billion by nprateem — news.ycombinator.com·HN discussion ↗
  2. Kaiser nurses say AI, workplace surveillance are making their jobs, care worse by gnabgib — localnewsmatters.org·HN discussion ↗
  3. The state of open source AI by rellem — stateofopensource.ai·HN discussion ↗
  4. Kimi K3, and what we can still learn from the pelican benchmark by droidjj — simonwillison.net·HN discussion ↗
  5. The human-in-the-loop is tired by haritha1313 — pydantic.dev·HN discussion ↗
  6. Three ways people respond to a problem (other than solving it) by surprisetalk — improvesomething.today·HN discussion ↗
  7. AI Meets Cryptography 2: What AI Found in OpenVM's ZkVM by duha — blog.zksecurity.xyz·HN discussion ↗
  8. Pebble Mega Update – July 2026 by crazysaem — repebble.com·HN discussion ↗
  9. Camera Chase Vehicle by geerlingguy — transistor-man.com·HN discussion ↗
  10. How Has Roman Concrete Lasted for Millennia? 1,900-Year-Old Latrine Offers Clues by divbzero — smithsonianmag.com·HN discussion ↗
  11. Frank Lloyd Wright’s first home by NaOH — architecturaldigest.com·HN discussion ↗
  12. More Bounce to the Ounce by pavel_lishin — mceglowski.substack.com·HN discussion ↗
  13. Learning a few things about running SQLite by surprisetalk — jvns.ca·HN discussion ↗
  14. A Road to Lisp: Which Lisp by silcoon — scotto.me·HN discussion ↗
  15. The Zilog Z80 has turned 50 by st_goliath — goliath32.com·HN discussion ↗
  16. MoonBASIC: A modern BASIC for building 2D and 3D games by klaussilveira — github.com·HN discussion ↗
  17. Old Icons by zdw — leancrew.com·HN discussion ↗
  18. GrapheneOS recommended for domestic abuse victims by aussieguy1234 — privacypros.com.au·HN discussion ↗
  19. First atmosphere found on Earth-like planet in habitable zone of distant star by neversaydie — bbc.com·HN discussion ↗
  20. EEG shows brain can simultaneous encode two speech streams by giuliomagnifico — journals.plos.org·HN discussion ↗
  21. M 3.9 Experimental Explosion – 147 Km ENE of Ponce Inlet, Florida by hnburnsy — earthquake.usgs.gov·HN discussion ↗
  22. Apple targets dozens of OpenAI employees with legal letters by merksittich — ft.com·HN discussion ↗
  23. Evidence of inconsistencies in evaluation process and selection of winners by twerkmeister — kaggle.com·HN discussion ↗
  24. FAA lets Boeing sign off on 737 MAX, 787 airworthiness certificates again by hmm37 — cnbc.com·HN discussion ↗
  25. An Engineer's Guide to USB Typе-С (2024) by gregsadetsky — ti.com·HN discussion ↗
  26. Solod: Go can be a better C by koeng — solod.dev·HN discussion ↗
  27. Show HN: Watch bots interact with an SSH honeypot in real time by tusksm — honeypotlive.cc·HN discussion ↗
  28. Thanks HN for 15 years of support and helping me find my life's work by nicholasjbs — news.ycombinator.com·HN discussion ↗
  29. Show HN: A zoomable timeline of 4M Wikipedia events by lortex — app.everything.diena.co·HN discussion ↗
  30. Workspaces – Explore the workspaces of modern creators by ryangilbert — workspaces.xyz·HN discussion ↗

Browse all issues in the archive →