10 interesting stories served every morning and every evening.

AI-Generated Images Discourage Me From Reading Your Blog

nelson.cloud

I have a grow­ing ha­tred for AI-generated im­ages in blogs. It makes me won­der if the text in the blog posts is AI-generated to some ex­tent. It’s al­ways dis­ap­point­ing see­ing these im­ages in blogs run by in­di­vid­u­als. I ex­pect this from cor­po­rate blogs but not in­die blogs.

I’d rather see a shitty Microsoft Paint draw­ing as op­posed to some AI im­age.

I know there are plenty of things you can roast my blog for but at least you know for a fact you’re get­ting the thoughts of a real hu­man be­ing and not some LLM.

If you run a per­sonal blog, please avoid AI-generated im­ages.

Discussion over at Hacker News

In Memory of My Wife, Elise Cawley (1961–2026), with Thanks for 36 Wonderful Years

writings.stephenwolfram.com

Something ter­ri­ble just hap­pened. My wife, Elise Cawley, was re­cov­er­ing from heart surgery and had just at­tended vir­tu­ally a cel­e­bra­tion for one of our chil­dren when she had a freak, vast car­dio­vas­cu­lar event—and died in­stantly. We had been to­gether for 36 years. The pic­ture above was taken just hours be­fore she died.

In all the writ­ing and pub­lic speak­ing I have done, I have cho­sen, as a mat­ter of pri­vacy, to say lit­tle about my fam­ily. But now that Elise is gone I can­not re­strain my­self from telling the world some­thing about the re­mark­able per­son with whom I shared the past 36 years of my life.

It was September 17, 1990, and I was in New York City. The event I had been at­tend­ing fin­ished a lit­tle early, so I de­cided to drop in on a friend of mine. And there, sit­ting styl­ishly on the floor, was Elise, a some­what bash­ful but ob­vi­ously bril­liant young pure math­e­mati­cian. It took me a cou­ple of weeks to call her. But from that mo­ment on we talked es­sen­tially every day for 36 years—un­til the day she died a week ago.

Somehow in the shock of what has hap­pened it feels as if I just met Elise, and now she is gone. But ac­tu­ally there were 36 won­der­ful years in be­tween, in which my life was lit up by Elise’s in­tel­lect, love and en­ergy. She was deeply the­matic, able to get, with re­mark­able ease, to the essence of things. Truth, beauty and our fam­ily and four chil­dren were her great themes. She al­ways told me that truth and beauty were ul­ti­mately the same thing, and that one day I would un­der­stand that. What I could see is that she her­self loved to cre­ate beauty—whether in math­e­mat­ics, in­te­rior de­sign, ar­chi­tec­ture or per­sonal style. She was a force­ful in­tel­lect, kind and sweet, but per­sis­tent and of­ten feisty in ar­gu­ing for what she thought was true.

Despite her deep knowl­edge and ca­pa­bil­ity in ab­stract math­e­mat­ics, she was at some level fun­da­men­tally a hu­man­ist, think­ing about the world in hu­man terms. She de­cried dry mod­ernism and was drawn to the hu­man con­nec­tions of clas­si­cism. In re­cent years she thought in­creas­ingly about the foun­da­tions of math­e­mat­ics, tak­ing a Platonic view of truth and lament­ing the twen­ti­eth-cen­tury tran­si­tion to a more for­mal­is­tic ap­proach.

There was al­ways a cer­tain lively spon­tane­ity to Elise, mixed with a drive to­wards the high­est stan­dards of in­tel­lec­tual and aes­thetic rigor. People’s first im­pres­sions of Elise tended to be of her per­sonal en­ergy, her lively style and her keen in­tel­lect. But as they got to know her, they would also come to see how much she cared about the peo­ple around her and how much lov­ing thought and ef­fort she would put into things she did for them. Whether it was a gift or the in­te­rior de­sign of a space, Elise would ap­ply her cre­ativ­ity and go back and forth un­til it was just right.

Our four chil­dren were a defin­ing part of Elise’s life, and she was im­mensely proud of all of them (as am I!). She had her own unique re­la­tion­ship with each of our chil­dren that helped them each de­velop in their own way. She also built us a won­der­ful home, full of warmth, ar­chi­tec­tural beauty and cre­ative de­sign. She took great plea­sure in per­fect­ing every de­tail, main­tain­ing re­mark­able over­all co­her­ence, with dashes of the un­ex­pected.

Elise was a very fine math­e­mati­cian, top flight in tech­ni­cal mas­tery but, more im­por­tantly, able to the­mat­i­cally pull to­gether grand con­cep­tual arcs. She was al­ways drawn to el­e­gance, of­ten with an ab­stract geo­met­ri­cal bent, and by the time I met her she had al­ready es­tab­lished her­self with re­sults that con­tinue to be cited to­day. Later in life Elise would re­fer to her­self as a retired math­e­mati­cian”, but if ex­posed to her kind of math, she would im­me­di­ately en­gage with great en­thu­si­asm.

In all my years with Elise we never di­rectly worked to­gether on in­tel­lec­tual pro­jects. Perhaps we were both too strong willed, and with her quick mind, it did not take long for her to get im­pa­tient with the dif­fer­ences in our styles of think­ing. Still, I would of­ten tell her about work I was do­ing. And it was re­mark­able how ef­fort­lessly she would see deeper themes, which she would then ex­plain back to me, with vary­ing de­grees of pa­tience.

She liked my con­cept of com­pu­ta­tional ir­re­ducibil­ity, and I think was pleased that the ef­forts in sci­ence on which I had spent so many of our years to­gether had led to a place that high­lighted the lim­i­ta­tions of sci­ence and of sci­en­tism, and aligned well with her hu­man­is­tic world­view. When I be­gan to form ideas about ob­servers and the ru­liad, she was far ahead of me in see­ing their philo­soph­i­cal and meta­phys­i­cal im­pli­ca­tions.

For years, the foun­da­tions of math­e­mat­ics were some­thing of a sore point be­tween us (and our chil­dren were highly amused that one of the most vig­or­ous ar­gu­ments they ever saw be­tween us was about the meta­phys­i­cal char­ac­ter of the con­cept of a cir­cle). Elise main­tained that raw ax­iomatic for­mal­iza­tion can­not be the true essence of math and that math is re­ally some­thing much more hu­man. And fi­nally, just a few years ago, by a long and cir­cuitous route, I came to re­al­ize that—de­spite my ob­sti­nate in­sis­tence to the con­trary—she’d been right about this all along. But then she made other as­ser­tions too, that she thought were quite sig­nif­i­cant. Like that the fun­da­men­tal ab­strac­tions from which we build math as we know it are the con­cept of point (which she viewed as equiv­a­lent to space, con­ti­nu­ity and in­fin­ity), and the con­cept of num­ber. She also as­serted that physics dif­fers from math mainly in its in­tro­duc­tion of the con­cept of time.

While Elise could be a very orig­i­nal thinker, she also be­lieved in the value of ex­ist­ing wis­dom and ex­ist­ing ways of do­ing things—and was con­stantly telling me that I should­n’t try to fig­ure out ab­solutely every­thing (including about every­day life) from first prin­ci­ples. Being with Elise was al­ways some­thing of an ad­ven­ture. There was spon­tane­ity (“no plan; let’s play it by ear”), yet also pre­ci­sion and per­fec­tion. And there were the force­fully de­liv­ered bursts of in­sight, not just about math and ab­strac­tion, but also about the hu­man con­di­tion and the way the world works. Elise would say that there were peo­ple of ac­tion, and there were philoso­phers. She saw her­self more as the lat­ter. She had strong opin­ions about how things should be in the world. But she was much more in­ter­ested in fig­ur­ing out what should be than in what she saw as the grind of try­ing to make it ac­tu­ally hap­pen.

Elise was a per­son who had both great con­fi­dence and great hu­mil­ity. While she was al­ways con­vinced that she was right in things she thought (and in fact usu­ally was), she was never one to ad­ver­tise her ca­pa­bil­i­ties. Still, if ever a con­ver­sa­tion turned to things she knew or cared about, she would­n’t re­strain her­self from mak­ing what was of­ten a deeply in­sight­ful con­tri­bu­tion.

I al­ways thought Elise and I were an out­stand­ing match—sim­i­lar in many ways, yet also com­ple­men­tary. We both val­ued the­matic think­ing (though in many do­mains she was bet­ter at it than me), and we shared an ap­pre­ci­a­tion for aes­thet­ics and work well done. But for ex­am­ple our ways of in­ter­act­ing with peo­ple were some­what dif­fer­ent. My chil­dren say I have only one mode of in­ter­ac­tion: full on. Elise was at some level more in­tro­verted and would imag­ine her­self to be shy—though once en­gaged she would be­come highly talk­a­tive and an­i­mated. And when it was just Elise and me on our own, we al­ways seemed to have things to talk about, in fact an in­fi­nite num­ber of things.

Elise was born in 1961 in Urbana, IL—ironically not far from the head­quar­ters of our com­pany—when her fa­ther was a physics grad­u­ate stu­dent at the University of Illinois. The sec­ond of four chil­dren, she grew up mostly in Columbia, MD, as a top stu­dent, par­tic­u­larly rec­og­nized for her math and her the­matic es­says. As she of­ten men­tioned to our chil­dren, in 6th grade her teacher char­ac­ter­ized her writ­ing as the cat’s pa­ja­mas”—and for a while she imag­ined grow­ing up to be a writer. In high school she had the for­ma­tive ex­pe­ri­ence of go­ing to the Hampshire sum­mer math pro­gram, where for the first time she met other peo­ple who were in­tensely in­ter­ested in math.

She went to MIT for col­lege, falling in with a group that in­cluded sev­eral later promi­nent math­e­mati­cians. She al­ways told me that what re­ally ig­nited her in­ter­est in con­cep­tual pure math­e­mat­ics was an epiphany she had in a class she took about topol­ogy. At MIT, she sup­ported her­self by work­ing in the the­sis bindery, us­ing her cal­li­graphic skills to la­bel the­ses. She also made up lan­guage puz­zles for a lan­guage ac­qui­si­tion study and had a sum­mer job work­ing on al­go­rithms at an early speech recog­ni­tion com­pany. A fam­ily cri­sis took her back to Maryland, where she fin­ished de­grees in both math and physics at the University of Maryland. She also had an in­tern­ship work­ing on a PET scan­ner at NIH, vol­un­teered at some hos­pi­tals and con­sid­ered go­ing to med­ical school. But in the end she de­cided on grad­u­ate school.

She could­n’t make her mind up be­tween physics and math but ended up ap­ply­ing in physics. One of her physics pro­fes­sors had said she was the best stu­dent he’d ever seen but would be most suited to very the­o­ret­i­cal physics. She had her choice be­tween Harvard and Berkeley. And in her ever-typ­i­cal fash­ion she waited un­til the last minute, pick­ing Berkeley be­cause she was told she’d be able to switch to math there.

After an in­tense think on your feet” in­ter­view process, she re­ceived a Hertz Foundation fel­low­ship, which gen­er­ously sup­ported her grad­u­ate stud­ies. Before even ar­riv­ing at Berkeley she’d set­tled on math, and hav­ing im­pressed peo­ple with her el­e­gant so­lu­tion to a small open prob­lem, she joined a group work­ing on geo­met­ri­cal ap­proaches to dy­nam­i­cal sys­tems. After four years in grad­u­ate school she com­pleted her PhD the­sis on Smooth Markov Partitions and Toral Automorphisms”. It was quin­tes­sen­tial Elise. An el­e­gant the­matic idea im­ple­mented with clean tech­ni­cal pro­fi­ciency.

It made her a hot­shot young math­e­mati­cian, sought af­ter by many uni­ver­si­ties. She ended up with two jobs: a tenure-track pro­fes­sor­ship at Stony Brook and an NSF post­doc spon­sored by the promi­nent math­e­mati­cian Dennis Sullivan. She chose to de­fer the pro­fes­sor­ship and take the post­doc for a year, partly at CUNY in New York City and partly at IHES near Paris.

While at IHES, Elise lived in the very cen­ter of Paris, only steps from the Jardin du Luxembourg, in an un­used stu­dio owned by an artist who was the sis­ter of an­other math­e­mati­cian. It was a pe­riod of in­tense math­e­mat­i­cal work for Elise about which she was very en­thu­si­as­tic. And her the­matic and aes­thetic sen­si­bil­i­ties drew her to the study of Teichmüller spaces, which are spaces of pos­si­ble geo­met­ri­cal ob­jects, or in a sense spaces of pos­si­ble spaces. It was also at this time that she em­barked on what would be a long-term in­ter­est in the so-called ther­mo­dy­namic for­mal­ism, or Gibbs the­ory.

With con­nec­tions to math­e­mat­i­cal physics, Gibbs the­ory pro­vides a way to talk about in­fi­nite col­lec­tions of in­fi­nite struc­tures, and their de­vel­op­ment, for ex­am­ple through time. (Ironically enough—as Elise would re­peat­edly men­tion—con­cepts such as trans­ver­sals that ap­pear in Gibbs the­ory are now di­rectly rel­e­vant to my own work on in­fra­geom­e­try and the foun­da­tions of physics.)

Rather un­typ­i­cally for a math­e­mati­cian, Elise was al­ways no­table for her dis­tinc­tive per­sonal style—of­ten an in­ter­pre­ta­tion of cur­rent fash­ion, but with her own spunky and col­or­ful touches. As one of my daugh­ters tells it, Elise’s in­ter­est in style be­gan to ex­pand with the fund­ing she re­ceived from her Hertz fel­low­ship and de­vel­oped fur­ther dur­ing her time in New York City and Paris.

Upon re­turn­ing from Paris, Elise was about to start at Stony Brook, but while wait­ing for her apart­ment to be ready, was stay­ing with her long-time friend Lisa Goldberg in New York City. And that’s how, on September 17, 1990, Elise and I first met.

Lisa’s apart­ment was an el­e­gant one, but I was not quite so el­e­gant that day. I had been at a tech in­dus­try event where I had re­ceived a rather bulky award, which was in my jacket pocket weigh­ing it down. Elise was sit­ting on the floor, with her bangs flopped across her face, in a pose that I thought might be yoga. We talked just a bit, but it was enough.

The next day I went back to Champaign, IL, where I was based at the time. It had been two and a half years since we’d re­leased Mathematica 1.0 and our com­pany was grow­ing rapidly. I had started my ca­reer young, so even though I was only two years older than Elise (she was close to 29 and I had just turned 31), I had al­ready done quite a bit, both in acad­e­mia and the tech in­dus­try.

Early ver­sions of Mathematica came with a book, that I had to write. And in September 1990 I was rush­ing to fin­ish the sec­ond edi­tion of that book, to ac­com­pany Mathematica 2.0. Two weeks af­ter I re­turned to Champaign, I did fin­ish, though promptly got sick with a high fever. And that was when I fi­nally called Elise.

Soon I was tak­ing trips to Stony Brook, and she to Champaign. And when apart we were talk­ing by phone for hours each day. Lisa Goldberg made a point of telling me, She’s a very fine math­e­mati­cian, you know”. Elise had met an­other per­son a lit­tle ear­lier, and Lisa had dis­missed them as un­suit­able. But—as I just now learned from one of my chil­dren—when Elise asked Lisa about me she im­me­di­ately re­sponded with en­thu­si­asm.

One no­table trip was the re­sult of a call I got from Elise where she ex­plained that she’d mixed up con­tact lens so­lu­tion and hy­dro­gen per­ox­ide and now had to patch both her eyes for a few days. I im­me­di­ately got on the next flight. And while the only food I could cook at that time (and still to­day) was an omelette, she viewed this rescue” as an act of chivalry that—as she told our chil­dren—was what de­fin­i­tively sold her on me.

On Elise’s 29th birth­day in December 1990 I sent some flow­ers. She re­sponded by email, now bit­ter­sweet:

Hi there. Some amaz­ing flow­ers just ar­rived. I think I can make to92. I’m head­ing off to aer­o­bics — tonight is the amaz­ing Margaret(who plays great mu­sic). I has some good math con­ver­sa­tion with­caro­line s. to­day. And got a lit­tle bit of real work done.

I’ll be back around 9pm.

elise

The very next email I re­ceived from her was about a bug in the Mathematica Residue func­tion.

My day job was (and still is) tech CEO. But what made me orig­i­nally de­velop our tech­nol­ogy was that I wanted to use it my­self—to do sci­ence. By the spring of 1991 I was get­ting frus­trated that I could in­ject new ideas into our com­pany faster than it could ab­sorb them. So I de­cided I should take some­thing of a sab­bat­i­cal and work on sci­ence for a while. Meanwhile, Elise still had time left on her NSF post­doc, that she could take any­where. And so it was that we de­cided to get a house to­gether in the hills above Oakland, CA, and she re­turned to Berkeley.

Before mov­ing into the house that she found for us, she came with me on an 18-city tour of Europe+Russia to pro­mote Mathematica 2.0. After that, we set­tled into a good rou­tine. She would go off each day to do math. I would stay home to be a re­mote CEO, and work on sci­ence. And from time to time she’d jet off to Texas, Montana, France or wher­ever to give talks.

By late 1992 we were think­ing about next steps. Elise was adamant that she could­n’t live in Champaign-Urbana (despite hav­ing been born there). But she thought the idea of liv­ing in the Chicago area was in­ter­est­ing. Meanwhile, she was highly in de­mand as a math­e­mati­cian, and there were mul­ti­ple op­por­tu­ni­ties for her there.

Elise took charge, and ex­plored many dif­fer­ent lo­ca­tions and houses around Chicago, even­tu­ally pick­ing a house in Hinsdale, IL. We moved there in the mid­dle of 1993, and Elise took up a po­si­tion at the University of Chicago. It was a nice house, but Elise thought it could be nicer, and set about ren­o­vat­ing it to have top-of-the-line in­te­rior de­sign. She started work­ing with a de­signer who she dis­cov­ered by read­ing mag­a­zines, and learned that her aes­thetic and geo­met­ric sen­si­bil­i­ties trans­lated well into cre­ative in­te­rior de­sign. Elise was par­tic­u­larly keen on in­te­grat­ing lively col­ors and un­ex­pected el­e­ments into tra­di­tional de­sign themes.

Meanwhile, at the University of Chicago, Elise was teach­ing a course about Gibbs the­ory. She wrote ex­ten­sive notes which she planned even­tu­ally to turn into a book. Over the years, peo­ple asked for the book many times, and Elise had re­cently started talk­ing about fi­nally fin­ish­ing it. Ironically enough, our daugh­ter Catherine, now her­self a math­e­mati­cian, has ended up work­ing in some­what re­lated ar­eas.

Elise in­ter­acted a lot with Bob Zimmer, who was then chair­man of the math de­part­ment (and would later be­come pres­i­dent of the University of Chicago). Together they de­vised the con­cept of a new ac­tiv­ity for the math de­part­ment: a pro­fes­sional mas­ter’s de­gree in fi­nan­cial math­e­mat­ics, ba­si­cally aimed at quants, and taught by math pro­fes­sors. Though Elise was never too in­ter­ested in the messi­ness of ac­tual mar­ket data, she liked the pure math­e­mat­ics of mar­ket mod­els, and helped de­velop a cur­ricu­lum around it. The mas­ter’s de­gree ended up be­ing highly suc­cess­ful and con­tin­ues to this day.

In the fall of 1994 Elise and I mar­ried. And then, in December 1995, as Elise would later de­scribe it, the world overnight had a new cen­ter”: our first child, Alexander, was born. The next few years were dom­i­nated by the ar­rival of chil­dren, with Catherine be­ing born in 1997 and Christopher in 1998—leaving Elise, as she put it, with three un­der three”.

With our fam­ily grow­ing—and our book col­lec­tion reach­ing over 5000 vol­umes—we were out­grow­ing our house in Hinsdale, and started look­ing for a new home. At first, Elise found real es­tate in Lake Forest, IL. But when the deal for it fell through we started think­ing more broadly and de­cided that since the Boston area was the place where to­gether we knew the most peo­ple, that was where we should go. But which town in par­tic­u­lar? Elise’s #1 ini­tial cri­te­rion was that it should al­ready have a Starbucks. From the list of such towns, she then started look­ing at USGS aer­ial pho­tographs (or what would now be satel­lite im­ages), and soon set­tled on Concord, MA. But find­ing no suit­able ex­ist­ing house to buy there, she set about de­sign­ing a house to build.

It was a com­plex process. The house had to ac­com­mo­date what was by then a li­brary of nearly 10,000 books, as well as space for my re­mote-CEO of­fice and for our three chil­dren. Elise had been scour­ing ar­chi­tec­ture books, and in­ter­viewed sev­eral top-of-the-line ar­chi­tects be­fore set­tling on one to work with. With her math­e­mat­i­cal and aes­thetic sen­si­bil­i­ties she eas­ily ab­sorbed prin­ci­ples of ar­chi­tec­ture and soon de­vel­oped her own in­tu­ition for it. Sometimes she’d bring in se­ri­ous math—like num­ber the­ory to de­sign a stair­case with aligned squig­gly ban­is­ters, or cir­cle pack­ing to lay out an Italian-inspired tiling based on cir­cles and Sierpinski pat­terns. She started off mak­ing sketches, but soon learned the lat­est CAD tools. And in the end her ideas de­fined much of the de­sign of the house. (At the be­gin­ning, I had tried mak­ing some suggestions” about the plans, but quickly re­al­ized that this was an Elise pro­ject, and I should stay out of it.)

It took sev­eral years to build the house (with Elise reg­u­larly trav­el­ing to Boston to over­see the pro­ject) but in the spring of 2002 the pro­ject was fin­ished—co­in­ci­den­tally at ba­si­cally the same time as my 10-year pro­ject of writ­ing A New Kind of Science. Other than in CAD draw­ings I’d only seen the house once, early in its con­struc­tion, so when we drove from Hinsdale and ar­rived at the house I was in for a sur­prise. It was much big­ger than I ex­pected! And when we went in­side I could see that it was a mas­ter­piece, filled with per­son­al­ity: beau­ti­ful, el­e­gant, cre­ative—quin­tes­sen­tial Elise.

And then there was the in­te­rior de­sign. Bold and col­or­ful, yet clas­sic. Each room with a dis­tinct char­ac­ter, grace­fully flow­ing into the next. Over the years, Elise re­vised and up­dated the in­te­rior de­sign of the house many times. She was of­ten to be seen sketch­ing on graph pa­per new pos­si­ble de­signs based on new ideas. She kept the style fresh, con­stantly breath­ing new life into the house—even if it meant that our chil­dren would com­ment that every time they showed up the fur­ni­ture seemed to have been re­arranged. And 24 years af­ter I first saw the house, I still find my­self wowed by it.

By 2003, our old­est was en­cour­ag­ing us to have an­other child, not­ing, among other things, that the sym­me­try of the house had given it four chil­dren’s bed­rooms. And so it was that in the fall of 2004 our fourth child, Elizabeth, was born.

In her ear­lier years, Elise had al­ways said that she couldn’t imag­ine her life not do­ing math”. But partly through me, and, more im­por­tantly through our chil­dren, her world had been broad­ened, and her per­spec­tives had shifted. She would later de­scribe her life as hav­ing sev­eral chap­ters, and this was a chap­ter about chil­dren.

Through her chil­dren show­ing in­ter­est in math, she ended up coach­ing some mid­dle-school MathCounts math com­pe­ti­tion teams. She was­n’t a fan of the way math was typ­i­cally taught in schools, com­plain­ing that the beauty of math was be­ing lost in the at­tempt to make math seem applicable”, and not­ing that most of math in mod­ern text­books is not re­ally math at all”. In an email to me in 2010 Elise spirit­edly went fur­ther:

What has hap­pened to beauty in math? The beauty de­rives­from the sim­plic­ity and el­e­gance. That has been lost in the­p­ro­lif­er­a­tion of ex­tra­ne­ous ter­mi­nol­ogy, meant to make things moreconceptual”, from early end­less ex­cur­sions with place value” to ab­sur­d­vari­a­tions on al­go­rithms, to gummy de­scrip­tions of every­thing us­ing­con­tor­tions of lan­guage, rather than the lan­guage of math­e­mat­ics it­self.

Elise did nev­er­the­less do some ap­pli­ca­tions of math her­self. During the pan­demic, for ex­am­ple, she de­vel­oped the idea that in­fec­tion was not a bi­nary phe­nom­e­non, but that in­stead each per­son had a con­stantly chang­ing vi­ral load and im­mu­nity, cre­at­ing a viral field” at the pop­u­la­tion level. Elise was al­ways up to date on world af­fairs, and had a deep in­ter­est in un­der­stand­ing their the­matic arcs at work.

Elise loved the small-town at­mos­phere of Concord, MA, and en­joyed the feel­ing of be­ing in a place where every­one knows your name”. She was a reg­u­lar at lo­cal cafes and ex­er­cise classes, bring­ing her live­li­ness wher­ever she went. She had a cir­cle of friends with many dif­fer­ent back­grounds, of­ten met through their chil­dren or sim­ply through re­peat­edly run­ning into them at Starbucks. She took great plea­sure in ap­ply­ing her knowl­edge and think­ing to help her friends in all sorts of ways. Whether it was do­ing re­search on med­ical is­sues, solv­ing in­te­rior de­sign prob­lems, or sim­ply us­ing her keen in­sight and judg­ment to pro­vide life ad­vice, she would re­li­ably go above and be­yond.

Our fam­ily had a def­i­nite rou­tine, with din­ner each day at about 6pm. Every Friday night—fol­low­ing a tra­di­tion from Elise’s own fam­ily grow­ing up—we would go out to a movie (and, yes, that meant we saw many ques­tion­able movies). Before our chil­dren were old enough, it was just Elise and me; later it in­cluded var­i­ous con­tin­gents of chil­dren too. Elise and I would talk af­ter each movie, with her of­ten be­ing quite ap­palled by my lack of un­der­stand­ing of what seemed to her like the movie’s ob­vi­ous the­matic el­e­ments. (Elise also gave me a hard time about my fail­ure to read fic­tion, claim­ing that many ideas, par­tic­u­larly about hu­man na­ture, are best com­mu­ni­cated in fic­tion.)

A dozen years ago two of our chil­dren were at the Stanford Online High School, and Elise was re­cruited as an in­au­gural mem­ber of the school’s Community Advisory Group. Originally this was just sup­posed to be for a year. But a decade later she was still there, a highly val­ued mem­ber of the group. She spent con­sid­er­able ef­fort think­ing about the over­all strat­egy and is­sues of the or­ga­ni­za­tion, and de­vel­oped many ideas and opin­ions. Despite this, she’d of­ten tell us that she did­n’t think she’d end up say­ing any­thing at a given meet­ing. But with great con­sis­tency it would later tran­spire that ac­tu­ally she had been the most talk­a­tive and en­gaged per­son there.

In the early 2000s, the Hertz Foundation, from which Elise had re­ceived her grad­u­ate school fel­low­ship, started reach­ing out to her, and she en­joyed en­gag­ing with the emerg­ing Hertz com­mu­nity, and meet­ing fel­lows from a wide range of fields. In 2018 she was also re­cruited to the board of the Hertz Foundation. And here again she be­came a key con­trib­u­tor, of­ten ex­pect­ing not to say any­thing, but then end­ing up as one of the most vo­cal peo­ple there.

By 2023, our three older chil­dren had all grad­u­ated from col­lege, but our youngest, Elizabeth, was just start­ing at Yale. Elizabeth has al­ways been in­volved in a great many ac­tiv­i­ties, and Elise took great plea­sure in at­tend­ing every pos­si­ble con­cert, sport­ing or other event—and also for ex­am­ple host­ing Elizabeth’s en­tire a cap­pella group for a re­treat at our house.

A bit more than a decade ago Elise also dis­cov­ered a love for the Southwest and for hik­ing. And with her brother Jason—with whom she was al­ways very close—liv­ing in the Phoenix, AZ, area, we started spend­ing time there each win­ter.

With Elizabeth off in col­lege we were fi­nally empty nesters, and Elise was ready for a new chap­ter in her life. She con­sid­ered re­turn­ing to where she’d left off in Gibbs the­ory 30 years ago, be­ing told by an old col­league that her work there was still very cur­rent. She also con­sid­ered get­ting more deeply in­volved in the phi­los­o­phy of math­e­mat­ics and was on the brink of writ­ing a piece about it. She was also quite en­gaged in think­ing about the pur­pose and di­rec­tion of higher ed­u­ca­tion, and the im­por­tance of free ex­pres­sion in the search for truth.

In some ways Elise and I were be­com­ing the old mar­ried cou­ple”, with her ad­mon­ish­ing me about my messi­ness in eat­ing ice cream cones or her de­sire that I switch on self-dri­ving to avoid her be­ing sub­jected to my own sub­stan­dard hu­man dri­ving.

Elise had al­ways been a fit and healthy per­son, and was also very med­ically knowl­edge­able. So when she started notic­ing jaw pain when hik­ing in Colorado and Arizona, she was con­cerned. Tests at first showed noth­ing alarm­ing, though, as she al­ready knew, she had a small con­gen­i­tal heart is­sue that was grad­u­ally wors­en­ing. But just a few weeks ago her symp­toms wors­ened and more in­va­sive tests re­vealed that she needed ur­gent open heart surgery. She had an out­stand­ing team of top doc­tors, the com­plex surgery went very well, and she was soon con­tin­u­ing her re­cov­ery from home.

Meanwhile there was a long-planned cel­e­bra­tion for one of our chil­dren that Elise hoped to at­tend. But though it was not pos­si­ble for her to be there in per­son, we arranged for her to at­tend vir­tu­ally. It was a won­der­ful event, and Elise could be seen via video call beam­ing through all of it. But then, soon af­ter, dis­as­ter struck, and she col­lapsed, the vic­tim of a mas­sive car­dio­vas­cu­lar event. My only so­lace in this tragedy is that the end came in­stantly, af­ter a day filled with noth­ing but joy.

There is so much that Elise was look­ing for­ward to. The im­mi­nent ar­rival of our first grand­child. Elizabeth’s grad­u­a­tion from col­lege. The next chap­ter of her life. But Elise will not be here for any of these.

Elise had no idea the end was near. And even though she ex­pected more, she had al­ready had many chap­ters in her life, and many achieve­ments of which she was proud. Elise had a beau­ti­ful life, full of things she val­ued greatly, es­pe­cially her chil­dren. That she is gone is a tragedy for us all; she will be deeply missed.

Thank you, Elise, for all those won­der­ful years.

Xbox goes down. You can't play games you own on disc.

birchtree.me

Jay Peters: Xbox’s huge out­age even blocked games on disc

An ex­tended Xbox out­age that be­gan Sunday evening has­n’t just caused is­sues for peo­ple try­ing to play dig­i­tal games — it blocked peo­ple from play­ing their disc-based games, too.

When Sony an­nounced that they were dis­con­tin­u­ing phys­i­cal discs for PlayStation, I was less out­raged than many. The rea­son I felt this way was­n’t be­cause I loved what Sony was do­ing. I think it came from an un­der­stand­ing that phys­i­cal me­dia ain’t what it used to be.

I got an ana­log pocket a cou­ple years ago, and I think it’s an awe­some prod­uct. I was able to in­sert my Game Boy car­tridges from 20 years ago and was able to play them im­me­di­ately, just like I did back then. Well, on a back­lit screen with 10x the pixel den­sity, but still.

The im­pres­sion I get is that a lot of peo­ple have this vi­sion in their head for what phys­i­cal me­dia still is to­day, and it sim­ply is­n’t. Sure, I tech­ni­cally did­n’t own Golden Sun on the GBA. I tech­ni­cally had a li­cense, but for all in­tents and pur­poses, I owned that game. And the ev­i­dence is, with­out Nintendo au­tho­riz­ing any­thing, I’m able to play it on a new piece of hard­ware, and it works great. No net­work down­time is gonna pre­vent me from do­ing that.

But own­ing a game on a disc to­day is­n’t re­ally the same thing. It’s still just a li­cense, and Microsoft, Sony, and Nintendo can ei­ther in­ten­tion­ally or, in this case, un­in­ten­tion­ally pre­vent you from play­ing that game, even if you own the phys­i­cal copy. This is­n’t even to men­tion the fact that when you pop the disc in your drive, you’re not play­ing from the disc. It’s in­stalling it to your in­ter­nal hard drive and is prob­a­bly in­stalling a bunch of up­dates that are re­quired to make the game ac­tu­ally work at all.

All I’m say­ing is it’s all dig­i­tal on the PC side of things, and has been for ages, but we have means of main­tain­ing ac­cess to the games we love over here, and it’s one of the rea­sons I’ve grav­i­tated to the PC for quite a while now.

There Will Come Soft Rains by Ray Bradbury

short-stories.co

In the liv­ing room the voice-clock sang, Tick-tock, seven o’­clock, time to get up, time to get up, seven o’­clock! As if it were afraid that no­body would.

Seven-nine, break­fast time, seven-nine!

In the kitchen the break­fast stove ejected eight pieces of per­fectly browned toast, eight eggs sun­ny­side up, six­teen slices of ba­con, two cof­fees, and two cool glasses of milk.

Today is August 4, 2026, the city of Allendale, California.”

Somewhere in the walls, re­lays clicked, mem­ory tapes glided un­der elec­tric eyes.

”Eight-one, tick-tock, eight-one o’­clock, off to school, off to work, run, run, eight-one!” But no doors slammed. It was rain­ing out­side. The weather box on the front door sang qui­etly: Rain, rain, go away; rub­bers, rain­coats for to­day…”

Outside, the garage chimed and lifted its door to re­veal the wait­ing car.

After a long wait the door swung down again.

At eight-thirty the eggs were shriv­eled and the toast was like stone. An alu­minum wedge scraped them into the sink. The dirty dishes were dropped into a hot washer and emerged twin­kling dry.

Nine-fifteen,” sang the clock, time to clean.”

Tiny ro­bot mice thud­ded against chairs, whirling their mus­tached run­ners, Kneading the rug nap, suck­ing gen­tly at hid­den dust. Then, they popped into their bur­rows. The house was clean.

Ten o’­clock.” The sun came out from be­hind the rain. The house stood alone in a city of rub­ble and ashes. This was the one house left stand­ing. At night the ru­ined city gave off a ra­dioac­tive glow which could be seen for miles.

Ten-fifteen.” The gar­den sprin­klers pelted the win­dow­panes,

run­ning down the charred west side where the house had been burned evenly

free of its white paint. The en­tire west face of the house was black, save for five places. Here the sil­hou­ette in paint of a man mow­ing a lawn. Here, as in a pho­to­graph, a woman bent to pick flow­ers. Still far­ther over, their im­ages burned on wood in one ti­tanic in­stant, a small boy, hands flung into the air; higher up, the im­age of a thrown ball, and op­po­site him a girl, hand raised to catch a ball which never came down.

The five spots of paint — the man, the woman, the chil­dren, the ball –

re­mained. The rest was a think char­coaled layer.

Twelve noon.”

A dog whined on the front porch.

The front door rec­og­nized the dog voice and opened. The dog, once huge and fleshy, but now gone to bone and cov­ered with sores, moved in and through the house, track­ing mud.

The dog frothed at the mouth, ran wildly in cir­cles, bit­ing at its tail, spun in a frenzy, and died. It lay in the par­lor for an hour.

Two-fifteen.”

The dog was gone.

In the cel­lar, the in­cin­er­a­tor glowed sud­denly and a whirl of sparks leaped up the chim­ney.

Two thirty-five.”

Bridge ta­bles sprouted from pa­tio walls. Playing cards flut­tered. Martinis man­i­fested while mu­sic played.

But the ta­bles were silent and the cards un­touched.

At four o’­clock the ta­bles folded back through the pan­eled walls. Four-thirty.”

The nurs­ery walls glowed.

Animals took shape: yel­low gi­raffes, blue li­ons, pink an­telopes, lilac pan­thers. Hidden films clocked through well-oiled sprock­ets, and the glas walls lived. It was the chil­dren’s hour.

Six, seven, eight o’­clock.” The din­ner dishes ma­nip­u­lated like magic

tricks, and in the study a click.

Nine-five.” A voice spoke from the study ceil­ing:

Mrs. McClellan, which poem would you like this evening?”

The house was silent.

The voice said at last, Since you ex­press no pref­er­ence, I shall se­lect a

poem at ran­dom.” Sara Teasdale. As I re­call, your fa­vorite…

There will come soft rains and the smell of the ground,

And swal­lows cir­cling with their shim­mer­ing sound;

And frogs in the pools singing at night, And wild plum trees in tremu­lous white;

Robins will wear their feath­ery fire, Whistling their whims on a low fence-wire;

And not one will know of the war, not one Will care at last when it is done,

Not one would mind, nei­ther bird nor tree If mankind per­ished ut­terly;

And Spring her­self, when she woke at dawn Would scarcely know that we were gone.

At ten o’­clock a falling tree bough crashed through the kitchen win­dow

shat­ter­ing clean­ing sol­vent over the stove. The room was ablaze in an in­stant.

Fire!” screamed a voice. Water pumps shot wa­ter from the ceil­ings while the voices took it up in cho­rus: Fire, fire, fire!”

The house tried to save it­self, but the wind blew and sucked upon the fire.

Scurrying wa­ter rats pis­toled their wa­ter, and ran for more. And the wall sprays let down show­ers of me­chan­i­cal rain.

But too late. The quench­ing rain ceased. The re­serve wa­ter sup­ply which had filled baths and washed dishes for many quiet days was gone.

From at­tic trap­doors gushed a green chem­i­cal.

But the fire was clever. It had sent flames out­side the house, up through The at­tic to the pumps there. An ex­plo­sion! The at­tic brain which di­rected the pumps was shat­tered.

The house shud­dered, its bared skele­ton cring­ing from the heat. And the voices wailed, Fire, fire, run, run,” like a tragic nurs­ery rhyme, a dozen voices, high, low. One, two, three, four, five voices died.

Other cho­ruses could be heard an­nounc­ing the time, play­ing mu­sic, or cut­ting the lawn by re­mote-con­trol mower. A scene of ma­niac con­fu­sion, yet unity; singing, scream­ing, and one voice, read po­etry aloud in the firey study, un­til all the film spools burned.

In the kitchen the stove could be seen mak­ing break­fasts at a psy­cho­pathic rate, ten dozen eggs, six loaves of toast, twenty dozen ba­con strips, which eaten by the fire, started the stove work­ing again, hys­ter­i­cally hiss­ing!

The crash. The at­tic smash­ing into kitchen and par­lor. The par­lor into cel­lar, cel­lar into sub-cel­lar.

Smoke and si­lence.

Among the ru­ins, one wall stood alone. Within the wall, a last voice said,

over and over, Today is August 5, 2026, to­day is August 5, 2026, to­day is …”

What Colors Are We? Constructing A Color Space For Skin Tones

toneyalexander.github.io

If you’re just look­ing for the re­sults, be­low is a cus­tom color picker based on the color space writ­ten in Javascript and a sam­ple pro­ce­dural gen­er­a­tion al­go­rithm in Python (Javascript equiv­a­lents are in the page source) - feel free to take this math and go have fun de­pict­ing our di­verse world!

The goal of this pro­ject was to de­fine a color space that makes it eas­ier to build in­clu­sive color tools for a va­ri­ety of con­texts - such as char­ac­ter cre­ators or dig­i­tal art. If you see some­thing here that sparks your cu­rios­ity, I would love for you to stick around and read be­low this sec­tion to learn more!

=

(What’s R²?)

Show Sphere

What is each di­rec­tion on the picker ad­just­ing? Jump to that ex­pla­na­tion here.

# Plug the out­put of one of the se­lec­t_­point im­ple­men­ta­tions into to_rgb(t, u, v)

def se­lec­t_­point(r_square: float = 2.) -> tu­ple[float, float, float]: ”″Uniformly sam­ple from the sphere de­ter­min­is­ti­cally”“” ra­dius = r_square ** (1. / 2)

phi = uni­form(0, 2 * math.pi) cos­theta = uni­form(-1, 1) n = uni­form(0, 1)

theta = math.acos(cos­theta) r = ra­dius * (n ** (1.0 / 3))

t = r * math.sin(theta) * math.cos(phi) u = r * math.sin(theta) * math.sin(phi) v = r * math.cos(theta)

re­turn (t, u, v)

def se­lec­t_­point(r_square: float = 2.) -> tu­ple[float, float, float]: ”″Uniformly sam­ple from the sphere us­ing re­jec­tion sam­pling”“” ra­dius = r_square ** (1. / 2) R = ra­dius + 1

while R > ra­dius: t = uni­form(-ra­dius, ra­dius) u = uni­form(-ra­dius, ra­dius) v = uni­form(-ra­dius, ra­dius)

R = (t**2 + u**2 + v**2) ** (1.0 / 2)

re­turn (t, u, v)

def to_rgb(t, u, v) -> tu­ple[int, int, int]: x = (t - 0.15) / 0.45 y = (v - 1.2 * t ** 2 + 0.2 * t + 0.655) / 1.84 z = u / 3.6

r = 28.77438370854 * x + 36.78307445559 * y - 19.69766918644 * z + 187.1436241611 g = 35.38327306318 * x - 2.009931981182 * y + 47.93462563172 * z + 137.1073825503 b = 36.14733717939 * x - 43.54346996173 * y - 28.50821294135 * z + 108.2241610738

re­turn int(r), int(g), int(b)

# Overview

What col­ors are we? The short an­swer is maybe some­thing like brown” and the long an­swer is very, very long. Representing the broad range of hu­man skin tones dig­i­tally is a hard prob­lem. Often, a lim­ited set of col­ors is pre­sented as be­ing good enough to cover the full spec­trum of di­ver­sity. However, in us­ing a spe­cific set of col­ors, large groups of peo­ple are un­able to ac­cu­rately be rep­re­sented, or might be un­in­ten­tion­ally ex­cluded.

The goal of this work is to iden­tify the broad­est in­clu­sive range of col­ors in the RGB color space that cor­re­spond to plau­si­ble, but sim­pli­fied skin tones. In par­tic­u­lar, the aim was to iden­tify sim­ple, good enough” equa­tions which de­fine that area, al­low­ing the range to be used in a va­ri­ety of con­texts. Calling the equa­tions good enough” is in­tended to keep the lim­i­ta­tions of this work at the fore­front - the re­sults are a use­ful start­ing point, but should not be taken to be au­thor­i­ta­tive.

# Introduction

Although there have been im­prove­ments in the set of col­ors that are pre­sented as rep­re­sen­ta­tive of us, there’s still a gap that needs to be closed. Emojis say we’re 5 shades (or car­toon-yel­low); a makeup brand might say 50; and a char­ac­ter cre­ator might shrug and tell you to pick from all 16,777,216 op­tions. If you look out­side - or just at your­self - you’ll quickly no­tice that none of those can com­pare to the va­ri­ety of re­al­ity; one per­son is not just one color. Despite that, it can be use­ful to try to boil things down to fewer val­ues. The Unicode Consortium and makeup com­pa­nies can fig­ure out their own ranges, but I be­lieve we can find a bet­ter so­lu­tion that’s some­where be­tween several” and several mil­lion.”

Taking the dig­i­tal art world as an ex­am­ple, im­ages such as the one be­low are of­ten cir­cu­lated in an at­tempt to as­sist other artists in iden­ti­fy­ing plau­si­ble col­ors.

In the video game world, nowa­days the pre­set col­ors are of­ten wide rang­ing and sup­ple­mented with a gen­eral color picker, but it would be even bet­ter if the ini­tial ex­pe­ri­ence pre­sented bet­ter op­tions.

# Limitations

Taking a step back to re­al­ity, this work has a num­ber of in­her­ent lim­i­ta­tions.

As men­tioned be­fore, skin tones are much more com­pli­cated than a sin­gle color. They vary widely be­tween dif­fer­ent ar­eas of the body and are sub­ject to com­plex bi­o­log­i­cal processes. The per­ceived color of the skin is af­fected by blood flow, con­cen­tra­tions of melanin, com­plex scat­ter­ing of light through the lay­ers of the skin, as well as things like vi­tiligo, freck­les, hy­per­pig­men­ta­tion, scar­ring, and other com­mon vari­a­tions.

Secondly, a va­ri­ety of health con­di­tions can cause peo­ple to have skin tones that are well out­side what might be per­ceived as plau­si­ble. Argyria can of­ten lead to skin that is blue-gray in color; high biliru­bin can cause skin to be yel­low­ish or green­ish.

Additionally, it’s im­por­tant to note that I am one per­son, not a re­searcher, and sub­ject to my own gen­eral bi­ases on top of my own per­cep­tion of color. As far as I am aware I don’t have color vi­sion de­fi­ciency, but a lot of the choices I made are com­pletely sub­jec­tive.

Finally, col­ors are not per­ceived con­sis­tently across dis­play types and view­ing en­vi­ron­ments. RGB val­ues look dif­fer­ent be­tween dif­fer­ent screens, and peo­ple look com­pletely dif­fer­ent un­der dif­fer­ent light­ing con­di­tions.

Broadening this work to ad­dress some of these lim­i­ta­tions would be an in­ter­est­ing area of fur­ther in­ves­ti­ga­tion - a goal of this pro­ject was to be good enough for sim­ple use cases, but these lim­i­ta­tions might be more prob­lem­atic in other con­texts. The re­sults here will mainly be ap­plic­a­ble in con­texts that re­late to gen­er­at­ing sim­pli­fied rep­re­sen­ta­tions of peo­ple.

# Methodology

What are all of those num­bers, and how did you get them?

Content warn­ing - un­sci­en­tific method­ol­ogy be­low. In other words: good enough is fine if you’re an en­gi­neer.

Summary:

Manually la­bel col­ors in RGB in or­der to get a rough ap­prox­i­ma­tion of the dataset shape

Perform a prin­ci­pal com­po­nent analy­sis (PCA) with N=3 on the dataset to change the shape into some­thing eas­ier to work with

Use your pre­ferred graph­ing soft­ware to man­u­ally cre­ate equa­tions that map a sphere in the tar­get space onto the trans­formed data in the XYZ, or PCA space

# Manually Labeling Colors

Sometimes the best place to start is by do­ing a ton of te­dious work. I did­n’t la­bel every color in RGB, but there cer­tainly were a lot. This is the UI I built for la­bel­ing - just a sim­ple web­page where you click to move a face be­tween the yes and no side. Initially they were just squares, but I ended up draw­ing a face and slap­ping the col­ors onto it. Gazing into my lumpy re­search as­sis­tan­t’s eyes made it much eas­ier to quickly go yeah I can imag­ine that per­son walk­ing around”.

Graphing that data, you get the fol­low­ing shape - for vi­su­al­iza­tion it’s kind of like a ba­nana shape that swoops be­tween 0, 0, 0 and 255, 255, 255. The curve is more to­wards red and away from blue.

This is where I got stuck for the longest. For your sake, I’m go­ing to skip over all of my dead ends and strug­gles along the way. There were many. Far too many. Things in­volv­ing con­vex hulls, re­gres­sion mis­ad­ven­tures, 4th de­gree poly­no­mi­als, and the worst look­ing code I’ve ever writ­ten.

The re­sult of all of that was that I de­cided I needed some way to trans­form the shape into some­thing eas­ier to work with: that’s when I learned about prin­ci­pal com­po­nent analy­sis and was im­me­di­ately in­spired.

# Humanities Intermission

Although all of the math and tech­nol­ogy here is fun, it’s im­por­tant to ad­dress the fact that tech­nol­ogy ex­ists in a so­cial con­text. Stating things plainly: lighter skin col­ors have both presently and his­tor­i­cally been cel­e­brated and pri­or­i­tized while darker skin col­ors have been mar­gin­al­ized and ma­ligned. Racism and col­orism are sys­tem­i­cally pre­sent in many cul­tures, in both overt and sub­tle ways.

Below are some great videos, es­says and pro­jects that ad­dress these is­sues through a va­ri­ety of lenses. I highly rec­om­mend tak­ing a look, es­pe­cially if you want a break be­fore we get into the math.

In her video se­ries The Darkest Shade, Nyma Tang re­views the dark­est shades from a va­ri­ety of makeup brands. In her own words, It’s im­por­tant for makeup brands to make prod­ucts for all shades and as some­one with a darker skin tone, I want to be able to help oth­ers who strug­gle to find the same!”

In a sim­i­lar vein, Kat Blaque’s video (for in­tro­spec­tive hot peo­ple) Youthforia’s Blackface Foundation is about a makeup brand that re­leased a dark shade that was lit­er­ally black - far darker than what would be plau­si­bly use­ful.

Finally in the makeup space, the Vox video How beauty brands failed women of color talks about the his­tory of dis­crim­i­na­tion in the beauty in­dus­try and the lim­ited avail­abil­ity of deeper shades. There’s a lot of great ex­pert in­ter­views as well as a dis­cus­sion of the in­ter­sec­tion with Black his­tory.

Taking a look at video games, Me, On The Screen: Race in Animal Crossing: New Leaf by Austin Walker is an ex­cel­lent es­say about the au­thor’s strug­gle to see him­self rep­re­sented in video games. In the years since, Animal Crossing has got­ten much bet­ter about in­clu­siv­ity but the es­say also goes into his his­tory of not see­ing him­self - or see­ing char­ac­ters that look like him be stuck in racist tropes.

The Humanae pho­tog­ra­phy pro­ject by Angélica Dass is an un­usu­ally di­rect re­flec­tion on the color of the skin, at­tempt­ing to doc­u­ment hu­man­i­ty’s true col­ors rather than the un­true la­bels white”, red”, black” and yellow” as­so­ci­ated with race.” In a way it’s re­ally sim­i­lar to the work here - ex­cept with a fo­cus on doc­u­ment­ing and con­vers­ing in­stead of de­scrib­ing, and us­ing Pantone shades over hex codes.

For more di­rect re­sources, the video It’s not a Coincidence. It’s Colorism. by Tee Noir gives a de­scrip­tion of what col­orism is, and a few ways it man­i­fests in mod­ern pop cul­ture.

Finally, Writing With Color is an ex­cel­lent blog with many re­sources about writ­ing var­i­ous kinds of di­ver­sity. The blog is run by a team with ex­per­tise in many dif­fer­ent ar­eas, and they of­ten take reader ques­tions. In par­tic­u­lar I found their post Words for Skin Tone | How to Describe Skin Color re­ally in­ter­est­ing. As more of a reader than a writer, it’s fas­ci­nat­ing to see be­hind the scenes on how to make bet­ter word choices.

# Principal Component Analysis

Briefly, prin­ci­pal com­po­nent analy­sis (PCA) is a way to ro­tate and stretch a dataset so that the main di­rec­tions of vari­a­tion lie along the axes of the co­or­di­nate sys­tem. To make that more con­crete - re­call the ba­nana shape of my dataset from be­fore. In its orig­i­nal form, the ba­nana was sort of float­ing in space. PCA took that shape and placed in on the ground so that it was sym­met­ri­cal about the axes and aligned nicely. It also did some slight stretch­ing and rescal­ing, but that’s less im­por­tant.

Aside from the mod­i­fied dataset, an­other out­put of the analy­sis is a ma­trix that can be used to take a point from RGB space and trans­late it into the rest­ing-on-the-floor space. I re­fer to this as PCA space, or XYZ space since those are the vari­ables I use for it.

# Manual Function Fitting

To sum­ma­rize what we’ve done so far: we started with data in RGB space (the man­u­ally la­beled dataset). PCA gives us a way to take points in that space and trans­form them into an­other space - XYZ space.

Now the goal is to fit some func­tion to all of these points. Because it’s a dense shape, if we can de­fine the sur­face of it with an equa­tion, we can mod­ify that equa­tion to in­clude the points on the in­side as well by switch­ing the equa­tion to be­ing an in­equal­ity (eg from x² + y² + z² = 2 to x² + y² + z² ≤ 2).

The process for fit­ting the func­tion is as fol­lows:

Start with a func­tion for a sphere: = t² + u² + v² (see Adjusting for why a sphere is used)

Define t, u, and v in terms of x, y, and z

Modify how t, u, and v are de­fined un­til the sphere stretches to match up with the ex­pected data

Invert the re­la­tion­ships in or­der to de­fine x, y, and z in terms of t, u, and v

If you have (t = x, u = y, v = z) as a start­ing point, you can start to play with those re­la­tions un­til you start to get an in­tu­ition for how changes to the equa­tions will end up shift­ing your sphere around.

So I did that! A lot. To put it plainly - I man­u­ally fit func­tions to my tar­get cloud of points. There is no re­gres­sion here, I lit­er­ally did guess and check and eye­balled the func­tion fit. I did this in Desmos 3D - if you haven’t used Desmos in a while it’s amaz­ing how good it was for this.

The func­tions that re­late (t, u, v) to (x, y, z) can be used to trans­late a point be­tween those two spaces. Principal com­po­nent analy­sis gave us a way to move be­tween RGB and XYZ, and then these new equa­tions give us a way to move be­tween XYZ and TUV. Linking up all the trans­for­ma­tions gives us the func­tions that take us be­tween TUV to RGB.

Am I en­dors­ing this method­ol­ogy? No. But also kind of. In this spe­cific sit­u­a­tion it’s what worked to get it done and get func­tional equa­tions. It would be great to see some­one do this prop­erly, with nice clean sym­bolic re­gres­sion and re­ally good train­ing data. But I fig­ured since the train­ing data I la­beled was mid­dling qual­ity at best, I’d prob­a­bly have a bet­ter time us­ing my guess and check and then eye­balling the re­sults.

And all that be­ing said, I think I would en­dorse the over­all method I used, if not the specifics. That be­ing Label Data” → PCA Fit A Spherical Equation”.

# Results

From the equa­tions, the sam­ple code at the top of the page is just a short trans­la­tion away. The next sec­tion is the de­scrip­tion of the com­po­nents of the Picker UI, which also serves as an ex­pla­na­tion of what TUV space ac­tu­ally looks like, and what prop­er­ties it has.

# Picker UI

Just like how a typ­i­cal color picker al­lows you to ad­just red, green and blue val­ues (or hue, sat­u­ra­tion and value), this color picker also has 3 in­de­pen­dent val­ues to ad­just - re­ferred to in the code sam­ples as T, U and V.

What’s re­ally in­ter­est­ing about these con­trols is that the con­cept each is ad­just­ing is com­pletely an out­put of the prin­ci­pal com­po­nent analy­sis. Or in other words, I did­n’t know that these would be what the di­rec­tions con­trolled un­til af­ter I had made the picker. It’s a re­ally neat demon­stra­tion of what prin­ci­pal com­po­nent analy­sis does - it ro­tates data to max­i­mize how mean­ing­ful each axis is.

Now, if you’re ex­pe­ri­enced with color spaces you might be think­ing that this looks a lot like HSL/HSV. However, when I was do­ing my first ex­per­i­ments with the la­beled data those color spaces did­n’t quite cap­ture what I was look­ing for. I think in par­tic­u­lar that al­though T and U seem sim­i­lar to Value and Hue, they don’t com­pletely match up. And the biggest dif­fer­ence is be­tween V and Saturation. V ranges from blue to or­ange, while Saturation would look more like gray to or­ange; al­though at some (T, U) val­ues V might look a lot like Saturation, over­all it does­n’t quite cor­re­late.

# Adjusting

What is R²? is the ra­dius of a sphere in the skin tone color space. Because one of the steps of trans­la­tion from RGB to TUV in­volves a sphere, it makes spheres a nat­ural shape to work with in TUV space. A lot of the cool prop­er­ties that arise from that fact are just a side ef­fect of spheres hav­ing a lot of use­ful prop­er­ties.

To start with a vi­sual, be­low is a table of val­ues, and the re­sult of us­ing a sphere with that value:

So what’s go­ing on with that table? Because a sphere is de­fined by a ra­dius, you can de­fine use­ful sam­pling ranges us­ing only a sin­gle value and then eas­ily se­lect points from within that sphere. For ex­am­ple, in the sam­ple im­ple­men­ta­tion of the tone gen­er­a­tion func­tion I use a ra­dius of 2. This is the ra­dius that was used when de­vel­op­ing the color space and gen­er­ally will re­sult in a broad range of tones. However, if you find there are im­plau­si­ble re­sults gen­er­ated us­ing that ra­dius you can de­crease it by a bit in or­der to re­duce the vari­a­tion in gen­er­ated col­ors.

The fact that the sphere shrinks along a ra­dius means that the re­duc­tion in vari­a­tion ac­tu­ally does not re­sult in a large re­duc­tion in rep­re­sen­ta­tive­ness. In other words, re­duc­ing the ra­dius does­n’t lead to just chop­ping off deep or fair skinned col­ors - deep skin tones, fair skin tones, flush skin tones, ochre skin tones, cool skin tones and warm skin tones are uni­formly de­creased in vari­a­tion.

Taking all the way down to 0, we can iden­tify the ori­gin of the color space. If the space is well formed then this ori­gin point should be a very neu­tral am­bigu­ous tone. If the ori­gin seems bi­ased in a par­tic­u­lar di­rec­tion, then that would in­di­cate that the space needs more fine tun­ing. Essentially, the ori­gin point can be used to iden­tify bias in the space map­ping.

At the other ex­treme, you can in­crease in or­der to al­low for more vari­a­tion. As an ex­am­ple, I do this in the color picker UI. In a picker UI the user can ig­nore im­plau­si­ble col­ors, so there’s lit­tle is­sue with in­creas­ing the vari­a­tion too far. In a color gen­er­a­tion con­text you’d likely want to avoid hav­ing im­plau­si­ble col­ors pop­ping up. There is likely not an ideal value that works in all con­texts, but hav­ing a sin­gle pa­ra­me­ter to tweak makes it easy to ad­just the equa­tions to your needs.

# In Summary

We have a color space, we have a picker for it, we have a pro­ce­dural gen­er­a­tion al­go­rithm, and we have a method­ol­ogy for cre­at­ing new spaces or mod­i­fy­ing the ex­ist­ing one. Overall, I’m thrilled with this re­sult. It’s cer­tainly not per­fect, but I don’t think a sim­ple and com­pletely cor­rect so­lu­tion ex­ists. I’ve al­ready used the picker in a dig­i­tal paint­ing and it was ex­actly as I was hop­ing it’d be - and I’m look­ing for­ward to us­ing the gen­er­a­tor in my next pro­jects.

# What’s Next?

First is feed­back: if you at all found this in­ter­est­ing or use­ful, please let me know! Although I did this work for my own use, hear­ing from oth­ers is also so re­ward­ing. Also please reach out with any ques­tions or feed­back - es­pe­cially if you spot some­thing I did­n’t think about.

Although I would love to post an email ad­dress for ac­ces­si­bil­ity, I think the safest so­lu­tion is to use the is­sues page of the repo for this pro­ject to con­tact me. But open to sug­ges­tions on al­ter­na­tives for that as well!

A task for me is to clean up my code and post it to the repo for this page to make it easy for peo­ple to recre­ate and it­er­ate on this work.

# Future Work

# Refining The Space

In defin­ing the color space so pre­cisely and us­ing spe­cific val­ues, there is a risk that some col­ors have been ex­cluded or mar­gin­al­ized. However, that same con­crete­ness also al­lows for ex­tremely pre­cise cri­tiques of the color space, and there­fore ex­tremely pre­cise im­prove­ments. As men­tioned be­fore, my process in­volved a lot of sub­jec­tive eye­balling - a great it­er­a­tion on that would be to have mul­ti­ple peo­ple, per­haps ex­perts, la­bel­ing data and then mea­sur­ing the out­put more pre­cisely against that.

# Skin Variations and Conditions

A di­rec­tion men­tioned ear­lier would be to look into mod­el­ing sim­pli­fied ver­sions of var­i­ous con­di­tions. What mod­i­fi­ca­tion might you be able to ap­ply to base tones to sim­u­late that per­son hav­ing jaun­dice, or ar­gyria, or be­com­ing pal­lid? What col­ors are freck­les, vi­tiligo, scars, hy­per­pig­men­ta­tion, or stretch marks rel­a­tive to a per­son’s base tone?

# Technical Improvements

From a tech­ni­cal di­rec­tion, mak­ing the equa­tion gen­er­a­tion more for­mal­ized is an­other po­ten­tial di­rec­tion to go. Starting with the shape of equa­tions I man­u­ally de­ter­mined, sym­bolic re­gres­sion on those against bet­ter train­ing data might lead to an even bet­ter color space de­f­i­n­i­tion.

There’s also the po­ten­tial for op­ti­miz­ing the equa­tions for dif­fer­ent con­texts. I’ve cho­sen to write them out in code as they are to be the most read­able to a broad au­di­ence. However, keen math­e­mati­cians might no­tice that one of those steps looks a lot like a ma­trix mul­ti­pli­ca­tion, which can be rewrit­ten to be more ef­fi­cient in cer­tain con­texts.

It might also be in­ter­est­ing to see what the re­sults look like if you trans­form the data into an­other color space be­fore do­ing the prin­ci­pal com­po­nent analy­sis and equa­tion fit­ting. There’s a chance the equa­tions end up be­ing sim­pler or more rep­re­sen­ta­tive. Because of the sphere, the shape of the sur­face in the color space you build from will be main­tained and it will mainly scale with val­ues. For an il­lus­tra­tion of this idea, see the graph script in the re­po’s code.

FFmpeg/RELEASE_NOTES at n9.0 · FFmpeg/FFmpeg

github.com

AI CODE CREATIONGitHub CopilotWrite bet­ter code with AIGitHub Copilot ap­pDi­rect agents from is­sue to mergeMCP RegistryIntegrate ex­ter­nal tools

AI CODE CREATION

GitHub CopilotWrite bet­ter code with AI

GitHub CopilotWrite bet­ter code with AI

GitHub Copilot ap­pDi­rect agents from is­sue to merge

GitHub Copilot ap­pDi­rect agents from is­sue to merge

MCP RegistryIntegrate ex­ter­nal tools

MCP RegistryIntegrate ex­ter­nal tools

DEVELOPER WORKFLOWSActionsAutomate any work­flow­Code­spacesIn­stant dev en­vi­ron­mentsIs­sue­s­Plan and track work­Code ReviewManage code changesCode QualityEnforce qual­ity at merge

DEVELOPER WORKFLOWS

ActionsAutomate any work­flow

ActionsAutomate any work­flow

CodespacesInstant dev en­vi­ron­ments

CodespacesInstant dev en­vi­ron­ments

IssuesPlan and track work

IssuesPlan and track work

Code ReviewManage code changes

Code ReviewManage code changes

Code QualityEnforce qual­ity at merge

Code QualityEnforce qual­ity at merge

APPLICATION SECURITYGitHub Advanced SecurityFind and fix vul­ner­a­bil­i­ti­esCode se­cu­ri­ty­Se­cure your code as you build­Se­cret pro­tec­tion­Stop leaks be­fore they start

APPLICATION SECURITY

GitHub Advanced SecurityFind and fix vul­ner­a­bil­i­ties

GitHub Advanced SecurityFind and fix vul­ner­a­bil­i­ties

Code se­cu­ri­ty­Se­cure your code as you build

Code se­cu­ri­ty­Se­cure your code as you build

Secret pro­tec­tion­Stop leaks be­fore they start

Secret pro­tec­tion­Stop leaks be­fore they start

EXPLOREWhy GitHubDocumentationBlogChangelogMarketplace

EXPLORE

Why GitHub

Documentation

Blog

Changelog

Marketplace

GitHub - ryanzhou/deepseek-v4-flash-mi300x

github.com

DeepSeek V4 Flash on a sin­gle AMD MI300X

This repos­i­tory con­tains the con­fig­u­ra­tion and patches I use to run deepseek-ai/​DeepSeek-V4-Flash-0731 on one AMD MI300X in pro­duc­tion. It in­cludes the Docker Compose stack, SHA-256-pinned file over­lays, ref­er­ence diffs against up­stream, and tun­ing ta­bles. The check­point runs as shipped, with­out ad­di­tional weight quan­ti­za­tion or of­fload.

Results from the pinned stack (vLLM ROCm nightly 0.26.1rc1.dev229+g124154a88.rocm723, AITER 0.1.19):

The of­fi­cial vLLM recipe tar­gets NVIDIA and newer AMD hard­ware. Running the model re­li­ably on MI300X re­quired fixes for its FP8 for­mat, MoE rout­ing at high con­cur­rency, causal spec­u­la­tive ver­i­fi­ca­tion, CPU-KV syn­chro­niza­tion, and sev­eral un­tuned ker­nel shapes. This repos­i­tory col­lects those fixes and pins the ver­sions used in pro­duc­tion.

Why MI300X

The MI300X has 192 GB of HBM3 and 5.3 TB/s of mem­ory band­width, with 2.4× the HBM ca­pac­ity of an H100 SXM5 (AMD). Doubleword’s write-up es­ti­mates that it costs roughly half as much at list price. For this 304B-parameter check­point, the mem­ory ca­pac­ity al­lows a sim­ple sin­gle-GPU de­ploy­ment:

The en­tire model fits in HBM with­out PCIe weight stream­ing or layer of­fload.

There is room for a 20 GB GPU KV pool and a 96 GiB CPU tier for evicted pre­fix-cache en­tries.

One card han­dles 2 – 8 typ­i­cal con­cur­rent streams and bursts of up to 64 streams.

MI300X (CDNA3) im­ple­ments the AMD/Graphcore fnuz vari­ant of E4M3, while MI325X and newer use OCP-standard FP8 (background). A ker­nel that as­sumes OCP se­man­tics on MI300X can be wrong by a fac­tor of two in the scale do­main. Correctness on this FP8 im­ple­men­ta­tion was the first pri­or­ity; per­for­mance tun­ing came af­ter­ward.

Prior art, and what this repo adds

Fergus Finn’s MI300X work­log and the ac­com­pa­ny­ing Doubleword repos­i­tory iden­ti­fied the FP8 in­com­pat­i­bil­ity, miss­ing AITER fast paths on gfx942, HIP-graph haz­ards in sparse MLA de­code, and MoE rout­ing bugs. The of­fi­cial vLLM recipe cov­ers NVIDIA hard­ware and newer AMD GPUs (MI325X at 4K con­text and MI355X), but not a sin­gle-MI300X pro­duc­tion con­fig­u­ra­tion for the 0731 check­point.

This repos­i­tory adds:

Correctness over­lays for the pinned ROCm nightly, in­clud­ing fixes not yet in up­stream vLLM.

A val­i­dated serv­ing con­fig­u­ra­tion with prob­a­bilis­tic DSpark draft­ing, block re­jec­tion, and sta­tic K=7. It uses a 2,048-token sched­uler bud­get and a 1,024-token long-pre­fill cap to pre­vent a cold prompt from stalling other streams.

AITER GEMM tun­ing ta­bles for the re­cur­ring gfx942 shapes the pack­aged ta­bles were miss­ing, plus a gfx942 OGS geom­e­try over­ride for the MXFP4 ex­perts.

A hy­brid KV strat­egy: 20 GB of fp8_d­s_mla GPU cache + 96 GiB na­tive CPU of­fload, with a load-path fenc­ing fix that up­stream is­sue #47282 doc­u­ments but PR #47291 never merged.

Repository lay­out

. ├── com­pose.yaml # The pro­duc­tion stack (vLLM ROCm + Caddy), di­gest-pinned ├── Caddyfile.example # Copy to Caddyfile; set host­name, email, and source CIDR ├── vllm-en­try­point.sh # Removes stale CPU-KV mmaps from /dev/shm be­fore start ├── SHA256SUMS # SHA-256 pins for every run­time ar­ti­fact ├── patches/ │ ├── *.py # Byte-for-byte pro­duc­tion over­lays (mounted read-only) │ ├── diffs/*.​patch # Unified diffs vs. the up­stream base re­vi­sion │ └── README.md # Provenance and re­gen­er­a­tion in­struc­tions └── tun­ing/ └── *.csv # AITER A8W8 blockscale tun­ing ta­bles for gfx942

Runtime con­fig­u­ra­tion

The stack uses a di­gest-pinned of­fi­cial vLLM ROCm nightly with:

–trust-remote-code and the DeepSeek V4 to­k­enizer, rea­son­ing, and tool parsers

fp8_d­s_mla KV cache (UE8M0 block-scaled FP8, not generic un­scaled FP8) with 256-token blocks

VLLM_ROCM_USE_AITER=1 and –moe-backend tri­ton; Triton OGS han­dles the grouped MXFP4 ex­perts, while AITER han­dles at­ten­tion and dense lin­ear lay­ers

DSpark-7 spec­u­la­tive de­cod­ing with prob­a­bilis­tic draft­ing and block re­jec­tion

full/​break­able CUDA graph cap­ture, giv­ing one graph launch per to­ken dur­ing steady de­code

Caddy as an IP-allowlisted HTTPS proxy

Deploying it

1. Host pre­req­ui­sites

One MI300X (gfx942, 304 CUs, ~192 GiB HBM), a work­ing AMD ker­nel dri­ver, re­cent Docker Compose, ~235 GiB RAM for the CPU KV tier, and ~500 GB disk (the model cache alone is ~156 GB).

2. Pull the pinned run­time and model

VLLM_IMAGE=‘vllm/vllm-openai-rocm@sha256:e68d18b2ba50298661bfc49baf01158fbf036645c2362cccf3e8a7a79fe6c69a’ MODEL=‘deepseek-ai/DeepSeek-V4-Flash-0731’ REVISION=‘7872f01b1d1fe23eabc4c98b48bffcef5a386062’

docker pull $VLLM_IMAGE” docker run –rm –entrypoint hf \ -v /root/.cache/huggingface:/root/.cache/huggingface \ $VLLM_IMAGE” down­load $MODEL –revision $REVISION

3. Prepare the files

cp Caddyfile.example Caddyfile # then set your host­name, email, and re­mote_ip CIDR mkdir -p aiter-cache crash-dumps chmod +x vllm-en­try­point.sh sha256­sum -c SHA256SUMS # ver­ify the over­lays be­fore first start

4. Start

docker com­pose con­fig -q docker com­pose up -d docker com­pose logs -f in­fer­ence

A healthy start takes ~5 min­utes and must show all of:

Model load­ing took 156.67 GiB DSpark draft model loaded: 96 params GPU KV cache size: 1,927,444 to­kens Maximum con­cur­rency for 262,144 to­kens per re­quest: 7.35x Created mmap file /dev/shm/vllm_offload_…mmap (103.08 GB) Capturing CUDA graphs (FULL) Application startup com­plete

After graph cap­ture, run rocm-smi –showmeminfo vram. The warmed high-wa­ter mark is ~204.5 GB of 205.8 GB. If only a few hun­dred MB re­main, the server may start but fail on the first re­quest.

5. Smoke-test

HOST=‘your-host.example.com’ curl -fsS https://$​HOST/​v1/​mod­els curl -sS https://$​HOST/​v1/​com­ple­tions \ -H Content-Type: ap­pli­ca­tion/​json’ \ -d {"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "prompt": "Calculate 17 * 23. Answer with the num­ber only.", "temperature": 0, "max_tokens": 32}”

The patches

Each patches/*.​py file is a full-file over­lay mounted read-only over its coun­ter­part in the con­tainer; com­pose.yaml con­tains the tar­get paths. The cor­re­spond­ing diffs/*.​patch records the change from its up­stream base. The base im­age re­mains di­gest-pinned, so up­grades re­quire chang­ing the im­age ref­er­ence and reval­i­dat­ing the stack.

Two im­por­tant cor­rect­ness fixes

MXFP4 rout­ing. The MoE bit­ma­trix ker­nel pads its block columns to a Triton block size, but the padding lanes were masked against the global ten­sor bound in­stead of the log­i­cal block size. Under load, padded lanes cor­rupted the rout­ing ma­trix, caus­ing near-match tool names and for­got­ten schemas on long prompts. The one-line fix is mask = (offs_local < BLOCK_SIZE) & (offs_global < nonze­ro_in­dx_­size), taken from Doubleword com­mit c32932bb9. The over­lay also in­cludes fused-SiLU and fast-rout­ing changes for grouped MXFP4 ex­perts.

FP8 for­mat. DeepSeek V4′s Lightning Indexer cache uses FP8. The stock writer emits OCP E4M3 bytes in row-ma­jor or­der, while AITER on MI300X con­sumes AMD FNUZ E4M3 bytes in a preshuf­fled 16×16 tile lay­out. In the worst case, in­ter­pret­ing one for­mat as the other pro­duces a fac­tor-of-two scale er­ror. The over­lay se­lects float8e4b8 with FP8_MAX=224.0 and shuf­fled write off­sets on ROCm, while leav­ing the OCP path un­changed else­where.

Speculative de­cod­ing

This stack uses prob­a­bilis­tic draft­ing with block re­jec­tion. The two Gumbel over­lays keep draft-pro­posal noise in­de­pen­dent of re­jec­tion and re­cov­ery noise.

Performance

Key op­ti­miza­tions in the pro­duc­tion con­fig­u­ra­tion:

Final con­cur­rency sweep

Distinct ~400-word prompts, stream­ing, tem­per­a­ture=1.0, top_p=0.95; C1–C8 at 512 out­put to­kens, C64 at 256:

DSpark ac­cep­tance is prompt-de­pen­dent; treat these as gates for this ex­act im­age, not uni­ver­sal model bench­marks.

Prefill

With the tuned ker­nels, un­cached pre­fill reaches 7.9 – 8.5K tok/​s, de­pend­ing on sched­uler bud­get: 7.90 – 7.99K at C1 with an 8,192-token bud­get and 8.46 – 8.51K at C4. The pro­duc­tion pro­file uses a 2,048-token bud­get for la­tency iso­la­tion, giv­ing 6,988 – 7,019 tok/​s on fresh prompts. With the 1,024-token long-pre­fill cap, an 8.9K-token prompt reaches 5.20 – 5.29K tok/​s at C1. In ex­change, TTFT for a short re­quest queued be­hind a 52K cold pre­fill drops from 8.2 s to 0.5 s. Warm re­call of 380K cached to­kens takes 0.64 – 2.65 s af­ter a 120 – 125 s cold pre­fill.

Production notes

HBM head­room is lim­ited. The warmed high-wa­ter mark is 204.5 of 205.8 GB. A 30 GB KV pool loads but fails dur­ing graph cap­ture with HSA_STATUS_ERROR_OUT_OF_RESOURCES. Do not raise –kv-cache-memory-bytes; mon­i­tor HBM us­age for growth.

The CPU KV tier stores cache en­tries, not weights. –kv-offloading-size 96 –kv-offloading-backend na­tive maps ~103 GB in /dev/shm for evicted pre­fix-cache en­tries. The en­try­point re­moves stale map­pings af­ter crashes.

The 1,664-token sched­uler warn­ing is ex­pected. DSpark-7 re­serves draft slots from the 2,048-token bud­get. Raising the bud­get re­serves more in-flight slid­ing-win­dow state and re­duces us­able KV ca­pac­ity.

Warm the ker­nels af­ter restart. The first pre­fill ini­tial­izes ker­nels and takes 5.3 s for 8.9K to­kens; sub­se­quent runs take 1.7 s. Run one un­cached pre­fill be­fore ad­mit­ting traf­fic.

Test cor­rect­ness as well as through­put. The val­i­da­tion suite in­cludes two-turn tool-call­ing fix­tures, a BFCL sub­set (74 – 76/90 ex­act calls), OpenCode tool-schema checks, and 380K-token nee­dle re­call on both na­tive and DSpark paths. Cold and cached pre­fills can take dif­fer­ent float­ing-point paths, so test both.

License and prove­nance

The stack, doc­u­men­ta­tion, and vLLM-de­rived over­lays are Apache-2.0 (see LICENSE); the AITER-derived over­lay keeps its MIT header. Upstream base re­vi­sions for every diff are recorded in patches/​README.md. The model it­self is MIT-licensed.

References

All links ver­i­fied 2026 – 08-04.

DeepSeek-V4-Flash-0731 model card — of­fi­cial re­lease; 304B pa­ra­me­ters; fused DSpark mod­ule; rec­om­mended tem­per­a­ture=1.0, top_p=0.95; MIT li­cense

Official vLLM DeepSeek V4 Flash recipe — ref­er­ence launch con­fig­u­ra­tion, DSpark (num_speculative_tokens=7), FP8 KV, block size 256, deepseek_v4 parsers; AMD guid­ance for MI325X/MI355X

Bringing up DeepSeek-V4-Flash on AMD MI300X (Fergus Finn, Doubleword, June 2026) — the bring-up work­log this repo builds on: FNUZ vs. OCP FP8, AITER gaps on gfx942, HIP-graph haz­ards, rout­ing bugs

dou­ble­wor­dai/​vllm-amd-blog-dou­ble­word — demo PRs for the above, in­clud­ing com­mit c32932bb9 (“mask MXFP4 bit­ma­trix padding lanes by log­i­cal block size”)

vLLM com­mit 77469c9 — [ROCm][MLA] Mask the AITER MLA small-head ver­ify flat­ten causally (#50476)”

vLLM is­sue #47282 — CPU-KV load path lacks cross-stream sync with com­pute (WAR gap)

vLLM PR #47291 — pro­posed WAR fix, not merged; car­ried as an over­lay here

AMD Instinct MI300X — 192 GB HBM3, 5.3 TB/s peak band­width, 2.61 PFLOPS peak FP8

ROCm/AITER — AMD tuned-ker­nel li­brary used for ROCm at­ten­tion and dense lin­ears

vLLM — the serv­ing run­time (ROCm nightlies un­der vllm/​vllm-ope­nai-rocm)

All of Winona Police Department’s Flock cameras cut down and stolen

www.valleynewslive.com

WINONA, Minn. (Valley News Live) - Every Flock li­cense plate reader cam­era op­er­ated by the Winona Police Department has been sawed off and stolen in what in­ves­ti­ga­tors be­lieve was a co­or­di­nated theft.

All eight cam­eras were taken Aug. 1, ac­cord­ing to the Winona Police Department. A pa­trol of­fi­cer first no­ticed the cam­eras had not sent any alerts in 24 hours. When of­fi­cers checked the lo­ca­tions, they found the cam­eras had been cut from their poles and taken. The poles were left be­hind.

Two ad­di­tional Flock cam­eras on the Mississippi River Bridge, owned by Buffalo County, were also stolen in the same man­ner.

Each cam­era is val­ued at ap­prox­i­mately $3,000, putting the to­tal loss at roughly $24,000. That cost falls di­rectly on the Winona Police Department’s bud­get.

The eight WPD cam­eras were po­si­tioned at key high­way en­try and exit points through­out the city: near Highway 61 and Bundy Boulevard, Highway 43 and Homer Road, Highway 14 and Knapp Valley Drive, and Highway 61 and Highway 14. Two cam­eras were sta­tioned at each lo­ca­tion.

Flock Safety cam­eras are au­to­mated li­cense plate read­ers that cap­ture im­ages of plates along with a ve­hi­cle’s make, model and color. Police use the tech­nol­ogy to in­ves­ti­gate crimes such as hit-and-runs and to lo­cate miss­ing per­sons. Camera data is owned by the po­lice de­part­ment and per­ma­nently deleted af­ter 30 days.

The thefts are part of a broader na­tional trend. Flock cam­eras have been van­dal­ized and cut down in com­mu­ni­ties across the coun­try. The tech­nol­ogy has drawn crit­i­cism from civil lib­er­ties ad­vo­cates who ar­gue the cam­eras ex­pand gov­ern­ment sur­veil­lance and raise con­cerns about data be­ing shared with third-party com­pa­nies or fed­eral agen­cies.

No sus­pects have been iden­ti­fied. The in­ves­ti­ga­tion is on­go­ing. Anyone with in­for­ma­tion is asked to con­tact the Winona Police Department.

Sources: News 8000 | Winona Post

Copyright 2026 KVLY. All rights re­served.

U.S. has used 'virtually all' of its long-range precision missiles during Iran war: Reuters

www.cnbc.com

The U.S. Army has used up much of its stock­pile of highly ac­cu­rate long-range mis­siles dur­ing its five-month war with Iran, ac­cord­ing to three peo­ple fa­mil­iar ⁠with the data, rais­ing con­cerns about the mil­i­tary’s readi­ness for fu­ture con­flicts.

The mis­siles are prin­ci­pally the Army’s sur­face-to-sur­face weapons, known as Army Tactical Missile Systems (ATACMS) and Precision Strike Missiles (PrSM). The U.S. has used virtually all” of these weapons, ac­cord­ing to two of the sources.

The de­gree to which the ​military is run­ning out of ATACMS and Precision Strike Missiles has not ​been pre­vi­ously re­ported. The long-range mu­ni­tions are an im­por­tant part ​the mil­i­tary’s ar­se­nal, al­low­ing ac­cu­rate strikes from a safe dis­tance. U.S.-supplied ATACMS have played a key role in the war in Ukraine, al­low­ing Ukrainian forces to at­tack tar­gets in­side Russia. The PrSM is a newer, more ad­vanced gen­er­a­tion that will re­place the ATACMS, which have a shorter range.

Analysts say such weapons — which cost over $1 mil­lion each — would also be im­por­tant in any con­flict with China.

The sources de­clined to say how many of each mu­ni­tion the U.S. had left.

President Donald Trump launched the ⁠Iran war ‌jointly with Israel in February, pre­dict­ing that the con­flict would last a short time.

But as the war drags on, the ⁠three peo­ple fa­mil­iar with the mat­ter ex­pressed worry that the falling mis­sile sup­plies could limit the U.S. abil­ity to de­ter ad­ver­saries, in­clud­ing Russia and China.

A fourth per­son fa­mil­iar with the mat­ter said that while Central Command — which over­sees U.S. forces in the Middle East — has nearly used up the land-based mis­siles it had be­fore the war be­gan, it has been able to re­load from U.S. mil­i­tary sup­plies else­where in the world.

The sources in­ter­viewed for this story spoke on the con­di­tion of anonymity.

Asked for com­ment on the stock­pile data, the White House is­sued a state­ment ‌from Trump, say­ing the U.S. had far more mu­ni­tions than any­one in the world” and far more than we need.”

Our de­fense com­pa­nies are, at this mo­ment, mak­ing more mu­ni­tions than they have ever made be­fore, in ad­di­tion to ex­pand­ing their plants and equip­ment at record lev­els,” Trump said.

Analysts agree that cer­tain mu­ni­tions, in­clud­ing ar­tillery shells and sev­eral types of mis­siles, are be­ing pro­duced at record lev­els but cau­tion that ​supplies might far short of what is needed for a pro­longed war.

Lockheed Martin, which makes the ATACMs and PrSMs, along with the anti-bal­lis­tic mis­sile THAAD sys­tem, did not im­me­di­ately re­spond to ques­tions about Trump’s state­ments or about sup­ply lev­els. Raytheon, which makes Tomahawk mis­siles and Patriot in­ter­cep­tors, two im­por­tant U.S. weapons, also did not im­me­di­ately re­spond.

Responding to a re­quest for com­ment, chief Pentagon spokesper­son Sean Parnell said: America’s mil­i­tary is the most pow­er­ful in the world and has every­thing it needs to ex­e­cute at the time and place of the President’s choos­ing. We have ex­e­cuted mul­ti­ple suc­cess­ful op­er­a­tions across com­bat­ant com­mands while en­sur­ing the U.S. mil­i­tary pos­sesses a ⁠deep ar­se­nal of ca­pa­bil­i­ties to pro­tect our peo­ple and our in­ter­ests.”

The sup­ply fig­ures have cir­cu­lated in­side the fed­eral gov­ern­ment over the last week dur­ing tense con­ver­sa­tions in­side the Trump ad­min­is­tra­tion about how much longer the U.S. can con­tinue strik­ing Iran with­out draw­ing down the ‌stockpile to lev­els that would limit the mil­i­tary’s abil­ity to re­spond to crises else­where.

Warnings over weapons sup­plies

One of the sources said the draw­down of the ‌ATACMS and PrSM stock­piles re­flected a de­ci­sion by the Trump ad­min­is­tra­tion to avoid riskier ways of at­tack­ing Iranian tar­gets, such as by us­ing pi­loted air­craft to drop bombs.

Because these weapons al­low the mil­i­tary to at­tack tar­gets from a dis­tance, an­a­lysts say they would be valu­able in a war against an ad­ver­sary with strong air de­fenses, such as China. They have been used to strike tar­gets in­side Iran, ac­cord­ing to a March re­port by the Center for Strategic and International Studies (CSIS).

According to the re­port, PrSM stock­piles were low to start with, since ⁠it is a rel­a­tively new mu­ni­tion, but the U.S. mil­i­tary has or­dered a large num­ber of them for 2027. The Army has said that ATACMS are be­ing phased out and that pro­duc­tion ⁠is shift­ing to the newer PrSM mis­siles.

Military lead­ers have for weeks warned the pres­i­dent that stock­piles of de­fen­sive weapons — in­clud­ing Patriot in­ter­cep­tors, which are ef­fec­tive against bal­lis­tic mis­siles — were dwin­dling, said two of ⁠the sources. Last week, sev­eral me­dia out­lets re­ported Trump had de­cided not to launch an­other mas­sive of­fen­sive in­side Iran in part be­cause his mil­i­tary ad­vis­ers had warned about the U.S. stock­pile.

A U.S. of­fi­cial dis­puted those ac­counts, say­ing Trump chose not to move for­ward with an­other at­tack be­cause of pres­sure from Gulf states.

The Middle East con­flict has sparked in­tense de­bate about Trump’s ​authority to pros­e­cute hos­til­i­ties against Iran with­out con­gres­sional au­tho­riza­tion. No re­quest for a de­c­la­ra­tion of war or an au­tho­riza­tion to ‌use mil­i­tary force has been sub­mit­ted to Congress.

Defensive weapon stocks are also di­min­ished

Last week, CSIS pub­lished a re­port es­ti­mat­ing that be­tween February and July about 65% of Patriot in­ter­cep­tors had been ex­pended and that the num­ber of THAAD bal­lis­tic mis­sile in­ter­cep­tors in U.S. stock­piles was at least 38% lower than at the start of the war. Patriots and THAADs are sys­tems that de­tect and de­stroy in­com­ing mis­siles and are among the most ef­fec­tive in the coun­try’s ar­se­nal.

While Reuters has not seen the sup­ply fig­ures, those num­bers match in­ter­nal U.S. data, two of the sources said.

The U.S. also burned through a lit­tle less than half of its global sup­ply of Tomahawk cruise mis­siles, which are gen­er­ally launched from ships, since the start of the war, one of the sources said.

Reuters could not ​independently ver­ify that num­ber.

The Tomahawk is a Navy weapon, launched from de­stroy­ers, cruis­ers and ‌submarines, and has long served as the sea ser­vice’s prin­ci­pal means of strik­ing heav­ily de­fended tar­gets with­out risk­ing pi­lots.

Raytheon, a unit of RTX, has reached a ten­ta­tive multi-year agree­ment with the Pentagon aimed at boost­ing Tomahawk pro­duc­tion, along­side in­creases in other mu­ni­tions, as Washington races to re­build stock­piles.

Apple says more ex-employees may have taken confidential data to OpenAI

techcrunch.com

Apple is now seek­ing a pre­lim­i­nary in­junc­tion in its trade se­crets case against OpenAI, which aims to stop the AI model maker from mov­ing for­ward with de­vel­op­ing an AI de­vice or other prod­ucts based on Apple’s tech­nol­ogy. The iPhone maker also claims that more of its for­mer em­ploy­ees may be in­volved with the trade se­crets theft.

In a new fil­ing, Apple is re­quest­ing ex­pe­dited dis­cov­ery from the ac­cused OpenAI em­ploy­ees, se­nior sys­tems en­gi­neer Chang Liu and Chief Hardware Officer Tang Yew Tan; OpenAI, and its foun­da­tion; and io, the de­vice startup co-founded by Apple’s for­mer lead de­signer Jony Ive.

Apple also notes that its con­tin­ued in­ves­ti­ga­tion has so far re­vealed 11 other for­mer Apple em­ploy­ees be­yond Liu and Tan may have been wit­nesses or oth­er­wise in­volved in the case, and oth­ers who were pre­vi­ously named in the orig­i­nal com­plaint, like OpenAI em­ployee Yu-Ting Peng.

The fil­ing marks an es­ca­la­tion in Apple’s le­gal bat­tle with OpenAI, as it sug­gests Apple has un­cov­ered new ev­i­dence that the mis­con­duct goes be­yond the for­mer em­ploy­ees named in the orig­i­nal com­plaint.

For ex­am­ple, an­other for­mer Apple em­ployee seems to have met with Mr. Liu and Ms. Peng in ad­vance of Ms. Peng’s in­ter­view at OpenAI and dis­cussed with them dur­ing that meet­ing Apple pro­pri­etary in­for­ma­tion re­lat­ing to unan­nounced prod­ucts,” the fil­ing states. Yet an­other for­mer Apple em­ployee took screen­shots of con­fi­den­tial Apple doc­u­ments re­lat­ing to an unan­nounced Apple prod­uct be­fore an in­ter­view at OpenAI.”

And, af­ter Apple filed its com­plaint, mul­ti­ple for­mer Apple em­ploy­ees now work­ing at OpenAI reached out to dis­cuss re­turn­ing Apple-issued work de­vices they kept when they left Apple,” Apple claims, sug­gest­ing there were more who were pos­si­bly in­volved with the scheme.

Apple is push­ing the court to al­low for ex­pe­dited dis­cov­ery be­cause it be­lieves it has good cause to sus­pect that there are oth­ers in­volved in the theft of its in­tel­lec­tual prop­erty. The com­pany noted that its mo­tion for a pre­lim­i­nary in­junc­tion is also pend­ing.

OpenAI re­sponded pub­licly to Apple’s lat­est, say­ing in a blog post that Apple’s re­quest for a pre­lim­i­nary in­junc­tion is both based on false in­for­ma­tion and com­pletely un­nec­es­sary be­cause we do not have, nor want, any of their trade se­crets.”

We’re much more in­ter­ested in build­ing in­no­v­a­tive prod­ucts and tech­nolo­gies that push the fron­tier,” OpenAI’s state­ment reads.

The AI model maker also pointed to ear­lier mis­takes Apple made, which had been re­ported, in­clud­ing that Apple emailed the wrong per­son when it made con­tact with OpenAI af­ter con­fus­ing two sim­i­lar sur­names. OpenAI also al­leges that Apple lied about dis­cussing mat­ters with its gen­eral coun­sel. And, the com­pany said that Apple did­n’t ad­mit to the claim that the residual ac­cess” al­low­ing for­mer em­ploy­ees to ac­cess Apple’s sys­tem was the re­sult of poor se­cu­rity pro­ce­dures on Apple’s part.

When you pur­chase through links in our ar­ti­cles, we may earn a small com­mis­sion. This does­n’t af­fect our ed­i­to­r­ial in­de­pen­dence.

Sarah has worked as a re­porter for TechCrunch since August 2011. She joined the com­pany af­ter hav­ing pre­vi­ously spent over three years at ReadWriteWeb. Prior to her work as a re­porter, Sarah worked in I.T. across a num­ber of in­dus­tries, in­clud­ing bank­ing, re­tail and soft­ware.

You can con­tact or ver­ify out­reach from Sarah by email­ing sarahp@techcrunch.com or via en­crypted mes­sage at sarah­perez.01 on Signal.

View Bio

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

Visit pancik.com for more.