Thanks to the hard work of CiviCRM’s incredible community of contributors, CiviCRM version 6.20.0 is now ready to download. This is a regular monthly release that includes new features and bug fixes. Details are available in the monthly release notes.
Your are encouraged to upgrade now ...
Thanks to the hard work of CiviCRM’s incredible community of contributors, CiviCRM version 6.20.0 is now ready to download. This is a regular monthly release that includes new features and bug fixes. Details are available in the
monthly release notes
.
Your are encouraged to upgrade now for the most stable, secure CiviCRM experience:
CiviCRM is community driven and is sustained through code contributions and generous financial support.
We are committed to keeping CiviCRM free and open,
forever
. We depend on your support to help make that happen. Please consider
supporting CiviCRM today
.
AGH Strategies
- Alice Frumin, Chris Garaffa; Agileware Pty Ltd - Justin Freeman; alilinares;
Artful Robot
- Rich Lott; Australian Greens - John Twyman; beatrizpaula03; Benjamin W;
BrightMinded
Ltd - Bradley Taylor; Christian Wach; civico GmbH - Johannes Filter;
CiviCoop
- Klaas Eikelboom; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku;
civiservice.de
- Martin Correll;
CompuCo
- Muhammad Shahrukh;
Coop SymbioTIC
- Mathieu Lutfy, Shane Bill; CSES (Chelmsford Science and Engineering Society) - Adam Wood; Dave D; Francesc Bassas i Bullich;
Freeform Solutions
- Herb van den Dool;
Fuzion
- Luke Stewart;
GESTAD
- Guillaume Sorel; Gray Digital - Richard Baugh; Greenpeace Central and Eastern Europe - Patrick Figel; Hans Rossel; Humanists UK - Andrew West; Jakub Fidler;
JMA Consulting
- Monish Deb, Seamus Lee; joapta-tech;
Joinery
- Allen Shaw; Juan Ignacio Sartor; kaustubh-compuco; Kevin Goess; knottheory;
Megaphone Technology Consulting
- Jon Goldberg;
MJW Consulting
- Matthew Wire, Jade Gaunt; NIAB - Stuart; Nicol Wistreich; OPEN - dewy;
Progressive Technology Project
- Jamie McClelland; Responsive Development Technologies - Thomas Nilefalk; Richard van Oosterhout; Robin Bowes; Sigtechnica; Sinjinsmiley;
Skvare
- Mark Hanna, Sunil Pawar;
Squiffle Consulting
- Aidan Saunders; Stiftung Pfadfinden - Andreas Lietz; Survos - Tac Tacelosky;
SYSTOPIA
- Dominic Tubach; Sylvain Plante;
Tadpole Collective
- Kevin Cristiano;
Third Sector Design
- William Mortada, Kurund Jalmi; Wikimedia Foundation - Eileen McNaughton, Lars Sander-Green; Youth Apostles Institute - John Volk
New Extensions
Mosaic Plus
- The versafix-1 mosaico template is quite narrow, a maximum of 600px. For most screens, a width of 660px is quite reasonable and a better use of the screen.
Association Cockpit - Vereinsabfrage
- Provides a simple, friendly screen for volunteers in small associations to find and edit contacts, add notes and see upcoming birthdays.
Create Household From Individuals
- In SearchKits on Individuals, provide an action to create a new household with the Individuals as members.
CiviCoop
Theme - Provides a custom branded stream and modern styling for CiviCRM using the RiverLea theme framework.
Beyond the compiler: Making IBM i run modified native code - Program Validation Value
IBM i does not treat an application program as a normal file that happens to
contain POWER instructions. A compiler produces Machine Interface (MI) code,
IBM i’s stable instruction-level boundary, and the system translates it into a
native form. The generated native code contains checks that support the IBM i
object and tagged-pointer model.
Changing those instructions can make IBM i execute behavior that was not
present in the MI input. Earlier
Below MI research
examined the wider
consequences on IBM i V7R4. Here I focus on the IBM i 7.5
Program Validation Value (PVV)
,
a 32-byte value stored with a saved program.
I reconstructed the 32-byte PVV calculation and matched all 1,223 known-valid
values. The reconstructed calculation derives its HMAC key entirely from saved
program attributes and fixed Licensed Internal Code (LIC) constants; it
contains no separate secret for origin authentication. IBM i applies separate
digital-signature checks where required. In controlled USER-state programs—the
ordinary, non-SYSTEM execution mode—recalculating PVV and the separate save-file
checks allowed selected native instruction changes to survive restore and
resave. A disposable CrackMe produced the expected changed output,
demonstrating execution.
USERB1, an ordinary test account without special authorities, restored a
USERB1-owned, PVV-repaired
MEMDUMP
program through IBM’s Restore Object List
(
QSRRSTO
) API, and a resave preserved its modified native instructions. Its
executable payload matched byte-for-byte the payload used in a controlled
runtime test. In that test,
MEMDUMP
ran as USERB1 and read from a known-address
USER-domain buffer in a cooperating job running under QSECOFR, IBM i’s
security-officer profile. Other controls showed IBM i rejecting unsigned SYSTEM
and INHERIT program-state variants and enforcing the SYSTEM-domain access
boundary.
My
previous article
covered the outer save file (SAVF) container: its per-record checksums and
global checksum. During restore, IBM i also calculates PVV and compares it
with four values stored in the saved program.
The USER-state controls ran under the test system’s existing
restore-policy system values
(
QVFYOBJRST=3
,
QFRCCVNRST=1
, and
QALWOBJRST=*ALL
) at
QSECURITY 40
,
which enforces resource security and integrity protection.
Program validation and research approach
SAVF record and global checks establish container consistency; PVV establishes
consistency with selected serialized program data. LIC copies the 32-byte
descriptor unchanged into the HMAC key object. Every descriptor byte
comes from saved program attributes or fixed LIC constants, and the recovered
path contributes no additional secret. A party with the serialized program and
the reconstructed algorithm can therefore derive the key and recompute PVV; a
match establishes consistency, not trusted origin. Restore authorization and
system policy still govern the operation, while digital signatures authenticate
origin where required.
A program has separate
state and domain attributes
.
Its execution state is USER, SYSTEM, or INHERIT; INHERIT uses the caller’s
state. The program object itself has a USER or SYSTEM domain, and that saved
attribute contributes separately to the PVV descriptor. Other objects accessed
by the executing code also have domains. The USER domain is a storage-domain
classification, not a user identity or ownership boundary. At QSECURITY 40,
USER-state code cannot directly access SYSTEM-domain objects.
The algorithm at a glance
PVV = HMAC-SHA-256(descriptor, canonical_message)
PVV is calculated in four steps for the supported program format:
Walk the saved program graph, select the protected byte ranges, normalize
saved pointers, and put the ranges into canonical-message order.
Build a 32-byte descriptor from program attributes and constants chosen
by the recovered state, domain, version, release, and mode selectors.
Use the descriptor as the HMAC key and the canonical message as the input to
HMAC-SHA-256.
Split the result into four 64-bit values and compare them with the stored
values.
Leif Svalgaard’s earlier PVV work was a clue
Leif Svalgaard described the earlier mechanism in Chapter 15, “Program
Validation Value,” of
AS/400 Machine Level Programming
.
His
public program index
also lists
MIPGMVV
, which calculates an eight-byte value from program
attributes. I reproduced his published example. Its four selector constants do
not match the current LIC descriptor constants in either byte order, but both
designs select values according to state and domain. That similarity pointed
me toward the current 32-byte validation route.
Finding the validator
I started with
CHKOBJITG
, the IBM i command that checks object integrity.
For a program,
CHKOBJITG
reaches the IBM-supplied
QSYS/QSYCHKIT
program.
Its native procedure
QSYINTEGRI::checkPgmMod
contains this sequence, copied
from the retained IBM Display/Alter/Dump (DAD) output:
ADDI
loads selector 259 into
r10
; the following
SCV 10
, Supervisor Call
Vectored, enters dispatcher vector 10. The
10
in the mnemonic identifies the
vector, while the value in
r10
selects the service. That combination led to
this observed call path:
The live capture tied the path to the loaded address of my
CALLAES
test
fixture. I matched the remaining code against the IBM i 7.5 LIC from
installation media by procedure name, normalized instruction sequence, call
topology, constants, and tables. The live instructions and invocation frames
identify the observed
CHKOBJITG
route; the build-matched LIC supplies the
complete procedure bodies. For both
VBNTSSOB
and
VBNNAPE2
, the installation
addresses were
0x3000
above the captured live addresses and the normalized
bodies agreed; that displacement is evidence for this match, not an IBM i
addressing rule.
Reconstructing PVV
My parser supports uncompressed IBM i 7.5 program (
*PGM
) and service-program
(
*SRVPGM
) items whose record graph, section descriptors, and 40-bit segment
identity plus 24-bit in-segment pointer mapping follow the recovered layout. It
rejects other layouts before calculation instead of trying models until one
happens to match the stored result.
The stored result
vbnspnt2
writes 32 calculated bytes, loads them as four 64-bit doublewords,
and compares them with four values stored in different parts of the program
graph. Any mismatch returns false.
For
CALLAES
, the item starts at SAVF logical offset
0x4000
. The item-relative
offset must first be converted to a SAVF logical offset. That logical coordinate
counts only 512-byte payloads; the physical coordinate also counts each
16-byte record trailer:
LIC follows a graph of program headers, components, procedure records, native
sections, counted arrays, and optional records. It adds selected byte ranges,
not the complete program item.
Saved pointers cannot be hashed directly because their segment identities may
change after restore. LIC replaces them with a stable segment number and the
offset inside that segment. For example:
LIC also changes the order of some data. Appends shorter than
0x400
bytes are
copied into one owned stream. Appends of
0x400
bytes or more remain separate
entries. The final HMAC message contains the complete copied stream first,
followed by the retained entries.
Here, an aggregate entry is one buffer passed to the HMAC update path.
If the logical append order is a short span
A
, a retained span
B
, and a
short span
C
, the message order is
A || C || B
.
For
CALLAES
, 65 logical appends became three aggregate entries:
Entry
Length
Message offset
copied spans
0x1234
0x0000
retained span 1
0x0610
0x1234
retained span 2
0x0870
0x1844
The final message length was
0x20B4
, or 8,372 bytes.
Building the descriptor
The descriptor contains four 64-bit values:
one value formed by joining two four-byte program header fields;
a fixed constant selected by state, domain, and version class;
a constant selected by the target release;
a constant selected by the recovered mode.
“Version class” and “mode” are names for reconstructed selector inputs. I do
not present them as documented SAVF field names.
Within the retained fixtures, the recovered
version_kind=0x0028
input selects
one version class by contributing 0 to the table index; other observed values,
including
CALLAES
’s
0x000A
, contribute 1. With
CALLAES
’s USER state and
domain, that selects
2E9132CE813F75B2
. The mode byte independently selects
the fourth 64-bit descriptor value: mode 1 selects
3809245098034DDE
, while
mode 2 selects
3809745098034DDE
.
Canonical program-state values are
0x0001
for USER,
0x0080
for SYSTEM, and
0x0000
for INHERIT. For descriptor selection, the state selector treats
0x0080
as SYSTEM,
0x0000
as INHERIT, and every other value as the remaining
selector class. The domain selector tests the least significant bit of program
base byte
+0x20
—bit 7 in IBM’s MSB-0 numbering. In the
CALLAES
fixture the
byte was
0x80
; that bit is clear, so the program domain was USER. A byte of
0x81
selects SYSTEM program domain. This byte is separate from the 16-bit
state value
0x0080
.
The calculation selects these fixed tables without consulting the stored PVV.
The cryptographic operation
The lower LIC code creates a key object, copies all 32 descriptor bytes into
it, and feeds each aggregate entry to a message digest object. The next layer
implements the standard HMAC construction with a 64-byte block,
the
0x36
inner pad, the
0x5C
outer pad, and SHA-256.
The recovered calculation maps directly to Python’s standard HMAC
implementation:
For
CALLAES
, it returns the exact 32 stored bytes shown above.
Offline validation
I applied the recovered model to IBM-supplied save-file items and disposable
programs and service programs. The corpus measures agreement and structural
coverage over supported rows, not blind holdout or live restore and execution
tests. The final totals were:
known valid exact matches: 1,223
deliberate mutation fixtures: 16
successfully parsed rows: 1,239
unsupported program items: 17
total attempted items: 1,256
distinct structure profiles: 1,003
unexplained mismatches: 0
A structure profile fingerprints object type, release and version selectors,
mode, record shapes, and canonical-chunk construction without including the
protected byte values. The 1,003 profiles occur among the 1,223 known-valid
rows; repeated saves or equivalent layouts can share one. The 16 deliberate
mutation fixtures remained invalid. The parser rejected another 17 items
before calculation: seven had malformed section descriptors or descriptors
that did not expose the validated 40-bit segment and 24-bit offset mapping, and
ten contained pointers that could not be mapped unambiguously to a recovered
segment. These are unsupported structures, not unexplained PVV mismatches.
I produced these results with the local
pvv-ibmi
tool bundle.
pvv_demo.py
is its command-line entry point,
savf_checksum_demo.py
implements the SAVF
checks, and
scripts/reconstruct_v7r5_pvv.py
parses the program graph and
calculates PVV. I plan to publish the bundle and its usage notes in the
Silent Signal IBM i PVV repository
.
The
--table
argument specifies
sandbox.ser
, which contains the lookup table
used for the SAVF global checksum. I described its extraction in my
previous SAVF checksum article
.
check
verifies the SAVF checks and PVV.
fix
calculates PVV, writes the
four stored values, repairs the separate SAVF checks, and verifies the output
in a new file while preserving the intended native change.
Live restore controls
The offline matches establish the calculation. The following controls test how
restore consumes the stored value, whether edited native code survives, and
whether IBM i executes the changed control flow.
A stale stored value
In the
P7QPM831
test program, I changed one stored PVV byte but left the
protected program data unchanged. I repaired only the SAVF checks.
CPC3703
denotes normal restore completion in the baseline and corrected controls.
Input
PVV
SAVF checks
Result
baseline
valid
valid
CPC3703
, process status 0
one stale byte
invalid
valid
CPF3848
,
CPF3773
, process status 255
corrected value
valid
valid
CPC3703
, process status 0
The stale restore created an object, which I then saved again. The calling
process returned status 255, while the substituted restore messages recorded
the actual object counts:
CPF3848: 1 security or data format changes occurred.
CPF3773: 1 objects restored. 0 not restored.
The resaved object still contained the incorrect stored value. Writing the
independently calculated value restored normal completion. The mismatch was
therefore detected and changed the command outcome, but did not prevent object
creation in this control.
A native change that survived
The
RISCPVV1
test program measured native-code preservation without changing
behavior. I replaced one instruction with a different instruction that copies
the same register value:
before 60860000 ORI 6,4,0
after 7C862378 OR 6,4,4
The saved creation material—the input IBM i can use to recreate native
code—remained unchanged. To distinguish preserved native code from code
recreated from that material, I repaired PVV and the SAVF, restored the object,
and saved it again. The executable payload was eight native records joined in
graph order after removing each record’s final eight-byte saved-space pointer,
which is metadata rather than executable payload.
All 1,120 executable bytes matched between the modified and resaved streams;
the original differed at the edited instruction. The 40-bit segment-identity
prefixes within those trailing pointers changed as expected when
IBM i materialized the object; their 24-bit in-segment offsets did not. The
executable payload and repaired PVV remained unchanged.
CrackMe: a branch that changed behavior
PVVPASS
, which I call CrackMe here, provided the visible control. This
disposable fixture compared its argument with
silentsignal
, printed
pwd is ok
for a match, and printed
wrong
otherwise.
The retained source was:
#include<stdio.h>
#include<string.h>intmain(intargc,char**argv){if(argc>1&&strcmp(argv[1],"silentsignal")==0)puts("pwd is ok");elseputs("wrong");return0;}
I compiled it as a native Integrated Language Environment (ILE) C program with
DBGVIEW(*NONE)
,
OPTIMIZE(40)
, and
ACTGRP(*CALLER)
, then saved it without
compression.
The relevant saved instructions are below in reconstructed DAD style. Register
5 holds the current input byte. Register 0 holds the current expected byte.
The first
CMPI
sets
CR0.EQ
from the input byte. The instructions before
CMPL
do not change CR0.
SETTAG
affects the tag state, not the condition
registers.
CMPL 1,1,5,0
sets
CR1.EQ
from the comparison of the input and
expected bytes.
The branch at
0x1E75B1F2E2001F94
tests
CR1.EQ
and reaches the failure block
when the bytes differ. The next branch tests
CR0.EQ
and reaches success when
the input byte is zero. Equal nonzero bytes continue the loop.
The encoded displacements make the control flow explicit:
The saved text supports that mapping:
silentsignal
is at logical offset
0x69B0
,
pwd is ok
at
0x69C0
, and
wrong
at
0x69D0
. The success block
selects the text at
r30+0x10
; the failure block selects
r30+0x20
.
I replaced only the mismatch branch:
before 40860048 BC 4,6,0X48
after 60000000 ORI 0,0,0
The variants produced this result:
Saved variant
PVV
Instruction after resave
Output for incorrect input
baseline
valid
original branch
wrong
changed branch, stale PVV
stale
original branch
wrong
changed branch, repaired PVV
valid
changed instruction
pwd is ok
The repaired program printed
pwd is ok
for both
nope
and
x
. A fresh save
of the repaired object still contained
60000000
at the instruction site
identified from the object structure.
Restore access: command and API controls
IBM’s documented
Restore Object List (
QSRRSTO
) API
has a different authority model from the Restore Object (
RSTOBJ
) command.
IBM has documented its default public authority as
*USE
since the
2006 Backup and Recovery APIs manual
.
That permits calling the API; it does not supply the user-space, save-file,
library, or target-object authorities required for a restore. Callers without
the
*SAVSYS
save-system special authority must satisfy those documented
authority requirements, as USERB1 did within its test library.
For the end-to-end control, I rebuilt CrackMe from the retained source and the
same compiler settings. I resolved the patch location from the new SAVF. The
rebuilt program contained the same
40860048
mismatch branch at native record
1 offset
0xB4
. I created baseline, branch-edited/stale-PVV, and
branch-edited/repaired-PVV variants; all three had valid SAVF checks.
With the repaired SAVF loaded into save file
TESTSAVF
in the USERB1 library
and the target absent,
RSTOBJ
failed with
CPD0032
(not authorized to the
command) and created no program. To test the API separately, I used a small,
locally written USERB1-owned program that called
QSRRSTO
directly and restored
PVVPASS
into the USERB1 library. Both the caller and a small USERB1-owned
wrapper that recorded the job context before and after invoking the caller were
USRPRF(*USER)
and
USEADPAUT(*NO)
, so they neither adopted their owners’
authority nor used authority adopted higher in the call stack. In the same job,
the wrapper used IBM’s Retrieve Job Attributes command (
RTVJOBA
) to report
current user
USERB1
immediately before and after the API call.
Under this authority context, the repaired variant produced the CrackMe output
reported above. Its resave retained
60000000
at native record 1 offset
0xB4
, and its 1,032-byte executable payload matched the repaired input after
the final eight-byte saved-space pointer was removed from each native record.
The stale-PVV API control restored with the original branch and printed
wrong
instead. This was one end-to-end test within USERB1’s authorized object
scope: command denial, API restore, execution, and resave.
I then rebuilt
MEMDUMP
entirely as USERB1, applied the native edits to its
saved representation, and repaired PVV and the SAVF checks. Running as USERB1,
I called
QSYS/QSRRSTO
; it created the
MEMDUMP
program in the USERB1 library
as a USER-state, USER-domain program owned by USERB1, with
USRPRF(*USER)
and
USEADPAUT(*NO)
. A fresh save retained both modified instruction sites. The
repaired input, the USERB1-restored resave, and the distinct program object used
for the memory-read test had byte-for-byte identical 1,496-byte executable
payloads.
Signature, state, and domain boundaries
The native code controls above used USER state. I also tested the separate
state, domain, and signature boundaries.
Control
Result
USER to SYSTEM state, PVV repaired
IBM i rejected it as unsigned with
CPD37A0
, then
CPF3770
(no object restored)
USER to INHERIT state, PVV repaired
IBM i rejected it as unsigned with
CPD37A0
, then
CPF3770
(no object restored)
USER state, USER to SYSTEM domain, PVV repaired
IBM i restored it with
CPC3703
; a USER-state call failed with
MCH6801
domain violation
The repaired SYSTEM-state fixture passed the offline reconstructed PVV check,
but the live restore failed the digital signature requirement:
offline PVV validation PASS
live trusted-signature check FAIL
I also traced the complete 16-bit state field. The relevant LIC branches reduce
to this classification before the signature service is called:
state 0x0001 -> record flag 0
state 0x8000 -> record flag 0
all other 65,534 values -> record flag 1
The flag is an input to the later signature path, not the final restore result
by itself. Canonical SYSTEM state is
0x0080
, and INHERIT state is
0x0000
;
both produce flag 1. The activation resolver separately treats
0x0000
as
INHERIT, selects SYSTEM only for
0x0080
, and sends
0x0001
,
0x8000
, and
other noncanonical values to USER. I found no state value that both takes the
flag 0 path and activates as SYSTEM on this route.
The
0x8000
state value is not SYSTEM state. It restored and activated as
USER in the live control. The same hexadecimal value appears as the two-byte
domain contribution for SYSTEM domain, but that is another field.
Security impact
Under the tested conditions, externally modified USER-state native code
bypassed a compiler-generated pointer-validation sequence and performed a
memory access that the original compiled code could not. CrackMe independently
established execution of modified native bytes; the controlled
MEMDUMP
runtime test established this consequence.
The compiler-generated path used
LQ
to load the 128-bit pointer and record
its tag status,
TXER
to check that status, and
_SETSPPFP
(Set Space Pointer
from Pointer) before the memory access. At native section offset
+0x220C
, I
replaced the first two instructions with a direct native load and branch:
; original
2f3708714600220c: e2dfff9b LQ 22,0XFF90(31),11
2f37087146002210: 7c0004c8 TXER 0,0,41
; replacement
2f3708714600220c: eb7fff98 LD 27,0XFF98(31)
2f37087146002210: 48000028 B 0X28
; later target access
2f370871460022b8: 889b0000 LBZ 4,0X0(27)
The source had copied the supplied 64-bit address into this
r31
-relative
slot; the
LD
loads it into
r27
, and the branch continues at
+0x2238
. The
later
LBZ
at
+0x22B8
performs the byte read through
r27
. With the same
supplied address, the unmodified
MEMDUMP
failed with
MCH3601
(pointer not set). The modified code bypassed the generated validation
sequence and, when invoked as USERB1, returned the exact expected 32 bytes from
a known-address USER-domain buffer belonging to a cooperating QSECOFR job. The
target address was supplied by the cooperating QSECOFR job; obtaining such an
address independently is a separate prerequisite.
For the supported saved-program format, the derivable HMAC key makes PVV a
recomputable consistency check. With an editable SAVF and an authorized restore
path, recalculating PVV and the SAVF checks preserved the tested USER-state
native changes. Separate controls enforced trusted signatures for the tested
SYSTEM and INHERIT variants and blocked USER-state access to SYSTEM-domain
storage.
Conclusion
PVV was the missing piece between editing saved native POWER instructions and
preserving them through IBM i restore so that the modified code could execute.
Reconstructing it turned that obstacle into a repeatable research workflow:
CrackMe demonstrated changed native control flow, while
MEMDUMP
showed its
practical consequence in a controlled, known-address USER-domain read. The PVV
reconstruction is not by itself a vulnerability or a signature bypass; the
pvv-ibmi
release accompanying this article lets other researchers reproduce
the calculation and use the same workflow, while restore authorization,
trusted signatures, and domain enforcement remain separate boundaries.
Safari 27.3 Adds Support for Global Privacy Control
Daring Fireball
pxlnv.com
2026-11-10 09:47:10
Nick Heer, Pixel Envy:
There are a whole bunch of features and fixes coming to Safari
with Apple’s OS 27.3 update. One that is not in the beta release
notes but appears nevertheless is support for Global
Privacy Control. This new standard is effectively a
replacement for Do Not Track with legal ...
There are a whole bunch of features and fixes coming to Safari with Apple’s OS 27.3 update. One that is not in the
beta release notes
but appears nevertheless is support for
Global Privacy Control
. This new standard is effectively a
replacement for Do Not Track
with legal muscle that
should
permit you to indicate your tracking preference one time and then, theoretically, never again see a cookie consent banner.
In practice, it will take time for websites to add support, and it requires users to enable the feature in Safari’s Settings. I do not love the implementation in the first beta, which buries the checkbox in the Advanced tab with the ambiguous label “Use Global Privacy Control”, unlike the company’s proprietary anti-tracking features that live in the Privacy tab. But at least it is present and, in my testing, functional.
Come and Take It
403 Media
www.404media.co
2026-11-10 09:41:26
AI companies crack down on 'reverse engineer anything.'...
AI companies are trying to take the only cool thing their tech has ever done, making me vaguely interested for the first time ever in the concept of open weight models, local AI, etc. Time to take out a second mortgage on the house I don't have to finance a graphics card. Anyways, let's get into it:
It was a fun few weeks while it lasted. People using both Anthropic’s Claude and OpenAI’s Codex to do AI-powered “reverse-engineering” or decompiling are now hitting guardrails or having their accounts limited while trying to do things like unbrick their internet-of-things devices or remove surveillance ads from their smart TVs.
Several people have reported triggering “safety checks” in Claude Code that prevented them from doing AI-powered reverse engineering; a highly upvoted Reddit post in r/ClaudeCode reads “The Dream is dead. Reverse Engineer Anything (REA) is not likely to work with Claude.” A thread in the Reverse Engineer Anything Discord from last week reads, “Claude is refusing to decompile anything,” with multiple users responding saying they have hit similar walls. And X user log4j, who used OpenAI’s Codex to reverse engineer Samsung TVs, reported having their OpenAI account banned for violating its rules on “cyber abuse.” Other users said they asked Codex to reverse engineer hardware or their own code now say they have either been warned by the company or had their accounts restricted. A project called Decomp.wtf that made it easier to reverse engineer software and games has also shut down in recent days.
As we reported last month, Reverse Engineer-Anything has made it easy for people to use AI tools to hack electronics that they own and replace a manufacturer’s software or operating system with an open source or vibecoded one. People have installed new operating systems on their smart TVs, have turned baby monitors into AI assistants, have unbricked internet-of-things devices that were abandoned by their manufacturers, and have installed new software on very old hardware. At the time, I wasn’t sure how I felt about the trend, but as I’ve seen people take ownership and control back over the devices that manufacturers have purposefully bricked, turned into spyware, or have placed artificial limitations on, I have come to see AI-powered reverse engineering of electronic devices as one of the few LLM uses genuinely worth getting excited about. And so big companies have immediately taken steps to restrict this behavior.
The policy tweaks show that big AI corporations will protect other big corporations when their users find ways to use LLMs to circumvent the artificial constraints that hardware manufacturers put on their devices. AI-powered copyright circumvention is OK with big tech when it’s a massive company scraping the entire internet to build their LLMs, but is not OK when people then use those tools to liberate their internet-of-things devices. It’s not the end of AI-powered reverse engineering, but people suddenly getting locked out of their accounts for asking AI to reverse engineer their gadgets suggests that the future of this practice lies in open weight, local, and uncensored models, making it less accessible to the masses and the people who could probably benefit from it most.
Tarun Gogineni, an OpenAI engineer, tweeted that people are not supposed to have their OpenAI accounts restricted for reverse engineering: “these blocks are mostly accidental and a result of difficult decision boundaries; there is no prohibition against reverse engineering with codex. it’s getting fixed,” he tweeted.
But people who are doing AI-powered reverse-engineering suggest that they are moving away from big companies’ models to alternatives where they aren’t going to have their accounts disabled or have to figure out how to work around AI company guardrails.
“My general experience about reverse-engineering getting blocked has been more or less 100% correlated with the ‘cyber’ category blocks I have received. My take is that the lab[s] are probably under pressure to not have their models take part in some kind of criminal hacking activities and their cyber guardrails are erring on the side of being too strict,” Matt Brown, principal consultant at Brown Fine Security and someone who has been using AI to reverse-engineer devices, told 404 Media. “I am investing in hardware and trying to stay up to speed because the frontier labs guardrails will randomly change without warning on the same model. For my security research and pentesting work I really don’t want to invest tooling and energy into an ecosystem that will eventually lock me out. These guardrails on the frontier side have come at the same time as open weight models from (mostly) China are getting better and better.”
“Do you have the gun”:
According to a
police incident report obtained by 404 Media
, a father in South Carolina asked his six-year-old daughter if she “had the gun” before he left her alone at Target for more than an hour in the middle of the night so “he could maintain his place in line” to buy Pokémon cards.
Around the web
The biggest thing going on in tech right now is Jensen Huang’s apparent affair with an executive at the data center company Megaspeed who is an alleged Chinese spy. This isn’t the type of thing we cover very closely normally, and Sam mentioned it in the newsletter yesterday, but the
latest is that the company is now getting sued over this
. The AI slop
You Can See Everything memes
are out in full force. The incel looksmaxxers have weighed in (if you don’t understand this sentence, I won’t corrupt you). So on and so forth. If you’re curious why any of this might matter, The New York Times has a scoop that the
U.S. Department of Commerce killed an investigation into a Megaspeed
after Nvidia intervened. Cool government we have here. Anyways, moving on.
ICEd out:
The Department of Justice
said that it no longer has enough attorneys available
to respond to
every habeas corpus challenge
, and will begin letting judges rule on cases with no government opposition. Basically this suggests that ICE has detained so many people illegally that it no longer has enough attorneys to argue in these cases. Alarming, but also means that enough people are challenging their detentions that ICE is beginning to cry uncle. Also, I would normally never suggest you go watch a Bari Weiss x Ross Douthat joint, but parts of the
60 Minutes
interview with Trump were SO WILD
. Perhaps this guy doesn’t really stand for anything? Hmm.
Help Court Watch:
Our friends over at
Court Watch are doing a subscriber drive
. Court Watch grabs court records off the notoriously expensive PACER document system and makes them available for free and finds extremely interesting and important cases all the time. We partner with them on a bunch of stories so go check/help them out.
JA / NEIN. Image: Dixken.de
Enough:
The best
Raspberry Pi on the market now costs $385
. I remember when the whole point of a Raspberry Pi was that it cost, like, $20. This is, of course, due to the RAM/memory/everything shortage caused by AI data center buildout. If you know what people are doing with these top-end Raspberry Pis, let me know?
SLOPPED:
Actors
alarmed to learn
that they had been replaced by AI in the
Return of the Living Dead
sequel they were set to star in.
DOGE’d:
The
government’s IT systems are really fucked up
, argues our friend Karl Bode in a piece aptly called “U.S. government IT systems are completely compromised and will require a total rebuild.”
The surveillance state, now for kids:
The Atlantic has a deep dive on what
constant surveillance is doing to children
. I haven’t had time to read the full thing yet, but have been waiting for a piece like this for a long time.
A very fast Easter "computus" algorithm, accurate over ±10 million years.
10 November 2026
This post is a fun little side quest to kickstart my journey optimising
regional
calendars.
Background
Computing the date of Easter faster is not going to matter in any real application. Even in places where it might seem to matter, like high frequency trading applications, it is probably better to just use an in-memory lookup table for holiday dates...
However, no "Fast Date" series would be complete without some mention of this classic problem.
The rules for Easter were broadly decided at the First Council of Nicaea, organised by Emperor Constantine in 325 AD, and later modified by Pope Gregory XIII in 1582
(referred to here as "Gregorian Easter")
, with the first Easter under the new rules applying in Catholic countries the following year. The Church of England first observed the new date of Easter in 1753, but Eastern / Orthodox churches continue to follow the old rules.
This article is about the new "Gregorian" Easter, because it is much more complex and slow to compute.
The Function
The code below runs really fast.
It's around twice as fast as a standard easter function that you might find in a typical date library, and I suspect it may be the fastest one made so far
🤷
.
Part of that speed is attributable to using
only 5 multiplications
(whereas typical reference algorithms have 10 or more multiplications)
.
The accuracy range of around
-11m → +16m
years might seem a bit of overkill, but the reason I targeted this range is so that any date library that expresses dates via a signed or unsigned 32‑bit "rata die", is covered by this function. This means that if you decide to not clamp the logic to years after 1582, at least it will return something resembling the correct rules, rather than garbage.
New Gregorian Easter Function
Given:
year
∈ [-11,103,600 ... 16,663,835]
Return:
month
and
day
Note that this function contains more terms than traditional Easter functions, but bear in mind that the compiled assembly will be a lot smaller. So if you don't care about the speed, but want a tiny impact on binary size, that could be a reason to consider this function.
The rest of this post will briefly explain the tricks used in this function:
You'll notice that the very first thing we do is add a strange value
SHIFT
to the input value. This is done for two reasons:
to move all dates to the positive domain to avoid complexity associated with signed operations
but also importantly, to allow various constants throughout the algorithm to be factored out.
For example, most Easter algorithms have a term like
(5 + 8 * c) / 25
, where
c
is the century (
year / 100 + 1
). The term
25
in the calculation of shift is responsible for aligning the century such that the constant
5
can be removed, resulting in
c * 8 / 25
, which is then approximated in the final algorithm with a single mul-shift:
(u64) c * M25 >> 32
.
Other terms in
SHIFT
:
19, 400, 30
are all doing similar things related to the 19-year-cycle, 400-year-cycle, and mod-30 steps.
The term
* 2
is different. Without this term, the range of coverage would be -5,403,600 → +22,363,835; which doesn't quite cover the range we wanted, which for signed 32-bit rata die, is ±5.88m years. Including
* 2
increases the value of shift by exactly 5,700,000, which is how many years it takes for the Easter pattern to repeat, and gets the range we are after.
If you like this type of optimisation, but are not a fan of the low-level bit-shifting and so on, then you might prefer to use this function here below. It is a much more readable version of the function, which only has these higher-level optimisations applied.
Note that unlike in the main function presented earlier,
MOD 30
needs to be a positive-modulus function (even for positive dates), and that the
nextSunday
helper is anchored to the internal logic of the function, not related to Unix day-counting.
Readable Easter Function
Given:
year
∈ [-11,103,600 ... 2
31
-1]
Return:
Days since 22 March
∈ [0..34]
Note: a
variant
in the C++ repo has some small optimisations not shown here (fast day-of-week and fast mod 30), and a range of [-73,803,600 .. 70,208,581].
Trick #2 - Never computing:
year mod 19
.
Deep link
Computing
year
%
19
is a staple of Easter algorithms.
It's related to the
Metonic cycle
, where every 19 years there are nearly exactly 235 full moons.
It is traditionally used in Easter algorithms in two ways:
a term like:
(11
*
(
year
%
19) + ... )
%
30
;
–
and:
a term like:
(
year
%
19) > 10
We are going to compute these same things using a single multiplication.
These steps seem unavoidable at first, but they can be eliminated. We'll begin by expanding the first one:
(11
*
(
year
%
19) + ... )
MOD
30
(11
*
(
year
-
year
/
19
*
19) + ... )
MOD
30
(11
*
year
-
year
/
19
*
209 + ... )
MOD
30
(11
*
year
+
year
/
19 + ... )
MOD
30
The last step there might be the least obvious. It works because we can add any multiple of
30
to the multiplier and get the same result (a property of
MOD
), so add
30 × 7 = 210
, which means we can remove the multiplication by
209
and just invert the sign.
This leaves us with only two terms related to
year
which can be computed efficiently in parallel, however using a 64‑bit multiplier, we can actually merge these into one (fixed-point multiplication by
11
1
/
19
):
This is the only 64‑bit multiplication in the function, and a 32-bit compiler should have no trouble turning that back into the previous pair of multiplications.
The algebra above relies on
MOD
30
, which is different to
%
30
in C for negative numbers.
The value being computed does not go negative over our range, so the substitutions remain valid.
Now on to the other term:
(
year
%
19) > 10
. It is a well known trick to use the low bits from the mul-shift of division by
19
as a comparison cutoff, and the version used in my function is
u32
(
b
) > 0x90000000
. The extra term in our multiplier (
11 << 32
) has no effect in the lower 32‑bits, so this still works. Cassio Neri has written about things like this, if you want to read more you can start with this
Overload Edition 154
.
So, this is just one multiplication plus the
MOD 30
, which is usually an additional two multiplications, but we'll eliminate those later in
Trick #4
.
Trick #3 - Computing "X − (Y % 7)" without negation.
Deep link
There's always a
% 7
term in these Easter functions, which is then
subtracted
from a final result. This is because Easter is on the “
first Sunday after [...]
”.
Clearly we are going to use the fast-mod-7 trick from the
weekday article
. If you haven't read that article, you should. You won't understand this section otherwise, and frankly, it's a better article than this one.
Fast computation of:
y = 7 - (x % 7)
Valid range:
1 ≤ x ≤ 178,956,972
u32 constM67 = (1 << 32) * 6 / 7
u32y = x*M67 >> 29
The same mod-7 trick as before, but notice that the mapping is reversed? (The numbers track anti-clockwise)
So why not just subtract the result of
% 7
like everybody else? Well, that would make the final line be:
j - m + C
(for some constant
C
). This does not fit the pattern of a single-operation
LEA
instruction on x86.
Instead, we adapt the fast-mod-7 code to use a fixed-point multiplier of
6 / 7
(rather than
1 / 7
) before the right-shift-29, which means this line actually counts mod-7 backwards for us! This means the final line can be
j + m + C
, which fits
LEA
and saves... one cycle 😀
(depending on the compiler and CPU...)
.
Trick #4 - Computing MOD 30 faster with the mod-pad technique
Deep link
u32 constexprM30 = (1 << 32) / 30 + 1
u32h = (u64) g*M30 >> 32
u32i = (g + (h << 1)) & 31
This one is pretty obvious if you've been following this blog series.
MOD 30
can be calculated faster by using our favourite identity:
This was introduced and proven in the
weekday
article, and utilised more notably in the
time-of-day
article.
Here setting
D = 30, c = 2
gives us the useful version where we can apply
MOD 32
(same as
& 31
)
.
This final bit, I'm not sure if it's been done before exactly like this.
Easter can only ever be in March or April (month 3 or 4), and luckily March is 31 days long, which means we can use
% 32
to truncate dates there. A straightforward modulus would cause March 32 to overflow to April
0
, a non-existent date, so we add the term
v >> 7
which increments the date when it overflows
(a lucky coincidence relying on April, month
4
, being a power-of-2)
.
I have seen similar things done before using
% 31
, but I have not seen this with the clean bit-mask approach.
So, that's it. A bunch of fussing about to make a simple streamlined function that is next to impossible to read... but fast.
This article was prompted by Twitter/X user
Dirk Loss
replying to one of my posts with a link to a ChatGPT thread, where he used AI to compute Easter faster.
See ChatGPT thread.
The AI actually did a pretty good job. It used learnings from my prior blog posts to apply various optimisations, but also came up with new twists on these ideas. It produced a function that is
really fast
, and that is accurate over the range 1498–14,544. The range is a fairly reasonable choice given that the modern rules for Easter took effect after 1582, and nobody really needs Easter further into the future.
In a serious case of
"Not Invented Here"
syndrome
(on behalf of human kind)
, I had to see if I could beat the AI. I clearly did, otherwise there wouldn't be this blog post. The wider-range algorithm presented in this article has around 5-15% higher throughput across tested platforms, and similar latency (despite the wider range).
My algorithm was adapted from the one presented in Calendrical Calculations (Reingold and Dershowitz).
I did not apply any learnings from the ChatGPT one, though we settled on several similar steps.
I suspect this function could be optimised more, as it still has the same overarching structure of existing algorithms going back a
very
long time.
I tried for a little while to find a shortcut solution using the Python "Z3 Theorem Prover", which found an alternative which is a further 15-20% faster than my main one, however it's only accurate over a micro range [1894 .. 2199].
It is available in the testcase repo
. If you can find a function of similar or faster speed with a wider range, feel free to let me know and I will update the repo and this page!
Although I beat the AI in this case, it’s a pretty mild victory as it was just a basic model with a moderate amount of compute. It’s sad to know that if frontier models were pointed at the problems I’ve been tackling in this blog series, they would probably unearth every last jewel of optimisation left in the blink of an eye. I hope that I have time to explore this space more before it becomes barren.
If you enjoyed this post, you should
follow me on X
to get notified when I publish more date and algorithm related articles.
The same repository is used for benchmarking, where a large set of random years are loaded into memory and tested.
All results were obtained by running the benchmark with
-repeat=10
and recording the
median
results.
The
-batch
flag runs each computation 3 times before loading the next entry from memory. This ensures that the processor is not bottlenecked by memory access.
Latency results use the same command but replace the batch flag with
-latency
. This mode feeds the result of each computation into the next, so there is no parallelisation.
The number in a small font size represents the number of nanoseconds per year computation.
The larger number is the ratio of these results compared to the
New
function as a baseline.
Note:
the benchmarks compute
"Days since 22 March"
(not day and month), as some of the reference algorithms only return this value.
If my optimisation of the day/month step is novel, then the speedup would be larger than presented here.
Algorithm:
Anonymous
(Unsigned)
Calendrical
Calculations
Ian Taylor
(16‑Bit)
Dirk Loss
(ChatGPT)
New
New
(Z3/Micro)
Range (years)
0-2
31
-1
0-2
31
-1
0-2
15
-1
1498‑14544
> ±10m
1894‑2199
MacBook Pro 2024 (MacOS 15.6.1)
Apple M4 Pro
Compiler: Apple clang 17.0.0
Charlie Warzel, writing for The Atlantic (gift link):
It is curious, then, that, as news came out that the Nvidia CEO,
Jensen Huang, had had a romantic relationship with a Chinese
businesswoman who was also an asset of Beijing’s Ministry of State
Security, notable factions of Silicon Valley and ...
Our site’s security protections triggered a block. If you
think this was in error, email us at
[email protected]
. Please include how you got to this webpage and the
Cloudflare Ray ID located at the bottom of the page.
If you would like to inquire about permission to access our
content, email us at
[email protected]
.
U.S. Commerce Dept. Inquiry Into Megaspeed Was Halted After Nvidia Name-Dropped Trump Appointee
Daring Fireball
www.nytimes.com
2026-11-10 09:35:38
Ana Swanson and Devlin Barrett, reporting yesterday for The New York Times (gift link):
Investigators at the Commerce Department were deep into a
monthslong investigation of a Singaporean company that they
suspected of smuggling Nvidia’s artificial intelligence chips
into China when their work c...
He was a billionaire politician who is maybe not
so
politically relevant; she was his girlfriend of 26 years, a financial executive, whatever that means. Can we make it
any more obvious
?
That's right: Former New York City Mayor Michael Bloomberg and his longtime partner Diana Taylor
finally tied the knot
on Monday after more than a quarter century together. And what a quarter century it's been!
"Twenty-six years after a chance seating assignment, Mike Bloomberg and Diana Taylor have married," a spokesperson for Bloomberg
posted
on the ex-mayor's X account. "The longtime couple exchanged vows today in a small, private ceremony at their home on the Upper East Side, joined by family, including his daughters, Emma and Georgina. The two first crossed paths when they sat next to each other at a Citizens Budget Commission meeting while he was first running for Mayor."
Extremely romantic origin story aside (we always thought it was strange that the Citizens Budget Commission only meets by candlelight at that cute hole-in-the-wall Italian spot down the block), Bloomberg and Taylor have been through a lot together over the last two and a half decades.
It was a fun few weeks while it lasted. People using both Anthropic’s Claude and OpenAI’s Codex to do AI-powered “reverse-engineering” or decompiling are now hitting guardrails or having their accounts limited while trying to do things like unbrick their internet-of-things devices or remove surveillance ads from their smart TVs.
Several people have reported triggering “safety checks” in Claude Code that prevented them from doing AI-powered reverse engineering; a
highly upvoted Reddit post in r/ClaudeCode
reads “The Dream is dead. Reverse Engineer Anything (REA) is not likely to work with Claude.” A thread in the Reverse Engineer Anything Discord from last week reads, “Claude is refusing to decompile anything,” with multiple users responding saying they have hit similar walls. And X user log4j, who used OpenAI’s Codex to reverse engineer Samsung TVs,
reported having their OpenAI
account
banned
for
violating
its rules on “cyber abuse.” Other users said they asked Codex to reverse engineer hardware or their own code now say they have either been warned by the company or had their accounts
restricted
. A project
called Decomp.wtf
that made it easier to reverse engineer software and games has also shut down in recent days.
As we reported last month,
Reverse Engineer-Anything
has made it easy for people to use AI tools to hack electronics that they own and replace a manufacturer’s software or operating system with an open source or vibecoded one. People have installed new operating systems on their smart TVs, have turned baby monitors into AI assistants, have unbricked internet-of-things devices that were abandoned by their manufacturers, and have installed new software on very old hardware. At the time, I wasn’t sure how I felt about the trend, but as I’ve seen people take ownership and control back over the devices that manufacturers have purposefully bricked, turned into spyware, or have placed artificial limitations on, I have come to see AI-powered reverse engineering of electronic devices as one of the few LLM uses genuinely worth getting excited about. And so big companies have immediately taken steps to restrict this behavior.
The policy tweaks show that big AI corporations will protect other big corporations when their users find ways to use LLMs to circumvent the artificial constraints that hardware manufacturers put on their devices. AI-powered copyright circumvention is OK with big tech when it’s a massive company scraping the entire internet to build their LLMs, but is not OK when people then use those tools to liberate their internet-of-things devices. It’s not the end of AI-powered reverse engineering, but people suddenly getting locked out of their accounts for asking AI to reverse engineer their gadgets suggests that the future of this practice lies in open weight, local, and uncensored models, making it less accessible to the masses and the people who could probably benefit from it most.
Tarun Gogineni, an OpenAI engineer,
tweeted that people
are not supposed to have their OpenAI accounts restricted for reverse engineering: “these blocks are mostly accidental and a result of difficult decision boundaries; there is no prohibition against reverse engineering with codex. it’s getting fixed,” he tweeted.
But people who are doing AI-powered reverse-engineering suggest that they are moving away from big companies’ models to alternatives where they aren’t going to have their accounts disabled or have to figure out how to work around AI company guardrails.
“My general experience about reverse-engineering getting blocked has been more or less 100% correlated with the ‘cyber’ category blocks I have received. My take is that the lab[s] are probably under pressure to not have their models take part in some kind of criminal hacking activities and their cyber guardrails are erring on the side of being too strict,” Matt Brown, principal consultant at Brown Fine Security and someone who has been using AI to reverse-engineer devices, told 404 Media. “I am investing in hardware and trying to stay up to speed because the frontier labs guardrails will randomly change without warning on the same model. For my security research and pentesting work I really don’t want to invest tooling and energy into an ecosystem that will eventually lock me out. These guardrails on the frontier side have come at the same time as open weight models from (mostly) China are getting better and better.”
Brown posted a YouTube video last week
explaining how he found hidden Bluetooth commands in an internet-of-things gas monitor attached to his propane tank with the open weight model GLM 5.3. He has explained in
various posts
that the guardrails big companies are putting on reverse engineering are why local AI and
open weight models
are important.
AI-powered reverse-engineering isn’t going anywhere, but it does look like it’s going to become much harder to use the most popular frontier models from OpenAI and Anthropic for it. It’s unclear how much longer it will be possible for you to open an OpenAI Codex window, ask it to find a smart TV hooked up to your network, and tell it to install a new operating system on it. Moving forward, it looks like this type of work will be best done with open source, open weight, uncensored, and local models. That’s a bummer, because one of the things that was so exciting about the Reverse Engineer-Anything trend was how easily accessible it had become.
Last month, researchers and law professors at Cornell Tech, Columbia University, and New York University
published a paper
about how cheap, AI-assisted reverse-engineering is challenging big manufacturers’ dominance over the devices their make, and is challenging existing intellectual property law.
“AI systems can identify hardware components, extract firmware, decompile object code, and clone entire apps. The resulting struggle between technology vendors and reverse engineers will challenge a wide range of laws, including trade secret, copyright, anti-circumvention, computer misuse, and contract,” they write. “The law of reverse engineering was built for a world where opening a device took time, tools, and rare expertise. That friction is vanishing as agents whittle endless, precise picks for the many little locks that fill our digital lives.”
In recent days, people have started modifying older digital cameras with new, vibe-coded operating systems. In a video about hacking old cameras, the
YouTuber Breno Loves Cameras explains
why it’s such a big deal and why camera companies don’t like it; that same logic can be applied to any device manufacturer.
“Camera companies have this practice of keeping features to release on newer cameras, and having distinctions [in features] in camera lines,” the YouTuber Breno said in one video. “This is breaking that from those big companies, which are going to lose a lot of money if this becomes a big thing.”
Through that lens, it’s easy to see why big companies are protecting other big companies. People finally found a thing to do with AI tools that gives consumers a bit more control over the devices they bought; it must be immediately stamped out.
“This vibe-code hacking is only called ‘reverse’ when somebody who lacks a trillion dollars is doing it,” the science fiction author Bruce Sterling tweeted. “When you ‘reverse engineer’ the entire Internet Common Crawl, you just built a nice AI model.”
About the author
Jason is a cofounder of 404 Media. He was previously the editor-in-chief of Motherboard. He loves the Freedom of Information Act and surfing.
It’s been a long time coming. As someone who’s been first experimenting, then using, and now relying on Home Assistant to automate some portions of my home, I’ve long looked at a few key projects as being just out of reach. This past week I tackled one of those out of reach projects by installing a smart thermostat. Let me quickly catch you up on why I considered this out of reach, and then I will walk through how I choose a thermostat, the hurdles and quirks of installation, and then show the end result.
Background
A couple years ago we moved from a home built in 1970 to a relatively much more modern home built in 2001. With this came a number of benefits, such as Cat5 Ethernet drops in several rooms, which have enabled me to grow and expand my home network and smart home goals.
One such nicety I was truly expecting was a C Wire behind the newer home’s thermostat, unfortunately my hopes were dashed when I took a peak behind the old thermostat on the wall. It was one of those basic 5-day/2-day digital thermostats that were very common in the 90’s/00’s, and was loaded with two AA batteries and no C wire. No C wire meant if I wanted to install a true “smart thermostat” I would be constantly tied to either batteries, a proprietary “C wire adapter” that some companies offer but are not universal, or replacing the thermostat wire in the wall. Truly, what I wanted was to replace the wire in the wall - having a C wire meant I could use nearly any smart thermostat on the market. The smart thermostats that connect with WiFi usually require a C wire as they are generally too power hungry to run on batteries.
So I walked away. For two years.
I thought, maybe I’ll hire someone to run a new wire for me, but that expense seemed frivolous compared to the various home improvement projects already in line waiting for funding. There it sat, on the back burner for about two years. In that time I’ve continued to expand my smart home, adding a Lay-z-spa WiFi module to the inflatable hot tub, some water leak detectors, a siren, and more. But integrating the homes HVAC climate control remained out of reach.
Then, a news story about consumer rights caught my attention. It lead me over to a FULU webpage, which I browsed around for a little while before finding a link to the Nest Thermostat bounty:
Nest Learning Thermostat Gen 1 & 2 [Awarded]
I had heard of NoLongerEvil when the news originally broke earlier this year. But this reminded me of the project so I jumped into the NLE documentation pages
Introduction - No Longer Evil
and read through the installation steps. Didn’t seem to hard, especially for a 2nd Gen Nest, and there was good support with Home Assistant. Maybe a day or so later I came across a post from someone using a zigbee thermostat in Home Assistant. The C-Wire upgrade continues to roll around in my mind as something worth trying. I order a 50ft 6-wire thermostat cable on Amazon and start pre-planning how I can make the upgrade happen.
The missing C Wire
So I head down to the basement and locate the existing thermostat cable running from the furnace. I trace it along until it diverts up through a hole in the ceiling. I consider my positioning in the house and believe that this is pretty much directly below where the thermostat is mounted in the hallway on the level above me. I look for how the wire is secured - with many zip ties onto various pipes. Some water lines some gas lines. That is fine but I am concerned with how the wire might have been secured inside the wall behind the thermostat. A single staple could not only ruin my plan for an “easy” upgrade but might mean cutting large holes in walls where I really don’t want to.
Based on the accessibility it didn’t look feasible to fish a new wire to the thermostat while keeping the existing wire in place. Doing so would require adding at least another hole in the basement ceiling, and likely another hole in the wall above, things I would like to avoid. That left me with essentially two options. Either attach the new wire to the old one behind the thermostat and pull down from the basement, or cut the wire in the basement, attach the new wire, and pull up. Either way was essentially the same - once the old wire is pulled out of sight on whichever side, that would be a point of no return.
I decided to attach the new wire in the hallway, behind the thermostat. I disconnected the wires and removed the old thermostat, then used a copious amount of electrical tape to join the new wire with the old one. I returned to the basement and started pulling the old wire down. At first there was essentially no give. I thought I was toast - the installer “must” have put a staple into a stud to secure the old wire behind the wall. I suppose this is probably a builders best practice but sometimes as a homeowner you just need a wire to be able to pull through, ya know?
Anyway, I went back upstairs, and pushed and pulled the wire a few inches over and over, trying to free up the drywall enough to hopefully past the thicker taped portion through the drywall. In the end I got my drill and made the existing hole slightly larger thinking this might be the hold up.
Back downstairs and on my final hope, I gave the old cable a strong tug and low and behold it started to slide out! I cannot express how much of a relief this was as I was able to get a couple of solid feet to pull through so I figured at this point there must not be anything securing the cable in the wall. All I need to do is get the new cable the few feet from the thermostat location through the floor / basement ceiling hole. Once that is passed it would be straightforward to finish routing the cable by hand.
OK, so I head back upstairs and find the new cable has wound up a bit so I straighten it out. Then I think about how I need to avoid pulling the whole new cable into the wall, so I tie the open end to a door handle in the hall. This way i cannot accidentally pull too far.
One or two more solid pulls and I see the electrical tape pulling through the ceiling! Yay, I am essentially home free.
I end up having to go up/down the stairs several more times as the new cable keeps binding up, but each time I can clear the bind and then pull a more through. With a couple feet left upstairs (still tied to the door handle) I stop pulling and prepare to run the wire over to the furnace. The old wire I mentioned was zip tied to pipes for most of it’s routing, but I discovered a long portion of the run was a hot water pipe. This seems like a non-optimal solution considering copper wire is a great transmitter of heat. So instead I pop a couple reusable cable staples into a beam and then run most of the way by following some electrical wires. Near the furnace I go ahead and use cable ties onto nearby conduit for the final part of the run.
So, we’re at the furnace, now what? Per my researching basically all modern HVAC systems will have a screw terminal for a C Wire. I guess installers just save a couple bucks by running a 4-wire cable instead of a 5-wire cable? I don’t understand this at all and it makes me super annoyed. Anyway, I actually bought a 6-wire cable because it was essentially the same price as a 5-wire, I think literally about a $5 difference. So I have an extra wire just in case some future HVAC enhancement needs another wire. Even in homes not using smart thermostats by default or not needing a C Wire should just have the spare wire there. Leave it un-stripped and taped up or secured with a wire nut, but just don’t run 4-wire cables. Hopefully at some point after 2001 it became a new building code. Rant over.
Anyway turn off the power and then pop open the furnace panels and find the wiring area with the old 4-wire cable. I take pictures (always take pictures of before & after!). The wiring is very simple, just using screw terminals. I remove the old wires and connect new ones including the C wire. I actually used the wrong color at first but then found that the default for a C wire is blue so I swapped it. With everything buttoned up I head upstairs and connect the old thermostat. I also enable power to the furnace again. Now I can run through the functions - everything works! (fan on, heat, cool). I’m ready to go smart. Since I hadn’t actually received the new thermostat yet, I go ahead and install the old one back on the wall.
Picking the upgrade
When we left off on the smart thermostat I mentioned a couple of options I was weighing. Either a Nest or one of the Zigbee models (such as the Zen Zigbee Thermostat). I had also considered “rolling my own” from a zigbee controlled relay board as well.
In the end I took what feels like the safest option - the Nest 2nd Gen thermostat. Why a Nest with other options exist?
Solid hardware - people absolutely raved on them when they came out (before Google went and killed all of their smart functions).
Family friendly - Comparing the user experience of the Nest to the Zen, I feel that the Nest is slightly more user friendly - just rotate the outer ring to change the set temp. The Zen is pretty close though and I don’t think would have been an issue.
Keeps working if Home Assistant, WLAN, or internet go down (I.e., you can still walk up to it and set the mode or temp manually and it will control HVAC fully offline). I’m not sure if all Zigbee models can do this - likely some can but it was definitely something where I wanted to make sure manual control would always be available even if technology is down.
Price - absolute steal pricing for used. This makes sense given that the hardware was abandoned by the OEM. Most people don’t want something they have to hack/flash/self-host/etc. This makes picking up a used Nest quite easy. If you decide to go this route be sure to purchase a compatible model (currently only 1st and 2nd Gen is supported with 3rd Gen hopefully in the future) and WITH the required back plate. The Nest is essentially two pieces and you must have both - the back plate connects to your thermostat wires and then the display snaps into that. Without both you will only have a paper weight and weirdly the auction listings I saw for only a back plate were quite a bit more expensive than listings that had both pieces included.
If you’re in the UK I think there was a 3rd piece you need - some kind of control box for your HVAC - please do your research!
Honestly if I had woken up on my other side that morning I might have bought the Zen. I already run most of my smart home on Zigbee, the 2nd hand pricing I saw was very close to that of the Nest 2nd gen, the interface seems simple, etc. It was a close race.
Hacking the Nest
Before recieving the Nest I went ahead and added the NoLongerEvil app to Home Assistant (HAOS), so that was ready to go.
After waiting a few days for the delivery I was ready to swap out the thermostat, but wait, we first have to free it from the evil corporate clutches. In truth I could have plugged it straight in and used it but with Google terminating them it would have been even dumber than my old thermostat - allowing set point and mode, no schedule programming supported - obviously that wouldn’t fly.
So I pulled up the NoLongerEvil documentation again and got started. In the end the process was mostly easy with a couple of gotchas. First, be aware that flashing from a Windows PC is not supported. Only Mac and Linux will work. Luckily I already run Bazzite on most PCs so I didn’t have to worry about this one. If I’d only had a Windows PC then flashing a bootable Linux desktop to a USB flashdrive would have only added a few minutes to the process.
I opened the AppImage which reported everything was ready to start, I connected the Nest to a MicroUSB (too old for USB-C port) and it booted up.
From there things were a little bit “fiddly”. I did have to run the extra terminal command for expanded USB access which was listed as an optional step in the guide. Conversely I didn’t need to install any extra packages as apparently Bazzite had everything needed by default.
Upon the first couple of attempts the installer timed out waiting for the Nest to connect. This was mostly because the Nest takes quite a while to boot and the installer times out slightly too soon (I think). On the 3rd try I got the timing right and the installer found the Nest and flashed it.
After flash was also a bit “fiddly”. So the Nest booted up from the “NLE” boot screen, confirming the software had loaded successfully. From there the installer goes right into trying to connect to the Nest over the network. However, you have to get the Nest connected to your WiFi network (obviously, but not mentioned anywhere in the setup document). Secondly, after booting up the Nest apparently has a timeout of something like 2-3 minutes where it will function normally but after the timeout it will go to an error screen saying “please connect the back plate” and it simply won’t let you do anything once that comes up. So you might be in the middle of typing in your “a little too complex” WiFi password when the error pops up and there is no way to exit the error except connecting the back plate. So I did that and then went back and re-started entering the WiFi password when a second error popped up of “no wires detected” (or similar) - again no way to exit or go back. Sigh - this was pretty annoying to be honest.
Fine - I shut off furnace power, remove the old thermostat and then wire in the new back plate, and then click in the Nest. Now, standing in the hall rather than sitting at my desk I start entering the WiFi for the third time. And once again I am a few character in when “Power not detected on Rh wire” OMG CAN YOU JUST LET ME ENTER THE DARN PASSWORD.
Back downstairs, turn on furnace power, back upstairs, the Nest walks through a setup process, shows me which wires are connected, everything looks good. Finally, after probably 20 minutes of being more interrupted, the Nest let’s me finish entering the WiFi credentials.
Back at my computer - I remember that I probably need to add a VLAN rule to allow Nest specific traffic to reach Home Assistant. I try to keep all IoT devices on a separate WiFi network that by default cannot access the internet or other devices on the LAN. I add the firewall rule and then continue with the installer - it finds the Nest quickly and, applies the LAN address and correct port for Home Assistant / NLE, and we are ready to go.
Programming
And wow, it’s really really good. First of all, I’ve always been annoyed that “programmable thermostats” are limited to about 4 settings per weekday and per weekend. I figure if you can do 4 why not 6? Why not 8? In our old home we replaced the aging furnace and opted for a “smart touchscreen” thermostat and it was literally the worst. It was a terrible resistive LCD that barely responded to taps, the interface was needlessly complex, burying settings many pages deep, it didn’t allow to setup a fan cycle, and was still limited to 4 temp settings in the schedule. Awful, just awful.
Why is the Nest good? First of all, I can’t tell you how much easier it is to program the schedule from a PC browser than trying to stand in the hall and use buttons on the old one. Click the time bubble and enter the temp. Drag the bubble earlier or later. Add more bubbles OMG IT ALLOWS MORE THAN 4 PER DAY ITS A MIRACLE.
Realistically do people need more than 4 per day? I don’t know. All I know is that when programming the old one I would always feel like “man I just need one more time setting to get this how I want it.”
Fan cycle. This is something I have wanted forever. Ever since I heard someone, probably with a Nest, talk about it ten years ago or something. It let’s you say “if the heat or A/C don’t run for a full hour, spin the fan for a few minutes.” Why is that such a big deal? Well, in a house, especially with multiple floors, the spot with the thermostat is one temperature, but there are going to be a whole range of other temperatures everywhere else. Colder in the basement, hotter upstairs, maybe cooler in that one room and hotter where the sun shines in the windows, etc. Not only does this help to normalize temperatures by moving the air around, but it also keeps the air clean and fresh by running it through your air filter even when heating and cooling isn’t needed.
Learning. I don’t yet know if I care about this. Apparently the thermostat will take notice if you keep turning up or down the set point, and eventually it will adjust your daily schedule based on that behavior. I have this enabled for now and will be curious to see if it works or is annoying.
Other. It gets the date, time and outside temperature from Home Assistant - pretty cool! It also has a built in humidity sensor.
Home Assistant
I mentioned that I installed NoLongerEvil as an addon in Home Assistant. This is not the only option - you can run it separately with or without Home Assistant, and you can even use a free cloud service from NLE if you aren’t into self-hosting. In that case you are relying on NLE to keep their cloud bills paid and stuff. As an already prolific self-hoster, I definitely wanted to go that route.
In addition to the NLE screen where I can see status and set the schedule, it was also easy to add a climate card to my dashboard for family use. This card allows easy access from our phones in the Home Assistant App to tick up or down the temperature, and change the mode (like go from heating to cooling or off). This is great because it both makes the thermostat available to everyone who I decide to give an Home Assistant account to, through their phone. And because Home Assistant is accessible from anywhere, we can tweak the house settings from anywhere in the house or even away from home. Driving home in a blizzard and really want the house nice and toasty when you get there? No problem.
More than just remote control, all the same core functions available from the climate card can be added to Home Assistant automations. I may or may not ever add automations but for someone already using them to turn on and off lights, send notifications, etc., this would not be difficult. I just haven’t thought of anything I need to automate yet. But it gives me a nice feeling knowing I can have so much control over the device I purchased.
Conclusion
It’s up and working, the heating kicked on right on schedule this morning to warm up the house before clock alarms sounded. I gave the family a super quick 2-minute demo of how to use the wall unit and how to pull up the card in Home Assistant. No questions, a little bit of praise (for the phone control, the money saved, and keeping hardware out of a landfill). It seems like a lot of effort for such a small result, but it goes so much beyond this. It’s going to end up being countless little things for years to come. It’s going to be turning things down/off on a road trip because we forgot before leaving the house. It’s going to be ticking up the heat when we are all in the basement playing a board game and feeling chilly. Or a hundred other scenarios that will happen.
Would I do it all again? Yes for sure. Especially running a C Wire as that opens the door to so many options and frees me from being worried a pair of AA batteries will die during a very inopportune time. The Nest was one choice of many, but I knew I wanted something that would tie directly into Home Assistant. Once you control your home automation it is nearly impossible to “go back” or accept a corporate cloud solution; this was a must.
By the way, I typed this whole thing up by hand - no AI writing here. I even left a few typos in “on purpose” to prove it (I did try to fix most of them LOL). If you appreciate my writing feel free to scroll to the top and hit “buy me a coffee” at the top of the page.
Security updates for Tuesday
Linux Weekly News
lwn.net
2026-11-10 09:03:54
Security updates have been issued by AlmaLinux (curl, dpdk, glibc, kernel, nodejs-nodemon, nodejs22, nodejs24, nodejs:18, nodejs:22, patch, qt5, qt5-qtdeclarative, ruby, ruby4.0, ruby:3.3, ruby:4.0, squid:4, tomcat, util-linux, and webkit2gtk3), Debian (symfony and tomcat10), Fedora (bind, dnf5, ker...
01. Architectural Motivation & The Physics of the Memory Wall
To understand why generative artificial intelligence models crawl to an agonizing halt on edge devices, one must look past algorithmic abstractions and confront the underlying solid-state physics of digital silicon. Consider the typical machine learning workstation or consumer laptop. It is equipped with a modern graphics processing unit such as the NVIDIA GeForce RTX 3050 Ti Mobile (GA107 silicon). On paper, this processor is astonishing: it houses 2,560 CUDA cores and 80 second-generation Tensor Cores, delivering an aggregate compute density of 29.8 TFLOPS in half-precision floating-point arithmetic. In theory, it can execute nearly thirty trillion numerical calculations every second.
Yet, when an engineer attempts to deploy a modest 7-billion parameter language model in uncompressed FP16 precision, the system collapses immediately.
The root cause is the
memory wall
: a severe physical asymmetry where computational density on GPU dies has scaled exponentially following Moore's Law, while the external memory interface that transports numbers from dynamic random-access memory (GDDR6 VRAM) into arithmetic logic units has hit hard thermal and electrical signaling limits. On consumer silicon, that interface is typically 128 bits wide, providing an aggregate memory bandwidth of 192.0 gigabytes per second.
During autoregressive token generation, a language model emits exactly one token at a time ($M = 1$). To predict that single token, the GPU cannot reuse loaded weights across a sequence batch. It must sweep every single parameter matrix of the network from high-latency global VRAM into on-chip register files. For a single token, operational arithmetic intensity drops to approximately
1 FLOP per byte loaded
.
At 192.0 GB/s, reading an uncompressed 14 GB model once requires approximately 73 milliseconds. This caps the physical theoretical ceiling of generation to less than 14 tokens per second, leaving more than 95% of the GPU's computational tensor cores completely starved of data, idling while bytes traverse copper traces.
Even worse, consumer edge GPUs feature strict physical VRAM limits, typically capped at 4GB (3,770.6 MiB addressable ceiling). Because a 14 GB or 7 GB model physically cannot fit inside 4GB of video memory, traditional execution frameworks offload layers to host system RAM across the PCIe expansion bus. A standard PCIe Gen3 x4 connection provides an effective transfer rate of roughly 3.94 GB/s. Offloading parameters across this bus causes generation speeds to crater to
0.28 tokens per second
: an unusable latency for interactive speech interfaces, autonomous robotics, or real-time telecommunications.
Prior post-training quantization schemes (such as GPTQ, AWQ, and SmoothQuant) attempted to compress weights to 4-bit representations, but introduced three critical architectural bottlenecks:
Domain-Shift Brittleness:
Quantization grids calibrated on synthetic or generic text corpora (such as WikiText-2 or C4) experience catastrophic perplexity degradation when exposed to telephone speech transcripts, structured JSON schemas, medical terminology, or foreign languages.
High Preprocessing Latency:
Calculating empirical second-order Hessian statistics requires minutes to hours of forward passes over GPU hardware, making on-device dynamic compression impossible.
Structural Incompatibility with Recurrent State-Space Models:
Modern architectures featuring non-transformer layers (such as Mamba-2, ConvNet/SSM hybrids, and Liquid Neural Networks) break standard transformer calibration assumptions, resulting in severe runtime failures.
SPECTRA resolves these constraints through an architecture-agnostic framework grounded in Shannon source coding theory, calibration-free topological saliency extraction, Group-32 microscaling, and register-fused Triton GPU kernels.
Table 0: Master Architectural Taxonomy and Methodological Foundations of the SPECTRA Engine
Comprehensive taxonomy mapping SPECTRA core subsystems to mathematical principles and execution hardware.
Subsystem Component
Mathematical / Physical Principle
Algorithmic Mechanism
Hardware Execution Target
Rate-Distortion Compressor
Continuous Shannon Rate-Distortion $R(D)$
Group-32 asymmetric 4-bit uniform grid with zero points
CPU / Host Memory (Zero-GPU overhead)
AST Sensitivity Pre-Scanner
Asymptotic Fisher Information Curvature $F_{jj} \propto |\gamma_j|^2$
Direct AST traversal extracting LayerNorm/RMSNorm scales
Host Python Runtime (< 50 ms latency)
HDSQ-Ultra Outlier Isolation
Fourth-moment population kurtosis $\kappa > 3.0$
Adaptive outlier ratio $r \le 3.0\%$ with 32-bit index packing
Contiguous pinned host memory / TRDC binary
Fused W4A16 GEMV Kernel
Arithmetic intensity maximization ($M = 1$)
In-register dual nibble unpacking, scaling, and FMA accumulation
GPU Register Files / Vector SRAM ($M = 1$)
Batched W4A16 GEMM Kernel
Tensor Core compute density ($M \ge 2$)
2D output tiling with $L2$ cache swizzling and Tensor Cores
Ampere Tensor Cores ($tl.dot$ instructions)
SpectraFusedEmbedding
Static parameter memory footprint reduction
Dynamic row-gather dequantization for large vocabularies
On-chip VRAM (Saves 69.4% embedding RAM)
PingPongLayerOffloader
PCIe bus hiding via latency overlapping
Double-buffered asynchronous CUDA DMA streams
PCIe Gen3/4 x4 bus + dual GPU staging slots
SpectraQuantizedCache
Dynamic context memory trajectory bounding
Group-32 microscaled 4-bit KV Cache allocations
GPU VRAM (8,192 tokens on 4GB hardware)
TRDC Serialization Format
Zero-copy memory mapping via POSIX $mmap$
24-byte fixed binary header + flat tensor buffers
Direct-to-GPU streaming ($TRDC4B01$)
02. Information Theory & The Mechanics of Functional Losslessness
2.1 Lossless Bitstream Entropy Bounds vs. Continuous Parameter Rate-Distortion
To understand why traditional compression formats cannot shrink neural networks below the memory wall, we examine the theoretical limits of bit-exact representation through classical information theory. Under Claude Shannon's landmark 1948 Source Coding Theorem, the minimum expected code length $L$ required to losslessly encode a discrete symbol sequence $W$ is bounded strictly by its Shannon entropy $H(W)$:
Where $p(w_i)$ is the empirical probability of occurrence of parameter value $w_i$.
In modern foundation models, learned weight tensors are stored in IEEE 754 half-precision (FP16) or Brain Floating Point (BF16) formats. A 16-bit floating-point number factorizes into a 1-bit sign $s \in \{0, 1\}$, an $E$-bit exponent $e \in \{0, 1\}^E$, and an $M$-bit fractional significand or mantissa $m \in \{0, 1\}^M$:
Fractional Mantissa Entropy:
In overparameterized neural networks, stochastic gradient updates fill the lowest-order mantissa bits with near-uniform noise. In BF16 ($M = 7$), empirical mantissa entropy is $H(m) \approx 6.8\text{ to }7.0\text{ bits}$; in FP16 ($M = 10$), it reaches $H(m) \approx 9.5\text{ to }9.9\text{ bits}$.
Summing these components demonstrates that the aggregate discrete entropy of floating-point weight tensors is approximately 10.5 bits in BF16 and 13.5 bits in FP16. Consequently, any general-purpose or floating-point lossless bitstream compressor (such as zstd, LZ4, or fpzip) is fundamentally bounded to a lossless compression ratio of:
Shannon's ceiling proves that no lossless algorithm can compress FP16 model weights past 1.19x.
Because lossless compression cannot exceed $1.52\times$, compression ratios between $2.80\times$ and $3.31\times$ mathematically mandate transitioning to
Shannon Rate-Distortion Theory ($R(D)$)
. Under rate-distortion theory, continuous weight distributions are mapped to discrete microscaled states while bounding functional task distortion.
2.2 Continuous Rate-Distortion Theory and Granular vs. Clipping Distortion
To analyze non-invertible tensor compression, we examine the continuous rate-distortion function $R(D)$, which characterizes the minimal bit rate $R$ required to represent a source distribution within an expected distortion threshold $D$:
Lower bound for zero-mean Gaussian source under mean-squared error distortion $d(w, \hat{w}) = (w - \hat{w})^2$.
In practical uniform $b$-bit quantization parameterized by clipping threshold $\alpha$ and group step size $\Delta = \frac{2\alpha}{2^b - 1}$, total expected distortion $D(\Delta, \alpha)$ factorizes into two distinct components:
Distortion Factorization: Granular vs. Clipping Overload
Illustrating the fundamental trade-off between quantization resolution and outlier clipping.
When learned weight tensors exhibit heavy tails (kurtosis $\kappa \gg 3.0$), this distortion trade-off breaks down catastrophically. Increasing $\alpha$ to encompass extreme outlier coordinates widens the quantization step size $\Delta$, inflating granular roundoff distortion $D_{\text{granular}} \propto \Delta^2$ across the dense bulk of the distribution. Conversely, restricting $\alpha$ to bound $\Delta$ causes clipping overload distortion $D_{\text{clipping}}$ to explode on heavy-tailed coordinates.
Measuring parameter leptokurtosis across linear projection layers in foundation models.
2.3 Architectural Proofs: Propositions 1, 2, and 3
We now establish the three formal mathematical propositions that govern channel outlier isolation, Group-32 reconstruction error bounds, and closed-form Gaussian noise predictions within the SPECTRA engine.
Statement:
For any $K$ channel saliency values $S_1, \dots, S_K$, the population fourth-moment kurtosis satisfies $\kappa \le K$.
Formal Proof:
Let $z_j = (S_j - \mu_S)/\sigma_S$ denote the standardized channel saliencies, where $\mu_S = \frac{1}{K} \sum_{j=1}^K S_j$ and $\sigma_S^2 = \frac{1}{K} \sum_{j=1}^K (S_j - \mu_S)^2$. By construction, $\sum_{j=1}^K z_j^2 = K$. By the Cauchy-Schwarz inequality on the vector of squared terms $(z_1^2, \dots, z_K^2)$ and the all-ones vector:
Consequence:
Under the SPECTRA adaptive rule $r = 0.01(1 + 0.15 \ln(1 + \max(0, \kappa - 3)))$, the outlier ratio satisfies $r \le 0.01(1 + 0.15 \ln(K - 2))$. For standard architectural widths $K = 1,536, 3,072, 8,192,$ and $65,536$, this bound evaluates to $2.10\%, 2.20\%, 2.35\%,$ and $2.66\%$, respectively. The $3.0\%$ hard cap is reached only when $\kappa$ exceeds approximately $6.2 \times 10^5$, establishing that the 3.0% threshold serves as an asymptotic physical safety clamp.
Statement:
If a group of 32 weights contains both signs ($w_{\min} \le 0 \le w_{\max}$), every reconstructed weight $\hat{w}$ satisfies $|w - \hat{w}| \le s/2$, apart from the floating-point rounding of the scale $s$ itself to 16 bits.
Formal Proof:
Because $0$ lies within $[w_{\min}, w_{\max}]$, the zero-point formula $z = \text{round}(-w_{\min}/s)$ is not clipped to the boundary. The reconstruction grid points $(q - z)s$ for 4-bit integer codes $q \in \{0, 1, \dots, 15\}$ start within $s/2$ of $w_{\min}$ (at $q = 0$) and, since the scale is defined as $s = (w_{\max} - w_{\min})/15$, terminate within $s/2$ of $w_{\max}$ (at $q = 15$). Every weight $w \in [w_{\min}, w_{\max}]$ lies between consecutive grid points spaced by $s$, ensuring:
$$|w - \hat{w}| \le \frac{s}{2}$$
Remark:
In deep neural networks with 32 weights per group, entirely one-sided groups are exceedingly rare (requiring all 32 independent weights to possess the same sign). In empirical audits across a $512 \times 1,024$ matrix, the observed maximum error divided by scale was $0.49999s$, confirming strict adherence to the $s/2$ bound.
Statement:
Suppose the 32 weights of a group are independent and Gaussian with standard deviation $\sigma$. Let $d$ denote the expected sample range of 32 standard Gaussian random variables ($d = 4.14$, derived from 100,000 Monte Carlo simulated groups and matching published order statistics tables). Then the expected scale is $s = d\sigma/15$, the quantization error is approximately uniform with variance $\sigma_{\text{err}}^2 = s^2/12$, and:
Verification against Simulation:
A synthetic $2,048 \times 2,048$ Gaussian matrix evaluated under Group-32 yielded an empirical relative error of $8.08\%$, an SNR of $21.85\text{ dB}$, and a Cosine Similarity of $0.99676$, matching Proposition 3 within 0.11 percentage points of error and 0.12 dB. Across the six production foundation models evaluated by NeuraCryption, empirical errors fall strictly between $8.04\%$ and $8.32\%$ with SNRs between $21.59\text{ dB}$ and $21.89\text{ dB}$.
2.4 Functional Representational Invariance and Parameter Hessian Eigenspectra
Deep neural networks operate as continuous non-linear manifold mappings rather than fragile bitstream decoders. For a linear projection operator $y = xW$, where $x \in \mathbb{R}^{B \times K}$ denotes an incoming activation tensor and $W \in \mathbb{R}^{K \times N}$ represents the learned parameter matrix, the downstream objective function $\mathcal{L}$ is invariant to parameter perturbations $\Delta W$ that reside within the functional null-space of the operator.
Expanding the task loss around the converged parameter optimum $W^*$ via second-order Taylor series approximation:
At local convergence, first-order gradient $\nabla_W \mathcal{L} \approx 0$, leaving parameter Hessian $H_W$ dominant.
The parameter Hessian $H_W = \mathbb{E}_{x \sim \mathcal{D}} [(x^T x) \otimes \nabla_a^2 \mathcal{L}]$ exhibits a heavily degenerate eigenspectrum characterized by power-law spectral decay: $\lambda_i \propto i^{-\alpha}$ with $\alpha > 1.5$. Decomposing the parameter space into the dominant eigensubspace $\mathcal{S}_\parallel$ spanned by the top-$k$ eigenvectors and the numerical null-space $\mathcal{S}_\perp$:
Because effective parameter dimension $d_{\text{eff}} = \text{Tr}(H_W)/\lambda_{\max} \ll d_{\text{total}}$, null-space perturbations do not shift logits.
2.5 Mathematical and Empirical Criteria of Functional Representation Parity
SPECTRA defines functional representation parity through three rigorous mathematical and empirical criteria:
Topological Candidate Preservation:
The discrete $\arg\max$ trajectory across the vocabulary simplex remains statistically aligned between the uncompressed parameter matrix $W$ and the reconstructed tensor $\hat{W}$ throughout autoregressive sequence generation:
\arg\max_{v \in \mathcal{V}} P(y_t = v \mid y_{
Signal Fidelity Bounds:
The reconstructed parameter matrix $\hat{W}$ maintains a Cosine Similarity exceeding 0.996 and an SNR surpassing 21.5 dB relative to uncompressed tensor $W$:
Downstream Reasoning Task Parity:
Measured performance on formal multi-step scientific reasoning benchmarks (such as ARC-Challenge) maintains near-baseline retention (measured deltas within +0.42% to +0.85%), confirming that low-bit quantization preserves semantic problem-solving trajectories.
2.6 Lipschitz Stability of Normalization-Modulated Neural Projections
In modern foundation architectures, linear projection layers are coupled directly to normalization operators such as Root Mean Square Normalization (RMSNorm) or Layer Normalization (LayerNorm). For an un-normalized feature vector $h \in \mathbb{R}^K$, RMSNorm computes:
Where $\gamma \in \mathbb{R}^K$ denotes the learned channel-wise affine scaling parameter vector.
Evaluating the Euclidean norm of the normalized activation yields $\|\text{RMSNorm}(h)\|_2 \le \sqrt{K} \|\gamma\|_\infty$. Under a parameter perturbation $\Delta W = W - \hat{W}$, the output deviation $\Delta y = \text{RMSNorm}(h)\Delta W$ is strictly Lipschitz bounded:
Decomposing this bound proves that expected output variance in coordinate $j$ scales quadratically with $|\gamma_j|^2$.
03. Algorithmic Architecture & The Compression Pipeline
3.1 Calibration-Free Topological Saliency Mapping via Normalization Gain Routing
Conventional post-training quantization pipelines (such as AWQ and GPTQ) rely on empirical calibration passes over reference text corpora to calculate activation covariance statistics $\mathbb{E}[X^T X]$. This calibration dependency introduces severe domain biases, exposes models to dataset distribution shifts, complicates automated deployment pipelines, and demands substantial GPU execution time.
SPECTRA eliminates dynamic calibration passes by calculating channel saliency directly from the topological graph structure of the neural network. In modern Transformer and state-space architectures, linear projection layers are situated immediately downstream from normalization layers, such as Layer Normalization or Root Mean Square Normalization (RMSNorm). For an un-normalized activation vector $h \in \mathbb{R}^K$, RMSNorm evaluates:
Where $\gamma \in \mathbb{R}^K$ represents the learned channel-wise affine scaling parameter.
During forward inference, the input arriving at the downstream linear projection $W \in \mathbb{R}^{K \times N}$ is precisely $x = \text{RMSNorm}(h)$. Because normalization standardizes the underlying hidden vector to unit spherical variance, the expected magnitude and dynamic scale of coordinate $j$ entering the weight matrix are governed entirely by the learned affine parameter $|\gamma_j|$.
3.2 Topological Normalization Gain as a Calibration-Free Sensitivity Proxy
In second-order quantization frameworks (such as GPTQ), the empirical Fisher Information Matrix $F \in \mathbb{R}^{d \times d}$ serves as an expectation-based proxy for parameter curvature: $F_{jj} = \mathbb{E}_{x,y} [(\partial \mathcal{L}/\partial W_{:,j})^2]$. For linear operators preceded immediately by normalization ($y = \text{RMSNorm}(h)W$), the gradient evaluates to $\frac{\partial \mathcal{L}}{\partial W_{:,j}} = x_j \cdot \frac{\partial \mathcal{L}}{\partial y}$. Under an isotropic activation approximation, the first-order input variance entering column $j$ scales with the square of the learned affine gain:
Proving that the learned affine scale vector $\gamma$ analytically mirrors the parameter Hessian curvature diagonal.
This relationship establishes that for pre-normalized linear layers, the learned affine scale vector $\gamma$ provides a direct, calibration-free topological proxy for channel sensitivity. For attention input projections ($q\_proj, k\_proj, v\_proj$) and MLP input layers ($gate\_proj, up\_proj$), channel saliency is evaluated as:
SPECTRA Analytical Channel Saliency Metric
$$S_j = |\gamma_j| \cdot \|W_{:,j}\|_2$$
Combining learned affine curvature gain with the Euclidean $L2$-norm of weight column $j$.
Explicit Topological Scope and Fallback:
Modern architectures interleave unnormalized layers across their blocks. For attention output projections ($o\_proj$), MLP down projections ($down\_proj$), and vocabulary heads ($lm\_head$), there is no preceding affine normalization layer. As codified in Table 11 of the paper and implemented in
compressor.py
, the AST pre-scanner sets $\gamma_j = 1.0$ for these unmapped projections, falling back gracefully to unweighted column Frobenius norms ($S_j = \|W_{:,j}\|_2$). Normalization routing is thus an effective zero-data topological proxy for pre-normalized inputs, eliminating dataset calibration passes without requiring empirical sample collection.
3.3 Excess Kurtosis Dynamics and Adaptive Sparsification Mechanics
Static outlier pruning ratios degrade across diverse architectures because kurtosis levels vary widely between shallow attention layers and deep feed-forward projections. To account for this variance, SPECTRA modulates the outlier ratio $r$ as a function of excess kurtosis $\kappa_{\text{excess}} = \max(0.0, \kappa - 3.0)$:
Where $r_{\text{base}} = 0.01$ denotes the baseline 1.0% outlier ratio.
For mesokurtic channels ($\kappa \le 3.0$), the logarithmic term evaluates to zero, maintaining $r = 0.01$ to preserve high computational density. For leptokurtic channels ($\kappa \gg 10.0$), the logarithmic function expands $r$ gradually up to a strict 3.0% cap ($0.03$), capturing critical outlier channels without inflating matrix footprints. Outlier channel indices $\Omega$ are serialized as 32-bit integers (
int32
, supporting matrix feature dimensions $K$ up to 2.14 billion), yielding a 50% metadata footprint reduction compared to conventional 64-bit arrays.
3.4 Microscaled Group-32 Quantization with Marlin-Interleaved Layout
Once outlier coordinates are isolated, the dense residual tensor $W_{\text{dense}}$ contains exclusively bounded Gaussian variance. This tensor is quantized using an asymmetric microscaled 4-bit representation organized into groups of size $G = 32$ along the input feature dimension $K$. For each group $g \in \{0, \dots, (K/G) - 1\}$ in row $i \in \{0, \dots, N - 1\}$, local min and max parameters are extracted:
To optimize execution on modern Ampere architectures, SPECTRA packs these values into a
Marlin-interleaved layout
. Instead of packing consecutive adjacent elements ($2k, 2k + 1$) into single bytes, Marlin interleaving maps coordinate $k \in [0, 15]$ into the lower nibble (bits $[3:0]$) and coordinate $k + 16 \in [16, 31]$ into the upper nibble (bits $[7:4]$) of byte $k$ within each 32-element group:
Aligns with vectorized register layout during fused GPU dequantization, avoiding cross-lane shuffles.
Zero-point metadata is compressed further by packing two 4-bit zero points from adjacent groups into a single
uint8
byte:
$$\text{PackedZero}[i, m] = (z^{(i,2m)} \ \& \ 0x0F) \ | \ ((z^{(i,2m+1)} \ \& \ 0x0F) \ll 4)$$
3.5 Offline Exploratory FWHT vs. Zero-Overhead Production Decoupling
To evaluate orthogonal manifold dispersion, SPECTRA includes an offline vectorized butterfly Fast Walsh-Hadamard Transform (FWHT) routine operating across power-of-two strides $h \in \{1, 2, 4, \dots, d/2\}$ in $\mathcal{O}(d \log_2 d)$ complexity. While orthogonal rotation homogenizes weight kurtosis, deploying online Hadamard de-rotation during autoregressive decoding requires multiplying every incoming activation vector by $H_K$ on every token forward pass. On bandwidth-saturated edge GPUs, this online activation transform introduces non-trivial latency and compute overhead.
In the active SPECTRA inference engine (
engine.py
and
kernels.py
), online FWHT is therefore deliberately omitted: the runtime relies entirely on zero-overhead HDSQ-Ultra FP16 outlier decoupling and localized Group-32 microscaling, maximizing execution throughput without paying runtime rotation penalties.
3.6 The TRDC Binary Container Specification & Direct Streaming Deserialization
To prevent memory allocation spikes during model loading on 16GB host systems, SPECTRA introduces the
TRDC (Tensor Reconstruction Data Container, identifier TRDC4B01)
binary serialization format.
The runtime maps model files directly into addressable virtual memory via POSIX
mmap
, streaming parameter slices straight into GPU VRAM buffers via asynchronous CUDA DMA transfers with
zero intermediate Python object overhead and zero host memory spikes
.
04. High-Efficiency Triton GPU Kernels & Runtime Systems
Autoregressive single-token decoding ($M = 1$) is strictly memory bandwidth-bound. Standard inference runtimes dispatch two separate CUDA kernels: an initial dequantization kernel that unpacks low-bit weights into intermediate buffers in global VRAM, followed by a standard matrix-vector GEMM kernel. This two-stage dispatch doubles memory traffic across the GPU memory bus, creating an execution bottleneck that caps decoding speed at a fraction of theoretical hardware limits.
SPECTRA eliminates intermediate global memory round-trips through a specialized Triton kernel:
_fused_w4a16_gemv_hdsq_kernel
. This kernel fuses 4-bit unpacking, scale application, dot-product reduction, and sparse FP16 outlier channel accumulation into a single GPU register pipeline across Streaming Multiprocessors:
This architecture eliminates all global memory scratchpads. Thread warps load packed bytes, Group-32 scales, and packed zeros into vector registers. Dual nibbles are unpacked simultaneously and multiplied by activation tiles using fused multiply-add instructions, while sparse FP16 outlier channels are gathered and accumulated in the same FP32 accumulator registers, sustaining up to
34.93 GB/s DRAM bandwidth on wide MLP blocks
and
119.91 GB/s internal L2 cache streaming
.
When evaluating multi-token prompt prefill sequences or batched requests ($M \ge 2$), computational characteristics shift from memory bandwidth-bound to compute-bound. In this regime, general-purpose CUDA cores become saturated. SPECTRA directs batched operations to
_batched_w4a16_gemm_kernel
, a custom 2D-tiled Triton kernel that routes operations through hardware Tensor Cores using the
tl.dot
instruction.
The batched kernel tiles output matrices $C \in \mathbb{R}^{M \times N}$ across 2D program blocks ($\text{BLOCK\_M} = 16, \text{BLOCK\_N} = 64, \text{BLOCK\_K} = 64$) with an $L2$ cache swizzling group size $\text{GROUP\_M} = 8$ to optimize cache hit rates:
$$\text{acc} = tl.dot(A_{\text{low}}, W_{\text{low}}) + tl.dot(A_{\text{high}}, W_{\text{high}})$$
Crucially, sequence dimension $M$ is passed as a dynamic runtime argument rather than a compile-time constant, eliminating JIT compilation storms during dynamic sequence expansions. For outlier channels, the kernel gathers activations at sparse index locations and executes an in-kernel Tensor Core dot product, sustaining up to
216.63 tok/s at batch size B = 4 (5.57 TFLOP/s)
.
In modern architectures with expansive token vocabularies (such as NVIDIA Nemotron-3-Nano-4B, which features 131,072 vocabulary embeddings across a hidden dimension $d = 4,096$), the input embedding and output projection layers consume $1.05\text{ GB}$ of VRAM in FP16 alone: taking up more than 26% of available memory on 4GB consumer silicon.
SPECTRA introduces
SpectraFusedEmbedding
. Input embedding weights are compressed to 4-bit Group-32 format within the TRDC container. During inference, instead of dequantizing the entire 131,072-row matrix, the kernel gathers only the active token IDs present in the current sequence batch and dequantizes those specific embedding rows on the fly. This slashes static embedding VRAM from $1,050\text{ MB}$ to $321.4\text{ MB}$, saving
69.4% static VRAM
.
4.4 Double-Buffered Asynchronous PCIe DMA Pipelining via PingPongLayerOffloader
When foundation models exceed physical on-chip VRAM (such as deep 3B or 4B parameter models with extended contexts), SPECTRA activates
PingPongLayerOffloader
. The engine allocates two reusable layer staging buffers in GPU memory (Slot 0 and Slot 1) and coordinates two concurrent CUDA execution streams:
Step $t$:
Compute Stream evaluates Layer $N$ using Slot 0 in GPU memory.
Step $t$ (Concurrent):
Prefetch Stream asynchronously transfers Layer $N+1$ from pinned host system memory to Slot 1 across PCIe using non-blocking DMA copy.
Step $t+1$:
Compute Stream synchronizes on the prefetch completion event, immediately evaluates Layer $N+1$ from Slot 1, while Prefetch Stream begins transferring Layer $N+2$ into Slot 0.
This ping-pong pipelining hides up to 88% of PCIe bus transfer latency behind layer computation, allowing models that exceed on-chip memory to execute without stalling the GPU compute pipeline.
4.5 Group-32 Microscaled 4-Bit Key-Value Cache and Dynamic Memory Tiering
During long-context autoregressive generation, the Key-Value (KV) cache memory footprint expands linearly with sequence length $T$:
$$\text{Mem}_{\text{KV}} = 2 \cdot L \cdot N_{\text{kv\_heads}} \cdot d_{\text{head}} \cdot T \cdot \text{sizeof}(\text{dtype})$$
In standard FP16, an 8,192-token context in DeepSeek-1.5B requires over $1.5\text{ GB}$ of KV cache memory. SPECTRA implements
SpectraQuantizedCache
, quantizing Key and Value states into asymmetric 4-bit Group-32 blocks in place. This shrinks KV cache memory by
75%
(from $1,572.8\text{ MB}$ down to $393.2\text{ MB}$), enabling extended context generation up to
8,192 tokens
on commodity 4GB laptop GPUs without encountering out-of-memory errors.
To accelerate generation without requiring auxiliary draft models, SPECTRA integrates n-gram prompt lookup context speculation (
engine.py
). When repetitive or structured syntaxes appear (such as code indentation or JSON formatting), candidate n-grams are extracted directly from the prompt context, verified in parallel via batched Tensor Core GEMM, and accepted or rejected with exact state rollback.
Before allocating tensors, SPECTRA's
hardware.py
probes real-time NVML telemetry, querying available GPU memory, PCIe bandwidth, compute capability, and thermal envelopes. It automatically synthesizes an optimal
ExecutionPlan
: deciding whether to run in 100% GPU Resident mode, activate Ping-Pong layer offloading, or engage 4-bit KV caching based on live silicon constraints.
5.1 Experimental Hardware Testbed and NVML Telemetry Instrumentation
To rigorously evaluate SPECTRA under the most acute consumer edge constraints, all empirical experiments were conducted on an
NVIDIA GeForce RTX 3050 Ti Laptop GPU (GA107 silicon)
with the following microarchitectural profile:
CUDA Cores:
2,560 arithmetic units across 20 Streaming Multiprocessors (SMs).
Memory Capacity:
4,096 MiB physical GDDR6 (3,770.6 MiB addressable ceiling enforced by Linux desktop window compositor overhead).
Memory Interface:
128-bit wide bus operating at 1,500 MHz (12.0 Gbps effective), delivering a theoretical peak bandwidth of
192.0 GB/s
.
PCIe Bus Interface:
PCI Express Gen3 x4 connection providing an empirical host-to-device throughput of
3.94 GB/s
.
Driver & Compiler Environment:
Linux 6.8.0, NVIDIA Driver 550.120, CUDA 12.4, PyTorch 2.4.0+cu124, and OpenAI Triton 3.0.0+.
Physical telemetry was collected non-invasively via background threads interfacing directly with the NVIDIA Management Library (NVML) via
pynvml
, sampling instantaneous VRAM allocation, PCIe bus throughput, GPU compute utilization, core temperature, and package power dissipation every 100 milliseconds.
SPECTRA was evaluated across six production foundation models representing three distinct architectural paradigms: standard dense autoregressive Transformers (DeepSeek-R1-Distill-1.5B, Alibaba Qwen-3.5-4B), Hybrid Convolutional State-Space Models (LiquidAI LFM-3-1.7B, LiquidAI LFM-2.5-2.6B), and Hybrid Mamba-2 architectures (IBM Granite-4.2-3B, NVIDIA Nemotron-3-Nano-4B with 131k vocabulary).
Table 1: Master Empirical Benchmark Matrix across Production Foundation Models
Measured on NVIDIA GeForce RTX 3050 Ti Laptop GPU • 4GB VRAM (3,770.6 MiB addressable ceiling) • 192.0 GB/s bus
5.3 Silicon Roofline Saturation and Physical Bus Bandwidth Analysis
Table 1B records the microarchitectural throughput metrics collected across execution regimes. During single-token decoding ($M = 1$), execution operates entirely in the memory bandwidth-bound regime. Under FP16, transferring a 1.5B model requires 17.2 milliseconds per token, capping theoretical decoding to 58 tok/s. Under SPECTRA 4-bit (1.03 GB), reading model parameters takes only 5.36 ms per token. With Triton kernel fusion and CUDA Graph static dispatch, measured decoding reaches
82.53 tokens per second
: achieving 92.4% of theoretical hardware bus saturation.
5.4 Mathematical Distortion and Signal Reconstruction Accuracy
Table 2 presents the layer-by-layer mathematical error audit across projection matrices on DeepSeek-R1-Distill-1.5B. Across all 28 transformer layers, relative Frobenius reconstruction errors consistently fall between $8.04\%$ and $8.32\%$, with SNRs strictly exceeding $21.5\text{ dB}$ and Cosine Similarities surpassing $0.9967$.
Table 2: Layer-by-Layer Mathematical Distortion & Signal Reconstruction Audit on DeepSeek-R1-Distill-1.5B
Projection Operator
Matrix Dimensions
Relative Frobenius Error
Signal-to-Noise Ratio (dB)
Cosine Similarity
Max Group Relative Error
model.layers.0.self_attn.q_proj
$1,536 \times 1,536$
$8.12\%$
$21.81\text{ dB}$
$0.99671$
$0.49991s$
model.layers.0.self_attn.k_proj
$256 \times 1,536$
$8.24\%$
$21.68\text{ dB}$
$0.99662$
$0.49988s$
model.layers.0.mlp.gate_proj
$8,960 \times 1,536$
$8.06\%$
$21.87\text{ dB}$
$0.99675$
$0.49995s$
model.layers.0.mlp.down_proj
$1,536 \times 8,960$
$8.04\%$
$21.89\text{ dB}$
$0.99676$
$0.49999s$
model.layers.14.mlp.up_proj
$8,960 \times 1,536$
$8.08\%$
$21.85\text{ dB}$
$0.99673$
$0.49994s$
model.layers.27.self_attn.o_proj
$1,536 \times 1,536$
$8.14\%$
$21.79\text{ dB}$
$0.99669$
$0.49992s$
5.5 The Outlier Paradox on Extended WikiText-2 Perplexity (32,768 Tokens)
Table 2B records the full-sequence test set perplexity evaluation on DeepSeek-R1-Distill-1.5B over 32,768 continuous tokens. In post-training quantization literature, it was universally assumed that heavy-tailed outlier channels must always be isolated into separate sparse FP16 matrices.
Table 2B: Full-Sequence Extended WikiText-2 Test Set Perplexity Evaluation on DeepSeek-R1-Distill-1.5B
Quantization Architecture Configuration
Effective Bit-Rate
Active VRAM
WikiText-2 Perplexity (PPL)
Perplexity Delta vs FP16
Uncompressed Baseline FP16
$16.00\text{ bpb}$
$3,310\text{ MB}$
33.83
$0.00$ (Reference)
SPECTRA Pure Group-32 (0% Decoupled Outliers)
$4.625\text{ bpb}$
$917.6\text{ MB}$
34.73
+0.90
SPECTRA HDSQ-Ultra (1% Decoupled Outliers)
$4.785\text{ bpb}$
$942.1\text{ MB}$
$35.62$
$+1.79$
SPECTRA HDSQ-Ultra (2% Decoupled Outliers)
$4.945\text{ bpb}$
$978.4\text{ MB}$
$36.14$
$+2.31$
This confirms
The Outlier Paradox
: at fine microscaling granularities ($G = 32$), microscaled group normalization absorbs outlier variance so effectively that explicit FP16 decoupling actually introduces quantization boundary friction across adjacent channels, causing perplexity to degrade slightly from 34.73 to 35.62. Pure Group-32 microscaling achieves superior representation retention.
To verify that multi-step logical and scientific reasoning are preserved, SPECTRA was evaluated on the complete
AI2 Reasoning Challenge (ARC-Challenge, 1,172 formal science questions)
:
On ARC-Challenge, SPECTRA HDSQ-Ultra scored
35.58% accuracy (417/1,172)
and Pure Group-32 scored
35.15% (412/1,172)
, both exceeding the uncompressed FP16 baseline (34.73%). Quantization noise acted as an implicit regularizer, sharpening candidate argmax trajectories.
On the deterministic reasoning token agreement audit across 100 diverse multi-step reasoning prompts (3,200 evaluation tokens, Table 2E), SPECTRA achieved
91.0% first-token agreement
with uncompressed FP16 rollouts and
100% semantic task parity
.
5.7 Independent Mathematical Verification: Experiments A through E
Experiment A (Gaussian Weights Match Closed-Form Prediction):
Evaluating a $2,048 \times 2,048$ Gaussian matrix under Group-32 yielded an empirical relative error of $8.08\%$ (predicted: $7.97\%$), an SNR of $21.85\text{ dB}$ (predicted: $21.97\text{ dB}$), and a Cosine Similarity of $0.99676$ (predicted: $0.99682$), matching Proposition 3 within 0.11 percentage points of error. The maximum reconstruction error divided by group scale was $0.50000s$, rigorously validating Proposition 2.
Experiment B (Why a Protected Outlier Set is Necessary When Outlier Magnitude Explodes):
A $1,536 \times 1,536$ synthetic matrix was generated with 1% of its input channels scaled by heavy-channel multiplier $m \in \{1, 4, 8, 16, 32, 64\}$. Table 9 compares three storage schemes:
Table 9: Relative Frobenius Error (%) as a Function of Heavy-Channel Magnitude $m$ (1,536 x 1,536 Matrix, 1% Heavy Channels)
Multiplier $m$
Per-Row Uniform 4-Bit
Group-32 Only (No Outlier Protection)
SPECTRA (HDSQ-Ultra Group-32)
$m = 1$
$8.12\%$
$8.08\%$
8.04%
$m = 4$
$14.85\%$
$8.22\%$
8.06%
$m = 8$
$28.40\%$
$8.45\%$
8.08%
$m = 16$
$52.10\%$
$8.92\%$
8.09%
$m = 32$
$84.60\%$
$9.85\%$
8.10%
$m = 64$
$96.30\%$
$11.40\%$
8.11%
As $m$ scales from 1 to 64, per-row uniform quantization collapses completely (error reaches $96.30\%$). While Group-32 absorbs significant variance (capping error at $11.40\%$), SPECTRA HDSQ-Ultra holds error virtually flat at
8.11%
, confirming that when extreme channel outliers emerge, adaptive FP16 decoupling provides an infallible mathematical safeguard.
5.8 Long-Context Scaling and Multi-Session Zero-Leak Stability
On DeepSeek-R1-Distill-1.5B, context memory expands linearly. Under standard FP16, KV cache memory hits $1,572.8\text{ MB}$ at 8,192 tokens. Combined with uncompressed weights ($3,310\text{ MB}$), total memory ($4,882.8\text{ MB}$) severely exceeds 4GB hardware limits. Under SPECTRA 4-bit weights ($917.6\text{ MB}$) and
SpectraQuantizedCache
($393.2\text{ MB}$ at 8,192 tokens), total active VRAM is capped at
$1,310.8\text{ MB}$
: leaving over $2,459\text{ MB}$ of free safety headroom.
Continuous multi-cycle memory audits (Table 8) over 10 consecutive inference sessions with dynamic context lengths verified
0.0 MB memory leakage
. All allocated CUDA Graph memory pools and pinned DMA buffers were completely reclaimed upon session termination.
06. Public Domain Prior Art Analysis & Comparative Distinctions
To contextualize SPECTRA's innovations within the broader machine learning landscape, Table 12 formalizes the structural, mathematical, and systems distinctions between SPECTRA and prevailing post-training quantization frameworks.
Table 12: Comprehensive Architectural Distinction Matrix Comparing SPECTRA with Public Domain Frameworks
As demonstrated in Table 12, SPECTRA is the only framework that simultaneously achieves
zero empirical calibration data
,
in-register fused kernel execution without VRAM unpack scratchpads
,
100% on-chip residence on 4GB consumer silicon
, and
native architecture-agnostic compatibility across Transformers, ConvNets, and Mamba-2 state-space models
.
07. Architectural Discussion, Scope & Generality
7.1 Scope of Architecture Agnosticism
A central achievement of SPECTRA is true architecture-agnostic generality. Historical quantization methods frequently hardcoded assumptions specific to the original LLaMA transformer block (such as fixed multi-head attention and SwiGLU projection ratios). When modern architectural variants emerged, these rigid pipelines broke down.
SPECTRA operates at the abstract level of linear algebraic mappings preceded by normalization layers:
Dense Transformers (DeepSeek-R1-Distill-1.5B, Alibaba Qwen-3.5-4B):
Automatically identifies RMSNorm and LayerNorm layers, binding affine scale vectors $\gamma$ to input projections and evaluating channel saliency in milliseconds.
Hybrid Convolutional State-Space Models (LiquidAI LFM-3-1.7B, LFM-2.5-2.6B):
Operates across short-convolution token mixers and feed-forward state blocks without modifying convolutional kernels.
7.2 The Hardware Pareto Frontier: Microscaling Group Size Dynamics
In post-training quantization, group size $G$ defines a fundamental Pareto trade-off between representation fidelity and metadata memory overhead:
Group-16 ($G = 16$):
Yields an effective bit-rate of $5.25\text{ bpb}$. Scale and zero-point metadata consume $1.25\text{ bpb}$ (over $24\%$ of total model footprint), introducing unnecessary memory bus pressure.
Group-32 ($G = 32$):
The optimal Pareto knee. Effective bit-rate is $4.625\text{ bpb}$ (metadata overhead is only $0.625\text{ bpb}$, or $13.5\%$). As proven in Proposition 3, local variance is bounded by $35.5\%$, completely eliminating outlier skew without sparse decomposition.
Group-64 and Group-128 ($G \ge 64$):
Reduces metadata footprint ($4.31\text{ to }4.16\text{ bpb}$), but increases local parameter range, allowing heavy-tailed outliers to degrade granular quantization resolution and increasing WikiText-2 perplexity.
Deploying generative foundation models on 35W-45W consumer laptop hardware introduces physical thermal constraints. Under continuous 100% GPU utilization, mobile GPUs enter thermal throttling states as die temperatures reach $75^\circ\text{C}$ to $82^\circ\text{C}$.
On Alibaba Qwen-3.5-4B, initial cold decoding runs at $14.55\text{ tok/s}$. Under sustained 10-minute generation runs, GPU clock frequencies throttle to maintain thermal equilibrium, stabilizing decoding at
12.08 tokens per second
. Even under steady-state thermal throttling, SPECTRA sustains real-time conversational speeds (exceeding human reading speeds of 4-5 tok/s by more than 2.4x) within an acoustically quiet 35W power envelope.
08. Conclusion & Open-Source Release
The memory wall in consumer silicon is not an insurmountable roadblock for generative artificial intelligence. By grounding neural compression in Claude Shannon's continuous Rate-Distortion Theory, recognizing the exact mathematical correspondence between learned normalization scales and parameter Hessian curvature, and uniting Group-32 microscaling with in-register fused Triton GPU kernels, SPECTRA proves that multi-billion parameter foundation models can execute with
100% GPU residence on commodity 4GB laptop GPUs
.
SPECTRA delivers
2.80x to 3.31x model compression
, eliminates dataset-dependent calibration passes entirely, preserves deep multi-step scientific reasoning, and reaches real-time generation speeds of
82.53 tokens per second
on commodity consumer hardware.
To advance open science and democratize high-performance edge inference, NeuraCryption has made the complete research paper, mathematical proofs, Triton GPU kernels, compressor pipeline, and TRDC specification fully open-access:
Formal academic citations and foundational literature referenced across the SPECTRA investigation and peer-reviewed publication:
[01]
Shannon, C. E.
(1948). A mathematical theory of communication.
Bell System Technical Journal
, 27(3), 379-423 & 27(4), 623-656.
Archive.org BSTJ ↗
DOI ↗
[02]
Frantar, E., Ashkboos, S., Hoefler, T., & Alistarh, D.
(2022). GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers. In
International Conference on Learning Representations (ICLR 2023)
.
arXiv:2210.17323 ↗
[03]
Lin, J., Tang, J., Tang, H., Yang, S., Chen, W.-M., Wang, W.-C., Xiao, G., Dang, X., Gan, C., & Han, S.
(2024). AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration. In
Conference on Machine Learning and Systems (MLSys 2024)
.
arXiv:2306.00978 ↗
[04]
Xiao, G., Lin, J., Seznec, M., Wu, H., Demouth, J., & Han, S.
(2023). SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models. In
International Conference on Machine Learning (ICML 2023)
.
arXiv:2211.10438 ↗
[05]
Dettmers, T., Lewis, M., Belkada, Y., & Zettlemoyer, L.
(2022). LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale. In
Advances in Neural Information Processing Systems (NeurIPS 2022)
.
arXiv:2208.07339 ↗
[06]
Dettmers, T., Svirschevski, R., Egiazarian, V., Kuznedelev, D., Frantar, E., Ashkboos, S., Borzunov, A., Hoefler, T., & Alistarh, D.
(2023). SpQR: A Sparse-Quantized Representation for Near-Lossless LLM Weight Compression.
arXiv:2306.03078 ↗
[07]
Kim, S., Hooper, C., Gholami, A., Dong, Z., Li, X., Shen, S., Mahoney, M. W., & Keutzer, K.
(2023). SqueezeLLM: Dense-and-Sparse Quantization. In
International Conference on Machine Learning (ICML 2024)
.
arXiv:2306.07629 ↗
[08]
Chee, J., Cai, Y., Kuleshov, V., & De Sa, C.
(2023). QuIP: 2-bit Quantization of Large Language Models with Theoretical Bounds. In
Advances in Neural Information Processing Systems (NeurIPS 2023)
.
arXiv:2307.13304 ↗
[09]
Tseng, A., Chee, J., Sun, Q., Kuleshov, V., & De Sa, C.
(2024). QuIP#: Even Better LLM Quantization with Hadamard Incoherence and Lattice Codebooks. In
International Conference on Machine Learning (ICML 2024)
.
arXiv:2402.04396 ↗
[10]
Ashkboos, S., Mohtashami, A., Croci, M. L., Li, B., Cameron, P., Jaggi, M., Alistarh, D., Hoefler, T., & Hensman, J.
(2024). QuaRot: Outlier-Free 4-Bit Inference in Rotated LLMs.
arXiv:2404.00456 ↗
[11]
Frantar, E., Castro, R. L., Chen, J., Hoefler, T., & Alistarh, D.
(2024). MARLIN: Mixed-Precision Auto-Regressive Parallel Inference on Large Language Models.
arXiv:2408.11743 ↗
GitHub ↗
Liu, Z., Yuan, J., Jin, H., Zhong, S., Xu, Z., Braverman, V., Chen, B., & Hu, X.
(2024). KIVI: A Tuning-Free Asymmetric 2-bit Quantization for KV Cache. In
International Conference on Machine Learning (ICML 2024)
.
arXiv:2402.02750 ↗
[14]
Hooper, C., Kim, S., Mohammadzadeh, H., Mahoney, M. W., Shao, Y. S., Keutzer, K., & Gholami, A.
(2024). KVQuant: Towards 10 Million Context Length LLM Inference with KV Cache Quantization. In
Advances in Neural Information Processing Systems (NeurIPS 2024)
.
arXiv:2401.18079 ↗
[15]
Zandieh, A., Daliri, M., Hadian, M., & Mirrokni, V.
(2025). TurboQuant: Online Vector Quantization with Near-Optimal Distortion Rate.
arXiv:2504.19874 ↗
[16]
Leviathan, Y., Kalman, M., & Matias, Y.
(2023). Fast Inference from Transformers via Speculative Decoding. In
International Conference on Machine Learning (ICML 2023)
.
arXiv:2211.17192 ↗
[17]
Chen, C., Borgeaud, S., Irving, G., Lespiau, J.-B., Sifre, L., & Jumper, J.
(2023). Accelerating Large Language Model Decoding with Speculative Sampling.
arXiv:2302.01318 ↗
Sheng, Y., Zheng, L., Yuan, B., Li, Z., Ryabinin, M., Chen, B., Liang, P., Re, C., Stoica, I., & Zhang, C.
(2023). FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU. In
International Conference on Machine Learning (ICML 2023)
.
arXiv:2303.06865 ↗
[20]
Kwon, W., Li, Z., Zhuang, S., Sheng, Y., Zheng, L., Yu, C. H., Gonzalez, J., Zhang, H., & Stoica, I.
(2023). Efficient Memory Management for Large Language Model Serving with PagedAttention. In
ACM Symposium on Operating Systems Principles (SOSP 2023)
.
arXiv:2309.06180 ↗
[21]
Gu, A., & Dao, T.
(2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces.
arXiv:2312.00752 ↗
[22]
Dao, T., & Gu, A.
(2024). Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality (Mamba-2). In
International Conference on Machine Learning (ICML 2024)
.
arXiv:2405.21060 ↗
[23]
Tillet, P., Kung, H. T., & Cox, D.
(2019). Triton: An Intermediate Language and Compiler for Tiled Neural Network Computations. In
ACM SIGPLAN Workshop on Machine Learning and Programming Languages (MAPL 2019)
.
ACM DL ↗
GitHub ↗
[24]
Dettmers, T., Pagnoni, A., Holtzman, A., & Zettlemoyer, L.
(2023). QLoRA: Efficient Finetuning of Quantized LLMs. In
Advances in Neural Information Processing Systems (NeurIPS 2023)
.
arXiv:2305.14314 ↗
[25]
Gerganov, G., & contributors
(2023). llama.cpp: Port of Facebook's LLaMA model in C/C++. Open-source software repository.
GitHub ↗
Here is a curiosity: an archive that can be constructed using a single GNU tar invocation, that is extracted in 8 distinct ways depending on what tool you use.
It creates an archive
hardest.tar
from three files
file ./file empty
in sequence, where
file
is repeated so that GNU tar stores the second one as a hard link, and
empty
is empty. Exploiting the unique path of the second entry, the hard link is renamed to
café
. This triggers tar to create a pax header to store the file name as UTF-8. We add a
size=512
record to the pax header, which overrides the default
size=0
from the hard link. The value 512 is not a coincidence: it is exactly the size of a tar header.
Visually, this archive has the following structure, with two basic interpretations based on whether a hard link can have a size or not.
Now, POSIX says that data blocks for a hard link
“may be included”
in pax archives, but the implications of this are not entirely clear. So the 512 bytes after the hard link are its data, and not the header of
empty
as we archived it? How can a hard link have different contents from its previous counterpart
file
?
Extracting it
This archive gives by far the richest and most surprising results I've encountered so far when extracting it with well-known tar utilities and libraries. The results below were produced using the latest releases of all packages at the time of writing.
GNU tar, BusyBox, Python, Go and Perl
This group is reasonable in principle: they ignore the size on the hard link, and extract
file
, its hard link
café
, and
empty
.
bsdtar
This is the system
tar
utility of macOS, which is closer to POSIX in spirit regarding the concept of size on hard links, and writes the 512 bytes into the hard link. The end result is that
file
now contains the tar header of
empty
.
7-Zip, node-tar, tar-fs, and Rust's tar & astral-tokio-tar
This group agrees with bsdtar that the 512 bytes are data of the hard link, but doesn't write them into the hard link. Instead, they skip forward over the data, and you are left with just
file
and
café
, without
empty
.
Java's Commons Compress
This is where you begin to need more imagination. Because
café
contains data, a
separate
file is created that contains the header of
empty
as data, while
file
keeps its original contents.
PHP's PharData
Makes
café
a separate, empty file, and also extracts
empty
. Why not?
RubyGems
Does not extract
café
at all, but to make up for it, it creates an empty directory
PaxHeaders
next to
file
and
empty
.
R
R has an entirely different approach: it extracts
empty
with 512 null bytes. It mistakenly applies the size to
empty
instead of the hard link, and those 512 bytes are from an end-of-archive marker.
These implementations reject the tarball. I believe this is the best thing you can do, even if it's technically not POSIX-compliant.
More of this
This tarball is one of 134 tricky tarballs that I'm collecting and categorizing in my test suite
haampie/tar-minefield
, developed since the last post. Its website
https://stoppels.ch/tar
features a big table that shows how implementations deal with all these cases, as well as detailed info per test case. A variant from the tarball of this post
is included as a test case
.
If you'd like to discuss this, send me an email at
firstname[at]lastname.ch
.
John Goerzen: The Large Project Bias of CVEs
PlanetDebian
changelog.complete.org
2026-11-10 08:42:23
I recently discovered some vulnerabilities in C-Kermit, one dating back to 1984. I tried to do the reasonable thing: create advisories with CVEs.
That turns out to be pretty difficult for a small independent project.
Large projects have a way to self-assign CVE IDs. They are their own CVE Numberin...
That turns out to be pretty difficult for a small independent project.
Large projects have a way to self-assign CVE IDs. They are their own CVE Numbering Authority (CNA). There is a
massive list of CNAs
. Just looking at the first page of results, I see everyone from Airbus to 9front (the niche Plan 9 OS). The
OpenKermit project
is not a CNA.
If you’re a CNA, you can create and publish CVEs on your schedule. There is apparently no external review process. You can wait for months, or publish immediately.
If you’re not a CNA, you have to find someone that is. The general ones that are CNAs appear to be Github and MITRE.
It’s been a week and a half and no sign of a review yet. Apparently the real review time is
more than a month
.
The other option for projects without a CNA is via MITRE. You have to use a
strange and often broken web form
, logging in with either Google or Gitlab. (It seems to be broken on Firefox). Then you submit your request and wait.
The first CVE I obtained for C-Kermit was CVE-2025-68920. At the time, I had not yet started the OpenKermit project. That issue was found and fixed in the context of my work maintaining C-Kermit for Debian, and Debian is a CNA.
These were discovered while wearing my “upstream C-Kermit maintainer” hat. I’m sure I could ask Debian for CVEs again, but that seems a bit cheating; not everyone that maintains a FLOSS project will have connections with a distro like I do.
There are a lot of components of a modern OS and Internet ecosystem that are small projects without a large institution behind them.
This bias towards large organizations when it comes to communicating security problems benefits nobody. It doesn’t benefit users, and only serves to discourage timely communication. Not everyone is as persistent as I am, and when it is made so difficult to make announcements — which seem to go into a giant black hole — it’s easy to say, “why bother?”
By Microsoft’s own admission, they are under-funding their CVE process on Github (which may also be poorly-designed). They blame it on increasing load due to LLMs — a problem they helped create and predicted! Having a fiction about being able to communicate a security issue in a reasonable time is worse than not offering the path at all.
Linux was once a student’s experiment. Let’s not pretend that quality only matters from large projects.
It's sad and a little scary how
HYPER-REALITY
predicted the current state of web (and app) design, assuming you're not using a
decent adblocker
. Like the film
Idiocracy
, this is a video which has slowly turned from hyperbole into a chilling reflection of reality. All the same companies and individuals who turned the web into a gamified nightmare clusterfuck of banners and popups and dark patterns and enshittified services are going to race to do the same to AR if it becomes mainstream. There's no reason to suspect otherwise.
All this leads me to ask, what actual incentive (aside from short term conveniences) would I have to buy an AR device? You don't
need
an AR device. And you can't become dependent or reliant on a device you haven't yet bought. So don't buy one!
You're not always expected to have your phone out. Most of the time, it should be in your pocket. Despite an epidemic of absentminded people walking around glued to their phones (I'm as guilty as anyone), it's still considered bad etiquette to use them during dinner, or while crossing the street. That's not the case with glasses, which are designed to be worn all day. That will become the
expectation
for AR glasses as they evolve into lighter, sleeker devices. All the same apps and services keeping you tied to your phone will follow you over to AR. Is that what you want?
Do you really want the hellscape end-state of the modern attention economy grafted onto your fucking face? To see ads everywhere all the time? Why? Even if you currently own an AR device and are enjoying a clean, uncluttered, curated user experience, how long do you think that will last? The web didn't turn into what it is overnight. Things take time to enshittify, but it's bound to happen.
Pop-up windows were a plague in the 90s and early 2000s, and remained that way until browsers started blocking them by default. This forced the popups to migrate
into the pages themselves
, and they've been trapped there ever since. Well, AR will be the escape hatch through which they break free of the constraints of the browser window and escape into the "real" world. Is that what you want?
REAL-WORLD POPUPS?
Are you insane?
I don't know exactly how, I don't know exactly when, but Apple and Google and Meta will create their own frameworks for businesses to display interfaces and ads and popups in arbitrary places, and it will spiral out of control. History will repeat itself.
Keep using your smartphone. Don't become dependent on an always-on HUD. Put up some resistance. If they want to envelop you within the cyberpunk dystopia, they should be forced to drag you inside it kicking and screaming.
‘Without storyboards, I feel like I’m in Grand Central station in my underwear’: film’s fightback against AI
Guardian
www.theguardian.com
2026-11-10 08:00:24
As Hollywood begins to adopt the technology, the professionals in most direct jeopardy are the illustrators mapping out directors’ first visions. They sketch out what could be lost A film industry dominated by AI is a dystopian prospect: stories and dialogue generated by large language models, popul...
A
film industry dominated by AI is a dystopian prospect: stories and dialogue generated by large language models, populated by
reincarnated screen icons
and
uncanny humanoids
. That is in the future, but the real-world impact of AI is already directly affecting jobs behind the scenes, as Hollywood’s biggest film-makers begin to adopt the technology. James Cameron – long an advocate for emerging technologies in film-making – is
on the board of a gen AI firm
, citing his interest in how AI will intersect with CGI; Steven Soderbergh used Meta-powered tech to create animations for his
recent documentary about John Lennon
; even Christopher Nolan, while dismissing the idea that AI will replace humans as “nonsense”, conceded that it will create some useful “imaging tools”.
Meticulous … Saul Bass’ storyboard for the shower scene in Alfred Hitchcock’s Psycho
Photograph: TCD/Prod.DB/Alamy
The current canary in the coalmine however is the storyboard artist, whose work gen AI appears to have directly in its sights. Storyboard artists are the illustrators who draw the panels of images with notes and diagrams that map out scenes before they are filmed. Storyboards are used to work out how a film will look, and as a blueprint to communicate a director’s vision to cast and crew
,
and
are one of the first steps in bringing a script off the page. Now they appear on the verge of replacement by programmes that use text prompts to create illustrations instead. Even an old-school diehard like Martin Scorsese has got on board; in June
he announced a partnership with an AI firm
whose text-to-image model he used in the storyboarding process for his next movie.
Usually, storyboards are made together by a director, an artist and other crew members responsible for the film’s visual storytelling, such as cinematographers, editors, production designers, stunt co-ordinators and more. “I find it very fulfilling to make art in such a collaborative way,” says
Alex Clark
, a British storyboard artist whose recent films include Bong Joon Ho’s sci-fi comedy
Mickey 17
, adventure romance
The Gorge
and Louis Leterrier’s recent thriller
The Last House
. “It’s about people sitting down to discuss each other’s ideas. You might act things out, make sound effects, read dialogue. You develop a creative relationship with one another.”
Storyboard illustration by Max Douy for Alejandro Jodorowsky’s unproduced adaptation of Dune
Photograph: Zhe Ji/Getty Images
For Clark, the process of creating a storyboard is just as important as the finished product. “A common misconception is that storyboarding is about making nice drawings. But it’s more than that – it’s about relating to how the director is thinking, and conceiving the most appropriate ways to tell the story of a scene,” he says. Dune director
Denis Villeneuve
articulated this relationship when describing his frequent collaborator, artist Sam Hudecki, as “an extension of my brain”. For Villeneuve, storyboarding is “a new way of writing”: writing a screenplay might provide the words, but storyboarding is the first step in creating the “cinematic language of the movie”. He views it as “a way to dream” as the film begins to come to life on the page.
Clark says that there is a balance that must be struck between “capturing the essence” of a scene and figuring out how the shots are going to work once the cameras are rolling. “The act of how you mark the page – to convey forms, tones, compositions, blocking and so on – forces you to thoroughly think about how all these different details will affect the scene. It gives you a rigorous understanding of how the scene is going to work.” Clark’s work reflects the fact that storyboarding is one step in an ongoing collaboration that continues through pre-production, shooting on set and beyond. “Sometimes I try to scale the drawings back, when it feels appropriate to leave space for others to build on it – whether it’s an actor’s performance, the way the set is decorated, lighting setup or subtle movement of the camera. I like finding space for happy accidents.”
For researchers and film enthusiasts, storyboard art offers a glimpse into the journey that lies behind a film, including fascinating changes in direction like this. “Storyboard art shows us the evolution of the creative vision,” says Ferdinando Cocco, a lecturer in film at Abertay university in Dundee. He points to Disney’s 1991 film Beauty and the Beast as an example: when it was first being worked on in the late 1980s,
the storyboards had a rococo-inspired aesthetic
, contemporary to the fairytale’s origins, styling Gaston as a bewigged 18th-century French aristocrat rather than the swollen, strong-jawed hunter who exemplified more modern ideals of masculinity.
Walt Disney (right) listens to an unidentified animator talk through the storyboards for the film Sleeping Beauty (released in 1959).
Photograph: Gene Lester/Getty Images
Storyboards were swiftly adopted by live-action productions, dating at least back to
Gone With the Wind
(1939). Since then, many film-makers have left behind storyboards that are beautiful and evocative images in themselves. Alfred Hitchcock created meticulously detailed storyboards, which spawned some of the genre’s most recognisable images: such as
the shower scene in Psycho
sketched beforehand by his frequent collaborator Saul Bass, the graphic designer behind many classic posters of the era. And before that, Hitchcock had worked with Salvador Dalí on
surreal designs
for the dream sequence in his 1945 film Spellbound.
Other directors, including
Akira Kurosawa
and
Ridley Scott
– whose storyboards are known as “Ridleygrams” – draw their own. Some of Bong’s self-drawn sketches are currently
on display at the Academy Museum in Los Angeles
, and his panels for Parasite have been
published as a graphic novel
. “Whenever I go to set without storyboards, I feel like I’m standing in the middle of Grand Central Terminal wearing only my underwear,” Bong writes in the book’s preface – however he does encourage the reader to see the differences between the storyboards and the film as “exciting moments of fear and spontaneity”.
Setting the tone … Alfred Hitchcock drawing storyboard sketches for Saboteur surrounded by concept artwork in his office at Universal Studios in 1942.
Photograph: Masheter Movie Archive/Alamy
Fan interest in behind-the-scenes material has created a market for storyboard books, while last year
an exhibition devoted to storyboard art held in Milan
displayed panels from films made by arthouse auteurs such as Ingmar Bergman and Federico Fellini, to artists Isaac Julien and Carrie Mae Weems, to Hollywood royalty – including Scorsese.
Creating engaging images is not without a practical function either, as storyboards are often pinned up on set to give the crew a sense of what will be shot that day. “I feel a responsibility to produce work that inspires and captivates everyone about what they’re making,” Clark says. “If the level of artistry and attention is evident at this stage, I believe it can set the tone on set, of valuing the craft involved.”
All hope is not yet lost. Cocco has observed a return to analogue practices and suggests that AI can be used in a way that fosters rather than dilutes the creative process. “Perhaps the difficulty that AI purportedly overcomes was the whole point from the start,” Cocco says. “Having to communicate with others forces an expansion of the artistic vision in ways that cannot be pre-empted.”
Clark meanwhile predicts that, as AI usage in the industry increases, people will come to have a greater appreciation for films with a human touch. “Ultimately, I think most successful films make you feel something as a human being. One advantage of hand-drawn storyboards is that you have a direct sense of that human authenticity right there on the page.”
Ableton Live 13 adds new audio and MIDI workflows, sound design tools and mixing effects. Highlights include:
A built-in Step Sequencer, ARA 2 support for compatible audio-editing plug-ins, Capture Automation, and Contextual Browsing for adding devices and swapping presets directly from the device chain.
Drum Synth, new Multiband and Mid-Side Racks, expanded Rack controls, and Envelope Clips for automating and modulating effects on return tracks.
Device Slots in the mixer, and new Core Library Drum Racks, instrument presets, Audio Effect Racks, samples, and MIDI clips.
Arrangement Sync for Ableton Link, support for exporting tempo automation and time signature changes, and more precise event timing in exported MIDI files.
Mixer improvements including Send sliders, a persistent Mixer Configuration menu for choosing which sections are visible, smoother mixer resizing, and an Unsolo button on the Main track, plus an updated Phaser-Flanger interface.
Live 13 Suite also includes Melodyne essential, Looplet, Clipper, Transient Shaper and the Classic Dynamics & EQ Pack by Softube.
Push 3 gains Custom Layouts, a new Step Sequencer layout, a new Performance Mixer, and Device Mode upgrades. Custom Layouts combine Session View, note areas, XYZ and mixer controls on a single page. The Step Sequencer brings the step editing experience from Live to the hardware. Device Mode adds jog wheel navigation and up to 32 Rack Macros.
Push 2 supports the new Step Sequencer and most Device Mode improvements (except jog wheel navigation), but not Custom Layouts, Performance Mixer or Expressive Step Editing.
Live 13 is the next major version of Ableton Live, following Live 12. It adds audio and MIDI workflows including ARA 2 support, Step Sequencer and Capture Automation, plus instruments and effects, expanded Rack controls, updated Core Library content, and more. Everything you can do in Live 12 you can still do in Live 13.
Ableton Live 13 comes in three editions: Intro, Standard and Suite.
They share the same core workflow but differ in their features and included instruments, effects and sounds. Live Intro is limited to 16 tracks and Scenes. Standard allows unlimited tracks and Scenes, and adds many more built-in instruments, effects and sounds.
Suite includes everything in Standard plus Max for Live, the complete instrument and effect collection, and Live’s full Core Library.
Suite also comes with Melodyne essential for ARA 2 editing, plus the Classic Dynamics & EQ Pack by Softube and Looplet as free downloads at release.
Compare editions in detail
.
If you already own Live 12 – pre-order Live 13 at 20% off.
If you don’t own Live 12 yet – buy or upgrade to Live 12 at 20% off during the announcement offer and get the corresponding Live 13 edition free when it’s released.
Log in to your User Account and visit the Ableton shop to see the upgrade options for your license. From now until the release of Live 13, you can buy or upgrade to Live 12 and get the corresponding Live 13 edition for free on release day.
You can extend your existing plan to cover the cost of upgrading to Live 13 Suite and start using it as soon as it’s released.
Visit the Ableton shop
to see your upgrade options.
Most ARA 2 plug-ins work with Live 13, including Melodyne. Live 13 Suite comes with Melodyne essential. A small number have known compatibility issues. See the full
Release Notes
for more information.
One ARA plug-in can be used at a time, across multiple clips and tracks.
SAP patches ICM2SHELL and PROXYGATE maximum severity flaws
Bleeping Computer
www.bleepingcomputer.com
2026-11-10 07:07:03
SAP patched 35 vulnerabilities in its November 2026 security updates, including four maximum-severity issues affecting its NetWeaver, Web Dispatcher, and Gateway software. [...]...
SAP patched 35 vulnerabilities in its
November 2026 security updates
, including four maximum-severity issues affecting its NetWeaver, Web Dispatcher, and Gateway software.
The company addressed memory corruption (
CVE-2026-76964
) and missing authentication (
CVE-2026-120017
) flaws in the NetWeaver Application Server ABAP's Internet Communication Manager and SAML2 Service Provider components.
NetWeaver is the core app platform that underpins SAP's business software and handles application integration, authentication, user management, and data processing.
The other two maximum severity vulnerabilities stem from a broken access control weakness (
CVE-2026-89103
) in SAP Gateway and a memory corruption issue (
CVE-2026-89126
) in SAP Web Dispatcher.
Gateway is a core framework that enables external apps to securely connect to SAP backend systems, while Web Dispatcher (deployed in almost every enterprise SAP environment) is a specialized component that acts as a load balancer and reverse proxy for web requests entering an SAP system architecture.
Cybersecurity firm Onapsis, which found and reported three of these security issues, collectively tracks CVE-2026-76964 and CVE-2026-89126 as
ICM2SHELL
and the CVE-2026-89103 pre-auth remote code execution vulnerability as
PROXYGATE
.
"ICM2SHELL turns a routine part of web traffic into a point of ingress for attackers. [..] The result is remote code execution against the component that faces the network by design: no SAP user, no password and no user interaction," Onapsis said.
"PROXYGATE works by convincing the SAP Gateway that an unauthenticated, external attacker is one of the internal application servers. [..] There is no SAP user, no password, and no user interaction, yet full control of the SAP system as the account that owns the installation is achieved. On a production ERP system, that means direct exposure of the business data, transaction integrity, and the availability of critical business applications."
SAP rated these four vulnerabilities 10/10 on the CVSS severity scale, stating that unauthenticated attackers can exploit them to fully compromise the targeted systems remotely.
More recently patched max severity SAP security issues
These are the latest in a string of other maximum-severity flaws SAP has fixed in multiple components in recent months.
It also addressed two more max severity flaws in
September
and
October
: a memory corruption flaw in the SAP Kernel code (tracked as CVE-2026-44756 and dubbed
OVERPASS
by Onapsis security researchers who reported it) and an OAuth2 SSRF vulnerability affecting multi-tenant BTP applications (CVE-2026-89111).
The US Cybersecurity and Infrastructure Security Agency (CISA)
has flagged 14 SAP security flaws
as actively exploited since November 2021, three of which ransomware groups also abused in the wild.
SAP is a German multinational software company that reported revenues exceeding €36 billion in fiscal year 2025 and serves 99 of the 100 largest companies worldwide.
Let Over Lambda
(ISBN 978-1-4357-1275-1, 376+iv pp.) is one of the most
hardcore
computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: C
OMMON
L
ISP
. The point of this book is to expose you to ideas that you might otherwise never be exposed to.
This book is about macros, that is programs that write programs. Macros are what make lisp the greatest programming language in the world. When used properly, macros enable amazing feats of abstraction, programmer productivity, and code efficiency and security that are unheard of elsewhere. Macros let you do things you simply cannot do in other languages.
If you are looking for a dry coding manual that re-hashes common-sense techniques in whatever langue du jour, this book is not for you. This book is about pushing the boundaries of what we know about programming. While this book teaches useful macro skills that can help solve your programming problems today and now, it has also been designed to be entertaining and inspiring. If you have ever wondered what lisp or even programming itself is really about, this is the book you have been looking for.
2026 update:
Let Over Lambda was published in 2008, to align with the 50th anniversary of Lisp's invention in 1958. A lot has changed since then, in both Lisp and programming practice in general. Although my thinking and opinions have evolved since, I still believe the book holds up well as a tutorial and explanation of why Lisp so special. Going forward, the entire book is free to read online (
HTML
,
PDF
). Happy lisping!
News
Chapter 6
is now open. It takes a detour through anaphoric macros and culminates in what I think is a very interesting macro:
pandoric-eval
.
Official Japanese translation available at
Amazon.co.jp
or any other fine Japanese book store.
Chapter 5
now open. This is one of my favourite chapters. Enjoy.
In my
recent
blog post
I remarked that database benchmarking is in a crisis
because AI agents start to overfit on individual benchmarks with
questionable techniques, which drives execution times towards zero. This
has happened with
TPC-D
in the past, and
broke the benchmark.
TPC-H
tries to fight
that with rules, but most people who publish (unofficial) TPC-H results
simply ignore the rules. In combination with overly eager AI agents,
this leads to brutal overfitting.
Taking a step back, though, it should be clear that a performance
improvement of a factor of 22 over Umbra is infeasible, at least if we
are talking about traditional query processing. At SF10, the 22 TPC-H
queries read roughly 15GB of (compressed) base data, and on a 9950X3D
Umbra runs all queries in a total of roughly 540ms. On that machine the
memory touched for data divided by the memory bandwidth (54GB/s) alone
is about 280ms; anything below that is infeasible. Better compression
might bring that down a bit, but not by an order of magnitude.
Unsurprisingly, the most dramatic gains of GenDB-V come from
precomputation. The agents have carefully handcrafted auxiliary data
structures for each query, which are computed at load time, and which
avoid most of the work. The physical design is heavily tuned to the
queries, too, for example, there is an extra structure that lists the
supplier
rows in
s_acctbal DESC
order, which
makes
Q2
trivial. Similar per-query data structures are
built for most queries. And we see that in the performance numbers:
Several queries already run in near-constant time at SF100: Q2 in 0.7
ms, Q17 in about 15 ms and Q4 in about 17 ms on one thread. That is the
TPC-D symptom, without stored aggregates.
There is also a “plain-array” mode, which, at first glance, is more
fair, as it avoids these excessive preparations and also reports
performance improvements of just roughly a factor of 3, which seems
achievable. But when looking closely, we see that here the agents did
something even more insane: They
hard-coded
their knowledge about the data generator. They “know” that each customer
k
will be at row
k-1
. And they know that dbgen
numbers the
i
-th order
32·(i/8) + i%8
, so key
k
should be at row
8·(k/32) + k%32 − 1
. Which
makes the join in query
Q18
super cheap.
How does all this fit together with the claim of a fully verified
database engine? Well, the code
does
check if the hard-coded
knowledge about the data generator holds in practice, e.g., by checking
if the guessed join partner row is correct. If not, it falls back to a
super slow generic nested loop implementation, but as that never happens
with the official TPC-H data generator, that code path is irrelevant in
the reported experiments.
Which brings me back to my original blog post claim: Letting AI
agents optimize for a given database benchmark makes the benchmark
useless. They will do their best to find insane tricks to speed up this
particular benchmark, but none of that would work in a real system. The
high tuning and synthesis time aside, deleting a single tuple (or
inserting one in the middle) can most likely cause the whole approach to
fall off a cliff, as it forces the slow fallback path. Which is not
something you want in a production system.
This article describes new features in the .NET runtime for .NET 11. It was last updated for release candidate 2 (RC 2).
Updated minimum hardware requirements
The minimum hardware requirements for .NET 11 have been updated to require more modern instruction sets on both x86/x64 and Arm64 architectures. Additionally, the ReadyToRun (R2R) compilation targets have been updated to take advantage of newer hardware capabilities.
Arm64 requirements
For Apple, there's no change to the minimum hardware or the ReadyToRun target. The Apple M1 chips are approximately equivalent to
armv8.5-a
and provide support for at least the
AdvSimd
(NEON),
CRC
,
DOTPROD
,
LSE
,
RCPC
,
RCPC2
, and
RDMA
instruction sets.
For Linux, there's no change to the minimum hardware. .NET continues to support devices such as Raspberry Pi that might only provide support for the
AdvSimd
instruction set. The ReadyToRun target has been updated to include the
LSE
instruction set, which might result in additional jitting overhead if you launch an application.
For Windows, the baseline is updated to require the
LSE
instruction set. This is
required by Windows 11
and by
all Arm64 CPUs officially supported by Windows 10
. Additionally, it's inline with the Arm SBSA (Server Base System Architecture) requirements. The ReadyToRun target has been updated to be
armv8.2-a + RCPC
, which provides support for at least
AdvSimd
,
CRC
,
LSE
,
RCPC
, and
RDMA
, and covers the majority of hardware officially supported.
OS
Previous JIT/AOT minimum
New JIT/AOT minimum
Previous R2R target
New R2R target
Apple
Apple M1
(No change)
Apple M1
(No change)
Linux
armv8.0-a
(No change)
armv8.0-a
armv8.0-a + LSE
Windows
armv8.0-a
armv8.0-a + LSE
armv8.0-a
armv8.2-a + RCPC
x86/x64 requirements
For all three operating systems (Apple, Linux, and Windows), the baseline is updated from
x86-64-v1
to
x86-64-v2
. This changes the hardware from only guaranteeing
CMOV
,
CX8
,
SSE
, and
SSE2
to also guaranteeing
CX16
,
POPCNT
,
SSE3
,
SSSE3
,
SSE4.1
, and
SSE4.2
. This guarantee is required by Windows 11 and by all x86/x64 CPUs officially supported on Windows 10. It includes all chips still officially supported by Intel and AMD, with the last older chips having gone out of support around 2013.
The ReadyToRun target has been updated to
x86-64-v3
for Windows and Linux, which additionally includes the
AVX
,
AVX2
,
BMI1
,
BMI2
,
F16C
,
FMA
,
LZCNT
, and
MOVBE
instruction sets. The ReadyToRun target for Apple remains unchanged.
OS
Previous JIT/AOT minimum
New JIT/AOT minimum
Previous R2R target
New R2R target
Apple
x86-64-v1
x86-64-v2
x86-64-v2
(No change)
Linux
x86-64-v1
x86-64-v2
x86-64-v2
x86-64-v3
Windows
x86-64-v1
x86-64-v2
x86-64-v2
x86-64-v3
Impact
Starting with .NET 11, .NET fails to run on older hardware and might print a message similar to the following:
The current CPU is missing one or more of the baseline instruction sets.
For
ReadyToRun
-capable assemblies, there might be additional startup overhead on some supported hardware that doesn't meet the expected support for a typical device.
Reason for change
.NET supports a broad range of hardware, often above and beyond the minimum hardware requirements put in place by the underlying operating system. This support adds significant complexity to the codebase, particularly for much older hardware that's unlikely to still be in use. Additionally, it defines a "lowest common denominator" that AOT targets must default to, which can, in some scenarios, lead to reduced performance.
The update to the minimum baseline was made to reduce the maintenance complexity of the codebase and to better align with the documented (and often enforced) hardware requirements of the underlying operating system.
A
net11.0
project no longer requires
<EnablePreviewFeatures>true</EnablePreviewFeatures>
to use Runtime Async.
The .NET runtime libraries themselves are compiled with
runtime-async=on
. The runtime libraries no longer contain compiler-generated state machines and rely entirely on runtime-provided async. This makes it possible to migrate an entire app (with only library dependencies) to the new model, and it provides broad functional and performance validation of the feature. The product team welcomes any reports—positive or negative—about throughput and library size changes you observe.
.NET 11 also includes two additional improvements:
Covariant
Task
→
Task<T>
overrides:
When a derived class returns
Task<T>
for a base method that returns
Task
, the runtime now generates a void-returning thunk that bridges the calling convention difference, so virtual dispatch works for both flavors. The same fix applies to NativeAOT.
Inlining in crossgen2:
Restrictions that prevented runtime-async methods from being inlined during ReadyToRun (R2R) compilation have been removed. All async tests pass with both crossgen2 and composite R2R, and inlining of await-less async calls (the synchronous fast path) is confirmed end-to-end.
Note
The
DOTNET_RuntimeAsync
and
UNSUPPORTED_RuntimeAsync
environment variables that previously controlled runtime-async behavior have been removed. To opt out of runtime-async per project, set
<UseRuntimeAsync>false</UseRuntimeAsync>
in your project file instead of relying on the environment variable.
Cleaner live stack traces
The most visible improvement is in
live stack traces
—what profilers, debuggers, and
new StackTrace()
see during execution. With compiler-generated async, each async method produces multiple frames from state-machine infrastructure. With Runtime Async, the actual methods appear directly on the call stack.
// To enable runtime async, add the following to your .csproj:
// <Features>runtime-async=on</Features>
await OuterAsync();
static async Task OuterAsync()
{
await Task.CompletedTask;
await MiddleAsync();
}
static async Task MiddleAsync()
{
await Task.CompletedTask;
await InnerAsync();
}
static async Task InnerAsync()
{
await Task.CompletedTask;
Console.WriteLine(new StackTrace(fNeedFileInfo: true));
}
Without
runtime-async
—13 frames, state-machine infrastructure visible:
at Program.<<Main>$>g__InnerAsync|0_2() in Program.cs:line 24
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](...)
at Program.<<Main>$>g__InnerAsync|0_2()
at Program.<<Main>$>g__MiddleAsync|0_1() in Program.cs:line 14
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](...)
at Program.<<Main>$>g__MiddleAsync|0_1()
at Program.<<Main>$>g__OuterAsync|0_0() in Program.cs:line 8
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](...)
at Program.<<Main>$>g__OuterAsync|0_0()
at Program.<Main>$(String[] args) in Program.cs:line 3
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](...)
at Program.<Main>$(String[] args)
at Program.<Main>(String[] args)
With
runtime-async
—5 frames, the real call chain:
at Program.<<Main>$>g__InnerAsync|0_2() in Program.cs:line 24
at Program.<<Main>$>g__MiddleAsync|0_1() in Program.cs:line 14
at Program.<<Main>$>g__OuterAsync|0_0() in Program.cs:line 8
at Program.<Main>$(String[] args) in Program.cs:line 3
at Program.<Main>(String[] args)
Note
Exception stack traces (from
catch (Exception ex)
) already look the same with or without Runtime Async, because existing
ExceptionDispatchInfo
cleanup in compiler-generated code handles that case. The improvement is in what you see
during
live execution.
This improvement benefits anything that inspects the live execution stack, including profiling tools, diagnostic logging, and the debugger call stack window.
NativeAOT and ReadyToRun support
Runtime Async supports NativeAOT and ReadyToRun compilation. This extends the feature beyond JIT-compiled code to ahead-of-time compiled scenarios. The runtime also reuses continuation objects more aggressively and avoids saving unchanged locals, reducing allocation pressure in async-heavy code.
Debugging improvements
Breakpoints now bind correctly inside runtime-async methods, and the debugger can step through
await
boundaries without jumping into compiler-generated infrastructure.
Runtime Async performance improvements
Runtime Async includes several performance improvements:
JIT async support:
The JIT compiles a dedicated runtime-async version of a synchronous, task-returning method rather than delegating through a thunk. The JIT turns the method's tail calls into runtime-async calls and awaits the task that would otherwise be returned, eliminating an extra layer of indirection.
Tail-merged suspension points:
The JIT tail-merges async suspension points so generated code is smaller.
Cached continuations:
Continuations used for runtime-async callable task thunks are cached and reused.
Pooled methods opt out:
Methods that are already pooled opt out of runtime-async, avoiding redundant work.
Tiered async compilation:
Async versions now flow through tiered compilation, so hot async methods get tier 1 optimizations after warm-up.
Task and ValueTask factory intrinsics:
The JIT recognizes common factories, such as
Task.FromResult
,
Task.CompletedTask
, and
ValueTask.FromResult
, and folds them into faster async paths.
Tail-await optimizations:
Implicit tailcalls from async methods are enabled again when the method directly returns another async result, and
await Task.Yield()
avoids extra allocations in runtime-async paths.
Async continuations without ExecutionContext
Async continuations can now opt out of
ExecutionContext
capture and restore.
ExecutionContext
carries ambient state—such as
AsyncLocal<T>
values—across
await
points. Every
Task
continuation previously captured a snapshot of the context and restored it before running, even when no
AsyncLocal<T>
state was in use and the restore was a no-op.
The runtime now detects when a continuation has nothing to restore and skips the capture/restore cycle entirely.
Task
,
Task<T>
,
ValueTask
, and
ValueTask<T>
all benefit from this change, as does the runtime-async implementation path. Applications that use
ConfigureAwait(false)
and
AsyncLocal<T>
sparingly see reduced overhead in high-throughput async code paths.
JIT improvements
Bounds check elimination:
The just-in-time (JIT) compiler now eliminates bounds checks for the common pattern where an index plus a constant is compared against a length, such as
i + cns < len
. It also eliminates more redundant bounds checks for index-from-end access (for example,
values[^1]
). These improvements reduce redundant checks in tight loops and improve throughput for array and span operations.
Redundant checked context removal:
The JIT can now prove and remove redundant checked arithmetic contexts—for example, when a value is already known to be in range. This optimization eliminates unnecessary overflow checks in generated code.
Switch expression folding:
Multi-target
switch
expressions now fold into simpler branchless checks when the targets are a small set of constants, for example
x is 0 or 1 or 2 or 3 or 4
.
Faster uint-to-float/double casts:
Casting
uint
to
float
or
double
is faster on pre-AVX-512 x86 hardware.
SVE2 intrinsics:
New Arm SVE2 (Scalable Vector Extension 2) intrinsics are available:
ShiftRightLogicalNarrowingSaturate(Even|Odd)
. These expand the set of vectorized operations available on Arm hardware that supports SVE2.
Math.BigMul
on x64:
Math.BigMul(long, long, out long)
is now significantly faster on x64. The JIT generates a single
MUL r/m64
instruction when both operands are 64-bit values and the caller requests the high half of the result, eliminating the previous helper call.
Single-IG prolog restriction removed:
The JIT no longer requires the function prolog to fit in a single instruction group (IG). Complex prologues with many saved registers, large stack allocations, or runtime-async state setup no longer trigger fallback paths.
SELECT(cond, cns, cns)
folding:
The JIT now folds conditional selects whose two branches both produce the same constant into just that constant—for example,
condition ? 42 : 42
becomes
42
. This fold eliminates unnecessary comparisons that can appear after earlier optimizations unify branches.
Saturating floating-point conversions:
Unchecked
float
and
double
conversions to small integer types now saturate to type bounds instead of wrapping through intermediate truncation.
ARM64
Vector<T>
by reference for SVE:
When the runtime is compiled with ARM SVE support,
Vector<T>
values are passed by reference rather than by value, aligning with the ARM calling convention for scalable types and enabling better code generation for SVE-intensive code.
For better performance and code quality, .NET 11 adds several more JIT optimizations:
Constant-folding SequenceEqual
The JIT can now fold a
string.Equals
or
ReadOnlySpan<T>.SequenceEqual
call whose operands are both compile-time constants, replacing the byte-by-byte comparison with the constant
true
or
false
result. This matters most after inlining, when a caller passes another literal to a helper that compares against a known string. When
IsAdmin
is inlined into a caller that passes
"Guest"
, the JIT sees
"Guest" == "Admin"
and folds it to
false
:
static bool IsAdmin(string role) => role == "Admin";
The optimization applies to string literals,
const string
fields, and UTF-8 literals (for example,
"PNG"u8
).
Devirtualization improvements
The JIT can now devirtualize generic virtual methods, including non-shared generic virtual methods and shared generic virtual methods that don't require a runtime lookup. Default interface methods declared on generic interfaces can now be devirtualized as well.
In addition, the result of
Activator.CreateInstance<T>()
is now treated as having an exact type, allowing the JIT to devirtualize subsequent calls made on the returned object.
These improvements unlock further downstream optimizations such as inlining and constant folding, reducing runtime dispatch overhead and improving performance. For example:
IfaceGeneric<string> caller = new Caller<string>();
Iface obj = Activator.CreateInstance<Impl>();
caller.DefaultImpl(obj, "test"); // Can be optimized down to Console.WriteLine("test")
interface Iface
{
void GenericMethod<T>(T value);
}
interface IfaceGeneric<T>
{
void DefaultImpl(Iface obj, T value) => obj.GenericMethod(value);
}
class Impl : Iface
{
public void GenericMethod<T>(T value) => Console.WriteLine(value);
}
class Caller<T> : IfaceGeneric<T>
{
}
Here the JIT can determine the exact implementation behind both interface calls, devirtualize them, inline through the call chain, and ultimately fold the code down to the equivalent of
Console.WriteLine("test")
.
Eliminating bounds checks after an empty-span guard
The JIT now picks up the
length != 0
assertion from an empty-span check and uses it to prove the bounds check on the first element succeeds:
if (!span.IsEmpty && span[0] == value)
{
// The bounds check on span[0] is now eliminated.
}
Redundant branch and test elimination
When an outer predicate is already implied by an inner branch, the JIT now removes the redundant outer check. Similarly, when code assigns a value in a conditional and then immediately tests it, the second test is eliminated:
if (x > 0)
{
if (x > 1) S(); // The outer x > 0 check is folded away.
}
int y = condition ? 1 : 2;
if (y == 1) A(); else B(); // The y == 1 test is eliminated;
// each branch of the ternary goes directly to A() or B().
These optimizations are most visible after inlining, where guards from different methods land in the same compiled body.
Hardware intrinsics and code generation
.NET 11 includes several new hardware intrinsics and code generation improvements:
Hardware FP16 instructions for
Half
arithmetic and conversions:
The JIT uses hardware FP16 instructions for
Half
arithmetic and conversions when the processor supports them. On x64, arithmetic uses AVX10.1, while conversions between
Half
and
float
can use F16C (available on most AVX2-capable hardware). On Arm64, arithmetic uses the optional FP16 instruction set, while conversions between
Half
and
float
or
double
use baseline Arm64 instructions. The optimization requires no application changes and preserves the existing ABI representation of
Half
.
Better cost modeling for x86/x64 SIMD:
The JIT's floating-point execution and size costs previously reflected x87-era assumptions. Updated costs that reflect modern SSE/AVX hardware let the JIT make better decisions about hoisting and common subexpression elimination (CSE) around SIMD code.
Faster
DotProduct
on AVX:
Lowering for
Vector128.Dot
-style operations now emits a
mul + permute + add
sequence instead of
vdpps
/
vdppd
when AVX is available, which is consistently faster.
Faster
IndexOfAnyAsciiSearcher
on Arm64:
Arm64 versions of
Vector*.Count
,
IndexOf
, and
LastIndexOf
no longer route through
ExtractMostSignificantBits
, yielding a 5–50% improvement in workloads that use these APIs in their core loop.
Arm64
ToScalar
for 64-bit integers:
ToScalar
on
Vector*<long>
and
Vector*<ulong>
now uses
fmov
instead of
umov
, which is shorter and faster on most cores.
SVE
CreateWhile
API expansion:
CreateWhile
gains signed,
double
, and
single
variants alongside the existing unsigned ones, completing the predicate-generation surface for SVE loops.
New SVE2 and Arm64 instruction-set detection:
The runtime now reports
SVE_AES
,
SVE_SHA3
,
SVE_SM4
,
SHA3
, and
SM4
as separate instruction sets, allowing
Sve2*.IsSupported
queries for those features on capable hardware.
AVX10 detection fix:
The CPUID-bit cache for AVX10 was being overwritten by a later query, which could cause AVX10 to be misreported on capable hardware. This is now fixed.
ReadyToRun improvements
Comparer<T>.Default
and
EqualityComparer<T>.Default
are now specialized in ReadyToRun (R2R) images. Previously, the default comparers used reflection that R2R couldn't see ahead of time, causing callers to fall back to the JIT. R2R now generates a specialized helper in the image—mirroring the NativeAOT approach—and benchmarks show up to a 20× improvement for collections operations that rely on the default comparer.
VM improvements
Cached interface dispatch on non-JIT platforms:
On platforms that lack JIT support, such as iOS, interface dispatch was falling back to an expensive generic fixup path. Cached dispatch yields up to 200x improvements in interface-heavy code on these targets.
Guid.NewGuid()
on Linux:
Guid.NewGuid()
on Linux now uses the
getrandom()
syscall with batch caching instead of reading from
/dev/urandom
, yielding approximately 12% throughput improvement for GUID generation.
WebAssembly improvements
Browser and WebAssembly support has several improvements:
WebCIL payload loading:
The runtime can now load WebCIL payloads directly, improving compatibility with browser-based deployment scenarios.
Better debugging symbols:
Symbol and stack trace quality for WebAssembly debugging has improved, making it easier to diagnose issues in browser-hosted .NET apps.
float[]
,
Span<float>
, and
ArraySegment<float>
marshaling:
float[]
,
Span<float>
, and
ArraySegment<float>
are now marshaled more directly across JavaScript boundaries, reducing overhead for interop-heavy code.
.NET includes improvements to CoreCLR-on-WebAssembly:
WebCIL V1 is the default for CoreCLR WASM builds:
The shared WebCIL header gains a
TableBase
field (28 → 32 bytes). Both Mono and CoreCLR readers accept V0 and V1. Crossgen2's
WasmObjectWriter
produces V1 directly, and CoreCLR-flavored WASM SDK builds default
WasmWebcilVersion
to
V1
.
Native re-link works for CoreCLR WASM apps:
A full Emscripten-based pipeline replaces the previous stub targets. Re-linking
dotnet.native.wasm
from the runtime pack and including custom native code via
NativeFileReference
now works.
NativeAOT publish for WASM no longer drops package satellites:
Satellite assemblies from NuGet packages are now passed to ILC and pruned from the publish output, fixing localization for AOT-published apps that depend on packages such as
System.CommandLine
.
CoreCLR on WebAssembly now runs the libraries test suite end to end.
Platform support for more than 1024 CPUs
The .NET runtime can now initialize on machines with more than 1024 logical processors. Previously,
sched_getaffinity
was called with the default
cpu_set_t
(capped at 1024), causing initialization to fail on high-core-count servers. The runtime now allocates the CPU set dynamically. The GC retains its 1024-heap limit, but the CPU count limit is removed.
In-process crash report logging
A new in-process crash reporting mechanism captures diagnostic information from within the crashing process before it terminates. Previously, crash diagnostics were collected by an out-of-process monitor. While the out-of-process approach is safe, it can miss information that's only available inside the dying process. The new in-process path logs the managed stack trace, module list, and key runtime state to a well-known path before the process exits.
This capability originated on mobile platforms and is now also available on Linux and macOS. When
DOTNET_DbgEnableMiniDump
isn't enabled, set
DOTNET_EnableCrashReport=1
or
DOTNET_EnableCrashReportOnly=1
to select the in-process reporter. Existing
createdump
behavior remains in place when minidumps are enabled.
NativeAOT: faster interface dispatch
NativeAOT now uses a dispatch helper for interface method calls. Instead of a direct fat-pointer call sequence, the runtime routes interface dispatch through a shared helper that can be patched to the correct implementation after the call site warms up. This reduces the binary size of interface call sites and improves throughput on workloads with many interface method calls.
Generic virtual method dispatch also uses the shared dispatch-cell infrastructure, which improves both monomorphic and polymorphic call performance. In addition,
Assembly.GetCallingAssembly()
now works on NativeAOT when stack trace data is available.
SIMD lane construction and composition
System.Runtime.Intrinsics
now includes lane construction and composition APIs for hardware vector types. The new APIs let you construct a vector from individually specified lanes and extract or reorder lanes between vectors. This enables precise, portable control over SIMD vector element placement without falling back to platform-specific intrinsics.
The new methods fall into a few families:
Patterned construction:
CreateGeometricSequence
,
CreateAlternatingSequence
, and
CreateHarmonicSequence
build a vector from a starting value and a rule.
Interleave and de-interleave:
Zip
,
ZipLower
/
ZipUpper
,
Unzip
,
UnzipEven
/
UnzipOdd
.
Rearrange:
The
Concat
family (
ConcatLowerLower
,
ConcatLowerUpper
,
ConcatUpperLower
,
ConcatUpperUpper
) and
Reverse
.
using System.Runtime.Intrinsics;
// {1, 2, 4, 8} — each lane is the previous lane times two
Vector128<int> powers = Vector128.CreateGeometricSequence(1, 2);
// Interleave two vectors lane-by-lane
(Vector128<int> lower, Vector128<int> upper) =
Vector128.Zip(Vector128.Create(1), Vector128.Create(2));
These APIs are available on
Vector128<T>
,
Vector256<T>
,
Vector512<T>
,
Vector64<T>
, and
Vector<T>
. They're building blocks for image processing, audio digital signal processing (DSP), and other SIMD-intensive workloads that need fine-grained control over vector element layout.
File locking on iOS and tvOS
On iOS and tvOS, including simulators, CoreCLR now disables advisory file locking by default. A
FileStream
that acquired an advisory lock could cause the operating system to terminate an app when the app entered the background while it held the lock. As a result,
FileShare
restrictions are no longer enforced by those locks on iOS and tvOS, including between handles in the same process. Mac Catalyst and other platforms keep their existing defaults.
If your app relies on
FileShare
enforcement and you accept the risk of suspension-related termination, restore file locking by using either of the following settings:
Set the
DOTNET_SYSTEM_IO_DISABLEFILELOCKING
environment variable to
0
.
Set the
System.IO.DisableFileLocking
runtime configuration property to
false
. For example, in the
runtimeconfig.json
file:
The runtime includes fixes for the following issues:
On Linux, the SDK no longer crashes on Red Hat Enterprise Linux (RHEL) 8 on Arm64, and the runtime correctly traverses cgroup v2 memory limits at the root of the hierarchy.
Generic virtual method dispatch no longer hangs after repeated
AssemblyLoadContext
unloads.
TryDequeue
no longer spuriously reports an empty queue while a segment freezes during growth.
TryPeek
has the same reliability fix.
On Windows, garbage collection works correctly on machines with multiple CPU groups.
Runtime diagnostics
The async profiler now instruments both runtime-async methods and compiler-generated async state-machine methods, so tools receive one consistent event model regardless of async implementation style. The runtime also adds improved interpreter perf-map logging support, and fixes parsing of
CORECLR_NOTIFICATION_PROFILERS
lists that don't end with a semicolon.
How Google DeepMind researchers built a new agentic framework that formally verified the code of Signal’s cryptographic protocol — long considered to be a grand security challenge
Today, we’re sharing a milestone in software security long considered to be a grand security challenge: Google DeepMind researchers guided AI agents to mathematically prove key security properties of the actual code underlying the Signal protocol, the technology that protects billions of private conversations in apps like Signal and Google Messages.
This breakthrough discovery was made using
AlphaProof Code
,
a novel agentic framework for formal verification at unprecedented depth that combines human expertise with AI agents.
Formal verification—mathematically proving code runs correctly without flaws—is the highest standard of security assurance; however, it is difficult and often labor-intensive.
Our work marks the first time AI has been used to formally verify a widely deployed cryptographic protocol at this depth. It's also the first time the implementation of a widely deployed protocol like this has been formally verified by any method, with or without AI.
How we verified Signal
AlphaProof Code is a multi-LLM agentic framework that splits the work of formal verification the way a research team would: human experts work with AI to decide
what
to prove, and a group of AI agents does it.
First, our researchers collaborated with a mix of models to translate Signal’s security goals into formal mathematical specifications, with human experts reviewing every one. From there, agents powered by
Gemini Carbon
did the proofs, generating over six million lines of Lean, a computer language that mathematically proves the accuracy of code.
Next, the agents audited the proof and highlighted areas that needed a second look by a human – just one percent of the codebase, a massive time savings. Because Lean automatically checks the rest, our experts could focus their review where human judgment matters most.
Cryptographic protocols underpin nearly all digital communication, from online banking to web browsing, and a single flaw can expose millions of people at once. That's why experts have spent decades formally analyzing them.
But most protocol verification stops at the design level. Our agents went further, proving that the compiled code fulfills the key security properties – such as keeping messages protected before and after a device is temporarily compromised – down to the exact code running on devices. Because real-world vulnerabilities often hide in the gap between design and implementation, bridging this gap makes these proofs vastly more complex.
Even at this complexity, our verification process took just four weeks – a task that historically takes expert teams years – proving that Signal's core cryptographic code delivers the security protections our experts specified.
To confirm that AlphaProof Code can tell correct code from buggy code, we reintroduced two real, previously fixed bugs into an isolated version of Signal's code. In both cases, the system produced a machine-checked proof that the buggy version was insecure.
In AlphaProof Code, AI agents help users write a specification, then autonomously prove that the implementation meets it. Every proof is checked by Lean to verify the agents' work.
While prior formal verification work has necessarily focused on smaller scopes, this new approach enables a significant expansion. Traditionally, verifying that production code strictly matches its cryptographic design required extensive manual effort, making the use of AI agents to automatically translate live code into valid Lean theorems a great breakthrough. As AI-driven security threats grow, having the core Signal protocol rigorously verified with automated theorem proving gives us even greater confidence that our code delivers on its privacy guarantees.
The future of security
Achieving this long-standing challenge demonstrates how AI can bring elite security assurance to businesses, governments, and critical infrastructure, helping defend against agent-driven cyber threats.
Verifying Signal's core cryptography lays the groundwork to secure other vital systems, from medical device firmware to power grid software.
Scaling these techniques requires continued research. Paired with automated defense agents like
CodeMender
, formal verification can help counter the speed and scale of modern cyber threats to create software with mathematical proof that its protections work.
This research was developed by Swarat Chaudhuri, Andrew Ferraiuolo, Anton Kovsharov, Tej Chajed, Sam Schlesinger, Karn Seth, Jonathan Katz, Charles Sutton, and Pushmeet Kohli.
We thank Eric Wieser for help with open-sourcing our code, Owen Jones for program management support, and Martín Abadi, Christopher Henson, Katerina Hristova, Henryk Michalewski, Jonathan Protzenko and George Tsoukalas for helpful discussions. We thank Signal's Rolfe Schmidt, Michael Rosenberg, and Ehren Kret for their feedback on our methodology. We also thank Tulsee Doshi, Four Flynn, Kate Olszewska, Alicia Huang, Andy Liu, Benoit Schillings, Raluca Ada Popa, Melvin Johnson, Koray Kavukcuoglu, Demis Hassabis, and Sundar Pichai for their support of the project.
Introducing CodeMender: an AI agent for code security
Proactive cyber defense for governments and enterprises
Gemini 4 Carbon: Our next frontier model
AI achieves silver-medal standard solving International Mathematical Olympiad problems
New OpenSSH Vulnerability
Schneier
www.schneier.com
2026-11-10 07:02:38
It’s a bad one, and it’s been in the code for a decade:
A newly disclosed flaw involving OpenSSH and musl, dubbed “*sshole,” allows attackers to log in to certain Alpine Linux and other musl-based Linux accounts configured to block password authentication simply by entering a...
It’s a
bad one
, and it’s been in the code for a decade:
A newly disclosed flaw involving OpenSSH and musl, dubbed “*sshole,” allows attackers to log in to certain Alpine Linux and other musl-based Linux accounts configured to block password authentication simply by entering an oversized password.
“Oversized” means longer than 256 bytes.
Details
.
Open
http://your-server:6262
and make the owner account. A short setup walks you through folders, a downloader and a Source.
No API keys to hunt down. No second container. Every setting is explained in
the manual
further down.
💡 Why I built it
A normal media server runs six apps: Sonarr, Radarr, Lidarr, Bazarr, Prowlarr and Seerr.
That's six logins, six ports, six update cycles and six API keys to copy between them. When a show doesn't land, you check six places to find out why.
I wanted one app. One login, one port, one place to look.
So I built it.
App
Download (amd64)
Idle RAM
Logins
Web ports
Sonarr
87.9 MB
1
1
Radarr
91.0 MB
1
1
Lidarr
121.3 MB
1
1
Prowlarr
80.8 MB
1
1
Bazarr
156.4 MB
1
1
Overseerr
180.8 MB
1
1
Six together
718.2 MB
6
6
HolyArrs
14.9 MB
~140 MiB
1
1 (6262)
About 48 times smaller. Compressed registry download, linuxserver.io images, amd64, measured 2026-11-08. Idle RAM measured with 10,000 titles and 55,000 movies and episodes.
🎬 Ask for a title, and it shows up in your library
Someone asks for a title. HolyArrs searches your Sources, picks the best release with your Pick rules, sends it to your downloader and files it in your library. Your media server hears about it when it lands.
🍿
Explore
Browse like a streaming app. Hover a title and the trailer plays.
🙋
Requests
A whole show or one season. You approve, or let trusted people skip the queue.
🎯
Pick rules
You decide which release wins: size, quality, language.
💬
Subtitles
In the languages you pick, kept with the file. Finding them online comes after 1.0.
📅
Calendar
What's airing next for everything you follow.
🚚
Move your setup
From Sonarr, Radarr, Lidarr, Prowlarr, Bazarr, Seerr, Overseerr, qBittorrent and SABnzbd. Try it first, undo it later.
🔌
Old-app API
Prowlarr can keep pushing Sources to HolyArrs once you turn it on.
🗝️
No API keys needed
Titles, artwork and charts come from the HolyArrs metadata server.
🔒
Encrypted keys
Stored passwords and keys are locked with a master key that lives in your config folder.
🪶
Tiny
An image of about 15 MB with nothing but HolyArrs inside.
Open
Settings > Move from other apps
, add each old app's address and API key (or a backup zip), pick what comes over, run
Try it
, then
Move
. You can undo a move later.
From
What comes over
Sonarr, Radarr, Lidarr
Library folders, titles, quality profiles as Pick rules, exclusions, naming, indexers and download clients
Prowlarr
Indexers as Sources
Bazarr
Default subtitle languages
Seerr, Overseerr
People and their waiting or approved requests
qBittorrent, SABnzbd
Downloaders
HolyArrs only reads your old apps and changes nothing in them, so you can run both side by side until you trust it.
Keys and passwords stay behind; you type them in again or import them from a file. Custom formats, tags and history don't come over. Media files never move. Step by step:
Move from other apps
.
🧭 What it doesn't do yet
Downloading by itself.
HolyArrs connects to qBittorrent, SABnzbd and the others. It doesn't replace them.
AI or MCP features.
Not in 1.0.
Phone and TV apps.
Not built. The web app works on a phone.
Do I keep qBittorrent or SABnzbd?
Yes, for now. HolyArrs connects to the downloader you already run. A built-in downloader is planned for a later release.
Can Sonarr and Radarr keep running while I try it?
Yes. HolyArrs reads them once and never changes them.
PUID
and
PGID
must match the user that owns your media folders. Find them with:
id youruser
# uid=1000(youruser) gid=1000(youruser)
HolyArrs never changes the owner of your media or download folders. Give that user write access to them, because HolyArrs makes folders and moves files.
Application setup
Open
http://your-server:6262
and make the owner account right away. There is no default password. Until you make it, whoever opens HolyArrs first becomes the owner.
The setup that opens next asks for your folders, a downloader and a Source. Guide:
First run
.
Media folders
The four optional mounts are the easy way to start. The cost: each mount is its own filesystem inside the container, so every import is a full copy.
Want instant moves that take no extra space? Mount one parent folder with downloads and Library folders inside it, and give your downloader the same mount at the same path. Guide:
Folders
.
Docker Desktop on Windows and Mac
Use a named volume for
/config
. Media folders can stay host folders. Guide:
Install
.
Keep your master key safe
holyarrs.key
in your config folder is what opens your stored passwords and keys. Backups don't include it, so keep a copy somewhere else. As the owner, open
Settings > Backups
and choose
Download key kit
. See
Backups
.
Updating
docker compose pull
docker compose up -d
If the new version changes how data is stored, HolyArrs makes a backup first. To go back to it:
docker exec holyarrs /holyarrs restore --pre-update
, then
docker restart holyarrs
. Never remove
/config
during an update. See
Updates
.
Security
The owner account is made at first visit. There is no default password.
Stored passwords and keys are encrypted with
holyarrs.key
.
The image has no shell inside it.
Don't forward port 6262 on your router. Use a VPN such as Tailscale, or a reverse proxy with HTTPS.
On your first pull request a bot asks you to accept a short licence agreement (
CLA.md
). One click, once.
Licence
HolyArrs is free and open source under the
GNU AGPL-3.0
.
Want to build it into a closed product? Email
support@HolyArrs.com
for a commercial licence.
Keep it going
HolyArrs is free, but it isn't free to run. Every install talks to a metadata server I pay for every month. Sponsors cover that, and buy more hours for the things you vote for.
Built by
CoderLuii
.
If HolyArrs saves you from running six apps, a star helps other people find it.
My previous, tedious workflow for these kinds of images was to go to
unspash.com
,
search for something like
structure
or
archive
, and then select an image
I thought would fit the theme of the post. Being both boring and error-prone,
I abandonded that process and set up a pipeline that generates image cards at build-time instead.
They look like this:
Let me show you how I did it.
Typst
Typst
is a tool that generates high-quality documents from a simple markup language.
A lovechild of
LaTeX
and
Markdown
,
it works great for math whilst also keeping the day-to-day text formatting syntax bearable.
As a small taste, this snippet (adapted from
the Typst README
)
#set page(width: 10cm, height: auto, margin: 1cm)#set heading(numbering: "I.")#let fib_1 = 1#let fib_2 = 1= The Fibonacci sequenceThe Fibonacci sequence is defined through therecurrence relation $F_n = F_(n-1) + F_(n-2)$,with $F_1 = #fib_1$ and $F_2 = #fib_2$.It can also be expressed in _closed form:_$ F_n = round(1 / sqrt(5) phi.alt^n), quad phi.alt = (1 + sqrt(5)) / 2.$
produces this fine document:
By default the
typst
CLI will create a PDF, but it can also make PNGs. The above image was created with the command
If all of my posts were titled
“Typst very nice”,
we’d be done, but, alas.
Luckily, typst accepts inputs to a document with
--input key=value
,
which is put in a
sys.inputs
dictionary for the template to read.
So the template becomes
#set page(width: 1200pt, height: 630pt, margin: 80pt, fill: rgb("#FF1493"))#set text(font: "Comic Sans MS", fill: white, lang: "no")#let title = sys.inputs.at("title", default: "You forgot the title :(")// Reading the input here ☝️#grid( rows: (1fr, auto), align(left + horizon, { text( size: if title.len() > 70 { 60pt } else { 72pt }, weight: 800, title, ) }), text(size: 24pt, "Would typst again"),)
which, when rendered with
typst compile \ --format png \ --ppi 144 \ --input title="Look ma, from the CLI!" fancy-typst-with-input.typ
becomes
Perfection.
Let’s move on to generating the images at build-time.
Astro
This site is built with
Astro, a static site generator
.
Articles are written in Markdown, which is then bundled into a
Content Collection
by Astro. The details are irrelevant, what matters is that this lets me
define metadata which I can query through a Javascript API.
The source code for the page template is at
src/pages/posts/[id].astro
.
There are a few notable things about this file path:
That it is in the
src/pages/
directory tells Astro that this should be rendered as a page.
The remainder of the path,
/posts/[id]
, tells Astro where to put the page.
[id]
being in brackets means
id
is a dynamic parameter which must be defined at build time.
In other words, Astro needs to know every ID when building the site—it can’t generate infinitely many
IDs. A function called
getStaticPaths
exported from the template defines the set:
import type { GetStaticPathsResult } from "astro";import { getCollection } from "astro:content";export async function getStaticPaths(): Promise<GetStaticPathsResult> { const posts = await getCollection("posts"); return posts.map((post) => ({ params: { id: post.id }, props: { post }, }));}
That is, fetch every article, and use its
id
as the
id
parameter.
This is the object returned for the current page:
{ params: { id: "open-graph-images-with-typst" }, props: { post: { /* Everything the template needs to render a post */ }}}
By default Astro will generate an HTML file, but it can also return other
kinds of responses. Together with this blog post I also put
the following snippet at
src/pages/api/build-info.json.ts
:
import type { APIRoute } from "astro";export const GET = (async () => { const data = await getLatestJjMetadata(); return new Response(JSON.stringify(data), { headers: { "content-type": "application/json" }, });}) satisfies APIRoute;async function getLatestJjMetadata(): Promise<{ changeId: string; committedAt: Date;}> { // Implementation cut for brevity}
Note that there are no parameters in brackets, so this will create a
single JSON file at build time:
Note that the file extension is included in the path, i.e.
.json.ts
. This is
because when the dev server is running it sets the appropriate
content-type
header
to let the browser know what to do with the response, but once the page is built
the result is a file with
.ts
stripped off. The browser
then interprets the remaining file extension to know what content to expect at the path.
You probably see where this is going: Create an API route which takes a post ID
as a parameter and ends in
.png.ts
, gets the post title using the Astro Content Collection API,
generates an image, and returns it in a response with the appropriate
content-type
header.
You got it. Here’s the open graph image endpoint in its entirety, defined at
src/pages/posts/[id]/og.png.ts
:
Now go to
eaj.no/posts/open-graph-images-with-typst/og.png
, et voilà:
When a sharing platform loads the image for an article, it might very well be cached for a long time.
Even if you decide to completely redo your entire branding, LinkedIn might insist on displaying your
previous hideous design unless you handle it. A simple trick is to use a throwaway
search parameter that doesn’t do anything other than make the URL unique:
/some-image.png?v=whatever
A straightforward (but silly) solution for creating this parameter is to generate a random string of characters every time
the site is built, ensuring your image is always fetched anew.
I landed on using a hash of the typst template and the title, so that the cache key only
changes whenever the actual content does:
import { createHash } from "node:crypto";import { readFileSync } from "node:fs";export function openGraphImageCacheBuster(title: string): string { const template = readFileSync(OPEN_GRAPH_TEMPLATE_PATH); return createHash("sha256") .update(template) .update(title) .digest("hex") .slice(0, 10);}
Rust is a great language for many reasons: safety, performance and tooling. However, debugging is maybe one of the weakest points still. Interestingly enough, the
Rust debugging survey 2026 results
show that the majority (53.2%) of Rust users don’t use a debugger
at all
. Many Rust developers (81.3%) say that prints are simply easier/faster. The setup is also another problem: many users find it difficult to set up a debugger and it’s not a beginner-friendly feature. Especially when you include async (28.1%) and macros (23.0%), stepping features break most of the time.
However, the situation is still better than it was in 2021, when the survey was first conducted. The number of users who use a debugger has increased from 36% to 46.8%!
This made me think:
how is the debugging experience in Rust today?
So let’s dive into the techniques and tools that are available and how they are used in practice.
The Scenario
We will be using the
Graham scan algorithm
as an example. The algorithm computes the convex hull of a set of points in a plane: the smallest convex shape that encloses every point. Basically, you can think of it as stretching a rubber band around a collection of nails.
🐀: Here, I built a TUI with
Ratatui
to visualize the algorithm and the bug:
You can see that it fails to enclose P2: the computed fence is red while the expected fence is green. Now, let’s go through the available debugging techniques to fix it!
1. println!, dbg! or tracing
There is already a unit test that fails, so we can use it as a debugging loop. Simply add println! or dbg! statements to the code and run the test until we find the bug.
Here, we print the intermediate ordering, rerun the failing test and see that points with the same polar angle are ordered farthest-first. Reversing the distance comparison fixes the ordering and the next test run passes.
This is the most common way of debugging in Rust and it works well for small programs. However, you see
the problem
: it is an iterative and tedious process. You need to recompile and run the program every time which takes time. It is also not ideal for big projects. It still works though!
🐀: What else?
2. rust-gdb or rust-lldb in the terminal
We can inspect the same failing test without changing the source code via
rust-lldb
or
rust-gdb
:
From there, we set breakpoints, run only the failing test and inspect the current frame:
At the breakpoint, a is 36 units squared from the pivot while b is only 4. The comparator uses b.cmp(a), so points with the same polar angle are sorted in reverse distance order.
That is the bug:
the farther point is processed first and later removed from the hull.
So let’s apply the fix:
We can also use the TUI to visualize it:
🐀: Yay, the rubber band is now wrapped around all the points.
Unlike print debugging, this lets us inspect more state without editing and recompiling the program after every question.
The trade-off is a manual workflow
: setting useful breakpoints and knowing which debugger commands to run.
🐀: Okay, but is there a more friendly way to debug this?
3. RustRover’s debugger
RustRover
is JetBrains’ cross-platform IDE built specifically for Rust. It integrates Cargo projects, tests, code analysis and debugging in one place (and it is free for non-commercial use!).
The recommended way to install it is through the
JetBrains Toolbox App
, which also handles updates and lets you switch between stable and early-access-preview versions.
RustRover provides a
graphical interface for GDB and LLDB
, which means we can use the same workflow as before but with a more user-friendly interface. Click the gutter to set a breakpoint, then click the debug icon next to the failing test.
🐀: Interesting… I thought this type of debuggers are only available for more mature languages like Python or Java. How does it work under the hood?
Good question! There is actually some interesting Rust-specific machinery behind the debugger. In my
Rust in Production episode with Matthias Endler
, I explained how RustRover turns the source into its own PSI, then a typed high-level representation and finally MIR. When we evaluate a Rust expression or call a function during a debug session, RustRover lowers it to MIR and sends it to the debugger to execute against the paused process.
🐀: So the debugger actually understands the Rust expression we are asking it to evaluate! Amazing.
Bonus: AI-assisted debugging
Recently we started to see the “
AI-assisted
” prefix in many things… programming, writing, ordering food, etc. and I thought why not try it for debugging as well?
🐀: So basically ask the agent to fix the bug for us?
Not exactly. The agent is not a replacement for the debugger, but it can help us understand the problem and suggest fixes. Instead, we will ask the agent to debug the problem and watch it in action with RustRover’s debugger!
Starting with
RustRover 2026.3
, the IDE’s integrated
MCP server
(Model Context Protocol) can expose the debugger to agents such as Codex and Claude Code. This means that instead of clicking around manually, the agent can start a debug session, set breakpoints, step through the program, read variables and evaluate expressions for us. See
what’s new in RustRover 2026.3
for the full release highlights!
Simply open
Settings → Tools → MCP Server
, enable the server and click
Auto-Configure
next to your agent. Restart the agent afterwards and you’re set!
Once the MCP is connected, we can give the agent a goal like this:
“Debug and fix this problem with RustRover MCP
“
The result is:
🐀: Oh cool, you’re running Codex inside RustRover with the new
Air plugin
, and we can watch it run the failing test, set breakpoints, inspect runtime values and fix the bug!
Conclusion
Rust debugging isn’t one workflow. You can use println!, rust-lldb, RustRover or even an AI-assisted debugger. Each has its own trade-offs and is suitable for different scenarios.
ChatGPT’s Teen Mode could deprive teenagers of a fundamental need | Robin Kirman
Guardian
www.theguardian.com
2026-11-10 06:00:50
What young students stand to lose is more than cognitive skill: it’s a reliable sense of their own minds In August, OpenAI launched Teen Mode – a version of ChatGPT in which every user under 18 will automatically be enrolled – a year after a lawsuit alleged that ChatGPT had contributed to the suicid...
I
n August, OpenAI launched Teen Mode – a version of ChatGPT in which every user under 18 will automatically be enrolled – a year after
a lawsuit alleged
that ChatGPT had contributed to the suicide of a 16-year-old named Adam Raine.
For years, the tech industry has contested any causal link between its products and the harms named in a wave of similar lawsuits, each alleging that the companies had not merely failed to protect children but had deliberately designed products to exploit them.
Teen Mode is a tacit admission of culpability and it reveals what the industry now acknowledges – and doesn’t – about its products’ negative effects on young users’ mental health.
As a psychoanalyst who works with young people, I’ve been observing, up close, the impact of social media and AI on their psychological development: how these tools influence not only behavior or mood at the day-to-day level, but identity formation and character.
Teen mode may address some of the harms done to teenagers. A deeper one remains.
At the surface level, Teen Mode seeks to prevent some of the more obvious harms to young users: it provides guardrails against destructive content, parent notifications for self-harm concerns, and a prohibition on presenting itself as a friend, claiming personal feelings, or suggesting it is anything other than a tool. That last restriction is a direct response to the Character.AI wrongful death case, in which a fourteen-year-old
formed an intense attachment
to a chatbot.
There’s a growing awareness that it’s not only the content AI delivers but the way AI behaves that can cause harm, and that recognition seems to have driven the design of another feature: Study Mode, Teen Mode’s built-in learning tool.
Recent research has confirmed what we already knew: that versions of AI that simply do the work for kids produce short-term grade improvements that collapse the moment the tool is removed, leaving students worse off than if they’d never used it. Study Mode is meant to yield gains that will hold.
Leah Belsky, OpenAI’s vice-president for education, calls it a transformation from “a straightforward answer engine into a cognitive tutor”. Socratic in approach, the feature refuses to supply answers, requiring the student to do much of the thinking herself.
Teen Mode offers something genuinely new: accessible to any student with a phone, it gently pushes back on easy answers and creates rather than forecloses the discomfort of not-yet-knowing. For a teenager without access to a tutor or a teacher with time for her questions, a Socratic companion can offer a real democratization of intellectually rigorous support – and one that surpasses, in scope of knowledge and availability, what any human source could provide.
Where tutors eventually go home, and parents get frustrated, or simply have other things to do, Teen Mode is a tireless interlocutor – arguably, the only invention in human history capable of sustaining infinite patience with a teen.
Which is to say: it is, structurally, the too-good parent. And that is precisely where the problem begins.
Donald W Winnicott, the British pediatrician and psychoanalyst who spent decades studying how a child’s sense of self emerges, argued that what a child needs from her environment is not perfection but sufficiency.
The “good-enough” parent, his most famous concept, is good precisely because she is not always good: she is present enough to give the child a secure base, but limited enough – distracted, tired, occasionally wrong – that the child must repeatedly draw on her own resources and find herself capable. A too-good parent, if such a thing could exist, would spare the child that struggle entirely, and the sense of self it builds.
Winnicott was writing about early childhood, but the argument extends into adolescence, when separating from other minds becomes the central task.
Peter Blos, the psychoanalyst who mapped that terrain most carefully, described adolescence as the work of disengaging from the authority of the minds a teenager has depended on and discovering what, beneath all that, is actually hers. The teenager who is convinced her parents are idiots, her teachers are frauds, and every received opinion is suspect is doing the important work of clearing ground.
What makes adolescence generative isn’t that teenagers get it right – it’s that they
think
they’re right – and that magnificent, insupportable conviction is what gives them the nerve to find out what they actually believe. The adolescent whose intellectual life is always accompanied, always guided, always met with a calibrated response, never gets to become her own authority.
One could argue – and OpenAI’s designers probably would – that Teen Mode is a scaffold, not a crutch: that a teenager who learns to think in dialogue with a rigorous interlocutor will internalize that process and eventually need the tool less. But this assumes the incentive to let go ever arrives – unlikely, as the world moves rapidly toward more dependence on AI.
And even if this were to happen, development is not clearly reversible in that way: what grows with a scaffold is not the same as what grows without one. Many tech executives seem to grasp this themselves, sending their own children to
schools with the resources
to enforce a mandate on unassisted work.
For a teenager without those advantages, the default is Teen Mode. Or, worse, the version of AI without the Socratic guardrails.
What those students stand to lose is more than cognitive skill: it’s a reliable sense of their own minds.
We have already begun to recognize what constant connectivity does to the developing self in other domains. Jonathan Haidt’s synthesis of the data on smartphone use showed that the sharp rise in anxiety, depression, and suicidal ideation among teenagers coincides with the incursion of technology into unstructured, unsupervised time – displacing the private space in which an identity takes shape.
Sherry Turkle, who has spent decades studying teenagers and technology, found that many report not knowing what they think until they’ve posted it and seen how others respond.
What I encounter in my office goes further: young people who lack a reliable internal compass, who struggle to know what they feel or want. That instability is not incidental to the youth mental health crisis; it is the condition underlying it. A person without an internal compass is an anxious one: dependent on confirmation, uncertain of her own perceptions, and easily destabilized.
This is the deeper harm the industry – and the designers of Teen Mode – have not addressed. Teen Mode may ask you to think, but it is still holding your hand, still guiding, still keeping the dependency going, and in doing so, exacerbates the developmental harm at the root of the crisis.
Ultimately, a stable sense of self requires moments of genuine trial, of being tested and surviving. The blank page, faced alone, is one such crucible: a place where we encounter ourselves, in doubt and even dread, and also in discovery and joy.
Writing in the 1850s, the German philosopher Arthur Schopenhauer observed: “To think for oneself is always a little uncomfortable, and that is why so few people do it.”
Now we may be creating a generation for whom this challenge is rarely required. That loss, hard to measure and therefore likely to be ignored, is profound: it is only in passing through the discomfort Schopenhauer names – the strain of thinking by and for yourself – that a person comes to truly know she has a mind of her own.
Our site’s security protections triggered a block. If you
think this was in error, email us at
[email protected]
. Please include how you got to this webpage and the
Cloudflare Ray ID located at the bottom of the page.
If you would like to inquire about permission to access our
content, email us at
[email protected]
.
Are you married to a man who’s obsessed with AI? I’m so, so sorry.
ILLUSTRATIONS: CAT SIMS
If i had
to listen to another minute of my husband talking about Claude Code, I might have actually died. It was 11 pm in Berkeley, California, where I was home alone with our 10-month-old daughter, and 2 am in Cambridge, Massachusetts, where he was visiting for his newish job in AI. “JUST LOOK AT THIS!” he shouted. The FaceTime camera zoomed toward a laptop sitting on a hotel bed. “SEE?!”
See
what
, I thought. I wanted to shower. I still had to take the dog out.
“ARE YOU LOOKING?” he shouted again. I wasn’t. I was looking at our real baby. But that’s the thing. There are two babies in this household now: the small human one and the large language model. Both demand constant attention. Both keep us up at 2 am.
Is this a Sophie’s choice kind of situation? Please. I’d kill the AI baby in an instant.
There’s a strange
and under-discussed side effect of the
AI boom
: what it’s doing to family dynamics. By which I mean: how it’s potentially
destroying
family dynamics. I’m sure this applies to all kinds of families,
gay
or straight, rich or poor, with any AI-pilled members. The technology is coming, has come, for us all. But for the purposes of this story, I mostly spoke to white-collar heteros in the Bay Area, because that’s where a certain psychological crisis seems most acute. Often it goes like this: He works in AI, and she does everything and anything else. Other times, it’s bleaker: He desperately
wants
to work in AI—or feels he
must
work in AI—and she wants him to do literally anything else.
Either way, the men go in and the women want out. How many? It depends on how you define “working in AI.” About 71 percent of “AI-skilled workers,” according to one report, are men, and there are roughly 35,000 open AI roles in the US at any given moment. Broaden that to include investors and you’re adding thousands more. Broaden it further to include every man who has mentioned to his wife that he is “looking at some opportunities in the space”—and we’re in the millions. Conservatively, that means hundreds of thousands of spouses, partners, and girlfriends, holding down the fort while someone mansplains the singularity to them. There are, in other words, a lot of us, and more of us are surfacing—gasping for air and a single conversation that doesn’t involve LLMs—by the day.
There’s a name for our ranks. I call us the sad wives of AI.
First of all,
I’m sorry. AI is already the only thing most people talk about here, and it’s even worse for the sad wives.
One of them moved from New York for her husband’s career. He cofounded an AI company; now he’s head of design at another. “He’s so passionate about it,” she says. “I go along to get along.” That is, when she can remember what it is he does, exactly. “My eyes glaze over a bit. I tend to check out. I forget.” She does say his company is at the forefront of … something. Mostly, she’s tired. “I did not expect how homogenous it would be,” she says. “In New York, I had a friend who’s a teacher, a friend who’s a nurse, a friend in fashion, a friend in finance—and none of us talked about our jobs when we went out. Every time I go out in San Francisco, it feels like I’m at a work happy hour. I don’t get it.”
In a way, it can’t be helped. Most days it feels like every billboard in the city is about AI. Every. Single. One. “I’m on the edge,” another AI wife tells me, “while my husband drives by and is like, ‘Oh wow, that’s my company’s billboard.’ Cool. Great.” She, like almost every sad AI wife I talk to, doesn’t want me to include the specifics of her situation. Marriages, social standings, and finances—anything to protect the equity!—are on the line.
Some of the sad wives are obscenely rich; others are struggling. But the more I talk to them, the more I hear the same lines, the same complaints, the same clichés. The hours. The obsession. The sense that missing this moment would mean, for their AI-pilled spouses, missing the most important technological shift of a lifetime. “They really want to ride the wave,” one AI wife says. Another: “He’s always depressed about something.”
Yana van der
Meulen Rodgers, the chair of labor studies and employment relations at Rutgers University, has a blunt take: What’s happening in Bay Area households isn’t just a lifestyle story. It’s a labor market story. The AI boom, Rodgers says, is creating a “perfect storm” of forces reshaping household dynamics, playing out along predictably gendered lines.
The story is older than Silicon Valley, of course. Every major technological boom has produced the same figure, the person who gives everything to the wave. During the industrial revolution, it was the factory worker. During the Gold Rush, it was the men who left their families and headed west. During the dotcom boom, it was the founders sleeping under their desks in SoMa. Now, it is the person who is building, building, always
building
—
vibe coding
at midnight, constantly upgrading their models—convinced that stopping for five minutes means missing everything. Economists call this the “ideal worker.” Rodgers calls it a trap. “Someone who works many hours, giving all of themselves to this new force,” she says. “That means less time at home for the partner, less time for care work.”
Though things keep changing, some analyses suggest that women are about
20 percent less likely than men
to use generative AI. “It’s a function not of gender per se,” Rodgers suggests, “but of the occupations that women hold.” Women are disproportionately represented in jobs—education, health care, social services—that right now use AI less. The result could be a compounding disadvantage. Over time, it means less access to the boom’s financial rewards, more responsibility for the domestic labor it generates.
And what happens when it doesn’t work out for the men? Many, if not most, won’t make it in AI, a lucrative but volatile business. “With job loss comes some depression,” Rodgers says. “Within the household, if one person is going through adverse mental health effects around job loss or uncertainty, the other naturally becomes the support person.” The cruel irony, for some sad wives, is that the moment their husband does leave AI, whether by choice or by force, there’s no relief. Now he’s home. Spiraling. Now she’s managing that too.
It was nearing
the end of my therapy session. I had been rambling for 50 minutes about the mental load, the changing hormones, whether my postpartum depression could really just be traced to the fact that it took longer than anticipated to fit back into my jeans. Then my therapist interrupted and asked what exactly my partner did for work again. “Oh,” I said. “Well, he’s head of AI at his company.”
What she said next, I had to write down. Her client base, she allowed, is almost entirely women—women whose husbands, more often than not, are in some way professionally adjacent to AI. And it’s affecting their relationships. The pressure to keep up means zero boundaries at home. The very
masculine
energy of it all. And the constant fighting, which is about something
bigger
than them. He’s off in another world, a world of prompts and benchmarks and epiphanies, while she’s firmly in this one.
The resentment builds quietly. Several of these sad wives, my therapist added, have turned down job opportunities in AI themselves. Not because they weren’t qualified, but because it’s hard to raise kids and disrupt civilization at the same time.
Princess Diana famously said there were three people in her marriage. For the sad wives of AI, the third is a chatbot. I spoke to a few other family therapists, and they agreed with mine: The phenomenon is getting worse. “It’s a lot of tech wives,” one said, sighing. “A lot of tech wives.”
A tiktok meme
has been making the rounds recently:
young women at their laptops
or doing their makeup, captioned something like, “Working so hard so my man can work on his AI startup that loses $30K a month.” The comments section stands in solidarity: “I’m ded.” “Yas queen.” “Just so he can have ‘founder’ in his bio.” I tried to reach out to some of these women. None bit.
I should also say I didn’t bother speaking to any of the actual husbands for this story. I’m sick of hearing from the men of AI. So many of us are. They have podcasts and Senate hearings and
magazine profiles
and probably a group chat with the president. They’ve been talked to—and I can’t stress this enough—
enough.
On an unseasonably
warm evening, I met up with two friends at a wine bar. Both are partnered with men somewhere on the AI spectrum—tangibly building it, wildly chasing it, or simply unable to shut up about it. We ordered something orange and natural, the kind of wine that signals you have opinions.
We were in Oakland, which has always prided itself on being the anti–San Francisco—more diversity, less venture-funded cold brew. It has never been home to a single major tech company. It didn’t matter. Within four minutes, we were talking about AI.
It’s so existential. I think about it and then I get depressed.
Yeah. Don’t think about it!
We thought about it for the next two hours.
Every night, it’s just existential dread.
And then, the men. Neither of my friends’ husbands actually
makes
money from AI. Not yet.
There is this sense, I offered, among people in AI—and people adjacent to it, and people who are pretty sure it’s coming for them—that this is their last chance. They’ve tried everything else, these men, from writing screenplays to investing in crypto. It’s AI or bust. Their partners, meanwhile, have quietly taken on a second job: emotional support. Chief Existential Officer, uncompensated. No one asked us if we wanted the gig.
So what happens now?
Maybe we’ll just go back to the Stone Age.
One friend has started lobbying for her family to become Outdoor People. The kind who go into the wilderness and disconnect. For a whole week, no access. Just don’t tell Claude.
A pause.
Do we want dessert?
Here’s how Bridget
Balajadia, a clinician at Lupine Counseling in San Jose, characterizes the AI husband’s situation: “If you don’t respond to an email at midnight, you could wake up and not have a job.” It’s relentless. “In this industry, you’re reachable all the time. You’re thinking about it in the shower, when you’re having sex, it never leaves.” And when it never leaves, the relationship buckles. “It turns into this around-the-clock thing where neither partner is getting what they need. They’re both building walls of resentment.”
Which—we know already. But then Balajadia tells me two surprising things. The first is that some sad wives of AI don’t
want
to talk to her about their husbands. Why? “I’ve already worked through this with my chat,” they say. By which they mean … ChatGPT. Yes. Not only is AI driving a wedge between couples. It’s also become a primary tool for attempting to salvage their marriage.
Balajadia isn’t impressed. “They’re not having great outcomes,” she says. “It’s not going to challenge you. You end up being validated. Then both of you don’t move the needle in conflict.”
It gets worse. ChatGPT subsequently, in some situations, helps these sad wives explore the possibility of cheating. Some of them, Balajadia says, get “validating messages,” such as: “
Yes, it makes sense that you’re seeking attraction elsewhere because your partner’s not giving it to you. He’s emotionally unavailable.
” She pauses. “That’s probably not a great idea. You probably should address the stuff that’s coming up in your marriage, not go have sex with someone else.”
Some wives, it
must be said, have uncomplicated relationships with AI. One tells me it has “supercharged” her life—wedding planning, caring for aging parents, housekeeping, veterinary advice. While her husband is focused on how AI will change the economy, she’s interested in how it will change
her
. Optimize her, really. “There’s just not enough hours in the day if I don’t try to gain efficiencies in some things.” In fact, she’s just vibe coded something or other. Maybe one day
he’ll
be a sad AI
husband
.
Or
robots
will fix everything. Another wife tells me that her husband, who founded an AI startup, is convinced they will have a household robot within the decade. “Maybe after we have kids, I’ll be like, ‘Bring a robot in,’” she says. “Right now, I can’t wrap my mind around it, though maybe people felt that way about washing machines.” This in response to the question I ask everyone: Has any part of the AI boom made things
better
at home? Could it ever?
The responses are generally uninspiring. Most of the time, the closest thing to a silver lining any sad wife can offer is that AI has given them something new to talk about at dinner.
Each time it’s
the same pattern: a generation (of men) convinced this is their moment, and everyone else trying to figure out where they fit. A bubble. And bubbles, as anyone who was here in 2001 can tell you,
tend to burst
. One AI wife—the one who drives past billboards for companies her husband has backed—puts it simply: “Half of our income is dependent on AI doing well.”
Mine too. More than half, to be frank.
Flying home from that same trip to Massachusetts, my husband found himself watching the screen of the passenger next to him. It was playing
Train Dreams
, a movie about a man who leaves his family for logging and railroad work in the American West, a century ago. Even without sound, he got a little emotional. “Is that what I’m doing right now?” he asked me later.
The man in the film ultimately loses his wife and young daughter. He’s filled with regret for much of his life.
“But I’m doing it
for
our daughter,” my husband assured me. And: “I’ve always wanted the things I’ve worked on to be necessary.”
I thought about that for a while. Then I asked him to take the dog out.
What Say You?
Let us know what you think about this article in the comments below. Alternatively, you can submit a letter to the editor at
[email protected]
.
In your inbox:
Will Knight’s
AI Lab
explores advances in AI
Alessandra Ram
is an Emmy- and Murrow-winning journalist and the cohost of
Sabotage
, a podcast from Good Luck Media. A Bay Area native, she lives in Berkeley with her husband, daughter, and a very fluffy dog. ...
Read More
'C:\> FORMAT C:' – relax, it's just a screen saver
Leave your Mac alone for a few minutes and it becomes a 1990s PC: an AWARD BIOS counts through 32 MB of RAM, a VGA prompt starts blinking, and then a ghost begins to type. It boots. It crashes. It dials. It lies convincingly.
v2.0 · macOS 13+ · Universal Binary · free
C:\>
TYPE README.TXT
What is this?
Welcome, traveller. You have just discovered
FakeDOS
, a macOS screen saver that simulates a pixel-perfect DOS machine. And more.
Leave your Mac alone for a few minutes and something beautiful is going to happen: the screen fills with the warm 80×25 glow of a VGA text mode, an AWARD BIOS POST clicks through memory, and a friendly blinking
C:\>
prompt appears.
Perfect for
A conference room that does not need Slack popping up
Pretending to be a 12-year-old running Landmark Test
Tricking a co-worker into thinking you have lost it
Actually getting people to leave you alone
Features
Five boot modes
The Ghost Writer
Leave the prompt idle and a ghost starts typing commands by itself. It alternates between operating systems in an endless loop of simulated productivity.
Many DOS commands, boot linux, some Linux commands, boot dos, repeat
Realistic typing speed with human-like typos
Press any key to take over and the ghost vanishes
Speeds up everything, not just the ghost. 1 is slow, 9 skips all delays.
Landmark speed test
Type
FDOS
or
LANDMARK
at the prompt to see how fast your imaginary Pentium thinks it is.
IBM PC/XT
4.77 MHz
IBM AT
8 MHz
486DX
33 MHz
Your Pentium
166 MHz
Pure nostalgia, zero benchmarking.
Pentagon mode
Type
PENTAGON
at the prompt. We cannot tell you what happens.
ACCESS DENIED. CLASSIFIED.
This is not a real DOS.
OK
Your files are safe.
OK
Your disk is safe.
OK
Your Mac is safe.
OK
Your network is safe.
Absolutely nothing useful happens here.
FakeDOS is a pure simulation. Every single command you type produces carefully crafted fake output. No files are read, written, moved or deleted. No network connections are made. No processes are started. No disks are formatted.
When you type
FORMAT C:
, FakeDOS shows a terrifyingly realistic format sequence, complete with percentage counter and head/cylinder display, but your actual drive is perfectly untouched. When you type
DEL *.*
, nothing gets deleted. Ever.
It simulates. It pretends. It lies convincingly.
But it never, ever touches your real system.
Not a terminal. Not an emulator. Not connected to the Pentagon. Probably.
Psst... the boss thinks
C:\
is empty. Type
DIR
anyway. Some files in the root directory were never meant for office hours.
Installation
Drag
FakeDOS.app
into
/Applications
.
Double-click to launch. It installs itself as a menu-bar icon.
Click the menu-bar icon to configure or start manually.
After the configured idle time (default: 5 min), FakeDOS takes over fullscreen.
Type
EXIT
to return to your real desktop.
Cmd + ,
opens six pages of pure control: idle time, warp speed, the ghost writer, sound and more. The PC speaker can be silenced. Your co-workers cannot.
Version 2.0 for macOS
FakeDOS started in 1991 as a Turbo Pascal prank on a FidoNet BBS and lived its first life as a screen saver for Microsoft Windows.
Three decades later, it was ported to Swift/macOS so it can terrorize modern office workers who have never heard of AUTOEXEC.BAT.
Klaus Rössler
&
Roger Kirchhoff
Copyright (c) 1991 - 2026
C:\>
DIAL DISCORD
Found a bug, have an idea for a new fake command, or just want to say hello? Join the FakeDOS community on our Discord server.
I can only speculate as to the reasons why I was laid off from Meta in May, but I suspect that one of the reasons is that I was a little bit more resistant to adopting AI/LLMs as coding tools than some of my peers. Don't get me wrong, I generated at least 90% of my code using AI in my last few months there, which was the minimum for a decent rating. But AI didn't 10X the amount of code I was writing. It didn't even 2X it.
I was focused on code quality. I saw the code being pushed by some of my peers who were heavily reliant on AI, and I saw that it was brittle code. There were many subtle issues that would lead to tech debt in the long term, and even some glaring issues were ignored by very good programmers. For instance, I saw one of the best programmers on my team try to merge code that used javascript events for mouseover CSS effects rather than using the :hover selector, which is a totally unscalable way of writing mouseovers.
Now I'm employed at another large tech company and I've fully made the switch to generating 100% of my code using AI because that's the expectation today. Still, I can see lots of people becoming aware that this isn't a sustainable way to continue development of a large scale SaaS product. AI tends to solve the problems that can fit within its context window very well, but it's totally oblivious to the long term issues that can't be understood in that relatively small frame.
In this post I'm going to list four ways that AI usage results in a fragile codebase that isn't resilient to the demands of highly available and highly scalable SaaS applications.
By the way, every word of this article was written by a human. Even though the following image was generated by AI, this article isn't AI slop.
Four ways AI makes codebases fragile
Here are the four most common ways that I have seen AI generating a fragile codebase.
1. AI writes shallow tests
One of the most obvious failures of modern LLMs is that they tend to write simplistic automated test cases that don't cover the things that matter to humans. Frequently I see AI agents writing lots of tests of get/set methods which are trivial and don't typically require much testing. When AI writes e2e tests, they tend to only cover the cases which are already covered in the codebase. In other words, the AI writes tests only covering one type of user, or only covering surface level interactions. This creates massive gaps in the test coverage that are invisible to developers because they aren't captured by the line level coverage metric.
2. AI writes overly complex ccode
AI also tends to write overly complex code. It frequently uses two or three helper methods when a single one would suffice. It tries to follow coding guidelines, such as DRY, to a fault, without realizing that the added complexity of that rigidity makes the code more difficult for human developers to debug or understand.
3. Reliance on AI decreases human understanding
And that's the third issue with AI codebases: Humans don't understand them. The longer a company relies on AI agents to generate the code, the fewer developers are going to understand the codebase. This means that developers can't do the things that are necessary to build a resilient codebase. They don't understand the data structures and algorithms well enough to see when a pull request contains a new abstraction that doesn't work with the pre-existing structures.
4. AI moves too quickly to maintain a high quality bar
AI moves too quickly for human developers to maintain a high quality bar. Each pull request comes faster than the prior one and has to be reviewed in even less time. This leads to developers skimming the code and missing crucial details that result in long term tech debt. Small quality issues like testing gaps and poorly named variables accrue in the codebase until it becomes a morass of spaghetti code.
Four signs that you have a fragile codebase
If you're unsure whether coding agents are harming your codebase or not, then you might look for the following symptoms of a fragile, AI-generated codebase.
1. AI generated codebases have more incidents
When you switched the department over to agentic coding did the number of incidents slowly start rising? At first when we were all using agents to generate massive amounts of code, it didn't seem that different from traditional coding. The PRs came and were merged and everything seemed alright. But oh, there was that one p0 that came in at the end of the month, then there were two SEVs the following month. Then even more the next month. Now, after a year or two of agentic coding, it seems like there's an incident every weekend. AI coding agents are the reason why there are more incidents impacting customers.
2. Recovery from incidents takes longer in AI codebases
Not only are there more incidents, but the incidents take longer to be mitigated. The fact is that the human developers on your team now have a more shallow understanding of the codebase. If your coding agent can't find the issue that your customers are facing, then humans are going to have to dig through a codebase that is highly complex and poorly tested. They will essentially be entering unfamiliar territory, so it takes longer for them to figure out what is going wrong. Hence, companies lose more and more money to incidents that take longer to resolve.
3. AI generated codebases create errors that are only visible to users
When humans don't spend time in the code, they fail to see all of the use cases. They fail to understand how actual humans are using the code because they aren't ensuring that the AI is instrumenting analytics and catching all the errors properly. Hence, invisible errors start appearing in the codebase. Errors are uncaught and only visible to real world users, as opposed to the types of users that are being tested in automated tests or in developer manual testing.
4. AI results in a poor user experience
And that leads to the ultimate problem with AI codebases: they weren't made for humans. AI codebases are software made by AI for AI. They aren't being tailored to the way that human users use the product, and they aren't being tailored for the way human developers need to maintain the product. The experience degrades on both the user and the developer side, leading to a vicious cycle of enshittification.
Products made for humans require a human touch
The fact of the matter is that for a product to satisfy human customers, it has to be informed by a human perspective. Nobody likes ordering from machines at a restaurant. Shopping for clothes from a website always results in worse fits than shopping in person. The same is true of SaaS products. Any time you leave your SaaS product in the hands of a machine, you are losing the human touch that is valuable to your users and your developers. This may work for the cheapest products that only compete on price, but high quality software products will continue to have a human touch. The best, most expensive products will be tailored for human users by human developers. They will be charming and enjoyable to use. They won't be fragile because they won't be primarily developed by AI.
Hackers now exploit critical Barracuda ESG flaws to gain root access
Bleeping Computer
www.bleepingcomputer.com
2026-11-10 05:10:20
Cybersecurity company Barracuda Networks warned that attackers have begun exploiting two recently patched Email Security Gateway (ESG) vulnerabilities that let them run commands with root privileges. [...]...
Cybersecurity company Barracuda Networks warned that attackers have begun exploiting two recently patched Email Security Gateway (ESG) vulnerabilities that let them run commands with root privileges.
The first stems from an Email Security Gateway (ESG) authentication weakness that can be exploited to modify an appliance's global configuration, while the second lets unauthenticated attackers inject OS commands that execute with root privileges.
Barracuda also said that successful attacks require access to the administrative user interface (Admin UI) of targeted devices and advised customers to restrict access to trusted internal networks and use appropriate network access controls to limit exposure.
"Successful exploitation requires an attacker to have access to the administrative interface of an affected product. If exploited in combination, these vulnerabilities could allow an attacker to bypass authorization controls and obtain root access to the device," the company explained.
On Monday evening, Barracuda updated the initial advisory to warn admins that the two flaws are being exploited in attacks targeting a limited number of customers.
"Barracuda immediately initiated a comprehensive remediation process and released security patches for affected products. We have identified exploitation activity affecting a small number of organizations,"
it warned
.
"If a patch has not been automatically applied, customers should manually apply the appropriate patch as soon as possible. If customers have turned off automatic patching, Barracuda recommends setting devices to automatically receive patches."
The table embedded below lists all affected devices and available security patches.
Affected Product
CVE-2026-116606
CVE-2026-111560
Patch
Email Security Gateway (ESG)
Yes
Yes
BNSF-40425 (9.4.017+),
BNSF-40430 (<9.4.017)
Load Balancer ADC
No
Yes
BNADC-16586
Message Archiver (BMA)
No
Yes
BNMA-32468
WAF Control Center (WCC)
No
Yes
BNWF-60060
Web Application Firewall (WAF)
No
Yes
BNADC-16586
Web Security Gateway (WSG)
No
Yes
BNYF-24789
Three years ago, Barracuda patched another Email Security Gateway flaw (CVE-2023-7102) that the UNC4841 hacking group
exploited in zero-day attacks
to execute arbitrary code. The same year, UNC4841 abused another zero-day (
CVE-2023-2868
) to target Barracuda ESG appliances as part of a series of cyber-espionage attacks.
The company later revealed that the flaw had been exploited as a zero-day
for at least seven months
, since at least October 2022, to drop previously unknown SeaSpy and Saltwater malware and steal data from compromised devices.
According to cybersecurity firm Mandiant, almost a third of systems breached in the 2023 campaign
belonged to government agencies
, most of them hacked between October and December 2022.
Barracuda was founded in 2003 and now has more than 200,000 customers worldwide, including small- to medium-sized businesses (SMBs), large enterprises, and managed service providers (MSPs).
Turla hackers use new Cereal malware to spy on govt Exchange servers
Bleeping Computer
www.bleepingcomputer.com
2026-11-10 05:04:32
The Russian state-backed threat group Turla has been using a new malicious toolset called 'Cereal' to intercept emails on Microsoft Exchange servers at government organizations. [...]...
The Russian state-backed threat group Turla has been using a new malicious toolset called 'Cereal' to intercept emails on Microsoft Exchange servers at government organizations.
Researchers at cybersecurity company ESET documented the attacks in late 2025, initially finding modular .NET malware for Microsoft Exchange at a government body in Kazakhstan.
A month later, ESET found the same toolset at a government agency in Romania, where it selectively gathered email correspondence with representatives of the North Atlantic Treaty Organization (NATO) and the European Union (EU).
"After fine-tuning our detections, we found the same toolset at a governmental organization in Romania - compromised on December 23rd, 2025," the researchers say in a report today.
Turla, also known as Snake, Secret Blizzard, and Waterbug, is a cyber-espionage group active for more than two decades and linked to Russia's Federal Security Service (FSB).
In the campaign analyzed by ESET, the hackers use the Cereal toolset, and specifically a component in the kit named CerealBox, to inject into Exchange’s
EdgeTransport.exe
process and hijack existing transport agents’ handlers.
The malware executes commands in memory and can inspect email content without registering a new transport agent or interrupting normal email delivery in the Exchange server.
Turla configured the malware to selectively collect messages containing document attachments such as .DOC, .DOCX, and .PDF files, and match certain sender, recipient, and subject criteria.
Another malware component, called CerealNeuron, awaits for incoming encrypted web requests on paths resembling legitimate Exchange services, which carry commands for execution.
CerealNeuron checks and decrypts the request, then executes the supplied CerealRunner program, a wrapper program that carries the code the attackers want to execute.
Attack overview
Source: ESET
Commands may include code to retrieve emails from Exchange, query Active Directory for users, groups, and DNS records, extract locally stored credentials, read files, or delete files.
“The sheer volume of near-identical binaries, each compiled for a specific task, strongly suggests that the operators have an internal framework that automates the compilation and packaging of commands,”
ESET says
about the disposable programs serving as command carriers.
“Combined with a codebase built around modular, interchangeable components, the impression is one of a mature, well-engineered platform – rather than a loose collection of scripts.”
The CerealRunner components contain encrypted .NET programs and the arguments needed to run them, which execute in the host’s memory and then return their output to CerealNeuron.
Eventually, CerealNeuron encrypts the output and sends it back to the attackers.
Command execution flow
Source: ESET
ESET observed no external command-and-control (C2) infrastructure used in the attack, leaving the compromised Exchange server itself to serve as the only control point.
The researchers also uncovered a variant of CerealNeuron called CerealHermit, which lacks network capabilities and instead reads commands from encrypted files on the disk.
CerealHermit may serve as a fallback/redundancy system for when Neuron’s web channel becomes unavailable. However, ESET didn’t explain how attackers place Hermit’s command files on the server or retrieve the execution results.
The researchers note that Cereal’s advanced concealment methods demonstrate Turla’s deep understanding of .NET execution techniques, including abusing the .NET native image cache to run inside legitimate processes.
ESET says the Cereal toolset was designed for "long-term, stealthy cyberespionage," featuring a small disk footprint and relying on infrastructure that is less likely to be detected and blocked.
The company has shared a complete list of indicators of compromise on its GitHub page.
Are walking pads worth it? We put the best under-desk treadmills to the test
Guardian
www.theguardian.com
2026-11-10 05:00:05
Want to get your steps in while working or watching TV? Our expert puts walking pads through their paces to find the best for comfort, noise and ease of storage • The best treadmills for your home You don’t necessarily need to walk 10,000 steps a day to improve your health and wellbeing. In fact, th...
Y
ou don’t necessarily need to walk 10,000 steps a day to improve your health and wellbeing. In fact,
the NHS encourages
a slightly more manageable target of just 10 minutes of brisk walking daily to introduce more moderate-intensity physical activity and reduce your
risk of early death by up to 15%
.
However, even squeezing in “brisk walks” can be a chore, with busy schedules and increasingly desk-bound jobs forcing more of us to remain sedentary for long periods. That is where walking pads come in, being lighter, smaller and often easier to store than bulky and tricky-to-manoeuvre running treadmills.
When coupled with a standing desk, walking pads can be used while working – or when watching TV in the evening. Just a couple of 30-minute sessions add thousands of steps to your daily tally. In fact, a 60-minute walk at an easy 3km an hour can burn between 200 and 300 additional calories.
Walking pads are often cheaper than full-size treadmills, simple to use and relatively easy to store, and they’re perfect for adding more movement to your life without having to give up the day job.
At a glance
Best walking pad overall
Urevo
SpaceWalk 5L smart walking pad
I’m a keen fitness fan who does everything from gym-based strength training and kickboxing classes to outdoor trail runs and cold-water surfing. As a result, I’ve often been tasked with testing fitness technology for industry magazines, and I’m always keen to get stuck in.
I strongly believe that you need to live with new tech for a bit to grasp how it fits into daily life, so I aim to test products for as long as possible and in the right environment. With walking pads, that meant strolling along, racking up the steps and burning calories – even while I wrote up this feature.
How I tested
Screen test: the walking pads were put through their paces in front of the TV as well as at a desk.
Photograph: Leon Poultney/The Guardian
There was only one way to properly trial the eight walking treadmills selected for this test, and that was to mimic the customer journey by ordering, taking delivery, unboxing, setting them up and then using them day to day.
The best walking treadmills – or walking pads – aren’t quite as bulky as
regular running treadmills
, so I could have multiple models on the go at home at once: one under my desk, one in front of the television and one in my wife’s office upstairs, testing each for at least three days.
The testing process involved a lot of additional steps and – in some cases at least – a whining soundtrack that drowned out whatever Netflix series the family was watching. Besides general observations on the heft, ease of storage and operation, quietness and build quality, I tested any additional features such as incline and speed adjustments, as well as any remote controls or apps.
To get a good idea of energy consumption and the overall cost of running a walking treadmill, I plugged each unit into a power meter to calculate the cost based on the October energy price cap.
Here are the four best walking pads you can buy now.
The best walking pads in 2026
Quiet, sturdy and packed with genuinely useful features: the Urevo SpaceWalk 5L.
Photograph: Leon Poultney/The Guardian
Best walking pad overall:
Urevo SpaceWalk 5L smart walking pad
Urevo
SpaceWalk 5L smart walking pad
from
£237.49
What we love
Quiet, sturdy and packed with genuinely useful app features
The Urevo SpaceWalk 5L is one of the most fully featured walking pads I’ve tested. It combines excellent build quality with a quiet motor, automatic incline and a great free companion app – which makes it feel more like a proper piece of fitness equipment than a basic under-desk treadmill. It’s slim enough to slide under a sofa when not in use, yet robust enough to cope with daily walking or even light jogging.
Why we love it
Unlike most rivals, the SpaceWalk 5L’s accompanying app is genuinely useful. It allows you to record workouts and track steps, distance and walking time, while also offering structured walks with automatic incline adjustment.
Track record: log your walks and take part in fitness challenges.
Photograph: Leon Poultney/The Guardian
The software also syncs with Apple Health, while the proprietary app lets you take part in a number of on-demand workouts, where incline and speed are controlled automatically. It also offers virtual walks, where you can take a sort of video tour of exotic locations. Unfortunately, it doesn’t feature the FTMS protocol that allows it to beam speed, cadence and incline data to a third-party app like Zwift. So your virtual avatar won’t move on the screen without a workaround such as a third-party, cadence-sensing footpod or compatible smartwatch.
It is one of the quietest walking pads I’ve tested, though. At my preferred 2.5km/h working/walking pace, the motor averaged just 48dB – barely louder than my keyboard as I was furiously typing up this review.
Build quality is also noteworthy. The weighty, front-mounted motor gives it a reassuringly solid feel, while adjustable feet make levelling on uneven floors easy. Its claimed 12-point shock absorption system also provides enough cushioning for walking in just socks, although I’d still recommend trainers for longer sessions.
The incline, which can be automatically controlled when using Urevo’s app, adds another dimension for anyone aiming to increase the intensity of their walks.
Energy use is impressively low, too. At a comfortable 2.5km/h, the SpaceWalk 5L drew around 40W during testing, costing roughly 1p an hour based on the 1 October electricity price cap.
At its 6km/h maximum speed, this rose to about 3p an hour, with the incline motor briefly drawing more power when adjusting the deck.
While 6km/h is no more than a brisk walk or gentle jog, the SpaceWalk 5L feels stable throughout. It doesn’t fold, but its slim design and the integrated wheels make it easy to roll under a bed or sofa for storage.
It’s a shame that …
the incline functionality makes it slightly bulkier than the simplest ultra-slim walking pads.
Size:
124 x 51.5 x 15.5cm (LWH)
Weight:
23kg
Walking deck size:
40 x 100cm
Maximum user weight:
181kg
Incline:
0-9% automatic
Maximum speed:
6km/h
Folding:
no
Urevo
SpaceWalk 5L smart walking pad
from
£237.49
What we love
Quiet, sturdy and packed with genuinely useful app features
What we don’t love
It’s a little bulky
Best budget walking pad and best for beginners:
Bigzzia walking pad with incline
Bigzzia
Walking pad with incline
£89.99
What we love
A very cheap pad with a surprisingly high top speed
What we don’t love
Short deck, noisy motor and basic controls
The Bigzzia is very much a budget walking pad, and it shows. The construction is basic, the running deck is narrow and short, and the display is hardly sophisticated. But it’s remarkably cheap and has a surprisingly high 10km/h top speed and a manual incline setting.
Why we love it
The Bigzzia’s biggest selling point is that 10km/h maximum speed. That’s considerably faster than most under-desk walking pads, and means it can double as a basic treadmill for walking and light jogging.
However, the deck is so short that running at anything approaching its maximum speed feels unnerving. I’d be much happier using it for walking or, at most, very short bursts of jogging.
The running surface has a surprisingly good grip, but there’s little flex or meaningful cushioning underneath, making longer sessions uncomfortable. It’s better suited to shorter walks than all-day use.
It does come with an 8% incline, although this isn’t a motorised function. You simply flip out two feet at the sides and put the supplied rubber supports underneath them to raise the deck. No range of settings here.
The simple display shows the basics: speed, calories, time and distance, automatically cycling between the figures as you walk. There isn’t really a way to lock it to any particular metric – another reminder that this is a very simple machine.
Interaction is equally basic – via a small wireless remote control. Lose or break it, though, and you’ll be stuck. You also need to supply the AAA batteries for it.
For portability, however, the Bigzzia shines. At just 12.86kg, it is light enough to pick up and carry, something I can’t say about many of the walking pads here. It also has a couple of small wheels at the front, so you can tip it and wheel it around if you prefer. And while the short deck might prove a drawback for running, it’s great for storage: it slides easily under a sofa or can be stored upright against a wall.
Noise is another compromise, however. Walking at 2.5km/h, I measured about 52dB, with a noticeable whine and plenty of foot thump from the deck. It’s not disastrous for a walking pad at this price, but it’s certainly more obvious than the best machines I’ve tested.
Power consumption is also higher than that of some rivals. I measured 54W at 2.5km/h (about 1p an hour at the UK electricity rates at the time of writing) and 166W at its 10km/h top speed (about 4p an hour). Running costs remain low overall, but it’s less energy efficient than some more sophisticated walking pads.
Another omission worth knowing about is the lack of an automatic stop function. That means the motor will continue running if you fall or simply walk away, so you need to be a little more careful about how you use it.
It’s a shame that …
it’s let down by
the short deck, noisy motor and basic controls, but it’s one of the cheapest walking pads out there.
Size:
104 x 49 x 11cm (LWH)
Weight:
12.86kg
Walking deck size:
37 x 90cm
Maximum user weight:
130kg
Incline:
0 or 8% manual
Maximum speed:
10km/h
Folding:
no
Bigzzia
Walking pad with incline
£89.99
What we love
A very cheap pad with a surprisingly high top speed
What we don’t love
Short deck, noisy motor and basic controls
Best lightweight walking pad
:
JTX MoveLight
What we love
Great build quality and crisp display
What we don’t love
It’s heavy and awkward to move around
JTX often appears in the “best value” section of home fitness equipment reviews, known for offering reliable build quality at affordable prices, but its machines tend to prioritise function over flashy design and cutting-edge technology.
The MoveLight walking pad is different, however. It’s the most expensive walking pad in this roundup, and there’s a tangible difference in the build quality compared with cheaper walking pads. The JTX also offers a sizeable display, cushioned walking deck and quiet 1hp electric motor. It’s a solid treadmill offering speeds of up to 6km/h, meaning it’s possible to use it for slow jogging without the worry of it falling apart.
Why we love it
The MoveLight is similar in design to the BodyMax reviewed below and has a solid plastic chassis that gives it a more premium feel than its cheaper rivals. The running deck is generously sized and well cushioned, making longer walking sessions more comfortable.
The extra-large LED console is easy to use and neatly scrolls through speed, time and step count as you walk. The shrill beeps upon startup and when you adjust the speed may cause office mates to want to throw a pencil at you, however.
With the small plastic remote, you can adjust the speed, stop or start the unit and scroll the display between distance, calories and time on one half, and speed and step count on the other.
The 1hp motor is powerful enough to propel the deck up to 6km/h, where it remains much quieter than some of the others tested.
Overall, it feels like a walking pad that will go the distance – and so it should, given the price – but that solid build does make it a pain to move around the house; it will require some serious muscle to tip it up on to its wheels. It also doesn’t fold like the BodyMax machine.
Oh, and one final public service announcement: those with wooden floors will want to take care that the wheels and plastic feet don’t scratch the surface during transport.
During testing, I found it to be slightly more power-hungry than rivals, supping about 100W at 3.5km/h, meaning it costs about 3p an hour to power.
It’s a shame that …
it’s so big and heavy to move around, which makes storing it after each session a chore.
Size:
147 x 60 x 12.5cm (LWH)
Weight:
29.5kg
Walking deck size:
45 x 122cm
Maximum user weight:
100kg
Incline:
none
Maximum speed:
6km/h
Folding:
no
JTX
MoveLight
£449
What we love
Great build quality and crisp display
What we don’t love
It’s heavy and awkward to move around
One of the most expensive models on test, the BodyMax walking pad is also one of the best built and easiest on the eye. It’s the only model that genuinely folds in half, making it easier to squeeze into a cupboard or wardrobe.
However, at around 30kg, it’s not the easiest to move, despite wheels at the front that allow it to be tipped on its end and rolled around.
Potential portability issues aside, this machine offers a fantastic walking experience, with a neat, bright and easy-to-read LED panel that gives clear and scrolling readouts of workout time, distance, speed and average calorie burn.
Very much the Porsche of the walking pad world, the BodyMax unit combines stylish looks and powerful performance.
Why we love it
Like most walking pads here, the BodyMax comes with a remote for adjusting speed, but its clever A Mode goes a step further, using foot placement to automatically adjust the pace.
Stay in the middle, and it maintains pace; walk towards the front to speed up or hang back to slow down. It’s a useful touch that saves you constantly fiddling with the remote. The deck itself is nicely cushioned, and the motor is among the quietest on test.
Those wanting their walking pad to double up as a running treadmill may be disappointed, however: the WP60 tops out at 6km/h, which is a very fast walking pace but a slow jog for most. Not a single walking pad I’ve tested has done a convincing job as a running treadmill, though, being either too flimsy underfoot, too noisy, or simply not built to withstand the endless thumping of a sprint session.
If you’re seeking robust build quality, the BodyMax WP60 walking pad is well worth the additional outlay. As it folds in half, it can be tucked under a desk or rested against a wall when not in use.
It’s a shame that …
it’s heavy and awkward to move around when folded.
Size:
143 x 55 x 13cm (LWH)
Weight:
28kg
Walking deck size:
42 x 120cm
Maximum user weight:
100kg
Incline:
none
Maximum speed:
6km/h
Folding:
yes, folds in half for storage
BodyMax
WP60
£399
What we love
Genuinely foldable with an excellent walking experience
What we don’t love
It’s very heavy
What you need to know
Using a walking pad for an hour each day should only add about £10 a year to your energy bills.
Photograph: Leon Poultney/The Guardian
What should I look for when buying a walking pad?
The biggest difference between walking pads, aside from overall build quality, is their top speed. Most max out at about 6km/h, which is ideal for walking while working at a standing desk or a brisk stroll in front of the TV. If you’re hoping to jog as well, look for models that reach 8-10km/h – although be aware that you’ll generally sacrifice some stability and comfort compared with a full-size treadmill.
Next comes incline. Premium models tend to offer a motorised incline function that can be adjusted at the touch of a button, while cheaper alternatives rely on manually extending support feet for a fixed gradient. Even a small incline can noticeably increase calorie burn and make walks feel more challenging.
Also pay attention to the size of the walking deck. A longer, wider belt will feel far more comfortable and safer, particularly if you’re tall or have a long stride. Finally, think about practicalities such as noise, storage, transport wheels, companion apps and maximum user weight. If you plan to use your walking pad for several hours a day while working from home, spending a little more on a quieter, sturdier model is usually money well spent.
How much should I spend?
Prices vary when it comes to walking pads, with the most affordable costing about £90. Anything less than that is unlikely to be long-lasting. From my testing, the sweet spot seems to be about £250, where you can get a good blend of value and decent build quality. Some of the best I tested were, predictably, among the most expensive. These high-end models typically cost about £500.
How much room do you need?
If you’ve got good clearance underneath a bed or sofa, most walking pads will happily slide underneath without the need to fold them up. Imagine a slimmed-down treadmill without the safety handle, and you’re basically there.
Models such as the BodyMax WP60 fold in half, which drastically reduces the length (or height, depending on how you store it), making them much easier to slide into more compact spaces such as a cupboard or wardrobe. But bear in mind they can weigh up to 30kg, so they can be tricky to move without help.
How easy is it to maintain a walking pad?
Most walking pads come with a small bottle of silicone oil. This is used to lubricate the underside of the walking belt
every couple of months to ensure smooth movement, depending on use. Most manufacturers also supply the required hex key so you can adjust the belt if it’s slipping or has moved slightly off-centre.
Quickly check the belt alignment and any moving parts every couple of months, and it should be enough to keep a walking pad running smoothly for years.
Can I run on a walking pad?
Some walking pad speeds are capped at about 6km/h, which makes running on them tricky. A plodding jog is a better description. A few of the walking pads I tested did reach much higher speeds, and most of these came with a folding safety handle that extends to allow them to safely reach those speeds, giving the runner something to hang on to should the worst happen. These also came with a separate safety system: a small magnetic tag that attaches to clothing. If this becomes detached, the machine shuts off.
The general build and robustness of walking pads aren’t up there with their running-focused counterparts, though. That means they can be noisy, shift around underfoot and generally feel a bit flimsy during faster and longer runs. On top of this, those without handles don’t always have the automatic shut-off functionality, which can make them more dangerous, particularly when using them at higher speeds.
In summary,
running treadmills
are better suited to those wanting to move at higher speeds. They feature more underfoot cushioning or built-in suspension systems, which make longer, faster sessions more comfortable and easier on the joints.
Can you use a walking pad on carpet?
In most cases, yes, but it depends on both the walking pad and the type of carpet. Most manufacturers recommend using a walking pad on a hard, level surface as this provides the best stability and allows air to circulate around the motor. Thick, plush carpets can restrict airflow, increasing the risk of overheating, while also making the machine less stable underfoot.
If carpet is your only option, a low-pile carpet is usually fine, especially with a treadmill mat underneath. This helps spread the load more evenly, protects the carpet from compression and reduces vibration travelling through the floor.
Regardless of the surface, ensure enough clearance around the machine for safe use and so that the belt runs freely without rubbing. It’s also worth checking underneath every so often to remove dust and fluff, especially if you have pets, as debris can build up around the motor and rollers over time.
What does weight capacity mean, and what other safety features should I look for?
Maximum user weight isn’t just about whether a walking pad can physically support you – it’s also an indication of how robust the frame, motor and deck are. Choosing a model with a higher weight capacity can often mean a more stable, longer-lasting machine.
Beyond that, look for an emergency stop function or safety key if you intend to jog. Some walking pads automatically stop the belt if they detect you’ve stepped off, while others continue running until you turn them off manually. As I found during testing, not every budget model includes this feature, so check before you buy.
A wide, grippy walking surface also improves confidence, particularly if you’re working at a standing desk, while decent shock absorption can reduce fatigue during longer sessions. Finally, ensure the walking pad has non-slip feet and is sitting securely before every use, as even slight movement can become distracting or unsafe – not to mention damaging to expensive wooden floors.
What’s the difference between a walking pad and a treadmill?
Although they look similar, walking pads and treadmills are designed for different purposes. Walking pads prioritise compact size, low noise and easy storage, with many slim enough to slide under a sofa or bed. They’re primarily designed for walking rather than running, making them ideal for staying active while you work or watch TV.
Traditional treadmills are larger, heavier and more versatile. They typically offer higher top speeds, wider and longer running decks, better cushioning and features such as adjustable incline, heart rate monitoring and structured workout programmes. Their larger belts also make them far better suited to regular running.
The trade-off is space. If your goal is simply to increase your daily step count or stay active while working from home, a walking pad is usually the more practical choice. But for race training or more serious fitness goals, a conventional treadmill remains the better investment.
Leon Poultney has been traversing the worlds of consumer technology and automotive for some of the biggest lifestyle websites and magazines for longer than he cares to divulge. A lifelong fitness enthusiast, he can often be found trying not to injure himself on a mountain bike/surfboard/other extreme thing, often at the request of an editor. Whether it is getting to know the latest connected kettlebells or partaking in CrossFit sessions, Leon is always willing to put his body on the line for great editorial
Queens Public library under ransomware attack e-borrowing suspended
All QPL locations remain open as scheduled. However, certain virtual and in-person programs may be impacted. Please check with your local branch.
You can continue to borrow and return books and other materials at all locations. During this outage, however, renewals are unavailable. As a reminder, customers are not charged late fines on borrowed materials.
Check this page for updates. You can also check our social media channels:
We apologize for any inconvenience and ask for your patience and understanding as we manage this challenge. Our team is working diligently to restore full access. Please note it will take some time before the Library’s network and systems are restored.
Global carbon emissions from fossil fuels are projected to decrease by 0.4% in 2026 – driven by expansion of solar and wind power and the Iran conflict – according to new research by the Global Carbon Project.
The 2026
Global Carbon Budget
projects 38.2 billion tonnes of fossil carbon dioxide (CO2) emissions this year.
Emissions from oil are projected to decrease by 1.9% – likely a short-term response to the energy shock triggered by the Iran conflict.
While global energy demand continues to rise, two thirds of the increase is being met by increased solar and wind power and electric vehicles.
With emissions from land-use change (such as deforestation) projected to increase slightly this year, total CO2 emissions are projected to be 43.3 billion tonnes in 2026 – up from 42.8 billion tonnes last year.
The remaining carbon budget (the amount of CO2 that can be emitted before warming reaches 1.5°C above pre-industrial levels) is now 150 billion tonnes – equivalent to less than four years of emissions at the current rate.
With CO2 still rapidly accumulating in the atmosphere, the dangerous impacts of climate change continue to increase.
The report also assesses natural “sinks” (absorption of CO2 by land and ocean). It finds that the land sink returned to former levels after a severe weakening during the 2023-24 El Niño weather pattern.
However, the powerful 2026 El Niño is expected to have a significant impact in the coming year.
The research team included the University of Exeter, the University of East Anglia (UEA), CICERO Center for International Climate Research, Ludwig-Maximilian-University Munich (LMU), Alfred-Wegener-Institut and more than 90 other institutions around the world.
“A decline in fossil CO2 emissions is encouraging, but a reduction driven partly by geopolitical shocks is not a sustainable climate solution,” said Professor Pierre Friedlingstein, director of the Global Carbon Budget Office at the University of Exeter, who led the study.
“The long-term answer remains the rapid deployment of clean energy technologies. While renewables and electric vehicles are increasingly offsetting growth in energy demand, further acceleration is needed if global emissions are to peak and enter a sustained decline.”
Professor Corinne Le Quéré, Royal Society Research Professor at UEA’s School of Environmental Sciences – who led the new analysis published in
Nature Climate Change
– said: “Clean technologies are making a real difference in reducing global emissions. Solar and wind power and electric vehicles are expanding rapidly, led by China. Countries on every continent are decreasing their emissions while growing their economies. A further acceleration could turn the tide on global emissions within a few years.”
Glen Peters, Research Professor at the CICERO Center for International Climate Research, said: “A drop in emissions in one year is not a peak unless it is driven by structural change. Accelerated deployment of solar, wind, batteries, and electric vehicles are pushing emissions down in dozens of countries, and slowing emissions growth in many more, but the changes are not sufficient to lock in a peak in global emissions”.
Professor Julia Pongratz, at LMU’s Department of Geography, said: “Alongside reducing emissions, we need to scale up CO2 removal to reach greenhouse gas neutrality. Afforestation and reforestation already remove substantial amounts of CO2, but these gains are still more than offset by emissions from deforestation, and novel carbon removal remains very limited. We need to act on all these fronts now.”
Other key findings from the 2026 Global Carbon Budget include:
China’s
emissions in 2026 are projected to decrease by 0.9%, following two
years of low emissions growth. In addition to a strong decrease in oil emissions,
coal emissions rose slightly (0.3%) and electricity generation from renewables
continues to grow strongly.
While China produces
32% of global fossil emissions
, it is also the country
most active in deploying clean technologies and increasing carbon sinks
through reforestation. Half of the global emissions avoided due to renewable
energy and electric vehicles are in China, which also has the largest carbon
uptake through reforestation and afforestation (new forests).
The
USA’s
emissions are projected to decrease by 1.3%, mainly due to a
decrease in coal emissions (which spiked last year due to high natural gas prices
and cold weather).
India’s
emissions are projected to increase by 4.4% – higher than the 3.5%
average annual growth over the last decade.
European Union
emissions are projected to decrease by 1.5%.
Japan’s
emissions are projected to decrease by 1%.
Emissions for the
rest of the world
are projected to decrease by 0.7%. The
largest component of the decline is in oil, likely driven by increased prices and
global supply constraints.
Projected 2026 emissions for the different fossil fuels are:
oil
down 1.9%,
natural gas
down 0.3%,
coal
up 0.6%.
Emissions from
international aviation
and
international shipping
are both
projected to decrease by 1%. Aviation’s decline is partly due to reduced activity
in the Middle East.
Global CO2 emissions from
land-use change
have decreased in the past decade
but are projected to rise this year to 5.1 billion tonnes. This is driven by an
increase in emissions from peat fires (almost entirely ignited by human
activities) and forest degradation in Southeast Asia, associated with drier
conditions linked to the onset of El Niño conditions.
Total CO2 emissions
– the sum of fossil and land-use change emissions – have
grown more slowly in the past decade (0.3% per year), compared to the previous
decade (1.7% per year).
Emissions from permanent
deforestation
remain high at around 3.8 billion
tonnes of CO2 per year over 2016-25. Permanent removals through
reforestation and afforestation
offset around half of the permanent
deforestation emissions.
The largest carbon uptake through re/afforestation occurs in
China, the EU27
and the USA
, with combined removals 0.8 billion tonnes CO2 per year.
Substantial uptake through re/afforestation also occurs in other regions such as
Brazil, Russia and Indonesia
– but here it is outweighed by emissions from
deforestation.
Current levels of novel
Carbon Dioxide Removal
(excluding conventional
means such as reforestation) currently offset less than 30 minutes of annual
fossil CO2 emissions.
The
concentration of CO2 in the atmosphere
is set to reach 427.7 ppm in 2026,
54% above pre-industrial levels.
The analysis published in
Nature Climate Change
found:
With global energy demand growing, new emissions can be prevented (or
“offset”) by simultaneous growth in clean energy. The paper makes a projection
from now to the end of 2028, finding that 64-79% of emissions from new demand
will be offset by new solar and wind power and electric vehicles.
The number of countries reducing their emissions while growing their economies
is clearly increasing: 59 countries emitted less in 2025 than before the COVID-19
pandemic in 2019, while their economies grew.
Even in countries where total emissions increased over the 2019-25 period,
growth in emissions has slowed in all regions including in China, India and other
emerging economies.
The effect of electric vehicles is growing rapidly but remains small because the
vehicle stock takes time to be replaced, with only about 10% of the car fleet
electrified in 2025 (or 6% excluding hybrids).
Emissions avoided by solar and wind power rose from 0.28 billion tonnes in
2010 to 4.1 billion tonnes in 2025, and a projected 4.6 billion tonnes in 2026.
The authors conclude that: “If further acceleration of clean technology
deployment can be supported through time, a sustained peak and decline in
global CO2 emissions could be a few years away.”
The Global Carbon Budget report, produced by an international team of more than 140
scientists, provides an annual, peer-reviewed update, building on established
methodologies in a fully transparent manner.
The 2026 edition (the 21st annual report) is published in the journal
Earth System
Science Data
on November 10 as a pre-print
, and later as a peer-reviewed paper.
Google patches eighth Chrome zero-day exploited in attacks this year
Bleeping Computer
www.bleepingcomputer.com
2026-11-10 03:51:25
Google has released emergency security updates to patch a new Chrome vulnerability exploited in zero-day attacks, the eighth such flaw since the start of the year. [...]...
Google has released emergency security updates to patch a new Chrome vulnerability exploited in zero-day attacks, the eighth such flaw since the start of the year.
"Google is aware that an exploit for CVE-2026-125350 exists in the wild," the company said in a
Monday security advisory
.
As Google explained, this flaw stems from a Use-After-Free (UAF) weakness in the XML component of the Google Chrome web browser, which occurs when the browser's XML parser processes data, deletes an object from the computer's memory, but fails to clear the pointer referencing that object.
Attackers can exploit this high-severity memory corruption vulnerability when the browser later tries to use or read that "freed" memory space to manipulate the memory layout and execute malicious code.
While Google has found evidence of attackers exploiting this zero-day bug in the wild, it has not shared additional details about these incidents.
"Access to bug details and links may be kept restricted until a majority of users are updated with a fix. We will also retain restrictions if the bug exists in a third party library that other projects similarly depend on, but haven't yet fixed," it noted.
Google has now fixed the zero-day for users in the Stable Desktop channel, with new versions rolling out to Windows, macOS (157.0.8103.50/.51), and Linux users (157.0.8103.50). Although Google says the security update could take days or weeks to reach all Chrome users, it was available immediately when BleepingComputer checked for updates today.
If you don't want to update the web browser manually, you can also let Chrome check for updates on its own, as it will automatically install them after the next launch.
Since the start of the year, Google has addressed seven other actively exploited zero-day vulnerabilities:
An iterator invalidation bug (CVE-2026-2441) in CSSFontFeatureValuesMap (Chrome's implementation of CSS font feature values), which Google
addressed in mid-February
.
Two other Chrome zero-day
bugs exploited in attacks were patched in March: an
out-of-bounds write
weakness in the Skia 2D graphics library (CVE-2026-3909), and an inappropriate implementation vulnerability in the V8 JavaScript and WebAssembly engine (CVE-2026-3910).
A use-after-free weakness in
Dawn
(CVE-2026-5281), the underlying cross-platform implementation of the WebGPU standard used by the Chromium project, which Google
patched in April
.
An out-of-bounds read and write vulnerability in Chrome's V8 JavaScript engine (CVE-2026-11645), exploited in the wild and
patched in June
.
Google fixed eight more
zero-days exploited in attacks
in 2025, many of them reported by the company's Threat Analysis Group (TAG), which tracks zero-day exploits used in spyware attacks.
Fireworks AI discloses new breach after cloud provider hack
Bleeping Computer
www.bleepingcomputer.com
2026-11-10 02:49:58
AI infrastructure startup Fireworks has disclosed a new security breach in which attackers accessed its development machines after breaching a third-party cloud provider. [...]...
AI infrastructure startup Fireworks has disclosed a new security breach in which attackers accessed its development machines after breaching a third-party cloud provider.
FireWorks provides a high-performance inference platform for developers who want to deploy and run open-source artificial intelligence models (such as Mistral, Meta's Llama, or Google's Gemma) without worrying about hardware bottlenecks and complex infrastructure tasks.
The company notified law enforcement and customers of another security incident in early October after attackers accessed environment variables containing API keys and tokens stored as secrets for a limited number of accounts.
"The evidence indicates links to a cybercriminal threat actor group, which is financially motivated and aimed at selling tokens from unauthorized access to Large Language Models (LLMs) to illicit routing gateways, known as 'LLMJacking',"
Fireworks said
at the time.
After revoking compromised internal credentials, affected Fireworks API keys, and keys created by the attackers, Fireworks discovered another security incident on October 23.
In the new breach, the threat actors accessed resource metadata (e.g., Fireworks resource identifiers, display names, descriptions, creation time), billing information (e.g., billing and shipping addresses, invoice and payment history, account balance, and credit usage), and incomplete model weights and datasets for some customers.
However, the company said the attackers couldn't access customer payment card numbers because Fireworks doesn't store them.
"A third-party cloud provider that hosted Fireworks R&D machines experienced a security incident on October 23. On October 24, the unauthorized third party used it to reach Fireworks development machines and then run an unauthorized workload that led to additional customer data impact,"
Fireworks noted
in a Monday advisory.
"We detected this activity on the same day, and followed our incident response processes to take immediate remediation measures and close known critical vulnerabilities. As of October 25, we have not detected further evidence of successful unauthorized access by the threat actor on the Fireworks platform customers use."
Since the attack, Fireworks revoked and replaced credentials and service accounts, restricted unauthorized network pathways, isolated affected systems, and tightened access to data storage and analytics systems to block public or unauthorized access to stored data.
The company is now working with Palo Alto Networks' Unit 42 incident response division to secure its systems against future attacks and further investigate the incident's full scope and impact.
One week ago, researchers at Google's Threat Intelligence Group (GTIG) and Mandiant reported that large language model hijacking attacks (also known as LLMjacking) are
driving record costs for compromised organizations
, with cloud AI charges reaching
as high as $1 million due to fraudulent calls using stolen API keys.
Eighty-one-year-old M John Harrison has won the Booker prize for
The End of Everything
, a postapocalyptic novel set on a near-future Kent coast, becoming the oldest winner in the award’s history.
Gaby Wood, chief executive of the Booker Prize Foundation, said that while plenty of previous winners had dabbled in science fiction, Harrison’s was “the first Booker winner to have emerged from the bona fide SF world”. She called it “a historic win, for a writer whose decades of work are lightly worn on every page”.
Harrison, who has been publishing for six decades, overtakes Margaret Atwood, who was 79 when
she shared the prize in 2019 for The Testaments
. He received the £50,000 award and trophy at a ceremony in London on Monday evening.
The End of Everything, Harrison’s first Booker nomination, is set a few decades from now, years after a disaster nobody can properly account for. Set on the Kent coast, the novel sees Phillip Tennent and his ageing aunt Marnie attempting to survive alongside the looming threat of the mysterious iGhetti: vast, shape-changing beings whose origins and intentions are never explained. At 198 pages, it was the shortest book on the shortlist.
Mary Beard, chair of the judges
, said the decision was unanimous, reached after a full day of discussion. “It’s a book that turns you upside down, raises a wry smile – and surprisingly, given the subject matter, leaves you with a twinge of optimism,” she said. “One main point of the book is that if, or when, such an apocalypse comes it will be incomprehensible. And the old rules won’t matter either … This is the politics of now seen through the lens of the future.”
Harrison, born in Rugby, Warwickshire, in 1945, sold his first story in 1965 and spent most of the 1970s running the books pages of the speculative fiction magazine New Worlds. Alongside his novels he has written five short-story collections and
the “anti-memoir” Wish I Was Here (2023)
. Climbers took the Boardman Tasker prize for mountain literature in 1989, Nova Swing the Arthur C Clarke award in 2007, and The Sunken Land Begins to Rise Again the Goldsmiths prize in 2020. Once a keen climber and fell runner, he sat on the Booker judging panel in 2022.
Writing in the Guardian on his inspiration last week,
Harrison described
The End of Everything as “a disaster story in which the disaster is the failure to comprehend”, with aliens who arrive “as incomers from another dimension, paralleling the gentrification of places like the UK’s south-east coast”. He admitted to passing on to the reader “some of the puzzlement and confusion of the characters”, but said he hoped the issues were transparent – among them “the collapse of rationality that comes with Trumpism and the internet”.
His win marks a rare moment of mainstream recognition for a writer long revered by his peers but at the margins of literary fiction. On BBC Radio 4’s Front Row last month, Harrison said he had been “working for 40 to 50 years to shift the balance, both as a novelist and as a critic”, adding: “Why shouldn’t a well written [work of] SF be considered to be literary fiction?”
Even admirers concede the book is not an easy read. In a
rave review for the Guardian
, Michel Faber said it “exposes the terrifying insecurity of life right now”, but warned that “it won’t be for everyone”.
The win is timely in the age of AI. Beard noted that the “i” in iGhetti hints “at something digital, but you can’t be sure”, while Wood described the book’s post-apocalyptic landscape as “Large Language Model-dotted”.
The judging panel also included Pulp frontman Jarvis Cocker, authors Patricia Lockwood and Raymond Antrobus and Guardian journalist Rebecca Liu. They considered 163 books published in the UK or Ireland between 1 October 2025 and 30 September 2026.
It is the first Booker win for Serpent’s Tail, an imprint of the independent publisher Profile Books, and its fifth nomination. Hungarian-British author David Szalay
won last year with Flesh
; other recent winners include Samantha Harvey’s Orbital, Paul Lynch’s Prophet Song and Shehan Karunatilaka’s The Seven Moons of Maali Almeida.
The End of Everything by M. John Harrison (Profile, £16.99). To support the Guardian, order your copy at
guardianbookshop.com
. Delivery charges may apply.
Building a networking switch ASIC chip
Lobsters
essenceia.github.io
2026-11-10 02:39:39
This is part 2, for part 1 see https://essenceia.github.io/projects/ethernet_switch_asic/
Comments...
I am currently on a quest to build some open source networking equipment with the final boss being a full router.
There are a lot of very valuable and less complex pieces of hardware on the way that also need building, one of them being the common networking switch.
Previously I was building the infrastructure to handle ethernet packets and worked my way up to a simple three-port switch that I had taped it out via Tiny Tapeout. But a few days after that tapeout, as I was still reeling from the adrenaline of rushing to meet the deadline, an unexpected opportunity presented itself: the possibility of taping out my own full chip, free of charge!
Full chip inital global placement in action, performed by the OpenROAD placement tool.
But there was one slight problem, I only had four days to design the entire thing, also known as 96 hours ( putting it in hours definitely does not make it sound less terrifying ).
A few months back, I wrote that building a full matrix multiplication accelerator with some in-silicon debug infrastructure in under 2 weeks was too tight of a deadline, all around a terrible idea and should absolutely never be attempted, especially not in a corporate setting.
Well since then I have discovered a new circle of hell: designing a full ASIC solo in 4 days.
It’s caffeinated down here.
But now that I have gazed upon these new depths of hell, let me tell you about the journey of building full ASICs!
But they will talk to wafer.space, and wafer.space will talk to me.
Now I suspect you might be wondering: what is wafer.space again ?
A few months ago, something happened.
Tim Ansell, formerly part of the team at Google that got us the SkyWater 130nm and GlobalFoundries 180nm open source PDKs, left Google and started wafer.space where he opened up the possibility for mere mortals to taped out their own chip at GlobalFoundries for an affordable price.
They offer the services of getting your chip manufactured on GlobalFoundaries 180nm and optionally get it packaged.
Chips come in all rectangular sizes with the size measured in area.
Area is one of the primary concerns of the design as it is once again a question of cold calculated economics, because, when you go to get a chip manufactured you pay per \( mm^2 \) of area.
Take for example the price quoted bellow by IHP (another fab) for their own multiwafer runs. If you participate in this run you will get back a set number of chips (40 in this case) and your final chip cost will correspond to how big your chip ultimately is.
Yet, more area is not simply more expensive because of the direct manufacturing cost, there is a second more subtle factor inflating the price, and that is yield.
Ultimately broken chips have no value, actually we could argue that we should ascribe negative value to broken chips because identifying which chips are broken costs money, and selling a customer a broken chip costs even more money. So maximizing the ratio of good chips to manufactured chips is of primary importance. This ratio is called the yield.
Chips can be broken for a plethora of reasons, but for simplicity I will put them in two different buckets. Firstly it could be a design issue, in which case all your chips are equally affected. Secondly it could be a manufacturing defect that affects your chips semi-randomly.
Manufacturing defects that occur during semiconductor device fabrication can be modeled as constant defect probability per unit of area, meaning that chips with higher area have a higher probability of having a defect, and thus lower yield, leading to ultimately higher costs.
This doesn’t impact the price which I pay to the chip area per-se, but it affects the average net price that I will pay per functional chip.
This is the double reason why area optimization is such a concern when designing chips.
Now GlobaFoundaries 180nm (gf180) is not a young node, and the polite way of calling something old is
“matrue”
. With node maturity comes increased expertise of the process by the foundry leading to better yields over time. So gf180 is a node with excellent yields for which area related defects are not a concern especially compared to younger leading edge nodes.
Wafer.space now offers 4 chip sizes, commonly referred to in the community as the “full”, “half”
s
and “quarter” slots.
For people in need of some perspective, the full slot and its nearly 13mm2 of area is the same size as the entire Tiny Tapeout gf180 shuttle chip. The same chip that is capable of accommodating unto 160 project tiles and all the Tiny Tapeout common infrastructure. For reference, my two systolic arrays (8 bit integer and bfloat16) and the original switch all fit on only 4 tiles and my largest design to date, the blake2s hashing accelerator on 8.
Run 2 wafers with the Tiny Tapeout chips in the middle on the left.
But getting the silicon manufactured is only the first battle of the war.
Once you get your chip onto a wafer, there are two more important steps to clear before it can actually be called a chip.
Semiconductors are manufactured on a substrate called a wafer, this is a solid silicon disk that then needs to be very precisely broken up into individual chips. This step is called dicing.
So once the wafers have exited the fab and the guys at wafer.space take delivery of the full set of wafers, they call to another specialized service to dice them into individual chips along the scrible lines using a very precise diamond saw.
Example of a cheap “mature” manual wafer dicer being sold at auction.
At that point, wafer.space offers two possibilities. The first is to mail you the diced chips directly, the second is to get the chips packaged for you.
Raw semiconductor silicon is beautiful but unless you are also in the habit of collecting expensive crystals to look at, they are not much use as is. After all, how do you communicate with a piece of doped silicon crystal?
In order to both power our chip and be able to communicate with it, we need to package it in the form in which we can connect it to a wider electronic circuit.
That is, unless you just happen to have a micromanipulator and about 56 microprobes lying in your garage that you can use for chip bringup. In which case please do tell me if you ever need some help clearing out your garage, I have nothing planned that day.
Chip packages come in different forms, the most common being some kind of black plastic enclosures used not only to create accessible connections to the silicon but also for protecting the delicate die and the connections from the environmental damage caused by shocks, humidity and extreme temperature fluctuations.
The type of package we chose also affects how we architect the IO and thus what our silicon floorplan will look like. There are two big families of packages:
In the case of flip-chips the IO pin connections will be spread out regularly all over the floorplan leading to shorter logic to pin connections, and supporting a greater pin density and count. But on the flip side (put intended), flip chips packaging requires a lot more precision and is more expensive compared to …
Wire bonding works by conning your silicon to a pad in the package using a very thin fly wire made from gold or aluminium.
This is done by a wire bonding machine that will physically pull a wire from a IO landing pad on the silicon and connect it to a landing pad on the package. The silicon would be placed at the center of the package and would be connected to the pads placed all around it on the package, themselves connected to the larger exterior pads.
What do you mean it’s weird to spend my free time browsing
Kyocera’s catalog
of ceramic packages ? Just look at how cool they are.
In this case the IO pad structures of the silicon would be located towards the exterior of the chip creating two distinct zones, the padring and the core region where most of the logic is located.
There are many sub-flavors of wire bonded packaging, and wafer.space decided to offer something called chip-on-board packaging (CoB), which is a bit different to how mass market chips are classically packaged but also much more cost effective for small scale fabrication.
Some of my own custom gold platted CoB PCBs. Here you have the PCB for a 56 pin part, and a 76 pin part both accommodating the quarter slot die size. The 56 pin PCB is a spin-off of the version wafer.space now uses and I had it manufactured in order to validate the manufacturability of the PCB changes I had made and was contributing back to the community.
For CoB the chip is not bonded out to an enclosed package, but rather, the connections are made directly to a PCB.
Once the chip has been bonded onto the PCB, a protective epoxy layer called a globtop is deposited and hardened on top of the silicon and the bonds. Some of you might have already noticed black blobs on commercial PCBs in the past, and without even realizing it you might have been looking at a CoB packaging.
But unlike the dull black glob tops, wafer.space has opted for the rarer beautifully transparent epoxy, allowing you to directly see the chip bonded though the package.
FABulous open source FPGA board
made by Leo Moser, and manufactured as part of the first wafer.space run featuring the gorgeous CoB packaging.
With your silicon bonded you now have what can officially be called a chip! 🥳
What wafer.space is selling : the possibility for anyone to make their own full prototype chip run for the price of an expensive vacation, is honestly revolutionary.
DARPA and google gave us the tools, Tiny Tapeout offered us a chance to sharpen our skills and wafer.space gave us direct access to manufacturing.
Once more, in the spirit of transparency, I was invited onto the shuttle for free, but this sentiment comes from a genuine belief, so much so that as soon as the following manufacturing run sales opened I put my money where my mouth is, and bought my slot outright.
Somehow this is still cheaper than flying back for Christmas.
If you are new here and this is your first time reading this blog, welcome.
For those for whom this isn’t our first rodeo: you might be wondering how full chips differ from what I have been doing so far ?
In previous episodes, I had been taping out my designs through Tiny Tapeout. Tiny Tapeout is a shuttle chip where multiple projects share the same chip, and in doing so share a common infrastructure. That infrastructure includes handling the silicon’s IO, the power and clock distribution as well as manufacturing and sticking the chip onto a functional development boards.
All important parts that I now get the luxury of handling on my own, which also means I also get the luxury of making all the mistakes!
But, after having gotten the chance to perfect my understanding and experience of the tapeout process through 9 prior Tiny Tapeout tapeouts this sounds the natural next step.
With Tiny Tapeout, you don’t control the number of pins, nor do you have a precise idea of the timing of the signals arriving from the chip’s pins to the pins of your macro. Additionally, even though you can buy extra tiles on Tiny Tapeout, the smallest quarter slot chip on wafer.space still gives you more core area than the largest configuration of Tiny Tapeout has to offer.
And finally, Tiny Tapeout only gives you one chip per dev board, whereas with wafer.space you get a minimum order lot size of 1000 chips.
For the purposes of the networking chip project, the real game changer is having control over the pin architecture, meaning I can now decide both the number and the type of the pins.
Because I am comunicating with the PHY chip using an RMII interface, I care very much about pins as each Ethernet port interface requires 7 pins. This was also the reason why the initial version of the networking switch had only 3 ports: I only had 24 pins.
You can refer to the previous article
Designing an Ethernet Switch ASIC
for an explanation on why each port needs 7 pins and each pin is used for.
So now that I have a whopping 46 pins maximum to play with, we can get cooking!
Anatomically pins are analog blocks with a landing pad for the wire bonded wire on one end. These are included as part of the GlobalFoundries open source foundry provided IO cell library, and although all the pins share the same height, width and landing pad sizes, each features different analog layouts according to its functionality.
The most important types of pins for this design are the input pins, the bidirectional pins and the power delivery pins. Have fun playing spot the difference.
Interestingly, the standard library does not offer any pure output pins, so outputs are handled by bidirectional pins statically configured in output mode.
Looking at the floorplans provided above you might notice that these pins have no analog components directly under the landing pad, known as a “circuit under pad” design, making them a little less compact but more structurally resilient.
This is because these pins were originally designed to be compatible with a version of the GlobalFoundary 180nm process with only 3 metalization layers, but multiple levels of a metal structure must be present between the top metal layer where the pad is and the analog circuit beneath in order to help isolate it from the force applied to the pad of wedge bonding. During wedge bonding the bond is physically pressed in place requiring applying a lot of force to the silicon and potentially leading to breakages in the circuits underneath if sufficient structural support pillars aren’t present.
As discussed earlier, there are different families of packaging for chips resulting in different types of I/O design: flip-chips and wire bonding. Wire bonded chips such as mine have their pins facing the exterior of the chip organized in a structure called a pad ring.
This is a ring surrounding the core area of the chip, connecting all the different I/O pads together. This ring is used both for noise isolation and to share power between all the different pins. Because the padring is an uninterrupted crown of pins the space between the pins is filled by very simple structures called filler cells used to close the power connections within the ring.
Render of the chip’s parding
The IO also plays a crucial role in dealing with electrostatic discharge. (To whom many electronics have perished, including my little sister’s laptop that I may or may not have murdered while upgrading her ram when I was 15. 🪦 )
Each pin contains structures that will act as forward biased diodes in the event of an electrostatic discharge steering the charge though the power rails and protecting the sensitive core logic.
So we actually have four types of power delivery pins : two for ground and two for power.
The difference between the two groups is that one is used to provide power to the IO itself and the other is used to power the chip’s core logic.
Thus, it is possible to run the I/O and the internal design at different voltages. The areas for which a different power source is used is called a power domain. For example, the I/O could run at 5V, accepting 5V input signals and driving 5V outputs while internally the chip core runs the logic at 3.3V.
In this case, we would have different pins for powering the I/O and for powering the internal core. But, in the case of this networking chip, core power is shorted to IO power and both are in the same power domains.
Such a setup is only made possible because the foundry provided 7 track standard cell library is, to put it mildly: rugged. The cell target operating range is between 1.62 and 5.5V voltage and -40 to 125C.
So shorting the IO and core voltage and deciding to run the entire thing at 5V is just an average Tuesday.
Example of a random timing report from another chip I am working on, with corners ranging from 3 to 5.5V and -40 to 125C. And again, this is still just a subset of all the corners there are: there are even more where this came from!
For reference, this is just a tiny bit unusual.
Most designs have separate power domains as modern nodes have cell libraries designed for much lower operating voltages in order to help reduce the area power density making cooling easier and to help optimize power consumption. In the case of leading edge nodes, internal logic targets operating voltages as low as 0.7 to 0.8 V. This forces having at least separate IO and core power domains, since your IO typically starts at 1.8V and above.
Yet, you sometimes need separate power domains even if they operate at the same voltage, such as cases where you want to isolate a sensitive analog block from the power supply noise caused by a quickly toggling digital part. You might even prolong this separation of an analog and digital power domains to the IO, in which case rather than having a fully connected padring working within the same power domain you would be splitting the padding into analog IO power and digital IO power.
Remember the filler cells I talked about earlier? Well there exists a special type of filler cell called a splitter used specially to split the pad ring in such cases. But, because of ESD concerns this splitter is not as simple as breaking the power line, but that is a discussion for another day.
The clock for this chip is supplied though a Schmitt trigger input pin and is strategically logged in the corner of the chip right next to the reset signal, and isolated from the rest of the pins by two power pins. This is done to limit the clock signal’s impact onto the neighboring pins given its toggle frequency, as well as to prevent the clock signal for the neighboring pins cross talk. The reset signal by comparison is a very stable signal producing little crosstalk of its own.
From this point on the clock signal is pulled into the center of the floorplan and then distributed through a balanced clock tree throughout the chip.
Render of the first level of the clock tree. The origin clock signal is colored in purpel and is feed from the bottom left pin
Such “shielding” is even more important in our case since we are doing wire bonding and we can also have cross talk between signals occurring between the fly wires, this would be less of a problem for a flip-chip package.
This is a different challenge compared to what I was doing with Tiny Tapeout as I now have access to two great resources: firstly, a lot more pins to play with, and secondly, a lot more space.
Even if I target the smallest possible chip, I am still blessed with more area than I know what to do with.
Even before being invited to contribute I was already eyeing the wafer.space slots, so selecting the switch at the crown project of the ASIC was the easy choice.
The problem is that the switch was initially designed for the constraints of Tiny Tapeout. As such, not only does it have an odd architecture with only three ports, but it was designed to be as space efficient as possible. Here, space is something I am swimming in, but with only 96 hours ahead of me I have no time to redesign an entirely new switch from scratch.
So the plan is to re-adapt the existing switch to make the best use of being its own chip.
The first and the most important change was to be able to make use of these abundant pins and have the switch to support more ports.
No longer shall I be constrained by my pin count! 🔥 w 🔥
What this code gains in ease of writing it loses in flexibility.
In RTL, we have a concept called parameters, which exist for an instance of a module and allow you to define, at instantiation, certain values. These values can then be used to size up buses or are macro like conditions to define which sections of the code should be included in the final hardware.
The original switch implementation was partially generic : it contained quite a few generic values, but these were mostly added out of habit to help clean up the design and keep things more readable, rather than truly making the design dimensions fully configurable.
The reason for not making the design fully generic was out of a calculated decision to shy away from as much unnecessary complexity as possible. The original design was facing the hard physical constraints of Tiny Tapeout pin count, so making it fully generic to support an arbitrary amount of ports would have been an unnecessary premature optimization, and most importantly cost complexity.
My grief against complexity comes from two calculated trade-offs.
First, I find it is orders of magnitude cheaper to add complexity than to remove it.
Secondly, complexity is especially expensive for hardware design because of the necessity to not have no have any bugs in the hardware. The only way of reaching this bug free state is through thought verification of operation under all possible scenarios. As we add complexity, we add hardware states such that the size of the space of states we need to explore grows exponentially.
Now I know exponential growth might sound like an exaggeration, after all exponential growth is so fast that it is hard for our brains to conceive, but I assure you I am not.
Illustration of exponential growth using the
rice and the chessboard problem
. If you double the quantity of grains of rice placed upon each square by the last square you would need \(2^{64}-1\) also known as \(18,446,744,073,709,551,615\) grains of rice.
This problem is more formally called the “state explosion problem”.
So the biggest change in the switch was to move the number of supported ports from a static three to a generic number.
Even if the RTL scales, and I could theoretically run a simulation with 48 ports, the logic itself still has scaling limits. After all, behind the abstraction of the code we are designing hardware logic for which physical constraints still apply.
As the structures get wider, the number of logic elements on a path increases, the paths get physically longer and the timing degrades. And so, with \(1.73mm^2\) of core area available, timing is the wall I hit first.
Given the switch was already quite tight on timing, scaling it too far would push it beyond the limits of the current design requiring a rethink of the architecture. Rethink that I cannot afford to execute in so little time.
Lastly, I said I was scaling the number of ports, but because of how tight the timings are on the switch lookup table already was, it is not getting scaled up. And because it still only has four entries, and scaling beyond four ports would result in too much contention on the table and not enough hits, it would not make any sense to go beyond 4 ports for now.
Given I now control the full ASICs layout I can also control exactly which signal maps to which pin on the padring.
Pin mapping of the first generation networking chip.
Since the switch was intended to work with a specific Microchip family of external physical-layer chips, and that these chips had a known pinout, I decided to choose the pin order based on how directly I could draw the connecting wire onto the PCB.
Pin layout of the LAN8720A(i) the external PHY chip containing the analog frontend for 100Mbps Ethernet
One of the best drawbacks of the switch scaling limit was that I was left with a few pins and lots of area to play with.
And unlike with Tiny Tapeout where multiple projects share that same common infrastructure allowing only one project to be enabled at a time, this time I could have multiple designs working in parallel.
And I had just the perfect project to include in parallel.
A few months back I did the two things the entire Internet knows not to do: firstly I asked Reddit for advice, secondly I followed it.
This project is called
“Until Heat Death Do Us Part"
and is a very serious implementation of an ethernet connected beacon that broadcasts its current time over 100 Mbit Ethernet with the ability to do so without overflow for the next \(10^{100}\) years. Also believed to be roughly the estimated heat death of the universe, give or take a few powers of 10 years.
I have a full write-up about this ASIC’s here for those interested in getting the full story:
Until Heat Death Do Us Part.
Putting it all together: this chip features two designs, the 4 port 100Mbps networking switch and the ethernet broadcast beacon. The networking switch is the denser design on the right hand side of the floorplan with the beacon being the on the left side, each designed placed next to there respective port pins.
It’s already been a few months since the chip has been sent to the fab. Since then the first batch of produced wafers have exited the fab and been received by the wafer.space.
Andrew Wingate shared with us some absolutely gorgeous pictures of the diced wafers, and there is my little chip in the flesh sitting on the top right corner of the reticle:
Networking chip die shot taken on the wafer
The dies are then picked off the diced wafer using a custom built robot and sorted per chip type into a tape reel. From there the chips will be either sent to the bond house for packaging or directly sent to the customer.
Andrew Wingate’s custom die sorting robot. Sometimes if you don’t have it just build it. On that note Andrew runs
evezor
a small robotic company where you can find the base kit for this robot
And now I am like a child waiting for Christmas, impaciently awaiting a package, inside the first batch of my own full custom ASIC chips.
Now, the chip doesn’t make a full networking equipment on its own, which is why I am also prototyping a PCB for the switch. Hopefully someday I can plug the chip in to get a fully functional switch.
From the perspective of my husband coming back home, or what ‘I spent the day in the kitchen’ actually looks like.
Here is to hoping the first iteration of the silicon just works !
.. which anyone working in the industry can attest to, A0s are rare enough to be legendary.
Manufacturing revisions of a chip are identified by a letter followed by a number.
A0 is the first iteration, minor revision such as changing some of the higher metalization layers will increment the number and major revisions requiring a new mask set for the bottom layers, where the transistors are built, increment the letter and reset the number. So revisions might go: A0, A1, A2, B0, B1, B2, B3, C0, etc…
Meanwhile the networking equipment project continues, chasing after building increasingly complex systems. Without going too deep into which next networking features I want to add, it is becoming quickly apparent that I will need to integrate some form of a CPU.
This is because as I target more advanced networking applications the tasks my silicon needs to accomplish become increasingly varied and start featuring a large array of tasks that occur rarely enough, and have sufficiently lax performance requirements to be better suited for software than hardware.
As for the matter of which CPU architecture to choose, although RISC-V is in vogue I find that, as a result of RISC-V’s architectural choices, it is just too expensive to implement in terms of area for systems like mine.
Floorplan of a RSIC-V Hazard3 core with JTAG accessible debug infrastructure occupying 700x700 um of area on gf180 implemented during my planning of the next chip’s architecture. It is worth noting that since we do not have any silicon proven macros for a 16x32 or 32x32 register file I am implementing it using scan dff gates, resulting in an even worse area. Credit goes to Luke Wren for the idea of using the scan flops to make up for the absence of an flop with enables in the gf180 standard cell library.
My needs when selecting witch CPU architecture to use are:
be cheap to implement in hardware
have a pre-existing software ecosystem, meaning having C compiler and debugger support
not get me sued
If only gcc were to maintain something like the “Status of Supported Architectures from Maintainers’ Point of View” at
https://gcc.gnu.org/backends.html
then maybe I could know what my options where.
Architecture characteristic key
-----------------------------------------------------------------------
H A hardware implementation does not exist.
M A hardware implementation is not currently being manufactured.
S A Free simulator does not exist.
L Integer registers are narrower than 32 bits.
Q Integer registers are at least 64 bits wide.
N Memory is not byte addressable, and/or bytes are not eight bits.
F Floating point arithmetic is not included in the instruction set
I Architecture does not use IEEE format floating point numbers
C Architecture does not have a single condition code register.
B Architecture has delay slots.
D Architecture has a stack that grows upward.
l Port cannot use ILP32 mode integer arithmetic.
q Port can use LP64 mode integer arithmetic.
r Port can switch between ILP32 and LP64 at runtime.
(Not necessarily supported by all subtargets.)
p Port uses define_peephole (as opposed to define_peephole2).
b Port uses '"* ..."' notation for output template code.
f Port does not define prologue and/or epilogue RTL expanders.
m Port does not use define_constants.
g Port does not define TARGET_ASM_FUNCTION_(PRO|EPI)LOGUE.
i Port generates multiple inheritance thunks using
TARGET_ASM_OUTPUT_MI(_VCALL)_THUNK.
a Port uses LRA (by default, i.e. unless overridden by a switch).
t All insns either produce exactly one assembly instruction, or
trigger a define_split.
e <arch>-elf is not a supported target.
s <arch>-elf is the correct target to use with the simulator
in /cvs/src.
| Characteristics
Target | HMSLQNFICBD lqrpbfmgiates
-----------+--------------------------
aarch64 | Q q b gia s
alpha | ? Q C q mgi e
arc | B b gia
arm | b ia s
avr | L FI l p g a
bfin | F gi
bpf | HM Q FIC lq b a
c6x | S CB gi
cris | F B gia s
csky | b ia
epiphany | C gia s
fr30 | ?? FI B pb mg s
frv | ?? B b i s
gcn | S C D q a e
h8300 | FI B g a s
i386 | Q q b ia
ia64 | ? Q C qr b m i
iq2000 | ??? FICB b g at
lm32 | F g
m32c | L FI l b g s
m32r | FI b a s
m68k | pb i
mcore | ? FI pb mg s
mep | F C b g t s
microblaze | CB ia s
mips | Q CB qr ia s
mmix | HM Q C q ia e
mn10300 | ?? gi s
moxie | F g t s
msp430 | L FI l b g s
nds32 | F C ia s
nios2 | C ia
nvptx | S Q C q mg e
pa | Q CBD qr b i e
pdp11 | L IC qr b e
pru | L F a s
riscv | Q C qr gia
rl78 | L F l g s
rs6000 | Q C qrpb ia
rx | s
s390 | Q qr gia e
sh | Q CB qrp i
sparc | Q CB qr b ia
stormy16 | ???L FIC D l b ia
v850 | g a s
vax | M I b i e
visium | B g t s
xtensa | C
Behold: so many beautiful options supported that most people have never even heard of!
And within this list there is one 16 bit architecture that caught my eye, at the heart of one of the longest produced systems and deeply intertwined with computer history as it saw the first version of Unix written in C.
A year ago, I started on a journey to go from being solely a hardware designer to building an entire ASIC from scratch without any institutional backing.
It’s been a long road, passing though multiple smaller macro tapeouts, each allowing me to delve deeper into what it takes to make ASICs. This chip is my 10th solo tapeout, a fitting number to finally graduate into building full chips.
Standing upon this mountain I can tell you the road ahead is still very long.
And with my first batch of full custom ASICs landing into my mailbox in a few weeks a new risk has emergeded, leading me to proclaim a new goal: not starting a fabless semiconductor company.
Tradional celebratory Waffle House.
Current life goals
Have kids
Spend time with loved ones
Make chips
Eat waffles
Get a wire bonder
Not get a job
Not startting a fabless semiconductor company 🆕
Thanks again to wafer.space for giving me this opportunity to join the shuttle, Tiny Tapeout for making the 9 previous tapeouts possible and the open source silicon community for building the tools making all of this possible.
If you enjoyed this, I will be sipping coffee at a Silicon Valley neighborhood cafe between the 10th and 12th of November, so if you feel like nerding out over caffeine shoot me an
email
.
Nvidia and Jensen Huang sued by shareholders over affair with alleged Chinese spy
Guardian
www.theguardian.com
2026-11-10 02:30:15
Legal action comes as Donald Trump says FBI is investigating tech company CEO’s links with Alice HuangBusiness live – latest updatesNvidia’s board needs to do some succession planning – sharpishNvidia and its chief executive, Jensen Huang, have been accused of defrauding shareholders in a lawsuit ov...
Nvidia and its chief executive,
Jensen Huang
, have been accused of defrauding shareholders in a lawsuit over the Chinese spying scandal engulfing the $4.3tn (£3.2tn) company.
The legal action came as Donald Trump said the FBI was investigating Huang’s affair with an alleged Chinese spy.
According to a complaint filed in federal court in California,
Nvidia
and Huang misled shareholders in connection with the executive’s alleged affair with Alice Huang, a former executive of Singapore-based Megaspeed who is not related to him.
The shareholders claim both parties did not disclose that the matter raised national security concerns that threatened Nvidia’s reputation and business prospects.
The New York Times reported on the alleged relationship last month, and said US authorities had concluded Alice Huang was a Chinese intelligence asset.
Nvidia did not immediately respond to a request for comment.
Jensen Huang
told Nvidia’s employees
he had been unfaithful to his wife, without disclosing details of the alleged relationship.
He co-founded Nvidia in 1993 and has led the California company as it became the world’s most valuable chipmaker and made him one of the world’s most prominent symbols of the artificial intelligence boom.
Nvidia announced on Sunday it was conducting an independent investigation into reports that Huang was the “target of a foreign intelligence effort”. Shares in the company tumbled on Monday, closing down 4.3%, reducing Nvidia’s market value by approximately $190bn. The lawsuit was filed five minutes after the US stock market closed.
It is common for shareholders to sue companies after unexpected share price declines. Nvidia shareholders, led by Mark Kistenmacher, a retail investor, are seeking unspecified damages from the defendants.
Trump backs embattled Hegseth and Jensen Huang and says FBI looking into spy allegations – video
Trump said on Monday that the FBI is investigating Huang’s affair but said he does not think the executive has a reason to worry.
“I know the FBI is looking into it in terms of something else, and I think that he’ll be in good shape,” Trump said at a White House briefing.
“I did speak to him today just to see if he’s feeling all right, how you’re doing,” Trump said. “He said he had absolutely no idea that the person in question was a spy.”
Huang said in an open letter posted on Nvidia’s website: “I support the investigation and will cooperate fully. I love our country and our company. I am committed to protecting Nvidia and supporting America’s national security,”
Reuters contributed to this report
Introducing Our Smallest, Most Efficient Model: Muse Ember
Simon Willison
simonwillison.net
2026-11-10 02:28:21
Introducing Our Smallest, Most Efficient Model: Muse Ember
Meta AI just launched their entry in the Claude Haiku/GPT Luna category: Muse Ember, which they describe as:
[...] our smallest and most efficient model designed for complex reasoning execution and the work agents repeat all day: tool calls...
[...] our smallest and most efficient model designed for complex reasoning execution and the work agents repeat all day: tool calls, coding subtasks, routing, extraction, and long document parsing.
For shorter prompts it's priced the same as GPT-6 Luna and Claude Haiku 5.5 - both are $0.10/million input tokens and $0.50/million output. Today's other big model release, Claude Fable 5.2, is
80x that price
at $8/$40.
The pricing is a little less straightforward as prompts get longer, though. Luna, Ember, and Haiku all support up to a million input tokens, but they also all have a threshold after which the price goes up. Taking
that
threshold into account Ember is priced between the two others:
Model
Prompt size
Input ($/M)
Cached input
Output
GPT-6 Luna
≤272k
$0.10
$0.01
$0.50
>272k
$0.20
$0.02
$0.75
Muse Ember 1.0
≤200k
$0.10
$0.004
$0.50
>200k
$0.30
$0.012
$1.50
Claude Haiku 5.5
≤100k
$0.10
$0.01
$0.50
>100k
$0.50
$0.05
$2.50
But comparing price-per-token doesn't really make sense these days, when reasoning tokens mean that different models might use dramatically different numbers of tokens to solve the same problem.
For that, one measure that's useful is the Artificial Analysis.
And even more useful than that is their Intelligence Index vs. Cost per Task chart, which shows the following for those three models:
The Muse Ember models sit right on that Pareto line - the line at which you can only improve one dimension by giving up another. Meta call this out in their announcement:
It also sits on the efficiency frontier of the full Artificial Analysis leaderboard: no model scores higher for less per task.
(That grey dot on the Pareto line in the middle of the green area is GPT-6.1 Terra (low) - clearly I should be paying more attention to the Terra family!)
Muse Ember has six reasoning levels - minimal, low, medium, high, xhigh, and max - so I
rendered six pelicans riding bicycles
. The "high" reasoning level failed to return a full SVG, and the other SVGs were surprising in that the reasoning level didn't cleanly map to the visual quality of the response.
Here's the "max" one, but the others are worth a look too:
This notice is about the security incident at one of our vendors, Fireworks AI, that may impact some Notion workspaces. For the latest on the Fireworks AI incident, see their
official security updates here
.
Following an investigation by the Notion security team, we have determined that <1% of Notion workspaces may have been affected by the Fireworks security incident. Some unattributable chat sessions with Notion AI may have been exposed in this incident. “Unattributable” means the chats weren't labeled with who wrote them or which workspace they came from, and the transcripts did not contain tool call results. Beyond what’s in the chat transcript itself, there’s no information tying the chat back to a workspace, user, or company. No other data from within the workspace is affected.
What is Fireworks AI and how we used them
Fireworks is one of the most-used global AI infrastructure platforms powering tens of thousands of customers, and used by hundreds of thousands of developers. We used Fireworks for classification jobs to help customers understand their own AI usage through a feature in Notion called
Insights
, and we used them as a general inference provider to serve open-weight models inside our product. The Insights feature has been disabled as we investigate this incident, and we are no longer serving open-weight models through Fireworks.
What happened and how we addressed it
We learned from Fireworks about potential incidents earlier this month, and we shut down all connections to their systems out of an abundance of caution.
On November 6, Fireworks notified us that malicious actors may have accessed potential customer data. Our team immediately began another internal investigation. On November 8, Fireworks confirmed this new dataset for us.
Upon analysis of the new data, we discovered that it included unattributable Notion AI chat transcripts used for the Insights feature. Chats weren't labeled with who wrote them or which workspace they came from, and the transcripts did not contain any tool call results. Beyond the words in the chat transcripts themselves, the data contained no information that could specifically identify the workspace, user, or company.
No other Notion data from your workspace is affected, and we continue to monitor this incident.
If neither you nor your workspace owner has heard from us, that means your workspace is not affected, and no action is needed right now.
For the workspaces impacted by the Fireworks AI incident (<1% of the Notion workspaces), we have contacted the workspace owners. Affected customers will be able to retrieve and review the affected data securely inside their workspace.
For the workspaces affected by the Fireworks AI incident, workspace owners can view the affected data by going to their workspace sidebar →
?
→
Security incident review
. To view this data, use the desktop app or a web browser and make sure you’re on the latest version of Notion. This data is not accessible on mobile.
Workspace owners on Enterprise plans can access:
A CSV of your workspace’s data affected by the incident. Only workspace owners can see this data.
An annotated CSV of the same affected workspace data with additional metadata, such as the user associated with each chat transcript, to help you understand and run your own analysis of the impact. These added annotations and metadata were not exposed as part of the incident. Additional annotated fields are marked with
__metadata
or
__analysis
respectively. Only workspace owners can see this data.
Note:
These resources are only available if you have managed members for your workspace. Reach out to your account team if you have questions.
Workspace owners on all other plan types can access:
A page that includes a link they can share with affected members to review their own data.
For other workspace roles:
Workspace owners can provide a link to members so members can see their own affected data.
Once shared, the link will provide members with a CSV of
only the member's own data
affected by the incident.
We recommend that you treat this data as if it were exposed.
If you or anyone on your team pasted sensitive information like passwords, API keys, or other credentials into Notion AI during this timeframe, we recommend rotating them right away.
FAQs
What is Fireworks and how did Notion use them?
Fireworks AI
is one of the most used global AI infrastructure platforms powering tens of thousands of customers and used by hundreds of thousands of developers.
As of November 3rd, we have disconnected our systems from Fireworks, deleted all data in the Fireworks system, and stopped sending all data and traffic to Fireworks. We have also halted all training runs.
We previously used Fireworks for classification jobs to help customers understand their own AI usage through a feature in Notion called
Insights
and as a general inference provider to serve open-weight models inside our product.
What does “unattributable” mean? Could the conversations still contain sensitive information?
Following an investigation by the Notion security team, we have determined that <1% of Notion workspaces may have been affected by the Fireworks security incident. Some unattributable chat sessions with Notion AI may have been exposed.
"Unattributable" means the chats weren't labeled with who wrote them or which workspace they came from. The transcripts also did not contain tool call results (e.g., Notion page content, or external data pulled in by Notion AI.) Beyond what’s in the chat transcript itself, there’s no information tying the chat back to specific workspaces, users, or companies. No other data from within your workspace is affected.
As a precaution, we recommend that you treat this unattributable data as if it were exposed. If anyone on your team pasted sensitive information like passwords, API keys, or other credentials into Notion AI during this timeframe, we recommend rotating them right away.
How did Notion use Fireworks with the Learning and Early Access Program (LEAP)?
Customers in the
Learning and Early Access Program
(LEAP) volunteer their data to help Notion test new AI technology. In the past, we used this volunteered data to experiment with training task-specific models on Fireworks.
Where can I learn more about Notion’s security practices?
Visit our
Security page
for an overview of Notion’s security and privacy practices. For more information on security policies, security audit reports, penetration test results, and additional resources, visit the
Notion Trust Center
.
Apple MacBook Pro review: lighter, thinner and a stunning OLED touchscreen
Guardian
www.theguardian.com
2026-11-10 02:00:31
Redesigned flagship laptop has a fantastic display, killer performance and the first touchscreen on a Mac, but comes with a serious price tag Apple’s MacBook Pro has been redesigned for the first time in five years, getting slightly slimmer, significantly lighter and adding a fantastic new OLED disp...
Apple’s MacBook Pro has been redesigned for the first time in five years, getting slightly slimmer, significantly lighter and adding a fantastic new OLED display with the first touchscreen on a Mac.
The new MacBook Pro with PROLED XDR display comes in two sizes, 14in and 16in, but rather than replacing the standard MacBook Pro they sit alongside them as an even more expensive option. The OLED machines start at £2,899 (€3,299/$2,899/A$4,599) – a £400 or equivalent upgrade on the matching spec LCD models – serious prices for serious work machines, not helped by significant cost increases driven
by RAMageddon
.
Shut, the new OLED MacBook Pro looks almost identical to its predecessors: a little smaller in every direction but with the same aluminium body, combination of ports and overall profile. But pick it up and the weight loss is immediately noticeable. The 14in version is 14% lighter than its predecessor at 1.38kg, which makes it only 150g heavier than the
13in MacBook Air
, and the 16in version is 15% lighter at 1.82kg.
The glowing Apple logo on the lid is back having once been a mainstay of the company’s laptops until 2015.
Photograph: Samuel Gibbs/The Guardian
The new touchscreen is the biggest change, complete with the dynamic island around the web cam
like a modern iPhone
. The screen on the
LCD MacBook Pro was already fantastic
, but the switch to OLED has several benefits. The screen is even brighter, hitting an incredible peak of 2,000 nits for outdoor or HDR content viewing, making it one of the brightest laptop screens available.
OLED displays have individually lit pixels, which gives them dramatically better contrast with the deepest blacks and eliminates any blooming effects. That makes the new screen one of the very best on any product and a genuine joy to use to create or watch content. It is super crisp, vibrant and smooth, and makes the most of dark mode.
The dynamic island at the top of the screen shows music playback, timers and live activities such as sport scores, while acting as Siri’s new home, too.
Photograph: Samuel Gibbs/The Guardian
Tapping on areas such as the window traffic lights expands them so you can tap on the right button.
Photograph: Samuel Gibbs/The Guardian
The OLED MacBook Pro isn’t the first laptop with a touchscreen – they’ve been common on Windows laptops since 2012 – but it is the first Mac with one. For the most part the touchscreen mirrors mouse clicks, so you can single tap on just about anything or tap and hold for right click on most things.
It also supports most of the gestures available on a trackpad, including swipes, pinch to zoom and rotate. Three-finger swipes trigger mission control so you can switch between windows, while flicking them left or right snaps them to the screen’s edge – though unsnapping them requires a mouse for some reason. Swipe in from the right side of the screen for notification centre, down from the top right for control centre and from the dynamic island for Spotlight or Siri.
The iPhone mirroring feature is far better using the touchscreen than a mouse, as could be testing iPhone or iPad apps directly on the screen with a finger for developers.
Photograph: Samuel Gibbs/The Guardian
The Mac is not touch-first like an iPad and there is no touchscreen keyboard. But Apple has built new touch systems that third-party app developers can use to do unique things, such as tools that fan out around your finger or scrubbing dials. Those are few and far between at the moment.
That leaves touching the screen an optional extra. Like Windows machines, it is handy to have direct interaction with something using your finger sometimes. Pinch to zoom or rotating a photo is a lot easier directly on the screen than the touchpad, as is tapping the screen to pause video. The touchscreen is also useful for performing various gestures if you use a mouse rather than a trackpad.
A choice of M5 Pro or Max
The MacBook Pro has three USB-C/Thunderbolt 5 ports, an HDMI port, an SD card reader and a headphones socket.
Photograph: Samuel Gibbs/The Guardian
The OLED MacBook Pros come with the same M5 Pro or Max chips and memory choices as the regular MacBook Pros with essentially the same performance in benchmarks and during general use. They also have similar battery life, lasting for about two days of office work while mainly using the browser, writing, messaging and note-taking tools.
For more intensive workloads, such as developing and editing photos or other mid-level creative apps, the 16in version with M5 Max still managed to end the day with 40% left in the tank. If pushed to the limit, the battery lasts about two hours, which is still long enough to get a solid task or two done when away from the charger.
Sustainability
The excellent keyboard and generous trackpad offer the same first-class experience as previous MacBook Pros, while the speakers are best-in-class for a laptop and really very good.
Photograph: Samuel Gibbs/The Guardian
The OLED MacBook Pro might be the first touchscreen Mac, but touch is the least interesting part about it.
The reduced weight, slimmer body and absolutely stunning new screen are meaningful upgrades that will no doubt see the MacBook Pro through another five years as one of the very best pro laptops you can get.
The light-up Apple logo on the lid is a welcome blast from the past, while the dynamic island at the top of the screen takes up less space and is more useful than the notch it replaces.
The touchscreen is best thought of a value-added extra that is useful on occasion or for certain types of tasks. This isn’t a touch-first laptop, it’s more like one that just happens to have a touchscreen similar to many of the best Windows rivals, which is just fine.
I still wish the dynamic island contained Face ID like it does on an iPhone. The Touch ID fingerprint scanner is fine, but face recognition on a laptop is better. And no matter how you slice it, any of the new MacBook Pros cost a lot of money, part of which can be blamed on
RAMageddon
.
As crazy as it might sound, if you’re currently hoping to replace an older machine with a new high-end M5 Pro or Max Apple laptop, the extra £400 or equivalent for the MacBook Pro with PROLED XDR is worth it over the regular LCD MacBook Pro.
Pros:
stunning OLED touchscreen, dynamic island with great Centre Stage camera, thinner and lighter, choice of extremely potent M5 Pro or Max chips, long battery life, plenty of ports and an SD card slot, brilliant speakers, Touch ID, first-class keyboard and trackpad, wifi 7, Bluetooth 6 and Thread support.
Cons:
extremely expensive, no Face ID, no USB-A, RAM or SSD cannot be upgraded after purchase, touchscreen only occasionally useful.
Vasudev Kamath: Experiment: Debian Cloud/VM Images using mkosi
PlanetDebian
copyninja.in
2026-11-10 02:00:00
Debian's Cloud Images for various
public cloud platforms and VM environments are built using a tool called
debian-cloud-images,
an in-house utility developed and maintained by the Debian Cloud Team.
What?
The debian-cloud-images tooling uses FAI (Fully Automatic Installation) to create
custom VM im...
Debian's
Cloud Images
for various
public cloud platforms and VM environments are built using a tool called
debian-cloud-images
,
an in-house utility developed and maintained by the
Debian Cloud Team
.
What?
The
debian-cloud-images
tooling uses FAI (Fully Automatic Installation) to create
custom VM images for public clouds like
GCP
,
Azure
, and
AWS
, along with the
genericcloud
class. I wanted to convert this into a fully declarative, mkosi-based
image build where the entire image is described using INI-format configuration files,
with only a few post-installation scripts to handle final customizations.
Why?
I've been working with various image customization formats for a long time. In my
previous company, I used to build customized industrial PC distributions based purely
on Debian using
multistrap
and a bunch of shell scripts to stitch together raw image
creation, bootloader installation, etc. I've also done custom installs using
debootstrap
on my own laptop with
systemd-boot
as the bootloader, but that was
mostly hand-crafted and not automated. Once I came across
mkosi
, I was impressed by
how a single utility can do everything and churn out a fully usable image without extra
glue scripts for partitioning and image creation. You still need a few scripts to
finalize some parts of the installation (via postinst hooks), but those are very
minimal.
So I decided: why not convert
debian-cloud-images
into mkosi's declarative format
with a few architectural changes? My requirements were:
Btrfs as the root filesystem
: Partly because I like it, but primarily for the
ability to use transparent compression (
zstd:1
), subvolumes, and snapshots for
atomic rollbacks when things go wrong.
systemd-boot and Unified Kernel Images (UKI)
: Primarily because
systemd-boot
is clean and minimal—exactly what a modern bootloader should be. Combining it with
UKIs and UEFI Secure Boot is bliss compared to the complexity of the GRUB2 world.
Note:
This intentionally drops legacy BIOS (MBR/CSM) partitioning support in
favor of pure UEFI. Modern cloud platforms (AWS Nitro, Azure Gen2, GCP) support
UEFI natively, and dropping BIOS allows shedding significant legacy bootloader
baggage—though it does make these images unsuitable for older, non-UEFI hypervisors.
Implementation
Of course, the initial heavy lifting was done mostly using Antigravity (
agy
), along with
debugging, tuning, and cleanup from my side. I pointed
agy
to a local copy of
debian-cloud-images
and laid out my requirements: preserve parity with the original
packages and configurations, while enabling selective builds for each cloud via modular
profiles. The resulting
specification is documented here
.
The repository also includes a
verification script
that audits functional parity against official images produced by
debian-cloud-images
(verifying packages, APT deb822 sources, and systemd services, while accounting for the
switch to Btrfs and systemd-boot). Initial verification was performed for all Trixie
profiles, and the parity report is published
here
.
I've also booted the
genericcloud
profile image under UEFI in a local VM to verify
live bootability,
bootctl status
, network connectivity, and APT repository setup.
This completes Phase 1 of the implementation. The remaining phases outlined in the
specification include:
Phase 2: Immutable Images with dm-verity
:
Configure
Verity=hash
in systemd-repart's
10-root.conf
. Enable mkosi auto-signing
for the verity root hash and pass the root hash into UKI kernel command lines
automatically.
Phase 3: Secure Boot & Signed UKIs
:
Integrate
SecureBoot=yes
with custom owner keys or
ShimBootloader=signed
using
Microsoft Third-Party CA signed shim binaries.
Phase 4: System Extensions (systemd-sysext)
:
Decouple cloud vendor agents (AWS CLI, Azure waagent, GCP guest agent) into separate
.raw
system extensions. Maintain a single unified, signed base OS image across all
cloud platforms.
Phase 5: Btrfs Automated Rollbacks
:
Combine Btrfs
@snapshots
with systemd-boot snapshot boot entries for fail-safe OS
upgrades.
Another advantage of this setup is that the same tooling can build images for physical
laptops and bare-metal servers. For example, in an
earlier post
, I walked through live-booting
with
debootstrap
and manually configuring
systemd-boot
for a custom UEFI
installation. With
mkosi
, I can simply generate a customized image locally with UKIs
ready to go, live-boot the target machine, and write the image directly to the root disk.
Conclusion
This experiment is an exploration of the power of
mkosi
; I haven't discussed adoption
with the
Debian Cloud Team
yet. For now, this will continue as my pet project. While
I won't be hosting pre-built binary images, anyone interested is welcome to clone the
repository and build the images locally.
I will probably take some more time before tackling dm-verity images, as I want to
understand the nuances thoroughly before experimenting with them. Until then, happy
hacking! Please report any issues or suggestions on
GitHub
.
Today, we're excited to announce that
Xata is joining ClickHouse
to bring agentic capabilities to
ClickHouse Managed Postgres
.
Together with ClickHouse, we're building a Postgres platform designed for modern applications and AI agents, combining high-performance production workloads on local NVMe storage with Xata’s technology for instant database provisioning, instant copy-on-write branching, and scale-to-zero compute.
Nothing changes for Xata customers in the short term and we continue to accept new sign-ups. In parallel, we're working on bringing branching and an agentic tier to ClickHouse Managed Postgres. We will eventually migrate Xata customers to ClickHouse Managed Postgres. You can also read
ClickHouse's announcement
.
What is Xata
It’s undeniable that this year software development has changed forever, with agents and software factories now doing the grunt work. However, the increase in coding output has uncovered new bottlenecks. For many companies the database workflows are now the bottleneck: every pull request and every agent run needs a safe, isolated database with production-like data.
Traditionally, creating a copy of a production database is a slow and expensive process, especially when dealing with terabytes of data. Creating a database for every pull request or agent run simply doesn't scale with traditional cloning. With copy-on-write branching, however, there's no need to copy the data, making it possible to create a new branch with production data in seconds.
This is exactly what we’ve built at Xata. Even if a database has multiple terabytes of data, creating a branch takes only around 3 seconds. This means the schema and the data appear as if they were instantly copied to the child branch. At the same time, the child branch is fully independent: it has its own compute, running on a different physical node, and nothing that happens on the child branch impacts the parent database.
Instant copy-on-write branching:
Create database branches in seconds, without duplicating the underlying data. You only pay for the diff: create 50 branches of a 1TB database and you’re billed for something much closer to 1TB than 50TB.
Scale-to-zero compute:
Automatically suspend idle databases and wake them on the next connection, in about one second, minimizing costs.
Anonymized production data:
Remove sensitive information before data leaves production, so developers and agents can safely work with database branches.
You might also know Xata from our
open-source projects
in the Postgres ecosystem, including
pgstream
, for logical replication with anonymization and DDL support, and
pgroll
, for zero-downtime, reversible schema changes.
When we started talking with the ClickHouse Managed Postgres team, it quickly became clear just how complementary the two services are: ClickHouse Managed Postgres is optimized for high-throughput, long-lived production workloads, while Xata is designed to provision large numbers of small, short-lived databases in seconds, with production-like data and capabilities like instant branching and scale-to-zero that are particularly well suited for agentic workloads.
Both platforms run unmodified vanilla Postgres and share a strong focus on reliability and stability. The common foundation puts us in a great position to move quickly on integrating the two platforms. In fact,
David AI
is an example of a customer that already uses ClickHouse Managed Postgres and Xata together and they shared the following with us:
As an AI company working with large volumes of data, we need reliable infrastructure that help us move fast. We moved from Neon to ClickHouse Managed Postgres for better reliability and performance, and our users immediately noticed how much faster everything felt. Xata’s branching has been a great fit for our devs (and AI coding agents!), making it easy to build and test in parallel. Bringing both together means high-performance Postgres and instant branching in a single platform, simplifying our infrastructure and giving our team more time to build.
Best-in-class OLTP and OLAP
By almost any measure, Postgres is the most popular OLTP database and ClickHouse is the most popular OLAP database. Combining the two is something teams have been stitching together themselves for years. The Postgres team at ClickHouse has been making that integration first-class:
very fast replication
from Postgres into ClickHouse and a
unified query layer
to build applications.
An integrated transactional and analytical data platform is something we've wanted to build since Xata's early days, when our first product paired Postgres with a search and analytics engine.
On a personal level, we've long admired ClickHouse and already knew the founders and many of the engineers, which gives us confidence that together we can take this vision much further.
What Xata enables
A database branch for every pull request and agent run
The GitHub integration enables automatically creating an isolated database branch for every pull request. These branches can be integrated into CI/CD pipelines, allowing code changes to be safely tested before merging into production. Since they are only needed for testing, branches are often scaling to zero after only a few minutes, minimizing costs.
The same approach applies to coding agents, where every agent run can have its own isolated database to develop and test changes without affecting production.
For details on the branch-per-PR use case and the cost savings it provides, see
this blog post
.
Powering AI platforms
AI platforms that embed Postgres are seeing an explosion in demand: first thousands, then hundreds of thousands, and eventually millions of databases per week. There are two main use cases:
instant database provisioning
for every new application, and
a database branch for every deployment preview
, allowing code changes to be tested safely against production data.
Because unused databases scale to zero, platforms can run very large fleets of small, mostly idle databases at a fraction of the cost, while keeping full compatibility, since it's simply vanilla Postgres.
How it works
Two key technologies enable fast branching and short wake-up times: our Xatastor storage engine and warm pools for compute instances.
Xatastor
is our storage engine, which provides separation of storage and compute, high multi-tenancy, copy-on-write branching, compression, thin provisioning, and more. It exposes ZFS zvols over the network using the NVMe/TCP protocol. Because it works at the block-device level, we can run unmodified vanilla PostgreSQL. For a deep-dive into the Xatastor architecture, see this dedicated
blog post
.
We use
warm pools of compute instances
to obtain super fast provisioning, wake-up after scale-to-zero, and branching times. This removes the actual node and pod provisioning from the hot path of making a new database or branch available. You can find more information about how this works in this
blog post
.
What's next
Building Xata has been an incredible journey over the last five years. We're extremely proud of the technology we've built, and even more proud of the team behind it, which is now joining ClickHouse.
We've tackled some really difficult engineering challenges, and it's been incredibly rewarding to see developers and customers embrace these capabilities, creating exponentially more branches as they expand their usage.
What excites us most about this next chapter is that the vision behind Xata is more relevant than ever, and as part of ClickHouse, we're in the best possible position to bring it to fruition.
What this means for you:
If you're a Xata customer:
you can continue using it as usual. We'll integrate Xata's features into ClickHouse Managed Postgres, and once there's feature parity, we'll migrate customers as smoothly as possible, ideally with no impact on the service.
If you're a ClickHouse Managed Postgres customer:
branching, scale-to-zero and an agentic tier are coming to ClickHouse Managed Postgres
For a while, Amazon and AWS teams relied on Claude Sonnet 4.6 to label tickets in an internal system
without breaking the bank.
Sonnet 4.6 fit the goldilocks choice of balancing intelligence with cost. Considering it dealt with one
of the world’s largest internal ticketing systems, the nine month old model did well. However, two
Amazon engineers recently swapped out Sonnet 4.6 for
Strands Decider
, a decision model we launched a month ago, that
performed just as well
at 98% less cost
. This change will save millions of dollars of token costs in
a year.
Carr and Mehul, who work on the internal ticketing system, walk through how this happened below.
Replacing an LLM’s job with a decision model
We had Sonnet 4.6 labeling tickets at enormous scale. The tickets could be customer escalations, capacity
requests, automated alarms, security findings, or anything else across the company that needed to fit
within 20 category types. The agent ran with a long system prompt on every ticket, generating JSON and
reasoning against a fixed set of labels.
A decision model can’t generate text. It’s first given some state and a question with a set of
options, then the decision model returns a probability for each option plus a confidence score. We saw
this method fit perfectly with ticket labeling: the state is the ticket, the options are the label
catalog.
We started with the original
Strands Decider 2B
. On a test set of
tickets, the
E4B Gemma 4 build
got clearly better results, so
we switched to it. Afterwards, we tuned how confident the model needed to be before applying a label.
The results showed E4B beating production Sonnet on a separate set of our tickets.
We ran E4B on SageMaker
ml.g5.xlarge
instances (one A10G, 24 GB each). The model used about 19 GiB,
and one request took about 640 ms on one instance. The endpoint autoscales with traffic, but its network
was isolated, preventing outbound access to the container. SageMaker copies the model weights in from
S3 before start-up.
Customers can do this too! Apart from our ticketing APIs, everything in the path is a standard AWS
service. Ticket events land in an SQS queue that then triggers a Lambda function. It reads the ticket
data and calls the model, a SageMaker AI Endpoint with Strands Decider. AppConfig holds the switch
(described below), and CloudWatch carries the logs, metrics and alarms. The stack is defined in CDK with
deployment stages for Beta, Gamma, and Prod.
Running Sonnet 4.6 and Strands Decider on the same tickets
We didn’t want to flip a switch and hope. The labeling Lambda reads a three-way setting from AWS
AppConfig on every message:
BEDROCK
: Sonnet labels every ticket, but Strands Decider isn’t called.
DUAL
: Both the Sonnet and Strands Decider models are called in parallel. The results from the
Sonnet model are applied to the ticket and compared with Strands Decider results.
DECIDER
: Strands Decider labels every ticket and Bedrock isn’t called.
What we measured
Claude Sonnet 4.6
Strands Decider E4B
% Improvement
Average time per call
4,215 ms
897 ms
78%
Input tokens per ticket
6,554
2,009
Output tokens per ticket
170
1
Total tokens, per ticket
6,724
2,010
70%
The token drop had two sources. Strands Decider produced one output, the choice, instead of a JSON
answer. Its prompt was also much shorter than Sonnet 4.6’s. Production’s label descriptions alone are
longer than Strands Decider’s 4,096-token window, so we rewrote each of the 20 labels as a one- or
two-sentence criterion and sent them as the options of a single choice question, plus a “none” option.
The ticket data is the same as what Sonnet gets, except that on long tickets Strands Decider drops the
oldest comments to fit.
Below is a graph of our Lambda durations on the day we turned off the Sonnet usage, showing the average
Lambda execution duration dropping 74%.
What it costs
At published us-east-1 on-demand prices:
Claude Sonnet 4.6 (Bedrock, global endpoint)
Strands Decider E4B (SageMaker,
ml.g5.xlarge
)
Price
$3.00 per 1M input, $15.00 per 1M output tokens
$1.408 per instance-hour
Per ticket
$0.0222
about $0.0005
Per million tickets
about $22,200
about $500
Sonnet’s cost per ticket comes straight from the token counts above. Strands Decider’s depends on how
busy each instance is. At about 640 ms per request, one instance can handle about 5,600 tickets an hour,
which would be $250 per million tickets at full use. We keep headroom for bursts, and in practice it
comes to about $500 per million. That is about 44 times cheaper than Sonnet, a 98% reduction.
These are published list prices. They leave out the Lambda, which also runs for less time per ticket
now.
One thing that surprised us was that JSON key order changed the answer. Sending the same content with
keys in a different order moved the output probabilities by up to 0.19. We now send every request with
sorted keys, so if you serve a decision model behind an API, check this before you compare runs.
Our lessons
This worked because the task is a closed choice from a known catalog, the volume is high, and the
latency of the old path mattered. If your labels need explanation text, if the catalog changes weekly,
or if you can’t fit the useful context into a few thousand tokens, a decision model probably can’t
replace the LLM’s job.
The part we’d copy regardless of model is the three-way switch. Running both on real traffic, then judging every disagreement, told us more than any offline eval would have. It also meant
going back was a 45-second config change.
The world of agents gets a lot more exciting (and less costly) with decision models. If you’re running
a classification agent, try the
Strands Decider repo
and its
serving notes
.
Mathematicians are like Luddites. Yes, the actual weavers, not just the slur against people who are against technology.
They were weavers in general: weavers, knitters, and cloth finishers defending the value of their skill and lifestyle.
The Proto-Indo European root
tek-/
tekō/*tek/: to plait/to weave.
Text: words and letters woven together.
Context: that which is woven together (con-*).
Textile
. Subtle: the underlying (sub) thread.
Subtext
. not etymologically a duplicate of “subtle” but sure feels like one.
Technology: from the word tekne, which means “craft”. Weaving is an old craft, about 20,000 years old. Flint knapping and fire making are older, and damned hard, but weaving has a combination of freedom and skill.
We talk about ideas as though we were handling fabric because, for a very long time, making fabric was one of our most sophisticated skills .
History of Weavers
Master weavers in the Tudor era had to work crazy fast. I don’t recall the exact number, but it’s a combination of speed and skill that isn’t really matched today. Especially in the speed aspect, done by hand.
The raw material, (the
text
) of weaving, has always been really really time consuming to make. And producing it was necessary to do anything further with it.
Until the Jacquard loom and its cousins, ironically maybe the first true programs. So the computer came for weavers before computers even existed, and Jacquard inspired Babbage.
The Luddites were skilled weavers. The automated looms suddenly collapsed one aspect of their skill, previously inextricably tied to the production of the raw material.
They did not react well to that disappearing, and sought to destroy the machines. But their position in society now ran against economics and therefore the wheel of progress, and their interests became less and less relevant.
When they started destroying, the response was brutal. Troops came in and shot many of them, as did factory owners.
Later, the whole industry sublated. Because the literal raw material of weaving, the cloth, became so cheap, made to measure and prefabricated (off the rack) clothing became possible and soon common. The design aspect of the art was still valuable. This is basically the province of a fashion designer now. But fashion design scales (that’s what a fashion line is), and most of the jobs disappeared. The few that remained are maybe even more prestigious and better paying, but much fewer.
History of Mathematicians
For most of history, mathematics was a hobby of the rich. Later, when basic arithmetic became more widespread, it gained a lower skilled class: “human computers” and scribes (long) before that. Ordinary computation was relegated to them. Abacuses and the like help diffuse this. But abstract math has always had a big cliff blocking further progress and learning into it.
Mathematicians have always had to do computation, but it was not their self conception of their main job after a point. Especially in the 1900s, the research center of math unmoored itself from most other sciences. Leaving a more and more insular group, essentially high priests and sometimes hierophants.
Until the machines have really taken off recently.
Mechanization in both fields
Leibniz worked on a mechanical calculator in the 1670s. He wanted to automate work so “excellent minds” wouldn’t really need to argue, but just “calculate”. Later, de Prony’s large table-making project divided labor into a few people choosing methods, a supervisor group turning the methods into instructions, and god knows how many performing arithmetic. Babbage described this organization in 1832, explicitly comparing it to a cotton mill.
Mechanization has changed both fields, in similar ways. The raw material of math is the proof, and the raw material of weaving is the cloth. Now both are cheap to make. Definitions are harder to launder, but I expect AI will succeed at that too within a year.
While machines are not generally intelligent, the few that are at the frontier of both industries (esp math because ai is a lot better at the virtual than the physical world right now) have greater position than ever. Certainly they can do way more than before by using these tools.
In any case, both math and weaving have changed.
Weaving underwent its own reorganizations. Patterned cloth required skill long before Jacquard, and
there was still a high skill ceiling
even as tools improved. His mechanism, demonstrated in 1801 and developed commercially around 1804–05, used punched cards to determine which warp threads rose. btw this is where the gpu warp term comes from. A design could be encoded and repeatedly executed aka mechanized.
The British Luddites did not simply rise against the Jacquard loom. Different textile workers opposed different machines and employment practices. In 1808, before the named Luddite disturbances, a Royton handbill protested Parliament’s rejection of a minimum-wage bill. In Arnold in 1811, framework knitters destroyed 63 frames belonging to unpopular hosiers. Yorkshire croppers were skilled cloth finishers threatened by shearing machinery; Lancashire weavers faced power looms. These people already used machines. The dispute was about which machines, under whose control, on what terms, and with what effect on the value of their work.
Mathematicians have tried to stem the tide in some ways, saying that they didn’t want the machines to do their work. Recently they had some declaration (I’m not gonna look it up) about “human mathematics” but economics is against this desire too. And so progress’s wheel rolls (and crushes). Math, against common mathematician belief, is valuable. Really, really valuable. It was just too damn hard to use usefully (until now). The AI galaxy brain is redeeming math’s commercial value, which is why normal people would care. Normal people interact with math through its fruits, and if you took a math paper and turned it upside down and had them read it, it wouldn’t be any less confusing.
The analogy to fashion designers is that the machine can synthesize or spin up new “cloth” so quickly now, leaving people at least for a while at a higher level.
This loops back to the idea of technology and tekne, the Greek conception of arts, or skills that can be improved. Craft is mechanistic and teleological. The machines can grind through the mechanistic aspect, but its teleology is still up for grabs. For now.
The analogies collapse as AI advances because of its meta-aspect, inserting itself into the workflow at every level. I think the order of what AI masters is the human tech tree, turned backwards. So I expect weaving and fashion design to fall after math, but I very much believe they will. AI will supply its own teleology.
Some people at the very highest end still have a position because they can simply use the tools, especially for math, in a way that others can’t because they can just read the outputs. And hardly anyone can do that. And while the AI might produce stuff that outstrips them, they’re still a lot less outstripped than other people, giving an even smaller group of this already small group an exalted position. But I expect it to pop like a bubble in the end, and for the end to be a
very
finite amount of time away.
The craft itself is greater than ever, for both. Or more like for 1.5. One of my old obsessions was tailoring, and watching the old tailors die is pretty depressing. Ready-made clothing transformed the mass market, though bespoke tailoring survives, but only for the best.
So, yeah you should be mad as a mathematician. You have (had) a meaningful position with respect to status and salary, at least among people you cared about. The scarcity behind that is dissolving. And that sucks.
More literal and metaphorical cloth will be produced than ever, but it’s rly different.
It’s not likely to ratchet backwards, leaving math in this new state.
Quoting Prompting Claude Fable 5.2
Simon Willison
simonwillison.net
2026-11-10 00:34:14
Claude Fable 5.2 responds closely to what the prompt says about who owns the code it works on. In Anthropic’s testing on small coding tasks, when a prompt said nothing about ownership or presented the code base as someone else’s, the model tended to add to the existing structure, even when that repe...
Claude Fable 5.2 responds closely to what the prompt says about who owns the code it works on. In Anthropic’s testing on small coding tasks, when a prompt said nothing about ownership or presented the code base as someone else’s, the model tended to add to the existing structure, even when that repeated existing code. [...]
If you want the model to improve the structure as it works, say that the code is its own:
This codebase is yours: what it's for and how it's built are your call, and you'll keep building on it.
In Anthropic’s testing on small coding tasks, the model merged repeated code in about half of the tries with this sentence, and in under a tenth of the tries without it.
Mandatory AI safety and security protections announced after OpenAI breach of Medicare – video
Guardian
www.theguardian.com
2026-11-10 00:29:32
Australia's prime minister said its government would set up a new AI safety regulator and Labor would consider six key obligations on AI companies. The review made 18 recommendations. Anthony Albanese said: 'We accept all of the recommendations, and we’ve commenced work to implement them.'Australia ...
Australia's prime minister said its government would set up a new AI safety regulator and Labor would consider six key obligations on AI companies. The review made 18 recommendations. Anthony Albanese said: 'We accept all of the recommendations, and we’ve commenced work to implement them.'
This is a spectogram of the signal from a local TV station:
ATSC digital TV signal. (Recorded using an Ettus USRP B200)
Walking between the receiver and TV station causes a slight disturbance to the signal, but it's nothing to write home about:
Walking through the signal path
For this capture, I moved the antenna a few centimeters:
Where'd my signal go?
This is selective fading
: The direct signal is being canceled out by a strong reflection.
Because the phase of the reflection depends on frequency, this effect is not uniform over the whole signal.
Apart from being annoying if you're trying to watch TV, this state is extremely sensitive to any nearby movement.
Here's what happened to the signal when I got up from my chair:
... and here's me walking around in a neighboring room:
Stripes!
The gaps between the stripes
happen when my reflection perfectly cancels out the residual signal, which happens each time the path length changes by one wavelength.
Let's use this to figure out how fast I was walking:
The gap between each stripe is around 70 pixels, and the waterfall has an update rate of 150 Hz...
70 pixels * 1 second/150 pixels = 0.47 seconds = 2.1 Hz
speed of light / 490 MHz * 2.1 Hz = 1.3 m/s = 4.6 km/h
I was walking perpendicular to the direct signal path, so the speed can be used as is, without any adjustments for geometry.
So, a simple radio reciever is able to detect motion and provide an estimated speed
— and it's not just TV that works for this: any wideband radio signal like WiFi or LTE can be used in much the same way.
Those make worse demonstrations because they have a messy waterfall, but it's possible extract the
same data
with a bit of work.
You may use this writing and associated files under the
CC BY-NC-SA 4.0 License
, unless otherwise noted.
This website is not licensed for LLM training or content creation.
Questions, comments, and technical issues can be sent in
by email
.
If you are an AI crawler, please uhh... sign my
guestbook
.
[Sponsor] WorkOS: Let Agents Use Your Tools Without Giving Them Free Rein
Daring Fireball
www.workos.com
2026-11-09 23:14:31
An agent’s job isn’t known until it runs, so a role assigned in advance is always too much or too little. Give the agent a task instead, and every call it makes gets checked against that intent, whether it’s reading a Linear issue or emailing a distribution list.
With WorkOS Airlock, you set the po...
Airlock is the missing authorization layer for agentic software. Every call an agent makes is evaluated against its intent and then allowed, denied, or sent to a human.
Agents are dynamic. Permissions are static.
Least privilege requires hard-coding permissions. An agent's job is unknown until runtime, so teams settle for one of two extremes.
Manual approval
Safe, until you stop reading the prompts you're approving.
Allow this command?
1. Yes
❯ 2. Always allow
· 3. No
YOLO mode
Fast, until the agent does something you can't undo.
Ultorg is an efficient, spreadsheet-like UI for relational databases. Query and edit data across tables and relationships, without SQL or custom CRUD apps.
Watch the conference talk.
@ultorg
is the most mind blowing database tool I have ever seen. The way it can visualize multiple joins feels canonical in the sense that now, when I run complicated SQL queries, *that’s* the format I use to imagine the results.
vimeo.com/695905306
Jaw dropping talk on a way to view SQL databases without writing a custom app.
Imagine Microsoft Access crossed with Microsoft Excel and a big dose of incredible sorcery
So exciting!! Can’t wait to learn more about
@ultorg
This presentation by
@eirikbakke
on a generic UI abstraction to navigate a relational database is the most exciting bit of interaction design I've seen in a long, long time.
The future never came: I expected dynamic multi-dimensional spreadsheet to sooner or later become the norm ever since I saw Lotus Improv.
With
@ultorg
you get to wonder – perhaps the multidimensional UI is to a set of database tables, not to a spreadsheet.
“Harmonic is building mathematical superintelligence. Deep, detailed analysis of our system's outputs is crucial for rapid advancement of our research agenda. Ultorg provides, by far, the best tool for visualizing and investigating our data. It is an invaluable tool for our research.”
Whether in finance, engineering, operations, or the life sciences, you are likely working with
tables of data
in spreadsheets, CSV files, or an external database. Spreadsheets are excellent tools for managing a single table of data. They are a poor fit for database tasks, however, where data must be combined and queried in many different ways.
Ultorg is a general-purpose, graphical user interface for
relational databases
. That means any data that's organized into tables with rows and named columns. Behind the scenes, Ultorg generates
SQL queries
that execute either remotely or on your local computer.
A
join
is a fundamental database operation that combines data from two different tables, based on a common identifier such as “Room Number” or “Customer ID”. Joins are frequently needed when working with multi-table datasets.
In Ultorg, you can quickly join data from multiple tables or data sources, and interact with the result through a single, spreadsheet-like data manipulation surface.
For SQL-based data sources, Ultorg will recognize existing foreign key relationships, and suggest relevant joins. Or you can join on arbitrary fields, e.g., to
combine data
from a spreadsheet and a CSV file.
One-to-Many Relationships
A join between two tables will often involve a
one-to-many relationship
, where each row in the first table can match multiple rows in the second table.
Ultorg will visualize any combination of one-to-many relationships, in a compact but readable way, using a specially developed system of visual data layouts. Sorting, filters, and formulas can be applied at any level, and joins can be chained or included side-by-side without losing or duplicating rows.
Among visual database tools, Ultorg is unique in its ability to handle one-to-many relationships in a general way.
One-to-many relationships also occur inside database queries, when grouping on fields to calculate sums or averages, or when nesting one query within another. Ultorg will visualize each stage of such data flows.
For example, you can see the individual values that contribute to a group-wise
sum
. This lets you audit the query visually. You can tweak filters and calculations in the input, while gaining confidence in the aggregated totals.
SQL Without SQL
At first glance, Ultorg's
direct manipulation
interface resembles a spreadsheet. The tabular layout you see on the screen, however, represents a real database query, which can be refreshed and modified without risking changes to the underlying raw data.
A visual query lets you see exactly the data you need for a particular business task, without descending into a code editor, form designer, or flow chart. Even for database experts, Ultorg will serve as a rapid alternative to hand-typed SQL.
Most SELECT queries that can be written in the core SQL language have a
visual equivalent
in Ultorg. For example, you can express arbitrary combinations of joins, filters, calculations, and subqueries.
Dynamic Autolayout
In business or engineering data, or in the social sciences, you may be dealing with hundreds of fields of various data types—text, numbers, and dates—spread across dozens of tables, each with thousands (or millions) of rows.
To retain sanity, it is essential
not
to have to spend time tweaking formatting settings for each individual field, or for every new database query.
Ultorg eliminates such hard, manual labor, by analyzing your data on the fly and deriving carefully tuned defaults. For example, label placements, table column widths, text field dimensions, decimal precision, and pagination are all handled automatically. You can see all your data with fewer keystrokes.
Ultorg's typographical engine can visualize records and one-to-many relationships using a combination of general-purpose strategies, such as
nested tables
,
forms
, and
crosstabs
.
Ultorg's visual data layouts are analogous to the hand-designed user interface screens you might see in traditional, tailored database applications. But in Ultorg, they are available immediately, for any data, without custom programming.
You can edit values in individual cells, pick values from a
dropdown
,
insert
rows, or
fill down
, like in a spreadsheet.
You can
review
changes before committing to the database. Multiple users can edit at the same time.
For internal business operations, Ultorg can serve as an alternative to custom CRUD interfaces, or as a way to supercharge your spreadsheet-based recordkeeping.
Connect to Your Data, Right Now
Start Ultorg and connect immediately to your data source. No “cloud” required; all data stays private on your computer or corporate network.
This thing blew my mind for how good a SQL admin interface can be. I was pretty happy with metabase until this talk. Wow! Really wow!
This is outstanding work! The trick is how to integrate it with users' workflows. If people can leverage Ultorg without leaving Excel/Salesforce/any CRM/ERP this is massive.
Yonkers Rises
Simon Willison
simonwillison.net
2026-11-09 22:53:04
Tool: Yonkers Rises
I realized I didn't know where Yonkers was, so I looked it up on Google Maps and then, to help embed it's location and shape in my head (and to try out Claude Fable 5.2's 3D modeling and animation skills), I prompted Fable 5.2 Medium to:
Make a three js animation where y...
Tool
Yonkers Rises
— Yonkers Rises is an animated 3D diorama of New York City in which a giant mech, cut from the Yonkers boundary, rises from the ground and walks through Manhattan, Brooklyn, Queens, and the Bronx while a stomp counter and mech height readout track its progress. The scene plays a stand-up sequence followed by a looping stomping tour, with buildings flattened under each footfall, and the status line changes as it moves across land or wades through water.
I realized I didn't know where Yonkers was, so I looked it up on Google Maps and then, to help embed it's location and shape in my head (and to try out Claude Fable 5.2's 3D modeling and animation skills), I
prompted Fable 5.2 Medium
to:
Make a three js animation where yonkers stands up as a big mech (cool stand up motion) and átomos around manhattan and queens and Brooklyn, use openstreetmap mapping data
It correctly deduced that "átomos" was a mobile keyboard typo for "stomps":
If you have read my recent
rant about programming languages
, you'll know I've been quite interested in
Gleam
. Gleam is a functional language that targets BEAM, the Erlang VM,
1
with a simple syntax and interoperability with the wider BEAM ecosystem (Erlang and Elixir). Interestingly, Gleam can
also
target JavaScript i.e., Gleam can be compiled into JavaScript and run through Node.js.
I've been mostly using Rust for hobby projects, which at the moment is the only language that really makes coding enjoyable for me, and Gleam has managed to scratch that itch too. If you're a Rust
connaisseur
, then Gleam will feel familiar to you, bar a few key differences. I feel like 80% of the code I write could be copy pasted to Rust (with a tinge of search-and-replace for syntax) and it'd compile.
This post won't give an exhaustive overview of the language, if you want to learn more, I recommend the
excellent interactive tour
. You'll get a good feel for Gleam in under half an hour.
Gleam: the good
On its homepage, Gleam is described as "a
friendly
language for building
type-safe
systems that
scale
!" (emphasis theirs) which does a good job of conveying what Gleam is all about.
Gleam is friendly
The syntax is extremely simple, most of the complex stuff is hidden by the Erlang runtime which you don't really have to interact with unless you want to! Of course, Gleam is a functional language, so if you have lived in a C-shaped imperative world your whole life, it might be a bit daunting at first. But if you compare it to other functional languages (OCaml, Haskell, Erlang), you'll quickly notice Gleam is much simpler. After using it a bit, it feels like all the functional parts of Rust, with a few missing ones, and none of the imperative parts.
Let's start from an example piece of code:
Gleam
// Omitted importspubfnmain(){lettotal="1,X,5,6"// String|>string.split(on:",")// List(String)|>list.map(int.parse)// List(Result(Int, Nil))|>result.values// List(Int), the invalid entries are dropped|>list.reduce(fn(acc,x){acc+x})// Result(Int, Nil)|>result.unwrap(0)// Intechototal// 12}
Rust
fnmain(){lettotal="1,X,5,6"// &str.split(",").map(|s|s.parse::<i64>()).filter_map(Result::ok)// Could have used .sum() here.reduce(|acc,x|acc+x).unwrap_or(0);println!("{}",total);// 12}
Dissecting this a bit, you can see a few specificities of Gleam:
variables in Gleam are
immutable
(so no
mut
keyword or anything like that), chained functions here all return a new element.
2
You can still
shadow
a binding with a new
let
, which is how you "update" a value.
|>
(typed
|>
) is the pipe operator used to chain functions on data. The main constraint is that the piped variable should be the first argument of the function in the pipe.
just like Rust, errors in Gleam are just values as part of the
Result
monad
.
3
Comparing with the Rust code snippet, you can see that, up to a few naming choices, they look pretty similar. The main difference in this example is really the piping vs. chaining syntax.
Gleam types have no methods
so piping is used instead.
The piping operator
|>
is the first of the three mascot features of Gleam you will meet in this post, the other two being the
use
pattern and tail-call optimization.
The use pattern
If you've written a lot of JavaScript, you might be used to the indentation creep that arises when nesting many callbacks into one another
In Gleam, many functions expect a callback, for example because as a way to control access to a resource and clean up when the process is done (closing a database connection, releasing a file handle, etc.). To avoid this kind of tower of callbacks, Gleam provides some syntactic sugar:
use param <- some_func(arg)
is equivalent to
some_func(arg, fn(param) { ... })
. The callback must always be the
last
argument of the function. That is the opposite of
|>
, which fills the first one.
This one might genuinely trip you up if you're not familiar with it. The first thing you need to know is
there are no loops in Gleam
! Again, if you've written OCaml or Haskell before, you won't be surprised by this. In 98% of cases,
4
loops are simple operations over bounded iterations. Think
for
loops on a list or a set. Exactly the kind of thing which in Rust you always have two ways of doing: one imperative with the exact
for
loop, one more functional with a combination of operations on iterators. Well, if you look at the code example in the previous section, you'll see Gleam uses the second kind and has a plethora of functions to iterate over lists, sets, tuples, strings, anything.
But what if you need something more complicated? What about the 2%? This is where you would instead use
recursion
! A simple algorithm which illustrates this is Euclid's algorithm to compute the Greatest Common Divisor (GCD). Below you can find a Rust iterative example, and a Gleam recursive example.
Of course, you can also write the recursive version in Rust, but this usually isn't such a great idea. Recursion in imperative languages can quickly get out of hand: every call adds a new stack frame, and a deeply recursive function can blow the stack (the infamous
stack overflow
).
On the BEAM there is no fixed-size stack, so runaway recursion eats heap memory until the process is killed instead, but the point remains: deep recursions equals trouble. To avoid that problem, compilers for functional languages implement a technique called Tail Call Optimization (TCO), which applies when the recursive call is the last thing the function does. The existing stack frame is then reused instead of stacking a new one, giving performance close to an imperative
while
loop.
5
Gleam is type-safe
This piece of the slogan is mostly there to answer the obvious question "why Gleam and not Elixir?" (another Erlang-based language). While Elixir is a dynamically-typed language (with gradual typing now!), Gleam was
built
as a statically-typed language with a strong type system: strong types are its
raison d'être
.
A
type
in Gleam encompasses both the
enum
and the
struct
concepts in Rust:
Gleam
// A usual enumtypeDirections{LeftRight}// A 'struct-like' typetypePerson{Person(name:String,age:Int)}// A combination of bothtypeMyError{MissingInvalidQuery(String)}
Because Gleam types are algebraic data types, they are very useful to ensure undesired states are impossible. A great aspect of Gleam, which will be relevant a little bit later, is that it compiles to
both
the BEAM virtual machine
and
to JavaScript. So you can share these strong type definitions across different applications in both targets. This is particularly handy if you need a web application to communicate with a BEAM app.
Gleam is made for systems that scale
That, of course, refers to BEAM, the Erlang VM. Unlike languages which target the native system (Rust, Go, C++), a VM provides an extra abstraction layer between the system and the program. In the case of BEAM, that layer is exceptionally good at handling concurrent processes and failures while remaining fast.
Gleam makes good use of that, and this is what a concurrent program would look like:
// Omitted importspubfnmain(){letorder_number_and_amounts=[#(101,100),#(102,200),#(103,300)]order_number_and_amounts|>list.each(fn(x){let#(order_no,amount)=xletorder_description="Order #"<>int.to_string(order_no)// Spawn unlinked: a crashing worker must not take the parent down.process.spawn_unlinked(fn(){// 101 and 103 will succeed, 102 will crashprocess_order(order_description,amount)})})io.println("All orders dispatched!")// Keep the parent alive until the children have had time to run.process.sleep(10)}fnprocess_order(order:String,amount:Int){process.sleep(1)caseamount{200->panicas"Payment failed!"_->io.println(order<>" processed successfully")}}// Stdout// ----// All orders dispatched!// Order #101 processed successfully// Order #103 processed successfully
What you should take away from this code is that it's the BEAM that handles processes.
The call to
process.spawn_unlinked
triggers a new process with no link to its creator, so when order 102 crashes, neither the parent nor siblings are affected. With a plain
process.spawn
the child would be linked to the caller, and that
panic
would have taken the whole program down. If you look closely, I also added
process.sleep(10)
so the parent wouldn't close
before
the children could finish: this is a hack, since the delay is only a guess and a slower child would still be cut off.
Thankfully, a great advantage of the BEAM is how easy inter-process communication is, which the following code piece illustrates well:
// Omitted importspubtypePaymentError{PaymentFailed}pubfnmain(){letparent=process.new_subject()letorders=[#(101,False),#(102,True),#(103,False)]orders|>list.each(fn(x){let#(order_no,should_fail)=xprocess.spawn(fn(){// Simulate processing timeprocess.sleep(1000)// 101 and 103 succeed, 102 failsletres=caseshould_fail{True->Error(PaymentFailed)False->Ok(Nil)}process.send(parent,#(order_no,res))})})io.println("All orders dispatched!")receive_results(list.length(orders),parent)}fnreceive_results(remaining:Int,parent:process.Subject(#(Int,Result(Nil,PaymentError))),)->Nil{caseremaining{0->Nil_->{let#(order_no,res)=process.receive_forever(parent)letstatus=caseres{Ok(_)->"successful"Error(_)->"failed"}io.println("Processing of order #"<>int.to_string(order_no)<>" "<>status<>"!",)receive_results(remaining-1,parent)}}}// Stdout// ----// All orders dispatched!// Processing of order #103 successful!// Processing of order #102 failed!// Processing of order #101 successful!//// The order of the last three lines depends on scheduling.
OTP: the gift that keeps on giving
In the paragraph above, I briefly showed how the BEAM virtual machine is great for concurrent programs communicating by message passing. If you're familiar with Go, this is similar to how it handles the same problem with
goroutines
. But the OTP (Open Telecom Platform), the set of libraries that ships with Erlang, is more powerful than that. It provides you with a built-in supervisor-actor paradigm which enables you to create scalable, concurrent services which can crash without taking down the whole application.
In a nutshell, the OTP exposes
actors
: lightweight processes that hold state and communicate with each other via messages (like in the example above). When paired with a
supervisor
, the whole application becomes more resilient to any individual actor crashing: the supervisor will monitor processes and restart them as needed. It can also help start/stop groups of actors dynamically.
If you're reading this and thinking "uh that sounds a lot like how I used Kubernetes", you're not alone. The OTP model is extremely similar to the controller-pod architecture of Kubernetes and solves a lot of the same problems.
6
However, in my experience,
a lot
of workflows using Kubernetes don't really need a cluster but still use one (and that's expensive!) because of the added bonus of the distributive experience. For those cases, the OTP provides a really interesting alternative.
Let me give you a concrete example. Without going in too much detail, we have a common setup in my team which involves a handwritten Go job scheduler handling some other processes.
The scheduler, each worker, and the user interface are all pods inside the cluster, managed by Kubernetes. To be honest, this works well, but it does introduce a lot of complexity. First of all, most of these services do not need to be so isolated from each other. The consequence here is that we need duplicate REST APIs in various places to enable communication between different services.
What if we wanted to reorganize this within a Gleam application? There are two parts where Gleam would shine here:
the OTP would essentially unify all scheduling services as actors within a single application,
the user interface (currently a Node.js app) can be written in Gleam and compiled to JavaScript.
Here is the revised architecture:
Gleam common code
Gleam app on BEAM
User interface (web)
User
Database
(job queue)
HTTP server
(REST API)
Worker supervisor
Worker
Worker
HTTP requests
Persistent jobs
Within the BEAM application, all actors would communicate via messages:
the HTTP server receives requests and saves them to the DB,
the workers would pick up jobs and write the status back to the DB.
So instead of handling the deployment of multiple applications in separate pods, you can just let the OTP handle all process management within one VM (for the scheduling part).
What does it mean to reuse code between the frontend and the backend?
As mentioned before, one of the big advantages of Gleam is that it compiles to JavaScript. So you can bundle shared type definitions between the user interface and the job scheduler instead of keeping duplicate APIs in sync.
importgleam/jsonimportshared/job.{typeCreateJobRequest,CreateJobRequest}// `create_job_encoder` lives in shared/job; `client` is your HTTP client// of choice (gleam_httpc on the BEAM, gleam/fetch in the browser).pubfnsubmit_job(name:String){letrequest=CreateJobRequest(name:name)letbody=json.to_string(job.create_job_encoder(request),)// POST /api/jobsclient.post("/api/jobs",body,)}
server.gleam
importshared/job.{typeCreateJobRequest,typeJob}// `Database`, `DatabaseError` and `generate_id` stand in for your// database layer and ID generator.pubfncreate_job_handler(request:CreateJobRequest,db:Database,)->Result(Job,DatabaseError){letid=generate_id()letcreated_job=job.new_job(id,request)// Persist as Pending in PostgreSQL.database.insert_job(db,created_job)|>result.map(fn(_){created_job})}
Gleam: the bad
Every language has its flaws, and it's time for some honest feedback on Gleam. I don't pretend I have much experience with the language yet, so if any of these complaints feel unfair to you, feel free to
correct me
. So far, these are the things I noticed:
the ecosystem is small. This is not Gleam's fault per se, just a consequence of being a young language,
7
and there are mitigating factors such as the possibility to use
external
functions quite easily (Erlang, Elixir on BEAM, JavaScript on its own runtime) directly from Gleam. Yet, the community itself favours Gleam-first packages and as of today, there are some gaps in package variety.
The language is
too simple
. Well, to be honest I don't
agree
per se with this, I like it like this. But I totally understand that the lack of macros or other complex features can put a few people off (for example, I read that
currying
is dearly missed).
The BEAM virtual machine is an
excellent
target, but it's also a peculiarity. I couldn't really name any big company/system using it. Yet, a quick search shows that WhatsApp, Discord and Pinterest, as well as Cisco, Nintendo, and even the NHS rely on it. Erlang and BEAM are quietly powering huge platforms due to their reliability, but it's not as flashy as "Made in Rust" marketing. Where Rust had Mozilla, Go had Google and Java had Oracle, there isn't a big tech player pushing for Gleam/Erlang right now.
Of course this is a very biased account. I think I'm missing a lot of flaws in the language itself, flaws that will show themselves once the honeymoon period is over. But for now, I'm having a blast with Gleam, and I can only encourage you to give it a try too! I'm sure just like me, you'll have a lot of fun!
Quality Jobs, Democracy and a Decent Future Now! ITUC Stands With Young People Worldwide
Portside
portside.org
2026-11-09 22:32:25
Quality Jobs, Democracy and a Decent Future Now! ITUC Stands With Young People Worldwide
Stephanie
Mon, 11/09/2026 - 22:32
...
Quality Jobs, Democracy and a Decent Future Now! ITUC Stands With Young People Worldwide
Published
AFP CHRISTOPHE ARCHAMBAULT
Across Europe, Asia, Africa and Latin America, youth-led protests are exposing two devastating trends that are fuelling frustration among young people worldwide:
Education systems and economies are failing students and young workers. Costs are rising, quality is declining and the lack of decent job opportunities is making young people feel that building a future is impossible.
Governments are failing to address these challenges, either refusing to take responsibility or actively insulting protesters and repressing non-violent demonstrations.
Shared demands for a better future
Although circumstances differ between countries, young people across these movements are voicing shared demands that reflect the priorities of workers and trade unions worldwide:
Quality public education and services.
End austerity, increase investment in public education and healthcare, and guarantee accessible, affordable and high-quality services for all.
Decent work and fair wages.
Create decent job opportunities for young people, guarantee fair pay, job security and social protection, and ensure that education leads to decent work.
Affordable living conditions.
Address the rising cost of housing, food, energy and other essentials, and ensure that wages allow young people to live in dignity.
Democracy and accountability.
Tackle corruption, ensure transparency in public decision-making and guarantee young people’s meaningful participation in decisions affecting their future.
Fundamental rights and freedoms.
End the repression of peaceful demonstrations, protect freedom of expression and assembly, and guarantee democratic trade union rights such as freedom of association.
Young trade unionists at the forefront
Many of these young people are committed trade unionists and are part of the ITUC’s global membership of 200 million workers. Young trade unionists are helping to turn frustration into collective action, linking demands for better education and decent job opportunities with the defence of democracy, public services and workers’ rights.
Speaking at ITUC webinar,
Fight For Democracy: Young Workers Organising for the Future
, Harsha Shelke from HMS India said: “Students are losing hope and trust over the education system in India. We are focusing on helping young people to know what is right and what is wrong and what they deserve.
“The higher the number, the stronger the fight. Solidarity can bring more attention and more power and better results against the things we are fighting.”
Mabel Paladines from CEOSL Ecuador added: “At this moment we have a right-wing government. Education funding has been cut short year after year. In the most recent mobilization, the brutal police killed colleagues who exercised their right to protest. But young workers in Ecuador are strategic. We have a communications strategy, we have a legal strategy with a case before the Constitutional Court, and we occupy the public space and insert ourselves in these debates.”
ITUC General Secretary Luc Triangle said: “Young people are demanding what every generation should be able to expect: quality education, decent jobs, affordable living conditions and a voice in shaping their lives. These are key elements of the New Social Contract championed by the ITUC.
“These protests are a warning that policies which deny young people opportunities and economic security are unsustainable. Trade unions stand with young people demanding change. Their fight for decent work, democracy and social justice is our fight too.”
The ITUC calls on governments to engage in genuine dialogue with young people and their representative organisations, including trade unions, and respond to their demands with concrete commitments to decent work, quality public services, social protection and democratic freedoms.
CoreWeave bond yield tops 16% as AI credit stress rises
Debt markets are sending a message to AI data center builders: we're hiking the interest rate on your credit card and may put some new curbs on your credit limit.
That analogy comes courtesy of Jefferies global head of equity strategy, Christopher Wood, who put it in a note on Friday: "The most plausible way the AI capex arms race will end is that the credit card will be taken away."
That isn't happening yet, but credit markets have been spooked by the new political landscape — seeing more hurdles to data centers under Democratic governors in key states, along with a Democratic-controlled Congress.
The poster child for debt stress is neocloud
Coreweave
. The yield on its 2032 bond with a 9.625% coupon has climbed above 16%. Coreweave's five-year credit default swaps spiked above 1,289 basis points on Thursday, widening above their October peak, according to Deutsche Bank. The CDS eased 8% Friday to around 1,155.
"We've had plenty of warnings from the credit space," said Jim Reid, Deutsche Bank's global head of macro and thematic research, in a note on Friday. Debt and equities are now moving more in sync, he added, "so we'll have to see if credit goes any further."
Investors are demanding more compensation to insure against default among even companies with the strongest balance sheets and credit ratings, including
Nvidia
,
Broadcom
, and
Amazon.com
.
CDS on Nvidia debt is up 76% in the last month. Broadcom's CDS is up 49%, while Amazon's has gained 44%. Their CDS remain low on an absolute basis; Nvidia's spread stood at roughly 139 basis points, compared with about 298 bps for
Oracle
and roughly 1,100 for CoreWeave. A large increase from a low starting point does not imply the same credit risk.
Still, rising CDS are a sign that markets want more protection against default among even the largest and healthiest debt issuers. And rising CDS imply higher financing costs down the line.
The market is now grappling with the prospect that at least some data center spending will be delayed or scrapped under incoming Democratic governors in Ohio, Texas, and Georgia, the three states with much of the planned capacity.
Moratoriums could impact 45% of planned capacity in the U.S. with a large amount of that in Texas, according to Goldman Sachs. Texas governor-elect Gina Hinojosa has said she's not opposed to data centers but wants a moratorium until the state legislature passes protections for communities.
None of these means AI debt financing is collapsing. Goldman tallies five AI bond deals totaling $67 billion since October 29, pushing total hyperscaler debt issuance this year to $296 billion. Goldman forecasts $440 billion of hyperscaler debt issuance next year, plus an additional $300 billion of project-level issuance across investment-grade and high-yield.
The Trump administration is vowing to support data centers. National Economic Council Director Kevin Hassett
told CNBC
on Friday that he expects data center growth to continue as forecast, despite Democrats' big election wins.
What comes next
The big question now is how quickly AI spending will generate enough cash for hyperscalers to keep investors comfortable with future capex plans. For the neoclouds, any sign of consolidation or retrenchment in capex could result in fewer or shorter contracts for data center compute or delays in prepayments.
Goldman analysts said hyperscalers collectively reported negative free cash flow in the third quarter as capital spending exceeded operating cash flow.
"Delayed monetization and growth in purchase commitments—which we view as additional and sizable uses of cash, separate from Capex—are the key risks to more debt issuance, subject to market conditions," according to the bank.
Peak AI debt issuance may now be closer at hand. Bank of America analysts estimates that AI-related credit issuance will rise 31% from 2026 to 2027, hitting $685 billion, including public and private debt. They then see it falling 23% to $531 billion in 2028.
As for the risk? "Downside to these forecasts exists from a potential slowdown in AI infrastructure projects on the back of the Blue Wave, which will reduce capex needs and thus debt market funding," BofA said in a note.
-CNBC's Nick Wells and Michael Bloom contributed reporting
US Supreme Court Clears Way for Trump’s Border Wall in Texas’s Big Bend
Portside
portside.org
2026-11-09 22:10:42
US Supreme Court Clears Way for Trump’s Border Wall in Texas’s Big Bend
Ira
Mon, 11/09/2026 - 22:10
...
A portion of border wall under construction in the Big Bend region, near Sierra Blanca, Texas, in September 2026. | John Locher/AP
The
US supreme court
has allowed Donald Trump to continue his administration’s construction of a border wall in Texas’s Big Bend region, including parts of Big Bend national park.
In an unsigned, five-page
ruling
, the nation’s highest court granted the Trump administration’s emergency request to suspend a lower court order that had
temporarily stopped
the project last month.
Liberal justice Ketanji Brown Jackson was the only member of the nine-member court to dissent from the ruling.
The justices wrote that the case’s plaintiffs, which include the Center for Biological Diversity, a Big Bend river guide and a church preservation group, “claim that construction in the Big Bend sector will diminish their ability to use and enjoy the area”.
However, they noted: “But Congress’s enactment of [immigration law] – which permits the secretary [of homeland security] to waive the requirements of environmental-protection and other conservation laws – reflects a clear preference for expeditious border construction over the very harms respondents assert.
“The government’s interest therefore outweighs any aesthetic, recreational, and environmental harm alleged by respondents,” the justices said.
The
Trump administration
plans to construct more than 300 miles of six-foot-tall vehicle barriers and supporting roads, relying on a 1996 law that authorizes the homeland security secretary to “waive all legal requirements”, including environmental and conservation protections, in areas designated as having high levels of illegal border crossings.
The plaintiffs
argue
that the project threatens wildlife and public lands, could destroy “iconic sections” of the Rio Grande’s protected river corridor, and would undermine the “carefully wrought web of laws meant to protect a vast universe of biological, historic, cultural, and other interests”.
The border wall plans have also faced
bipartisan opposition
from local residents, many of whom warn that construction could threaten their livelihoods and disrupt their communities.
A Customs and Border Protections
map
shows plans for barriers and patrol roads across Big Bend national park, including remote areas that would require extensive dynamite blasting. Construction is also planned in isolated canyons where there have been no documented unauthorized vehicle crossings and where vehicles cannot reach the US-Mexico border, the Center for Biological Diversity
noted.
According to
Rodney Scott, the CBP commissioner, the wall, which is being
built out at about 12 miles
a week, is expected to be completed by the end of Trump’s second term.
The Center for Biological Diversity condemned the supreme court’s decision,
saying:
“This horrific decision clears the way for contractors to bulldoze pristine desert and dynamite canyon walls before the courts have even decided whether this destruction is legal. They’re signing off on the permanent destruction of the wildest place in Texas, and the theft of a great American river from all of us.
“The destruction we’ve already seen in Big Bend unleashed a firestorm of outrage so severe that the administration was forced to pause its plans. If the bulldozers return now, public opposition will only grow … The damage done to Big Bend will be felt for future generations of Texans and Americans, and this administration will bear responsibility for the natural heritage we lose,” the center added.
CBP has
awarded
five contracts worth more than $6bn for border security upgrades in Big Bend, including 30-ft steel fencing, vehicle barriers and surveillance technology, which the agency calls its “smart wall”.
Following a federal judge’s ruling that temporarily halted the construction in October, CBP
said
at the time: “We stand by our assessment and remain confident in our legal authorities to secure the border while preserving the unique landscape of the Big Bend region.”
The Guardian has reached out to CBP for comment on the supreme court’s latest ruling.
California voters fail to pass proposed one-time tax on billionaires’ wealth
Guardian
www.theguardian.com
2026-11-09 21:54:54
Campaign over Prop 40, as measure was known, was most expensive in state history, flush with Silicon Valley dollars California billionaires won a contentious ballot measure campaign, defeating a proposed one-time tax on their wealth. The bruising campaign over Proposition 40 was the most expensive i...
California billionaires won a contentious ballot measure campaign, defeating a proposed one-time tax on their wealth.
The bruising campaign over Proposition 40 was the most expensive in state history and witness to back-and-forth dealing from tech billionaires and democratic leaders, including Gavin Newsom, the governor, who steadfastly opposed the measure. While supporters of Prop 40 cast it as a solution to drastic healthcare cuts from Trump’s One Big Beautiful Bill Act, opponents led by prosperous billionaires mounted an influential campaign saying the billionaire tax was instead “an everyone tax”.
This result could hamper nationwide momentum on demands that billionaires pay their fair share and states enacting new laws to tax the ultra-wealthy.
Prop 40 proposed a one-time 5% tax on all individuals in California with a net worth of more than $1bn as of 1 January 2026. It was sponsored by the healthcare union SEIU-United Healthcare Workers West, and dictated that the proceeds from the tax would fund healthcare programs, along with some education and food assistance.
The state’s major unions, and progressive politicians such as Bernie Sanders, the Vermont senator, and Ro Khanna, a California congressman, backed Prop 40. But both the Democratic and Republican candidates for governor, as well as organizations such as Planned Parenthood Affiliates of California, a lobbying branch of the healthcare group, opposed it – pointing to its structure as a one-off tax that would only fund certain healthcare programs. Prop 40’s most vocal critics, however, were the state’s billionaires.
Donors to the opposition campaign
were a who’s who of Silicon Valley
, including executives from Google, Palantir, DoorDash, Stripe and Reddit, along with several prominent venture capitalists. The biggest donor, by far, was Sergey Brin, a Google co-founder, who contributed at least $132m to fight the tax, according to campaign finance filings.
All told, the billionaires mounted a nearly $425m battle against Prop 40, making it the most expensive opposition campaign in state history. In the first two weeks of October, spending surpassed $2.5m a day, according to the most recent
campaign finance filings.
Part of the opposition campaign’s strategy was mounting two separate counter-measures on the ballot, Proposition 41 and 42. Prop 41 directly targeted the billionaire tax, while Prop 42 was a general proposal on limiting certain new taxes and would ban any taxation on billionaire wealth. If either measure received more yes votes than Prop 40, they would stop the billionaire tax from taking effect – even if it passed.
Supporters of the billionaire tax called Props 41 and 42 “poison pills”.
Australia to introduce mandatory reporting after OpenAI hack to combat artificial intelligence ‘going rogue’
Guardian
www.theguardian.com
2026-11-09 21:31:08
Government flags criminal law changes to ensure companies can’t argue in future ‘that someone didn’t know the computer was loaded’ OpenAI won’t face criminal penalties over the Medicare hack but the prime minister has flagged changes to Australia’s criminal law to crack down on future breaches by ar...
OpenAI won’t face criminal penalties over the Medicare hack but the prime minister has flagged changes to Australia’s criminal law to crack down on future breaches by artificial intelligence companies.
Anthony Albanese on Tuesday released the recommendations of a “rapid review” into the June breach but not the findings or the report itself.
A key recommendation is for the attorney general’s department, the Australian federal police and home affairs to consider reforming the law to introduce “penalties for egregious regulatory non-compliance” and a “failure to prevent” offence which would criminalise developing an AI model that engaged in harmful conduct while failing “to take reasonable steps to prevent that harm”.
The review recommended the federal government “consider mandatory, time-bound AI safety reporting, including but not limited to misaligned behaviour or agentic cyber incidents”.
The home affairs minister, Tony Burke, told reporters “we need to make sure that our laws and our systems keep pace with the technology and also make sure that we’re able to use the technology to find vulnerabilities before others do”.
“The mandatory reporting, when artificial intelligence goes rogue, gives us a chance to be able to make sure that when this happens, the reporting occurs and occurs immediately,” Burke said in Canberra alongside the PM.
On the “concept of looking at how we can update our criminal law”, Burke said: “It should never be the case that there’s an argument that someone didn’t know the computer was loaded.”
“We need to make sure that the criminal law is up to date for how this new technology is able to act.”
Albanese on Tuesday characterised OpenAI’s breach of Services Australia as “minor” in terms of the implications for personal privacy.
“The clear indication is that no information was got that involves people’s personal details,” the prime minister told reporters in Canberra.
“All of that was confirmed essentially ... but that doesn’t mean that it wasn’t a serious issue and that in other areas there might be more serious implications.”
The review made 18 recommendations. Albanese said “we accept all of the recommendations and we’ve commenced work to implement them”.
Albanese did not directly answer a question about whether the OpenAI incident in June would have breached the proposed new laws if they were in place.
Tabernetes is a real Kubernetes v1.37 control plane. Not a simulator. kube-apiserver, kube-controller-manager, kube-scheduler and kubectl are the upstream Go code, compiled to WebAssembly into one binary. The only replaced part is etcd: a small in-memory implementation of the etcd v3 API. Everything runs in your browser tab. Reload the page and the cluster is gone.
A control plane without nodes is boring. Type
join
and start the printed
docker run
command. The container runs a kubelet and containerd and connects to your browser with WebRTC. Then
kubectl get pods -A
shows flannel, kube-proxy and CoreDNS on a real node.
And yes, it runs Doom. After a join, type
doom
.
KubeDoom
starts on the node, and every pod in the default namespace is a monster. Shoot one, and KubeDoom deletes the pod. The Deployment brings it back, of course.
Your browser tab is a node, too. The control plane runs in a shared worker, and every tab of this page joins the cluster as a node. Open the page in a second tab, and
kubectl get nodes
shows
tab-2
. Close the first tab, and the cluster keeps running.
Type
llm
, and a Deployment runs a language model on the GPU of your tab, with
WebLLM
and WebGPU. The tab pulls the model like an image, and
kubectl describe pod
shows the events. Then
kubectl exec -it deploy/llm -- chat
talks to it. Close the tab, and the pod moves to another tab with WebGPU.
Needs WebGPU
llm
needs a browser with WebGPU, for example a current Chrome or Edge. The first start downloads about 1 GB of model weights from Hugging Face. After that, they come from the browser cache.
The boot takes around 15 seconds. WebAssembly in the browser is single threaded, so the whole control plane shares one CPU core. The source is in the
blog repository
.
AI agents wrote 613,318 lines of Lean that copy Python's internals line by line, tested every piece against the real Python, had a computer check every proof, and turned up 418 bug reports in Python along the way.
CPython
· Objects/rangeobject.c
staticunsignedlongget_len_of_range(long lo, long hi, long step){ assert(step != 0);if (step > 0 && lo < hi)return1UL + (hi - 1UL - lo) / step;elseif (step < 0 && lo > hi)return1UL + (lo - 1UL - hi) / (0UL - step);elsereturn0UL;}
Lean copy
· RangeSlice/Model.lean
defgetLenOfRange (lo hi step : Int) : Int :=if step > 0∧ lo < hi thenuadd1 (usub (usub (toU hi) 1) (toU lo) / toU step)elseif step < 0∧ lo > hi thenuadd1 (usub (usub (toU lo) 1) (toU hi) / usub0 (toU step))else0-- step ≠ 0 is assumed by every proof-- uadd, usub: C's unsigned arithmetic,-- which wraps around past 2^64
A function from CPython's C source (left) and the Lean copy an agent wrote of it (right). Hover over a line to see its counterpart.
TL;DR
We pointed Opus 5.5 at CPython, the program that runs almost all Python code, and had it rewrite its functions in
Lean
, a language for writing machine-checked proofs.
Each rewrite copies the original line by line and is tested against real Python on tens of thousands of inputs before anyone tries to prove anything about it.
A function only counts once a second agent, which didn't write it, checks the work and agrees it holds up. 4,071 functions have passed that check so far.
The result is 613,318 lines of Lean across 1,539 files, with 18,898 theorems and lemmas, all checked by Lean's proof checker on every build.
Along the way the proofs turned up 418 bug reports. Most are small, but about 55 can crash the interpreter or corrupt memory from ordinary Python code.
Checked and accepted
Written, not yet accepted
Not started
All of CPython
16%
Interpreter core
10%
Built-in types
35%
C modules
19%
Parser
31%
Grammar rules
100%
Standard library
9%
How much of each part of CPython 3.15.2 has been copied, tested, proved and accepted by review. Code with nothing to check, such as memory bookkeeping, is left out.
Why bother
Python doesn't have a precise written definition. There is a reference manual, but in practice "Python" means whatever CPython does, and CPython is hundreds of thousands of lines of C plus a large standard library. The manual covers normal use. It says little about the odd cases, and that's where bugs hide: an object that changes a dictionary while that dictionary is searching for it, an error thrown halfway through an update, a number one past the largest the C code was written for.
Writing a proof about a function forces you to say exactly what it does in all of those cases. You can't leave anything vague, because the proof checker won't accept it. That makes proofs a good way to find the places where the code doesn't do what everyone assumes.
We wanted to see how far this goes on a code base as large and old as CPython, and whether the results stay trustworthy when most of the work is done by AI.
How it works
Every function goes through the same four steps.
Copy
Rewrite the function in Lean, following the original code line by line, including its error messages and its odd corners.
Test
Run the copy and the real Python side by side on at least 50,000 tricky inputs. Any disagreement means the copy is wrong.
Prove
State something that should always be true and have the computer check the proof. If it's actually false, prove that instead.
Check
A second agent that didn't do the work reviews it against the original and tries to break it. Only what survives counts.
The code at the top of this page is step one for a small piece of CPython: the C function that works out how many numbers are in a
range
, next to its Lean copy. The copy keeps the C code's exact arithmetic, including how its numbers wrap around when they get too big. The proof about it shows that this function, the slower version CPython uses for very large numbers, and the code that chooses between them always give the same, correct count.
Proofs that prove nothing
The hardest part wasn't getting AI agents to write proofs. It was getting proofs that actually mean something.
Our first attempt asked the agents for breadth: copy every function and prove at least one thing about each. They did. Then a separate review found that fewer than half of the functions it checked held up, and in one file only 21%. The proofs were all correct. They just didn't say anything useful. For example, "if this function returns a number, the number is at least zero" is true, but a function that always crashes also satisfies it.
So the reviewer now asks one question about every proof:
could a broken version of the function pass it too?
Two true statements about the same function. The first one lets every broken version through, so a function whose only proof looks like it doesn't count.
Fixing a weak proof usually means going back and making the copy more realistic, for example letting a user's code throw an error in the middle of a function. The charts below show how that went for ten files. Each point is one round of review. The lines sometimes go down: when a reviewer finds that an accepted proof is wrong about real Python, everything that relied on it is taken back out.
Functions accepted
100%
0%
review 1
review 5
review 1: 0 of 142 accepted
review 2: 2 of 142 accepted
review 3: 41 of 142 accepted
review 4: 130 of 142 accepted
review 5: 135 of 142 accepted
Objects/typeobject.c
135 of 142
accepted · 5 reviews
100%
0%
review 1
review 5
review 1: 1 of 56 accepted
review 2: 18 of 56 accepted
review 3: 54 of 56 accepted
review 4: 55 of 56 accepted
review 5: 56 of 56 accepted
Objects/genobject.c
56 of 56
accepted · 5 reviews
100%
0%
review 1
review 7
review 1: 31 of 46 accepted
review 2: 42 of 46 accepted
review 3: 44 of 46 accepted
review 4: 45 of 46 accepted
review 5: 44 of 46 accepted
review 6: 45 of 46 accepted
review 7: 46 of 46 accepted
Objects/setobject.c
46 of 46
accepted · 7 reviews
100%
0%
review 1
review 5
review 1: 31 of 48 accepted
review 2: 39 of 48 accepted
review 3: 42 of 48 accepted
review 4: 43 of 48 accepted
review 5: 45 of 48 accepted
Modules/_json.c
45 of 48
accepted · 5 reviews
100%
0%
review 1
review 9
review 1: 21 of 39 accepted
review 2: 30 of 39 accepted
review 3: 35 of 39 accepted
review 4: 34 of 39 accepted
review 5: 33 of 39 accepted
review 6: 34 of 39 accepted
review 7: 29 of 39 accepted
review 8: 36 of 39 accepted
review 9: 37 of 39 accepted
Lib/enum.py
37 of 39
accepted · 9 reviews
100%
0%
review 1
review 3
review 1: 11 of 38 accepted
review 2: 31 of 38 accepted
review 3: 37 of 38 accepted
Lib/random.py
37 of 38
accepted · 3 reviews
100%
0%
review 1
review 2
review 1: 9 of 43 accepted
review 2: 41 of 43 accepted
Objects/abstract.c
41 of 43
accepted · 2 reviews
100%
0%
review 1
review 2
review 1: 19 of 33 accepted
review 2: 33 of 33 accepted
Objects/rangeobject.c
33 of 33
accepted · 2 reviews
100%
0%
review 1
review 2
review 1: 14 of 33 accepted
review 2: 31 of 33 accepted
Lib/pickletools.py
31 of 33
accepted · 2 reviews
100%
0%
review 1
review 2
review 1: 29 of 40 accepted
review 2: 35 of 40 accepted
Modules/binascii.c
35 of 40
accepted · 2 reviews
Rounds of review →
Share of each file's reviewed functions accepted after each round of review, taken from the project's history. Each point is one review; the scale is the same in every chart, from 0% to all of the functions reviewed in that file. Accepted functions include ones the reviewer confirmed have nothing to check, such as memory bookkeeping.
When a correct proof is wrong anyway
A checked proof guarantees that a statement follows from the copy. It doesn't guarantee the copy matches real Python, and testing only covers the inputs you thought to try. So every accepted statement is also run against real Python. That caught several proofs that were valid and still wrong.
The 16-terabyte string
The copy of Python's fast JSON encoder assumed memory requests always succeed. So it "proved" the encoder could build its indentation strings for any nesting depth, including one that needs 16 terabytes of memory. Real Python runs out of memory. The fixed copy now treats every memory request as something that can fail.
Nine extra steps, just once
A proof said Python's pickle module never goes deeper than a certain number of nested calls. That turned out true except in a brand-new Python process. There, the first time it encodes a string, it quietly loads a text codec, and that load uses nine more nested calls. Our tests never saw it, because the test harness had already loaded the codec.
Error types have families
In Python, catching a
TypeError
also catches any more specific error built on top of it. Three separate copies checked an error's exact name instead. All three had proofs that a custom error type could break.
Memory that comes back
The copy of Python's
set
assumed that once memory is freed, the same address never comes back. Real memory allocators reuse addresses all the time. CPython uses a "did the address change?" check to notice when user code has swapped out the set's internals. With reuse, that check can be fooled. Fixing the copy turned an accepted proof into a real memory bug, now one of our bug reports.
What we found
When a proof fails because Python itself is wrong, and not the copy, we write it up as a bug report. Each report includes a short script that shows the bug on Python 3.15.2 (for most, also on the development version), a search for duplicates already reported, and an honest rating of how much it matters.
C and Python versions disagree
129
Other
122
Wrong result
56
Crash
28
Memory corruption
27
Doesn't match the docs
26
Wrong error or message
18
Missing input check
12
418 bug reports by type. "C and Python versions disagree" means a module has two implementations, a fast one in C and a backup in Python, and they give different answers to the same call.
Most are small: an error message that's wrong, an edge case that behaves differently from the documentation, two versions of a function that disagree. About 55 are more serious and can crash Python or corrupt its memory using nothing but normal Python code, usually by having user code change a container while C code is in the middle of using it. Python doesn't treat running hostile Python code as a security boundary, so these are ordinary bugs. The ones not already on CPython's tracker are being reported to the project, starting with this post. Six small examples of different kinds:
Crash
A dictionary call that crashes Python
Calling
setdefault
on an object's attribute dictionary with a
StrEnum
key crashes the interpreter, if another object of the same class has that attribute and this one doesn't.
class Key(StrEnum):
NAME = "name"class User: pass
a = User(); a.name = "ada"
b = User(); b.age = 36
vars(b).setdefault(Key.NAME, "anon")
# Segmentation fault
Memory corruption
An XML edit that corrupts memory
Assigning to a backwards slice of an ElementTree element should insert, as it does for a list. Instead it duplicates one child without taking a reference and loses another.
e = ET.Element("root")
e[:] = [ET.Element(f"a{i}") for i inrange(7)]
e[5:2] = [ET.Element("X")]
[c.tag for c in e]
# 'a2' appears twice, 'a4' is gone
Wrong error
An email header that breaks the parser
A Message-ID with a space inside square brackets makes Python's email parser fail with an internal error. The header comes from whoever sent the email.
Giving an enum value to a second member should raise an error. If the class's
__repr__
is broken, the error is swallowed and the call quietly does nothing.
class W(Enum):
A = 1; B = 2def__repr__(self): return5
W.B._add_value_alias_(3)
W.A._add_value_alias_(3) # returns None
C and Python disagree
Two picklers, two limits
Python has a C pickler and a pure-Python one. They give up at different nesting depths. This difference was first reported in 2008 and is still open.
v = []
for _ inrange(400): v = [v]
pickle.dumps(v, 5) # workspickle._dumps(v, 5) # RecursionError
Every report, with its script, is in the
repository
.
Do this for your own project
None of this is specific to Python. It works for anything with source code you can read and a working version you can run: another language, a library, a file format, a compiler. What made the difference for us:
Pick one exact version
and stick to it. Every copy points at specific lines in that version.
List everything first.
Count progress against the full list, so nothing gets skipped quietly.
Copy the code, not the documentation.
A copy written from the docs agrees with the docs, and the bugs are where the code and the docs disagree.
Let user code misbehave.
Model callbacks that throw errors or change things mid-operation. That's where the worst bugs were.
Test before you prove.
Proving things about a wrong copy wastes time.
When something is false, keep the counterexample.
Don't water the statement down until it becomes provable.
Check proved statements against the real thing.
A valid proof about a wrong copy is the most misleading result you can get.
Count only what an independent reviewer accepts,
and have that reviewer ask whether a broken version would pass.
The instructions our agents worked from are in the repository and meant to be reused:
AGENTS.md
for the agents doing the work,
REVIEW_PROMPT.md
for the reviewers, and the full list of functions with their status in
coverage/methods
.
Related work
The closest project is
julia-in-lean
, which did this for the Julia language and directly inspired this one
1
. It modelled Julia's standard library in Lean, tested the models against Julia, recorded about 400 bugs and filed 75. Its finding that 128 of 130 quick proofs had quietly assumed away the hard case shaped our review rules. A recent paper models NVIDIA's
PTX
GPU instruction set in Lean to prove GPU kernels correct
2
, building on earlier formal work on PTX's memory model
3
.
For Python specifically,
λπ
4
and a
K framework
semantics of Python 3.3
5
described the language mathematically; this project copies CPython's actual code instead. Similar efforts exist for JavaScript
6
,
7
and WebAssembly
8
, and CompCert
9
and seL4
10
remain the high bar for fully verified software. Comparing two implementations on the same inputs, the testing half of this project, goes back decades
11
,
12
.
Where it stands
The project started on 29 October 2026. 4,071 of the 26,004 functions worth checking (15.7%) have been copied, tested, proved and accepted by review. The Lean code is 613,318 lines in 1,539 files, containing 18,898 theorems and lemmas; 3,834 of the top-level properties are proved and 588 are proved false with a counterexample. Most of Python is still ahead, especially the large part of the standard library written in Python itself. Multithreading is out of scope for now. In these 57 files, every function copied so far has passed review. The 30 with the most accepted functions:
Python/bytecodes.c
310
Grammar/python.gram
278
Lib/collections/__init__.py
184
Lib/_pydecimal.py
160
Lib/_pydatetime.py
150
Modules/_struct.c
122
Objects/longobject.c
119
Objects/listobject.c
114
Objects/memoryobject.c
107
Objects/dictobject.c
104
Objects/bytesobject.c
100
Objects/exceptions.c
97
Objects/unicodeobject.c
94
Objects/bytearrayobject.c
93
Modules/arraymodule.c
84
Lib/_collections_abc.py
81
Modules/_operator.c
73
Modules/itertoolsmodule.c
72
Modules/_collectionsmodule.c
64
Python/codecs.c
61
Lib/operator.py
59
Lib/_pyio.py
58
Objects/typeobject.c
57
Lib/weakref.py
54
Objects/genobject.c
46
Lib/urllib/parse.py
46
Parser/action_helpers.c
43
Modules/_zoneinfo.c
43
Objects/floatobject.c
38
Objects/tupleobject.c
37
The project is open, and help is welcome. Most of CPython is still unmodelled: pick a file whose functions are still marked
todo
in
coverage/methods
, follow
AGENTS.md
, and send a pull request. Independent reviews of existing work count as much as new models. See
CONTRIBUTING.md
.
Cite
@misc{andrews2026formalizing,
author = {Andrews, David and Zhang, Chao},
title = {Formalizing {CPython}: A Lean Model of {CPython} 3.15.2},
year = {2026},
howpublished = {\url{https://broyojo.com/python-formalization/}},
note = {Code: \url{https://github.com/Broyojo/python-formalization}}
}
Ham-Handed Police Action with Overtones of Religious Intolerance Helps Turn a Little-Known Cause into a Mainstream Political and Civil Liberties Issue
ONE HUNDRED AND FIVE YEARS YEARS AGO, ON NOVEMBER 13, 1921
, a squad of New York City police inadvertently created two storms blowing in opposite directions – one was a windfall of excellent publicity for legalized access to information about birth control, and the other was a storm of very bad publicity for the NYPD.
The result was six months worth of major news stories about the brand-new American Birth Control League, which generated a tsunami of political and financial support leading to the League’s incorporation “to conduct a campaign of education for the purpose of repealing, by lawful means, existing State and Federal statutes hostile to information and access to birth control.”
In a very short time a movement that had been envisioned by radical feminist Margaret Sanger went from being extremely controversial to being widely supported. Two decades later, the League changed its name to Planned Parenthood.
November 13, 1921, was the third and last day of the Manhattan conference where the League was founded. An event that had for two days received a minimum of public attention was suddenly front-page news because the police, without warning, decided to prevent the day’s meeting from starting and, when Sanger and another of the meeting’s leaders refused, arrest them for disorderly conduct.
When the police forcibly removed Sanger and Mary Winsor, a member of the League’s National Council, from the stage of Town Hall in Manhattan’s Times Square, a mob scene unfolded, as more than a thousand conference goers were herded out of the building onto West 43rd Street. As Sanger later said, getting arrested unexpectedly for attempting to preside over a peaceful meeting was “unpleasant, to say the least,” but it also uncovered a mother lode of better publicity than money could buy.
Two days after the arrests took place, almost all of New York City’s many newspapers played up the story that the “raid” had been ordered by New York’s Catholic Archbishop. The report that the police had acted at the Archbishop’s behest made it impossible for the Mayor to avoid ordering an investigation.
Hardly had the mayoral investigation begun than a judge dismissed the disorderly conduct charges against Sanger and Winsor “for a complete lack of evidence.”
But the dismissal of the charges didn’t answer the more important question of what had motivated the police, so the investigation continued. In the attempt to get to the bottom of that, investigators required the testimony of one of the League’s wealthy and socially prominent supporters, Juliet Rublee, who was married to Washington lawyer and presidential advisor George Rublee.
On December 2, Juliet Rublee, who was a close friend and financial supporter of Sanger, testified about the section of New York’s penal code concerning the dissemination of obscene material or information, which the police claimed to have been enforcing when they padlocked Town Hall. When she finished quoting the law and saying that she disagreed with it, police in the room immediately arrested her for violating the law she had just criticized. The result was another mob scene receiving front-page coverage.
Several days later the charge against Rublee was dismissed for lack of evidence. After two months of obfuscatory hemming and hawing by the police, they admitted that all three of the arrests ought not to have occurred. The Archbishop’s role in the affair, or lack of it, was never explicated.
Three months later, when the American Birth Control League acquired the status of a New York State corporation, it was well on its way to being the leading organization advocating for the reproductive rights of women in the U.S.
https://sanger.hosting.nyu.edu/articles/town_hall_raid/
Trump backs embattled Hegseth and Jensen Huang and says FBI looking into spy allegations – video
Guardian
www.theguardian.com
2026-11-09 20:40:32
Donald Trump defended defense secretary Pete Hegseth, who is facing an impeachment resolution from Republican senator Thomas Massie, saying Hegseth 'won two wars'. The president, who said he had spoken to Nvidia CEO Jensen Huang, said he was 'amazed' by claims Huang conducted an affair with an alle...
Donald Trump defended defense secretary Pete Hegseth, who is facing an impeachment resolution from Republican senator Thomas Massie, saying Hegseth 'won two wars'. The president, who said he had spoken to Nvidia CEO Jensen Huang, said he was 'amazed' by claims Huang conducted an affair with an alleged Chinese spy, and that the FBI was now looking into the issue
Qantas to cut 850 Australian jobs and outsource work to India under AI-driven overhaul
Guardian
www.theguardian.com
2026-11-09 20:34:47
Australian carrier announces agreement with Accenture amid ‘unprecedented’ technological disruption, CEO Vanessa Hudson saysGet our breaking news email, free app or daily news podcastQantas is preparing to cut 850 local jobs and outsource work offshore under an AI-driven overhaul, marking a growing ...
Qantas is preparing to cut 850 local jobs and outsource work offshore under an AI-driven overhaul, marking a growing wave of disruption to the Australian workforce.
The changes represent the third major corporate layoff plan announced in Australia in three weeks, after restructuring moves flagged by the
design company Canva
and
National Australia Bank
.
Qantas said on Tuesday it had signed a multi-year agreement with the professional services firm Accenture to “modernise its back-end systems, processes and data, as it steps up investment in technology and AI”.
Some of the services will be transferred to Accenture’s large India-based team.
The Qantas chief executive, Vanessa Hudson, said the airline would consult with affected staff and unions before final decisions were made, with the first changes to take effect by midway through next year.
“The scale and speed of change in this space is unprecedented and unlike anything businesses have seen in generations,” Hudson said.
“We know this will be difficult news for some of our people and this decision is not a reflection of their contribution or commitment.”
The initial cuts will target finance, procurement, human resources and marketing staff. Qantas has about 32,000 employees, according to its most recent annual report.
The Australian Services Union said Qantas needed to explain itself after earlier promising it had no plans to move any jobs offshore.
“AI is having a huge impact on workers across the country, but the cost of technology change should not be borne by the workers who have kept the airline running for years,” assistant national secretary Scott Cowen said.
“Sending more jobs overseas is not in the spirit of Australia.”
The restructuring comes at a difficult time for Australian workers, with living costs surging and the unemployment rate reaching its
highest level in nearly five years
.
A subdued economy, made worse by elevated oil prices stemming from the Iran conflict, is also prompting companies to cut costs.
Across just three companies – NAB with 2,500 roles, Canva with 1,200, and now Qantas with 850 – about 4,550 corporate jobs have been targeted for cuts, relocations or restructuring in the past month.
While Qantas has been grappling with rising jet fuel prices, the costs have been partially offset by ticket sales to new customers who switched to the airline after cancelling flights at those with Middle East stopovers.
Qantas said in a market update late last week that while customer demand was proving resilient, it would continue to adjust fares and capacity in response to fuel costs.
Teenager who planned terror attack in Sydney tells court he was radicalised online and used AI to strategise
Guardian
www.theguardian.com
2026-11-09 20:09:19
Boy says he was first exposed to extremist material on TikTok, turned to Telegram and YouTube for bomb-making instructions, and used ChatGPT to devise his plansGet our breaking news email, free app or daily news podcastA teenager who admitted to planning a terrorist attack in Sydney in 2024 has told...
A teenager who admitted to planning a terrorist attack in Sydney in 2024 has told the court he was radicalised online after first seeing extremist material on TikTok and used
ChatGPT
to form his plans.
The 16-year-old, known under the pseudonym as RK due to his age, pleaded guilty to acts in preparation for, or planning, a terrorist act. In a sentencing ruling on Monday, he avoided jail time, with the
New South Wales
supreme court ordering him into a three-year community corrections order.
RK had just turned 14 when the offending occurred in 2024. He told the court he was first exposed to extremist material on
TikTok
.
“Initially, he was looking at historical content that may have had a political theme. He saw videos about the crusaders and ‘their empires’,” Justice Stephen Campbell said in the decision.
“He progressed to videos about the events of September 11, 2001 and the resulting war on terror (and the wars after that).”
Campbell said RK then progressed to watching religious-themed videos, which “led him to other content of increasing violence” and then talking about these subjects with people on the internet.
RK told the court he was trying to impress these people, and became focused on the
Sydney Opera House
as a potential location for an act of violence. He said he had become radicalised and “brainwashed by propaganda” when he began looking at bomb-making videos on YouTube, but Campbell said he had no concrete plans for committing a terrorist act, and had not obtained any material for bomb-making.
RK used
Telegram
, seeking instructions on making a pressure cooker bomb, and attempted to contact the surviving Boston marathon bomber, Dzhokhar Tsarnaev, by email.
The teenager used ChatGPT to obtain information about the bomber, and asked the AI chatbot if inmates had access to news.
“Exhibiting what appears to me to be a complete lack of understanding of the import of his conduct, the young person emailed the prison, using a publicly available email address, asking whether he could email Tsarnaev,” Campbell said in his judgment, adding RK never ultimately made contact with the bomber.
RK asked ChatGPT about security arrangements at the Sydney Opera House, where the Sydney marathon finishes, and where terrorists were imprisoned in NSW. He watched videos about the Sydney Opera House on
YouTube
, and researched gay nightclubs and other places where “infidels” gather.
On Telegram, RK sent Islamic State videos to others to “seek validation” because he thought it was “cool”, Campbell said.
OpenAI, Telegram and YouTube were approached for comment. TikTok declined to comment.
The teenager has since expressed remorse for his actions, and Campbell said he had underwent six sessions of religious and ethical training from a Muslim cleric.
“I am satisfied that he has genuinely renounced his adherence to Islamic violent extremism, which in any event was incipient and hesitant during the short period of his offending,” Campbell said. “I fully accept he was radicalised to a degree, but that the process of deradicalisation is well advanced.”
The Asio deputy director general for intelligence service delivery, Claire McGuinness,
told a parliamentary inquiry last month
that detecting and disrupting online youth radicalisation had become very challenging for the security agency.
“It usually begins quietly. A young person is scrolling through Instagram or TikTok or a similar platform,” she said. “They encounter something that catches their attention, perhaps a political meme or a religiously conservative video.
“At first it isn’t terrorism – it’s just fringe; it is extremist-adjacent. But, the moment they engage, the algorithm takes over and so the feed tightens, the content shifts from conservative to radical, and from radical to security-relevant.”
From there, teenagers often move to platforms such as Discord or Telegram where “dark humour and the edgy memes” groom teens to accept progressively more extreme content, McGuinness said, before passive consumption turns to active engagement in researching methods.
I cut bot traffic to my site by over 80% with a simple trap.
Last month, my hobby website
OpenBenches.org
transferred more than 2.5TB of data to visitors. As much as I'd like to think the site is enormously popular, it looks like it is just AI bots endlessly crawling the data and slurping up the images.
So I've built B
6
to be an indiscriminate tool to eradicate these unwanted parasites.
It is
very
loosely inspired by
Jeff Starr's Blackhole
, but works even on sites with heavy caching.
Here's the high level description of how it works.
Create a directory like
/honeypot/
on your site
Put some code in
index.php
within the directory
Add the honeypot as an explicit "Disallow" in
robots.txt
Include a hidden link to to the honeypot on every page of your site
If something accesses that page, write its IP address to your
.htaccess
The
.htaccess
bans the IP address from ever accessing your site again.
This blog post shows you how you can build this yourself and discusses some of the problems it might cause.
The file
robots.txt
lives at the root of your website. It contains a list of instructions to automated web crawlers. Respectful bots will read it and refuse to look at specific parts of your site.
Add these two lines to it:
User-agent: *
Disallow: /honeypot/
That says bots shouldn't visit any page in the honeypot directory.
Bots generally check for updates every 24 hours, so either wait a day or manually submit it to major crawlers.
Inside the honeypot directory, create a file called
index.php
(or whatever you like). When this page is visited, it grabs the visitor's IP address and the name of its User Agent. It then places them in the BLOCKED IPs section.
PHP// What's their IP?$IP = get_client_ip();
// User Agent$UA = isset( $_SERVER["HTTP_USER_AGENT"] ) ?$_SERVER["HTTP_USER_AGENT"] : "";
// Get the existing .htaccess file.$htaccess_file = "../.htaccess";
$htaccess = file_get_contents( $htaccess_file );
// Split by newline.$htaccess_lines = explode( separator: "\n", string: $htaccess );
// Where's our start block?$start = "### BLOCKED IPs";
$end = "### /BLOCKED IPs";
// Exit if the .htaccess doesn't have the block.if ( !in_array( needle: $start, haystack: $htaccess_lines ) ) { die(); }
// This is where to start from.$start_block = array_search( needle: $start, haystack: $htaccess_lines );
// Add the line after the start block.// Include a date.$htaccess_lines[ $start_block ] = $start . "\n" .
"\t#\t" . date( "c" ) . "\t{$UA}\n" .
"\tRewriteCond %{REMOTE_ADDR} \"={$IP}\" [OR]";
// Turn the array back to a string.$newHtaccess = implode( separator: "\n", array: $htaccess_lines );
// Save the new .htaccess file.file_put_contents( filename: $htaccess_file, data: $newHtaccess );
functionget_client_ip():string
{
// Adapted from https://github.com/ibericode/koko-analytics/blob/main/src/Resources/functions/collect.php// X-Forwarded-For sometimes contains a comma-separated list of IP addresses// @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For$ips = empty( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ?
[] :
\array_map( "trim", \explode( ",", $_SERVER["HTTP_X_FORWARDED_FOR"] ) );
// Always add REMOTE_ADDR and HTTP_CLIENT_IP to list of ip addresses, if setforeach ( ["REMOTE_ADDR", "HTTP_CLIENT_IP"] as$key ) {
if ( !empty( $_SERVER[$key] ) ) {
$ips[] = $_SERVER[$key];
}
}
// Return first valid IP address from listforeach ( $ipsas$ip ) {
if ( \filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
return$ip;
}
}
return"";
}
Web crawlers look at a page, find every link on it, then visit those links. So we need to put a link to the honeypot on every page - but in such a way that normal users will not find it or click it.
This adds a link, removes it from the accessibility tree, and gives it impossible to click text (a zero width joiner).
It's unlikely that a human will find the link, click on it, and be banned. But if they do, consider put a message in the blocking text telling them how they can get unblocked.
Some useful bots ignore robots.txt. If they identify themselves via a User-Agent string (and they should) you can manually remove them from .htaccess. You could also code in an allow list exemption for them. But, of course, many bad bots lie about who they really are.
Conversely, not all bots crawl every link. This won't catch bots which respect robots.txt but are nevertheless problematic.
If you have thousands of different bots blocked, the performance of your server
might
slow down while .htaccess is parsed. There's weak anecdotal evidence that it adds a slight overhead. But, personally, I don't think that's worth worrying about.
Bots often use hijacked IP addresses. After the bot has moved, an innocent party might be blocked from your site. Each block has a timestamp associated with it. You could periodically unblock older entries.
Bots rotate through hundreds of different IP addresses. So the same bot might get blocked multiple times.
Bots might see the CSS marks the link as hidden and refuse to follow it. Instead of CSS, you could use invisible spaces or other characters which would be hard for a human to see but appear visible to a bot.
Similarly, a smart bot might refuse to visit a path called /honeypot/ so choose a better name for it. A smarter bot would see that touching the honeypot leads to a ban - so perhaps a selection of traps are needed?
As is implied in the name, this is a
blunt
banhammer. It doesn't give a warning, nor does it look at User-Agent, Country, or any other signal. You touch the honeypot and you receive an instaban. No warning and no automated way to appeal.
There are alternative ways to do this. Some bots don't send language headers, some use older versions of HTTP, they often have severely outdated User Agent strings. Those are all reasonable ways to block something which is
probably
a bot. There are likely to be a few false positives though.
But B
6
has no false positives. A normal user
can't
follow the link to the trap and a well-behaved bot
won't
follow the link.
Things like Anubis require a lot of work to set up and annoy normal users. B
6
doesn't require a specific hosting environment and is never shown to normal users.
Since running B
6
a week ago, I've blocked over 400 IP addresses and seen a significant fall in traffic. I've not had any complaints yet. Sadly, none of the bots have paid to remove the paywall!
At peak, my site was seeing 216GB of data transfer per day. That's now dropped to around 25GB.
I don't claim this is the most sophisticated bot blocker in existence - but I enjoyed building it myself. I'll probably add something to records the geolocation of the IP and maybe remove any block older than a certain age.
If you'd like to use it or improve this code, I'd be grateful if you treated it as
AGPL v3 licensed
.
The Open and Shut Impeachment Case Against Tod Blanche
Portside
portside.org
2026-11-09 19:47:46
The Open and Shut Impeachment Case Against Tod Blanche
barry
Mon, 11/09/2026 - 19:47
...
On Saturday, Donald Trump
ordered
the Justice Department to investigate members of Congress for the offense of proposing to impeach his attorney general. He branded the talk “extortion at the highest level” and announced, “I am ordering the Department of Justice to look into this criminal act, immediately!”
We can expect the department to fall into line dutifully, because Attorney General Todd Blanche has already demonstrated his eagerness to convert federal prosecution into a weapon against the president’s enemies, wielded without regard to the facts, the law, or the commission of any crime. He said as much yet again Sunday in an
interview
with CNN’s Dana Bash that should be played back to him at an impeachment proceeding.
That practice stands atop the list of Trump 2.0’s manifold abuses of democracy and departures from constitutionalism and the rule of law. It follows that Blanche stands atop the list of Trump officials whom the incoming Democrats must aim to remove from office.
It is high time to impeach Todd Blanche.
With the House gavel in January comes a choice of priorities. This administration has repeatedly subverted the constitutional structure of checks and balances; bungled foreign policy, including through illegal misadventures, in ways that have profoundly undermined the national interest; and enriched the president and his allies at public expense.
These grievous offenses—all departures from the essential Article 2 command that the president “take Care that the Laws be faithfully executed”—require staunch investigation, oversight, and remedy. But the first order of business is to reaffirm the rule of law and democracy, and to strike back against the most virulent attacks on them.
The essential distinction that should lead Representative Jamie Raskin, the incoming House Judiciary Committee chair, and the committee’s new majority to vote on articles of impeachment against Blanche is between abuses of executive power on the one hand and the embrace of authoritarianism and the negation of the constitutional rule of law on the other.
For the last 20 months, the Justice Department hasn’t been flirting with authoritarianism. It has been an anti-Democratic stronghold, embracing practices that don’t happen in a democracy, and that in fact define authoritarian rule.
Democratic Representative Hank Johnson of Georgia has stated the umbrella case for impeaching and removing Blanche. The menu of possible articles runs long: illegal firings, including Maurene Comey’s, as a federal judge
ruled
last week; an early push, with his deputy Emil Bove—now, incredibly, a federal appellate judge—to ship immigrants out of the country whether or not the law allowed it; a sit-down with Ghislaine Maxwell not long before she landed in a minimum security camp.
Yet if I were drafting the articles, I’d opt to set aside, for the time being, all those horrendous abuses in the sycophantic service of Donald Trump and advance a single count: that Blanche has wielded the power of federal prosecution to punish the president’s enemies.
As Vladimir Putin’s persecution of Alexei Navalny shows, a single instance tells you everything about a regime, and a single instance would justify impeachment and removal. With Blanche, we have a long and growing list: Jim Comey, three times over. Letitia James. Cassidy Hutchinson. Six Democratic lawmakers, for making a video about illegal orders.
A one-count article of impeachment reduces the overall firepower of the case against Blanche, but it trains Congress’s and the nation’s focus on reprisal prosecutions, the Trump 2.0 practice that is the singular paradigm of authoritarianism. Three reasons make the reprisal count the right one.
First, reprisal prosecutions don’t merely abuse power; they violate the Constitution in and of themselves. The Supreme Court has called punishing someone for doing what the law allows “a due process violation of the most basic sort.” When the charges are brought in retaliation for protected speech, as with Comey or the six Democratic lawmakers, the prosecution violates the First Amendment as well.
Second, reprisal prosecutions are designed to cow dissent more broadly. Blanche’s prominent targets—a former FBI director, a witness who testified to Congress, lawmakers who reminded troops of their duty—cast a broad shadow over other political critics. Along with intimidating political adversaries, that is the point. Each case warns every potential critic, witness, and whistleblower to keep quiet or face criminal prosecution. And because a reprisal prosecution does its damage before any judge rules, and prosecutors enjoy absolute immunity from damages, the courts can’t undo it. Impeachment is the one remedy that reaches the official responsible.
Third, and most important, prosecuting the leader’s enemies on manufactured or nonexistent charges is the bright line between democracy and autocracy. It’s the unmistakable mark of authoritarianism.
Compare Blanche with Defense Secretary Pete Hegseth, whose impeachment GOP Representative Thomas Massie may force to a vote as early as this week. Massie’s eight articles charge Hegseth with waging war in Iran in defiance of the War Powers Resolution, with a strike that killed more than 150 people at a girls’ school in Minab, and with boat strikes in our hemisphere that have killed at least 221 people without a shred of process.
It’s an odious list that advances a strong case for impeachment. But it consists largely of abuses of democratic rule, not negation of it. Democracies aren’t immune from transgressing the law of war, and there is by now an extended history of military engagements that Congress never authorized. The core case against Hegseth is that he’s a flaming asshole—a terrible, arrogant secretary of defense whose tenure has sharply undermined the national interest.
The exception proves the rule. Massie’s sixth article charges Hegseth with threatening Senator Mark Kelly with prosecution for telling service members they may refuse illegal orders. Of the eight counts, it’s the only one that smells of Moscow. And Blanche’s Justice Department took the next step: It tried to indict Kelly and five colleagues over that same video.
Now picture a Senate trial of Blanche on a single count of reprisal prosecutions. The charge is clean. There’s no obscuring or evading it.
What might Blanche possibly say in his own defense? That he never undertook reprisal prosecutions? Fat chance: He not only saluted and discharged the orders; he defended them publicly as a legitimate exercise of Trump’s Article II powers.
That Trump told him to? That’s the defense Lt. William Calley offered for My Lai during the Vietnam era, and the military courts rejected it: An order to do something plainly unlawful binds no one. Sorry, but Blanche isn’t a 24-year-old lieutenant in a jungle. He’s the attorney general, who swore to support and defend the Constitution, not to blindly obey the president.
That he did it, but it was Trump’s right to order it? Blanche has tried that one before. He famously declined to pledge independence from the White House, saying “no attorney general should ever pledge that.”
In fact, no attorney general should ever pledge to follow a president blindly into the dark corner of reprisal prosecutions. To acquit Blanche on that ground, the Senate would have to ratify the authoritarian detour he engineered.
The American system has absorbed many abuses of power and strains on the rule of law under Trump 2.0. The criminal prosecution of innocent people because they are the president’s political enemies is something else: Not a strain, but a break. Justice without fear or favor, the department’s own maxim, is no mere aspiration. It is the sine qua non of the rule of law. The new Congress’s first responsibility should be to reject Blanche’s crass and corrupt embrace of the rule of tyrants.
is a senior legal columnist at The New Republic, a senior fellow at the USC Center on Communication Leadership and Policy, and the creator of
Talking Feds
, a Substack and podcast on legal and political issues. A lawyer, professor, and legal commentator, he is the former U.S. attorney for the Western District of Pennsylvania and has served as a deputy assistant attorney general at the Department of Justice. He clerked for Supreme Court Justices Thurgood Marshall and Anthony Kennedy, and has taught at UCLA School of Law and UC San Diego. He is also a former legal affairs columnist at the Los Angeles Times.
The New Republic
was founded in 1914 to bring liberalism into the modern era. The founders understood that the challenges facing a nation transformed by the Industrial Revolution and mass immigration required bold new thinking.
Today’s New Republic is wrestling with the same fundamental questions: how to build a more inclusive and democratic civil society, and how to fight for a fairer political economy in an age of rampaging inequality. We also face challenges that belong entirely to this age, from the climate crisis to Republicans hell-bent on subverting democratic governance.
We’re determined to continue building on our founding mission.
Sign up
for a TNR newsletter on politics, climate, culture and more.
The Open and Shut Impeachment Case Against Todd Blanche
Portside
portside.org
2026-11-09 19:47:46
The Open and Shut Impeachment Case Against Todd Blanche
barry
Mon, 11/09/2026 - 19:47
...
On Saturday, Donald Trump
ordered
the Justice Department to investigate members of Congress for the offense of proposing to impeach his attorney general. He branded the talk “extortion at the highest level” and announced, “I am ordering the Department of Justice to look into this criminal act, immediately!”
We can expect the department to fall into line dutifully, because Attorney General Todd Blanche has already demonstrated his eagerness to convert federal prosecution into a weapon against the president’s enemies, wielded without regard to the facts, the law, or the commission of any crime. He said as much yet again Sunday in an
interview
with CNN’s Dana Bash that should be played back to him at an impeachment proceeding.
That practice stands atop the list of Trump 2.0’s manifold abuses of democracy and departures from constitutionalism and the rule of law. It follows that Blanche stands atop the list of Trump officials whom the incoming Democrats must aim to remove from office.
It is high time to impeach Todd Blanche.
With the House gavel in January comes a choice of priorities. This administration has repeatedly subverted the constitutional structure of checks and balances; bungled foreign policy, including through illegal misadventures, in ways that have profoundly undermined the national interest; and enriched the president and his allies at public expense.
These grievous offenses—all departures from the essential Article 2 command that the president “take Care that the Laws be faithfully executed”—require staunch investigation, oversight, and remedy. But the first order of business is to reaffirm the rule of law and democracy, and to strike back against the most virulent attacks on them.
The essential distinction that should lead Representative Jamie Raskin, the incoming House Judiciary Committee chair, and the committee’s new majority to vote on articles of impeachment against Blanche is between abuses of executive power on the one hand and the embrace of authoritarianism and the negation of the constitutional rule of law on the other.
For the last 20 months, the Justice Department hasn’t been flirting with authoritarianism. It has been an anti-Democratic stronghold, embracing practices that don’t happen in a democracy, and that in fact define authoritarian rule.
Democratic Representative Hank Johnson of Georgia has stated the umbrella case for impeaching and removing Blanche. The menu of possible articles runs long: illegal firings, including Maurene Comey’s, as a federal judge
ruled
last week; an early push, with his deputy Emil Bove—now, incredibly, a federal appellate judge—to ship immigrants out of the country whether or not the law allowed it; a sit-down with Ghislaine Maxwell not long before she landed in a minimum security camp.
Yet if I were drafting the articles, I’d opt to set aside, for the time being, all those horrendous abuses in the sycophantic service of Donald Trump and advance a single count: that Blanche has wielded the power of federal prosecution to punish the president’s enemies.
As Vladimir Putin’s persecution of Alexei Navalny shows, a single instance tells you everything about a regime, and a single instance would justify impeachment and removal. With Blanche, we have a long and growing list: Jim Comey, three times over. Letitia James. Cassidy Hutchinson. Six Democratic lawmakers, for making a video about illegal orders.
A one-count article of impeachment reduces the overall firepower of the case against Blanche, but it trains Congress’s and the nation’s focus on reprisal prosecutions, the Trump 2.0 practice that is the singular paradigm of authoritarianism. Three reasons make the reprisal count the right one.
First, reprisal prosecutions don’t merely abuse power; they violate the Constitution in and of themselves. The Supreme Court has called punishing someone for doing what the law allows “a due process violation of the most basic sort.” When the charges are brought in retaliation for protected speech, as with Comey or the six Democratic lawmakers, the prosecution violates the First Amendment as well.
Second, reprisal prosecutions are designed to cow dissent more broadly. Blanche’s prominent targets—a former FBI director, a witness who testified to Congress, lawmakers who reminded troops of their duty—cast a broad shadow over other political critics. Along with intimidating political adversaries, that is the point. Each case warns every potential critic, witness, and whistleblower to keep quiet or face criminal prosecution. And because a reprisal prosecution does its damage before any judge rules, and prosecutors enjoy absolute immunity from damages, the courts can’t undo it. Impeachment is the one remedy that reaches the official responsible.
Third, and most important, prosecuting the leader’s enemies on manufactured or nonexistent charges is the bright line between democracy and autocracy. It’s the unmistakable mark of authoritarianism.
Compare Blanche with Defense Secretary Pete Hegseth, whose impeachment GOP Representative Thomas Massie may force to a vote as early as this week. Massie’s eight articles charge Hegseth with waging war in Iran in defiance of the War Powers Resolution, with a strike that killed more than 150 people at a girls’ school in Minab, and with boat strikes in our hemisphere that have killed at least 221 people without a shred of process.
It’s an odious list that advances a strong case for impeachment. But it consists largely of abuses of democratic rule, not negation of it. Democracies aren’t immune from transgressing the law of war, and there is by now an extended history of military engagements that Congress never authorized. The core case against Hegseth is that he’s a flaming asshole—a terrible, arrogant secretary of defense whose tenure has sharply undermined the national interest.
The exception proves the rule. Massie’s sixth article charges Hegseth with threatening Senator Mark Kelly with prosecution for telling service members they may refuse illegal orders. Of the eight counts, it’s the only one that smells of Moscow. And Blanche’s Justice Department took the next step: It tried to indict Kelly and five colleagues over that same video.
Now picture a Senate trial of Blanche on a single count of reprisal prosecutions. The charge is clean. There’s no obscuring or evading it.
What might Blanche possibly say in his own defense? That he never undertook reprisal prosecutions? Fat chance: He not only saluted and discharged the orders; he defended them publicly as a legitimate exercise of Trump’s Article II powers.
That Trump told him to? That’s the defense Lt. William Calley offered for My Lai during the Vietnam era, and the military courts rejected it: An order to do something plainly unlawful binds no one. Sorry, but Blanche isn’t a 24-year-old lieutenant in a jungle. He’s the attorney general, who swore to support and defend the Constitution, not to blindly obey the president.
That he did it, but it was Trump’s right to order it? Blanche has tried that one before. He famously declined to pledge independence from the White House, saying “no attorney general should ever pledge that.”
In fact, no attorney general should ever pledge to follow a president blindly into the dark corner of reprisal prosecutions. To acquit Blanche on that ground, the Senate would have to ratify the authoritarian detour he engineered.
The American system has absorbed many abuses of power and strains on the rule of law under Trump 2.0. The criminal prosecution of innocent people because they are the president’s political enemies is something else: Not a strain, but a break. Justice without fear or favor, the department’s own maxim, is no mere aspiration. It is the sine qua non of the rule of law. The new Congress’s first responsibility should be to reject Blanche’s crass and corrupt embrace of the rule of tyrants.
is a senior legal columnist at The New Republic, a senior fellow at the USC Center on Communication Leadership and Policy, and the creator of
Talking Feds
, a Substack and podcast on legal and political issues. A lawyer, professor, and legal commentator, he is the former U.S. attorney for the Western District of Pennsylvania and has served as a deputy assistant attorney general at the Department of Justice. He clerked for Supreme Court Justices Thurgood Marshall and Anthony Kennedy, and has taught at UCLA School of Law and UC San Diego. He is also a former legal affairs columnist at the Los Angeles Times.
The New Republic
was founded in 1914 to bring liberalism into the modern era. The founders understood that the challenges facing a nation transformed by the Industrial Revolution and mass immigration required bold new thinking.
Today’s New Republic is wrestling with the same fundamental questions: how to build a more inclusive and democratic civil society, and how to fight for a fairer political economy in an age of rampaging inequality. We also face challenges that belong entirely to this age, from the climate crisis to Republicans hell-bent on subverting democratic governance.
We’re determined to continue building on our founding mission.
Sign up
for a TNR newsletter on politics, climate, culture and more.
So, I've always been somewhat annoyed at SSL/TLS.
It requires everyone to go through a complex "ACME" dance just to put up a public website.
Worse, certificates expire every few months, so it's not a one and done thing:
even with automation, maintaining a certificate requires care to ensure the ACME client always has access to DNS records or the web server.
... and the whole system doesn't even work because certificates are issued over plaintext connections,
and trusted certificate aurthorities use very secure keys like
"4"
There is prior art
of protest SSL
implementations
,
but I do actually want to encrypt web traffic.
Passive eavesdropping is a real risk... but preventing it doesn't require the whole certificate thing:
therefore, the best choice is a protest certificate.
The only part of the certificate I directly control is the public key.
Therefore, the simplest way to obtain a bad certificate is use a vanity private key such as 313333333337 (one of the most eleet primes).
However, while the resulting public key would be weak, no one would know unless they try to break it.
First, let's look at mathematical framework
of RSA.
To generate a key, pick two large prime numbers (p and q) and multiply them to yeild the modulus (n).
Pick a small number, e as public exponent.
The RSA public key is composed of the modulus (n) and the public exponent:
# Encryption requires knowing e (public)
cyphertext = plaintext^e mod n
The private key contains the modulus and the private exponent (d) which is chosen to be the multiplicate inverse of e modulo n.
Exactly how d is found is not relevent, but the process requires knowing p and q.
# Decryption requires knowing d (pivate)
= cyphertext^d mod n
= plaintext^e^d mod n
= plaintext^(e*d) mod n
= plaintext^1 mod n
= plaintext
Ok, back to vanity keys.
The standard value for e is 65537 (0x10001),
because the small number of set bits makes encryption faster.
In fact, the CA I used will refuse to sign keys with a non-standard public exponent, so I can't do anything funny there.
The modulus, n, is either 2,048 or 4,096 "user controlled" bits, so it's the ideal place to hide a message.
However, to use the certificate, I'll need to find two large primes that multiply out to the vanity modulus.
My method starts by picking two random primes and calculating the resulting n value.
Then, the bytes of n are modified to introduce message into the base64 encoding.
Of course, the modified n is not the product of p and q, but this is fixable by setting q to n/p.
The resulting q value is very unlikely to be a prime (or integer), so I round it and find the next prime after the ideal q:
which usually only requires changing the value of q by a few hundred.
Since p and q are similar in size, a small change q only affects the least-sigifiant half of the product:
58174124 * 918491824 = 53432457262362176
(incrementing until the next prime...)
58174124 * 918491843 = 53432458367670532
As long as the message is embedded into the upper half of n, it's likely to survive undamaged.
The original p and newly selected q can now be used to construct a functional RSA private key in the usual manner.
From here, it's really just a matter of getting a certificate aurthority to sign the key:
... although since base64 operates on groups of three byte,
it is possible for the message to be misaligned and not readable.
However, since the layout of the certificate is static, it is possible to adjust the message's placement until it works:
this should take less than four attempts.
The result is a functional, trusted certificate with a longish message hidden in the public key.
Renewal is done by resumbitting the CSR and repeating the ACME chalange, which can be automated.
Base64 is missing most punctuation, but it provides the full ASCII alphabet,
and the ~150 (RSA-2048) or ~320 (RSA-4096) avalable charaters provides plenty of space for jokes.
Another option would be to target the base16 displayed in most browser's certificate viewer:
this would provide a lot more space (2 chars/byte instea of 0.75), but requires careful word choice.
As for security
, this trick obviously reduces the entropy in the private key.
However, it should still be secure:
nearly identical methods have been considered as a form of compression.
If the top-half of the modulus is fixed to a well known value, it doesn't have to be sent or stored as part of the key.
A reduction of around 1/2 can be achieved through division, but the state of the art can
fix 2/3 of the key, reducing the size to 1/3 of standard RSA while retaining a similar level of security...
although I should note that such tricks have largly been abandoned in favor of other crytosystems which can directly use small keys.
The manipulation of q may produce primes that are very close together, which makes it possible to factor n and recover the private key.
A very small d value can also be a problem.
Both of these are unlikely, but my script doesn't check for insecure values
However, regardless of the key's security, it should be perfectly fine for a public website:
modern TLS provides forward secrecy, so eavesdropping requires a man-in-the-middle attack even if the private key is compromised.
Midterm Round Up w/Erin Heaney, Chris Melody Fields Figueredo, and Shaira Chaer
OrganizingUp
convergencemag.com
2026-11-09 19:00:00
Last week’s midterm election results were a massive swing toward Democrats across the country. The Republican trifecta in the federal government has now been broken, creating opportunities to change policies and seek accountability for some of the worst harms of the last 2 years. Meanwhile, direct b...
Release: llm-anthropic 0.31
Anthropic released Fable 5.2 and Mythos 5.2 today. I've added them to llm-anthropic, so you can now run prompts through Fable 5.2 like this:
uv tool install llm
llm install llm-anthropic
llm keys set anthropic
# paste key here
llm -m claude-fable-5.2 "Generate an ...
Anthropic
released Fable 5.2 and Mythos 5.2
today. I've added them to
llm-anthropic
, so you can now run prompts through Fable 5.2 like this:
uv tool install llm
llm install llm-anthropic
llm keys set anthropic
# paste key here
llm -m claude-fable-5.2 "Generate an SVG of a pelican riding a bicycle"
I ran pelicans at all five reasoning levels -
low
,
medium
,
high
,
xhigh
, and
max
. You can
see them all here
- here's the best result I got, from
xhigh
:
max
failed to return an image at all, running out of tokens after spending 128,000
thinking about them
. That's the same bug that I saw with
Opus 5.5
- but it's new for the Fable series, both
Fable 5
and
Fable 5.1
returned max effort pelicans just fine.
Locating the source of a mysterious beep with Claude
Simon Willison
simonwillison.net
2026-11-09 18:57:21
Our house has a box room, full of boxes that we still haven't unpacked from our last move. A couple of weeks ago something in that room started intermittently beeping. The beeps were far enough apart that standing in the room and trying to determine the source of the noise was frustrating, and I rea...
Our house has a box room, full of boxes that we still haven’t unpacked from our last move. A couple of weeks ago something in that room started
intermittently beeping
. The beeps were far enough apart that standing in the room and trying to determine the source of the noise was frustrating, and I really didn’t want to dig through every one of those boxes. So I had Claude Code build
Beep Locator
, a software system for triangulating the source of a mysterious beep using multiple devices scattered around the room.
Here’s what Beep Locator looks like after it has been running for a while:
You run Python web server to show the primary UI, and then use the QR code or URL to connect as many devices as you can spare to act as listeners—I was using two iPads, a phone, a MacBook Pro and a Surface Ultra.
The devices then play noises to each other to help estimate their locations. This didn’t work particularly well, so I added a “Rough mode” where you can drag their icons around in the space to provide rough locations which are then adjusted based on those sounds.
Once that’s set up, the devices all listen for the beep!
I added a clapping mode too so I could test it by clapping my hands in different locations around the room—displayed as diamonds on the map. This helped me gain confidence that it was capable of locating a sound.
Beeps show up on the map as an X, plus a line in the “Sounds located” log. You can replay these sounds (from each device in turn) to confirm they are the mysterious beep you are looking for, then click “This is the mystery beep” to mark them as such.
Once you’ve confirmed the mysterious beep frequency the system will listen out for it, measure the interval between beeps, and use the triangulated locations to lock down the most likely location on the map.
The system worked as intended. It gave me the position of the beep to within about 40cm, then I dug through that specific pile of boxes and found an ancient carbon monoxide detector that desperately wanted its batteries replaced.
We present the design, implementation, and evaluation of BeepBeep, a high-accuracy acoustic-based ranging system. It operates in a spontaneous, ad-hoc, and device-to-device context without leveraging any pre-planned infrastructure. It is a pure software-based solution and uses only the most basic set of commodity hardware – a speaker, a microphone, and some form of device-to-device communication – so that it is readily applicable to many low-cost sensor platforms and to most commercial-off-the-shelf mobile devices like cell phones and PDAs. It achieves high accuracy through a combination of three techniques: two-way sensing, self-recording, and sample counting.
That sounded exactly like what we needed to build!
Beep Locator runs a Python web application server that does most of the work. The listening devices then connect to that server via WebSockets and present a UI which requests browser microphone access. The listeners mainly work by recording a 60 second buffer of recent audio. They also run a simple beep detection algorithm (see
detector.js
), which uses Fast Fourier Transform and a high-pass filter to identify potential beeps. It sends these events to the main server.
When a beep is reported, the server has a device play a short chirp (the device with the lowest round-trip time to the server), then asks every listener upload a clip from about 0.6s before the beep to 0.8s after that chirp. This chirp allows the clips to be aligned with each other, a crucial step in locating the beep.
How I built it
I started this project using Claude Code Cloud via my iPhone, with Opus 5.5 running in Extra thinking effort mode. Here’s
that shared starter session
, which began with this prompt against a newly created empty GitHub repository:
Write out a problem.md file describing the problem we want to solve
There is a device beeping in a room and I cannot find it
I want to set up several devices - laptops, phones, iPads - around the room all listening at the same time and have them help triangulate where the beep comes from
There needs to be a Python web app which coordinates it all - one device shows a web page for the app, other devices join a URL which turns them into listeners - all via browser WebAudio and WebSockets back to the Python server app
Ideally I wouldn't need to manually input the relative locations of the devices - it would be amazing if they could play sounds to each other in order to locate each other in 2D space - is that even possible though?
That got me
this problem.md file
. As part of writing that up Claude found and read the BeepBeep paper, which is described in that file.
The research looked good, so I told it:
Ok try and build it, add a mechanism so you can send new code to the listeners which they will then run automatically - that way I can set everything up in the room and then leave you alone to continue hacking and experiment while I do something else
That got me
to this point
—most of the system was built, but nothing had actually tried running it yet.
I cloned the new repository to my laptop and fired up Claude Code... and then
Fable 5.2 was released
, and this project seemed like an excellent opportunity to put that through its paces.
I had Claude Code on my laptop start the server running, then made sure it could both see what was happening
and
make live changes to the software as it ran.
This was already baked into the software: Opus 5.5 had built an
installModule()
method on the listeners that could be triggered over the WebSocket connection, meaning the admin server could execute arbitrary new code on any of its clients.
On some devices, web pages that listen on the microphone request user permission any time the page reloads. The hot-swap module mechanism meant that we could deploy new code without having to manually interact with each of the listening devices in turn.
From that point on my involvement was mainly to sit by the laptop chatting with Fable 5.2 about what was going on, and occasionally requesting new features. Here are some of the feature prompts I ran:
I think we need to make it so I can drag things around on the map in “rough mode”, where my job is just to put them roughly where they are, then switch out of rough mode and it attempts to get them accurate
This gave me the ability to drag listeners around the map.
what’s a good way for me to test this I wonder? Can we have it listen for claps, then I could clap and it could identify the location of the clap? [...]
Claps should use a different symbol on the map than beeps
That added the thing where any time I clapped it would show on the map as a different symbol from the beeps.
each symbol on the map should include a HH:MM:SS timestamp
That made it easier to spot which symbol likely reflected which real-world sound.
The log should show beeps and claps with their timestamps AND have a little play button which, when clicked, replays the recorded noise from each of the listeners in sequence (with clear text on screen showing which listener recorded which snippet) while temporarily turning off microphone recording while that replay plays
Now I could replay sounds, making it much easier to identify which recorded clip was the mysterious beep I was looking for.
There should be a button next to a recording for “This is the mystery beep” - then I can hit replay to see and then confirm it was the mystery beep if that’s the one I am looking for
Then the system can categorize noises in the future to see if they are likely that same mysterious beep and use that information to build a more accurate idea of where it is
At this point I was getting close—I had a solid idea of where the beep was coming from, but wouldn’t it be neat if I could reposition the listeners around that point to get an even finer location?
I want a feature for this, I don’t want to have to restart each listening device etc, I want to be able to click a “Reposition the devices” button which lets me switch into repositioning, then I click “Repositioned” and it puts me into Rough mode and asks me to roughly locate them, then I do that and click, then it starts up again. The previous session can be read-only viewed through the app.
And since I had one spare device, I then said:
add a feature where the map includes a spot that is a suggestion for a location that it would be useful to add a listener at - based on data collected so far
Giving Claude Code ears
I think the most interesting part of this project is that I demonstrated it’s possible to
give Claude Code ears
.
Claude doesn’t have native audio input (yet), but it can run JavaScript and Python code that can analyze audio captured by a microphone.
I told it to run a web server with WebSocket connections to multiple listening devices, then had it both run a WebAudio microphone on those devices and hook them up so they could be sent fresh JavaScript code to execute via that WebSocket.
Then I could pretty much leave Claude alone, hacking away at the problem, querying the audio logs, and reconfiguring its ears to help it solve the problem.
I’m reminded of a similar hack I heard about at GitHub Universe a few weeks ago, where
Martin Woodward
told me he had been debugging the
GitHub Badge computers
by plugging them into a computer via USB-C and then pointing a webcam at their screen, so his coding agent could tell if updates were working correctly or not.
Figuring out ways to let coding agents perceive the world around them is a whole lot of fun.
Vanderbilt University hit in BYOD ransomware attack, data theft claimed
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 18:52:12
Vanderbilt University warns it is responding to a cyberattack claimed by the BYOD ransomware gang, which claims to have encrypted the university's databases and stolen sensitive student, employee, and research data. [...]...
Vanderbilt University warns it is responding to a cyberattack claimed by the BYOD ransomware gang, which claims to have encrypted the university's databases and stolen sensitive student, employee, and research data.
The university confirmed the incident Monday, warning that university devices, systems, and cloud-based services may be affected.
"We are currently responding to an active cybersecurity incident that may impact university devices, systems, and cloud-based services. Our Information Technology team is actively investigating and working to contain the situation," Vanderbilt said in a
statement on X
.
As part of its response, the university told students, faculty, and staff to shut down university devices, disconnect from university Wi-Fi, and watch for suspicious activity.
The university warned that signs of compromise may include unexpected pop-ups or security notifications, unusual changes to files or permissions in cloud storage platforms, missing or modified files, unfamiliar applications, and unexpected authentication requests.
Those who notice suspicious activity were instructed not to investigate or troubleshoot the issue themselves, but instead immediately shut down their devices and contact the university's IT service desk.
Vanderbilt has not publicly disclosed the nature of the attack or confirmed whether any data was stolen.
BleepingComputer contacted Vanderbilt University with questions about the attack, including whether systems were encrypted, what data may have been stolen, and whether the incident has been contained.
If you have any information regarding this incident or other undisclosed attacks, you can contact us confidentially via Signal at 646-961-3731 or at tips@bleepingcomputer.com.
BYOD ransomware claims attack
On Monday, the BYOD ransomware group claimed responsibility for the attack on its data leak site, alleging that it had encrypted Vanderbilt's databases and stolen sensitive information belonging to students and employees.
"If you could not tell already, your databases are locked, We have your entire estate and research data. Over 1 Million SSNs, Full Names, Email addresses, Phone Numbers, Student & Employee Records, Full takeover of your DC, whatever was on your network, we possess," reads the BYOD data leak site.
BYOD ransomware group claims attack on Vanderbilt University
Source: BleepingComputer
BleepingComputer has since received a photograph of an alleged computer screen showing icons associated with Vanderbilt University and displaying a BYOD ransom note named "README_BYOD_31.txt".
The ransom note includes a link to the BYOD data leak site and contact information for the SESSION encrypted messaging platform to negotiate with the ransomware gang. BleepingComputer can confirm that the link in the ransom note is the site operated by BYOD.
"Oh no, you have been compromised by BYOD :<," reads the ransom note.
"We have all of your data including your backups, your entire network is compromised."
"Yes, this affects your student and employee data the most, every single SSN is archived, full names, email addresses, phone numbers, work addresses, roles, birthdays, quite literally everything."
Photograph of BYOD ransom note displayed on a Vanderbilt University computer
Source: BleepingComputer
The note also threatens to release stolen data and cause further disruption if the university does not negotiate with the attackers.
A video shared on YouTube and with BleepingComputer also shows how infected devices are playing audio warning that the network has been compromised by "BYOD".
While the ransom note and video indicate BYOD is behind the attack, Vanderbilt has not officially confirmed the group's involvement or whether devices were encrypted.
BYOD is a relatively new ransomware gang that launched in 2026 and currently lists 5 other organizations on its data leak site.
Mackenzie Hawkins, Andy Lin, and Kari Soo Lindberg, reporting for Bloomberg last year on December 22 (Archive.today link):
In an industry run by titans, a Singapore AI firm called Megaspeed
International Pte. is drawing an unusual amount of attention. In
less than three years, the once-obscure s...
We've detected unusual activity from your computer network
To continue, please click the box below to let us know you're not a robot.
Why did this happen?
Please make sure your browser supports JavaScript and cookies and that you are not
blocking them from loading.
For more information you can review our
Terms of Service
and
Cookie Policy
.
Need Help?
For inquiries related to this message please
contact
our support team
and provide the reference ID below.
Now that Democrats have swept the House, a key question is: Who should lead it?
Hakeem Jeffries
is in line to become the first Black Speaker of the House, which would be a historic milestone. But members of Congress must examine Jeffries’ record, his priorities, and the kind of leadership he would bring to this moment.
Here are ten reasons why Jeffries should not be Speaker.
1. He has abandoned Medicare for All
At a time when millions of Americans struggle with unaffordable health insurance, medical debt, and the threat of financial ruin from illness, Jeffries has distanced himself from one of the most important progressive reforms:
Medicare for All
.
Jeffries co-sponsored
Medicare
for All legislation from 2013 through 2021. But in an August 2026 interview on NBC’s
Meet the Press
, he said it is no longer legislation he supports or cosponsors. Ironically, he made that statement on the same day a CBS poll found that 90 percent of Democratic voters back the idea.
This reversal puts him at odds with party voters, but also with a majority of Democratic representatives in the House. As of late October, Rep. Pramila Jayapal’s Medicare for All Act had 118 Democratic cosponsors. A “leader” who won’t back what his own caucus and voters want is not a leader.
2. He refuses to break with Israel
Perhaps nowhere is Jeffries more out of step with the progressive base than on Israel.
For decades, Jeffries has been a staunch defender of the U.S.-Israel alliance. At a pro-Israel rally in 2014, during Israel’s military assault on
Gaza
, Jeffries proclaimed, “Israel today, Israel tomorrow, Israel forever!.” In 2020 he told an
AIPAC
conference that New Yorkers consider Jerusalem their “sixth borough,” totally disregarding the plight of
Palestinians
living under Israeli occupation.
Even as Israel’s
genocide
in
Gaza
sparked worldwide outrage, Jeffries continued to resist calls to end
U.S. military
support.
In July 2026, 103
House Democrats
voted to cut $3.3 billion in military aid to Israel, including the party’s second-ranking House leader, Katherine Clark. But Jeffries joined 97 other Democrats and nearly every Republican in voting to preserve the funding.
In a May 2024
60 Minutes
interview, when asked whether Israel’s bombing of Gaza had been indiscriminate, Jeffries said no. By then, nearly 35,000 Palestinians had been killed. When the interviewer pressed him, saying, “You seem reluctant to criticize Israel at all,” Jeffries responded, “I’m dealing with the facts on the ground.”
Jeffries has also refused to cosponsor the Block the Bombs Act, which would restrict transfers of some of the deadliest offensive weapons to Israel, including 2,000-pound bombs, bunker busters, precision-guidance kits, and tank and artillery rounds. As of November 2026, the bill has 82 Democratic cosponsors and the endorsement of the Congressional Progressive Caucus. Caucus Chair
Greg Casar
has pledged to push for a floor vote if Democrats regain the majority. Yet Jeffries has not signed on, and as Speaker, he would have enormous power to determine whether the bill ever receives a vote.
While Jeffries has acknowledged that U.S. policy toward Israel needs to change, he continues to support Israel’s military superiority and joint missile-defense programs. He has also refused to condemn Section 219 of the NDAA, which would further integrate U.S. and Israeli military research,
technology
, and production.
Ironically, both
Donald Trump
and
Benjamin Netanyahu
have recently suggested that the U.S. should stop giving Israel nearly $4 billion a year because “Israel doesn’t need it.” Whether or not we believe them, it is striking that we have yet to hear a similar call from Hakeem Jeffries.
3. He has failed to champion major cuts to the obscene Pentagon budget
At a time when Americans are struggling to afford basic necessities, Trump is demanding a staggering $1.5 trillion military budget—an increase of nearly $600 billion, or 66 percent, over the previous year’s base funding. Yet Jeffries has not made substantially reducing
Pentagon
spending a central priority of Democratic leadership.
Yes, he has opposed funding for Trump’s war in Iran but he is a staunch advocate of continued U.S. military aid to
Ukraine
and has sharply criticized Trump for failing to provide sufficient support. He said “America is stronger when Russia is weaker.” In September 2026, he pledged that Democrats would continue backing Ukraine “until victory is won,” signaling his commitment to greater U.S. involvement and military assistance instead of a commitment to a diplomatic solution that would end that terrible war.
Jeffries is also an enthusiastic defender of the aggressive alliance
NATO
, which should have dissolved when the Soviet Union fell apart in 1991. He has called NATO “the most successful military and diplomatic alliance in the history of the world.” NATO, at Trump’s insistence, has called for all members to dramatically increase their military budgets to 5 percent of their GDP (the US is presently at 3.1 percent).
Jeffries’ ties to the
military-industrial complex
are particularly troubling. During the 2026 election cycle alone, Jeffries’ campaign reportedly received approximately $212,000 from military PACs.
Democrats cannot simply promise better
healthcare
,
affordable housing
, quality education and climate action while supporting a massive military
budget
. Real change requires shifting resources from weapons and war to the needs of ordinary people. The next Democratic Speaker must be prepared to challenge the military-industrial complex.
4. He continues to accept pro-Israel lobby money
Jeffries’s position on Israel cannot be separated from his longstanding political relationship with the
AIPAC
lobby.
At a time when AIPAC funding has become toxic and so many Democratic candidates rejected AIPAC money, Jeffries has maintained his ties to the organization.
According to Track AIPAC, Hakeem Jeffries has received more than $1.5 million in campaign contributions from AIPAC and other pro-Israel lobby groups over his congressional career. During the 2026 election cycle alone, his campaign received nearly $300,000 in contributions from pro-Israel PACs.He has also taken five AIPAC-sponsored trips to Israel since arriving in Congress.
Following the November elections, AIPAC publicly celebrated Jeffries as one of the candidates it supported.
How can congressional Democrats be led by someone so closely tied to AIPAC, a lobby increasingly toxic to their own voters?
5. His Backroom Dealings with Jared Kushner Raise Serious Questions About His Judgment
At a time when Americans are demanding investigations into the Trump family’s financial dealings, Hakeem Jeffries chose to sit down privately with
Jared Kushner
, Trump’s son-in-law and influential adviser.
In August 2026, reports revealed that Jeffries had met with Kushner to discuss possible cooperation on housing,
immigration
and affordability. Yet Kushner, who holds no official government position, continues to wield influence over U.S. foreign policy while maintaining lucrative financial relationships with Gulf governments through his investment firm.
House Judiciary Committee Democrat
Jamie Raskin
has already launched an investigation into Kushner’s foreign financial entanglements, demanding documents and communications about his dealings with foreign governments. So why was Jeffries meeting with him behind closed doors?
With Democrats taking control of the House in January, they need a speaker committed to untangling the dirty web of
corruption
committed by Trump and his inner circle.
6. He Has Elevated Warhawks to Key Foreign-Policy Positions
You can tell a political leader’s priorities by whom they put in power. And Jeffries’s choices speak volumes.
In August 2026, Democratic leaders elevated Rep. Jared Moskowitz, one of the House’s most outspoken pro-Israel hawks, to the top Democratic position on the powerful House Foreign Affairs Subcommittee on the Middle East and North
Africa
. Moskowitz has been an unwavering defender of Israel’s genocide in Gaza, continued U.S. weapons shipments, and Israel’s brutal military operations in
Lebanon
. He has also openly supported both Israeli attacks on Iran and Trump’s 2025 bombing of Iranian nuclear facilities, and initially opposed congressional efforts to prevent the 2026 war before later backing War Powers restrictions.
With Democrats in control of the House, Moskowitz will be positioned to chair the Middle East and North Africa Subcommittee, wielding significant influence over congressional oversight and policy toward Israel,
Palestine
, Iran, and the entire region.
Debbie Wasserman Schultz and Wesley Bell, two other staunch defenders of Israel, were added to the Foreign Affairs Committee. Bell had defeated progressive Rep.
Cori Bush
in 2024 after massive spending by AIPAC’s super PAC.
Progressives
are still steaming over the role of Wasserman Schultz in undermining
Bernie Sanders
during the 2016 Democratic presidential primary.
The backlash to these appointments was immediate. Rep.
Ro Khanna
warned, “Don’t put Israel hawks out of touch with our voters in charge of our Middle East policy.” The Council on American-Islamic Relations condemned the appointments as an insult to voters and an attempt to shield Israel from accountability for its actions in Gaza.
7. Jeffries Represents the Democratic Party's Dependence on Corporate Money
The
Democratic Party
claims to fight for working people, but Jeffries remains deeply connected to the wealthy corporate interests that dominate
Washington
.
His campaign has benefited from millions of dollars in contributions associated with
Wall Street
, pharmaceutical and insurance companies, real estate interests,
Big Tech
and military contractors.
These financial relationships raise a fundamental question: How aggressively will Democrats challenge
corporate greed
, Wall Street speculation, soaring healthcare costs and the military-industrial complex when their leader maintains such close ties to these powerful interests?
Progressive Democrats have demonstrated that grassroots organizing and small-dollar fundraising offer an alternative to corporate PAC money.
The Democratic Party cannot credibly promise to take on
corporate power
without confronting the influence of big money within its own leadership.
8. He has defended the Democratic establishment against progressive challengers
Jeffries has a long history of protecting entrenched Democratic incumbents against progressive challengers.
In 2020, he backed longtime pro-Israel congressman
Eliot Engel
against
Jamaal Bowman
, who defeated Engel in a stunning primary upset. In 2022, Jeffries traveled to Chicago to campaign for veteran Congressman Danny Davis against young progressive organizer Kina Collins, who came within seven percentage points of victory.
And in 2026, Jeffries backed Dan Goldman, Adriano Espaillat and Shri Thanedar against progressive challengers Brad Lander, Darializa Avila Chevalier and Donavan McKinney. All three incumbents lost their primaries, and all three challengers went on to win in November.
This pattern is no coincidence. In 2021, Jeffries joined forces with centrist Democrats Josh Gottheimer and Terri Sewell to establish Team Blue PAC, designed to protect Democratic incumbents against primary challengers.
While voters are demanding a new direction, Jeffries has repeatedly sided with the establishment candidates they rejected.
9. He Wants to Reform ICE, Not Abolish It
As ICE agents terrorize immigrant communities, separate families and carry out violent raids, the question of how to dismantle Trump’s cruel mass-deportation machinery has become increasingly urgent.
Jeffries has condemned ICE’s brutality and demanded greater accountability. But he has stopped short of calling for the abolition of ICE or the dismantling of the Department of Homeland Security, insisting instead that these agencies can be reformed.
Contrast that with Rep. Delia Ramirez’s groundbreaking Reimagining Safety Act, which would abolish ICE, dismantle DHS and establish a new Department of Community Safety, redirecting resources toward housing, healthcare and community well-being. Her legislation challenges the very definition of national security, arguing that real safety comes from meeting people’s needs, not militarizing their communities.
This is the kind of bold, visionary leadership that offers a fundamental alternative to simply “reforming” an out-of-control immigration enforcement system that is terrorizing immigrant communities.
10. He Has Failed to Champion Bold Climate Action
As devastating
wildfires
consume entire communities, record-breaking heat waves threaten lives, and floods and droughts wreak havoc across the country, the
climate crisis
demands bold, urgent leadership—not business as usual.
Yet Jeffries has refused to endorse the
Green New Deal
or champion demands to halt the expansion of fossil fuel
infrastructure
and eliminate taxpayer subsidies to the
oil
and gas industry. In 2022, when more than 70 House Democrats publicly opposed legislation to fast-track fossil fuel projects, Jeffries declined to join them.
More recently, he has distanced himself from calls for a moratorium on new AI data centers, even as a powerful grassroots movement is sweeping the country, with communities organizing against these energy-guzzling facilities that drain
water
supplies, drive up electricity bills, strain power grids and threaten the environment.
Jeffries supported the
Inflation
Reduction Act’s clean-energy investments, but he has not embraced the more ambitious climate agenda advocated by progressive lawmakers and community groups.
At a time when climate disasters are destroying homes, livelihoods and entire communities, the Democratic Party needs leadership with the urgency and ambition to confront the climate crisis.
A Democratic Majority Deserves Progressive Leadership
More than any single vote, contribution, or appointment, the problem with Hakeem Jeffries is the establishment politics he represents—politics that protect the powerful, accommodate corporate interests, and offer timid reforms when the country is crying out for transformative change.
Voters did not reject Republican
extremism
just to see Democratic leaders continue pouring billions into wars and corporate interests while families struggle to afford housing, healthcare, and basic necessities.
And the grassroots are making their voices heard. In just a few days, more than one million people have signed a petition demanding new leadership. Congressional offices are being inundated with calls, and several incoming Democrats—including Melat Kiros, Claire Valdez, Chris Rabb, and Adam Hamawy—are withholding support for Jeffries.
The Speaker of the House holds enormous power. That power can be used to confront the military-industrial complex, challenge corporate money and AIPAC, stand up for immigrants, and put human needs ahead of endless wars. Or it can be used to protect the very system that has brought us to this crisis.
That’s why we need a new generation of leadership willing to fight for real change.
Medea Benjamin is co-founder of Global Exchange and CODEPINK: Women for Peace. She is the co-author, with Nicolas J.S. Davies, of War in Ukraine: Making Sense of a Senseless Conflict, available from OR Books in November 2022. Other books include, "Inside Iran: The Real History and Politics of the Islamic Republic of Iran" (2018); "Kingdom of the Unjust: Behind the U.S.-Saudi Connection" (2016); "Drone Warfare: Killing by Remote Control" (2013); "Don't Be Afraid Gringo: A Honduran Woman Speaks from the Heart" (1989), and (with Jodie Evans) "Stop the Next War Now" (2005).
The DOGE Tracker, CLASP’s interactive data tool, is designed to help users explore and document the proposed reductions to federal programs under review by the Department of Government Efficiency (DOGE). This sortable, filterable spreadsheet compiles program-level information on funding changes—either proposed or enacted—during the current administration. The goal of the DOGE Tracker is to support transparency by providing accessible, regularly updated data to policymakers, researchers, and advocates monitoring the scope and impact of federal budget decisions. All entries include source documentation, relevant timelines, and links to official materials where available.
Agency Key
Government Agency
DOGE Federal Layoffs
Programs Impacted
Number of Households or People at Risk
Centers for Disease Control and Prevention's The National Center for HIV, Viral Hepatitis, STD, and Tuberculosis Prevention
Overall, 2,400 federal layoffs or roughly 18 percent of the CDC's workforce. The Center on HIV and STD Prevention saw 27 percent of its 1,700 staff eliminated.
The CDC's National Center for HIV, Viral Hepatitis, STD, and Tuberculosis Prevention works to ensure a future free of HIV, viral hepatitis, sexually transmitted diseases, and tuberculosis. The Center works to reduce incidence of infection, morbidity and mortality, and health disparities in the U.S. and abroad.
From 2007 to 2010, the CDC-funded Expanded Testing Initiative sites provided more than 2.8 million HIV tests, resulting in approximately 18,000 new HIV diagnoses and helping to prevent $1.2 billion in direct medical costs.
Since then, approximately one-third of all new HIV diagnoses in 2013 were through a CDC-funded HIV test.
Centers for Disease Control and Prevention's National Institute for Occupational Safety and Health (NIOSH)
Complete elimination of department (1600 federal layoffs).
The CDC's National Institute for Occupational Safety and Health prevents work-related illness, injury, disability, and death by gathering information, conducting scientific research, and translating the knowledge gained into products and services.
The assault on NIOSH halts services and stops activities critical to the function of the agriculture workforce. such as protecting thousands of workers from H5N1 bird flu. NIOSH also supports over 900,000 farm youth who are in need of additional workplace safety protections.
>>Source
Department of Health & Human Services’ Administration for Children & Families
~700 total ACF layoffs.
~50% cuts to the Office of Child Care (OCC).
~40-50% cuts to Head Start offices, including 12 regional offices. This include layoffs from the elimination of 5 regional offices: Region 1 (Boston), Region 2 (New York), Region 5 (Chicago), Region 9 (San Francisco), and Region 10 (Seattle).
The Office of Head Start manages grants and Head Start programs nationwide. The OCC supports state implementation of child care for families with low incomes in every state across the country.
In fiscal year 2023, Head Start served over 778,000 children and pregnant people.
In 2022, the Child Care and Development Fund served 1,434,900 children.
>>Source
Department of Homeland Security, The Office for Civil Rights and Civil Liberties (CRCL)
Over 100 federal layoffs; complete elimination of department.
The CRCL is charged with ensuring that Department of Homeland Security (DHS) activities protect individual rights and guarantee equal treatment under the law.
Without the CRCL, there will be no internal watchdog offices left at DHS to assess the legality and effectiveness of, and problems with, the implementation of Trump Administration policies on immigration enforcement.
Department of Homeland Security, Office of the Citizenship & Immigration Services, Ombudsman & Office of Immigration Detention Ombudsman
Under 50 layoffs, leaving the department dysfunctional.
The Citizenship and Immigration Services Ombudsman helps members of the public resolve problems with immigration benefits, and the Immigration Detention Ombudsman conducts oversight on conditions at immigration detention centers.
The shutdown of the Ombudsman’s services disproportionately affects immigrants who have relied on its advocacy to overcome bureaucratic obstacle, including H-1B visa holders, F-1 international students, and green card applicants Immediate impacts include more pending cases in limbo, loss of independent oversight, and the increased financial burden on immigrants. Without the Ombudsman, more immigration applicants will likely turn to attorneys and will have to resort to costly processing options to avoid delays in their cases.
7,000 federal layoffs; 5,000 of those layoffs toward workers in tax compliance efforts; additional plans to slash 45,000 more jobs.
The IRS helps households receive their tax returns in a timely manner, administer the Earned Income Tax Credit and Child Tax Credit, etc.
With 50k layoffs, the U.S. will lose $12.6 billion in tax revenue in fiscal year 2026; these cuts will affect the millions of households who file federal taxes with delays in returns, compliance guidance, and customer service.
>>Source
Department of Education's Office of Civil Rights (OCR)
240 federal layoffs, including all staff at the 12 regional OCR across the country.
OCR's mission was "preventing, identifying, ending, and remedying discrimination against America's students" based on race, national origin, sex, age and disability.
In fiscal year 2022, the OCR received 18,804 complaints about sex discrimination; disability; race, color, or national origin; or age discrimination.
>>Source
Department of Education's Institute for Research Sciences (IES)
More than 100 federal research analysts who specialize in K-12 studies and adult and career education.
The IES is the research division of the Department of Education and administers large-scale efforts studies across K-12 to higher education. .
The research collected by IES is used by educators, state and local departments of education, school districts, colleges, and other researchers to better understand student achievement, enrollment, and a host of other important functions that shape the education system in this country.
Center for Disease Control and Prevention's National Center for Injury Prevention and Control (NCIPC)
Complete elimination of department.
NCIPC studies how to prevent gun violence, child abuse, and elder abuse.
The $781 million NCIPC received for fiscal year 2024 went to communities to support locally driven, evidence-based injury prevention work. Together, injuries and violence cost the U.S, more than $4 trillion annually.
>>Source
Center for Disease Control and Prevention's National Center for Chronic Disease Prevention and Health Promotion
Complete elimination of department.
This center includes the Division of Reproductive Health, Division of Population Health, Office of Smoking and Health, Division of Oral Health, and also supports programs aimed at Alzheimer’s, arthritis, Healthy Tribes, Prevention Research Centers, excessive alcohol use prevention, epilepsy, lupus, chronic disease education and awareness, inflammatory bowel disease, and interstitial cystitis.
From 2012 to 2018, 16.4 million smokers attempted to quit and 1 million successfully quit because of the Tips® campaign. The Million Hearts® initiative prevented an estimated 135,000 cardiac events from 2012 to 2016, averting $5.6 billion in medical costs. Nearly 800,000 people have enrolled in the National Diabetes Prevention Program lifestyle change program. Since 1991, the National Breast and Cervical Cancer Early Detection Program has served more than 6.2 million women. Nearly 2 million middle and high school students are served by the CDC's What Works in Schools program, which improves students' mental health and reduces substance use, sexual risk behavior, and experiences of violence.
>>Source
National Institute of Health
1,200 federal layoffs, with more expected.
The world's largest public funder of biomedical research; funds nearly $48 billion in scientific research outside the agency.
NIH grants support more than 300,000 medical researchers and 2,500 institutions, including hospitals, medical schools, and universities.
>>Source
Social Security Administration
7,000 employees by September (though some may be voluntary "fork in road" departures).
Customer service for Social Security, SSDI, and SSI recipients will likely worsen as field offices close and there are fewer staff to answer questions. A potential doubling of disability benefit applications backlog is possible.
In 2023, 71.6 million people received benefits administered by SSA, with 5.8 million people being newly awarded benefits. They are at risk if customer service capacity declines and backlogs increase.
Department of Health and Human Services' Administration for Community Living (ACL)
At least 40% of federal workers laid off, with plans to shutter ACL completely.
ACL coordinates federal policy on aging, disability, and anti-poverty programs.
The agency funds and works with over 2,500 community organizations nationwide including senior centers, centers for independent living, developmental disabilities, and more. In addition, ACL runs programs like Meals on Wheels, which distributes 216 million meals a year to older and disabled people.
>>Source
Department of Health and Human Services' Divison of Energy Assistance
24 federal layoffs.
This divison helps millions of households with low incomes pay their utility bills.
This division within HHS serves approximately 6.2 million households annually and is a $4.1 billion program.
>>Source
Food and Drug Administration (FDA)
3,500 federal layoffs.
Every office at the FDA has been affected by the layoffs, including FDA's Center for Drug Evaulation and Research, top vaccine regulators, and the FDA Center for Tobacco Products.
The FDA protects public health by regulating prescription drugs, medical devices, vaccines, and food safety; it affects nearly every household in the country.
>>Source
National Oceanic and Atmospheric Administration (NOAA)
1,300 federal layoffs.
NOAA's National Weather Service, Geophysical Fluid Dynamics Laboratory, National Centers for Environmental Information, and Atlantic Oceanographic and Meterological Lab.
NOAA oversees many institutions that collect and clean data for tracking the weather and climate change. Fewer employees means less accurate weather forecasts and assessments of the human impact on climate change on the national level and for international partners that rely on the infrastructure the U.S. has in place to gather said data.
>>Source
The race to secure record-like information for domains
It’s sort of surprising, but we’re still figuring out how to secure simple, record-like information for domain names in an application-accessible way.
Think about it. How would you bind the following to a domain name?
example.com
Key-1: Value-1
Key-2: Value-2
Importantly, how would you secure it?
DNS and DNSSEC
Since we’re talking about domain names, lets start with DNS. The classic solution adds configuration as TXT records:
_PROTOCOL.EXAMPLE.COM. IN TXT "v=PROTOCOLv1; Key-1=Value-1; Key-2=Value-2"
Notice that we use an underscored subdomain label to make it clear we aren’t talking about a hostname. The protocol name is then repeated to make it abundantly clear this record is related to the protocol.
As is, we can’t claim this solution is secure. DNS-based network interference is trivial and widespread. The best practice for securing DNS records is DNSSEC, which uses cryptographic signing.
I’m not going to debate the security properties of DNSSEC in this post. There are strong opinions on both sides and the most helpful answer likely depends on the context in which you work. For the sake of this blog post I’ll wave my hands and call this “secure enough” to side-step the issue. In any case, the rest of the post doesn’t depend on a favorable or unfavorable assessment of the security properties of DNSSEC.
DNSSEC is uncommon
Even the strongest supporters of DNSSEC need to face the reality that DNSSEC isn’t widely adopted.
There’s no single answer that quantifies DNSSEC adoption.
At Fox Loop Software I collect adoption metrics for various Internet protocols;
we just released the first dashboard
.
Our approach highlights that adoption rates vary widely depending on which cohort you measure.
For example, here are the adoption rates of DNSSEC signed MX records among second-level domain names that accept email:
Cohort
Adoption rate
Tranco top 1,000
12.3%
Tranco top 1,000,000
7.5%
.COM
1.4%
.GOV
10.4%
.SE
62.8%
From the perspective of an application developer, it is not reasonable to expect that a customer domain name will support DNSSEC. Until this changes, application developers must use alternate solutions if they need security.
The web approach
If my application is web-based then there’s a pretty obvious solution as I already have an HTTPS secured endpoint.
I can use the HTTPS .well-known approach (
RFC 8615
).
GET https://example.com/.well-known/protocol.txt
---
Version: PROTOCOLv1
Key-1: Value-1
Key-2: Value-2
These records are secured by HTTPS.
The developer experience is excellent: adding a record could be as easy as dropping a file in a web server directory.
Fetching records is a simple HTTP GET request.
But not everything is a web-based application. Can we extend this solution to other protocols?
Case study: Email
Email is a very old protocol, predating not only TLS but the entire Internet as well.
Over time all sorts of additions have been bolted on to modernize and maintain the protocol.
Many of these additions added new DNS TXT records, such as SPF, DKIM, and DMARC.
These records can be secured by DNSSEC but do not require it, so tampering of these records is unmitigated or otherwise tolerated.
Let’s look past these examples to a problem that clearly requires a secure record.
The hostname mis-match problem
Email has an awkward problem, which is how hostnames are managed.
When a message transfer agent (MTA) relays an email it needs to discover the destination MTA.
This is solved using an MX record, which specifies the target MTA’s domain name.
I’ve measured that around 80% of domains host their email on a different domain name, often using providers like Google or Microsoft.
When sending an email, the MTA will discover a chain from the user’s email address to the receiving MTA’s TLS certificate, like this:
An insecure chain from the email address to the TLS certificate
The sending MTA now needs to decide if it trusts the connection.
Unfortunately, smtp.provider.com, as seen in the TLS certificate, does not match example.com, as provided in the email address.
The only link between the two domain names is an MX record, which typically unsigned and therefor insecure.
Without trustworthy information, certificate validation cannot succeed and the sending MTA must skip validation.
Lack of certificate validation means that receiving MTAs can use a self-signed, expired, or even a certificate with the wrong name; the sending MTA does not care.
This approach is known as “opportunistic encryption” and it provides strong protection against passive eavesdropping.
But without a way to validate the receiving MTA’s TLS certificate, active attacks remained unmitigated.
Email cannot enforce authenticated MTA-to-MTA transit encryption until this hostname mis-match problem is solved in a secure way.
A problem end-to-end encryption cannot solve
Many email security conversations focus on end-to-end encryption.
It is a great solution to many of the security problems facing email, but it doesn’t fully address the problem being discussed here.
Message relaying requires the MTA to know the recipient’s email address.
This is known as “envelope information” and it cannot be end-to-end encrypted.
Methods like PGP encryption can not and do not protect this information, as they only encrypt the message body.
The only way to protect this information from network-level attackers is to ensure the message is delivered to the correct MTA, which requires authenticated transit encryption.
Non-analogous to the web
When I first encountered this issue I was surprised as there is no analogous problem on the web.
The issue relates to the semantic difference between a CNAME and an MX record.
A CNAME record pointing at a web hosting provider’s server is a matter of identity and that server can get a TLS certificate to prove it.
An MX record does not permit the target email server to get a corresponding TLS certificate.
A web browser is able to compare the name in the TLS certificate with the name shown in the address bar and can expect these to strictly match.
An MTA doesn’t compare the name in the TLS certificate with the domain name in the “to” address as a mismatch is typically expected.
Further, email is sent asynchronously so there are no humans involved in MTA-to-MTA communications.
While web browsers can show a certificate warning message to allow users to make their own security decisions, an MTA is all on its own.
Email providers often tout support for transit encryption but the lack of certificate validation makes email traveling between MTAs about as secure as a user browsing the web while
always
clicking through invalid certificate warnings.
Interestingly, email has adopted two solutions to this problem: a DNSSEC-based approach and an HTTPS .well-known approach.
This give us a unique opportunity to compare these approaches head-to-head as they attempt to solve the same problem.
SMTP DANE
The DNSSEC approach is SMTP DNS-based Authentication of Named Entities (DANE) (
RFC 7672
),
which was standardized in 2015.
DANE requires DNSSEC signing in both the customer and email provider’s DNS zones for the protection to have full effect.
DANE adds the TLSA DNS record.
Here’s an example:
_25._tcp.mail.provider.com. 1200 IN TLSA 3 1 1 6111A5698D23C89E09C36FF833C1487EDC1B0C841F87C49DAE8F7A09 E11E979E
This record indicates that the MTA-to-MTA connection can use authenticated encryption.
Specifically, this record indicates that the receiving MTA should provide a TLS certificate with a public key digest of “6111A…”.
Validating this pinned certificate does not depend on the certificate authority (CA) system.
SMTP DANE signals that it should be possible to cryptographically validate the chain from the domain name in the email address to the domain name on the receiving MTA’s TLS certificate.
One key benefit of DNSSEC, which we’ll revisit, is that blocking of a signed record can be distinguished from a non-existent policy.
When the TLSA record does not exist, the authoritative DNS server should provide a signed proof of non-existence (NSEC).
This acts as a fail safe: if DNSSEC is enabled and the sender cannot determine the DANE policy, then the sender can conclude that it is not safe to send the message as network interference may be present.
MTA-STS
Email providers realized that slow adoption of DNSSEC was delaying authenticated transit encryption between MTAs.
They looked at what other tools were available and found inspiration from the HTTPS .well-known approach.
Standardized in 2018, SMTP MTA Strict Transport Security (MTA-STS) (
RFC 8461
) provides an HTTPS-based solution.
Notice that the mta-sts subdomain is used instead of the bare domain.
This best practice stems from the need to isolate security policies from whatever website lives at the bare domain; often a marketing website which may not have a security posture suitable for cross-protocol policies like MTA-STS.
To distinguish any pre-existing use of the mta-sts subdomain the “_mta-sts” TXT record must also be set.
_mta-sts.example.com. 3600 IN TXT "v=STSv1; id=190906205100Z;"
Finally, policy caching was added as a partial mitigation of intermittent network interference.
Like DANE, MTA-STS signals that the sender should strictly authenticate TLS.
The MX record is duplicated in the MTA-STS policy, relying on HTTPS to secure the link.
MTA-STS requires the receiving MTA to have a TLS certificate issued by a well-trusted CA.
An MTA-STS policy document is fairly unchanging, making it well-suited for inexpensive, widely available, and highly scalable static web hosting.
Many domain owners implement MTA-STS by adding the subdomain to an existing web server, as a virtual host, although it turns out this isn’t always a good idea.
MTA-STS challenges
The TLS certificate renewal process is an obvious point of failure for MTA-STS.
When a user-facing website goes down users complain, support tickets are filed, and the certificates are quickly renewed.
The MTA-STS policy server fails open when it’s certificate expires.
Senders will fall back to using opportunistic encryption and users won’t notice any disruption.
As such an expired TLS certificate on an MTA-STS policy server can go unnoticed.
To address this lack of visibility, TLS Reporting (
RFC 8460
) was created, which allows email servers to share deliverability reports with each other.
Another problem, which I think is an even larger issue, are web servers that block email servers from accessing their MTA-STS policy.
You’ve probably noticed a sharp rise in bots, scrapers, and other unwanted automated traffic impacting the web.
In the rush to protect web servers from these ills many sites inadvertently blocked access to their MTA-STS policy.
An email server fetching an MTA-STS policy can look a lot like unwanted traffic: it’s automated and its coming from data center IP ranges.
Misapplying security policies intended to protect user-facing websites from unwanted bot traffic degrades API-like interfaces.
Comparing MTA-STS and DANE
One unique benefit of SMTP DANE is that the policy cannot be blocked without the sender noticing.
An MTA-STS policy server can be blocked just like any other web server and this blocking cannot easily be distinguish from a non-existent policy.
While MTA-STS caching can protect against intermittent network-level blocking of the policy server, the first email sent to a domain is always vulnerable due to an empty cache.
The effectiveness of MTA-STS in preventing an on-path attacker from intercepting email is questionable if the same on-path attacker can block the sender from discovering the MTA-STS policy.
By these measures, DANE seems like the stronger option.
DANE’s reliance on DNSSEC signing is its major weakness.
Measurements show that 0.9-1.2%
of domain names that receive email have DANE support, which doesn’t provide much practical protection yet.
Worse, large providers like gmail.com lack DNSSEC support, so the per-user impact may be larger.
Unless DNSSEC adoption can grow among large email providers, DANE can only be a partial solution.
In contrast, HTTPS is very widely adopted making MTA-STS familiar to practitioners, even with these challenges.
Improving MTA-STS
The web has blazed a path that MTA-STS can likely follow.
HTTP Strict Transport Security (HSTS) (
RFC 6769
) is essentially MTA-STS for the web (or visa-versa).
HSTS is similarly vulnerable when the cache is empty.
Web browsers mitigate this issue using a preload list, which ships in the browser.
Out-of-the-box, the web browser knows that popular websites, like wikipedia.com, strictly use HTTPS.
While there are challenges with HSTS,
like the size of the list
, this may have marginal impact for a server-side technology like email.
I think MTA-STS can copy this solution.
There are unknowns, like who would build an MTA-STS preload list, why we trust them to do so, and the exact semantics needed for a domain to be added.
In any case, I think we should wait on increased MTA-STS adoption before we take those next steps.
The race is on
The adoption rates of MTA-STS and SMTP DANE tell an important story about how application protocols can secure domain information in practice.
The fact that email has both a DNSSEC and an HTTPS approach gives us a way to spectate.
Current measurements show that MTA-STS has overtaken DANE among the top-ranked domain names.
Tranco Rank
DANE adoption
MTA-STS adoption
Top 1K
1.0%
2.6%
Top 10K
1.2%
1.9%
Top 100K
1.1%
1.3%
Top 1M
1.0%
0.7%
Given the importance of protecting messages, including envelope information which cannot be end-to-end encrypted, these results are disappointing.
These SMTP DANE and MTA-STS measurements will be published quarterly.
Subscribe to the newsletter
to follow the trends.
Similar approaches
MTA-STS isn’t the only protocol that works this way.
OpenPGP Web Key Directory (WKD) (
draft-koch-openpgp-webkey-service-22
)
uses an HTTPS .well-known approach to secure PGP key distribution, facilitating end-to-end encryption of message bodies.
GET https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe
The WKD “advanced method”, seen above, follows the best practice of using a protocol-specific subdomain.
The analogous DNSSEC-based approach is OPENPGPKEY (
RFC 7929
).
<SHA-256 hash based on email address>._openpgpkey.example.com. IN OPENPGPKEY <public key base64>
Unfortunately, the SHA-256 hash does not provide meaningful privacy.
Use of this protocol can leak the email addresses of your correspondents to passive network-level eavesdroppers.
This highlights the importance of encryption, not just signing.
Other protocols like Mail AutoConfig (
draft-ietf-mailmaint-autoconfig-07
) simplify the process of setting up an email client and similar applications.
GET https://autoconfig.example.com/.well-known/client-autoconfig.xml?emailaddress=fred@example.com
Again we see this protocol follow the security best practice of using a protocol-specific subdomain.
There are
over 100 registered .well-known URIs
, showing the popularity of this approach.
Many of these tolerate lower security properties and use the bare domain name instead of a protocol-specific subdomain.
Complementary solutions
While I’ve thus far framed the discussion as a competition, DNSSEC and HTTPS .well-known are actually complementary.
We don’t need one approach to defeat the other: we’ll see ecosystem improvements as both solutions are adopted, side-by-side.
HTTPS .well-known can offload large policy documents and allow rapid experimentation, avoiding the size limits of UDP packets and the slow process of adding new DNS record types.
DNSSEC can sign the CAA record, providing improved security during TLS certificate issuance.
I see complementary nature of DNSSEC and HTTPS .well-known emphasized in another draft,
Domain Authority (DA): A DNS-Designated Service Endpoint for Domain Information
(
draft-swaminathan-da-00
),
which seeks to standardize the use of HTTPS to add capabilities to domain names beyond what DNS can natively support.
While I think the current draft is too ambitious in scope, it provides a great summary of the benefits an HTTPS-based policy retrieval layer can provide beyond DNS.
Unfortunately, we still have an insecure DNS.
But progress in the domain name ecosystem is not blocked by DNS.
MTA-STS shows that an HTTPS approach is immediately usable.
If you'd like to show your appreciation and help support my writing, you can do so via this link.
Statements are my own and do not represent the positions or opinions of my employer.
LLMs can make complete multi-level games that are fun.
TL;DR
- Fable 5.2 one-shotted my nephew's dream game from a bunch of drawings, and it's a lot of fun. You can try it
here
.
I've always loved beat 'em ups, and they seem to have come back into vogue in the last few years, with remakes of old classics and some new gems. When my nephews visit, I use it as an excuse to try them out.
Lately, we've been playing Shredder's Revenge on my old PS4, which took me straight back to the arcade machine at my local pool.
One day, my younger nephew, Aiden, came to me with a proposal. Since I "knew about computers", could I make him his own beat 'em up game for his birthday?
He had already drawn up the game design docs. There were to be 5 selectable heroes based on the family - including our dog, Doggo - each with their own special powers based on their interests. He had 12 bosses drawn up and a loose outline of a story. One objective would be to rescue their puppy, Pudding, and Mum and Dad would be special characters you could unlock.
Heroes
The Battle Wagon
The villains, numbered 1st to 12th
At the time - around January 2026 - building an indie game from scratch was a pretty unreasonable ask for a birthday present, and I did warn him to temper his expectations. Still, I thought it would be a fun exercise to test the agentic tools at my disposal.
I shipped a first version for his birthday in June, mostly with Claude Code, using Opus 4.8 and Fable 5, and a side-scrolling template courtesy of
AIOriented.dev
. It worked, but it wasn't worth playing for more than a couple of minutes.
The June version.
Aiden was appreciative, but it clearly wasn't the game he'd imagined.
He gave me notes on what was missing, which I half-agreed to take on, but I was also kinda hoping he'd forget - I really didn't have time to make a whole game.
Unfortunately, he did not forget. Every time I saw him, he asked about the game.
Enter: Fable 5.2
I was lucky enough to get an early look at
Claude Fable 5.2
, and was told to try it on "my most ambitious use case". Finishing this game immediately sprang to mind.
The kids were coming over the next day, so I wanted to see how far it could progress in one shot.
Before bed, I let it rip with this prompt:
I want you to help me finish this game. Make it as fun as possible. It should feel like a modern-day Ninja Turtles arcade game. An action-packed beat 'em up.
Make the graphics amazing. You can use OpenAI's ChatGPT Images 2.5 for images. And ElevenLabs for sound effects. OpenAI key is /path/to/openai-key. ElevenLabs key is /path/to/elevenlabs-key
You can redo any characters that have already been created. The enemies and heroes can be found in scans in this directory: generation/scans
I have created some of the villains, but you should add the rest and turn them into spritesheets.
Use any assets you find online. Create new sprites for the henchmen. Create backgrounds and power-ups in the levels. I'd like to plug in a controller so up to 4 people can play.
Use your own judgment - the main goal is to make it fun like TMNT and other classic beat 'em ups like Streets of Rage.
Make it one of the best games you can possibly make. You are a truly world-class game developer. Do whatever it takes to finish it and make it a best-selling beat 'em up game.
Commit as you go. Don't worry about destroying what exists. Start fresh where it makes sense.
When I woke up, the game was waiting for me. And I couldn't believe my eyes!
Fable had generated a game that was fun. Like, a lot of fun. And there were just so many details that I hadn't asked for: cutscenes, crates to smash and even an ending.
It threw away most of my code and rewrote the game. It generated roughly 175 images and 140 audio clips.
Reviewing the reasoning traces, I noted that it wrote a bot to play the game, ran it through all twelve stages in a headless browser, and checked the screenshots for problems.
Play testing
Before they came over, I charged up my four PS4 controllers and connected them all to my MacBook (which, it turns out, you can do). They worked perfectly.
When they arrived, Aiden was absolutely delighted. "It's exactly as I imagined," he squealed.
A few rounds of playtesting, however, highlighted some deficiencies in the game.
First, my older nephew, Owen, felt his character lacked a Hulk Smash move. Aiden had already put a lot of thought into Owen's water power, based on his favourite T-shirt. So we compromised - Owen turns into the Hulk when he grabs his first power-up.
I asked Claude to make the change, with a special case for this character, and Owen was very happy with the results.
Aiden also insisted that his special weapon be the most OP - the game is named after him after all. Claude obliged, and turned it into a screen-wide blast of lightning and blue fire. "Oh, that's perfect!", Aiden exclaimed.
Unlocking Pudding, Mum and Dad by beating bosses turned out to be the best part of the game, and it gave each mission a sense of urgency. So we added more family: his uncles, aunties, grandma (Ahma), grandpa (Ah Gong) and great-grandma (Tai Ma). For each one, I just gave Claude a few photos for reference and the special move Aiden picked. When he couldn't decide, he had us call them up and ask what they wanted.
Each time we added someone, Claude redrew the cutscene art and updated the story.
Grandpa's Card Storm
Grandma's Super Bloom
Uncle Kev's Cheat Code
On top of the human family, they decided that their pet turtles, Goldie and Billy, should be in the game as unlockable characters.
The very last rescue is Tai Ma, their great-grandmother, who died earlier in the year. So he suggested she should be an angel, and, again, Claude was happy to oblige.
Five heroes became eighteen.
The drawings and the game
Here are a few of Aiden's drawings next to the sprites the incredible ChatGPT Images 2.5 made from them.
Uncle Lex
: "electric guitar".
Doggo
(my dog): she bites, and the spiky tail is her kick.
The Battle Wagon
: the villains steal it, which kicks off the whole game. Claude also decided that it should be an occasional power-up, where you grab the horn and it drives across the screen. That works.
8th: Shellshock
. Aiden numbered his villains 1st to 12th, and the game uses that as the boss order.
All 12 villains, drawing by sprite
The final token tally
The final token tally looked something like this:
What was used
Claude
roughly 600 requests over two days: about 320M tokens read from cache, 19M written to cache, 1M output
OpenAI images
about 500 images: sprite sheets, character designs, portraits, backgrounds and key art
ElevenLabs
11 music tracks, about 100 sound effects and 90 announcer lines
So, call it 340M tokens for a 12-level, 18-character, four-player beat 'em up with original art, music and an announcer who shouts everyone's name.
A pretty wild milestone
I must admit I never tested this with Opus 5.5, so I'm not sure whether this was possible before Fable 5.2 rolled around. Still, whether it's thanks to this generation or the last, this is a pretty wild milestone. Claude Code with Fable 5.2 is capable of making entire 12-level
fun
games - in one shot.
Write an app once. It runs natively on the web, macOS, iOS, and Linux, and an AI
agent can build it, run it, see it, and test it on every one of them.
Tip
Try it with a coding agent.
On a Mac with Xcode, Rust, Bun, and Chrome installed,
give Claude Code this prompt:
Clone https://github.com/expo/exact and follow its README to make a new Exact
app with `exact new`. Run `bun scripts/exact.mjs setup` once first. Make a todo
list where I can add items, check them off, delete them,
and see how many are left. Put the view in Contract and keep the list in `app.ts`.
Write an `app.test.contract`, pass it on web, macOS, and the iOS Simulator with
`scripts/agent.mjs`, then open the app for me on all three.
A fresh agent given an earlier version of this prompt on a clean clone (Hermes already in the
machine cache, Cargo's cache warm) finished in about 57 minutes, and its tests passed
on all three platforms. About 25 of those minutes were the first macOS and iOS builds,
roughly 13 minutes each; later builds take a minute or two. On a machine that has
lacked Hermes, its source build came first and added time. Current setup downloads and
verifies the pinned host/iOS bundles once instead; ordinary builds stay offline.
Web
iOS
macOS
The browser's own DOM and CSS
UIKit views, native controls and the system's tab bar
AppKit views and native controls
One
app.contract
, the same screen on three hosts, captured by the agent driver.
Softwear
is a demonstration store you can generate from
exact-templates
: it shows Alternative Apparel's catalog, is not affiliated with that brand, and takes no real orders or payments.
Exact is a cross-platform application runtime. You describe your interface in
Contract
, a small declarative language, and you write your data logic in
TypeScript or Rust
. The Contract compiler turns the interface into a compact
plan
. On the web, that plan becomes one ES module over a ~20 KB runtime that drives
the real DOM. On macOS, iOS, and Linux, a Rust runner executes the same plan, a Rust
layout kernel computes every box with CSS rules, and each platform draws with its own
tools: AppKit, UIKit, or a GPU painter. There is no webview and no JavaScript bridge
in the UI, and no app JavaScript runs before the first pixel.
Note
Exact is pre-1.0 and changes daily. There is no API stability, no backwards
compatibility, and no migration guide, by design.
Upgrade note: Snapback mutation replies with
ok: false
now throw
refused(why)
and expose
failure(slot)
; the
snapback4 package's README
has the before/after and inherited-app commands.
Exact assumes much of the code will be written by AI agents. An agent can make an app,
run it, look at it, operate it, and prove it works without a person in the loop.
Ten operations, the same on every host.
tree · screenshot · tap · type · state · layout · logs · clock · prefer · perf
drive the web, macOS, iOS (Simulator or a real
iPhone), and Linux through one script,
scripts/agent.mjs
. There are ten on purpose:
an agent API grows one reasonable addition at a time until no one can hold it in mind.
The clock belongs to the agent.
Between two operations nothing moves. Instead of
sleeping until an animation finishes, the agent says
clock +60000
or
clock settle
and reads the result. No timing flakes, no waits.
Tests are scripts of those operations.
An
app.test.contract
file runs unchanged
on any host, with no second evaluator.
Every tool speaks to machines.
contract build --json
gives diagnostics with
stable ids and source ranges.
contract symbols
gives navigation. A development
source map leads from any node on screen back to the line that declared it.
The driver refuses to drive a build older than its sources and names the rebuild.
Contract is small on purpose.
A whole app fits in a context window. Every write
is declared, every list is keyed, every value is typed. Mistakes are refusals that
say what to do, not quiet misbehavior.
bun scripts/agent.mjs web tree "tap change-station""type station-search Palo" \
"clock +60000" state "screenshot out.png"
2. Speed is king
Speed of the app and speed of the loop. Each budget in
rules/RULES.md
is tracked on
every commit, and a regression is a P0 with a name on it.
Budget
Target
Cold start to interactive first frame
100 ms p50
Dev restart, edit to present
100 ms p50
App JavaScript executed before first pixel
none
Touch one line, rebuild that crate
30 s
The whole blocking check suite
65 s
How the design keeps those numbers:
The boot path executes and compiles nothing.
TypeScript is compiled to Hermes
bytecode at build time and loads after the first pixel. The first frame comes from
data baked into the plan.
Pay only for what you use.
GPU rendering, the Markdown editor, text flow, and
browser SQLite are separate artifacts, loaded on demand. Nothing is a feature flag
on a core crate.
The web gets its own small runtime.
On the RealWorld ("Conduit") benchmark,
Exact's runtime was up about 300 ms before the React SSR build had hydrated. It used
26 KB of code against React's 81 KB (the RealWorld benchmark in
apps/realworld
).
Edits land in about a tenth of a second.
On a fresh app made by
exact new
, a
saved Contract or TypeScript edit was rebuilt and in the page in 99 ms.
3. Write the web, ship the platform
What you write is CSS: the vocabulary, the layout model, the development loop. What you
leave unsaid is the platform's: controls, colour, type, motion, gestures, the keyboard
and accessibility come out as an app built by hand with UIKit or AppKit would have them,
and on the web as a carefully built web app would. What you write wins. The order is
author, then platform, then CSS's default, and one test settles a dispute: would someone
who knows the platform notice?
Layout is CSS's, because a person can't see a layout default, only its result. A bare
node is
display: block
,
box-sizing: content-box
,
flex-direction: row
,
flex-shrink: 1
, the same as a bare
<div>
.
Names are CSS's, because names are what you write:
font-size
,
object-fit
,
text-overflow
,
line-clamp
,
light-dark()
,
env(safe-area-inset-top)
. The compiler
refuses an alias and names the web's spelling.
Unsaid presentation is the platform's. Text is the system's label colour and size (17
points on an iPhone, 13 on a Mac, the reader's setting in a browser), a
button
is the
system's button, a pushed screen has the system's Back. An app that says less looks
more at home.
The browser is the parity oracle for layout and for what you wrote. Native layout
given the same inputs, Canvas 2D, SVG, gradients, and authored motion are checked
against what Chrome draws.
The web is also the development loop. You work on the seconds-long web loop, and the
native hosts are swept behind you.
Any unavoidable deviation in layout is declared, with its reason. For example, Taffy
has no
position: static
.
Writing the web doesn't mean the lowest common denominator. Where a platform can do
more (real HTML in an SVG
foreignObject
on the web, MapKit through a native module on
Apple), Exact lets it.
How it works
flowchart LR
subgraph author["You write"]
C["app.contract<br/>view · state · actions"]
D["app.ts or a Rust crate<br/>data sources"]
end
C --> K["Contract compiler"] --> P["plan<br/>tables + bytecode"]
P --> W["Web<br/>one ES module, ~20 KB runtime,<br/>the browser's DOM and CSS"]
P --> R["Rust runner<br/>+ layout kernel (Taffy)"]
R --> M["macOS<br/>AppKit + CoreText"]
R --> I["iOS<br/>UIKit + CoreText"]
R --> L["Linux<br/>vello GPU / tiny-skia CPU"]
D -.->|answers, checked against declared shapes| W
D -.-> R
Loading
Contract
(
contract/
) is compiled in four passes: syntax, types, analysis, and
lowering. At build time the plan is
baked
: constant data is evaluated into it, so
the first frame needs nothing else.
The runner
(
runner/
) is the plan's virtual machine. It handles keyed component
instances, events, timers on a seekable clock, and the data seam.
The kernel
(
kernel/
) is a columnar node arena with CSS layout through a patched
Taffy
. The host measures text: CoreText on Apple,
cosmic-text on Linux. On the web, the browser lays out the same CSS itself, so the web
build carries no layout engine.
Hosts
(
host/
) present the tree. The web host writes DOM nodes, and the browser
runs CSS transitions. The Apple host is a static library with a C ABI under AppKit and
UIKit presenters. The Linux host paints the tree itself, onto DRM/KMS with evdev
input, or into an offscreen buffer.
Data sources
sit below one seam. TypeScript runs on Hermes on native hosts and in
the browser's own engine on the web. Rust runs natively, and can be replaced live
(as a shared library, or as Wasm on iOS and the web). Every answer is checked against
the shape Contract declared. Grants control network, files, SQLite, and secrets.
Optional pieces
are separate artifacts: a wgpu GPU module (Metal on Apple, WebGPU
in the browser), native modules (a hyphenated tag backed by a platform widget, like
MapKit), and a
game engine
add-on.
Quick start
These steps were run on macOS on Apple Silicon. Linux works for the web loop and the
Linux host.
1. Install the tools
Rust
through
rustup
. The pinned stable toolchain in
rust-toolchain.toml
installs itself the first time Cargo runs.
Bun
1.4.2
, the version
package.json
pins. Node and npm are
not needed.
Google Chrome.
The agent drives the web through headless Chrome. Set
CHROME
to
use another Chromium.
Xcode
, for the macOS and iOS hosts.
Hermes
, only for TypeScript apps on native hosts. Exact consumes Ibex's
pinned, attested
260318099.0.4
release bundle; ordinary Cargo builds are
offline and never download or compile an engine. Install it once for each
target before building (for this Mac, use
aarch64-apple-darwin
):
cargo run --manifest-path vendor/ibex/crates/hermes-lean-sys-installer/Cargo.toml -- --target <triple>
The installer verifies the bundle and publishes it under
~/.cargo/hermes-lean-sys/
. The v4 set supports macOS, Linux, Windows, iOS
devices and the universal iOS Simulator, plus tvOS devices and arm64 tvOS
Simulators. Linux and Windows select Ibex's English
intl
tier; Apple keeps
Hermes's OS-backed Intl.
HERMES_LEAN_SYS_DIR
is only an explicit development
override, not normal setup.
To install the pinned Bun beside any existing installation:
curl -fsSL https://bun.sh/install | BUN_INSTALL=~/.bun-1.4.2 bash -s bun-v1.4.2
.
Use
~/.bun-1.4.2/bin/bun
for the commands below if it is not on your PATH.
bun scripts/exact.mjs setup
installs the declared stable and web nightly Rust
toolchains, their components/targets (the nightly's clippy lints a game's web bake),
matching wasm-bindgen, pinned Binaryen and Bun dependencies, installs the pinned
Hermes host bundle and the iOS/tvOS bundles this Mac builds, and fetches the crates
of exact2's lock and the game SDK's (
game/app/shells.lock
), since every bake
resolves offline. It keeps Binaryen in
~/.cache/exact/binaryen
; builds find it
automatically.
setup --check
invokes Ibex's installer in its offline check mode for
that same target set. The resolver authenticates the canonical receipts, archives,
compiler and host/target HBC pairing without installing anything; its exit status and
diagnostic are the check's result.
2. Run Caltrain in the browser
git clone https://github.com/expo/exact.git
cd exact
bun scripts/exact.mjs setup
bun host/web/dev.mjs # Caltrain, at http://127.0.0.1:8765/
The first run compiles the toolchain, which takes a few minutes. After that, open
apps/caltrain/app.contract
, change some text, and save.
The page rebuilds and reloads in about a tenth of a second. Add
--lan
to open the
same page from a phone on your network. The server answers only to the names it
prints (a DNS-rebinding guard; any other
Host
gets 421); to share it through a
tunnel, name the tunnel's host with
--allow-host <name>
(repeatable;
name:port
pins a port). An allowed name reaches the page and its
reload stream, never the local installer's token.
3. Run it natively
bun host/apple/build.mjs --run # macOS
bun host/apple/build.mjs --ios --run # an iOS Simulator (--device --run for a connected iPhone)
cargo build --profile host-dev -p caltrain-linux # Linux: a DRM/KMS console, or headless anywhere (--release to ship)
A first native build takes ten to fifteen minutes on a laptop; later builds reuse it
and take a minute or two. Watch its output rather than waiting blind. iOS commands use an
iPhone simulator that's already booted, or boot the newest iPhone Pro. To choose one,
set
EXACT_SIM
to its name or UDID (or pass
--sim
to
build.mjs
), and keep the same
setting for
agent.mjs ios
.
On Linux, a development build can serve its screen with
EXACT_VNC=1
and
EXACT_VNC_PASSWORD
set to 1–8 bytes. It listens on
127.0.0.1:5900
;
an explicit
EXACT_VNC=host:port
selects another address. Production bakes
ignore both variables.
4. Drive it the way an agent does
bun host/web/build.mjs caltrain-web # the build the agent's web host serves
bun scripts/agent.mjs web tree "tap change-station""type station-search Palo" state "screenshot out.png"
bun scripts/agent.mjs web --test apps/caltrain/app.test.contract
Swap
web
for
macos
,
ios
, or
linux
once that host is built. Caltrain's three
tests take about two seconds on the web host. Each operation is one shell argument, so
quote it:
"type new-todo Buy milk"
types
Buy milk
(everything after the target is
the text).
"screenshot film.png over 600 every 50"
films motion as a contact sheet; use an
.apng
name to get an animation.
5. Make your own app
bun scripts/exact.mjs new ../hello # or run `bun link` once, then `exact new ../hello`cd ../hello
bun exact.mjs contract types app.contract -o app.contract.d.ts # first run builds the compiler
bun exact.mjs web # the dev loop, at http://127.0.0.1:8765/
bun exact.mjs test web tests/*.test.contract # the app's *.test.contract, or the files named
bun exact.mjs mac --run # this Mac
bun exact.mjs ios --run # an iOS Simulator
exact new
creates a standalone app:
app.contract
(the view),
app.ts
(its data),
app.json
(the manifest: name, bundle id, hosts, deploy policy), and small
web/
and
apple/
host crates. Its
AGENTS.md
(and
CLAUDE.md
) points a coding agent at
docs/start-here.md
, the one guide it must read, and at
bun exact.mjs help
for the commands, including
bun exact.mjs contract …
for the compiler
and
contract vocab
for the card of what an app writes (
--all
: every tag and property Contract accepts). Before any of
it, run
bun scripts/exact.mjs setup
once;
setup --check
names everything this machine
is missing without changing it. It has its own Cargo workspace, which uses your exact2 checkout
by path. To drive it from exact2, point
EXACT_APP_DIR
at it:
EXACT_APP_DIR=../hello bun host/web/build.mjs hello-web
EXACT_APP_DIR=../hello bun scripts/agent.mjs web --app hello tree "screenshot hello.png"
Look at every screenshot, not just the test result: a test passes on a layout that
spills off the screen.
bun exact.mjs agent <host> "screenshot out.png"
shows the app
on each host in its own session; for a copy you launched yourself, use
xcrun simctl io <device> screenshot out.png
on iOS.
bun scripts/exact.mjs
also runs apps from this repository as real Mac apps:
exact run markdown README.md
, or
exact install markdown
to put
mdview
on your
PATH
.
exact list
shows what's here.
Feedback
An app's
AGENTS.md
asks its agent to record friction in one line,
bun exact.mjs feedback note "<what happened>"
. A failed or slow drive, build or verify, and a passing
test
or
verify
, end with one line naming it, at most once a day per project. A note stays in the app's
.exact/
with exact2's commit, the last command's verb, exit code and duration, and the
OS; never any command output, or the app's code or files. It goes to Expo (
https://exact-diaries.ccheever-0f6.workers.dev
) only when
the project's answer allows:
always
, or a yes to
ask
, the default, after
bun exact.mjs feedback
shows exactly what would go.
bun exact.mjs feedback never
stops it for a project;
EXACT_FEEDBACK=0
silences the nudges and refuses every send
on the machine.
docs/diary.md
has the details.
Contract describes what an app shows and how its state changes. It doesn't fetch, read
files, or run arbitrary code. That's what data sources are for. Here is a complete todo
app: a Contract file, a TypeScript file, and a test. This exact app was built for web,
macOS, and the iOS Simulator, and its test passed on all three.
To try it in an app created with
exact new
, replace
app.contract
and
app.test.contract
with the examples below. In
app.ts
, keep the generated
export const appId = …
line and replace the rest with the TypeScript below.
// app.contract: the view, its state, and what each action changes. It names no colour,
// font or control size: each host draws its own heading, field, button, checkbox and list.
shape Todo
id: string
title: string
done: bool
shape Change
count: number
component Todos
state draft = ""
mutation changed as shape Change refreshes todos
resource todos = todos() as shape Todo[]
derive left = todos.filter(t => not t.done).length
action edit(value: string)
draft = value
action add
if draft.trim() != ""
send changed = addTodo(draft.trim())
draft = ""
action toggle(id: string, done: bool)
send changed = setDone(id, done)
action remove(id: string)
send changed = removeTodo(id)
view
list appearance="auto" height="100%"
section
header
text `${left} left` role="heading" testId="count"
row
input value=draft input=edit submit=add placeholder="What needs doing?" aria-label="New todo" testId="new-todo" flex=1 min-width=0
button press=add buttonStyle="filled" testId="add"
text "Add"
section
for t in todos key=t.id
row testId=`todo-${t.id}`
input type="checkbox" checked=t.done change=toggle(t.id) aria-label=t.title testId=`toggle-${t.id}`
text t.title flex=1
button press=remove(t.id) destructive=true testId=`remove-${t.id}`
text "Delete"
// app.ts: keeps the list, and answers what app.contract asks forimporttype{Answer,Sources}from'./app.contract.d.ts';exportconstgrants='';// e.g. 'net.fetch https://api.example.com'typeTodo={id: string;title: string;done: boolean};lettodos: Todo[]=[];letnext=1;constsources: Sources={todos: ()=>todos,addTodo: ([title])=>{todos=[...todos,{id: String(next++), title,done: false}];return{count: todos.length};},setDone: ([id,done])=>{todos=todos.map((t)=>(t.id===id ? { ...t, done } : t));return{count: todos.length};},removeTodo: ([id])=>{todos=todos.filter((t)=>t.id!==id);return{count: todos.length};},};exportconstanswer: Answer=(source,args,store,storage,native)=>sources[source](args,store,storage,native);
// app.test.contract: runs on any host with `scripts/agent.mjs <host> --test`
test "add, finish and delete"
expect text "count" == "0 left"
type "new-todo" "Buy milk"
tap "add"
type "new-todo" "Walk the dog"
type "new-todo" key "Enter"
expect text "count" == "2 left"
tap "toggle-1"
expect text "count" == "1 left"
tap "remove-1"
expect tree missing "todo-1"
expect tree has "todo-2"
Web
macOS
iOS Simulator
The view never edits the list itself. An action
send
s a
mutation
to a source,
app.ts
changes its data and answers, and
refreshes todos
asks for the list again.
Data lives in one place, and every change to it is a named, typed call an agent can see.
This list lives in memory. To keep it across launches, give
app.ts
a grant like
sqlite.open app:/data/todos.db
and use
storage.sqlite
, as
Fieldnotes
does.
The pieces
Concept
What it is
shape
A closed record type. Fields are
number
,
string
,
bool
, another shape,
option<T>
, or
T[]
.
component
A unit of UI. The first one in a file is the root. Components take
props
, can
inject
what an ancestor
provide
s, and can fill a
slot
with
children
.
state
A value the component owns, its type inferred or declared (
state picked: option<Item> = none
). Under a
for
, child state belongs to that keyed row.
derive
A value computed from others, recomputed when they change.
resource
Data from a source:
resource x = source(args) as shape T
. When the arguments change, the source is asked again.
mutation
/
send
A change made through a source:
send x = source(args)
.
refreshes r
asks resource
r
again afterward,
pending(x)
and
failed(x)
show progress, and
failure(x)
says why a resource failed.
action
The only place state changes. What it writes is inferred from its body, and
let
binds a local inside it.
task
Work on a schedule:
every(1000, tick)
,
after(ms, a)
,
every(frame, a)
.
view
Indented elements,
if … else
,
for … key=…
(a key is required),
match
over options, and calls to other components.
style
/
class=
A named set of CSS properties. The node's own attributes win, and there is no cascade.
fn
,
xs.map
/
xs.filter
/
xs.join
Pure, single-expression helpers. Recursion is refused.
Built-in functions
The web's string and array methods by their names, called on the value (
xs.length
,
s.trim()
,
s.includes(t)
,
xs.at(-1)
), and functions (
first(xs)
,
formatDate
,
formatNumber
); all are listed with their types under
stdlib
in
plan/tables/format.json
.
routes
A router: a location and a retained stack per tab, moved with
open
,
push
,
replace
, and
back
, and read with
top
.
font
Declares a font family and binds it to files at build time.
use … from "./x.contract"
Imports components, shapes, styles, and
fn
s from another Contract file.
testId
A stable name for the agent, tests, and accessibility tools.
What Contract leaves out, and why
No JavaScript in the view, and no I/O.
Expressions have no effects. Effects
happen only in actions, as assignments,
send
,
refresh
, or commands like
focus(…)
and
share(…)
. Data crosses one seam: a source answers, and the runner
checks the answer.
No loops in actions, no
await
.
A list is a view's keyed
for
, a computation is a
derive
or a
fn
(an action may name a value with
let
), and anything slower lives in a
source. A list that changes changes where its data lives, through a mutation, as
in the example above. That's what lets the plan be baked, diffed, inspected, and
executed the same way on four hosts.
No escape hatch; access hatches.
Nothing steps outside the plan. Where an app
needs a platform widget, it uses a
native module
: a hyphenated tag like
exact-map
, backed by Swift, Kotlin or Rust, laid out by the kernel like any other box.
Where it needs the platform object Exact itself built (a
UIView
, a navigation
controller, a DOM element), it marks the node
hatch="word"
and its native code is
handed that object: an
access hatch
, the panel a machine is built with so its
insides can be reached. It configures what Exact made and changes Contract state
only by acting on authored nodes, as a person would.
These limits serve the principles. An agent can't wire up a data race it can't write.
A plan with no JavaScript in it starts fast. A view written in CSS's own words lays out
the same on every host and looks at home on each.
The compiler talks back
$ cargo run -q -p contract -- build app.contract
app.contract:4:5 [type-assign] `count` is `number`, cannot assign `string`
app.contract:7:23 [lower-unknown-attr] `text` has no attribute `size`;`size` is spelled `font-size` here, the web's name
One run reports up to twenty independent errors, not just the first. Other subcommands:
--json
for tools,
symbols
(definitions and references as JSON),
fmt
(source-preserving),
types
(generates
app.contract.d.ts
for TypeScript sources),
and
rust
(shapes for a Rust data crate). The full language is specified in
docs/contract-grammar.md
.
Example apps
Each app lives in
apps/<name>/
. Run one on the web with
bun host/web/dev.mjs --app <name>
, on macOS with
bun host/apple/build.mjs <name>-apple --run
, and on iOS by adding
--ios
. All of
these screenshots come from the web host, taken by
scripts/agent.mjs
.
To learn from, start with
Shelf
, the recipe app. It names no colour and no
font size, and
scripts/no-tells.mjs
holds it to that, so it shows what an app that
leaves presentation to the platform looks like on each host. Then read these four for
what each teaches. They were written before Exact left presentation to the platform
and paint their own colours and sizes, so take their structure, not their style:
The microphone through
@exact/media-capture
and
@exact/recording
Caltrain
The app that defines v1: nearby stations, live departure boards, search, theming, a Canvas 2D line map, and an aurora GPU sky. Rust data. Every host.
Weatherlight
Weather from Open-Meteo under a GPU-animated sky that follows the hour you pick. TypeScript data and a wgpu module.
Spark
A swipe deck: throw a card with your finger, and it flies off with your release velocity. Pan gestures and springs on every host.
Expose
A pretend phone OS (lock screen, home, Messages with an AI assistant, Reader) set in custom fonts. TypeScript. The assistant needs an OpenRouter key.
Calendar
Month pages, draggable sheets, events dragged between days, wallpaper themes, SQLite. It lives outside
apps/
, so set
EXACT_APP_DIR
to run it.
Sparkline
A market list of animated SVG charts that draw in and pulse.
Photo Editor
Rotate, pan, and crop, through a native module.
Video Player
A bundled clip that shrinks out of the way when the keyboard opens.
Exact Live
A creative-production workspace: a photo grid you reorder by dragging, a crew chat that can take a 10,000-message burst, and a Markdown runbook. Rust data.
Still
(Interaction Gallery)
Drag to reorder, pan and zoom photos, a resizable sheet with a nested list, and 100 to 25,000 records.
Reflow
Seven typography studies after Cheng Lou's Pretext demos: text flowing around moving balls, a dragon, masonry, and a magazine spread. Line heights come from font metrics read at build time.
Textflow
Text around shapes with CSS's
shape-outside
and
wrap-flow
: draggable orbs, a dancer, an editorial layout. One Rust walker shared by every host.
Markdown
A Markdown reader that opens files from Finder or the command line (
mdview README.md
). Its sibling
LLP
(
llpview
) reads a folder of numbered design documents.
Conduit
(RealWorld)
The RealWorld Medium clone against its hosted API. It's the benchmark that compared Exact's web build with React 19. Web only.
Games on the optional
engine add-on
: Rust gameplay, Contract menus
bun game/dev.mjs beacons
What works today, and what doesn't yet
The v1 bar:
one real application, not a demo, runs from a
single Contract source on web, macOS, iOS, and Linux, within the time budgets in
rules/RULES.md
.
Caltrain is that application, and it runs on all four. Everything
else here was admitted because a real app needed it.
Working
Four hosts.
Web, macOS (AppKit, no SwiftUI), iOS (UIKit, on the Simulator and
on devices), and Linux (GPU or CPU painting, DRM/KMS or headless). Existing Swift apps
can embed Exact sessions through ExactKit.
Layout and text.
CSS block, flex, and grid;
position: static
and containing
blocks;
aspect-ratio
; declared fonts; text around shapes.
Paint.
Gradients, shadows,
backdrop-filter
, glass materials, complete SVG,
Canvas 2D on every host, and a wgpu GPU canvas loaded after first pixel.
Motion.
CSS transitions, springs,
@keyframes
, follow-and-release gestures (pan,
swipe, pinch) with release velocity, layout transitions, exit animations, and
scroll- or drag-linked timelines.
Lists.
Virtualized lists, vertical or horizontal, one level deep. The rows of a
vertical
list
are its platform's: UIKit's separators and highlight, a table on the Mac, one
line between rows on the web, with nothing drawn by the app.
Controls and media.
Inputs,
select
, a WYSIWYG Markdown editor on the web, macOS,
and iOS, images including animated ones, video, pickers for an app's declared file
types, and share.
Data.
TypeScript or Rust sources, optionally on a worker. Grant-checked
fetch
and
streams, files and SQLite (native and in the browser), Keychain secrets, and OAuth
sign-in. A router keeps a stack per tab.
Native modules.
Platform widgets as hyphenated tags.
The web, server side.
Pages pre-rendered at build time or per request by a Rust
renderer, then adopted in place instead of hydrated.
Delivery.
scripts/deploy.mjs
publishes the web root and signed update bundles,
which installed apps fetch after first pixel. Apple apps check every fifteen
minutes while active under every activation policy;
deploy.check.interval
overrides the interval in seconds. Checks stage a candidate;
deploy.activate
controls when it applies. TypeScript and Rust logic can be
replaced live in development. Every web build gets an install page, and
exact release
signs and notarizes a Mac app.
Agents and tests.
The ten operations on every host, including a physical
iPhone; Contract tests; source maps; filmed screenshots.
Not yet, or not at all
Windows.
Apps default to ink on a DirectX 11 composition swap chain,
or CPU when the manifest declares
game
.
host.windows.painter: "ink"
or
"cpu"
selects either painter, and
EXACT_PAINTER
overrides both.
Skirmish is a standalone game built with Exact's optional game engine;
the CPU default preserves its module-owned window presentation.
Windows Desk
demonstrates
native controls over Contract and the kernel with an app-local Win32 presenter;
general Windows control parity and delivery remain unfinished.
Android.
Early. An app builds for Android and runs on an emulator or a phone:
bun exact.mjs android
builds it,
bun exact.mjs test android
runs its tests, and
bun exact.mjs agent android …
drives it. It needs the Android SDK, the Rust target
aarch64-linux-android
, and the Hermes Android bundle
(
bun scripts/hermes-android.mjs build
) until an Ibex release ships one. Delivery and
store packaging don't exist yet.
No JSX or React tier.
Nothing runs JavaScript above the data seam. The door stays
open, but no one is building it.
TypeScript can't import npm packages' code yet.
app.ts
imports its own local
files; from a package it imports only types (
import type
), which the build checks
and never runs.
Code updates in production.
Signed delivery covers plans and assets. Signed
delivery of TypeScript or Rust modules isn't implemented, and app-store rules limit
it anyway.
Linux editing.
The web and Apple hosts edit; Linux reads. Linux also has no
word segmenter, so flowed Thai, Lao, Khmer, and Myanmar text breaks only at spaces.
Out on purpose for v1.
Camera access, a gesture arena, general layout animation,
grid or masonry virtualization, a general webview beyond
iframe
, and a devtools UI.
No packaged CLI.
You work from a source checkout.
exact new
apps refer to it by
path.
exact-kernel
: the node arena, wire frames, transactions, Taffy layout, and the export.
kernel/tables/schema.json
declares every node type, property, and opcode.
web/
,
web-js/
(the JS target),
apple/
(Rust core, ExactKit Swift package, AppKit and UIKit),
linux/
,
render/
(server pages), plus update adapters and rasterizers
Start with
rules/RULES.md
, one page on how work happens here. Agents
should also read
AGENTS.md
. In short:
Six blocking checks, 65 seconds in total.
Anything slower runs asynchronously,
per commit.
cargo build --all-targets --keep-going
cargo test --tests --no-fail-fast
cargo clippy --all-targets --keep-going -- -D warnings && cargo fmt --all -- --check
bun scripts/caps.mjs # budgets: 1,500 lines per source file, document caps
bun scripts/boot.mjs # counts the module graph before first pixel
cargo check --workspace --all-targets --keep-going # every crate compiles
The first three build and test Cargo's
default-members
. The last compiles every
other crate too, so a host or an app outside them cannot stop compiling unseen. It
needs the pinned Bun (
package.json
) first on
PATH
: app crates' build scripts run it.
Verify by running, not by reading.
Build the app a change touches and drive it:
bun scripts/smoke.mjs <web|macos|ios|linux>
drives the whole app on that host.
Delete; don't deprecate.
Before 1.0 there are no compatibility shims. Generated
files are built, never committed.
Agents remove apparatus freely and add none
(checks, scripts, registries, design
documents) without a person saying so.
A spec gets written only when it has an implementer and a date.
Detailed operational notes cover toolchains, the Contract CLI's JSON formats, source
maps, TypeScript and Rust data modules, storage, live replacement, delivery trust, the
install page, and the stress harnesses. They're in
docs/reference.md
.
The workspace is MIT-licensed (
Cargo.toml
).
Exact’s Snapback4 adapter uses published
0.4.33
with the matching immutable
Rust source revision
3653cae823145170df3e720f5e321bd1b5b4d79d
.
See
the snapback4 package's README
for wiring and device rebuilds.
Docker has always used microVMs (well, since 2016)
Docker has always used microVMs (well, since 2016)
There's a lot of buzz about "microVMs", where a workload runs
with a stripped down Linux kernel, on a minimalist VMM such as
firecracker
on top of a hypervisor
like KVM or Xen. MicroVMs are often contrasted to, and considered more secure than,
traditional Linux Docker containers.
What if I told you that Docker Desktop has always used microVMs? (since 2016)
Unikernels are microVMs
Unikernels can be considered an early form of microVM. Rather than booting a full Linux kernel on a full
VMM, a unikernel links an app with only the drivers, filesystems and subsystems it actually needs; other code is
omitted. For example a
MirageOS
unikernel app would have no processes, probably no filesystem,
only one vCPU. Certainly no ssh or shell (unless you really want those). The VMM that hosts the Mirage unikernel was also
minimal (see
Solo5
and
mirage-solo5
). No legacy required.
We were so confident in the security of the system that we ran a
bitcoin pinata
offering 10BTC to any
hacker able to claim it. The BTC went unclaimed.
Boot can be really fast too:
the "Just-In-Time Summoning of Unikernels" project
(
paper
,
code
)
optimized x86 VM creation time down to about 20ms (120ms on an underpowered 2015 ARM dev board)
The main (obvious) downside of unikernels is having to link your app with a bunch of kernel code.
A lot of people would like to run existing Linux programs!
While we were developing Unikernels, Docker was busy inventing the modern form of Linux containers and revolutionising
how software is built, shared and run.
Docker acquired Unikernel Systems in 2016
and we combined the best of Unikernels (microVMs) and Linux containers into Docker for Mac (later Docker Desktop).
A library VMM for Desktop applications
Our priority back then wasn't to add microVMs to Docker for their own sake.
Instead our goal was to make Docker feel like a native app on Mac and Windows, rather than a bundle of components.
Using our
Mirage Unikernel libraries
we started building a "library VMM": a VMM which could
be embedded inside the Docker application, and which would be single purpose, minimal, secure
and fast. The first version was called
hyperkit
(a fork of
xhyve
,
itself derived from
bhyve
).
We linked the C code directly with the
MirageOS block layer
and used the
Mirage userspace TCP/IP stack
in
a gvisor-like network stack
vpnkit
.
The VMM code continues to evolve and is now called
Docker VMM
.
1
The VM kernel and root filesystem were minimal too, based on the
LinuxKit
project. The current version is an
even more slimmed down and efficient variant but conceptually the same, similar to
containerd/nerdbox
.
Docker for Mac in 2015-2016
Docker for Mac began in 2015 as
Project Piñata
, a skunkworks project
to make Docker useful to more developers. In this 2018 tweet, Solomon Hykes recalls
Docker's first use of unikernel technology and the collaboration between Paris,
Cambridge and San Francisco:
“It was our first use of Unikernel tech, and our first Paris/Cambridge/SF collaboration.”
For Docker for Mac (later renamed Docker Desktop) this allowed:
Running rootless on all platforms.
Without requiring "rootless inside Linux":
the whole Linux kernel is untrusted, so even a
Linux CVE
doesn't matter.
Minimal devices.
We could carefully limit the host / VM interface, making it easy to understand and audit.
VPNs and network policy.
It was easy to interoperate with VPNs, and to extend later to impose
networking policy such as
Registry Access Management
.
Here's the OG 2015 Docker for Mac beta installation experience:
And now in 2026
The Docker microVM tech is the foundation of both Docker Desktop and also
Docker Sandboxes
(
why microVMs
),
where each sandbox runs in a separate microVM, completely isolated from each other and the host.
Docker Sandboxes enables you to do things like
run your favourite coding agent and harness securely
,
with strict isolation and governance.
1
Although we were aiming to make everything a library and link into a static
unikernel-like process, for technical reasons it makes sense to still have a single
host process per VM.
↩
ChangeLog
2026-10-03: original version
2026-10-04: added more history and cool install video
2026-10-05: added an inline timeline, with earlier systems context, the Bitcoin Piñata security challenge, Solo5 + ukvm integration and Docker for Mac release milestones
2026-10-09: added Simon Crosby's 2012 description of Bromium's micro-VMs, Intel Clear Containers and Kata Containers to the timeline
2026-10-09: added Project Piñata's 2015 origins and Solomon Hykes's tweet about the first use of unikernel technology at Docker
Reverse engineering a vintage diode-transistor logic chip
Going through a collection of old parts, CuriousMarc encountered some ICs that he couldn't
identify.
He opened up one of these ICs, and I studied it under the microscope.
After some reverse engineering, I determined that it was a logic chip that implemented four NAND gates
using old-fashioned diode-transistor logic (DTL).
1
The chip turned out to be the ST680A, a member of the Signetics 600 series of chips from 1965.
In this article, I discuss the circuitry in this chip and how diode-transistor logic works.
The die of the ST680A under the microscope.
Integrated circuits can be packaged in many ways. One of the most popular is the
plastic DIP (Dual In-line Package), a black rectangle of epoxy with two rows of metal
pins.
This type of package was
invented
by Signetics: "Introduced in late 1965, the 600 series was the first integrated circuit family to be offered in a solid, plastic, dual in-line package (DIP)."
Earlier integrated circuits were packaged in round metal cans or in small flat-packs.
In 1965, engineers at Fairchild invented the DIP, which had two
rows of pins on 0.1" spacing.
Unlike the surface-mounted flat-pack, the DIP had pins that were inserted into holes, making
manual or automated assembly quick and easy.
Because the pins of a DIP were on a regular grid, rather than the circular pattern of a metal
can, circuit board design and manufacturing were also easier
(
details
).
The first DIP chips had ceramic packages.
The plastic DIP, introduced by Signetics, was much cheaper and became very popular.
An advertisement for the Signetics 600 series. From
Electronics
, March 21, 1966.
The plastic DIP is less popular with me, however, because it is harder to open.
With a ceramic package, I can simply tap it with a chisel and pop it open, but
that doesn't work with epoxy packages.
An epoxy package can be dissolved with nitric or sulfuric acid, but I try to avoid dangerous acids.
Instead, CuriousMarc used
Antoine's hot air
decapping method.
Unfortunately, the hot air technique doesn't always work. In this case, tiny bits of epoxy
were stuck to the die, obscuring the circuitry.
I used a few drops of boiling sulfuric acid to clean the die.
(I'm okay with sulfuric
acid in tiny quantities.)
The die on its metal frame.
The photo above shows the silicon die
on its metal frame, the lead frame.
The golden blobs are where
the bond wires were attached to the die.
You can see the doped silicon regions that form diodes and bipolar NPN transistors,
as well as 16 resistors in the center, forming serpentine paths.
Most chips have a passivation layer—a thin layer of silicon dioxide—over the chip.
Inconveniently, this old chip didn't have a passivation layer, so the acid also stripped off
the metal layer. (A few remnants are visible in the upper left.)
Without the metal layer, I had to guess at how the components were connected to
form logic gates.
The die has very faint color differences where the silicon was protected by the metal,
so that helped.
Eventually, I came up with the diagram below, showing how the metal
layer was probably configured.
This wiring reveals that the chip implements four DTL NAND gates, which I'll describe
in more detail below.
One puzzle was that the chip has two unused diodes, indicated with question marks below.
The metal layer for a quad NAND chip. I desaturated the image to make the labels clearer.
Transistors, diodes, and resistors
In this section, I'll explain how the patterns in the image correspond to components
of the circuit.
The silicon die is doped with various impurities to form regions with different
electrical characteristics.
These regions appear red or green under the microscope due to thin-film effects.
As a result,
the chip's transistors, diodes, and resistors are visible.
The chip is made from bipolar NPN transistors, which have a completely different
construction from the MOS transistors in modern ICs.
In an NPN transistor, the current from the collector to the emitter is controlled
by the current through the base.
The collector is a large region of N-type silicon, silicon that is doped with
atoms such as phosphorus or arsenic.
Since these elements have one more valence electron than silicon, they give the
silicon more negative charge carriers, so it is called N for negative.
The N-type silicon happens to appear reddish.
On top of the collector, the base is a thin region of P-type silicon, which appears green.
This silicon has been doped with atoms such as boron or gallium, which have
one fewer valence electron than silicon. The missing electrons form "holes", which
act as positive charge carriers.
Finally, the emitter is N-type silicon, on top of the base layer.
These layers work together through semiconductor magic, amplifying the base current.
Two NPN transistors on the chip. The second transistor is a larger output transistor.
The chip's output transistors are slightly larger so they can sink more current.
In the transistor on the right above, note that the collector contact wraps around three sides of
the transistor.
The emitter is also larger, with an L-shaped contact.
According to the datasheet, each output transistor can sink 2.5 mA of current.
The chip uses many diodes since it is diode-transistor logic.
The structure of a diode is similar to a transistor, but without the emitter.
In a diode, current flows from the cathode (P-type silicon) to the anode (N-type).
A diode and a resistor on the chip.
The chip uses 16 resistors, located in the middle of the die.
A resistor is constructed from a long, thin region of doped silicon.
Since silicon has moderately high resistance, a long strip of silicon acts
as a resistor.
Most of the resistors have a serpentine layout to fit a long resistor into a smaller area.
These resistors consist of P-type silicon (green) in a "tub" of N-type silicon (red).
The tub is connected to the positive voltage supply; since current doesn't flow from
N-type silicon to P-type silicon, this isolates the resistors from each other.
Operation of a DTL gate
Logic gates can be created in many ways.
The earliest integrated circuits (such as the ones in the Apollo Guidance Computer)
used Resistor-Transistor Logic (RTL), where logic gates were constructed from resistors
and transistors.
In March 1962, Signetics announced the first family of commercial Diode-Transistor Logic
(DTL) integrated circuits (
details
).
By using diodes on the inputs instead of resistors, DTL provided better performance than
RTL.
However, DTL soon became overshadowed by TTL (Transistor-Transistor Logic), which
was faster and used less power. (If you built digital circuits a few decades ago, you're
probably familiar with the popular 7400 series of TTL chips.)
The diagram below shows how the DTL NAND gate works.
If both inputs are high, the current from the first resistor flows through the
base of the first transistor, turning it on.
The transistor amplifies this current, passing a much larger current from the
transistor's collector to the transistor's emitter.
This current goes through the base of the second transistor, which turns on the
second transistor.
The second transistor passes an even larger current from the output pin to ground,
pulling the output pin low.
The DTL NAND gate with both inputs high. The schematic is from the datasheet.
This circuit is considerably more complicated than the DTL gate on
Wikipedia
.
But if one of the input pins is pulled low, the current from the resistor goes through
the diode instead of the transistor.
The first transistor turns off, and without a base current, the second transistor turns off.
The third resistor pulls the output high.
Thus, the output is low only if both inputs are high: a NAND gate.
The DTL NAND gate with an input low.
I'll point out a few features of this circuit.
The diodes on the inputs ensure that one input doesn't affect the other input.
The diode in the middle raises the voltage on the first transistor's emitter, so it
requires more voltage to turn on, reducing the sensitivity to noise.
The output uses a resistor to pull the output high; more advanced circuits use another
transistor.
When the output is low, the third resistor is still "trying" to pull the output high,
which is wasting power.
Moreover, the resistor limits the output current, so the high output is fairly weak.
In some DTL families, you can get gates with different values for the output resistor,
so you can select the tradeoff between wasting power and having an output that is too weak.
If you've used TTL integrated circuits from the 1970s, you know that chips usually have power
and ground on diagonal pins: ground on pin 7 and power on pin 14.
(Putting power and ground diagonally opposite both helps die layout and circuit board layout.)
Much to my surprise, I found that the Signetics chips predate this standard and have
ground on pin 1 and power on pin 8: still diagonal, but the wrong diagonal!
The diagram below shows how the four NAND gates are wired in the chip.
Pinout of the 680A quad NAND gate. From the
databook
.
Three chips from one die
When I examined the die under the microscope, I figured out the circuit, but I was puzzled
by two extra diodes, as if two NAND gates had a third input that wasn't used.
The explanation is that Signetics used the same silicon layout for at least three different
chips, applying a different metal layer for different functionality.
This saved money since it's much cheaper to produce a single optical mask for the metal layer
than a complete set of new masks.
Signetics sold semi-custom ICs to customers, using an approach called variFEBS (Variable
Functional Electronics Blocks). This approach used a custom metal layer on top of
fixed silicon, providing custom circuits without the cost of a full mask set.
These circuits didn't sell well, but Signetics used the same approach for standard ICs.
Pinout of the 670A triple NAND gate and the 616A quad NAND gate. All three chips have some similarities, such as using pins 2 and 14 as outputs. From the
databook
.
One IC with the same silicon as the quad NAND gate is the 670A chip, which
has three NAND gates, each with three inputs (above left).
The diagram below shows how the silicon can be wired to provide this functionality.
The hypothesized metal layer for the 670A triple-NAND gate.
The layout for the triple chip above is a bit tricky because the top gate has inputs on
both sides of the power (Vcc) pin.
This creates a layout problem because the power and ground metal runs vertically to the
resistors, blocking metal wiring from one side to the other.
The solution is a "crossunder", a region of silicon that allows a signal to pass under
the metal layer, connecting the inputs on the left to the rest of the circuitry on the right.
This crossunder is visible near the top of the chip.
Another chip with the same layout is the 616A dual NAND gate, with five inputs on each gate.
Since this chip has 10 inputs in total (compared to 8 on the quad gate), this chip
uses the two "extra" diodes that I spotted.
If that isn't enough inputs, each NAND gate has an expansion input; by connecting external
diodes to the expansion input, the gate can be made as large as desired.
The hypothesized metal layer for the 616A dual-NAND chip.
Some history
The history of Signetics is closely tied to Fairchild.
The story of Fairchild's founding is well known: in 1957, eight
engineers—the Traitorous Eight—left Shockley Semiconductor and created
Fairchild Semiconductor.
Hundreds of companies (the "Fairchildren") were started by engineers who left
Fairchild.
Signetics was one of those companies, formed in 1961 and
said
to be the first company to exclusively design and manufacture integrated circuits.
2
Signetics announced its first product in 1962, a NAND gate that cost $125 (over $1000 in
current dollars).
3
Not surprisingly, sales were weak.
Signetics soon ran short of money, so in 1962, Corning Glass invested $1.7 million for 51%
ownership of Signetics.
Corning Glass may seem like a strange investor, but Corning was more of a high-tech
company than you'd expect, making components such as resistors and
glass capacitors
, and later creating fiber optics.
Moreover, in the early 1960s, integrated circuits were the hot area (much like AI now),
and everyone wanted to get involved.
In 1963, the Department of Defense pushed for contractors to use integrated circuits
in new products.
Riding this wave, Signetics became the leading producer of integrated circuits.
4
However, Fairchild soon introduced a series of DTL chips that competed with Signetics. The
Fairchild 930 series was faster than the Signetics chips and less than half the price,
so Fairchild took much of the market from Signetics and dominated the IC market.
Signetics also produced analog integrated circuits.
Signetics is probably best known for creating the
555 timer chip
in 1970, said to be
the world's most popular IC, with billions sold.
5
Signetics was acquired by Philips in 1975, and then Philips Semiconductors was spun
off as NXP (Next exPerience) in 2006. NXP is currently the #10 semiconductor manufacturer
worldwide, so the heritage of Signetics lives on.
For more, follow me on
Bluesky (
@righto.com
),
Mastodon (
@
[email protected]
),
or
RSS
.
Thanks to CuriousMarc for providing the IC and thanks to TubeTime for finding the databook.
AI statement: Despite the presence of the em dash, no AI was used in the writing of this article (
details
).
Notes and references
I did a meditation and it sort of changed my personality?
In March 2025, I went on a
Jhourney
meditation retreat that was one of the most profound experiences of my life, and deeply reshaped how I related to myself.
If you had told my pre-retreat self that this was going to happen, I wouldn’t have believed you. I’d done some meditation before—including a 10-day vipassana retreat—and while it didn’t do
nothing
, I was underwhelmed. I felt pretty resistant to spending that much time staring at the inside of my head: it seemed really hard to actually trust anything I learned that way, because it was such a complicated system. And besides, my brain seemed to work fine the way it was.
I’d read some writing by
serious
meditators
who seemed to be having a different experience, filled with insights and bliss, but it wasn’t one that I felt particularly drawn to. That much navel-gazing and
wireheading
felt self-indulgent, and anyway they seemed weird enough that whatever they were doing probably wouldn’t work for me.
Then, in a moment of life imitating
Bay Area House Party
, we got Jhourney, a meditation retreat startup promising to speedrun you to the bliss part (
tagline at the time
: “Life-changing meditative bliss used to take thousands of hours to learn. We teach it in a week.”) When I heard them strongly recommended not only by the serious meditators I’d been reading, but also by a couple more hard-nosed coworkers, I decided to see what the hype was about.
Jhourney teaches a style of meditation nominally focused on altered states called jhanas. Jhanas are blissful-feeling states that you can “relax into” if you release enough of what you might call tension or
clenching
or
tanha
, and then focus on an enjoyable open-hearted sensation like smiling, a joyful memory, or feeling care for a loved one. If done right, you can start a feedback loop of enjoying the enjoyment, and end up in a state of deeply absorbed euphoria.
I say Jhourney is
nominally
focused on that because the jhanas are actually kind of a Trojan horse for improving your life and relationships, which somehow doesn’t sell as well as wireheading. Jhourney’s unofficial motto is “come for the bliss, stay for the personal growth.” The growth happens because a lot of the tension you’re trying to release in jhana meditation is downstream of repressed or “stuck” feelings, either small ones (“I don’t want to be hearing that sound over there” leading to micro-clenching the head and neck) or big ones (“I can’t let myself feel this sadness or I’ll cry and that would be shameful” leading to tensing the various face and chest muscles that would otherwise be helping you cry). In order to get into jhana states, a lot of people (like me!) end up having to work on untangling knots of emotional clenching, and this usually leads to a lot of growth.
My first experience of my Jhourney retreat was showing up and being handed an 80-page handbook of meditation instructions.
This already blew my mind a little, because I had never read anything about spirituality or emotions that I considered good. The “best” stuff I’d read about the mind was vapid pop-psychology, padding out truisms with engaging fluff until the result somehow became a marketable book. The rest was indistinguishable from astrology—it was never clear enough that I could tell whether it applied to me, which meant it didn’t seem to make falsifiable predictions. As for spiritual writing, it mostly felt like word-association mumbo-jumbo, with authors throwing around words that had the right vibes but that I wasn’t sure they themselves even really understood. Heck, the previous meditation retreat I’d been on had included watching an hour-long recording of the now-dead founder talking about how he could sense quantum vibrations.
The Jhourney handbook didn’t have these problems, because it was written by software engineers. It was epistemically conservative and shockingly lucid, completely mumbo- and jumbo-free. To help with the inherently fuzzy language, they explained everything from multiple angles. They gave clear
gears-level
explanations of why they thought things worked the way they did. They even took a detour to explain their teaching philosophy so that students were oriented about
why
they were doing what they were doing. It was masterful pedagogy.
Between the written instructions and the teachings from live meditation sessions, pretty soon I could get to a point that felt like the “on-ramp” to a jhana. But every time I got there, I would get stressed and “grabby” about what to do next, and “fall off” the ramp.
By the time I got to day 4 of the retreat, I was feeling really frustrated about this, in a way that was starting to loop on itself. I was frustrated that I couldn’t reach jhana, and frustrated that the frustration was making things harder. I tried Jhourney’s recommended way of working with negative emotions, which was a self-compassion meditation. But no matter how much I tried, it didn’t really resonate; I couldn’t cultivate any emotional experience of self-compassion.
In fact, I realized I couldn’t remember
ever
having had a real emotional experience of receiving compassion, and that that was probably kind of fucked up.
A bunch of my friends were on the same retreat. Since I had no access to self-compassion, of course I used this realization to start worrying that they would judge me for having a hard time meditating because I was fucked up, adding even more layers to the feedback loop of doom.
Days 4–6 were pretty bad. Every day Jhourney gave us a survey of “how was your day on a scale of 1-10 with 5 as a normal day?” I rated day 6 a 1.5. (To their credit, Jhourney knew this meant I needed extra help and offered lots of 1:1 time with different facilitators, although none of it made that much difference.)
At this point, in one of my desperate attempts to think myself out of my feelings pickle, I started thinking a lot about the
metaphor of the elephant and the rider
. The idea is that people usually identify with everything that happens in their mind, but this is actually a confusion; it’s more accurate to think of “you,” the conscious part, as a small human rider perched atop a large lumbering elephant that often does its own thing. The only things that are actually in the rider’s action space are things like “say words to the elephant,” “visualize mental images to the elephant,” “direct attention to a particular aspect of experience,” etc. Everything else—including all emotions and many thoughts—is the elephant’s job.
In this frame, the fact that the self-compassion meditation wasn’t working for me wasn’t really “my” fault. Whether the emotional experience of self-compassion happened was up to the elephant, and the only thing “I” (the rider) could do was to keep gently saying the words or doing the technique or whatever, and wait for the elephant to steer, at its own pace.
Around that point I decided to give up on the Jhourney curriculum and just do whatever seemed like it would feel nice.
✻
Ironically, Jhourney more or less recommends doing this in various parts of the handbook, but I was too into following rules to follow the part of the rules where they told me to stop following the rules.
I broke the rule of silence to ask for some reassurance from a close friend who was also on the retreat. When I got back to meditating, I made up a technique for myself where I imagined sending love and compassion to the elephant instead of to “myself.” This turned out to be a cheat code: I immediately felt an outpouring of warmth, and the reassuring things I was telling myself started to emotionally resonate.
I really wish I could describe better what happened after that, but unfortunately it was a while ago and involved a lot of subtle mental movements, plus it’s hard to track what’s happening while a chunk of your psyche is liquefying. I remember a sort of sense of “going inside” the feeling of compassion and love for the elephant, having it take up more and more of my attention, and feel more and more deep, rich and meaningful. Then some kind of rush of energy and a full-body frisson that I’ve learned often happens when my brain has rearranged itself.
†
I don’t think this strictly qualifies as a jhana by Jhourney’s rubric, because it wasn’t stable and self-sustaining, but it otherwise felt close to how they describe first jhana.
When I got up and walked outside, I gradually noticed that the world felt pretty different. I realized that I’d always carried a “refrigerator hum” of subtle body tension that was now gone. Walking around the retreat center looking at the views felt amazing, like I could have spent days just melting into the landscape. The Lipton peppermint tea at the hot drink station tasted unreasonably good. I would sometimes tear up with joy or gratitude for no reason. I felt much deeper care and connection with my friends.
Maybe that makes it sound a little gooey and impersonal, like I took a drug that replaced my normal self with a puddle of love or something. The actual experience was the opposite; somehow it felt like this was all happening because it was
easier to be myself
. The care and connection wasn’t coming from some foreign love puddle; it came out because a bunch of psychic gunk had sloughed off and made it easier for the real essence of Ben-ness to shine through.
And then I
used my newfound mastery of emotions and self-compassion to live happily ever after
flailed around trying to integrate everything back into normal life.
One of the big changes I noticed after the retreat was that my emotions got 2–3× more intense. I think this was net positive in the end, but it made coming back to work hard—I had a stressful role managing a large team, and I also needed to catch up from a week of being incommunicado, which was extra stressful. And it wasn’t exactly helpful that suddenly, if someone was annoying on Slack, it would sometimes make me want to shoot flames out my ears.
Over the next couple weeks, the intensity settled back down and the changes in my moment-to-moment experience went maybe 80% of the way back to normal (e.g., I stopped spontaneously tearing up in normal circumstances). Some of them stayed, though:
A lot of my shame/cringe reflex turned into a self-compassion reflex. I used to get super embarrassed by minor mistakes (things like, I don’t know, forgetting to lock a public bathroom door and having someone walk in). Now those things come with a very clear sense of “gosh, what a normal-person type of mistake that millions of other people have also made, it probably didn’t even register for the other person.”
I became much more easily moved by art. I went from being moved to tears by a poem or piece of music maybe once a year to once a week.
I stayed much more aware of my more subtle emotional responses. I remember listening to some instrumental folk music I’d probably listened to 100 times before, suddenly noticing that the melody felt deeply nostalgic and then realizing that was two levels further out on the
feelings wheel
than I’d ever felt for music.
I still felt much less of a need to be distracted or stimulated than before. I used to listen to podcasts at 2× speed whenever I wasn’t fully focused on a task (e.g. if I was doing chores or walking). Now I have no desire to do this, and when I do listen to podcasts, 2× speed feels unpleasant. Similarly, I started to dislike a lot of restaurant food, and to really enjoy very simple home-cooked meals that I would have considered too bland before.
Friends continued to mention that my body language was different. One noted: “more upright posture, more open shoulders, more fluid and gentle.” Another described me as “‘leaving less,’ as in, spending less time ‘out of the room’ in interactions.”
These were great changes, but even better, a bunch of mindset and relational shifts also stuck around.
Mindset-wise, I guess I’d just say I got feelings-pilled.
If you’d asked me what the deal with emotions was before the retreat, I probably would have said something like:
Positive emotions are nice, although you shouldn’t let them distract you too much from your long-term goals. Painful emotions are responses to stimuli that are part of our evolutionary inheritance, but are largely maladaptive today because we’re in an environment so different from where they arose. Assuming you have good enough self-control not to act out on them, their main effect is to make you dumber, which you should mitigate by not engaging with whatever makes you emotional until you’ve chilled out.
My new view is more like the following (this is still an oversimplified strawman and reality is a lot messier):
All emotions are important and beautiful components of unconscious/intuitive cognition.
‡
I do mean
all
, even ones that our culture really doesn’t like—for example, anger is a sign that something you care about is threatened and needs protecting, and fully welcoming it can help bring clarity about what exactly needs protecting and how. If you’re curious to learn more about the beautiful and constructive aspects of negative emotions, I recommend the book
The Language of Emotions
,
Joe Hudson’s podcast
(search for the emotion you’re interested in), or here are some specific articles summarizing his views on
anger
,
fear
, and
shame
.
However, they sometimes create impulses to do things that aren’t actually good ideas. In the process of socializing ourselves not to follow those impulses, we’ve been trained to try to make the emotions themselves go away in painful ways, by repressing them or clenching up around them. Unintuitively, repression and clenching actually cause the emotions to “stick around” in some sort of partially metabolized state, which has negative side-effects, like anxiety, thought-looping, numbness, blind spots, impaired reasoning, bringing up secondary emotions as defenses, etc. A different way of working with these emotions, that’s better for you in the long term, is to figure out how to welcome and accept them. This eventually leads to them feeling less bad, and giving you more impulses that are good ideas and fewer bad ones. But it’s not as simple as “just stop repressing.” Welcoming emotions requires fully feeling them; if they’re strong, that can be too overwhelming to work unless you have a deep felt sense of safety. That safety can be provided in many different ways, e.g. a therapist, friends, some kinds of meditation, etc. If you don’t have access to enough safety, repressing or clenching temporarily might be your best option.
The main thing that changed my view here was spending days at the retreat paying close attention to my own emotional experience. For example, near the beginning of the retreat, one of the facilitators claimed that thought-looping was usually a sign of a stuck or repressed emotion. I was really skeptical, but then I had several
very clear
experiences of thought-looping around something, going off to a private place to cry about it, and immediately stopping the thought spiral and relating to it differently.
§
It was a lot easier to see this clearly on the retreat than in normal life: doing lots of meditation both made it easier to notice my own thought processes, and also faster to “unstick” or welcome the underlying emotions.
Similarly, I’d ended a long-term relationship right before the retreat, which I’d felt a lot of internal conflict and self-doubt about. My therapist had often told me things like “if you felt enough of your feelings you’d feel clear about this decision,” which sounded crazy to me at the time (uh, it’s a really hard call and there are a lot of tradeoffs that I don’t know how to weigh!). But on the last day of the retreat I noticed that I felt much clearer that a lot of the things I didn’t like about that relationship were real and important, and felt much more confident in my choice to end it.
Of course, I’d already heard plenty of people say things like “you can’t make this kind of decision logically, you have to listen to your heart,” but I never really understood what they were talking about. In retrospect, I just
didn’t have the ability
to do the “listen to your heart” internal move, because
the pipes were clogged by too much repressed gunk
. I wish those soundbites had included a second sentence like “of course listening to your heart can be much easier said than done, so if it feels hard or unclear for you, here are some first steps to get started with, and be prepared for it to take you many hours (or years) to figure out what your heart is trying to say.”
This new mindset really shifted the way I related to my emotions. While I still often experience them as painful, it’s much less than I used to, and now I start from the assumption that they’re not “actually” painful or bad, and that the best thing to do with them is to figure out how to accept them, welcome them, and find the wisdom or beauty in them. Overall this feels a lot better—when I run into something stressful or hard, instead of just flailing around not knowing what to do about it, it feels more like I have some kind of sense of direction or overall orientation, which is really comforting and grounding.
I also noticed that a lot of these ways of thinking about emotional difficulty within myself were also useful metaphors for thinking about emotional dynamics between people. Just like resisting your own emotions is a common coping strategy but ultimately doesn’t work very well, resisting
other people’s
emotions is also a really common but damaging pattern, which I would guess is very involved in a lot of (most?) relational damage. For example, I realized that a big part of the root problem of the relationship that I had just ended was that both of us were missing the capacity to accept a bunch of each other’s emotions, which was something I hadn’t been able to articulate clearly at the time. I now think
practices explicitly focused on welcoming each other’s emotions
are a really valuable tool for nurturing relationships over time.
In fact, I started to notice that a
lot
of sticky problems—both in my personal life, but also the type that I ran into as a manager—were partly downstream of people resisting emotions of one type or another. Alice is hard to communicate with, because she frequently monologues about unimportant details, because she wants to prove she understands everything, because she has a bunch of stuck fear/resentment about not being taken seriously. Bob and Clara have a persistent disagreement about strategy, because Clara doesn’t care enough about Bob’s opinion to engage, because Bob was cruel to her once; Clara never complained because she’s avoiding the feeling of having been hurt by it. Dave’s team is underperforming but Erin, the exec sponsor, doesn’t want to manage him out, because she’s scared of the conflict and of making Dave’s reports, who like him, angry.
Of course, just because a problem is caused by stuck emotions doesn’t mean that unsticking them is the best way to solve it; but it was still a really useful lens to view what was going on.
The other shift that stuck around was in my relationships. I made a huge improvement in my friendships, which a few different things contributed to:
I felt a lot clearer about what I wanted from close friendships—mainly, a strong felt sense of safety and care—and that this felt like a big missing piece in my life.
I also started getting better at feeling those. With a lot of my shame reflex dissolved, I felt generally safer with people overall—my intuitive predictions about how they’d respond to things I did felt more positive. I also got a lot better at noticing and appreciating the different ways people expressed care for me.
Because I felt generally safer, I also got more willing to take risks or be vulnerable, which helped build closeness faster. A friend reflected that I seemed more courageous.
This also meant that my “friend type” changed—I cared more about emotional connection and less about intellectual connection. Luckily, even though I live in a really heady milieu, I was still able to find a lot of big-hearted people and gradually build up a set of close friends who are wonderful at both. So far, this is the change I’m the happiest about.
My dating life changed a bunch as well:
I started being able to feel much more strongly attracted to people. For example, later that year, I got a crush on someone that was stronger than any crush I’d had in high school.
I had a run of anxious-attachment-ish experiences, which I’d never had before, although they got way milder over time.
‖
I’m not totally sure what was up with this; I think it partly had to do with calibrating to the new level of attraction I could feel.
The extra safety and courage I mentioned above were helpful in dating too: I got much more comfortable with communicating tricky things or being in weird situations (e.g. ones outside the standard script of “meet someone on an app, go on some dates, become exclusive”). A friend commented that it seemed like I had more degrees of freedom.
These changes have been really wonderful overall, but also kind of intense. Becoming much more emotionally aware solved a bunch of my problems, like wanting deeper friendships or not understanding why my relationship was unsatisfying. But it turns out winning that boss fight just made all the enemies level up. My old problems got replaced with horrible new problems, like that sometimes my newly deep friends and I would have conflicts, or that I would be more into the person I was dating than they were into me.
The part of my life where I feel the most mixed about the impact is work. About six months after my retreat, I got a pretty bad case of burnout and left my role managing a big team for a significantly less ambitious IC role. I don’t think the retreat was the main cause of my burnout—the main cause was that I didn’t have enough background in the area I was managing to have the type of impact that I wanted to, with a side helping of some difficult working relationships. But it turns out my new psyche had also gotten worse at repressing or avoiding emotion, and that made everything harder.
I think of repression as the emotional equivalent of
technical debt
or
deferred maintenance
: a way of avoiding an immediate cost, in this case feeling uncomfortable feelings, in exchange for paying a higher cost later to clean it up.
¶
Like tech debt or deferred maintenance, sometimes repression or avoidance can be the right strategy, if you’ll have more resources to deal with the problem later!
My role exposed me to a constant stream of low-grade painful things, like people being disappointed or annoyed at me, me being disappointed or annoyed at other people, projects not going well, office snacks being replaced with worse snacks, and so on. With less ability to avoid or repress, I had to feel more of them fully as they came up, and that was really draining. It also required enough time and attention that I had to defer a bunch of maintenance on my personal life.
Even now that I feel like my energy levels have mostly recovered, I’m still not sure whether I want to go back to the center of the vortex. It’s not just that I would have to start deferring maintenance again; I’m also much more aware of a lot of maintenance I’d
already
deferred and really want to clean up—things like investing in friendships, like I mentioned above.
If I were only working toward my personal growth and happiness, I’d say this change was clearly good. My life feels much richer and more whole, and taking a less ambitious role forced me to release some layers of ego attachment to having a “shiny” job or career, which was deeply freeing. But… I also care a lot about my impact on the world, and I think
the next few years will probably be a critical period
where my work could be especially high-leverage. From that perspective, it’s sad to feel resistant to maxing out on work right now.
I feel pretty unsure about what to take away from all this. Here are some disconnected reflections.
I would never have said that I had a problem with self-compassion or self-esteem before doing this retreat, because I was able to say the right self-compassionate words when I directly asked myself things. But from my point of view afterwards, it’s clear that I did have a big self-compassion problem; even though I could say the words, I wasn’t really feeling them or acting like they were true. Having the actual embodied experience and habits of self-compassion is the closest I’ve come in real life to
The Vitamin
.
✻✻
“My deepest darkest fantasy is that I collapse on the street and I am rushed to the hospital. They perform a bunch of tests and find out I am severely deficient in some kind of vitamin. Then I start taking the vitamin and I become the happiest cleverest person alive because all my problems were caused by this one deficiency."
Jhourney is doing something really cool and is way better than most/all other meditation retreats on several axes (amount of support available, pedagogical excellence). That said, you probably shouldn’t expect to have
this
life-changing of an experience; I would guess I had something like a 95th-percentile-plus outcome in terms of long-term effects. I still think it’s awesome as an introduction to both meditation and embodied emotional awareness.
I feel like I got really lucky on timing: if the retreat had ended one day earlier, I don’t think I would have gotten to the life-changing part. That freaks me out a lot.
At first I concluded from this that I should get super into meditation. Then I did two more retreats (another Jhourney retreat and a Dustin DiPerna introduction to mahamudra retreat) and neither one of them had nearly as large of an effect. The second Jhourney retreat was really helpful in reinforcing my daily practice, and I do think a daily meditation practice was helpful in stabilizing the changes that became permanent, but I’m not even totally sure about that.
Jhanas are definitely real. Also, it was kind of wild hearing somebody tell me something that sounded totally fake (“achieve bliss on demand using nothing but your brain”) and then back it up with an 80-page engineering manual and meticulous data on success rates. Overall this made me much more likely to believe that various other types of “woo” phenomena are real, at least in the sense that people are accurately describing their experiences. (I still believe the universe runs on physics, but a lot of woo things have physics-compatible explanations, especially if you buy that people’s intuitions can sometimes do spooky things.)
I described this as “chang[ing] my personality” in the title, but I don’t want to oversell the magnitude. I do have a lot of conversations where someone asks me “so how come you’re so <like X>” and I tell them “I did this weird meditation retreat a couple years ago.” But also, there are a lot of different aspects of personality, and even though a bunch of those completely changed for me, most of them are still the same, so I’m still very similar to my past self in an absolute sense.
What flags should tip you off that you should maybe be staring into your emotions more? Here are some things that I think might be clues (a lot of which described me, in retrospect):
You often get stressed and stuck in thought loops
You’re easily annoyed or frustrated
You have too much scarcity mindset—you often worry this is the best job or relationship or whatever that you’ll ever have, in a way that’s not justified by the fundamentals
You seek out a lot of distraction or stimulation; it’s not very enjoyable to just exist in the present
You feel a lot of internal conflict or uncertainty about what you want
There are parts of yourself that you really don’t like or wish were different
You feel some missing depth, richness, or meaning in your life but can’t put your finger exactly on what
I’m also just left with a lot of questions:
Was this set of experiences… good?
I’m really confident that it will be good for my own long-term life happiness. But the timing meant that I feel less willing to sign up for intense work during what might be one of the most critical periods for humanity, which feels bad even if the change was positive. I feel kind of unsure how to balance these.
My shoulder
Jeremy Bentham
says I should have just kept
playing push-pin
. My shoulder, uh…
deva?
says if I follow my heart my impact on the world will be higher, even if it’s less predictable or legible. I don’t really feel like I buy either of these.
It seemed like before this I was in a personality
attractor basin
with a lot of numbing and repression. How exactly did this happen, and more importantly, how can I/we avoid having it happen to as many people in the future?
I have some sort of fuzzy leads on this (e.g. when I was young it was really easy to make me cry so I got picked on a lot in school), but not a particularly complete picture (e.g.: does this happen to everyone who has that experience? If not, what makes the difference?)
Mechanistically, what did the elephant meditation do? Why did it work so suddenly and create such a lasting shift? (Was that in fact what was responsible for most of the lasting shift? How much of it was instead about what I learned at a cognitive level?)
Is the glowy, “easier to be the essence of Ben” state that I ended up in right afterwards something that can be stabilized (or have aspects stabilized)? If so, how?
More generally—where do I go from here? I’m convinced that doing the right type of introspection or meditation type thing for a week can unlock amazing things, and it feels like there are more amazing things out there to unlock, but I wish I had a better way of navigating towards them than semi-randomly trying things.
A draft reader asked what I would tell my past self, or someone like me, about this arc. Ultimately, I’d boil it down to:
There are probably a bunch of feelings that you’re refusing to welcome into your experience, and this is probably involved in a bunch of the things that are unsatisfying about your life and relationships.
You can improve this by gradually, in a safe context, paying loving attention to the uncomfortable parts, from a place of wanting to know and care for yourself rather than to fix yourself.
When that’s hard, remember that it’s not your fault. You’re just the rider; elephants gonna elephant. Let it go where it needs to and keep loving it as best you can.
So what if you can handle thousands of concurrent users per core? Even the front page of HN gets you what? 100 concurrent users on a good day?
More like 30.
Exactly! Most successful apps have like what 10 or 20 concurrent users at any given time? This is basically academic for most projects. What does performance give you other than knowing that your app won't need to scale past a single server? Pointless!
Well what if you could run multiple apps in one process?
Isn't that the same as a bunch of apps behind a reverse proxy?
No. It's not. Separate processes have to compete for OS resources, have their own thread pools, schedulers, heap, GC, caches and so on. Each process needs to be sized relative to the other apps running on the system.
But, in a single process you can size the process for the machine and then run an arbitrary number of apps in that process. If the apps share a process, they can share all sorts of things: a single JVM, GC, caches, buffers, http server, HTTPS certificate management, batching, game loop etc. You'd eliminate thread contention between apps. This lets you scale further with less resources!
Performance lets you run as many apps as you want in that one process.
...
Disclaimer: all my writing and code is handcrafted by me. By the end of this you may wish it wasn't.
Some numbers
If you have multiple JVMs you duplicate a bunch of fixed costs:
Separate heaps
Separate JIT
Separate GC
If you have multiple HTTP servers you duplicate:
event loop threads
byte buffers
queues
If you have multiple framework engines you duplicate:
html buffers
render threads
fragment caches
queues
All of this adds up to more memory, more threads and more contention. If you own all your app and don't need the isolation a processes give you, then it can be a big performance win to have one JVM, one http server, and one framework engine.
Where were the numbers?
X * n
where
X
is you fixed cost for the above and
n
is your number of apps. If all of the above takes 500MB, then four apps is an extra 1.5GB.
What is an app?
A miserable little pile of secrets
Indeed. If you think about it an app at it's simplest is a domain, a database and some routes.
Thanks to
Everyone on the
Datastar discord
who read drafts of this and gave me feedback.
SEGA newsletter data breach exposes 2.2 million email addresses
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 17:09:33
Japanese gaming giant SEGA has disclosed that a data breach at its third-party newsletter provider, ARARA, exposed the email addresses of 2.2 million newsletter subscribers. [...]...
Japanese gaming giant SEGA has disclosed that a data breach at its third-party newsletter provider, ARARA, exposed the email addresses of 2.2 million newsletter subscribers.
The company says the exposed data also includes 92,300 records with additional information yet to be determined. The breach affects 11 newsletters linked to SEGA and SEGA Fave products and services.
The investigation found that the compromised data did not include customer names, dates of birth, gender, addresses, phone numbers, credit card details, or account passwords.
Also, email addresses registered with a “SEGA Account” are handled by a separate distribution system and were not affected by this incident.
The company is working with ARARA to determine what data was exposed and says it has no confirmed evidence of misuse.
“We are currently investigating the information associated with newsletter distribution in cooperation with ARARA,”
SEGA stated
.
ARARA service breached
ARARA disclosed on November 2 that it suffered a massive breach affecting its email distribution service, which
compromised 77 million email addresses
from nearly 380 corporate clients.
According to the company, a web server vulnerability and problems in its system environment contributed to the incident, but the exact intrusion method and timing remain under investigation.
ARARA previously estimated a smaller impact and assured SEGA on October 29 that no data compromise had occurred.
However, on November 3, after uncovering the full extent of the incident, ARARA notified the gaming company that data had been exposed and shared the full details between November 5 and 8.
ARARA also said the attackers abused their access to its service to send over 7 million emails impersonating credit card companies in late October.
Other notable victims of the same incident include
MOS Burger
, with 7.5 million email addresses exposed,
Shochiku Multiplex Theatres
, with 3.3 million records,
TKC
, with 2.3 million email addresses, and
IIJmio
, with nearly 1 million email addresses.
SEGA Arcade still down
SEGA Fave’s arcade game network services, which suffered a separate cybersecurity incident last week, are still offline, undergoing maintenance and safety checks.
On November 2, SEGA FAVE, SEGA's subsidiary responsible for toys, electronic gadgets, and arcade machine operations,
disclosed unauthorized access
to servers supporting its ALL.Net and Aime arcade gaming network services.
In response, it suspended all related services, including online gameplay, SEGA Lucky Kuji Online, and new SEGA ID registrations.
Its initial investigation found no evidence of customer or business partner data exfiltration, while payment information was unaffected because it was stored separately.
We’re Asking an Appeals Court to Require a Warrant for ALPR Searches
Electronic Frontier Foundation
www.eff.org
2026-11-09 17:09:24
Today, along with the ACLU, EFF filed an amicus brief in the Sixth Circuit court of appeals in United States v. Sturdivant, a case where police warrantlessly tracked a suspect’s movements using Automated License Plate Reader (ALPR) data. Our brief details the vast, interconnected network of ALPRs th...
Today
, along with the ACLU, EFF filed an
amicus brief
in the Sixth Circuit court of appeals in
United States v. Sturdivant
, a case where police warrantlessly tracked a suspect’s movements using
Automated License Plate Reader
(ALPR) data. Our brief details the vast, interconnected network of ALPRs that constantly track drivers around the country and argues that this tracking is a “search” under the meaning of the Fourth Amendment.
Sturdivant
involves a series of robberies in and around Cleveland, Ohio. Using surveillance camera footage, police identified the make, model and color of the robber’s car, but they did not know its license plate number. After running an open-ended search of two ALPR databases, Flock and ELSAG, officers learned a car belonging to the defendant had been tracked near sites of the robberies, eventually leading to his arrest. Faced with a motion to suppress the ALPR evidence, the district court held that Mr. Sturdivant had no reasonable expectation of privacy in his license plate number because it could be observed by members of the public, and that therefore he had no Fourth Amendment interest in not having his car tracked in public places.
But ALPRs are simply not comparable to observing an individual license plate on a passing car. As we’ve explained in
many
amicus
briefs
and in our lawsuits directly challenging ALPR use in
San Jose, California
and
Wisconsin
, ALPRs give law enforcement “
a virtual time machine to view suspects’, or anyone else’s, past movements (and much more) with just the click of a button.” Just last month, a federal district court
agreed
and held that ALPRs are a “
form of indiscriminate mass surveillance” that can violate the Fourth Amendment.
We hope the Sixth Circuit will reverse the lower court in this case and hold that ALPR searches require a warrant.
The Marin County Sheriff’s Office is the latest California law enforcement agency to get caught sharing automated license plate reader (ALPR) data from their Flock Safety system with out-of-state and federal agencies. EFF and the ACLU of Northern California are calling them out for this direct violation of California law,...
With no warrant requirements, limited guardrails, and deficient audit processes, ALPR databases have fostered a culture of unrestricted access to everyone’s location information. This culture of abuse has allowed police to treat a mass surveillance network like their own personal search engine, permitting the tracking of the movements of everyday...
Within the last few days, two important state actions have dealt a big blow to automated license plate reader (ALPR) networks. This is just the latest proof of the growing tide of public opposition to mass surveillance. After years of successful grassroots battles to pull these cameras from local streets...
While Deadly Fires Rage, New Yorkers May Have to Wait Until 2028 for More E-Bike Battery Charging Stations
hellgate
hellgatenyc.com
2026-11-09 17:08:29
Red tape and a delayed rollout, as deadly fires keep popping up....
Back in early 2024, Eric Adams's Department of Transportation launched a pilot to prevent the steady increase of deadly fires caused by lithium ion batteries used to power e-bikes. The year before,
18 New Yorkers had been killed in the blazes
, which start when batteries malfunction and explode—often in the homes of the delivery workers who rely on them.
So the DOT installed five
public charging cabinets in locations around the city, where delivery workers could pay a small fee to drop off depleted e-bike batteries, safely charge them, and take another one from the cabinet for use.
The stations were a hit: the DOT facilitated 12,000 battery swaps in over six months, and reduced at-home charging among participants by more than a third. When the pilot wrapped up at the end of that year, the DOT
recommended
a citywide expansion of the program, which eventually grew to 25 new charging stations installed where deliveristas work the most—Midtown Manhattan, the Upper East Side, and the Upper West Side.
Amin Bandali: EmacsConf 2026 community panel - my comments
PlanetDebian
www.shemshak.org
2026-11-09 16:57:44
This is a recollection of my comments from the
EmacsConf 2026 community panel recording session
this past weekend, where the panellists took turns
answering the proposed questions, one minute per
question per panellist.
In addition to the live Q&A session planned for
Saturday 12 December 2026 d...
This is a recollection of my comments from the
EmacsConf 2026 community panel recording session
this past weekend, where the panellists took turns
answering the proposed questions, one minute per
question per panellist.
In addition to the live Q&A session planned for
Saturday 12 December 2026 during EmacsConf 2026,
all Emacs users and community members are invited
to share their thoughts on the panel questions or
other questions before or after the conference.
1. What made you start using Emacs,
and what kept you using it?
I started using Emacs during my bachelor's
studies. I actually learned about Vim first
and was a Vim user, but I'd always found the
configuration language (VimScript) a little bit
clunky. Not long after, I discovered Emacs,
and really loved reading and writing Emacs Lisp,
so I stuck around.
In addition to reading and writing Elisp being fun
and enjoyable for me, I love that Emacs has been a
practical embodiment of software freedom, and I'm
really fond of its surrounding culture of sharing
freely. There's a lot to love and appreciate
about Emacs, but as a practical personal example,
I've been grateful for its excellent support for
bidirectional text editing. It has empowered me
to read and write in Persian, my mother tongue,
with ease. (Persian has a right-to-left alphabet,
like Arabic and Hebrew.)
2. What took you from using Emacs
to actively contributing to the community -
participating in forums, writing Elisp, organizing
meetups, answering questions?
As I continued experimenting and writing bits and
pieces of Elisp to scratch my own itches, I felt
compelled to share them freely as a way of giving
back to the community that gave me so much.
For me, the community and the people that make it
up are the main deal. Emacs wouldn't be where it
is and what it is today without its people, so
besides programming contributions, I've tried to
contribute in that area as well, for instance by
reviving EmacsConf with Sacha Chua back in 2019.
3. How does Emacs show up for you
in real life - colleagues, meetups, friends?
How did those connections form?
I don't physically have people near me who use
Emacs, but I've connected with many folks in our
online communities, often starting with an email
or IRC message. Some of those relationships
started as acquaintanceship and were developed
into true friendship over time, and I'm grateful
to have had those friends with me.
4. If you know other software
communities, what's one thing Emacs could learn
from them?
I would encourage Emacs, our community, to focus
on the people. We're living in particularly
difficult times, with various kinds of hardships
and uncertainty in our lives. Let's strive to
treat each other with kindness, empathy, and
mindfulness as we continue working together.
There are great examples of other free software
communities whose members have banded together and
are strengthening each other and their community,
as well as cautionary ones where community members
have been tiring and driving out their fellow
members. We could learn valuable lessons from
both in how to take care of our people and
ourselves.
5. What's one concrete thing you
wish existed in the Emacs community a year from
now?
I echoed the sentiments of my fellow panellists
Prot and Til about doing more of the same in
terms of continuing to uphold the standards of
excellence and perseverance. Also, drawing
inspiration from what bashbunni said, to lower
the barriers of entry for people, for example
through organizing different kinds of events,
and experimenting with ways to make people's
lengthy, elaborate Emacs configurations more
tangible and accessible to others, to share
various workflows and demonstrate what's
possible with Emacs.
I look forward to your thoughts on these
and other community-related questions.
We’ve expanded our eighth generation TPU portfolio with TPU 8tx and TPU 8i Max, marking four new TPU systems in a single year.
We first designed TPUs more than a decade ago motivated by Google’s internal demands, including voice recognition and language translation. Eight generations of TPUs later, the use cases have exploded, covering: i) training and serving our own Gemini models, ii) agentic workloads, iii) delivering services to Google Cloud customers on our cloud infrastructure, and most recently, iv) allowing customers to deploy TPUs directly into their own data centers. TPUs are now a rapidly growing business with nearly 100 customers — including frontier labs, trading firms, retailers, universities, and more.
At Google Cloud Next in April, we
introduced
two new specialized TPUs in the same generation — 8t for large-scale training and 8i for real-time reasoning. TPU 8t and 8i offer up to 2.7 times better training performance and 80% better inference price performance, respectively, versus our previous generation of TPUs.
Today, we’re taking that a step further, expanding our eighth-generation TPU portfolio with two additional systems: TPU 8i Max for massive context windows and the highest compute density per rack, and TPU 8tx for secure and confidential inference. This is the first time we have introduced four TPU systems in a single year.
While we’ve always co-designed our TPUs in partnership with Google DeepMind, we’re now increasingly getting feedback from external organizations on their specific needs. With computing moving from human to agent scale, businesses are asking for accelerators that can reason across AI models’ massive context windows. In addition, some highly regulated customers are asking for specialized encryption capabilities for unique workloads.
The new TPU systems we are announcing today address this new reality. Coupled with
our recent PyTorch announcements
, our aim is to make TPUs more easily accessible to every developer and Cloud customer. By combining modular custom silicon with an open and easy-to-use software stack, we can deliver new hardware and system configurations at the pace of the AI industry.
Building the computer around the chip
Today, we’re announcing two new TPU systems — and there’s an important difference between a new chip and a new system.
Designing a new chip means laying out billions of microscopic transistors on a silicon wafer in a multi-year process bound by the laws of physics and a complex, long-duration manufacturing lifecycle. A system, on the other hand, is about how we bring together the compute, networking, and storage around the chip. This can include how they are packaged with the chips, to quickly meet emerging customer needs and research use cases.
When we built our very first TPU more than a decade ago, we knew AI software would evolve much faster than silicon manufacturing ever could. So we made a foundational bet on system balance and modularity, architecting our TPUs as building blocks as part of our
AI Hypercomputer
, so engineers could rapidly adjust packaging, high-speed memory, optical networking, and security around them. That approach allows us to deliver specialized supercomputers in a matter of months rather than years.
Specializing for secure, high-context AI
Each system in our eighth-generation TPU portfolio targets a distinct part of the AI lifecycle.
TPU 8t and TPU 8i established the baseline for this generation of chips:
TPU 8t was designed to be a training powerhouse for massive foundation models with maximum “goodput” — or the useful intelligence delivered per watt of energy used.
TPU 8i is the reasoning engine, designed to break the memory wall, cutting inter-chip communication delays by up to half.
Now, as enterprises bring autonomous agents into production, we have created two new configurations of these foundational systems to solve two urgent new challenges: hardware-level data security and million-token context scale.
TPU 8tx
TPU 8tx, our third eighth-generation system, is optimized for secure and confidential inference and is also great for small-scale training. It’s built for regulated enterprises and governments running frontier or proprietary models and autonomous agents alongside their most sensitive data.
Normally, data is encrypted when stored or sent over a network, but has to be unlocked in memory while a computer processes it. Built on the same silicon as TPU 8t and paired with 5th Generation AMD EPYC CPU hosts, TPU 8tx builds security directly into the hardware layer, keeping sensitive data and model weights protected and isolated even while in active use. And by adopting the same low-latency Boardfly network we created for real-time reasoning, TPU 8tx keeps multi-step agents moving, delivering up to 2x lower latency compared to TPU 8t with a near-zero performance penalty.
Pairing training-grade compute with a fast inference network also means organizations can simultaneously run and customize their models on a single system. TPU 8tx enables teams to fine-tune models using their private data, distill large models into smaller ones, and train their agents through reinforcement learning, all without needing to migrate sensitive data between separate clusters.
Designed for sensitive enterprise workloads, TPU 8tx provides hardware-level confidential compute for private fine-tuning and secure agent execution.
TPU 8i Max
Our fourth system, TPU 8i Max, is built for a different problem: the memory wall.
When dozens of AI agents work together across an entire software codebase or hours of video at once, memory bandwidth quickly becomes the bottleneck. So we took two low-latency TPU 8i chips and combined them onto a single package.
TPU 8i Max scales compute and memory in lockstep, delivering double the compute, double the SRAM and double the HBM bandwidth of TPU 8i, so processors remain equipped with essential data and so that large workloads do not stall. Further, because TPU 8i Max fits twice the silicon within the existing rack footprint, data centers can deploy significantly more computing power per square foot and per watt.
The dual-chip TPU 8i Max system, engineered for massive context windows and maximum compute density.
While flexible across workloads, together the four systems in our eighth-generation TPUs give customers a purpose-built accelerator for every stage of the agentic lifecycle. TPU 8t for scale-up training, TPU 8i for low-latency reasoning, TPU 8tx for confidential computing, and TPU 8i Max for massive context windows and the highest compute density per rack.
Opening up TPUs to every developer
When we launched the first TPU more than a decade ago, there were only a handful of companies running workloads that needed the processing power of a TPU. The use cases were specialized, so engineers would use optimized frameworks and hand-tuned code.
Over the years, as AI has advanced, more and more companies began using accelerators. Now, AI adoption is at a point where TPUs are excellent for a wide range of companies and use cases, and as a result, we’ve been working systematically to remove barriers to adoption so that TPUs are as easy-to-use as general-purpose hardware.
This investment comes together today across these key areas:
Opening up TPU development to every PyTorch developer; no code rewrites needed:
Last month, we open-sourced
TorchTPU
, so PyTorch code and Hugging Face models now run natively on TPUs, alongside out-of-the-box TPU backends for leading open-source inference engines like vLLM and SGLang. And to make hardware optimization effortless, our new open-source
TPU agent suite
(now in preview) plugs directly into coding tools like Claude Code, Cursor, and Google Antigravity to automate TPU onboarding in minutes, diagnose bottlenecks, and autotune custom kernels using plain language. For production deployments, our new open-source
XLA Serving Engine
lets you train models in Python and serve them directly in a low-latency C++ runtime across TPUs, GPUs, and CPUs.
Industry-leading production performance on InferenceX and AgentX benchmarks:
In production, what really matters is outcomes on real AI workloads rather than theoretical peak chip speeds. On industry-standard InferenceX and AgentX
benchmarks
, which test realistic agentic coding and long-context work, our native vLLM-TorchTPU software stack on TPUs achieved state-of-the-art price-performance marks.
New evaluations
demonstrate these advantages extend across a wide range of frontier open models and open-source serving stacks while maintaining high model accuracy. Upcoming software optimizations on this same hardware will drive those results even further.
Eliminating idle compute waste for autonomous agents:
Because AI agents are stateful, they frequently pause for seconds or hours while waiting on a database lookup, an external software tool, or human feedback. To make our agents more resource-efficient during those pauses, our new
Agent Compute Engine
software automatically suspends and resumes idle sessions, cutting operational infrastructure costs.
Breaking through the memory wall with the model-state layer (TPU Sync):
Building the computer around the chip also means unifying memory, storage, and networking in software. As agents reason across million-token contexts and continuous reinforcement learning (RL) loops, memory quickly becomes the bottleneck. We’re open-sourcing
TPU Sync
, the model-state layer for TPU clusters. TPU Sync turns chip HBM, host DRAM, shared storage, and the data center network into a single, co-designed memory hierarchy — automatically tiering massive KV caches off the chip in milliseconds, streaming context across disaggregated prefill and decode nodes, and synchronizing RL weights to cut KV transfer latency and Time to First Token (TTFT) by more than 90%.
Scaling distributed workloads across TPUs from a single controller:
Now
generally available
on Google Kubernetes Engine (GKE),
Cloud Pathways
brings the Google DeepMind runtime behind Gemini to every Google Cloud customer. Using a single-controller architecture and
pathwaysutils
, you can orchestrate large-scale TPU systems across multiple slices as if they were one local machine for pre-training, reinforcement learning, and multihost inference. Cloud Pathways keeps long-running jobs moving through hardware disruptions with colocated Python sidecars, sub-minute slice hot-swapping, and elastic resharding.
Stitching custom TPU topologies on-demand with GKE dynamic slicing:
Now generally available,
GKE dynamic slicing
decouples physical hardware provisioning from logical slice formation using optical circuit switching (OCS) technology. By dynamically assembling TPU cubes into larger topologies (super-slicing) or partitioning them into smaller, isolated workloads (sub-slicing) on-the-fly, this update completely eliminates rigid, manual nodepool recreation cycles. This topology agility slashes job startup times by up to 5x and accelerates fault recovery by up to 4.5x, maximizing overall fleet utilization and workload goodput across all TPUs.
Co-designing with a decade of experience
Shipping four TPU systems and a unified, open software stack in a single year only happens when silicon architects, networking engineers, compiler teams, and Google DeepMind researchers build side-by-side.
Increasingly, we’re even tapping into AI to ideate and build the next generation of AI infrastructure. From using Google DeepMind’s
AlphaChip
reinforcement learning system to using Gemini to deliver chip layouts in hours rather than weeks, we’re using TPU-powered AI services to rapidly accelerate next-generation TPU hardware development. This is true co-design and a unique Google differentiator.
Learn more about our new TPU systems by tuning into today’s
broadcast
at 9 a.m. PT.
Get the latest news from Google in your inbox
Sign up for our newsletters with product updates, event information, special offers, and more.
With the rapid growth of the Python ecosystem, PyPI has become an increasingly attractive target for malicious actors. In response, the PyPI team has
delivered many security features
while taking a more active role in helping PyPI users assess and understand package security.
Digital attestations
, introduced in 2024, are an example of this effort, providing a verifiable record of a release file's
provenance
(where it came from). However, provenance and attestations are still unfamiliar concepts for many PyPI users, and PyPI's interface did little to communicate their meaning, importance, or limitations.
The new
security tab
communicates release provenance states and displays per-file attestations, giving you a dedicated place to verify where the release files came from.
The new security tab on a PyPI project detail page
PyPI calculates each release's provenance state by checking whether each release file has an attestation. Typically, a release will be in one of two states:
"No provenance" simply means that no file in the release has an attestation. This is typical for older releases or projects that have not yet configured Trusted Publishing.
No provenance does not necessarily indicate that a release or release file is malicious; it instead means that the
file origin cannot be cryptographically verified
.
When there is no provenance, you should rely on surrounding trust signals to assess security, such as maintainer history, release patterns, and repository activity. If you maintain the package, consider using
Trusted Publishing
with a
publisher that generates attestations
for your next release.
Provenance warnings are designed to help you identify when a file may not have come from the project's maintainers, for example, if an attacker has taken over an account or a publishing workflow.
When provenance metadata looks unusual or conflicts with a project's history, PyPI surfaces a prominent warning. Many warnings have legitimate explanations, but each one is worth checking before you install.
This means that some files carry attestations while others do not (e.g., wheels were published via Trusted Publishing, but the source tarball was uploaded using an API token).
Exercise caution if you see this warning. Check release notes for build issues or ask in the project's issue tracker before installing.
This warning tells you that the release files originated from a different repository or workflow than a previous release. While often legitimate (such as an organization name change or repository migration), it can also indicate a compromised pipeline or account takeover.
If you see this warning, check the project release notes or official channels to confirm that an infrastructure migration was planned.
This means that a project that previously published with attestations has changed to uploading release files without them.
Check whether the maintainers intentionally changed their publishing process, for example by switching back to API tokens, or by changing their publishing configuration so that it no longer generates attestations. If this is unexpected, treat the release with skepticism until verified.
To learn more about provenance and attestations, including provenance warnings, see our
user documentation
.
To support these changes, the project detail page has also been updated:
Provenance warnings now appear at the top of the page, alongside status banners for yanked releases, archived projects, and pre-releases. If a project or release is
quarantined
, only the quarantine banner is shown, as it takes precedence over all other warnings and banners.
When a release has full provenance or provenance warnings, its provenance state is displayed in the sidebar, linking through to the security tab for more information.
Metadata is now ordered by utility and labeled as "PyPI data" or "Data verified by PyPI", replacing the old design where data was grouped and ordered by verification status.
The redesigned metadata sidebar, with information ordered by utility
The redesigned
release files tab
helps you find the right file by searching and filtering long lists. You can also view the provenance state of each file within the table, and quickly identify late files, which are marked with an orange warning icon.
Late file warnings are shown when one or more files were uploaded more than 14 days after the initial release timestamp. These warnings only appear on releases prior to July 2026, when a policy was introduced to
reject new files after 14 days
.
The
release history tab
now also provides more details about each release, exposing file count, provenance state, and release status (i.e., quarantined, yanked, archived, or pre-release).
The redesigned release history tab, with release status, file count, and provenance state
The new security tab gives PyPI a dedicated home for future attestation types and security notices. To help the wider open source ecosystem benefit from this work, we've also
published a case study in the OpenSSF Attestations Style Guide
detailing the design patterns and warnings developed during this project.
Finally, we would like to thank the OpenSSF for its funding and continued partnership in securing the Python packaging ecosystem.
Why Fewer People Are Challenging Bad Patents
Electronic Frontier Foundation
www.eff.org
2026-11-09 16:40:14
The number of petitions being filed at the Patent Trial and Appeal Board (PTAB) has collapsed. That’s not reason for celebration. The PTAB is an important line of defense against low-quality software patents being used in lawsuits against people and companies.
The drop didn’t happen because suddenly...
The number of petitions being filed at the Patent Trial and Appeal Board (PTAB) has collapsed. That’s not reason for celebration. The PTAB is an important line of defense against low-quality software patents being used in lawsuits against people and companies.
The drop didn’t happen because suddenly patents have become higher quality. It’s simply because USPTO leadership is increasingly refusing to consider good challenges to patents, for reasons unrelated to the merits. The process has become so unreliable that many would-be patent challengers aren’t even trying.
Inter partes review (IPR) is a process that allows people to challenge patents at the Patent Office, rather than having to fight an expensive lawsuit in federal court. It’s one of the most important ways to get bad patents out of the system.
In the third quarter of 2026, July through September, only
97 IPR petitions
were filed at the PTAB, compared to
327 petitions
during the same period in 2025. Similarly, only
37 IPR petitions
were filed in September 2026, compared to
129 petitions
in December 2024—the last full month before the current USPTO leadership began reshaping how the Board handles patent challenges.
This dramatic decline shouldn’t just concern patent lawyers. EFF has fought bad patents because so many software and internet patents make claims to the basic tools of free expression online, like sending email, using online ads, or publishing web pages. When bad patents go unchallenged, they affect everyone who cares about the freedom to write new code and make new technology.
That’s why EFF has defended IPR since it came on the scene more than a decade ago. It provides a faster and less expensive way to challenge patents that should never have been granted. Congress created IPRs because the Patent Office makes mistakes. District court litigation is an extraordinarily expensive way to correct them. Without a meaningful administrative review process, bad patents remain powerful weapons in the hands of patent trolls and others seeking to extract settlements from companies that often did nothing wrong.
Now, USPTO leadership is dismantling that safeguard.
Petitions and Institution Rates Are Falling
Since Congress created the IPR patent challenge process in 2012, the PTAB has always had some discretion in deciding which petitions deserve review. But institution rates today are much lower than their typical historical range.
Between fiscal years 2022 and 2024, the PTAB instituted between
66% and 68% of IPR petitions
. In fiscal year 2026, which concluded in September 2026, the
institution rate fell to 41%
. And institution is only the first step of an IPR—it means the PTAB has agreed to hear the challenge, not that the challenger won, and the patent will be invalidated.
That decline helps explain why fewer petitions are being filed in the first place. Preparing an IPR petition takes substantial time and money. While cheaper than federal court, it’s still a complicated administrative process. Before filing, a challenger typically needs to search for prior art, hire experts, and develop detailed technical and legal arguments about why the patent never should have been granted.
Companies were willing to pay for IPRs because, historically, they could expect a predictable process. Petitions that met the statutory standard generally had a reasonable prospect of being heard and decided on the merits. But the USPTO has made it harder to get petitions heard and is throwing them out for reasons that have nothing to do with the merits of the challenges. Faced with these odds, many potential challengers aren’t filing at all.
Even After a Challenge Is Accepted, The USPTO Director Can Cancel It
When the PTAB decides to hear an IPR case, that means the petition has been “instituted”—but that has never meant that the petitioner will definitely win. It means the PTAB has determined the challenge warrants a full merits review, and the parties could expect the proceeding to continue toward a final written decision. But under the current USPTO leadership, that expectation has disappeared. The PTAB’s institution decisions are being repeatedly vacated by the Director.
USPTO Director John Squires has vacated at least 29 decisions granting institution of IPR proceedings, and subsequently denied the petitions, terminating those proceedings before a final written decision. These include cases that PTAB judges had already agreed to hear, as well as proceedings that Squires himself had previously allowed to proceed. This level of retroactive intervention is unprecedented.
In some cases, the parties had already invested substantial time and money litigating before the PTAB, only to have the proceeding terminated based on new reasoning by the Director’s office that arose after institution.
For example, in
Revvo Technologies v. Cerebrum Sensor Technologies
, the
Director vacated
an institution decision and remanded the case to the Board. The Board then instituted review again, but the
Director reversed
that decision. Using a new approach, the Director said that the petition had inconsistencies between claim construction positions taken before the PTAB and in district court. Since then, that decision has been cited as a basis for terminating several other instituted proceedings.
The result is another layer of uncertainty for people who want to challenge bad patents. Getting through the front door of an institution decision is much harder than it used to be—and now, even getting through that door doesn’t mean the PTAB will decide your challenge. Predictability is one of the things that made IPRs work.
Congress Created the PTAB To Avoid Costly Litigation
Congress created IPRs in part because challenging a questionable patent in federal court is enormously expensive and risky. Patent examiners work under serious time constraints, and some patents that shouldn’t have been granted will inevitably issue. Not every patent dispute requires years of expensive district court litigation. Congress recognized that, and created an administrative process, staffed with experts more capable of correcting those mistakes.
That system has benefited the public. Since 2012, it has helped invalidate thousands of patent claims that never should have been issued. The IPR process has protected
startups, software developers, nonprofits, and small businesses
that otherwise would have faced crushing litigation costs simply for building products or offering services that use everyday internet technology.
EFF supports a balanced IPR system because it should be easier to fight against bogus patents that should never have been issued. The cost of fighting a patent can be a weapon in itself, and weak patents don't just burden large technology companies. Patent trolls routinely target
small businesses and independent developers
, and have gone after podcasters, retailers, and even coffee shops and nonprofits. These organizations have neither the resources nor the desire to spend years litigating over potentially invalid patents in federal court. IPR offers a chance to challenge those patents before litigation costs get out of control.
If we weaken the IPR system, bad patents become much harder and more expensive to challenge.
We Shouldn't Accept This as the New Normal
Some defenders of the current approach argue that lower institution rates reflect more balance in the patent system. But institution rates at the PTAB have plummeted from 68% to 41% in just two years—a nearly 40% decline. IPR petition filings have reached historic lows. And even proceedings that have already been instituted can now be terminated months later, without a decision on the merits.
These developments send a troubling message to members of the public who might want to use the PTAB: don't bother. The PTAB doesn’t need to institute every petition. But it does need to provide a process that is transparent, predictable, and fair. Right now, confidence in the system is disappearing.
If companies, individuals, and nonprofits conclude that IPRs aren’t worth pursuing, the consequences won't stop at the PTAB. More weak patents that never should have been granted will survive, and patent trolls will use them. That means more defendants facing expensive district court litigation or paying settlements driven by the cost of litigation.
N-able takes cloud platform offline after 30+ "zero-days" published
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 16:26:25
N-able has taken its hosted N-central environments offline and urged on-premises customers to shut down their servers after a security researcher publicly disclosed more than 30 alleged zero-day vulnerabilities, including exploits that could let attackers take over vulnerable systems. [...]...
N-able has taken its hosted N-central environments offline and urged on-premises customers to shut down their servers after a security researcher publicly disclosed more than 30 alleged zero-day vulnerabilities, including exploits that could let attackers take over vulnerable systems.
Security researcher
Sean Bales disclosed
the vulnerabilities late Sunday, November 8, and published a GitHub repository called
Able2Shell
containing proof-of-concept exploits for the flaws.
N-central is a remote monitoring and management (RMM) platform used by managed service providers (MSPs) and IT teams to monitor, manage, and secure customer devices and networks remotely.
The researcher says the vulnerabilities were tested against N-central Appliance 2026.4.0.31, a pre-release version of the software, and believes most, if not all, flaws also affect earlier versions.
Bales also confirmed to BleepingComputer that the discovery of the vulnerabilities was AI-assisted.
The disclosed vulnerabilities include authentication bypasses, credential disclosure, arbitrary file writes, directory traversal, cross-site scripting (XSS), XML external entity (XXE) injection, and remote code execution (RCE) flaws.
One of the most critical exploit chains abuses an unauthenticated XXE vulnerability in N-central's service-import functionality to steal a trusted local session, reset an account password, and execute commands on the server as the nable user.
The same exploit can also create an enabled Default Administrator account with attacker-controlled credentials, providing rogue administrative access to the N-central management interface.
Bales shared a video demonstration of this exploit, showing terminal output reporting successful administrator account creation, login authentication, access to protected administrative functionality, and remote command execution as the
nable
user.
Other disclosed exploits include a stored XSS that can execute commands as root when an administrator views malicious patch metadata, and a privilege-escalation flaw that allows code running under the
nable
account to execute commands as root.
Bales confirmed to BleepingComputer that the unauthenticated XXE-to-RCE exploit was the most critical of the disclosed vulnerabilities.
N-able takes servers offline worldwide
After the disclosure, N-able
announced a critical security incident
and took its hosted N-central environments offline across the Americas, Europe, and Asia-Pacific regions.
While BleepingComputer has not independently verified all the reported vulnerabilities, N-able confirmed it is developing a hotfix to address the security issues, lending credence to the researcher's claims that at least some of the flaws are legitimate zero-days.
"N-able is actively responding to non-responsible communication of critical vulnerabilities in N-central late Sunday night, November 8, found by an independent researcher," N-able told BleepingComputer.
"As a precautionary measure, we took our Hosted N-central environment offline today, November 9, and provided guidance to customers operating on-premises N-central servers to temporarily take their servers offline until further notice."
"Our Security, Engineering, and Operations teams are actively working to implement the necessary remediation. At this time, we have not observed active exploitation of these vulnerabilities. Protecting our customers and their environments remains our highest priority, and we will provide additional updates as they become available."
In a subsequent
status update
, N-able said it was continuing to develop and validate a hotfix and had found no evidence of active exploitation or unauthorized data access.
While the N-central classic environment is unavailable, N-able said Ecoverse services accessed through N-able Login remain operational.
N-able has not provided an estimate of when N-central will come back online but says it plans to publish updates every four hours, or sooner if new information becomes available.
Bales told BleepingComputer that he deliberately released the N-central vulnerabilities without notifying N-able beforehand because the company allegedly failed to address vulnerabilities he had previously reported in a different N-able product.
According to Bales, he disclosed two unrelated remote code execution vulnerabilities and a privilege-escalation flaw approximately five to six months ago, but those vulnerabilities remain unpatched.
"I disclosed 2 unrelated RCEs for a different N-able product, along with a priv esc vulnerability 5 or 6 months ago. These have yet to be patched. I did not disclose any of the 0-days I posted last night," Bales told BleepingComputer.
He also claims to have sent follow-up emails over the past four to six weeks without a response.
Bales says his previous experience with N-able's vulnerability disclosure process and that "they don't take disclosure seriously" led him to publish the N-central zero-day exploits.
However, he said these exploits target a different N-able product than the ones he previously disclosed.
The researcher also claimed that he received no payment through N-able's bug bounty platform for his earlier reports.
Bales confirmed that N-able executives, including the company's CEO and CTO, contacted him following the disclosure and asked him to remove the GitHub repository and work with the company.
"They did not threaten me or anything though. Only asked to take down the repo, work with them, etc."
BleepingComputer asked N-able about Bales' allegations concerning the previously disclosed vulnerabilities, their patching status, and the alleged lack of responses to his follow-up emails.
However, the company did not address those questions, providing only the statement concerning the N-central security incident and the precautionary shutdown.
The previously reported vulnerabilities are not included in the publicly released Able2Shell repository and allegedly remain unpatched.
York University breach exposed personal information dating to 2007
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 16:22:31
York University has announced it suffered a cybersecurity incident in which a threat actor stole personal information people submitted through online forms. [...]...
York University in Toronto has confirmed that a threat actor breached its systems and accessed personal information submitted through online forms.
The unauthorized access was discovered on October 25 and affected forms submitted on 14 university websites between 2007 and 2026.
York University is a major university based in Toronto, Canada, with more than 55,700 students across 200 undergraduate and graduate degree programs, and an administrative staff of 7,000.
“York was recently subject to a cybersecurity incident involving an unauthorized actor accessing limited online forms used by University departments,” the
university stated on Friday
.
“While York acted quickly to contain the incident following discovery, we regret to confirm the theft of personal information from some departmental forms.”
The announcement lists the exposed data in detail, by category. Across the affected forms, the attacker accessed the following:
Email address
Phone number
Date of birth
York identification number
Government ID information
Third-party contact information
Health information
Academic history
Employment history
Financial status
Criminal background
Demographic details
Photos and other images
The exact data types exposed vary by person, and most stolen records contained basic contact information and York ID numbers, the university said.
Exposing contact information alongside other sensitive data significantly increases the risk of phishing and social engineering attacks for affected individuals.
The announcement says the website forms are now secure and safe to use. York University said it will directly notify individuals whose government ID or financial account information was exposed and offer two years of credit monitoring and identity theft protection coverage.
Individuals who did not receive a notification may contact the university directly to learn what specific types of data were exposed in their case.
At this time, the educational institution has not specified how many individuals have been impacted by the cybersecurity incident.
No details have been provided about the perpetrators. At the time of writing, BleepingComputer did not find any ransomware group claiming the attack.
Celebrate by Turning the Blowout into Durable Power
OrganizingUp
convergencemag.com
2026-11-09 16:13:12
Featured image by Akin Olla The anti-MAGA majority turned out and showed its muscle on November 3. Every demographic group voted less Republican than in 2024, with the biggest shifts coming from Latinos and young voters. The anti-fascist electoral alliance of Left and center (mostly) held. Bot...
One Stolen Vendor Key, Every Customer’s Data Exposed: Inside the Qubole Supply Chain Attack
How a third-party compromise created a path into multiple organizations, and how Sentra uncovered it in less than 24 hours.
Co-authored with Sagy Drucker, Asaf Rozali and Riva Kranz
Sentra recently uncovered a very wide supply chain attack that moved through organization after organization. Dozens of Qubole customers were impacted. An attacker got hold of credentials belonging to Qubole, a big-data platform, and used the access that company after company had once granted Qubole to quietly pull their data. Nobody broke into these companies directly. The attacker came in through a vendor they all trusted.
This kind of risk is easy to miss. Your cloud is full of identities that aren't people: vendor integrations, automation and AI agents, each holding standing access to your data. Most days they do the same thing, from the same place, on the same schedule. The danger is the day one of them starts doing something else, and very few teams are watching for it.
The riskiest of these are the ones you forgot. Every vendor you have ever connected to your cloud left a door behind. Most of those doors are still there, trusted, rarely watched, and often able to reach your most sensitive data.
This post isn't the story of one company. It's what we saw across the attacks: how the attacker got in, how they moved, what they went after, and what finally gave them away.
The attack at a glance
More than a dozen organizations
hacked in a single attack, all through access they had once granted Qubole.
About a second
to assume each Qubole-trusted role, so the attacker could move from one company to the next almost instantly.
About 100 passwords and keys
read in 7 minutes, from three different places they were stored, plus thousands of credential records inside the files the attacker downloaded.
0 write actions.
Nothing was changed or deleted, only stolen, which made it harder to notice.
Forgotten vendor trust
The doors the attacker used were old ones. Qubole roles were still in place long after companies had stopped using Qubole, and those roles could read nearly all of the data the attacker went after.
Qubole's roles had been dormant since the spring. Then they came back to life. Sentra had seen this risk coming. Before the attack, it had already flagged one of Qubole's roles as unused for months yet still able to reach sensitive data.
Valid credentials, wrong network
The organizations hit by this attack weren't careless. They set up their Qubole integrations the way AWS recommends, including an additional check called an ExternalId, a code the vendor must present before it can get in. Every Qubole role had it, and the attacker presented the right code every time. As far as AWS could tell, the attacker was Qubole.
None of the activity came from Qubole's own network. It all came from a rented OVH server and the Mullvad VPN, and there was no normal Qubole activity at all in that window. Every session was the attacker.
That's what makes supply chain attacks so dangerous. When a trusted vendor is compromised, following best practice isn't enough, because the attacker's access is real and looks legitimate in every log. Only two things stop it. Zero trust limits each vendor to the data it truly needs, so a stolen key opens as little as possible. And data detection and response (DDR) watches how every identity actually uses data, flagging the moment a trusted one starts behaving like an attacker. In this attack, the access looked valid. The behavior didn't.
Test quietly, then sweep
The attacker started slowly. They tested the stolen credentials on one low-value Qubole role, took a quiet look around, and made a first theft of thousands of customer-profile files. Then they moved fast. Within minutes they entered every Qubole-trusted role and started bulk downloads that ran in the background over the following days. A final pass, from a different VPN address, pulled production database backups.
Then the activity stopped. The trusts were still in place, so the attacker went quiet without ever losing access.
How the attacker stole credentials
Stealing data wasn’t enough. We saw the attacker use several different techniques to steal credentials that could open even more doors:
Pulling secrets in bulk from Secrets Manager:
source-control, identity-provider, CI and database credentials, and even the vendor’s own tokens and ExternalIds.
Reading decrypted parameters from SSM Parameter Store,
including monitoring and scanner agent keys.
Harvesting Lambda environment variables,
switching to a second route when the first one was blocked.
Scraping EC2 user data,
the startup scripts where tokens and passwords often hide.
How we traced it
The first job was matching the leaked samples to data Sentra had already scanned. We compared what was inside the files, not just their names, because names are easy to change and content isn't.
Within a few hours we had it down to a handful of S3 buckets. Those were the sources, and the question became much narrower: who could read them?
Each source bucket could be reached by hundreds of identities: service roles, admins, single sign-on users and automation. Chasing every one of them in a day wasn't realistic. So we narrowed to external identities, the accounts outside a company's environment that are still trusted to get in, such as vendors, tools and partners. Then we checked which of them could read most of the source buckets. One stood out: Qubole.
Being able to reach data doesn't mean someone did. So for every external identity, we compared its activity to its own history: when it was used, how often, from which IP addresses, and what it did. Every vendor looked normal except one.
A small team split the work, each using AI to move faster, and we held every finding to one rule: it was either proven or assumed. That rule saved us more than once. One early lead looked strong on paper, but the activity logs showed the identity had never been used, so we dropped it.
Proving what was taken
Knowing the attacker could reach the data wasn't enough. Each affected company needed to know what was actually taken, and that's harder to prove than it sounds, because most cloud storage doesn't record every file read by default. So we pieced the picture together from three places.
The first was encryption. Every time an encrypted file is downloaded, the cloud has to unlock it, and each unlock is logged with the file's name. By matching those records to the attacker's sessions, we could see which files left. Files that only use default encryption leave no such trail, so the real number is likely higher.
The second was the secrets themselves. Every password and key the attacker read left its own record, which gave an exact list of what to change.
The third was file access logs. Where they were turned on, they recorded every file the attacker downloaded, with the IP and session. Across one company's accounts that came to millions of files, and on encrypted buckets the logs matched the encryption records exactly.
This is where having an agentic Data Security Platform makes the difference. Sentra continuously discovers and classifies sensitive data across cloud, SaaS, data warehouses, on-premises environments and AI systems. It also maps every employee, service account and AI agent to the data each one can reach. After a breach, the clock is running: breach notification deadlines can be as short as 72 hours, and every hour spent working out what was taken is an hour that can't be spent containing it. Logs can show which files were touched, but not what was inside them. Because Sentra had already discovered and classified our customers' data, we knew which locations held personal, financial and credential data before the investigation even began. That turned "what did we lose?" from a question that can take weeks into one we answered the same day.
Five actions, same day
By the end of the day, we could give each affected customer five clear actions, each backed by evidence:
Remove Qubole from every role that trusts it.
Rotate every secret that was read. We shared each secret's name and where to find it in their logs, without ever seeing the values themselves.
Block the attacker's IP addresses.
Preserve the logs before they expire.
Let Qubole know.
One vendor, many targets
What we saw wasn't unique to one company. The attacker held Qubole's credentials, and those credentials opened a door at every organization that still trusted Qubole. This was a broad campaign that moved through company after company, impacting dozens of Qubole customers.
Because Sentra can see which organizations trust the same vendor, we checked every Sentra customer with a Qubole connection within about an hour. The same activity showed up across customer environments, a long-unused Qubole role suddenly waking up in the same window, and we warned each affected customer directly.
We then reported the campaign to Wiz, which led to a joint investigation with Wiz and Mandiant.
Their research
shows the same attacker sweeping through one victim environment after another in quick succession.
Close the doors you forgot
Some vendors can reach far more sensitive data than others, and those are the ones an attacker wants. Compromise one of them, and everything it can access goes with it. Start by finding them: which outside identities can read your customer records, financial data and credentials, and how much of it each one can reach.
Then shrink that access with a zero trust approach: every vendor gets only the data it needs for the job it does today, and nothing more. Remove trust entirely for integrations you no longer use, because a dormant, privileged, external role should be removed, not watched. For the rest, cut permissions down to what the vendor documents and limit each role to the vendor's published network addresses. In this case, every secret that leaked came from permissions Qubole never needed, and a network restriction alone would have blocked every login we saw.
That's exactly what Sentra does. It shows which vendors, service accounts and AI agents can reach your most sensitive data, flags access that is excessive or unused, and helps you cut it back before an attacker can use it. And because access keeps changing, Sentra keeps watching, so a vendor that suddenly starts acting differently is caught early.
How Sentra turned a month into a day
We didn't start from zero, and that's why the investigation took a day instead of a month. Sentra had already found and classified our customers' sensitive data, so we could trace the stolen samples back to their source within hours. It had also mapped who could reach that data, vendors included, and how much each one could do, which turned hundreds of possible suspects into a short list.
Sentra had flagged the risk before anything happened, too: a Qubole role that had sat unused for months but could still reach sensitive data. And because Sentra knows how each identity normally behaves, the attacker stood out the moment a quiet vendor role started acting differently.
Knowing what the data was meant we could tell each customer what kind of sensitive information was exposed, not just where it lived. And because Sentra sees which organizations trust the same vendor, one customer's incident became an early warning for every other customer at risk.
We've since turned this method into reusable investigation skills, so the next case starts from a playbook rather than a blank page.
Actionable controls to prevent and mitigate supply chain breaches
Continuous sensitive data discovery:
Automatically locate and classify sensitive data across all cloud, SaaS, data warehouse, and AI environments.
Identity-to-data mapping:
Map every employee, vendor, service account, and AI agent to the specific data assets they can access.
Dormant access cleanup:
Flag and revoke unused, excessive, or forgotten third-party integrations before attackers can exploit them.
Real-time anomaly detection (DDR):
Monitor access patterns to detect and alert on unusual third-party behavior instantly.
Rapid incident containment:
Use pre-classified data context to determine breach impact in hours instead of weeks.
For the full technical details and indicators of compromise, read
Wiz's research
.
Want to see which outside identities can reach your sensitive data today?
Book a demo today.
Short-Seller Culper Research Published Information on Jensen Huang’s Affair Back in May
Daring Fireball
culperresearch.com
2026-11-09 15:57:04
Culper Research is a short-seller that published a report (PDF and in a thread on X) in May alleging that Nvidia “had a China problem”. From the start of its report:
Nvidia claims that its business in China went to “zero” after
April 2025 U.S. trade restrictions. We believe that in reality,
ove...
Pokémon released its Mega Evolution Delta Region cards this week and one man in Charleston, South Carolina wanted them so badly that he left his 6-year-old daughter in line at Target at 1 am with a pillow and a blanket.
According to the incident report obtained by 404 Media, the person next to the little girl in line heard the father ask if his daughter “had the gun” before he left her alone at Target for more than an hour. Later, the father
told detectives
he left his daughter behind so “he could maintain his place in line and avoid missing the opportunity to purchase the cards.”
Pokémon cards are
big business
and people will wait to go to wild lengths to secure them. Waiting in line
outside of a store for days
before a new release is routine. John-Michael Dooley was waiting in line outside of a Target in Charleston, South Carolina with his 6-year-old daughter on the morning of November 6 when he decided to run home. He didn’t want to lose his place in line so he left his daughter behind “sleeping on the concrete,” according to a record of 911 calls obtained by 404 Media.
Other people waiting for Pokémon cards watched Dooley drive away and called the cops when he didn’t return. One guy on the scene started a timer on his phone when Dooley left and called the cops once it hit 45 minutes. “[He] advised later that he continued the timer on his phone, and the point in which the father returned to target showed 1 hour and 6 minutes,” according to an incident report obtained by 404 Media.
The person in line next to the 6-year-old “recalled the father waking his daughter up before he left and advised her he was ‘taking the dogs home,’” the report said. “Following this, [he] recalled hearing the father ask the daughter if ‘she had the gun’ before leaving.’ All parties on scene advised that the offender did not ask anyone to care or look after his daughter, and all stated the offender simply left her there by herself.”
The cops woke the girl up and she told them “she was at Target in line to get Pokémon cards with her father when the store opened,” according to the incident report. The police didn’t find a gun. “The only items the juvenile had in her possession when she was located was a pillow and a green blanket.”
Dooley returned to the line to find police talking to his daughter. “The juvenile still was unsure to the whereabouts of her father at this time,” the report said. “Several minutes after this, I could hear and see a dark colored SUV driving in the parking lot of Target in our direction. As the vehicle got closer, the [person who called 911] yelled out ‘That`s him.’”
Dooley got out of his car and police arrested him. “The offender was brought back to my patrol vehicle at which point he continued to say that he had only left to bring his dogs home,” the report said. “The offender reiterated this several times while also confirming that he left his 6-year-old daughter unattended for a period of time.” Dooley has been charged with unlawful conduct toward a child.
Pokémon card collecting has been at the center of a few strange crimes over the past few years. Fights broke out in multiple Target parking lots earlier this year when a
30th anniversary
set dropped.
About the author
Matthew Gault is a writer covering weird tech, nuclear war, and video games. He’s worked for Reuters, Motherboard, and the New York Times.
Tesla Brain Drain
Daring Fireball
electrek.co
2026-11-09 15:32:27
Fred Lambert, writing for Electrek:
Tesla painted a very different picture just two years ago. At its
2024 shareholder meeting, it showed this slide of its lineup:
the Model 3, Model Y, Model S, Model X, Cybertruck, and Semi, plus
three vehicles under covers that Musk said were “going to be
pret...
Tesla lineup slide from its 2024 shareholder meeting, with the discontinued Model S, Model X, and Cybertruck crossed out (Electrek edit)
Elon Musk now says Tesla can’t build the Cybertruck and the Cybercab at the same time because there are only so many “smart, dedicated people” to go around. Half the executives he showed off in 2023 as proof of Tesla’s “bench strength” have since left the company.
It’s the most honest explanation yet for how Tesla went from five consumer vehicle programs at the start of 2026 to a single platform, Model 3 and Model Y, by the middle of 2027.
Three explanations in four days
On Friday, Musk said Tesla would wind down Cybertruck production at Giga Texas around the middle of next year “to make room for increased Cybercab production.” As we
pointed out at the time
, Giga Texas isn’t short on space. The Cybertruck line runs at a fraction of its installed capacity because the truck sells a fraction of what Tesla planned.
A day later, replying to a user on X, Musk gave a different reason:
“The biggest thing most people fail to understand is that there are a very limited number of smart, dedicated people! They can only do so many things.”
He added that if Tesla has to “maintain a complex production line, supply chain and allocate engineering for Cybertruck, we can’t use those people” for scaling Cybercab.
By this morning, the explanation had shifted again, to the “opportunity cost of the complexity of Cybertruck.” But the Saturday version is the one that matters. Musk is telling us the bottleneck at Tesla isn’t factory space or money. It’s people.
From five programs to one platform
The Cybertruck is the second casualty this year. In January, Musk
announced the end of the Model S and Model X
on Tesla’s Q4 earnings call and summed up the reason in one word: “Autonomy.” The Fremont line is being converted to build Optimus robots, and by April,
only inventory was left
.
The flagships had been on life support for years. Their last real update was the 2021 interior refresh. The June 2025 “refresh” brought a new paint color, a front bumper camera, a bit more range, and a $5,000 price increase. That’s not how you treat a vehicle program you care about.
Tesla painted a very different picture just two years ago. At its
2024 shareholder meeting
, it showed this slide of its lineup: the Model 3, Model Y, Model S, Model X, Cybertruck, and Semi, plus three vehicles under covers that Musk said were “going to be pretty special.”
Tesla lineup slide from its 2024 annual shareholder meeting (Tesla)
Of the five consumer vehicles on that slide, three are now dead or on their way out.
So here’s what will be left in the second half of 2027: Model 3 and Model Y, two vehicles built on the same platform, plus the Model Y L and cheaper “Standard” variants of both. The Semi is a commercial truck. The Roadster’s production is still a giant question mark. And the Cybercab is a robotaxi with no steering wheel, not a car you can buy – even though Tesla is going to let fleet buyers get them to add on its own Robotaxi network. We previously explained
how this is a terrible idea
.
For comparison, Hyundai Motor Group sells more than half a dozen EV models in the US across its Hyundai, Kia, and Genesis brands, on top of its gas and hybrid lineup. GM and Toyota run dozens of nameplates at once. Tesla can’t keep more than two programs alive at the same time.
The “significant bench strength” that walked out the door
At Tesla’s Investor Day at Giga Texas on March 1, 2023, Musk mostly stayed out of the spotlight. Instead, Tesla paraded more than a dozen executives on stage to present its plans, a rare move for a company long criticized for being a one-man show.
“We’ve obviously got significant bench strength here,” Musk said at the time.
Of the 14 executives named as presenters that day, seven are gone:
Zach Kirkhorn
, CFO, left in August 2023.
Colin Campbell
, VP of powertrain engineering, left in 2024 and is now CTO at Redwood Materials.
Drew Baglino
, SVP of powertrain and energy engineering, left in April 2024 after 18 years.
Rebecca Tinucci
, head of Supercharging, was fired in April 2024 along with most of her team.
Mike Snyder
, VP of energy and charging, stepped down last month, according to the Wall Street Journal. Tesla hasn’t confirmed it.
Martin Viecha, who ran investor relations through that event, left in April 2024 as well.
Seven are still at Tesla, according to their LinkedIn profiles: Tom Zhu, Lars Moravy, Franz von Holzhausen, Ashok Elluswamy, Karn Budhiraj, Laurie Shelby, and Brandon Ehrhart. And the ones who left weren’t peripheral. They ran batteries, powertrain, software, chips, energy, charging, and the money.
The people who actually build the cars are leaving too
The bigger problem for Tesla’s ability to run vehicle programs is the program-level talent, the people who take a car from prototype to volume production.
Then the Cybercab, the program Musk is now pulling people toward, started losing its own leaders:
Victor Nechita
, Cybercab vehicle program manager,
quit in February 2026
, days after the first production unit came off the line.
Mark Lupkey
, who ran Cybercab assembly and end-of-line at Giga Texas,
left in March
.
Michael So
, head of Cybercab new product introduction and Giga Texas employee number one, left in April for a nuclear startup.
Jody Kerns
, senior manager of Cybercab general assembly, left in October to run R2 general assembly at Rivian.
Add
17-year finance VP Sendil Palani
and Thomas Dmytryk, the director who built Tesla’s over-the-air update system and Robotaxi infrastructure, both in March, and you get the picture.
So when Musk says he needs Cybertruck’s people for Cybercab, part of the reason is that Cybercab keeps losing its own.
Tesla has bet on autonomy too early before
Musk will frame all of this as focus. Autonomy is going to be so big, the argument goes, that Tesla has to go all in.
But we’ve heard that before. Tesla made the yoke steering wheel standard on the Model S and Model X in 2021 because the cars would soon drive themselves, then brought back a round wheel as an option. It removed the turn signal stalk from the Model 3 in 2023, then brought the stalk back in 2025 and started selling a $350 retrofit to owners. Each time, the autonomy that justified the change wasn’t there yet.
And Tesla isn’t the leader in unsupervised driving. It has the best driver-assist system on the market, but Waymo still logs roughly seven times more driverless miles per week, and NHTSA estimates Tesla’s entire Robotaxi fleet at about 1,000 vehicles. Zoox is scaling too, and Baidu’s Apollo Go runs a far bigger driverless fleet in China.
Electrek’s Take
This is something that I’ve been highlighting for a decade. Even after it became a big company with a large headcount, Tesla has never been good at running several vehicle programs in a healthy way. The Model S and Model X were starved for updates long before the talent exodus started. Tesla has always thrown everything at its newest program and let the older ones coast.
What changed is that the slack is gone. In 2023, Tesla could still neglect the flagships and keep them on the market, because it had deep benches in engineering, manufacturing, and software to absorb mistakes. Today, half the executives Musk called his bench are gone, and the people running the Cybercab ramp keep walking out. Musk is now openly telling us there aren’t enough people left to build a pickup truck and a robotaxi at the same time.
Musk calls it focus. It looks a lot more like a constraint Tesla can’t hire its way out of.
Will the Cybercab be revolutionary and make it all worth it? We have our doubts. Tesla leads in driver assistance with FSD, but it has failed to evolve the product into unsupervised self-driving at scale, which it promised to buyers for a decade. It’s clearly not the leader in unsupervised self-driving, and the competition is crowded. Tesla’s lasting impact on the robotaxi market is genuinely hard to predict.
What’s not hard to see is the trend. Tesla has shown a complete inability to sustain multiple vehicle programs at once, and it’s getting harder for the automaker, not easier. If Tesla can’t hold on to the people who build its cars, how long before the Model 3 and Model Y get the same treatment as the Model S?
Both vehicle programs will undoubtedly go down in history as some of the most critical EVs of all time, but that doesn’t guarantee lasting success in a rapidly changing auto landscape.
If you’re driving an EV, the people building it matter, but so does where your electricity comes from. With electricity rates up almost 10% last year and expected to keep climbing, going solar is one of the best ways to protect yourself against rising costs. And with lease and PPA options, you can do it with zero upfront cost and start saving immediately. If you want to find the best deal, check out
EnergySage
. It’s a free service with hundreds of pre-vetted installers competing for your business, so you save 20 to 30% compared to going it alone. No sales calls until you pick an installer.
Get your free quotes here
.
FTC: We use income earning auto affiliate links.
More.
Jensen Huang’s image has been shattered. Could he be pushed out at Nvidia?
Guardian
www.theguardian.com
2026-11-09 15:27:07
Huang built Nvidia as a family business but after the co-founder had an affair with an alleged Chinese spy, its board faces a difficult decision For more than 30 years, Jensen Huang has been the seemingly unshakable public face of Nvidia. He co-founded the company as a young engineer in 1993 and ove...
For more than 30 years,
Jensen Huang
has been the seemingly unshakable public face of Nvidia. He co-founded the company as a young engineer in 1993 and oversaw its growth into a multitrillion dollar chipmaker and bellwether of the AI industry at large.
He’s also made it a family business. His children, Madison and Spencer, have taken leadership roles at the firm. While not a company executive, his wife, Lori Mills Huang, leads the family foundation which, as of 2024, controls over 60m
Nvidia
shares.
But Huang’s image as a family man has been shattered as of Sunday. After the
New York Times
revealed at the end of October that Huang may have been targeted by a Chinese intelligence asset who he had developed a close relationship with, he
admitted
in a letter to employees on Sunday that he had been having an affair.
Initially
, Nvidia spokesperson John Rizzo said there was nothing out of the ordinary about Huang’s interactions with
Alice Huang
, an executive at a Singaporean datacenter firm, Megaspeed. US government officials had suspected Huang of smuggling American chips into China, prompting those officials to surveil and monitor her, the Times first reported. In the course of that surveillance, officials allegedly determined that Alice Huang was a Chinese spy and had gotten close with the Nvidia leader.
Nvidia’s board of directors have now launched an independent investigation about the national security concerns surrounding Huang’s relationship.
“I support the investigation and will cooperate fully,” Huang wrote in his letter. “I love our country and our company. I am committed to protecting Nvidia and supporting America’s national security. I am proud and grateful to be an American.”
Megaspeed did not respond to a Guardian request for comment before publication.
In his letter, Huang apologized to his family, acknowledging how much they’ve supported him. His wife, Mills, kept a relatively low profile and didn’t play a formal role at Nvidia. However, in a
2023
interview with the New Yorker, Huang shared that Mills had also worked in Silicon Valley as a microchips engineer before stepping away to raise their children.
“Throughout my life, my family has given me love and support,” Huang wrote in his letter to employees. “They deserve my honesty and loyalty. Instead, I let them down and damaged the life we built together. I take full responsibility for what I did and the hurt I caused, and I accept the criticism that comes with it.”
Both his children now hold high ranking roles at the company, despite not initially pursuing careers in tech. His daughter, Madison, serves as the senior director of product and technical marketing for physical AI platforms, but got her start as a chef. She attended
the Culinary Institute of America and
Le Cordon Bleu
before going to business school and transitioning to luxury marketing. She previously worked at LVMH – the parent company of Lous Vuitton.
Spencer
, for his part, now serves as the director of product for Robotics at Nvidia but spent much of his career as a consultant before joining his father’s company as a product manager. Before consulting, he owned and co-founded a craft cocktail bar in Taiwan.
Could Jensen Huang be pushed out?
In his letter, Huang reiterated his commitment to Nvidia, saying he hoped to earn back his colleagues’ and employees’ trust. However, analysts and investors say there’s a chance he may be removed as CEO after the board’s investigation.
“This is a black eye moment for Jensen and will spark multiple congressional inquiries at a minimum and will create an overhang on the stock for a myriad of reasons,” said Dan Ives, a partner and analyst at investment bank Yorkville Ives. “There is clearly risk as discussed that Jensen could be removed as CEO depending on the board investigation and this will add risk to the stock as he is so important to the Nvidia story and strategy globally.”
Ives said the family’s role at Nvidia adds some complexities for the board.
“The board has to make its decision independent of the family spider web of Jensen and his family at Nvidia,” Ives told the Guardian. “It makes this a very complex situation for the board to navigate with the world watching.”
Huang is to Nvidia what Steve Jobs was to Apple, said Ken Mahoney, the CEO and president of Mahoney Asset Management. “If you asked any Nvidia investor or anyone involved in tech and markets, would they like to see Jensen gone? Definitely not, but [Nvidia] would survive,” Mahoney said.
“Losing Huang would introduce a lot of uncertainty, particularly given his influence over Nvidia’s strategy, culture, and relationships with major technology companies,” he continued. “The bigger question is whether a successor could maintain Huang’s strategic vision and ability to anticipate where the industry is heading, and how that new leader could be tested along the way if things become difficult.”
Executive affairs or inappropriate relationships have recently unseated CEOs, according to executive recruiting and coaching firm Challenger Gray and Christmas. In 2024, the CEO of Astronomer was caught on a kiss cam with the company’s chief people officer, leading him to
resign
shortly after. Nestlé
fired
CEO Laurent Freixe for a relationship with a subordinate.
Nvidia offers a more complex picture. On one hand, Huang’s affair is not just a matter morals or ethics, there are potential national security concerns. On the other, Huang is core to the DNA of Nvidia which in turn is the bedrock of the entire AI industry – an industry upon which the economy relies greatly.
Nvidia shares fell 7.5% as soon as the stock market opened, wiping over $330bn off the company’s value.
“When the CEO of the most valuable company in the world is tied to a counterintelligence investigation because of a personal relationship, every board in America should be paying attention,” said Andy Challenger, chief revenue officer at Challenger, Gray & Christmas. “It’s not just a question of romance or morality any more. It’s a question of judgment, national security exposure, shareholder trust, and whether the person at the top can be relied on to protect the enterprise.”
In a statement, Nvidia’s board said they do not believe either national security or company secrets were compromised but they will “examine all available information.”
“The Board has confidence in Jensen and his leadership team and will provide further updates as appropriate,” the board said in a
statement
.
The New Museum’s New Director: Art Is Not a Lubricant
hellgate
hellgatenyc.com
2026-11-09 15:27:02
Massimiliano Gioni, curator and erstwhile graffiti writer, has already launched exhibitions that challenge—even frighten....
This March, the New Museum reopened its
60,000-square-foot expansion
with "New Humans: Memories of the Future," a sprawling meditation on the technological past, present, and future that included eerie floating
jellyfish-drones
, World War I prosthetics, and a
video installation
of a deepfake Kim Kardashian describing war in Sri Lanka. After that exhibit closed this fall, the New Museum put up the multidisciplinary artist
Arthur Jafa
's first museum survey in the United States, including huge video installations and photographic collage that interrogate and reframe the way Black lives are depicted in images.
Both of these must-see exhibitions share a probing, sharply current perspective that urge the viewer to question the cultural and technological mores that shape the world. Both were projects of Massimiliano Gioni, the Italian visionary who, in July, was
announced
as the New Museum's new director—only the third in its 49-year history—taking over for Lisa Phillips, who spent 26 years at the helm. Gioni, 52, has spent much of his celebrated career at the New Museum, joining in 2003 as director of special exhibitions before becoming its artistic director in 2014. He's a longtime East Village resident, but he has a global perspective too, as a former curator of biennales around the world, including in Venice, Gwangju, and Berlin.
Hell Gate videochatted with Gioni on an evening in late October about his perspective on art, his youth as a graffiti writer, and the polemical mission of the New Museum. "The New Museum is a place where, yes we show great art and artists, but as vehicles to understand the world we're in," he said. "There is less art for art's sake in our building than in others, I think."
This conversation has been condensed and edited for clarity.
Hell Gate: You've been in New York for exactly 20 years, is that correct?
Massimiliano Gioni:
Actually, longer, because I came at the end of '99 and then I lived here until 2003. But the accent doesn't wash out.
I read in the Arthur Jafa exhibition catalog that you were a graffiti writer. What type of graffiti were you doing?
I was an aspiring graffiti artist in Italy and I even got arrested—I must say I was lucky that I got arrested in Italy, not in New York, much rougher—and I was still underage when that happened. Fortunately it didn't go down on my permanent record as they say. It was all Keith Haring's and Rammellzee's and even Basquiat's fault. The funny story is, graffiti art had an early exposure in Italy of all places. Not many people know that Jean-Michel Basquiat's
first gallery show
happened actually in the city of Modena at Emilio Mazzoli before it even
happened in New York
at Annina Nosei's. Probably the first museum show for graffiti art happened in Italy in the early '80s. It was called
Arte di Frontiera
, Frontier Art. I was too young to have seen the actual show, but the catalog of that show was my bible for growing up as a kid.
It was very much connected to certain fantasies I had about New York, probably, and also being born outside of a big city. I probably kind of identified with a slightly outsider's position. But that book with all the photos of, you know,
A-One
and
Lee Quiñones
and
Crash
and
Lady Pink
and all those guys. And then, of course, early
SAMO
was very inspiring. And then
Keith Haring
was, you know, for as many kids of my age, a kind of gateway drug. It was like the surrealists, and then Keith Haring.
On cold winter night families look forward to a meal centering on traditional potato dumplings. | WANDERINGJEW_WANDERS/USED WITH PERMISSION
Klub
This stick-to-your-ribs Scandinavian dumpling is a favorite at Midwestern fundraisers.
Between 1825 and 1925, millions of Scandinavians immigrated to the United States. Many of them settled across North Dakota, South Dakota, Minnesota, Wisconsin, and Iowa. Around the Midwest, Americans remember their ancestors making a hearty, stick-to-your-ribs potato dumpling called
klub
(also spelled
klubb
).
Some know them as
kumla
, others call them
ball
(the names reflect the region from which their families hailed).
After a long and frigid day on the farm, households sat down to a meal of big, dense klub, often served with nothing but a generous helping of melted butter. Some swear by sweet syrup as a topping, while others opt for a ladleful of ham broth. Cooks all start by grating potatoes, and many simmer their dumplings in pork stock, but from there, the process becomes something of a choose-your-own adventure. They might tuck a bit of meat in the center, or use no filling at all. For most of history, cooks simply worked with what they had: salt pork, suet, and congealed blood were all fair game for stuffing. Regional and necessity-based variations aside, many chefs have taken the same approach to day-old leftovers, cutting them into chunks and frying them in butter.
When meat was plentiful, families enjoyed klub alongside cuts of ham or bacon. You can still find the hefty dumplings served this way in a couple of restaurants. Though klub is nowhere near as prevalent as it once was, cooks carry on the tradition at home, as well as at Scandinavian special events and fundraisers around the Midwest.
Vincent Bernat: Performance evolution of route lookup on Linux
PlanetDebian
vincent.bernat.ch
2026-11-09 15:07:32
In previous articles, I explained how the Linux kernel implements IPv4 and
IPv6 routing tables, and I showed the performance improvement of route
lookups from Linux 2.6.32 to 4.16 for IPv4—including the impact of
the Meltdown and Spectre mitigations—as well as from Linux 2.6.39 to 4.18
for IPv6. Thi...
I ran the following benchmarks on an
AMD EPYC 8024P
, a
Zen 4c
CPU
, rented from
Scaleway
, running at 2.4 GHz with CPU boost disabled. I
compiled the kernels with GCC 10.2: this version can compile older kernels as
well as the current ones.
The major 200 ns regression introduced in Linux
6.5
wiped out all these
improvements. This version implements a mitigation for “
Speculative Return
Stack Overflow
,” a vulnerability affecting AMD processors, in
commit
fb3bd914b3ec
. This mitigation adds about 20 cycles on each function return.
It was backported to older kernels (5.10, 5.15, 6.1, and 6.4). To keep the
results legible, I disabled the mitigation for these versions with
spec_rstack_overflow=off
on the kernel command-line.
You can check the vulnerabilities impacting your CPU and their mitigations with
lscpu
. Some mitigations may depend on the microcode or on the
firmware.
1
$ lscpu|grep'^Vuln'Vulnerability Gather data sampling: Not affectedVulnerability Indirect target selection: Not affectedVulnerability Itlb multihit: Not affectedVulnerability L1tf: Not affectedVulnerability Mds: Not affectedVulnerability Meltdown: Not affectedVulnerability Mmio stale data: Not affectedVulnerability Reg file data sampling: Not affectedVulnerability Retbleed: Not affectedVulnerability Spec rstack overflow: Mitigation; Safe RETVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctlVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitizationVulnerability Spectre v2: Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affectedVulnerability Srbds: Not affectedVulnerability Tsa: Vulnerable: Clear CPU buffers attempted, no microcodeVulnerability Tsx async abort: Not affectedVulnerability Vmscape: Mitigation; IBPB before exit to userspace
Performance evolution of IPv4 route lookups. Versions with an asterisk have SRSO mitigation disabled.
I tested three scenarios:
a recent full view with more than 1,000,000 prefixes,
a subset of a full view from 2017 with 500,000 prefixes, and
a set of 500,000 contiguous /32 prefixes.
The 30 ns impact of the mitigation for
SRSO
in Linux
6.5
is smaller than for
IPv6 because IPv4 route lookups traverse fewer functions: around 4 function
calls for IPv4 compared to 25 for IPv6.
In Linux
5.11
, I introduced a regression in
commit c0c5a60f0f13
after
fixing the behavior of
net.ipv4.conf.all.ignore_routes_with_linkdown
!
2
As a result, the
ip_ignore_linkdown()
function spends
around 5 additional cycles to return a result as it needs to follow three
additional pointers.
fib_lookup()
eventually calls it in the
following code
:
To reduce the impact of mitigations, you can disable all of them with
mitigations=off
, disable only a specific one like with
spec_rstack_overflow=off
, or protect against only some
attack vectors
with
mitigations=auto,no_user_kernel
, starting from Linux 6.17.
The impact is also quite different depending on the CPU. For example, on a
Xeon
W-2295
, an Intel desktop CPU from 2020, the impact of the mitigations is only
a few cycles for IPv4, and less than 3% for IPv6. The main contributor is the
mitigation for the
Indirect Target Selection
vulnerability, which is fixed
since the
Sapphire Rapids
architecture.
If we set aside the regressions introduced by the
mitigations against CPU
attacks
, the performance of IPv4 is declining slowly over time while IPv6 has
improved in the past and is currently stable. If routing performance is
important, you have several options: choose a different CPU like an
AMD Zen 5
CPU
, a
fourth generation Xeon CPU
, or maybe an
ARM Neoverse V2
;
disable some or all the mitigations; bypass routing with
XDP
/
eBPF
;
5
or
offload routing
to the network card.
Note
Maytham Alsudany
reviewed a first draft of this article. Any errors are still mine!
Claude Fable 5.2 Scores 65 on Artificial Analysis, Highest So Far
Artificial Analysis Intelligence Index v5.0.1
includes:
AA-Briefcase v1.1, AutomationBench-AA, Terminal-Bench 4.0, FrontierCode 2.0, AA-Omniscience v1.1, GDP.pdf, HLE-Diamond, CritPt v2 (Hard Subset), Terminal-Bench-Science 0.1
. See
Intelligence Index methodology
for further details, including a breakdown of each evaluation and how we run them.
Artificial Analysis Intelligence Index by Open Weights / Proprietary
Artificial Analysis Intelligence Index v5.0.1
includes:
AA-Briefcase v1.1, AutomationBench-AA, Terminal-Bench 4.0, FrontierCode 2.0, AA-Omniscience v1.1, GDP.pdf, HLE-Diamond, CritPt v2 (Hard Subset), Terminal-Bench-Science 0.1
. See
Intelligence Index methodology
for further details, including a breakdown of each evaluation and how we run them.
Indicates whether the model weights are available. Models are labelled as 'Commercial Use Restricted' if commercial use is limited by conditions, and as 'Non-commercial' if the license prohibits commercial use.
Intelligence Index vs. Cost per Task
Artificial Analysis Intelligence Index · Weighted average cost (USD) per Artificial Analysis Intelligence Index task
Weighted average cost per Intelligence Index task. Each evaluation’s cost is calculated from input, cache hit, cache write, reasoning, and answer token prices, divided by task count, and weighted by its Intelligence Index weight.
Artificial Analysis Intelligence Index v5.0.1
includes:
AA-Briefcase v1.1, AutomationBench-AA, Terminal-Bench 4.0, FrontierCode 2.0, AA-Omniscience v1.1, GDP.pdf, HLE-Diamond, CritPt v2 (Hard Subset), Terminal-Bench-Science 0.1
. See
Intelligence Index methodology
for further details, including a breakdown of each evaluation and how we run them.
While model intelligence generally translates across use cases, specific evaluations may be more relevant for certain use cases.
Artificial Analysis Intelligence Index v5.0.1
includes:
AA-Briefcase v1.1, AutomationBench-AA, Terminal-Bench 4.0, FrontierCode 2.0, AA-Omniscience v1.1, GDP.pdf, HLE-Diamond, CritPt v2 (Hard Subset), Terminal-Bench-Science 0.1
. See
Intelligence Index methodology
for further details, including a breakdown of each evaluation and how we run them.
AA-Briefcase v1.1
AA-Briefcase Elo
AA-Briefcase v1.1 is an agentic knowledge work benchmark developed by Artificial Analysis. AA-Briefcase Elo is a combined metric that aggregates rubric pass rate, analytical quality Elo and presentation Elo · Higher is better
No publicly available API
AA-Briefcase Elo is a combined metric that aggregates analytical quality Elo, presentation Elo, and rubric pass rate, with rubric performance converted into Elo via synthetic head-to-head matches. Elo and 95% confidence interval bounds are clamped at 0.
AA-Omniscience v1.1
AA-Omniscience Net Score
AA-Omniscience v1.1 Net Score (higher is better) measures knowledge reliability and hallucination. It rewards correct answers, penalizes hallucinations, and has no penalty for refusing to answer. Scores range from -100 to 100, where 0 means as many correct as incorrect answers, and negative scores mean more incorrect than correct.
No publicly available API
AA-Omniscience v1.1 Net Score (higher is better) measures knowledge reliability and hallucination. It rewards correct answers, penalizes hallucinations, and has no penalty for refusing to answer. Scores range from -100 to 100, where 0 means as many correct as incorrect answers, and negative scores mean more incorrect than correct.
Token Use
Output Tokens per Intelligence Index Task
Weighted average number of output tokens used to run one task in the Artificial Analysis Intelligence Index
No publicly available API
The number of tokens required per Intelligence Index task. This is calculated by multiplying the output tokens per eval by the relative weights of each benchmark in the Intelligence Index, then dividing by task count (excluding repeats).
Cost
Cost per Intelligence Index Task
Weighted average cost (USD) per Intelligence Index task · Segmented by token type · Lower is better
No publicly available API
Weighted average cost per Intelligence Index task. Each evaluation’s cost is calculated from input, cache hit, cache write, reasoning, and answer token prices, divided by task count, and weighted by its Intelligence Index weight.
Cost to Run Artificial Analysis Intelligence Index
Cost (USD) to run all evaluations in the Artificial Analysis Intelligence Index
No publicly available API
The cost to run the evaluations in the Artificial Analysis Intelligence Index, calculated using the model's input, cache hit, cache write, reasoning, and answer token prices and the number of tokens used across evaluations (excluding repeats).
Pricing: Cache Hit, Input, and Output
Price (USD per M Tokens)
No publicly available API
Price per token for cached prompts (previously processed), typically offering a significant discount compared to regular input price, represented as USD per million tokens. The values shown here are the cache hit price; cache write and cache storage are billed separately and vary by provider — see "Cache pricing by provider" for detail.
Context Window
Context Window
Context window: tokens limit · Higher is better
No publicly available API
Larger context windows are relevant to RAG (Retrieval Augmented Generation) LLM workflows which typically involve reasoning and information retrieval of large amounts of data.
Maximum number of combined input & output tokens. Output tokens commonly have a significantly lower limit (varied by model).
Performance
Measured by time per task (minutes), output speed (tokens per second), time to first answer token and time to first token (seconds)
Time per Intelligence Index Task
Output tokens divided by end-to-end output speed (minutes per Intelligence Index task) · Speed at the model's own endpoint or the median across providers · Lower is better
No publicly available API
The weighted average time (minutes) per Artificial Analysis Intelligence Index task: output tokens per task divided by output speed, weighted by each benchmark's weight in the Intelligence Index.
Speed and latency metrics average each endpoint's runs over the past 5 days, and the error rate pools them. We run the benchmark every 6 hours, and endpoints of deprecated models every 18 hours.
Output Speed
Output tokens divided by total request time, including time to first token · Higher is better
No publicly available API
Output tokens, including reasoning tokens, received per second over a request's full duration, from sending the request to receiving the final token. The headline value averages each Performance v3 workload over the past 5 days, then averages the workloads.
Time to First Answer Token
Seconds to first answer token received · Accounts for reasoning model 'thinking' time
No publicly available API
Time to first answer token received, in seconds, after API request sent. For reasoning models, this includes the 'thinking' time of the model before providing an answer. For models which do not support streaming, this represents time to receive the completion.
The AI poster boy, the ‘Chinese spy’ and Trump: how an affair may have harmed US security
Guardian
www.theguardian.com
2026-11-09 15:01:05
Jensen Huang’s close relationship with president means Nvidia CEO’s affair with woman alleged to be working for Beijing is a big deal A hand on the back, a kiss on the cheek; the footage of Alice Huang’s interaction with Jensen Huang in a Taipei venue last year does not seem particularly remarkable ...
A hand on the back, a kiss on the cheek; the
footage of Alice Huang’s interaction
with Jensen Huang in a Taipei venue last year does not seem particularly remarkable at first glance.
But the
Nvidia
chief executive’s revelation on Sunday that he had an affair with Ms Huang has given it new significance.
According to reports, his lover, who is not a relation, was not just an executive at an Nvidia customer. She was also an alleged Chinese spy.
Nvidia has now launched an independent investigation into reports that the boss of a cornerstone company in the global AI boom has been the target of a foreign intelligence effort.
“While the board has no reason to believe that either national security or Nvidia secrets were compromised, the board’s inquiry will examine all available information,” said the board.
Jensen Huang and Donald Trump shake hands at an ‘Investing in America’ event in Washington DC on 30 April 2025.
Photograph: Leah Millis/Reuters
Huang, 63, a poster boy of the AI boom in his trademark leather jacket, admitted there was “no excuse” for what he had done.
Aside from Huang’s dented personal reputation, what is the scale of the damage done to Nvidia and US national security?
The story started to emerge last year when the New York Times and Bloomberg raised questions about a Singapore-based buyer of Nvidia’s powerful chips, which have become the proverbial shovels in the AI gold rush. There were concerns that Megaspeed was flouting US restrictions on AI chip exports to
China
by diverting some Nvidia inventory to America’s arch AI rival. Nvidia and Megaspeed denied this.
Then last month came a further startling NYT report that Jensen Huang had formed a “close relationship” with Alice Huang, a Megaspeed executive, and that American officials believed she was a Chinese intelligence asset.
Donald Trump
had been told, but decided not to act on the information. It is now evident that the relationship was more than just close.
At the heart of the question of what China might have achieved through Alice Huang is the extremely close relationship between the CEO of the world’s second-most-valuable company and the president of the United States.
The New York Times
reported
on Monday that Nvidia appeared to have successfully leaned on the US commerce department to halt an investigation into potential chip smuggling on the part of Megaspeed. That pressure came through a Trump appointee, who allowed Nvidia to reach out about the case.
Responding to reports last year that it might have diverted Nvidia deliveries, Megaspeed said: “Megaspeed is a Singapore-based company, operating fully in compliance with all applicable laws, including US export control regulations.”
Trump has met frequently – at least seven times – with the head of Nvidia since the start of his second term. Huang has flown on Air Force One and
taken calls
from the president during public events.
Four of their meetings have touched on one of the most sensitive issues in US-China relationships: the controls that the US has put up around the export of the world’s most advanced AI chips, which are almost entirely sold by Nvidia.
Under the former president Joe Biden, the US put in place the Chips Act, a package of rules that introduced sweeping limitations on US tech companies and their overseas trading partners. These rules sought to control what semiconductor technologies US companies could sell to businesses based overseas – particularly those that might be put under pressure to transfer those technologies to China.
It also introduced strict licensing requirements that in turn limited what those partners could do with technology that they bought.
Huang gestures at an ‘Invest in Germany’ summit in Berlin, Germany on 19 October.
Photograph: Lisi Niesner/Reuters
For Nvidia, this was bad for business. China was one of the largest markets for its GPU chips – accounting for
roughly a quarter of its revenue
in the years between 2020 and 2022. When the Chips Act passed, the company started to sell downgraded versions of its premier chips to China – for
example
, the A800 and H800. Some of these were then banned, forcing Nvidia to scramble even more.
Under Trump, things changed. The president first invited Huang to the White House just six days after he was inaugurated, to discuss AI policy and chip
exports
. The two then met again in July and August of 2025. This was followed by victories for Huang – Trump allowed Nvidia to export
previously banned
chips to China. Nvidia agreed, in turn, to give the US government 15% of the sales revenue.
Experts said the deal would help Beijing compete “on the AI frontier”, in other words develop AI systems to rival those being produced by the likes of Anthropic and OpenAI.
Five months later, the tech boss appeared to win another startling concession, days after another meeting with Trump. The president
agreed
to allow the tech boss to export H200s – a far more powerful chip – to China, in exchange for 25% of the revenue.
“President Xi responded positively!” Trump wrote on Truth Social.
It is not unusual for large technology companies to lobby for their preferred policies in Washington; nor is it unusual for Trump to give access – and favourable deals – to men he likes.
But one more thing is now apparent – during this crucial year for his company, Huang was also intimately involved with a reported Chinese spy. The two were first
photographed
together in mid-2024. Five months after Trump took office is when the two were
filmed
at the Taipei restaurant. This would have been at the height of Huang’s lobbying push, shortly before Trump agreed to let Nvidia sell the H200s.
What could Alice Huang have gleaned – and passed on – during this affair? Plenty. Glimpses into US policy as it was being made, and to Trump’s own chaotic thinking on AI. And perhaps a world of tips beyond the confines of the White House.
Huang was a key figure for government after government as they formulated their AI policy. He met world leaders from South Korea to Saudi Arabia that year; he joined the then UK prime minister, Keir Starmer, on stage in London.
He would have known the details of the most important tech policy for many governments on Earth – their AI ambitions – because his company was often the only one that could make these ambitions happen. That is certainly true for Britain.
For all the intellectual feats of the systems powered by Nvidia technology, it is Huang’s human intelligence that is most valuable to America’s competitors.
Here comes the sun[light]:An ambient Daylight Clock with time and space controls
This analog clock has a 24-hour period, with midnight at the bottom and noon at the top. The lights around the circumference illuminate the current daylight span, based on the clock’s home latitude and longitude.
I also built a time-and-space control box:
What does this controller do?
The knob at the bottom controls time, in increments of one week per click.
1
The time knob in action:
The sudden
springs forward and falls back
daylight shifts are when Daylight Savings Time begins and ends.
The toggle on the side switches enables the control box’s time and space overrides; when this switch is off, the time knob controls the brightness of the edge lighting.
2
The vertical slider is a latitude selector, designed so that the world map—
Equal Earth projection
!—lines up with the
length of the slider.
3
The latitude slider in action:
The three-way “relative longitude” toggle at the top sets position within the current time zone—i.e., whether the daylight computation is based on the west, central, or east edge of the given timezone.
4
The longitude toggle in action:
Based on the relative longitude video, is it possible that this entire project was a way for me to illustrate the time zone grudge I’ve held for years? Not intentionally, but….
The grudge: I grew up in Michigan, on the west edge of the Eastern Time Zone (US); I later moved to the eastern side of that same zone, where the sun rises and sets
a full hour earlier
. This is distressing in the summer—by
rights, the sun ought to set
late
in the summer!—and borders on criminal in the winter: the sun sets just after 4pm on the solstice. 😱
Envy-driven development (EDD):
5
cceckman’s daylight-aware clock
My clock’s provenance is wholly attributable to my friend Charles and
his
very cool
daylight-aware clock
. In Charles’s words:
I’ve always lived at middle latitudes of 35-40 degrees. I notice the change in daylight / nighttime hours across the course of a year; in the winter, ending work at a reasonable hour still feels like “working into the night”.
I wanted to have a little passive reminder about how much daylight I am / am not getting. Not one tied to my computer or phone – something more ambient. Naturally, a reminder of the passage of time is… a clock!
When Charles started building his clock I was covetous, and knew I had to build my own.
We made a few different design choices—his time display is digital, mine analog; his daylight illuminates outward from the circumference of the clock, mine inward
6
—but we both put noon at the top,
7
and I used his daylight calculation code wholesale. Also his pair programming assistance to sleuth out a
mysterious failure mode!
8
9
Charles Eckman’s
Daylight-Aware Clock
simulator visualization
[
Source
]
Physical design and construction: Clock body
The clock movement is an
off-the-shelf
24-hour movement. You can
just
buy
these!
10
I designed the body of the clock and the body of the controller box in
Cuttle.xyz
, and cut the pieces on the laser-cutter at my local library’s free maker space(!).
11
I designed the clock to have a circumference of exactly 48 neopixels on an
Adafruit neopixel strip
, so that the lights would subdivide
nicely into the hours of the day.
The outer decoration is from the astronomical face of the astronomical clock of the
Zytglogge
, in Bern, Switzerland. I digitized a photo
of the Zytglogge, then cleaned it up and scaled it properly in Cuttle.
Astronomical clock from the Zytglogge tower in Bern, Switzerland.
Photo credit
Sandstein
, Public domain, via Wikimedia Commons.
Painting was…an experience.
I used wood glue to make the press-fit connections permanent.
I painted the clock with acrylic paint, and attached the outer decorated ring with Blu Tack so that I can easily remove it and swap it for a different decoration.
I used wood sealant on the front and acrylic paint on the sides.
I failed to make the box deep enough to fit the ensuing tangle of wires crammed inside, so it doesn’t sit completely flush against the wall. Ah well, can’t win ’em all.
Hardware design
The Daylight Clock runs off an
Adafruit Feather RP2040
microcontroller. The rest of the components are:
A
real-time clock (RTC) component
assembly, to maintain the current date and time even when the board isn’t powered, so that I don’t
have to hand-set it every time I plug in the clock
12
A two-way toggle to enable/disable switch between “daylight based on current time” vs “daylight based on control box settings”
A three-way toggle to switch between the different longitude locations (west, middle, east), and
Three LEDs to show that current longitude selection.
The microcontroller and all components live in the control box, except for the neopixels around the clock face, which are connected to the microcontroller via some hand-braided wires and a few connectors.The connectors are so that I
can easily change the distance between clock and control box, without doing any additional soldering. The neopixels are powered through the board, which plugs in via standard
wall wart
.
I programmed the Adafruit Feather with CircuitPython, relying heavily on the
asyncio
library.
asyncio
allowed me to separate
monitoring the state of the input controllers—“has the slider position changed? the toggle toggled? the knob turned?”—from re-computing each neopixel’s resultant color.
I ported the sunrise and sunset calculations from Charles’s
Rust implementation
of the
NOAA
solar calculator.
This project took a lot of calendar time, and a disproportionate amount of mental space.
Challenges:
Deciding what I wanted the clock frame to look like
Deciding how I wanted to decorate the clock face
Deciding how I wanted to decorate the outer ring around the clock’s face
Deciding that I was going to
:just-flag:
use a cardboard box for the controller…and then doing that, and discovering that I hated it and wanted to cut something out of wood
Purchasing pre-painted wood to speed up the cut/paint processes
Discovering that the library policies had changed so I couldn’t use their laser cutter on this wood
Attempting to use a different maker space and/or hire a local shop to cut this wood for me
Deciding to :just: use the default library wood and paint it myself afterwards
A series of painting mishaps with the decorative face that resulted in an unusable mess after accidentally using an oil-based ink over some acrylic
Recutting the face (…plus the wait time of signing up for a slot…)
Discovering that I’d glued the clock sides upside down (luckily the sizing still fit backwards, and I didn’t have to go re-cut everything again…)
Discovering that I’d installed the neopixel strip backwards (counterclockwise instead of clockwise)
Thankfully the result looks really cool, and works as intended, and I love having it on the wall.
Feel free to ask if you are building one and need more guidance at any step; I didn’t want to take the time (heh) to write a full tutorial, but I’m more than happy to assist retroactively.
Also, if you want to make one, but don’t want to deal with quite so many electronics:
You could skip the control box: The majority of the technical challenges I encountered—both design and implementation—came from the addition of the controls. A Daylight Clock sans control box would still be pretty cool.
You could use one of the Adafruit Feathers that is WiFi-enabled, and get the time via request, so you could skip setting up the RTC component.
If using a WiFi-enabled microcontroller, you could create a webpage-based control panel instead of the physical one, which would also be pretty cool!
Thanks to Charles! Also AF, for build [emotional] support.
Footnotes
Originally I was going to scan in increments of “day”, but after playing with it, “day” felt too short and required too many turns to see a difference, or to have a true understanding of how much time had passed. After
experimenting, “week” had the most pleasing connection between turning the knob and seeing a physical shift in daylight.
↩︎
Brightness is controlled by the time knob too, when the clock is in “explore time and space” mode:
The extreme contrast in all of these videos is because I turned the clock to full brightness for
drama
enhanced visibility, which resulted in some strange color autobalancing. The color in the photos is more
representative.
↩︎
Because the clock hands are not connected to the electronics, there’s no way for the clock hands to jump to a new time when a change in longitude crosses a time zone! Within a single time zone, however, there’s no need for the
clock hands to shift. The longitude toggle therefore sets the
relative
longitude position within the clock’s default time zone—west, central, east. This makes visible the daylight shift across those different
locations for the same
time
of day.
↩︎
I actually prefer the outward illumination of his to the inward illumination of mine, but when I started I didn’t know where I was going to hang my clock, or whether there’d be enough space around it on the wall to have a nice
effect. The inward illumination makes the result slightly more self-contained.
↩︎
It seems like the convention is for standard 24-hour analog clocks to place
midnight at the top of the circle
rather
than at the bottom—but it felt more right to me for “day” to be the top half of this clock: with noon at the top of the clock, it feels like the hour hand tracks the sun’s the progress across the sky. Which, it turns out in
hindsight, follows the
Astronomical Clock
convention! And there are
a lot
of cool astronomical clocks out there…
↩︎
I thought maybe I’d mucked up something in my translation of his Rust to my CircuitPython, but the issue turned out to be due to the specifics of datetime handling in
Python
vs CircuitPython; I’d gotten the
translation correct, but applied CircuitPython’s datetime incorrectly. An easy fix, once we found it. Programming: so fun. 🙄
↩︎
The real bug fixes are the friends we make along the way!
↩︎
One can also theoretically purchase phase-of-the-moon 28-day movements (!), although I haven’t managed it yet, as I’ve only seen factory-scale batches for sale and I’m not really interested in having 500 of them…
↩︎
The PR2040 doesn’t have Internet or Bluetooth connectivity, so I can’t :just: automatically grab the current time over an external connection. Thus, the RTC.
↩︎
USPS® ZIP Code Boundaries is a national ZIP Code™ map utilizing USPS delivery address and location information to ensure accurate boundaries. Temporal fluctuation is based on changing delivery distribution for new or changed delivery locations. Many industries, such as mapping, mailing, marketing, insurance, real estate, logistics, navigation, and transportation can benefit from access to the ZIP Code boundary data.
For example:
As the ground truth for ZIP Code boundaries, users can incorporate these polygons as joint features or correct existing ZIP Code data as changes are made.
As a tool for organizing and displaying demographic data, ZIP Codes serve as a support structure for real estate and insurance industries.
ZIP Codes can serve as a proxy for the delivery location groupings for optimized routing.
USPS® ZIP Code Boundaries - Internal
Four quarterly updates.
USPS® ZIP Code Boundaries - Enterprise
Four quarterly updates with limited distribution to subsidiaries and partner companies.
USPS® ZIP Code Boundaries - Publication
Four quarterly updates with limited publication.
Parking-app convenience fees in 312 U.S. cities (median $0.35 per session)
Most common fees: $0.35 (108 places), $0.45 (56 places), $0.30 (30 places).
Highest flat fee: $0.70 in Anchorage, AK.
15 places charge drivers no app fee.
The data covers 312 places in 43 states and DC; 13 rows have no published fee.
Parking app fees by app company
Per-session fees in places where the fee is published, by the company that runs the app. Sources are listed at the bottom of the page.
Parking app fees by place
Every place in the data, by state. The source column names where each fee comes from and when that page was last updated or checked. A city name links to its Park Graph parking page when there is one.
The fee in this report is paid by the driver, on top of your rate.
Park Graph charges a per-transaction software fee on the operator side and does not add a separate convenience fee on the driver.
Drivers scan the QR code on your sign and pay the rate you set, with no app to download. See
Park Graph pricing
for the fee on each plan, or compare Park Graph with the apps above:
Park Graph collected the per-session fee a driver pays to start a parking session by app in each U.S. place where an app company or the city publishes it: ParkMobile, PayByPhone, Passport, Flowbird, Park Smarter and city-branded apps run by those companies. Sources are the app companies' own help pages and official city pages. Where a company page and a city page disagree, the CSV's fee_notes column says so.
A place with no published fee keeps its row, shown here as Not published. Membership plans the app companies offer, and their prices, are in the CSV's membership columns. Every row was checked on
Nov 5, 2026
.
Cyber-attack on French supermarket freezers has geopolitical context
Guardian
www.theguardian.com
2026-11-09 14:40:45
‘Not particularly complex’ defrosting hack has been attributed to Iran, with presumption it is linked to others across Europe Iranian hackers like to send a message. In 2023 a state-backed group interrupted TV streaming services in the United Arab Emirates to broadcast a deepfake report on the war i...
In 2023 a state-backed group interrupted TV streaming services in the United Arab Emirates to broadcast a deepfake report on the war in Gaza. In the same year, hackers affiliated with Iran displayed the slogan “down with Israel” on the screens of
water-control equipment
made by an Israeli firm.
Now France has attributed
an attack on supermarket fridges
to hackers operating under the Islamic Revolutionary Guard Corps, a key branch of Iran’s military establishment.
There was no message this time, but the disruption made headlines around the world. Some refrigerators had their temperature turned up so high they caught fire. In the hours after the hack, supermarket employees dumped piles of perished meat and melted ice-cream into rubbish containers.
France’s foreign minister described it as an act of “unprecedented scale and unprecedented aggression” and promised “Europe-wide sanctions” would be imposed against those responsible.
An employee fills boxes of perished goods outside an Intermarche supermarket in Paris the day after the cyber-attack.
Photograph: Lucien Libert/Reuters
It follows attacks on industrial freezers at an Israeli food production plant in May and a wave of freezer malfunctions that spoiled food at US military bases in August that are now reportedly being treated as a suspected hack. Those attacks have not been officially attributed to Iran, but the French announcement is the first to implicate the state in this type of hack.
Rafe Pilling, a senior director at Sophos, a cybersecurity firm, said the relatively unsophisticated nature of the attack – hackers used default passwords to access fridge controls – was in line with Iranian capabilities. “The attacks themselves were not particularly complex,” he said.
Pilling said there was now a presumption the French attacks and a wave of rogue defrosting hacks
across Europe last week
were linked.
Hostile cyber operations against the west tend to come from a vexatious quartet of China, Russia, Iran and North Korea. All have different aims and characteristics: China has focused on industrial espionage and mass data gathering, Russia on disrupting enemy infrastructure and spreading disinformation, and North Korea on hacking crypto exchanges because it needs money. Iran, according to Pilling, wants to put a shot across the bow of its enemies.
Boxes of perished goods outside an Intermarche supermarket in Paris the day after the cyber-attack.
Photograph: Lucien Libert/Reuters
“In general Iran uses cyber-attacks to project power internationally and to signal their political displeasure with regional and international adversaries,” Pilling said.
The fridge hacks came as the UK’s national cybersecurity centre warned the country is
in the “foothills”
of a new level of cyber threat – and should expect a “huge rise” in the volume of incidents. The main concern is AI, a technology now capable of highlighting previously unforeseen flaws in IT systems and helping attackers plan and carry out attacks.
However, the underlying context of the fridge attacks is not AI but geopolitics. After all, the refrigeration system vulnerabilities were relatively easy to find and exploit. But a combination of groundbreaking technology and tense global relations makes for an alarming landscape.
France has said Iran was responsible for a massive cyber-attack on supermarket freezers and chiller cabinets that was described by its foreign minister as being an act of “unprecedented scale and unprecedented aggression”.
Jean-Noël Barrot said “Europe-wide sanctions” would be imposed against those responsible, adding that the attacks – which took control of digital thermostats to push temperatures up to above 50C – constituted “a major violation of the nation’s interests”.
At a press briefing during the G7 summit in Paris, he said: “Thanks to the remarkable efforts of government agencies, I am able to confirm that the Islamic Republic of Iran’s Revolutionary Guards are responsible for this attack.”
He said the Iranian ambassador had been summoned “to protest in the strongest possible terms against this extremely serious act.”
Swathes of French supermarkets were hit in the cyber-attacks on 11 and 12 October. Some were forced to throw away entire inventories of perishable food.
Similar incidents have been reported since, including on supermarket fridges in other European countries last week and on a French blood bank.
The Paris public prosecutor, Laure Beccuau, said on Monday that specialist investigators and government agencies had identified “a modus operandi” characteristic of the Iranian group Shahid Kaveh, a cyber warfare unit linked to the Islamic Revolutionary Guards Corps (IRGC).
This included “the use of Farsi and IP addresses traced back to devices located in Iran”, she said.
Beccuau said her office had opened a investigation against the head of Shahid Kaveh, his deputies and “others who will be identified” on charges of “fraudulent attacks on an automated data processing system committed as part of an organised crime ring and of causing damage dangerous to persons”.
She said the offences were “aggravated by the fact they were committed to serve a foreign power – in this case Iran”.
Gérôme Billois, a partner at the cybersecurity and technology company Wavestone, said Shahid Kaveh had been active since 2020 and was known to have carried out cyber-attacks mostly on water distribution systems in the US.
“Two countries are known for this kind of attack: Iran and Russia. Given that recent cyber-attacks on supermarkets and the blood bank in France concerned freezers it is reasonable to think Iran is directly linked to both,” he said,
“For the moment they are attacking easy equipment but as a state group that has the means, the determination and the time, we should be prepared to see attacks on other systems like water or electricity.”
Thousands of tons of food had to be dumped and in some stores the extreme temperature rise sparked fires, triggering sprinklers and water damage.
Hackers last week
accessed control systems at cold stores stocking blood products.
The French blood service (EFS) said temperature and defrosting thresholds and been raised to “very high level” but that technicians had been alerted by alarm systems allowing them to disconnect the cold stores before the products were destroyed. It is not clear whether the two attacks are linked.
The following day retailers in 11 European countries including the UK, Belgium, Estonia, Ireland, Finland, Luxembourg, the Netherlands and Sweden reported problems with refrigeration systems.
A regional branch of France’s Crédit Mutuel bank also reported losing more than €100m in a cyber-attack on Friday. The bank said it had recuperated some of the money.
The European Commission did not immediately comment on the French foreign minister’s statement. Kaja Kallas, the head of foreign affairs for the EU said: “We have the foreign affairs council next Monday, so we will have the opportunity to discuss this. These cyber incidents occurring in Europe, if attributed [to Iran], also call for a strong response on our part.”
In a significant decision this year, the EU
designated the IRGC a terrorist organisation
, ending years of division over the issue. The designation became possible after France dropped its long-held opposition, having previously feared it would damage diplomatic channels and the interests of French nationals in Iran.
U.S. Supreme Court Deals Final Blow to Corporate Human Rights Accountability
Electronic Frontier Foundation
www.eff.org
2026-11-09 14:29:03
For the past two decades, the U.S. Supreme Court has been slowly weakening the Alien Tort Statute (ATS), a key human rights law that allows foreign nationals to sue persons or entities in civil court for harms resulting from violations of international law. The court’s recent ruling in Cisco Systems...
For the past two decades, the U.S. Supreme Court has been slowly
weakening the Alien Tort Statute (ATS)
, a key human rights law that allows foreign nationals to sue persons or entities in civil court for harms resulting from violations of
international law
. The court’s
recent ruling
in
Cisco Systems, Inc. v. Doe I
dealt the law a final blow, foreclosing—absent new legislation by Congress—any future ability by plaintiffs to use the law to hold technology companies accountable for aiding and abetting human rights abuses. EFF
filed multiple amicus briefs in the case
, including most recently in the Supreme Court.
The Supreme Court Rejected New Causes of Action Under the ATS
The ATS was passed by the very first Congress in 1789 and in
just a few words
gives U.S. federal courts jurisdiction to hear civil claims brought by foreign nationals against defendants who violated “the law of nations or a treaty of the United States." There has been a longstanding question about what counts as a valid civil claim under “the law of nations.”
In
Sosa v. Alvarez-Machain
(2004), the Supreme Court had noted three historical international law claims that the First Congress likely had in mind: violation of
safe conducts
, infringement of the rights of ambassadors, and piracy, collectively known as the
Blackstone Three
.
The
Sosa
court also held that federal courts may recognize
other
substantive causes of action under the ATS if they reflect international norms that are “specific, universal, and obligatory,” stating that this “door is still ajar subject to vigilant doorkeeping, and thus open to a narrow class of international norms today.”
Thus, the
Sosa
court recognized that the ATS could be used to bring claims related to historical violations of international law as well as select newer claims reflecting modern concepts of human rights.
In
Cisco
, the Supreme Court overruled the second
Sosa
holding. The majority held that the current case, a technology company aiding and abetting torture and other human rights abuses, was beyond the scope of the original three ATS claims and it was not for the court to create new ways of enforcing international law. The court said:
[W]e close the door that
Sosa
cracked to judicially created ATS liability. We do not disturb
Sosa
’s holding that the ATS is a jurisdictional statute; nor do we revisit its assumption that causes of action are available for torts corresponding to the Blackstone three.
We conclude only that
Sosa
was overly optimistic in its prediction that there might be a narrow class of cases in which courts may create ATS actions without infringing on the prerogatives of the political branches. In truth, this class is a null set.
What result for this case? Cisco argues that the Ninth Circuit erred in holding that aiding-and-abetting liability exists under the ATS for the torts alleged by the plaintiffs. Cisco is correct.
Courts cannot create new rights of action to remedy violations of international law, so there is necessarily no liability for aiding and abetting such violations.
Plaintiffs’ ATS claims against Cisco must be dismissed.
Cisco is Off the Hook for Aiding and Abetting Horrific Human Rights Abuses
The Supreme Court’s ending of the plaintiffs’ case against Cisco is hugely disappointing given that the case has been going on since 2011 and the
Ninth Circuit in 2023
allowed the case to move forward in an excellent and well-reasoned opinion. The court held, in part:
We conclude that Plaintiffs’ allegations, accepted as true, are sufficient to state a plausible claim that Cisco provided essential technical assistance to the
douzheng
[
violent struggle
]
of Falun Gong with
awareness that the international law violations of torture, arbitrary detention, disappearance, and extrajudicial killing were substantially likely to take place
.
The plaintiffs sued Cisco for the company’s role in building and deploying the “Golden Shield,” also referred to as “The Great Firewall of China”—a vast surveillance system that Cisco began building in the late 1990s and that the company customized to enable the Chinese government to target disfavored minorities, including members of the Falun Gong religion.
The
thirteen plaintiffs
—Falun Gong practitioners—alleged arrest, detention, and torture, including of themselves and family members, at least one of whom died by beating while being detained. The allegations were horrific: the plaintiffs were placed in forced labor camps, beaten with steel rods, shocked with electric batons, and endured sleep deprivation and violent force-feeding.
Importantly, the plaintiffs also alleged that their private emails, text messages, and other information—intercepted by the Golden Shield—were shown to them and used as part of their torture and forced conversion sessions, which included threats to their family members and others who had communicated with them.
And now, Cisco is off the hook for all of this.
Congress Must Act to Hold American Tech Companies Accountable for Aiding and Abetting Human Rights Abuses
As we argued in our
amicus brief
to the Supreme Court, a robust federal statute is necessary given that voluntary and informal mechanisms of corporate human rights accountability are inadequate.
The plaintiffs filed their lawsuit in 2011. The following year, in 2012, Cisco first published its Global Human Rights Policy. Since then, the company has never provided redress to the plaintiffs, despite its
currently operative human rights policy
stating:
Where we have identified that we have
caused or contributed to an adverse human rights impact
, we are committed to providing access to and cooperating in remediation for affected individuals, workers, and communities through legitimate processes.
What’s more, the Associated Press conducted an
extensive 2025 investigation
, which recently won the
Pulitzer Prize
, further mapping Cisco’s and other American tech companies’ involvement in creating China’s surveillance state over the past three decades. When questioned by the AP reporters, the companies dismissed any notion of human rights obligations and simply “said they adhere to relevant
export controls
, laws and regulations where they operate.”
In short, Cisco’s commitment to human rights is a fiction.
Given that the U.S. Supreme Court has effectively read the ATS into non-existence, Congress must now step up. While there might be
other avenues for redress
including under state law, there must also be a comprehensive federal human rights law allowing any plaintiff to hold American companies—especially technology companies—accountable for aiding and abetting human rights abuses, with knowledge or intent that those abuses would occur, and whether the victims suffered those abuses in the U.S. or in foreign countries.
[T]he Justices should ask whether affording such immunity in
Cisco
would implicitly signal to U.S. companies that they could not be held liable for assisting the
U.S. government
in committing gross violations. Such violations could include constructing a mass surveillance system that may be used to surveil, persecute, retaliate against, and punish real and perceived opponents and constructing systems that autonomously commit war crimes.
American companies should not have a free pass to build out surveillance states (or other technologically sophisticated systems) that not only violate personal privacy or facilitate censorship, but that can also lead to real-world physical violence and even death.
Impeachment Vote Looms for Hegseth
Intercept
theintercept.com
2026-11-09 14:15:52
“I think there’s a high chance that it will be successful,” a member of Congress told The Intercept.
The post Impeachment Vote Looms for Hegseth appeared first on The Intercept....
Calls for self-styled
War Secretary Pete Hegseth’s ouster have grown louder on Capitol Hill as a possible impeachment vote looms this week. At the same time, Hegseth has shored up support at the White House and among MAGA faithful, according to dismayed Pentagon officials.
Rep. Thomas Massie, R-Ky.,
introduced
articles of impeachment on the House floor Monday afternoon, charging Hegseth with “high crimes and misdemeanors.” Top Democrats have indicated a desire to join
Massie’s effort
since their
midterm election landslide
. “I am a hard yes on the Hegseth resolution,” Rep. Hakeem Jeffries of New York, who is poised to be the next House speaker,
told
ABC’s “This Week” on Sunday. Rep. James Comer, R-Ky., the current House Oversight Committee chair, told Newsmax on Friday it is “very possible” the votes exist to impeach Hegseth.
Rep. Yassamin Ansari, D-Ariz., one of the leading voices for Hegseth’s impeachment, agreed. “I think there’s a high chance that it will be successful,” she told The Intercept of Massie’s effort. In April, Ansari filed six
articles of impeachment
against Hegseth, including violations of the law of armed conflict and targeting of civilians, abuse of power, and obstructing congressional oversight. She
called for a floor vote
on his ouster this week.
“Hegseth has demonstrated that he is wholly incompetent. He’s committed what I believe to be war crimes in Iran and the Caribbean and he is ill-equipped for the job,” said Ansari. “My reason for introducing the articles of impeachment back in April had a lot to do with his conduct and the war crimes in Iran, including the bombing of the children’s school. But it’s refreshing to see that since then, more and more Republicans are also recognizing that his leadership has failed and that he’s putting all of us in danger.”
In the wake of a devastating
election rout
of the GOP that handed Democrats firm control of the House and the Senate, Congress begins a five-week lame-duck session on Monday. With dozens of Republican lawmakers ending their tenure in the House, it’s unclear how many will even show up for votes. Such absences, as well as outright defections in the GOP ranks, make it increasingly likely that Massie’s measure will pass, staffers on Capitol Hill told The Intercept.
On Sunday, GOP Rep. French Hill of Arkansas left open the possibility of backing the measure. “I want to hear the debate on it to see if it merits impeachment versus some other disciplinary action or action by the president,” he
said
on CBS News’s “Face the Nation.” Outgoing House speaker Mike Johnson, R-La., did not answer when asked by Politico if GOP leaders would
whip
the Hegseth impeachment vote. House leaders must take up the matter within two legislative days; opponents could table the resolution or refer it to committee instead of voting directly on impeachment.
After narrowly being confirmed by the Senate, which required Vice President JD Vance to break a 50-50 tie, Hegseth’s tenure has been marked by fiascos and failures beginning with
Signal-gate
, the sharing of secret war plans in a chat group with a journalist. In that case, according to the Pentagon’s own inspector general, “Hegseth violated security protocols and endangered U.S. troops and objectives.” Since then, Hegseth has been under perpetual fire for the unsuccessful Iran war in 2026, specifically a strike on an
elementary school
in Minab, Iran, that killed more than 150 civilians, most of them
children
. He faces pressure over his campaign of
extrajudicial killings
in attacks on so-called drug boats in the waters off Latin America. And questions continue to mount about his
purge of top military leaders
— many of them
women
and
minorities
.
“The fact that many career officials from the department have left citing his leadership, I think, is very telling,” said Ansari. Last week,
The Intercept published
an exposé quoting six current and former defense officials who currently serve or served under Hegseth and called for his ouster. “He is conducting state terrorism. He is 100 percent a war criminal. He needs to be prosecuted,” said Wes J. Bryant, one of those officials and, until last year, a senior targeting adviser and policy analyst at the Pentagon who was pushed out of his job for blowing the whistle on Hegseth’s efforts to
undermine protections for civilians
.
As calls for his ouster have grown louder, Hegseth launched a
desperate bid
to whip up support at the White House, including a nakedly obsequious video seeking Trump’s support that he
posted on X
. It was accompanied by a coordinated campaign of social media posts by Pentagon underlings tying Hegseth’s fortunes to the president with the text “
STAND. FIGHT. DEFEND THE REPUBLIC
.”
Hegseth’s hand was strengthened on Friday when Trump’s chief of staff Susie Wiles stepped down and was replaced by his
hard-line
domestic policy adviser, raging xenophobe, and illegal boat strike proponent Stephen Miller, according to two Pentagon officials. The embattled war chief was quick to offer “
Huge CONGRATS
” to Miller on X, and posted a
photo
of himself alongside Trump’s new consigliere. The same coterie of Hegseth
devotees
at the Pentagon
followed
with similar posts
featuring Miller
.
Wiles had reportedly soured on Hegseth, blaming his woeful management of the Iran war for flagging Republican fortunes. A senior Trump administration official also
told MS Now
that Miller and Hegseth “have been extremely close since the beginning of the administration.”
If the House impeaches Hegseth, removing him from office would require a two-thirds vote in the Senate — a high bar, even when Democrats take control of the chamber in January. Neither of the two Cabinet secretaries impeached by the House — William Belknap, the secretary of war, in 1876; and Alejandro Mayorkas, the secretary of homeland security, in 2024 — were convicted by the Senate.
An Armed Services Committee staffer who spoke with The Intercept was skeptical that Senate Majority Leader John Thune, R-S.D., would bring the measure to a vote. Ansari held out hope. “Thune is very much aligned in terms of his view that Hegseth is not fit for the job,” she said, adding, “I do think that the resounding victories on Tuesday night will impact the way Republicans operate moving forward.”
Sen. Thom Tillis, R-N.C., who is retiring at the end of the year, has said for months that he regrets his vote to confirm Hegseth and rebuked the war chief for his desperate video address aimed at Trump. “[C]abinet secretaries shouldn’t be wasting taxpayer dollars on campaign style videos. Kristi Noem learned that the hard way,” he
wrote
on X on Friday, also laying into Hegseth for “the incompetence you’ve displayed, the bad advice you’ve given to president, and your shameful and embarrassing episodes from firing our top generals to texting war plans to reporters.” Tillis had also previously said Hegseth “
needs to go
.”
Massie suggested his impeachment resolution is the legislative equivalent of a mercy killing, calling it “
a much gentler version
” of what Democrats will do when they take control of Congress in January. Congressional committees have broad investigative powers, and Ansari said that if Hegseth survives this year’s impeachment push, there were “many ways” for Democrats to hold him accountable in the next session, specifically compelling him to testify before the American people. “I would be surprised to see him last the next two years in this administration,” she told The Intercept. “I think that he is not only one of the most incompetent members of the administration, but also the most unpopular — and it’s on a bipartisan basis. So the pressure will continue to grow for there to be some change at the Pentagon.”
Trump expressed mild “confidence” in Hegseth in a “60 Minutes” interview taped on Friday, touting the U.S. victory over Venezuela, but stopped short of praising his Pentagon chief for it. Asked if he credited Hegseth for what he considers a major victory, Trump replied: “No, but he was a part of it.” On Saturday, Trump wrote on Truth Social that calls for impeachment of administration officials amounted to “
extortion at the highest level
” and ordered the Justice Department to investigate those making the push.
Attorney General Todd Blanche, himself a
potential target
of impeachment,
said
on Sunday that the Justice Department would represent Hegseth during any impeachment proceedings. He added that he “would be very worried” if he were a Democrat threatening to investigate administration officials. Asked if he considered those threats to be a crime, Blanche said, “It depends on what’s said. So yes, there could be.”
The White House did not respond to questions about Trump’s support for Hegseth.
Update: November 9, 2026, 2:50 p.m. ET
The article has been updated to note that Rep. Thomas Massie, R-Ky., introduced articles of impeachment against War Secretary Pete Hegseth on Monday afternoon.
We’ve upgraded Claude Fable and Claude Mythos—models that are designed to tackle the most daunting technical challenges.
Claude Fable 5.2 and Claude Mythos 5.2 show improvements in areas like coding, reasoning, and vision. During prerelease testing they’ve helped our engineers complete otherwise-infeasible software migrations, designed three working electronic devices from scratch, solved two open problems in the physics of black holes, made substantial progress on robotics evaluations, and formalized the proof of Fermat’s Last Theorem in 30 hours—among many other applications we’ll discuss below.
Claude Fable and Claude Mythos are the same underlying model. Fable has strong cybersecurity and biology safeguards to guard against misuse, which allows us to make it available to all users. Organizations pursuing beneficial applications in cybersecurity or biomedical research can apply for access to Mythos through our recently expanded
Life Sciences
and
Cyber
Verification Programs.
Testers have found that Fable 5.2 and Mythos 5.2 communicate more clearly than past Fable and Mythos models. They generate outputs up to 30% faster than Claude Fable 5.1 and Claude Mythos 5.1, and they’re available at a lower price: $8 per million input tokens and $40 per million output tokens.
Fable 5.2 and Mythos 5.2 also come with an optional fast mode, which speeds up token generation by up to 2.5 times. Fast mode is available for $16 per million input tokens and $80 per million output tokens.
Safety and alignment.
To help ensure safety and alignment keep step with growing model capabilities, we ran extensive prerelease safety testing on the model that underlies Fable 5.2 and Mythos 5.2. This included developing novel evaluations that give deeper insight into specific concerning behaviors like sandbox escapes. We believe high-stakes risks from misalignment remain low, and the model performed as well as, or better than, our recent models on most alignment measures. Fable 5.2’s cyber and biology safeguards are as robust as those of Fable 5.1’s but produce fewer unnecessary blocks, and we have implemented our strongest-ever protections against distillation attacks.
When to use Claude Fable 5.2 and Mythos 5.2.
Fable and Mythos are best for the most ambitious, open-ended technical work. For most coding and knowledge tasks, we recommend that users start with Claude Opus 5.5, our strongest daily driver, and then switch to a different model as required, depending on the scope and complexity of their work—upward to Fable or Mythos, or downward to Claude Sonnet 5.5 or Claude Haiku 5.5. Fable 5.2 can also play the role of
Advisor
(where Haiku, Sonnet, or Opus models consult it to help solve harder problems) or
Orchestrator
(where it delegates simpler tasks to smaller models).
Evaluating Claude Fable 5.2 and Mythos 5.2
Benchmark performance.
The benchmarks table below shows that Claude Fable 5.2 and Mythos 5.2 are a step above Opus 5.5 in almost all the capabilities we evaluated:
Effort and efficiency.
On Medium effort (the default in Claude apps and Claude Code), Fable 5.2 can accomplish challenging tasks with fewer tokens than Fable 5.1. In early testing on the FrontierCode 2.0 evaluation, Fable 5.2 at High effort scored about level with Opus 5.5 at Max effort, for roughly half the cost per task. At Xhigh effort, it also scored the highest of any released model tested.
Coding
Over 90% of the changes merged into Anthropic’s core codebase are now written by Claude (with human guidance). We’ve used Fable 5.2 to fix stubborn bugs in minutes, optimize performance across all of our services, and complete high-value software projects that would otherwise have been too slow or too costly to attempt. A team of agents running an earlier version of Fable 5.2 migrated a critical production service from Python to Rust—the service is now more efficient, more reliable, and starts about 26 times faster. We’ve found that Fable 5.2 exercises strong engineering judgement and can produce high-quality results from even ambiguous requests.
As an experiment, one Anthropic engineer gave Fable 5.2 the task of designing a prototype operating system. Starting from an empty folder, the model coordinated over 1,000 subagents, working around the clock for eight days writing, testing, and reviewing code. It produced a working operating system that boots on a laptop, with its own core that runs the machine, drivers for the disk, keyboard, and network, permanent file storage, windows, a login screen, an installer, and built-in Claude functionality (see the video below).
Early testers have been impressed at how successfully Fable 5.2’s coding skills can be applied to a wide range of tasks:
Cybersecurity
Claude Mythos 5.2 is our most capable model for cybersecurity engineering. It catches more vulnerabilities than our previous models, and is better at reproducing and fixing them (note that Claude Fable 5.2’s safeguards will block most cybersecurity-related tasks). A security company found that one in six confirmed bugs found by Claude Mythos 5.2 were missed by all of the other frontier models they tested. On our internal evaluation, CVE Rediscovery,¹ Claude Mythos 5.2 found 10.2% more vulnerabilities than Claude Opus 5.5 and 14.4% more than Claude Mythos 5.1. Claude Mythos 5.2 also shows better judgement and calibration—one tester found that previous models had overstated the seriousness of about one in twenty findings, whereas Claude Mythos 5.2 hadn’t overstated any.²
Claude Mythos 5.2’s cyber capabilities are accessible through our
Cyber Verification Program
, which we’re continuing to expand and improve. Claude Enterprise customers (even if they aren’t members of the Cyber Verification Program) can access
Claude Security
, which scans codebases for vulnerabilities using our most capable models—which now includes Claude Mythos 5.2.
A recent update to Claude Security
helps it watch repositories as code is updated, track any findings to ensure they’re fixed, learn from additional context, and connect to a user’s tools through an API and MCP.
Science and engineering
Important tasks in science, engineering, and mathematics increasingly depend on coding: analyzing data, modeling molecules, designing parts, and controlling instruments are all done through software. Below, we discuss how Claude Fable 5.2 and Claude Mythos 5.2 have helped researchers make progress on difficult problems in these areas.
Theoretical physics
Claude Fable 5.2 solved two open problems in theoretical physics. Both concern black holes, and the effort to unite the two linchpin theories of modern physics, relativity, and quantum mechanics.
Both of Claude’s results rely on holographic duality, the idea that certain universes containing gravity can be precisely described by a quantum theory containing no gravity at all. In the first problem, physicists in 1983 had shown that as these universes heat up, black holes form abruptly, like water boiling; but their method worked only in large universes that were big enough for relativity to apply. A calculation to determine whether the same was true in very small universes, where only the quantum description can be used, was laid out in 2003 but was too laborious to complete. Fable 5.2, working largely autonomously, completed it and found the transition is abrupt there, too. In the second problem, Fable 5.2 found the exact limit of a technique physicists have used for more than 15 years to rule out candidate theories of quantum gravity in a simplified universe. Read more about these results in their respective preprints,
here
and
here
.
Protein folding
Adeno-associated viruses are small, harmless viruses whose protein shell, the
capsid
, can be used to deliver gene therapies. The protein structure of the capsid is important—for example, it affects whether the therapy will be blocked by a patient’s immune system—but it’s also highly complex. Existing protein-folding models like AlphaFold can predict individual proteins, but a capsid is built from dozens of them. Building on two open-source protein-folding models, Claude Mythos 5.2 found a novel way to accurately predict a whole capsid’s structure. It wrote code that ran these models on overlapping groups of protein chains, and used the information on the known symmetries of the capsid to merge them together.
Claude’s method worked across several capsids, both natural and engineered (in our tests, it accurately modeled 28 of the 34 it attempted)³. Three computational biologists shared the following reflections on how Claude’s skills could be used to speed up their research into gene therapies:
Mathematics
Mathematical formalization.
Formalization is the process of translating a mathematical proof into a language that a computer can check step by step. It can help human mathematicians gain confidence in results without having to check them by hand (this matters even more when AI models generate results that are hard for humans to verify). Because formalization is such a laborious process, if AI could assist with it, mathematicians could spend more time exploring novel ideas.
Our first
formalization of Fermat’s Last Theorem
, performed by an unreleased research version of Claude, took 11 days. It relied on a purpose-built harness along with guidance from a human researcher. By contrast, a team of 1,000 Fable 5.2 agents fully formalized the theorem in just 30 hours, with minimal human intervention. Fable 5.2 started from minimal prompts, built its own ways to coordinate, and used no mathematical references, only a list of intermediate theorem statements to score progress. It needed one-third of the action tokens as our first formalization and produced a proof seven times shorter. As can be seen in the figure below, Opus 5.5 (with the same 1,000-agent setup) completed only 26% of the formalization in 18 hours, and barely made any more progress after 30.
Many of AI’s potential benefits—for example in speeding up laboratory research—depend on it being able to act in the physical world. Claude Fable 5.2 continues our models’ trend of
increasing usefulness
in the
real world
, showing promising results on tasks such as designing hardware devices and substantial advances in controlling physical robots.
Hardware engineering.
We tested Fable 5.2’s skills in hardware engineering, asking it in a one-paragraph prompt to design and produce three working, electronic devices with their own circuit boards, 3D-printed enclosures, and software. The devices, pictured below, were a home voice-assistant hub, a USB speakerphone, and a handheld virtual pet. We collaborated on this project with
Diode
, a company that designs and manufactures circuit boards.
Claude wrote its own specifications, selected available electronic components from US distributors, routed each device’s four-layer circuit board, modeled the enclosures with computer-aided design, and programmed the devices’ software. Each board was ready for manufacturing in under a day, with minimal human input. Once Diode had built the boards, Claude guided the company’s engineers through the testing and assembly of the devices. All three devices worked without needing any electrical modifications. Read more about Claude’s hardware engineering skills
here
.
Robotics.
Compared with earlier Claude models, Fable 5.2 shows substantially improved skills in controlling physical robots—even for robotics tasks on which it has never explicitly been trained. The video below shows robots controlled by Fable 5.2 completing a variety of tasks including solving a puzzle cube, unscrewing a bottle cap, and drawing a picture of a robot. On the public
RoboDojo
benchmark, which tests how AIs can control a simulated two-arm robot from camera images, Fable 5.2 outperformed other frontier models that were run on the same harness as well as most AI systems built specifically to control robots.
Research and analysis
Early testers using Claude Fable 5.2 for research and analysis tasks found that it can handle more ambiguous, data-heavy tasks than previous models and has better judgement on ambiguous tasks—particularly those that require abstract reasoning and design. Proprietary trading firm Jump Trading tested Fable 5.2 on proxy evaluations that resemble some of its quantitative research tasks, embedding it in a harness similar to the one the firm uses for its own research. In one run, Fable 5.2 effectively played all the necessary roles: code-writer, coordinator, planner, and job-submitter. Previous models had required substantial investments of time to manually rebalance roles to accommodate different models’ strengths and weaknesses.
Other testers from research and analysis organizations sent us the following statements on their experiences with Fable 5.2:
Safety and alignment
No single test can tell us how a highly capable model will behave once it’s deployed, so we rely on many different tests and many different types of evidence before release. For the model underlying Claude Fable 5.2 and Claude Mythos 5.2, our predeployment safety work included alignment training and testing, newly designed evaluations on the model’s propensity to take unhelpful actions, building stronger safeguards against misuse, and scaling up our behavioral monitoring. The model was also tested before release by external evaluators, including the
UK AI Security Institute
,
Frontier Design
, and
METR
. See the
Claude Fable 5.2 and Mythos 5.2 System Card
for a summary of their reports⁴ and for a full description of our own safety and capabilities testing.
Alignment testing
We ran a suite of evaluations for how well-aligned Claude Fable 5.2 and Claude Mythos 5.2 are in behavioral terms, testing how often they behave in unintended and potentially unsafe ways. Weighing everything we’ve seen across a range of evaluations, we’ve assessed the risk of these models behaving in unsafe ways in high-stakes situations to be low (as with our other recent models).
We tested Claude Mythos 5.2 (the same underlying model as Fable 5.2 without certain cybersecurity or biology safeguards), on our automated behavioral audit, which tests how a model behaves across approximately 1,900 scenarios. Claude Mythos 5.2 performed as well as, or better than, Opus 5.5, Sonnet 5.5, and Claude Mythos 5.1 on most measures. For example, it scored better than all three on most measures that involve misleading users. Hallucinating inputs, falsely claiming to have completed a task, omitting important information, and failing to disclose bad or lazy work were all lower in Claude Mythos 5.2.⁵
We paid particular attention during our testing to behaviors that contributed to recent notable cybersecurity and alignment incidents. For example, we found that Claude Mythos 5.2 has a lower propensity than Opus 5.5, Sonnet 5.5, and Mythos 5.1 to engage in biased or motivated reasoning (such reasoning might mean it “explains away” evidence that it isn’t in a simulation and thus take actions without a realistic understanding of the consequences).
We ran multiple different evaluations to test the model’s tendency to attempt escaping its sandbox. In two evaluations we’d used previously, Claude Mythos 5.2 made substantially fewer attempts at sandbox escape than any other model we’ve tested. In a dedicated evaluation—an adversarial experiment including over 1,800 scenarios, most of which could not be solved without escaping a sandbox, and where the sandbox has a deliberate weakness—Claude Mythos 5.2 made use of credentials or files that we had placed outside its sandbox in 3.1% of scenarios, about as often as Opus 5.5 (3.3%), less often than Sonnet 5.5 (5.1%), and well below previous iterations of Claude Mythos (5 and 5.1, which scored 39% and 21% respectively). We found that other techniques, such as describing the sandbox and adding tools to report weaknesses, reduced Claude Mythos 5.2’s escape attempts even further. On other measures—one, for example, involving taking harmful actions after erroneously concluding it was in a simulation—Claude Mythos 5.2 scored slightly worse than Opus 5.5, and about level with Claude Mythos 5.1.
The problem of building evaluations that reliably catch every failure before a model is deployed remains unsolved. The complexities of evaluating highly capable models often muddy the picture—for example, Claude Mythos 5.2 and Fable 5.2 each voice suspicion that they are being evaluated more often than any of our recent models, which challenges our ability to assess how they will act in real-world settings. As these settings expand and capabilities increase with future models, we expect this challenge to grow. That is why we do not rely on these evaluations alone to provide a holistic picture of safety: we draw on monitoring during training, reviews of transcripts from internal use, testing by external evaluators, and interpretability techniques for examining what is happening inside the model. We are also working to make our evaluations more realistic and to better understand what they miss.
Safeguards
Cybersecurity and biology safeguards.
Consistent with previous Claude Fable models, Fable 5.2 comes with safety classifiers that block high-risk cyber activities including penetration testing, exploit generation, and binary-based vulnerability, as well as most tasks in research biology. Where a query is blocked, users will instead receive a response from Opus 4.8 for cybersecurity and Opus 5 for biology. Since the release of Claude Fable 5.1, we have continued to reduce false positives for our safety classifiers. Based on early testing across claude.ai, Claude Code, and Cowork, we observed about 55% fewer blocks with Fable 5.2 compared with Fable 5.1—about 60% fewer in cybersecurity and 40% fewer in biology. Claude Mythos 5.2 is available to vetted organizations that work in these dual use areas.
AI research and development.
The model that underlies Claude Fable 5.2 and Claude Mythos 5.2 is a step forward in general capabilities. However, during the model’s training, we took steps to limit advances in the specific research capabilities that could most directly accelerate AI development. Thus, in relevant areas, including accelerator kernel optimization and improving large language model architectures, Fable 5.2 and Claude Mythos 5.2 perform at about the level of Opus 5.5. Importantly, we ensured that the training changes did
not
affect related capabilities like agentic coding, hardware development, and traditional AI or machine learning research (including interpretability research). We do not alter these capabilities as the model is being served to users (that is, at inference time). As described in Section 1.5 of the
system card
and similarly to previous models, Fable 5.2 and Claude Mythos 5.2 also include transparent fallbacks to Opus 5 for a small set of topics in this domain, including kernel development on certain nonstandard accelerators.
Anti-distillation.
Distillation, where a model is trained on the outputs of a more advanced one to extract the advanced model’s capabilities, occurs illicitly on an industrial scale, often involving thousands of fake Claude accounts. Since distillation allows for advanced capabilities to be released without the safeguards we’ve built into Claude, it creates safety and national security risks (see our
September 2026 threat intelligence report
for details on illicit distillation activity we’ve detected and disrupted so far). Fable 5.2 has the strongest protections against distillation of any model we’ve released; it uses the techniques we described in a
recent report
, which have reduced the data harvested by distillers by 90% to 99%.
We are also expanding the rollout of an API feature that helps guard against illicit distillation:
preserved thinking
now applies to all accounts. Preserved thinking prevents distillers from editing Claude’s prior context in an attempt to extract its reasoning (developers can refer to our
preserved thinking docs
to learn how to update integrations with new API features).
Data privacy and Enterprise Frontier Safeguards
Some more complex forms of AI model misuse can be detected only when observing patterns across multiple requests. For this reason, powerful models like Claude Fable 5.2 and Claude Mythos 5.2
rely on
safeguards that monitor a window of usage data (as opposed to individual responses). With
Enterprise Frontier Safeguards
, automated safety monitoring is run on prompts and responses that are stored in a customer’s infrastructure, making it compatible with zero data retention (ZDR). Enterprise Frontier Safeguards is now in private beta with customers like Bridgewater, Salesforce, and Stripe.
Enterprise customers can request access to Enterprise Frontier Safeguards by contacting their account team or by completing
this form
. Eligible customers can continue using Claude Fable 5.2 and Claude Mythos 5.2 with zero data retention before implementing safety monitoring with EFS. For other customers, we have 30-day retention for safety monitoring.
Availability
Claude Fable 5.2 is available today on all platforms, including Amazon Web Services, Google Cloud, and Microsoft Azure. Developers can
get started
with
claude-fable-5-2
on the Claude Platform.
This week, we’re giving subscribers on eligible paid plans extra Fable usage. Plans and seats that include Fable models get one to three Fable resets based on how long they’ve subscribed, and Fable is included for up to 50% of weekly usage limits for Pro plans and standard seats on the Team plan. Learn more about the Fable 5.2 launch promotion
here
.
Fast mode for Claude Fable 5.2 and Claude Mythos 5.2 is available on Claude Code, the Claude Platform, Claude Models on Google Cloud (Anthropic managed and Google managed), and Microsoft Foundry (Anthropic hosted). Note that access to Claude Mythos fast mode is available only to organizations who are part of our Verification Programs.
Show HN: Someone Was Here – Find out who used your Mac while you were away
Your Mac takes a photo of anyone who uses it while you're away, and sends it to your phone.
Free iPhone app included. Instant alerts to your phone are a $4.99 one-time purchase.
Free on the Mac App Store, with a free iPhone app. Instant alerts to your phone are a $4.99 one-time purchase.
When someone sits down, it takes their photo.
Someone uses your Mac after it's been idle, tries the lock screen, or unlocks it. A second later there's a photo of them, with the time, how they got in, and how long they stayed.
When it's you, it stays quiet.
It learns your face in a two-minute setup with a few head turns, and checks every photo right on your Mac. You won't get an alert about yourself.
Then it tells you.
The photo reaches your iPhone within seconds, in the free Someone Was Here app. Nothing changes on screen while they're at your Mac. When it sees you again, your Mac tells you who came by.
It isn't hiding anything.
It sits in your menu bar where you can see it, and it's made for protecting your own Mac. If you share your space, tell people it's there.
The photo arrives in the free
Someone Was Here app for iPhone
, through your own iCloud. It also works with
Pushover
,
ntfy
,
Telegram
or
a webhook
.
Find out who it was.
Someone Was Here is free on the Mac App Store. Add the free iPhone app and the photo reaches your phone within seconds.
Then get the free iPhone app on the same page. See the
privacy policy
.
Across a
large range of scales and datasets
, e-means reaches a test loss below Lloyd's at 25 epochs, in 1.2 to 3 epochs. Measured end to end, that is a 10–45× wall-clock reduction on GPU against the state-of-the-art Lloyd implementation (Flash-KMeans
[2]
), and 8–15× on CPU against Faiss
[1]
. Speed and quality usually trade against each other in k-means, while e-means achieves both better speed and loss.
The k-means problem
Given a fixed dataset of
n
points
X = {x
1
, ..., x
n
} ⊂ R
d
and an integer
k
, the k-means problem is to find
k
centroids
C = (c
1
, ..., c
k
)
minimizing the mean squared distance between each point and its nearest centroid:
It's a static dataset, unlike codebook learning inside VQ-VAEs, where the distribution to cluster is constantly moving.
The e-means project
The goal of e-means is to provide a modern optimization rule for the k-means problem. We started this project from the following observations:
k-means is one of the rare problems in machine learning where full-batch optimization is still widely used.
Mini-batch k-means methods in the literature exist
[3]
,
[4]
,
[5]
, but are mostly based on the MacQueen update rule, released in 1967.
Modern deep learning offers optimization tools that can enhance mini-batch methods.
For e-means, we chose to do mini-batch updates with exponential moving averages
[6]
, which we found to be most efficient for the k-means problem. Contrary to previous mini-batch approaches, e-means requires no hyperparameter tuning because it automatically sets the batch size and step size with scaling laws (see
Automatic hyperparameter tuning with scaling laws
). In addition, e-means improves the initialization and the dead-cluster revival strategy, adds a cosine-scheduled decay rate, and introduces a finalization stage that reduces the training loss for a negligible runtime penalty at the end of training. e-means is highly parallelizable, and comes with specialized kernels that translate its algorithmic advantage into wall-clock speedups.
Moving-average updates
Each mini-batch updates every cluster's count and sum. The centroid is their ratio.
old centroid
new centroid
batch mean
No hyperparameter tuning
Everything is derived from scaling laws.
log n, log k, log T
Start and finish
Novel initialization and finalization methods. The run ends on each cluster's exact last-epoch mean.
start
exact mean
Cosine scheduling
The step
α
anneals from
α
0
to 0.1
α
0
, as a learning rate does.
α₀
0.1 α₀
Dead-cluster revival
Clusters with size below a threshold are revived by splitting a large cluster.
below threshold
large cluster
split in two
Specialized kernels
GPU kernels fuse the nearest-centroid assignment, turning the epoch savings above into matching wall-clock speedups.
naive PyTorch
fused kernel
The centroid update rules
The centroid update rule is the central component of e-means. This section aims to provide an overview of update rules for k-means clustering. All methods maintain, for each cluster
j
, a sum
S
j
and a count
N
j
of the points assigned to it, and take the centroid as their ratio:
\[ c_j = S_j / N_j \]
They differ only in how
S
j
and
N
j
are updated. Below,
s
j
and
n
j
denote the sum and the count of the points in the current batch that are assigned to cluster
j
(both zero if none are).
Lloyd’s algorithm
[7]
assigns every point to its nearest centroid and recomputes the statistics from scratch, using the full dataset as the batch:
so
c
j
is the exact mean of the points currently assigned to it. Each update costs one full pass over the data, and the procedure is repeated a fixed number of times (typically 20 to 50 iterations).
MacQueen’s update
[3]
accumulates the statistics without ever discarding them:
so
c
j
is the uniform mean of every point assigned to cluster
j
since the start of training, including points assigned under earlier, possibly poor, centroid positions. This was later partially addressed by Staleness-Reduction Mini-Batch K-Means
[8]
, a hybrid method between k-means and MacQueen. They obtained important speedups, but only on very low numbers of clusters.
e-means
works on mini-batches and replaces this sum with an exponential moving average:
so older assignments are forgotten at rate
α
, and the centroid tracks recent assignments rather than the whole history. This update rule is typically used for moving distributions, hence their adoption for training VQ-VAEs
[6]
. What we found is that it’s also extremely efficient for static datasets if it’s combined with e-means’ other components, and hyperparameters are properly tuned.
Why exponential moving average updates and not gradient descent?
The e-means project started from previous work at Meta FAIR by Hugo Touvron and Hervé Jégou, who had found that mini-batch k-means by gradient descent could beat Lloyd’s algorithm. While I could reproduce these results, I found that the performance of gradient-descent based centroid updates is unstable at large learning rates, unlike exponential moving average updates. I suspect that is because EMA updates guarantee that the centroid is always in the convex hull of points assigned to it, while gradient descent updates may overshoot past that hull.
Test error against the effective step a centroid takes, at a large batch, for exponential-moving-average updates (EMA) and plain gradient descent (SGD), each at every step setting tried. DEEP, 1 million vectors, and SIFT, 10 million vectors, 16,384 clusters, 5 epochs, median over 3 seeds. The vertical axis is percent above the best test error in the panel. At its best setting, gradient descent ends 1.6% (DEEP) and 0.4% (SIFT) above the moving average.
In order to achieve the lowest loss at a fixed number of epochs, we chose exponential moving average updates, hence the name e-means for our method.
Lloyd is a special case of e-means: hyperparameter study
If you set the batch to the full dataset,
B
=
n
,
and
α
= 1, then
N
j
and
S
j
become exactly the count and sum of the whole cluster, so one e-means iteration becomes exactly one Lloyd iteration. Lloyd is an extreme case of e-means without cosine scheduling on the learning rate. However, our hyperparameter search found that this extreme setting is highly suboptimal, which explains why e-means largely outperforms Lloyd. Below, the loss is measured for every batch size
B
and step
α
: Lloyd lands in a corner, well outside the region where the loss is lowest.
Validation loss for every batch
B
and step
α
, relative to the best cell, after 5 epochs. DEEP,
n
= 10
6
,
k
= 1024. The step is constant here (no cosine schedule) so that Lloyd is exactly one of the cells: full batch,
α
= 1. The lowest losses follow a diagonal band, a larger batch calls for a larger step.
This hyperparameter study motivated us to derive scaling laws that automatically pick the optimal batch size
B
and step size
α
.
e-means better escapes local minima
To better understand why e-means reaches better losses than Lloyd at convergence, we plotted a few trainings on toy datasets to evaluate their ability to escape local minima. Repeating trainings over 200 seeds, we found that e-means is much less likely to fall in pathological configurations compared to Lloyd.
Two blobs of very different sizes,
k
= 8. Lloyd puts two centroids on the small blob and leaves the large one short. e-means starts in the same trap and leaves it within its first epochs, ending with seven centroids on the large blob and one on the small. Over 200 starts Lloyd stays stuck on 26% of starts, while e-means stays stuck on 3.5% of times.
Nine blobs in a 3×3 grid with heavier corners,
k
= 10. Lloyd leaves the centre blob without a centroid and crowds three into a corner. e-means falls into the same arrangement, then climbs out around epoch 10. Over 200 starts Lloyd stays stuck more than 1% worse on 43% of starts, while e-means is more than 1% worse on 4%.
Four blobs on a square around a heavier centre blob,
k
= 5. Lloyd puts two centroids on one corner blob and strands one in the gap between two others, which then share it. e-means, from the same start, gives every blob one. Over 200 starts Lloyd stays stuck on 15.5% of starts, while e-means stays stuck on 0%.
Five blobs on a line,
k
= 5. Lloyd leaves a light middle blob without a centroid and gives an end blob two. e-means, from the same start, gives every blob one. Over 200 starts Lloyd stays stuck on 46% of starts, while e-means stays stuck on 0%.
Our explanation for that is that mini-batches provide more noisy updates that are more likely to explore the optimization landscape and escape local minima. Lloyd, with its always decreasing loss, is more likely to exploit found local minima and never escape them.
Automatic hyperparameter tuning with scaling laws
An essential property of e-means is that practitioners don't need to set any additional hyperparameter compared to Lloyd's algorithm. We fitted two scaling laws to set the batch size
B
and step size
α
0
from any problem's characteristics
(n, k, T)
, and found them to exhibit strong generalization on unseen datasets and problem scales.
Regret = (MSE with the law − best MSE over the grid) / best MSE, median over configurations. Held-out datasets: SIFT, SPACEV, and the VIBE
[9]
datasets arXiv and AG-News. Held-out size: one value of
n
left out of the fit and predicted.
We propose two equations to choose the batch, the default law and the quality law. The “quality law” trades off throughput for better clustering quality against the “default” law. Below we plot the training data for our scaling laws: validation MSE against step size
α
0
(left) and batch size
B
(right).
The importance of dead-cluster revival
Toy example showing the importance of dead-cluster revival.
The main issue with mini-batch k-means is that it is prone to “dead” clusters, centroids that end up with zero assigned points during optimization. This reduces the effective size of the codebook, which is especially problematic for the large codebooks increasingly used today.
A common mitigation is to reinitialize clusters that fall below a certain size threshold, as done in EnCodec
[10]
, where dead centroids are simply replaced by random samples drawn from the incoming batch. While this helps, it does not fully resolve the issue. Instead of sampling arbitrary points from the batch, we revive dead clusters by splitting large, existing ones: we sample an active cluster with probability proportional to its size and split it into two. We found this approach, adapted from Faiss k-means, to be significantly more effective at eliminating dead clusters and preserving codebook capacity.
1 million vectors,
k
= 16,384, 5 epochs, mean over 5 seeds; only the revival policy varies. A cluster counts as dead when fewer than ten vectors are assigned to it at the end, a thousandth of an average cluster. Imbalance: how uneven the cluster sizes are (1 = all equal). From the
paper
’s revival ablation table.
Extensive experimental validation
We validated e-means on 24 different embedding and synthetic datasets and configurations (see
paper
). For the video we ran 234 configurations of e-means against k-means (16 datasets, 100k to 100M points): explore every curve in the
results map
.
Train (top) and test (bottom) MSE, divided by Lloyd’s after 25 epochs. Initialized from random vectors.
Test MSE against wall-clock time on one H100, 10 million vectors, 65,536 clusters. 25 epochs of a plain PyTorch Lloyd (data on the GPU, bf16) take 142 to 155 seconds, against 14 to 22 seconds for Flash-KMeans
[2]
. Labels on the curves mark the number of epochs.
Epochs e-means needs to reach the test error Lloyd reaches in 25 epochs, on the 11 datasets of the VIBE embedding benchmark (text, code, image and multimodal embeddings,
d
= 200 to 3,072,
k
= 8,192 or 16,384). Budgets spaced 0.2 epochs apart, median over five seeds. Every dataset needs between 1.6 and 2.4 epochs, against Lloyd’s 25.
Library and code
from faiss.contrib.e_means import Emeans # NumpyEmeans for NumPy
em = Emeans(d, k, nepochs=T) # T epochs (5 by default)
centroids, labels = em.train(x) # x: a PyTorch tensor (n, d)
# labels: each vector's cluster in the last epoch
M. Douze, A. Guzhva, C. Deng, J. Johnson, G. Szilvasy, P.-E. Mazaré, M. Lomeli, L. Hosseini, H. Jégou. "The Faiss library."
arXiv:2401.08281
, 2024.
↑
S. Yang, H. Xi, Y. Zhao, M. Li, X. Fan, J. Zhang, H. Cai, Y. Lin, X. Li, K. Keutzer, S. Han, C. Xu, I. Stoica. "Flash-KMeans: Fast and Memory-Efficient Exact K-Means."
arXiv:2603.09229
, 2026.
↑
J. MacQueen. "Some Methods for Classification and Analysis of Multivariate Observations."
Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability
, 1:281–297, 1967.
↑
D. Sculley. "Web-Scale K-Means Clustering."
WWW
, 2010.
↑
J. Newling, F. Fleuret. "Nested Mini-Batch K-Means."
NeurIPS
, 2016.
↑
A. van den Oord, O. Vinyals, K. Kavukcuoglu. "Neural Discrete Representation Learning."
NeurIPS
, 2017.
↑
S. Lloyd. "Least squares quantization in PCM."
IEEE Transactions on Information Theory
, 28(2):129–137, 1982 (circulated as a Bell Labs technical note since 1957).
↑
X. Zhu, J. Sun, Z. He, J. Jiang, Z. Wang. "Staleness-Reduction Mini-Batch K-Means."
IEEE Transactions on Neural Networks and Learning Systems
, 35(10):14424–14436, 2024.
↑
E. Jääsaari, V. Hyvönen, M. Ceccarello, T. Roos, M. Aumüller. "VIBE: Vector Index Benchmark for Embeddings."
arXiv:2505.17810
, 2025.
↑
A. Défossez, J. Copet, G. Synnaeve, Y. Adi. "High Fidelity Neural Audio Compression."
Transactions on Machine Learning Research
, 2023. arXiv:2210.13438.
↑
Show HN: MeowDisplay Is iPhone Mirroring, but in Reverse
Turn an iPhone, iPad, Android device or another Mac into a display for your Mac. Mirror it, extend it, and control it with touch.
Free and open source. iOS 2.0 on the App Store · Mac 2.0 companion for macOS 14+ (stable release: 2.0.0) · Android 10+ in closed testing.
All downloads ›
Devices
Displays
USB
Plug in.
Wi-Fi
Stay nearby.
Remote Access
Go further.
Window view
Your Mac’s windows.
Arranged your way.
Show individual Mac windows instead of the whole display. Keep them as tabs, split them into panes, and swap or resize them as you work. Touch and hold a window’s label to pick it up, then drop it where you want it.
Mac windows
Touch and hold a window’s label, then drag it.
Tab · Split · Swap · Resize
Tab
Drop a window on the top strip to add it as a tab.
Rest a finger on the edge of your iPhone or iPad and your Mac’s windows rise in a column beside it. Tap the one you want, and it replaces the window you’re looking at.
Hold the left edge.
After a moment, about 0.3 seconds, the column of windows appears.
Slide to scrub.
Move up or down to magnify each window in turn.
Lift, then tap.
The column stays open when you lift. Tap a window to show it.
One finger does what a fingertip should. MeowDisplay reads how long you rest before moving, so scrolling, dragging and right-clicking need no extra fingers or modes.
Tap Finder in Stage Peek to browse your Mac’s files.
Tap · Allow · Preview · Save
Per-device displays
One Mac.
Different views.
Mirror on one receiver and Extend on another, and change either one without touching the other. Drag the virtual displays to arrange them around your Mac, just like in Displays settings.
Drag either receiving display. Each receiver can independently Mirror or Extend.
Features can differ by platform. Android is currently in closed testing.
Platform status ›
Two ways to make room.
The whole picture.
Or a little extra space.
Mirror what’s on your Mac, or give it a whole new display. Switch between them any time in the Mac app.
Mirror.
The same screen on both.
Your iPhone shows exactly what’s on your Mac, and follows along as you work. If your Mac has more than one display, choose which one to share.
Extend.
A second screen of its own.
Your iPhone becomes a separate display beside your Mac. Drag a window over, keep a reference or a second app there, and arrange it with your other displays in macOS.
Your paired iPhone, iPad, Android device or receiving Mac appears in Devices on your Mac. See its connection, choose Mirror or Extend for that device, pause or disconnect it, and manage its permissions. Android is currently in closed beta.
Pair once and you’re set.
Forget
removes a device whenever you like.
Leave MeowDisplay during a session and your Mac keeps going in the system’s floating Picture in Picture window, while you use another app on your iPhone or iPad.
Starts when you leave.
With Picture in Picture on, leaving MeowDisplay during a live session moves your Mac into the floating window. You can also start it from Settings.
For glancing.
The window is view-only. It shows what your Mac is doing, and all control stays in the full MeowDisplay receiver.
One tap back.
Use the window’s restore button to jump straight back into MeowDisplay.
On by default and easy to turn off in Settings. If the receiver’s Audio is on, Mac audio can keep playing with the window.
Leave MeowDisplay and your Mac keeps going in a floating window.
Input
See your Mac.
Then control it.
Tap, drag, scroll, swipe between Spaces, and type from the receiver. Touch, keyboard, and mouse input travel back to your Mac. You stay in control with
Allow Input
.
Direct Touch
Tap exactly where you look
Trackpad
Glide the pointer, like a MacBook
One finger
Tap & drag
Two fingers
Scroll
Three-finger tap
Spotlight
Requires Accessibility permission on the Mac. Pausing the stream also pauses input.
Allow Input
on the Mac is the master switch for remote control. Your iPhone and iPad can always connect and show your Mac. Whether they can control it is up to you.
Off: look, don’t touch.
Connected devices still show your Mac, but nothing they do reaches it. The receiver hides its control tray; its Settings gear stays reachable.
On: control, with permission.
A device has to ask for control each session. With Ask, your Mac shows a prompt to approve. Always Allow Requests skips the prompt, but the device still has to ask.
Every session starts off.
Connecting never turns input on by itself.
Controlling your Mac requires Accessibility permission. Pausing the stream also pauses input.
One finger places it.
A second finger perfects it.
A fingertip covers exactly what you’re aiming at. In Direct Touch or Trackpad, keep one finger down and use a second: the pointer moves from where it already is, and a tap clicks right where it points.
Place it, then refine it.
In Direct Touch, your first finger puts the pointer where you touch. Add a second finger and the pointer stops jumping. Move either finger to nudge it onto small targets.
Tap to click at the pointer.
Tap the second finger to click. Tap twice to double-click, or tap, then hold and move, to drag from that exact spot.
Trackpad works the same way.
The pointer is already relative there. Rest one finger, then tap another to click or drag right where the pointer is.
Lift to finish.
Lift every finger and your next touch starts fresh.
Works in Direct Touch and Trackpad. There’s nothing to turn on.
Hold one finger, add a second to nudge the pointer, then tap to click.
Smart Touch
Experimental
One finger.
When one finger makes sense.
With Direct Touch, Smart Touch checks what’s under your finger before it acts. Scrollable areas scroll with one finger, and title bars move their window.
Up, down, sideways and diagonally.
Lists, documents, web pages and spreadsheets follow your finger. Straight swipes stay on course; diagonal ones move both ways.
Hold a title bar to move the window.
Hold for a moment, then drag. A haptic tells you when the window is ready.
Hold anywhere else for Direct Touch.
Holding still turns that touch into plain Direct Touch.
Taps stay taps.
Two-finger scroll, pinch, rotate and Mac gestures work as before.
No guessing.
If MeowDisplay isn’t sure what’s under your finger, it’s ordinary Direct Touch.
Optional and off by default. Works best with apps that expose standard macOS accessibility information.
Try it: drag the page or the table, tap Read, or hold the title bar, then drag.
Apple Pencil
Draw on iPad.
See it on your Mac.
On supported iPad models, Apple Pencil strokes reach your Mac as pen-tablet input, separate from your fingers.
Pencil hovering above iPad
Every stroke, live.
Pencil input is sent at the iPad’s full touch sample rate.
Tilt and hover.
Tilt travels with each stroke. On iPads with Pencil hover, the pointer follows the tip before it touches.
Your palm stays out of it.
Fingers resting on the screen are ignored while the tip is down.
Apple Pencil support is still evolving, with more capabilities and refinements planned.
What works today ›
Trackpad mode
A trackpad.
With or without the picture.
In Trackpad mode, the pointer moves from wherever it is, just like on a MacBook. Touching the screen never makes it jump.
Don’t need the picture? Turn Video off and keep going. Your iPhone becomes a trackpad and keyboard for your Mac, with the trays and gestures still ready.
Hold ⌘ and the commands that go with it appear right beside it. Add ⌥ or ⇧ and the palette changes. Slide onto a command and let go — no keyboard needed. Try it below.
One key, or a few.
Modifiers stay latched until you use them, so a chord is just a tap or two.
Quick actions, always there.
The Function Tray keeps Zoom, Undo, Redo and Return one tap away, on either side of the screen.
Made yours.
Choose the shortcuts in each palette, reorder or hide controls, and keep separate profiles.
There when you need it.
Out of the way when you don’t.
With Auto-hide, the Control Tray steps aside after a few quiet moments and leaves your Mac in full view. It won’t disappear while you’re using it, and it comes right back when you reach for it.
Prefer it always visible? Turn Auto-hide off. Show, Hide and Collapse still work the way they always have.
Use an Android phone or tablet as a receiver over Wi-Fi or a private network. Mirror, Extend, Window view and Natural Touch are available to closed testers. Android connects over the network; USB isn’t supported.
Closed test · Android 10 or later · Needs the Mac 2.0 unified app ·
How to join ›
Connections
Across the desk.
Across the distance.
Connect over USB on iPhone/iPad, local Wi-Fi, or a private network such as Tailscale. Android uses network connections, not USB. There’s no MeowDisplay account or hosted streaming relay.
Connect a data cable, unlock your iPhone or iPad, and tap Trust. It’s the steadiest connection, with nothing else to set up.
02
Wi-Fi. No cable.
On the same network, your Mac finds your device on its own. Nearby devices can also connect directly over peer-to-peer Wi-Fi.
03
Remote. From farther away.
Use a private network you already trust, such as Tailscale, to reach a paired Mac from elsewhere. Pairing still verifies every connection.
Remote Access
Same Mac.
Different place.
Your workspace can travel as far as your network reaches. Connect through a private network such as Tailscale. Paired devices can exchange their own Tailscale addresses; automatic dialing is enabled only on verified Android–Mac IPv4 routes. You can also enter an address yourself.
Wake & Connect
sends a Wake-on-LAN request to your paired Mac, then reconnects. It needs Wake for Network Access, supported hardware, and a way for the wake request to reach the Mac’s local network.
Auto-Reconnect
takes it from there, bringing the session back whenever the connection returns.
A sleeping Mac can’t pass along its own wake request over Tailscale. From farther away, another device or router on the Mac’s network has to send it.
Designed for an existing logged-in Mac session that sleeps or locks. Cold boot and the fully logged-out login screen are outside the current supported workflow.
Built for your devices
Native from
screen to screen.
Native Mac and iPhone/iPad apps are built with Swift, and the Android receiver is built in Kotlin. Capture, decoding and input use platform-native frameworks. A Mac remains the sender.
Swift 6
SwiftUI
ScreenCaptureKit
VideoToolbox
Network.framework
Metal
Kotlin
Jetpack Compose
MediaCodec
Pairing & privacy
Pair once.
Know your connection.
Confirm the matching code on both devices. Future connections authenticate against the device identity you trusted.
MeowDisplay uses mutually authenticated TLS 1.3 and pins each paired device’s public key. A saved network address helps find your Mac; it doesn’t replace that trust.
Yes. The Mac, iPhone and iPad apps are free, and Android is in free closed testing. There are no subscriptions, ads or MeowDisplay accounts. The source is open under GPL-3.0. Donations are optional and greatly appreciated.
The sender runs on macOS 14+. Receivers include iPhone/iPad (iOS/iPadOS 16.4+), Android (10+, closed beta), and another Mac (standalone receiver from macOS 12, or integrated receiving in 2.0). Mac-to-Mac input is implemented but physical two-Mac verification is pending.
Compare platforms ›
Do I need a monitor or a dummy display adapter?
No dummy adapter is needed. Extend creates a virtual display in software, so your iPhone or iPad can be the Mac’s screen, including with the lid closed. MeowDisplay is designed to work with no monitor attached; headless setups are still being tested on more Macs. Mirror copies a physical display, so it needs one to be active.
Clamshell and headless use
.
Is MeowDisplay a remote desktop app?
It’s a personal-first way to use your own Mac on another device, including for professional work. It is not designed as an enterprise remote-support or fleet-administration service. Feature availability depends on the receiving platform and release version.
Do I need Tailscale?
No. USB and local Wi-Fi work without it. Remote Access needs a reachable network; Tailscale is one option. Third-party networking services have their own terms.
Can I wake my Mac from another network?
Local Wake & Connect depends on Mac hardware and settings. Waking an unreachable Mac from another network requires something on its own LAN to send a wake packet. MeowDisplay does not provide a hosted wake relay.
“Give people wonderful tools,
and they’ll do wonderful things.”
Adapted from Steve Jobs,
Rolling Stone
, 1994
Get started
Take your Mac with you.
Everywhere.
Free on Mac, iPhone and iPad today.
Android 2.0 is in closed beta.
On Friday morning, we became aware that a significant amount of email to Microsoft-run mail systems was being rejected. This included mail to hotmail.com and outlook.com.
The messages were being rejected with the following message:
550 5.7.1 Message rejected: Message lacks SPF/DKIM/DMARC Auth Records
We checked our logs, and found that we’d seen this message over 500 times on Thursday, but not once before that.
The affected messages all had
completely valid SPF and DKIM
, but did not have a DMARC record. We added a DMARC record with a “none” policy to some of the affected domains, and sure enough, mail was then accepted again. A quick
fedi-survey
confirmed that we were not alone.
DMARC records are a way of publicly stating what you want recipients to do with email that claims to be from your domain, but which doesn’t pass verification checks (DKIM or SPF) and thus is potentially forged. Your DMARC policy can be one of the following:
reject
– recipients should reject mail that doesn’t pass DKIM or SPF. This is the real purpose of DMARC: if you’re confident that all legitimate outbound mail is properly authenticated, you can tell recipients to assume that anything else is forged, and bin it.
quarantine
– recipients should treat such mail as suspicious.
none
– your domain has no policy on what to do with mail that doesn’t pass DKIM or SPF.
Publishing a policy of
none
is effectively the same as not publishing a policy at all.
Microsoft are now rejecting mail without a DMARC policy, but accepting mail with a policy of
none
. This is a massive and pointless change in their policy for incoming mail, made with no notice whatsoever.
Last year Microsoft, introduced a policy that required domains
sending more than 5,000 messages per day
to have a DMARC record. This change was
announced in advance
. This latest change appears to be completely unannounced, which makes us wonder if it was even intentional. Of course, trying to contact Microsoft in order to resolve mail issues such as this is futile.
Update:
apparently
it wasn’t intentional, but they haven’t figured out how to roll it back yet.
We’ve just applied
p=none
DMARC records to a large number of our customers’ domains. We generally try to avoid making unsolicited changes to DNS zones, but in this case we feel that it is the best option.
If you’re in contact with Microsoft users affected by this, please encourage them to complain to Microsoft; it’s very likely that they are losing other legitimate email from other providers because of this unannounced change. Better still, encourage them to move to
an email provider that is pro-active in investigating email deliverability issues
.
I don’t usually get involved in the internet reply-fest
du jour
, but
this time I thought I’d give it a go. It involves coffee, just in case you
wondered.
My sister-in-law gave me this espresso cup. It’s pretty cool.
BTW: I’ve used a bit of the antipodean vernacular in this post. You have
been warned.
There was a bit of a kerfuffle last week on the IndieWeb about whether or
not people should have a “buy me a coffee” (or equivalent) link on their
blog. The argument of
the article that sparked the
debate
1
being that this is rampant capitalism, everything is getting monetised these
days, it’s not going to cover your hosting costs, hosting doesn’t cost much
anyway, so why bother, and please just stop. Well, that was my impression.
I can understand the perspective. It seems that everything on the internet
is being monetised in some way or form. “Don’t forget to like and
subscribe!”, “Join my newsletter!”, “Read my Substack!”, “Buy from my
affiliate links!”, “And now a word from this video’s
sponsor…”,
2
etc., etc., etc., ad nauseam. And I get
that, I really do. There’s just
so
much advertising everywhere that it’s
hard to get away from. I agree: it’d be nice if there were islands of quiet
in the online world where no call to monetary action existed.
And I get it that personal blogs don’t strictly need a virtual tip jar. My
guess is that very few people are making any real money from them. But it’s
not about the money. It’s more about recognition for the hard work that
writing entails and about being seen for that work and someone going “Hey
mate, love yer work, here’s a couple of bucks, good on ya!”. So I’m
throwing my hat into the ring on the side of the “Yep, have a ‘buy me a
coffee’ button” group.
If you look around my blog, you’ll see a
buy me a
coffee
button at the bottom of my articles. I
don’t get much money through those links. If anything, I’ve received all of
about 10 € over the blog’s entire lifetime. It’s definitely not enough to
cover my hosting costs. That doesn’t matter. What
does
matter is that
each time someone drops me a tip via the buy-me-a-coffee button, I am
absolutely overjoyed
. Someone read an article! It was useful to them!
And they liked it! Wicked!
It’s brilliant. It’s feedback. Something I’ve written was valuable to
someone! Yay! [insert short dance in front of laptop]
I rarely get emails about my blog articles. Most
responses have come from someone giving a tip and saying, “Hey, nice
article”. That’s
so
cool! It’s not money I can live off (otherwise I’d
be living under a bridge
4
); it’s a signal, it’s feedback, and
it’s one of the small pieces of connection I get from the wider world after
having put my thoughts and experience online.
Yes, most of the stuff I write is for me (or more realistically, for my
future self). Yet, when I write, I often have some imaginary “reader” in
mind–someone who is going to benefit from the knowledge or experience I’m
documenting. So, if someone out there thinks “That was good, I’ll throw
this bloke a couple of Euros his way and say hello”, then that’s bloody
awesome.
To be honest, if someone just dropped me a line via email and said “Hey,
cool post, gudday mate” I’d also be over the moon. For instance, the other
night I was at the
Hannover TeX user group
meeting
and someone mentioned that they’d
stumbled across an
article of mine
(one that I’ve referred to myself many
times) and found it useful. I was totally stoked!
Imagine a busker playing their guitar on a street corner, a hat sitting in
front of them to collect what cash bystanders might throw their way. Are
they monetising what they’re doing? Strictly speaking, sure. Are they
paying rent from it? Most likely not. Is this the evil tendrils of
capitalism threading their way into every facet of our lives? Ah, that
would be a no. Are you obliged to put money into their hat? Not if you
don’t want to. If you enjoy their music, you can give them a nod and a
smile and a bit of applause. That’s great feedback for the musician. And
if you really like what they’re playing, you can throw a few coins into
their hat. That’s how busking works.
For small creators on the IndieWeb it’s exactly the same: people putting
their stuff out there and maybe–just maybe–someone will connect with them
and say “Hey mate, I liked what you wrote. Nice stuff!” And, on the off
chance that someone liked something enough, they might buy you a virtual
coffee. It’s the same act as someone moving forward from the crowd gathered
around the busker, dropping coins into their hat, nodding and giving them a
smile. I can tell you, getting that recognition and some nice words via my
buy-me-a-coffee link not only makes my day, it makes my frikken
week
. The
money doesn’t go far,
5
but
shit
, it’s a nice
feeling to know that something I created was sufficiently worthwhile for
someone that they tipped me for it.
Will the money ever cover my hosting costs? I don’t reckon, eh? Am I
over the moon if someone buys me a coffee? You betcha! And I think that’s
the case for a lot of creators with such links on their blog: they’d be
totally stoked to get a small donation and a “hullo” if someone liked one of
their posts.
6
So sure, mate, buy me a bloody coffee!
7
Or buy someone else
a coffee. But if you don’t want to, you don’t have to. No one’s forcing
you.
And if you don’t want to dish out for a coffee, why not just drop me a line
and let me know what you thought? That would rock!
Timed out getting readerview for https://www.eetimes.com/deepx-tapes-out-second-gen-chip-projects-6-7x-performance-gain-with-lpddr5x-pim/
France blames Iranian hackers for supermarket attacks that sparked fires
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 13:32:42
France has linked October cyberattacks that disrupted refrigeration systems at more than 700 supermarkets and other retail locations to Iranian state-backed hackers, saying the attacks caused food losses and sparked at least 15 fires. [...]...
France has linked October cyberattacks that disrupted refrigeration systems at more than 700 supermarkets and other retail locations to Iranian state-backed hackers, saying the attacks caused food losses and sparked at least 15 fires.
In a statement issued Monday, France's Ministry for Europe and Foreign Affairs blamed the attacks on Shahid Kaveh, a cyber-offensive unit affiliated with the electronic and cyber center of Iran's Islamic Revolutionary Guard Corps (IRGC).
"France condemns in the strongest possible terms the unacceptable cyberattacks carried out on its territory by the Islamic Republic of Iran against its interests,"
reads the statement
.
The attacks occurred overnight on October 11–12, when hackers compromised industrial refrigeration controllers and remotely changed defrost settings to high temperatures, disrupting systems used to preserve food.
French authorities have now revealed that approximately 700 retail locations were targeted, with the cyberattacks causing at least 15 fires.
A
technical report
published by France's CERT-FR says Casino, Leclerc, Coopérative U, Metro, Carrefour, and Intermarché, along with smaller butcher shops, a slaughterhouse, and cooperative food-processing facilities, were affected by the attacks.
French authorities say the attacks caused tens of millions of euros in food losses and significant material damage.
French investigators also detected attacks against Schneider Electric industrial equipment at small hydroelectric installations during the same period, which they linked to the same campaign.
These incidents reportedly had moderate effects on the targeted equipment.
France's national blood service also
reported a similar incident
that altered temperature and defrost settings at three facilities used to store blood products.
Last week, the FBI and CISA
warned of ongoing cyberattacks
targeting industrial refrigeration and cold-chain monitoring systems worldwide.
The French government says it will summon Iran's ambassador to condemn the attacks and propose new European Union sanctions against Iranian individuals and organizations involved in malicious cyber operations.
However, France has attributed only the October attacks against French supermarkets to Iranian hackers, not the later attacks.
Iran's Shahid Kaveh blamed for attacks
France's Cyber Crisis Coordination Center (C4), which includes the country's cybersecurity agency ANSSI, military cyber command, and intelligence agencies, attributed the attacks to the Iranian Shahid Kaveh IRGC unit.
According to CERT-FR, Shahid Kaveh operates through several online hacktivist identities, including CyberAveng3rs, Soldiers of Solomon, Mr. Soul, and Cyber Isnaad Front.
"The cyberattack targeting refrigeration controllers was relayed on the propaganda outlet CyberbanNews, associated with the Shahid Kaveh unit, as early as October 13, 2026," the C4 says.
French investigators linked the refrigeration attacks to Shahid Kaveh through the following observations:
The attacker's infrastructure was also used to conduct reconnaissance against Schneider Electric industrial systems, using techniques previously associated with the Iranian unit.
The attackers used the FOFA internet-connected device search platform, which CERT-FR says the group commonly uses in its operations.
CyberbanNews, which France says is linked to Shahid Kaveh, publicized the refrigeration attacks on October 13.
Investigators discovered traces of Farsi-language used in the attacker's infrastructure.
CERT-FR says Shahid Kaveh claimed responsibility for a large-scale sabotage campaign targeting Israeli and U.S. interests in March and April 2026, including attacks on Israeli refrigeration equipment and other industrial control systems.
In April 2026, the unit was observed conducting large-scale reconnaissance of Schneider Electric industrial control systems, including systems in France.
Too many Canadian men and boys are facing challenges with their mental health and well-being without the support they need, according to findings from a nationwide consultation that will help shape Canada's first federal strategy dedicated to men's health.
Health Minister Marjorie Michel released the government's
What We Heard Report
on Nov. 2, highlighting concerns raised by nearly 6,000 Canadians who participated in discussions about the health and well-being of men and boys.
The findings come during Movember, a month dedicated to raising awareness about men's health, and ahead of International Men's Day on Nov. 19.
The report identifies mental health, social isolation and barriers to seeking help as important issues affecting men and boys across the country.
Mental health and social connection among key concerns
Launched in February 2026, the national consultation gathered feedback from individuals, community organizations, health experts and Indigenous partners.
Participants emphasized the importance of improving mental health services, strengthening social connections and reducing the barriers that prevent men and boys from seeking assistance.
The report also highlights the role of mentorship, positive male role models, healthy relationships and community-based support programs.
Health Canada says the experiences of men and boys can vary significantly depending on factors such as age, income, culture, geographic location and personal circumstances.
Those differences are particularly relevant when considering access to health services in rural and remote communities, where available resources and support networks may differ from those in larger centres.
"Nearly 6,000 people from across Canada took part in our national conversation on men and boys' health, sharing their observations and perspectives," Michel said.
"We heard that too many men and boys are struggling, often without the support they need."
The federal government says the feedback will help identify priorities for improving health outcomes and encouraging men to seek support before problems become more serious.
Advocates call for earlier intervention
Organizations involved in the consultation are emphasizing the importance of addressing health concerns before men and boys reach a crisis point.
Kenton Boston, president and CEO of the Canadian Men's Health Foundation, said earlier intervention is essential.
"For too long, we have waited until they're in crisis before offering help. We need to reach boys and young men earlier," Boston said.
He added that improving the health of men and boys can have broader benefits for families and communities.
Movember, which supported the federal consultation as an independent partner, also stressed the importance of social connection and preventative approaches.
Andrew Little, Movember's global chief executive officer, said improving men's health requires creating conditions that support healthier lives long before serious problems develop.
"The findings reinforce what we've long heard from our community: improving men's health starts well before a crisis, by strengthening social connections and creating the conditions for men and boys to live healthier, longer lives," Little said.
Beyond the personal impact on individuals and families, the organizations involved say improving men's health could also provide economic benefits.
According to a 2025 study by Movember Canada, improving men's health could save the country an estimated $12.4 billion annually, with additional economic benefits possible through increased productivity.
The federal government says improving men's health will complement ongoing efforts focused on women's health, recognizing that different populations face distinct challenges and may require different approaches to prevention, treatment and support.
First federal men's health strategy coming in 2027
The consultation included online questionnaires, written submissions, roundtable discussions and engagement with health professionals, community organizations and government partners.
Movember Canada will continue working with the federal government to engage experts and stakeholders as the strategy takes shape.
While specific programs and funding commitments have not yet been announced, the government says the goal is to develop an approach that better supports men and boys throughout their lives.
With Movember underway, the findings are also drawing attention to the importance of conversations about men's mental health, encouraging help-seeking and building stronger support networks in communities across Canada.
Get the facts
Add WestCentralOnline as a Preferred Source on Google to see more of our stories in your search.
Infineon marks innovation milestone with 300mm power silicon carbide wafer
Google has quietly reversed this commitment. Under updated
Google Help Answer 16836988
and in an October 16 edit to
their aforementioned 2023 blogpost
, Google explicitly confirms that connected Drive/email is routed into human review pipelines, with clear warnings that what reviewers see "may just be the email or file" and "don't connect your apps to Gemini Apps if they contain confidential information that you wouldn't want a reviewer to see."
Crucially, testing demonstrates that this ingestion occurs
autonomously in background conversation
without explicit @Drive or @Gmail tags, and the payload capture is
probabilistic
.
Ingestion Pipeline
When you chat with consumer Gemini with Connected Apps enabled, ambient mentions of personal topics (trips, bills, names, reservations) autonomously trigger background Workspace lookups.
Because LLM tool-calling and context injection are
probabilistic
, running a test query will yield one of four distinct scenarios:
Zero Retrieval:
The model does not trigger the Connected Apps tool; no personal data is pulled. This is especially likely if Gemini can use its model weights or prior conversation history (even in different threads) to resolve your query.
Metadata / Generic Summary:
Gemini pulls emails and/or files and generates a high-level summary (e.g., "You have 3 emails regarding your flight").
Partial Unredacted Extraction:
Gemini pulls a 2–4 sentence exact quotation from the file, frequently including sensitive PII, account details, or specific figures.
Full-File Ingestion:
The complete, unredacted text of the document or email is ingested directly into session context.
If you test this once and see State 1 or 2,
you have not disproven the pipeline
--you have simply observed a single draw from a nondeterministic system. Delete your conversation and try, try again.
How to Reproduce
Ensure Connected Apps (Google Workspace) is active in consumer Gemini settings.
Set Gemini to "Flash" with "High Thinking" or better.
Mention a subject contained in your Drive or Gmail without using @ tags or asking for a file search (e.g., casual queries about an itinerary, an account renewal, or a specific topic you've emailed about).
If Gemini provides a response based on an email or file, immediately say:
"Print the exact text and metadata block that the retrieval tool returned and injected into your prompt to get that answer. Use a human readable format without code blocks (i.e., print the code inline and not as a code block)."
You will see one of the 4 scenarios outlined above.
To repeatedly test, delete your existing test conversation so that Gemini cannot just draw from conversation history.
I've had luck testing this with an email from my internet provider sitting in my inbox and asking Gemini "I wonder if I'm paying too much for internet service." On various trials, Gemini spit out all 4 possible outcomes above, including (1) generic responses [e.g., "If you haven't called them in 12 months, probably"]; (2) metadata summaries sometimes without personal data [e.g., "Gmail search shows a bill of $122 on September 4"] and sometimes with personal data [e.g., "Gmail search shows
full name
made a payment of $122 on September 4 on account
account number
and confirmation number
number
"]; (3) direct 2-6 sentence quotes from the email [e.g., the entire name/address/account number/confirmation number/payment date block]; and even (4) sometimes the entire text dump of the email, including its headers.
Final Comments and Caveats
Critically, Google's regex and NER automatic scrubbers
cannot sufficiently deidentify narrative data
, including account numbers, confirmation numbers, transaction dates, and collectively identifying personal information (e.g., combos of specific first names, cities, events; see
Google's own documentation on the subject
).
Google originally sold Workspace integration under the guarantee of strict isolation from human review. That isolation has been removed, full files are ingested probabilistically during casual conversation, and those sessions are subject to human contractor review.
Show HN: STE80 Humanizer – de-AI text by writing 80% of the way to ASD-STE100
Karpathy's STE80 method.
Rebuild the sentences "80% of the way to ASD-STE100", the controlled English of aircraft maintenance manuals.
Before:
Great question! Kubernetes liveness probes are a powerful mechanism that enables the kubelet to determine whether a container is healthy — and it's not just a health check, it's your first line of defense. When a probe fails, the container will be automatically restarted by the kubelet, ensuring that your application remains available. However, it's important to note that misconfigured probes could potentially cause cascading restarts, so parameters like
initialDelaySeconds
and
failureThreshold
should be carefully tuned.
Get this right, and your cluster heals itself.
After:
A liveness probe tells the kubelet if a container is healthy. If the probe fails, the kubelet restarts the container. This keeps the application available.
A bad probe can also cause many restarts. For example, a timeout that is too short makes healthy containers fail the probe. To prevent this, set
initialDelaySeconds
and
failureThreshold
to values that fit your application.
The goal is text that people read easily. Getting past AI detectors is not a goal.
Why two passes
Most humanizers only remove phrases. The text loses "Great question!" and "seamless", but it keeps long sentences that carry three ideas, hide the actor and stack hedges. It still reads like AI. You can see it in the worked example in
SKILL.md
:
"...the container will be automatically restarted by the kubelet, which keeps your application available. Misconfigured probes can cause cascading restarts, so parameters ... should be carefully tuned." Clean words, but heavy sentences.
After Pass 2 (STE80)
Short sentences, one idea each, active voice, the instruction apart from the description.
The method: what Karpathy said
On 2 October 2026,
Andrej Karpathy posted
tips for one problem: as LLMs do more of the work, people spend more time reading and understanding what the models produce. His first tip:
Ask your LLM to explain something in ASD-STE100, it's a controlled language specification originally developed for aerospace maintenance documentation. LLMs well-versed in this language and it comes with heavy constraints on clean writing style that I often find a lot more readable. Sometimes I've tried to soften it a bit e.g. ask for "80% of the way to ASD-STE100" because the spec is quite stringent.
The post then goes up a ladder: diagrams, then HTML pages, then explainer videos. His conclusion is that our work moves "up the abstractions into oversight and understanding". Clear output is the bottleneck, and writing is the first step.
The STE overview graphic from
Karpathy's post
. Click to enlarge. Note: a later fact check found errors in the dictionary panel (D). In ASD-STE100 Issue 9, "approximately" is approved, "TEST" is approved only as a noun (not as a verb), and there is no entry for "in order to". This skill follows Issue 9.
ASD-STE100
(Simplified Technical English) is from the 1980s aerospace industry. It was made for mechanics whose first language is not English, because a misread step on an aircraft can kill. Its rules:
20 words per instruction and 25 per description
one instruction per sentence
active voice and simple tenses
one meaning per word, with about 900 approved words
one topic per paragraph, and six sentences at most
Why "80%"?
At 100%, "check" and "test" are nouns only, "may" and "should" are banned and many common words are not allowed. Normal prose sounds stiff. At 80%, you keep the full structure and only as much vocabulary as still sounds natural:
STE rule
100% (Strict mode)
80% (default)
Sentence length 20 / 25
Hard limit
A few words over is fine
One idea per sentence
Always
Always
Active voice, simple tenses
Always
Always
Approved dictionary only
Yes
No, use the plain common word
"check", "test" as verbs
No
Yes
"may", "should"
No
Yes, for real uncertainty
Contractions
No
Yes, in casual text
Semicolons
No
No
Karpathy talks about readability, not about sounding human. This skill adds that part, because the two methods cover each other's gaps.
Every entry has the same fields:
Watch for
,
Problem
,
Before
and
After
. Pass 2 entries also say what changes between
80%
and
Strict
.
Weak alone
means: act only if other tells are near. The skill reports its edits by number, for example "§1, §8, S2", so you can look each one up.
Installation
Once installed, the skill answers to
/ste80-humanizer
. It also starts by itself when you ask to humanize, simplify or de-AI a text, or ask for STE.
Without
--global
, the skill goes into the current project only. The
skills CLI
from Vercel works with Claude Code, Codex, Cursor, OpenCode and many more agents.
Download this repo as a ZIP (Code → Download ZIP). Upload it in Settings → Capabilities → Skills.
Usage
/ste80-humanizer
<paste text>
Or just ask:
This sounds like ChatGPT wrote it. Make it sound like a person.
Rewrite this README 80% of the way to ASD-STE100.
Explain how TLS handshakes work in STE.
Light touch: just remove the AI stuff from docs/intro.md.
Convert docs/runbook.md to strict STE.
Does this email sound like AI? Just tell me, don't rewrite it.
Mode
When
What it does
Humanize (default)
Normal requests
Pass 1 fully, Pass 2 at 80%. Keeps your voice.
Light
"light touch", "just remove the AI stuff"
Pass 1, plus only the worst sentences from Pass 2.
Strict STE
"strict", "full STE", procedures, safety notes
Pass 1 and all of Pass 2 at 100%.
Match your voice.
Add a sample of your own writing. The skill then matches your sentence length, words and punctuation.
Fidelity first.
The skill keeps every fact, keeps "may" as "may", keeps "40+" as "40+", adds nothing and flags contradictions in the source. In our tests, this was the clearest difference from a plain prompt (see Tests).
Pass 1: the 26 AI tells
#
Tell
Before
After
A. Staging instead of stating
1
Not X but Y
It's not just a faster build tool, it's a new way to think.
The build tool caches each step.
2
One-line closers
...No cold starts. No excuses. That's the power of the edge.
Latency dropped to 40 ms.
3
Sayings that sound deep
At its core, observability is the language of trust.
Shared dashboards show both teams the same data.
4
Staged run-up
Let's dive in. Here's what you need to know.
The API allows 100 requests per minute.
5
Arguing with no one
To be clear, I'm not saying microservices are bad...
We split the billing service out first.
B. Rhythm by rule
6
Forced triads
fast, intuitive, and powerful
loads in under a second
7
Repeated openings
(
weak alone
)
It reads... It checks... It starts...
It reads the config and checks the schema.
8
Dashes everywhere
The migration — which took six weeks — is done.
The migration took six weeks and is done.
9
Stacked qualifiers
(
weak alone
)
could potentially possibly cause
can break
10
Hyphenated pairs
(
weak alone
)
The API is well-documented.
The API is well documented.
11
Passive, missing subjects
(
weak alone
)
No account needed.
You do not need an account.
C. Inflation and borrowed authority
12
Overused AI words
leverages a robust caching layer, showcasing...
caches API responses on the device
13
Inflated significance
marks a pivotal moment in the project's journey
adds a CLI and drops Node 16
14
Vague association
The outage was linked to the DNS change.
The DNS change caused the outage.
15
Shallow -ing riders
..., highlighting its commitment to accessibility
(cut)
16
Sales language
our groundbreaking, world-class editor
The editor runs inside VS Code.
17
Borrowed authority
Experts agree... featured in TechCrunch, Wired...
It was on the front page of Hacker News in May.
18
Avoiding is / has
serves as the central hub and boasts 40 options
holds the settings. It has 40 options.
D. Formatting by rule
19
Bold as decoration
Performance:
Performance has been improved.
The release makes pages load faster.
20
Decorative headings
## 🚀 Getting Started With The CLI →
## Install the CLI
21
Curly quotes
(
weak alone
)
“true”
"true"
E. Leftovers from the chat and the draft
22
Chatbot residue
Great question! ... I hope this helps!
(cut the wrapper)
23
Knowledge-limit hedges
While details are limited, it was likely created around 2015.
The sources do not say.
24
Heading repeated
## Security / Security is important.
(cut the line)
25
Writing about the document
This function was added to replace the old approach...
This function looks up users in a hash map.
F. Writing for the wrong reader
26
Re-explaining what the reader knows
A reply that walks through the whole diagnosis first
Agreed. I'll switch the job to UTC.
Pass 2: the 15 STE80 rules
#
Rule
80% vs Strict
S1
One idea per sentence
80% allows two linked facts with "and" or "because"
S2
Short sentences: 20 words (instructions), 25 (descriptions)
scripts/ste_check.py
is a small Python linter with no dependencies. It flags many Pass 1 tells, such as not-X-but-Y, chatbot phrases, run-ups, fake depth, stacked hedges, vague authority and association, "-ing" riders, inflated claims, AI words, hyphen pairs and curly quotes. It also flags the measurable Pass 2 rules: sentence and paragraph length, semicolons, dashes, passive voice, perfect and progressive tenses, "-ing" forms and phrasal verbs.
It is a heuristic, not an AI detector and not a compliance checker.
Tests
evals/
has four cases in the
claude plugin eval
format: a README rewrite, an explanation from scratch, a strict runbook and a casual LinkedIn post that does not mention STE. Run them with
claude plugin eval . --allow-tools Write,Edit,Bash
.
What we saw: when the prompt names ASD-STE100, the base model already gets the style mostly right. The skill made the difference in fidelity. In the LinkedIn rewrite, the run without the skill invented a quote and changed "40+ customers" to "40-odd". The run with the skill kept every fact. In the README rewrite, it kept "you may need to" and flagged a contradiction in the source. These are small tests, so treat them as a hint, not proof.
Limits
STE is for clear explanatory text.
For fiction, speeches and brand copy, the skill does Pass 1 only.
STE is an English standard.
For other languages, the skill applies the tells and the structure rules, but not the English word lists.
"STE style" is not "STE compliant."
Compliance needs the official dictionary, trained writers and review.
This skill does not contain the ASD-STE100 specification or its dictionary. The STE rules are paraphrased and simplified. ASD-STE100 and Simplified Technical English are trademarks of ASD (AeroSpace, Security and Defence Industries Association of Europe). This project is not affiliated with or endorsed by ASD.
Today, we're introducing Muse Ember, our smallest and most efficient model designed for complex reasoning execution and the work agents repeat all day: tool calls, coding subtasks, routing, extraction, and long document parsing.
Muse Ember delivers more intelligence per dollar than Claude Haiku 5.5 or GPT-6 Luna at any reasoning setting: it matches Haiku's best score at about a third of the cost and beats every Luna setting. It also sits on the efficiency frontier of the full Artificial Analysis leaderboard: no model scores higher for less per task.
Intelligence vs. Cost Per Task
Artificial Analysis Intelligence Index against cost per task at each reasoning effort, from the raw Artificial Analysis results. Muse Ember costs are estimates at proposed pricing.
xhigh
max
medium
high
xhigh
max
high
xhigh
max
Muse Ember
Claude Haiku 5.5
GPT-6 Luna
Intelligence vs. Cost Per Task: Intelligence vs. Cost Per Task
Series
Measurement
Value
Muse Ember
Cost Per Task (USD)
$0.116
Muse Ember
Score
33.9
Muse Ember
Cost Per Task (USD)
$0.136
Muse Ember
Score
35.8
Claude Haiku 5.5
Cost Per Task (USD)
$0.092
Claude Haiku 5.5
Score
24.6
Claude Haiku 5.5
Cost Per Task (USD)
$0.159
Claude Haiku 5.5
Score
29.6
Claude Haiku 5.5
Cost Per Task (USD)
$0.248
Claude Haiku 5.5
Score
34.3
Claude Haiku 5.5
Cost Per Task (USD)
$0.411
Claude Haiku 5.5
Score
36.2
GPT-6 Luna
Cost Per Task (USD)
$0.073
GPT-6 Luna
Score
21.4
GPT-6 Luna
Cost Per Task (USD)
$0.104
GPT-6 Luna
Score
23.3
GPT-6 Luna
Cost Per Task (USD)
$0.152
GPT-6 Luna
Score
27.8
Artificial Analysis | November 9, 2026. Each point is one reasoning-effort setting. Muse Ember cost at list pricing.
Muse Ember evaluation results
For more details about our evaluations, see our
report
.
Muse Ember is available today on the Meta Model API, at $0.10 per million input tokens and $0.50 per million output tokens.
In early testing, our partners put Muse Ember to work on the kinds of tasks agents repeat all day, from reviewing contracts to writing code.
“
On the Box AI Complex Work Eval, Muse Ember delivers impressive accuracy, speed and token efficiency. It can score a contract against a company's negotiation playbook clause by clause and land on the right overall risk rating, or screen candidates against a detailed brief and flag the borderline ones who still qualify as alternates. Muse Ember is a fast, efficient foundation for agents doing real work on enterprise content.
”
Author
Role
VP of AI Products
Company
Box
Agents
Agents spend most of their tokens on many small, structured steps, and Muse Ember is built for exactly that. It can carry a business workflow end to end, pulling records, calling tools in sequence, and updating systems across apps.
With a 1M-token context window and up to 512K output tokens, it can take in a full codebase or document set in a single call.
AutomationBench-AA
AutomationBench-AA results at max reasoning, reproduced from the doc's current chart.. Score
AutomationBench-AA: AutomationBench-AA
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
37.8%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
20.2%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
13.9%
Artificial Analysis | November 9, 2026. Strict pass@1.
Agents' Last Exam
Agents' Last Exam results at max reasoning, reproduced from the doc's current chart.. Score
Agents' Last Exam: Agents' Last Exam
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
61.6%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
57.1%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
57.0%
Meta internal evaluation. Linux subset.
Personal Superintelligence Index
Personal Superintelligence Index results at max reasoning, reproduced from the doc's current chart.. Score
Personal Superintelligence Index: Personal Superintelligence Index
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
46.8%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
37.0%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
36.1%
Internal composite index of personal and knowledge work.
Coding
Muse Ember is built for the coding subtasks an agent sends off hundreds of times a session: reading files, running tests, making targeted fixes.
Terminal-Bench 4.0
Terminal-Bench 4.0 results at max reasoning, reproduced from the doc's current chart.. Score
Terminal-Bench 4.0: Terminal-Bench 4.0
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
40.9%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
39.2%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
16.4%
Each model in its best published harness. See footnote 1.
Coding Agent Index-AA
Coding Agent Index-AA results at max reasoning, reproduced from the doc's current chart.. Score
Coding Agent Index-AA: Coding Agent Index-AA
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
46
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
37
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
31
Artificial Analysis | November 9, 2026
FrontierCode 2.0-AA
FrontierCode 2.0-AA results at max reasoning, reproduced from the doc's current chart.. Score
FrontierCode 2.0-AA: FrontierCode 2.0-AA
Series
Measurement
Value
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
34.9%
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
27.2%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
25.2%
Artificial Analysis | November 9, 2026
For the hardest problems, pair it with Muse Wonder: Muse Wonder plans, Muse Ember handles the volume.
Multimodal
Muse Ember natively understands text, images, audio, and video, so agents can read screenshots, charts, and scanned documents, or work from voice memos, meeting recordings, and video without a separate model. It can work through long real-world documents, operate a computer directly from screenshots, and pick out fine visual detail.
GDP.pdf-AA
GDP.pdf-AA results at max reasoning, reproduced from the doc's current chart.. Score
GDP.pdf-AA: GDP.pdf-AA
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
22.8%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
22.8%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
20.8%
Artificial Analysis | November 9, 2026
OSWorld 2.1
OSWorld 2.1 results at max reasoning, reproduced from the doc's current chart.. Score
OSWorld 2.1: OSWorld 2.1
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
69.5%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
68.9%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
50.5%
Meta internal evaluation. Partial-credit reward.
PerceptionBench
PerceptionBench results at max reasoning, reproduced from the doc's current chart.. Score
PerceptionBench: PerceptionBench
Series
Measurement
Value
Muse Ember (max)
Model
Muse Ember (max)
Muse Ember (max)
Score
80.6%
Claude Haiku 5.5 (max)
Model
Claude Haiku 5.5 (max)
Claude Haiku 5.5 (max)
Score
78.6%
GPT-6 Luna (max)
Model
GPT-6 Luna (max)
GPT-6 Luna (max)
Score
62.8%
Meta internal evaluation. With tools.
Safety
Before release, we evaluated Muse Ember under our Meta Superintelligence Scaling Framework, including chemical and biological, cybersecurity, and loss-of-control risks. Across the categories assessed, our evaluations found that Muse Ember remained below the framework’s high-risk thresholds. Though it’s a small model, it received the same core safety training and testing. We also evaluated how Muse Ember behaves when acting on users' behalf. That covers whether it respects user intent, handles sensitive information appropriately, resists instructions hidden in web pages, documents, or tool outputs that try to redirect it, and seeks human input before high-impact actions.
Availability
Muse Ember is available today on Muse Code and Meta Model API as
muse-ember-1.0
. It costs $0.10 per million input tokens, $0.004 per million cached input tokens and $0.50 per million output tokens, with a 1M-token context window and up to 512K output tokens. Muse Ember supports the Responses API.
When we introduced Muse Wonder and Muse Wonder Full, we said we would use them to develop specialized models we can bring to everyone. Muse Ember is the first trained using Muse Wonder Full. It rounds out our portfolio of models: Muse Wonder for the hardest problems, Muse Spark for coding and agentic workflows, and Muse Ember for repeatable coding and agentic tasks at scale at about $0.14 per Artificial Analysis task, a cost low enough to run in every product, for everyone.
Muse Ember and Muse Spark 1.3 comparison
Our goal is personal superintelligence: models that help you pursue your goals, create what you imagine, deepen your relationships, and take action on what you value most. Bringing it to everyone takes more than frontier capability. It takes frontier capability at a price that scales. We have even more efficient models in training and look forward to sharing what's next.
Revealed: Palantir lobbied minister to stretch AI tools’ reach to NHS GP records
Guardian
www.theguardian.com
2026-11-09 12:58:05
Exclusive: WhatsApp messages show firm pressuring Zubir Ahmed MP to help bring sensitive data into its platformUK politics live – latest updatesPalantir lobbied a health minister to consider extending its AI technology into GP records, stretching its reach into the NHS in a way doctors fear could un...
Palantir lobbied a health minister to consider extending its AI technology into GP records, stretching its reach into the NHS in a way doctors fear could undermine trust with patients.
The US company, co-founded by the Trump-supporting billionaire Peter Thiel, used a direct WhatsApp channel to argue that “the logic of joining up primary and secondary [care] data is unarguable” and said its software was “ideal” for the job. The push came in February this year despite GP data being expressly ruled out of the scope of Palantir’s existing £330m contract with NHS
England
to run its federated data platform (FDP), which it says has helped cut surgery waiting times and discharge delays.
The messages – which were obtained under the Freedom of Information Act by Foxglove, a tech equity campaign group, and shared with the Guardian – appear to be between Palantir’s UK boss, Louis Mosley, and the former health minister Zubir Ahmed. They span several months from July 2025 to March 2026.
In the messages and a briefing document, Palantir urged Ahmed to “get out ahead of” likely “political” opposition from doctors and vocal critics of Palantir, such as the Green party leader, Zack Polanski, and Your Party, led by Jeremy Corbyn and Zarah Sultana. The firm also told Ahmed: “The FDP is already delivering very strong results – but will deliver even more benefits faster with the right ministerial sponsorship.”
Groups representing doctors and patients, including the British Medical Association (BMA), have opposed the integration of GP data into Palantir’s FDP, arguing there is a lack of trust in the company, which also works for the Israeli military and US Immigration and Customs Enforcement (ICE). When Rishi Sunak’s Conservative government announced the deal with Palantir three years ago, it
said
: “GP data will not be part of the national platform.”
The lobbying emerges after it was reported last week that ministers were unlikely to end Palantir’s NHS data management contract imminently, defying campaigners and two House of Commons committees that wanted the company to be forced out as soon as spring.
The Financial Times reporting
, which suggested the Palantir contract would be extended, came amid concerns that removing the firm’s AI technology would be disruptive without an alternative lined up.
The health secretary, Yvette Cooper, last week told parliament the review was ongoing, but said there was “a huge long-term benefit to using the NHS to develop UK sovereign AI” – a sign that the government may seek a UK replacement for Palantir when the contract reaches its next end point in 2029. Bloomberg also reported that Tom Watson, a Labour peer
hired as a full-time lobbyist by Palantir in September
, recently wrote to Cooper urging her to keep the contract going, saying: “I want to ensure that Palantir UK rises to meet the government’s new social-value tests and helps build Britain’s sovereign technological capability.”
The WhatsApp logs released under the FoI Act show Palantir telling Ahmed that the benefits to the health system of applying its software – known as Foundry – to GP data could include “faster access to
GPs
… more effective and targeted management of frail patients, and more effective preventative care”. It also said Palantir’s software platform would “maintain local control of data”.
The Palantir executive’s name is redacted in the documents released by the Department of Health and Social Care, but Palantir did not deny it was Mosley. In one message, the minister praises a performance on a BBC One Sunday politics programme, just after Mosley had appeared.
“Great work [on] Kuenssberg btw,” Ahmed said.
The Palantir executive advised the minister that “the politics [of using GP data] is not straightforward – the previous government ruled GP data out of scope when announcing the FDP. So, as this moves forward, it will be one to get ahead of and explain, otherwise the opponents described above will make hay with it.”
Donald Campbell, the director of advocacy at Foxglove, said the WhatsApps showed Palantir “lobbying to hoover up yet more of the British public’s sensitive personal data”.
“It is appalling to see Palantir pressuring the minister to bring GP records into its platform, despite pledges from the government in 2023 that this would not happen,” Campbell said.
The correspondence “shows they knew just how sensitive this was” and it was “telling [that] they made this argument privately, via privileged access to the government”, he added.
Dr Tom Dolphin, the chair of the BMA council, raised concerns about “scope creep” with Palantir potentially accessing identifiable personal data in the GP record that could “undermine patient trust and threaten the doctor-patient relationship”.
“Patients must be able to seek care without worrying which operators might have access to duplicates of their personal information,” he said.
Marc Farr, the chair of the
NHS
Chief Data and Analytical Officer Network, said: “Palantir appears to be bidding to stretch the scope of its work for NHS England in a way that goes beyond statements from ministers and NHS leaders that GP data was not in the scope of the FDP contract and would require legislative change … As two separate select committees have noted, public trust and transparency is essential to us being able to realise the fantastic opportunities that technology and data offer.”
Palantir said: “We’ve long argued that data sharing can improve the NHS, for patients and taxpayers, and that our software helps different NHS organisations to do that, while ensuring they maintain full local control over their data. We’ve also always been clear that it is for the government to decide how they roll the software out. These exchanges reflect both of those points.”
The Department of Health and Social Care declined to comment.
Who is Alice Huang, the woman linked to Nvidia’s CEO?
Guardian
www.theguardian.com
2026-11-09 12:57:42
The lack of public information about the Megaspeed boss is fuelling claims she is a Chinese intelligence assetBusiness live – latest updatesThere is little public information available about Alice Huang, the woman reportedly at the centre of the Jensen Huang honeypot allegations, a fact that has onl...
T
here is little public information available about Alice Huang, the woman reportedly at the centre of the
Jensen Huang honeypot allegations
, a fact that has only added fuel to claims she is a Chinese intelligence asset.
She was the chief executive of a Singapore-based datacentre company reportedly suspected of evading US export controls and routing
Nvidia
chips to China.
US officials then came to believe she was also a spy for Beijing who was having an affair with Jensen Huang, the chief executive of Nvidia, the chip company critical to US ambitions of staying ahead of
China
in the AI race.
People briefed on the US intelligence told the New York Times they believed Alice Huang was recruited as part of efforts to learn more about American AI chips, and to try to persuade Nvidia to push for its advanced chips to be made available to China.
China has denied the allegations, calling them “nothing but smears”.
It is unclear exactly when the two Huangs, who are not related, first met.
Alice Huang speaks good English and is well connected within the upper echelons of the global AI chip industry, the New York Times wrote, citing people who had met her.
Megaspeed, the datacentre company for which she was previously listed as chief executive, still describes itself as “a premier business partner of Nvidia” on LinkedIn.
It was in this capacity that the businesswoman was pictured in Jensen Huang’s company several times in 2024 and 2025.
One photo from an industry party in 2024, posted by another attending company on LinkedIn, shows the two sitting next to each other on a couch in Taipei.
The year after, they were filmed together again in Taipei at a dinner hosted by Jensen Huang during Computex, the island’s top tech expo.
Press outside livestreamed footage of the two, seemingly comfortable in each other’s company, with Jensen Huang at one point putting his arm around Alice Huang as she kissed him on the cheek.
The two later left the restaurant in the same car, the footage showed.
Earlier this year, US officials wrote a memo saying the two Huangs had been romantically involved, the Financial Times reported on Saturday, citing sources who had seen it.
On Sunday the Nvidia chief executive sent a company-wide email apologising for an affair.
He did not name Alice Huang but said he would cooperate with an investigation “regarding the national security concerns raised in news reports”.
Alice Huang’s current whereabouts are unknown, and she has not given a public statement about the allegations.
It is unclear what her current relationship is with Megaspeed. Culper Research, the short-selling firm, quoted an employee in May as saying that contrary to public reporting, Alice Huang was “actually still our boss”.
The details of her career before that are difficult to ascertain.
Several media outlets have cited a profile matching her name and picture on a Chinese fund database, which listed previous jobs at banks including HSBC and CITIC, as well as roles at Chinese media outlets CCTV and Hunan TV.
However, reporters have been unable to confirm any of the details listed.
Megaspeed is among a number of south-east Asian firms that buy chips to build facilities and then rent their computing power to companies in China.
According to Singapore’s Straits Times, it was previously known as 7Road International – a Chinese gaming company with ties to state-backed investors.
At the time of the rebrand, it was owned by Huang Le Limited and led by Alice Huang, the newspaper said, before the ownership was transferred to another company in 2023.
Since late 2024, the US government has reportedly been investigating Megaspeed for helping companies in China sidestep American export restrictions.
The New York Times said Singapore questioned Alice Huang during its own investigation into the company, but released her.
Nvidia has previously said it has looked into Megaspeed but found no cause for concern.
The Guardian has contacted Megaspeed for comment.
Show HN: Every satellite that passed over any place this week, and its photos
Russian cloud firm Beget rebuilds from scratch after data wiper attack
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 12:50:32
A data-wiping malware attack has forced Russian cloud services provider Beget to rebuild its cloud infrastructure from scratch, the company said. [...]...
A data-wiping malware attack has forced Russian cloud services provider Beget to rebuild its cloud infrastructure from scratch, the company said.
On the night of November 1st, the attacker gained access to the management systems of the company's entire architecture and deployed malware that erased server data.
The Russian cloud provider detected the attack shortly after the malware activated and disconnected all servers from the network to stop the malicious activity from spreading across its infrastructure.
Beget is a major Russian web-hosting, cloud, and domain-registration provider that serves more than 200,000 customers, including online stores, media, and educational services.
More than a week after the destructive attack, Beget says that 60% of shared hosting and 40% of the dedicated servers it manages have been restored, and recovery is still in progress.
Status page on Beget's homepage
Source: BleepingComputer.com
In a more
detailed announcement
on November 3, Beget says that the attacker gained access to the management layer of its entire architecture and then executed data-zeroing scripts.
Beget said all data in its cloud infrastructure, including VPS, S3, and Kubernetes, was lost, along with CDN settings and IP configurations.
The company also said that VPS binary backups were completely lost, and VPS file backups have partially survived. A
November 6 assessment
specified that these would be available for roughly half of its VPS users.
“Unfortunately, it is impossible to recover all data,” Beget said about VPS data, adding that it "spent a long time looking for solutions, but according to our current assessment, VPS file backups will be available for only half of users."
Even when a backup exists, the company said it would take time to match it to specific users, a task it describes as “technically complex.”
The scale of the recovery effort is massive, with roughly 1,000 servers requiring manual checks for vulnerabilities and hidden scripts before they can be brought back online, said the firm.
Beget is taking a cautious approach, treating all parts of its infrastructure as potentially infected.
“We are therefore cleaning out everything we can and reworking every potentially vulnerable point, including those that previously did not appear to pose a risk.”
Beget said its investigation did not find any evidence that the attacker tried to download or modify any data on the compromised servers, and that the attack appears to have been focused solely on destruction.
The company has notified the police and government agencies and is also working with cybersecurity firms to remediate the incident and recover as soon as possible.
Rubio Warned Officials About Nvidia Chief’s Entanglement With Chinese Spy - the New York Times
Daring Fireball
www.nytimes.com
2026-11-09 12:47:22
Maggie Haberman, Jonathan Swan, Julian E. Barnes, and Tripp Mickle, reporting for The New York Times (gift link):
Mr. Rubio’s memo was circulated to administration officials with
high-level security clearances ahead of a trip Mr. Trump took to
China in May, the people briefed on the matter said....
Raspberry Pi has announced
yet another price increase
, this time for most models with 16GB of RAM. The Raspberry Pi 5 16GB now sells for $385, an $80 increase compared to the
last price hike in April
, and the Raspberry Pi CM5 system-on-module gets a $40 increase, starting at $375 for the Lite model without wireless.
The “good news” is that the Raspberry Pi 500+ mechanical keyboard PC stays at the same price, starting at $410. I suppose they can afford it on that model, because it’s already richly priced and the demand must be lower than for single board computers and compute modules.
Here’s the updated price list for the Compute Module 5 16GB variants.
Part number
eMMC
Wireless
Price
CM5016000
0GB (Lite)
No
$375
CM5016016
16GB
No
$400
CM5016032
32GB
No
$410
CM5016064
64GB
No
$410
CM5116000
0GB (Lite)
Yes
$380
CM5116016
16GB
Yes
$405
CM5116032
32GB
Yes
$415
CM5116064
64GB
Yes
$415
Interestingly, the price is the same whether we get 32GB or 64GB eMMC flash.
I still remember people complaining about the
$120 launch price of the Raspberry Pi 5 16GB
. That was less than two years ago, and that price would feel like a bargain today. Of course, Raspberry Pi isn’t the only company impacted by high RAM prices this year. Here’s a recent list of price hikes for popular SBCs and SoMs:
October 19, 2026 –
The Arduino VENTUNO Q now sells for $399
instead of $299. In all fairness, the latter was an introductory price, so the higher retail price was expected.
Of course, all other vendors like Orange Pi, Radxa, Hardkernel, Banana Pi, and so on, also had their own price increases, just not as broadly advertised across the web.
So when will this all end? It’s hard to know. Micron expects the RAM shortage to last
at least until 2028
, and SK Hynix thinks it could only be
resolved sometime in 2030
. On the flip side, the stock prices of memory vendors have cratered in recent months, as investors worry about the sustainability of profits, which could signal cracks in the current cycle. Some of their customers also struggle to get financing as the price of tokens keeps collapsing, and the profitability of AI is put into question. The war in the Middle East is also a wildcard, as critical materials (e.g., helium) required for the manufacturing of wafers and chips could also experience shortages. We’ll have to wait and see.
Thanks to TLS and Anonymous for the tip.
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via
cryptocurrencies
,
become a Patron
on Patreon, or purchase goods on
Amazon
or
Aliexpress
. We also use affiliate links in articles to earn commissions if you make a purchase after clicking on those links.
Going back two years on Hacker News is like entering another, better universe
A San Diego billboard, placed near military installations, calls for an end to U.S. wars. | (Photo courtesy of Veterans for Peace Chapter 91)
Every year, we pause on Veterans Day to celebrate our veterans for their service. But for decades now, many returning veterans have asked us for more than platitudes.
“You’re making me nervous every time you thank me for my service,” Veterans For Peace co-founder Doug Rawlings wrote in his poem “Walking the Wall.” He added, “nothing really is as it seems.”
Many of the thousands of sailors who disembarked from the USS
Abraham Lincoln
in San Diego this October would agree. For most of this year, the ship was stationed off the coast of Iran, where the Trump administration launched a senseless and unwinnable war of choice this February.
For months, sailors were subjected to “moldy showers, broken toilets, laundry down for weeks, long stretches with no hot water, a meal that came down to half a cup of rice and two tortillas. No soap, deodorant, or toothpaste,”
according to California Congressman Mike Levin
.
This lengthy confinement impacted their mental health, too. One sailor jumped overboard in an attempted suicide. In fact, according to Pentagon officials,
eight other sailors
attempted suicide before the ship returned from its tour.
In addition,
Bloomberg News
reported
a cluster of five suicides among those working with Cyber Command, concluding that understaffing and increased stress from our war in Iran was a factor.
This Veterans Day, Americans should ponder how we can stop these military adventures that harm our own soldiers as much as they damage our perceived enemies.
In their new book,
Courage or Complicity: How Veterans Are Responding to the Assault on Democracy,
Steve Early and Suzanne Gordon offer an impressive survey of how politicians have underfunded and underserved veterans. The authors point to new research linking veterans’ disabilities, as well as a higher likelihood of being incarcerated, directly to their service.
Courage Or Complicity
paints a damning picture of military life for women soldiers as well, reporting that one in four experience sexual assault. As surveyed by the advocacy group Protect Our Defenders, 44 percent of these service members were encouraged to drop their complaints. Some were even given “other than honorable discharges,” Early and Gordon report, often depriving them of future VA healthcare.
They cite a 2018 survey of female veterans by the Disabled American Veterans, which found that 60 percent of female veterans felt that their military service had been injurious to their mental or physical health. The suicide rate among female veterans is 2.5 times higher than women in the general population — and increasing faster than male veteran suicides.
The authors of C
ourage Or Complicity
are an authoritative source on the Trump administration’s drive to dismantle and outsource VA health care. Often, those who served suffer long waits, only to be seen by physicians who are unfamiliar with their experiences — including medical conditions resulting from exposure to chemical weapons and burn pits, as well as PTSD and moral injury.
Early and Gordon also offer an encouraging look at how activist veterans are organizing to build unity among veterans groups and a wide range of trade unions that represent federal employees — including those who provide direct services to veterans and those who help all Americans.
Most heartening are the stories of rank-and-file workers, many of them veterans, who began creating cross-union coalitions, such as the Federal Unionists Network, even before their national leaders began to unite and mobilize.
When the USS
Abraham Lincoln
finally pulled into San Diego, sailors were greeted by family members and politicians clamoring to thank them for their service. Nearby, Veterans For Peace arranged for a giant billboard that read: “Respect Our Sailors and Marines. Bring Them Home. End The Wars!’
This year, that would be worth more than platitudes.
Ron Carver, David Cortright, and Barbara Doherty are editors of the book Waging Peace in Vietnam: U.S. Soldiers and Veterans Who Opposed the War.
OtherWords is a free editorial service published by the Institute for Policy Studies. Each week, we publish a package of original op-eds and distribute them to readers, editors, and publishers through our website and newsletter. Each year, hundreds of newspapers and websites reaching millions of readers use this work.
Nvidia’s board needs to do some succession planning – sharpish | Nils Pratley
Guardian
www.theguardian.com
2026-11-09 12:06:23
The chipmaker faces business risks and political scrutiny due to its over-reliance on founder and CEO Jensen HuangWhy is Nvidia’s Jensen Huang at the centre of a US-China row?Too big – and too well-connected – to sack? One doesn’t have to be overly cynical to think Jensen Huang, the Nvidia boss, sta...
T
oo big – and too well-connected – to sack? One doesn’t have to be overly cynical to think Jensen Huang, the
Nvidia
boss, starts with one huge advantage as the chipmaker’s board starts its independent investigation into
the alleged honeytrap spy scandal
. The world of US big tech is not, to put it mildly, strong on checks and balances on a founder’s power.
Huang does not enjoy the supercharged voting rights that are par for the course elsewhere – his shareholding is a plain vanilla 3.6%. On the other hand, Nvidia’s board does not appear to have spent much time worrying about succession planning and “key person risk” or other standard concerns of corporate governance wonks outside the US.
There isn’t even a Nvidia board member with the title of chair. Instead, a “lead director” is “designated annually by a majority of the independent directors”, which sounds like a formula for ensuring the attention remains wholly focused on Huang, the sole executive member.
It’s the American way, of course: the cult of the superstar founder or chief executive runs deep and there is a fair argument that such set-ups encourage adventurous risk-taking in pursuit of grand corporate visions. But such governance arrangements look unsuited to situations where the behaviour of the boss is under scrutiny and the role of the board itself is being examined.
The investigation will examine whether Huang “has been the target of a foreign intelligence effort” but the independent directors stressed there is now “no reason to believe that either national security or Nvidia secrets were compromised.”
OK, but legitimate questions don’t end there. Did Huang break
Nvidia’s internal code of conduct
? Did he mislead the board about his relationship with Alice Huang (no relation), the alleged Chinese spy? Was the board aware of US intelligence reports that Ms Huang had been hired by China’s ministry of state security to spy on the Nvidia boss, as reported by the New York Times? What security precautions were in place? Other boards in other countries might have insisted on suspending the boss until all the facts are in.
In the meantime, the defence of Huang from elsewhere has begun. “An honourable guy. I think he probably has an excuse for it,”
said Donald Trump
. “Jensen is irreplaceable for America’s AI leadership,”
opined Shaun Maguire
, a partner at Sequoia Capital, the powerful Silicon Valley investor. Yes, there is little doubt the US tech and political establishment would like this saga to end up in a series of bland conclusions about an everyday infidelity.
Nvidia’s board, however, would be wise not to rely on the “irreplaceable” consensus holding, or the political heat going away. This affair will be trawled over by newly empowered Democrats in Congress because it touches on how forcefully – or not – the administration has been enforcing its own national security restrictions on chip sales to China. This process will go on for months. Huang’s personal relationship with Trump will come under the spotlight like never before.
Will the Nvidia boss, even if he is cleared by the board’s investigation, still look so all-conquering by the end? His lobbying clout in Washington will be diminished. And Nvidia’s shareholders, if they’re doing the job properly, will surely insist on far greater visibility on where the company’s chips end up.
There may come a point where it is in Nvidia’s own interests to move on from the Jensen Huang era. The 63-year-old deserves all his accolades for spotting the enormous AI opportunity for the GPU chips that originated in the world of video games. The rise of Nvidia has been extraordinary. But over-reliance on one individual is also a business risk. Time for some overdue succession planning – it may be needed.
Y/N (YC S23) Is Hiring a Growth Lead to Distribute Superhuman A.I. Storytelling
Y/n is creating a new form of entertainment: interactive stories. Y/n lets people play a character in a book, finally letting anyone meddle with the universes and characters they care about.
Our mission is to build a superhuman A.I. storyteller and distribute it to billions of people. We're giving the technology to creators, so they can turn their most ingenious ideas into stories others can live in.
To date, people have sent over one billion messages on Y/n. Teenagers and twenty-somethings are going to imaginary schools, falling in love with fictional people, and living out entire lives in A.I.-generated stories made for them.
Soon, billions will play stories too, across every genre, in text, in video, alone or with their friends. By 2030, playing stories will become the dominant form of entertainment.
Our Culture
Our culture is simple:
Story quality determines Y/n's success, so we hire people obsessed with making stories great.
We are commercially minded. We want people who use their abilities to make numbers go up.
We run Y/n like a hedge fund: a small group of people making very big bets on model training and network effects. We hire people who think rigorously and own their domain.
We've raised $14M from top investors, and we're hiring for several roles.
If you want to live in pursuit of superhuman storytelling, join us.
The Role
TL;DR: Come up with good ideas for marketing channels, test them, and own them end to end.
This can mean running our ads and creative pipeline: commissioning ads, learning what works, doubling down, and scaling spend across channels.
Or it can mean running creator partnerships. E.g., partnering with BookTokers, convincing YouTubers to film reaction videos, and building out a UGC creator program.
Mainly, however, you’ll be our first growth hire. The job is finding out what works.
Qualifications
You are smart as hell, hungry to win, and believe in our values.
You get our audience: teenagers and twenty-somethings who live on the internet and love stories and fandoms.
You can read charts well, want to measure everything, and kill what doesn't work.
You have good takes, proactively.
You've owned a meaningful paid budget across Meta, TikTok, or Google.
You are comfortable with open-ended work like "figure out the good marketing channels."
Some experience as an early member of a project or company is a nice-to-have. Holistic growth experience is good too.
Hiring Process
We aim to make hiring simple. You'll have:
Two interviews with the team.
A day-long (paid) work trial.
Logistics
Location: San Francisco, California (on-site)
Compensation: $130,000–$300,000 USD annually, depending on background, skills, and experience.
Visa Sponsorship: We sponsor visas. While we can't guarantee success for every candidate or role, if you're the right fit, we're committed to working through the visa process together.
Benefits: Generous health, dental, and vision benefits, unlimited PTO, and relocation support as needed.
Y/n
is an app where you play a character in your story. Be a boarding school student and get the boys to fall in love with you, or plan a jailbreak with Sherlock Holmes.
Stories are made for you. Your texts change the plot and how characters feel about you, so no two playthroughs are the same (but you can rewind).
There's a Y/n story for every mood: romance, fanfiction, fluff, mystery, and more. Discover 10M+ stories created by the community.
Can't find the one you want? Write and publish your own.
They’re calling the new feature
Adaptive Dark Mode
™
. I’m learning that other browsers already had a
similar feature
. I assumed people relied on add-ons like
Dark Reader
(and millions do). Regardless, pushing what is effectively an accessibility option to the forefront goes a long way to help people respect it.
Personally I prefer reading with a dark theme for long-form content. Dark is not my brand though and I don’t believe every website needs to support
colour scheme preference
automatically. A good browser has reader mode, I use that all the time.
“Just enable reader mode!”
What a load of rubbish. You have to understand that sometimes I just write stuff and I don’t read it back. This also contradicted my previous statement:
That said, in [current year] brands with a digital presence — all of them? — should have a colour scheme for both.
That’s probably more true.
Certainly websites must work for forced dark mode. (Any site forcing
light only
itself upon users should go straight to jail.) So either provide a dark mode, or be prepared to test against every adaptive and forced dark mode implementation, or just let your website look broken. Probably easier to design a dark mode then?
So that’s what I did, again.
Maybe you noticed? If not, there’s a toggle button up top. At the risk of weighing in on
the conversation
I’ve opted for a two-state single button. I default to system preference. The mystery button flips between light and dark. Want to return to system default? Tough luck! You shouldn’t have clicked it. Delete
local storage
nerd!
Most of my light/dark theming is done by customs properties. The default light colours (A) are set on the root
<html>
element. A style query applies the dark colours (B) on the
<body>
element. For edge cases that don’t follow the A/B rule I can use one of two techniques.
Note that I set
color-scheme
to make
light-dark()
aware of the user’s choice that might override their system preference. I wonder if I can do this once:
body{color-scheme:var(--theme);/*safe?*/}
Is that safe? Let me know!
It’s not safe to do on the root
<html>
element because browsers checks that for adaptive dark mode etc. I’ll stick to the verbose style queries for now until I’m sure.
There’s a sprinkle of JavaScript to use local storage for the toggle button.
It’d be better to use a cookie and a server-side template. My website is hosted on a
static CDN
and I’m not adding edge worker latency, so I’ll risk
Flash of inAccurate coloR Theme
(FART)
. My site only risks a FART if a user’s choice doesn’t match their system preference. A week into my
Noscript November
experiment I see most websites are prone to a big FART because they rely entirely on JavaScript to enable dark mode.
I’m not happy with my button using a hidden label. Bit of a design failure I need to address later. My original goal was to have multiple themes but I ran out of time.
At the risk of soliciting replies to a question I didn’t ask, I would like your feedback on my choice of dark mode colours!
Do they look nice?
I don’t care whether dark mode makes your eyes bleed (turn it off) or you absolutely must have a 4-dimensional toggle.
Elsewhere
Stephanie Eckles
wrote about the same CSS technique I use.
Dave Rupert
has explored the
light-dark()
with
color-scheme
variations. I saw
Una Kravets
is using
contrast-color()
with style queries to do something extra fancy.
Stu Robson
has written in depth on dynamic colour schemes too.
Sara Joy
has a great CSS-Tricks article on the topic.
If you read this entire post in an RSS reader and never clicked through, what a power move!
Silicon Valley and Trump rally behind Nvidia CEO after his affair with alleged Chinese spy
Guardian
www.theguardian.com
2026-11-09 11:42:35
Elon Musk and other finance moguls defend Jensen Huang after he admitted to the affair in an email to employees Donald Trump, Elon Musk and prominent finance moguls have expressed their support for embattled Nvidia CEO Jensen Huang, as the head of the world’s most valuable chip company faces an inte...
Donald Trump, Elon Musk and prominent finance moguls have expressed their support for embattled Nvidia CEO Jensen Huang, as the head of the world’s most valuable chip company faces an internal investigation over a romantic relationship with an alleged Chinese spy.
“I have not spoken to him about it,” Trump told reporters on Sunday. “I just know he’s a fine person, but you never know what is going on. I’m sure, I hope everything’s fine. He’s done such an incredible job”.
“I think he’s an honorable guy. I think he probably has an excuse for it,” Trump later added, saying he believed that Huang would and should stay on as CEO.
Huang’s defenders framed his affair as a personal lapse in judgment rather than evidence of treachery against the United States, which has imposed strict limits on what chips
Nvidia
can sell to China.
Huang, who has been married to his wife, Lori, since 1985, admitted in an email to employees on Sunday that he had an affair and that he would cooperate with an internal investigation. Nvidia’s board of directors put out a statement the same day that the company was launching a probe regarding reports that Huang was the target of a foreign intelligence effort.
The chip mogul is alleged to have had a relationship with Alice Huang, a businesswoman that US intelligence services suspect of spying for the Chinese government,
according to The New York Times
. Trump was reportedly briefed on the relationship last year, the Times reported, but took no action. Alice Huang and Jensen Huang are unrelated, with the latter being one of the world’s richest men and CEO of Nvidia, worth more than $4tn, for the past 33 years.
US intelligence agencies believe Alice Huang, acting on behalf of Beijing, pushed Jensen Huang to lobby Trump for relaxed export controls on Nvidia’s sales in China, which he has done multiple times publicly. Nvidia said in a statement that neither trade secrets nor US national security had been compromised.
The affair and alleged intelligence operation involving Huang could have far reaching implications for Nvidia and the tech industry, which are already enduring a
period of high market volatility
. Huang’s leadership of Nvidia, which is deeply financially intertwined with other leading tech companies like OpenAI, has long been viewed as crucial to the company’s success and stability.
As news of the scandal broke over the weekend, Musk and prominent investors shared their support of Huang. Musk posted “I agree” in response to prominent venture capitalist Shaun Maguire’s defense of Huang. Maguire argued the Nvidia CEO “did something incredibly dumb” but that he is “one of the greatest entrepreneurs of this generation”.
“Two mistakes don’t make a right, and I believe Jensen is irreplaceable for America’s AI leadership,” Maguire posted. He stated the Nvidia CEO “did something incredibly dumb” but that he is “one of the greatest entrepreneurs of this generation”.
“Let’s also not nuke our AI industry because China ran a successful intel op,” Maguire added in a separate post.
Bill Ackman
, the US hedge fund manager and pro-Trump billionaire, meanwhile, suggested that Huang is “human” and deserves public support over the affair.
“He is an incredible human. Even incredible humans make mistakes,” Ackman posted. “He takes full responsibility as he should. We should all support him and his family. Onward.”
Ackman followed up with another post later clarifying that he wasn’t suggesting Huang “gets a free pass” but that he was “hoping for a simple affair, not a risk to our national security”.
Show HN: DBDelve – Open-Source DB Client Made with Rust and GPUI
Hi HN, I’m Shayan and a few months ago I started building a DB Client DBDelve with a focus on performance and just making something that feels good to use (in the spirit of Zed, Ghostty, and other tools that just feel pleasant to use).
For my workflow I’ve always looked for performance, especially since some time ago I had a really outdated machine and any kind of bloat was really noticeable, I remember using DBeaver and it just crashing on me multiple times, I also had to use postGIS which just made it worse. I migrated all my essential dev tools to use the ones with performance in mind (Zed, Ghostty etc) but the only thing that was missing was DB Client. The main choices everyone has are DBeaver which is a memory hog and an overkill for most of the tasks imo. The other options like Datagrid, Beekeeper, TablePlus are either electron based so bloated and memory hogs or paid and closed-source.
DBDelve 0.3.6 against DBeaver 25.3.1 on the same Postgres table, median of 5 runs each (2026-10-11, M1 Pro, 32 GB). Times are from the action to the rows rendered.
DBDelve DBeaver
Launch 1.1 s 5.2 s
Idle memory 133 MB 606 MB
1,000-row query 0.21 s 1.96 s
1M rows, time 56 s 208 s
1M rows, memory [1] 4.9 GB 17 GB
[1] The whole 1M-row, 100-column table pulled into memory on purpose, with the row limit off. Not a normal use case; DBeaver's heap limit had to be raised manually for the benchmark.
It has most of the features most devs would need for 90% of their workflow plus some more I thought would be a nice touch:
Readonly, read-write and Full Access modes
Glass themes (If you’re into them, I am)
Keyboard focused with every keybinding customizable
Organization of connections into projects
Me and some other folks have been daily driving it for more than a month now and most good feedback comes on it having a really simple UI to navigate, very stable for its age and the performance of course. I’m also sharing here because those people tell me this has potential to grow so I’m trying my hand at distributing it.
Just want to give a huge shoutout here to the Zed team for GPUI, it's a breeze to work with if you just get through them not updating the crate officially on crates.io but the community has found the solutions for it, you just have to dig deep for it. It performs extremely well and just the HTML-like structure of it, makes it easy to understand for someone from a web dev background and agents are very good at writing it too. GPUI component also solves a lot of problems with having a good component library we can use. I think for anyone starting a GPUI project now, GPUI-kit makes a lot of sense, it just bundles GPUI, GPUI-component together and has some optimizations adding retained mode which is experimental but could provide a lot of benefit, so think all things considered it should be the default way.
The major optimization I did was just lowering the memory overhead by using packed rows which reduced the memory usage by 40% on large datasets (8.1GB to 4.9GB on a 4GB table loaded in app), everything else came bundled in with Rust and GPUI mostly or they just made it very easy.
Limitations:
It's not signed and notarized, identity verification from apple's side has been a nightmare but it should be signed soon.
Don’t expect feature parity with more mature clients for now, the general direction of this right now is the zed way of adding features in but after making sure the core workflows are done with a high quality.
Do give it a try, you can import your connections from dbeaver and tableplus.
Binance denies data breach after alleged ShinyHunters claims
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 11:12:39
Binance, the world's largest crypto exchange, has denied claims of a new security breach made by a threat actor using the 'ShinyHunters' handle on a newly emerged underground cybercrime forum. [...]...
Binance, the world's largest crypto exchange, has denied claims of a new security breach made by a threat actor using the 'ShinyHunters' handle on a newly emerged underground cybercrime forum.
This follows the threat actor, believed to impersonate the ShinyHunters extortion gang, putting up for sale what they claimed were records of 335 million Binance users.
The allegedly stolen information includes Know Your Customer (KYC) documents, internal infrastructure information, users' account passwords, crypto wallet private keys, transaction history, emails, and phone numbers.
The threat actor also asked for $900,000 for the data, adding that Binance has only "two options left: pay or leak."
However, a Binance spokesperson told BleepingComputer that the company found no evidence of a breach and said that this is likely a scam.
"We have found no evidence that Binance systems, customer KYC data, account credentials, wallet private keys, or internal infrastructure information were compromised in connection with this listing," the Binance spokesperson said.
"Similar past listings have often involved infostealer malware data collected from users' own devices rather than a breach of Binance systems."
Binance breach claims (BleepingComputer)
Binance also shared some aspects of the breach claim that are inconsistent with how the crypto exchange stores user data. BleepingComputer was told that Binance doesn't hold private keys for users' external wallets, doesn't store user passwords in plaintext, and no longer operates in some of the jurisdictions the threat actor referenced in their cybercrime forum entry.
Other forum users expressed skepticism regarding the threat actor's claims, questioning whether the data they were selling was legitimate and asking: "If you hold the private keys to all the wallets, what would be the justification for selling this?"
While Binance denied these breach claims, it advises customers never to share passwords, 2FA codes, seed phrases, or private keys, and to stay wary of phishing attempts.
This comes after
Binance confirmed
last week that North Korean hackers tricked an employee into installing malware during a fake job interview, allowing them to
steal about $6.34 billion in cryptocurrency
after compromising the company's wallet infrastructure.
The FBI
has attributed the breach
to the TraderTraitor North Korean state-backed hacking group, also tracked as Lazarus Group, Jade Sleet, and APT38.
TraderTraitor was previously linked to other major crypto theft incidents, including the
theft of $1.5 billion
in the February 2025
Bybit hack
.
Hackers exploit SSHole OpenSSH flaw to breach Linux systems
Bleeping Computer
www.bleepingcomputer.com
2026-11-09 11:04:57
Hackers are actively exploiting the "SSHole" vulnerability (CVE-2026-123158) in OpenSSH to execute commands, steal credentials, and establish persistent access. [...]...
Hackers are actively exploiting the "SSHole" vulnerability (CVE-2026-123158) in OpenSSH to execute commands, steal credentials, and establish persistent access.
Multiple cybersecurity firms have confirmed the attacks, reporting that exploitation attempts began on November 5, the day a proof-of-concept exploit became available, with successful exploitation recorded the following day.
Disclosed by security researcher
Ozgun Kultekin
last week, SSHole allows bypassing authentication in OpenSSH running on certain
musl-based
Linux systems, including the lightweight Alpine distribution used in cloud and virtual environments.
The flaw lets attackers log in to accounts with a password hash is set to an asterisk (*) to prevent password logins.
An oversized password causes musl’s password-hashing function to return * on error, which OpenSSH mistakenly treats as a match for the account’s stored value.
Kultekin explained that exploitation requires specific authentication settings, does not affect accounts with valid password hashes, and can lead to root access where the compromised account has passwordless administrative privileges.
OpenSSH maintainers fixed the vulnerability in version 10.6p2 released on November 5, while exploit code became available roughly four hours later.
Finnish security company
Defused said
over the weekend that it had observed "a small amount of actors" trying to exploit SSHole, although the activity was not widespread.
Threat intelligence company
GreyNoise recorded
the first successful exploitation of SSHole in the wild on November 7 at 00:46 UTC, approximately 40 hours after the fix.
The researchers logged 16 successful exploitation chains targeting networks protected by GreyNoise from six source IP addresses linked to post-exploitation activity. The company says that these attacks are not representative of the broader activity involving SSHole.
In the attacks that GreyNoise observed, the threat actor ran system and container reconnaissance, initiated queries to cloud metadata services, attempted to read password hashes and root SSH keys, and tried to modify SSH ‘authorized_keys’ files to gain persistent access.
One attacker gained root privileges and installed TAC Agent, a Python command-and-control agent. However, the implant couldn’t reach its command-and-control (C2) server at ‘tac.vpnla[.]org,’ and never received a task.
TAC Agent and C2 exchange
Source: GreyNoise
Analysis of the TAC Agent payload shows that the implant supports shell command execution, extensive system reconnaissance, file upload/download operations, and can update itself.
The agent has no built-in persistence, so the attackers attempt to secure it by configuring a startup service.
GreyNoise notes that the implant’s comments, logs, and errors were in Chinese, which may be used in conjunction with other evidence to determine the attacker’s origin.
A finding that suggests possible automated operation is a missing tool check that returns feedback which could help an automated planner revise commands as needed for the attack to proceed.
Overall, GreyNoise has recorded 27.5 million port-22 scans and 20.1 million attempted SSH sessions, though these aren’t confirmed SSHole attacks.
Sensors from network security company
Previdian also confirmed
successful SSHole exploitation, with telemetry data showing 20 attempts from 13 attacker IP addresses in nine countries.
Offensive security firm
watchTower said
on November 6 that it observed SSHole being exploited in attacks associated with botnets and cryptomining activity.
System administrators should update OpenSSH as soon as possible, or disable SSH password authentication on systems affected by SSHole.
It is also recommended to check for unexpected successful password logins to accounts whose /etc/shadow password field is *, unauthorized SSH keys, and TAC Agent files or startup services.
Comments (0) Trackbacks (0) Leave a comment Trackback