10 interesting stories served every morning and every evening.




1 927 shares, 35 trendiness

Pankajtanwarbanna/stfu: stfu

i was at bom­bay air­port. some dude was watch­ing reels on full vol­ume and laugh­ing loudly. ask­ing nicely does­n’t work any­more. me be­ing me, did­n’t have the courage to speak up.

so i built a tiny app that plays back the same au­dio it hears, de­layed by ~2 sec­onds. asked claude, it spat out a work­ing ver­sion in one prompt. sur­pris­ingly WORKS.

some­thing some­thing au­di­tory feed­back loop some­thing some­thing cog­ni­tive dis­so­nance. idk i’m not a neu­ro­sci­en­tist. all i know is it makes peo­ple shut up and that’s good enough for me.

straight up hon­est - orig­i­nally called this make-it-stop” but then saw @TimDarcet also built sim­i­lar and named it STFU. wayyyyy bet­ter name. so stole it. sorry not sorry.

made with spite and web au­dio api. do what­ever you want with it.

yo, mean­while if you are new here, you might find my, other side pro­jects kinda funny.

...

Read the original on github.com »

2 635 shares, 26 trendiness

Cursor's latest "browser experiment" implied success without evidence

In the blog post, they talk about their ex­per­i­ments with run­ning coding agents au­tonomously for weeks” with the ex­plicit goal of

un­der­stand[ing] how far we can push the fron­tier of agen­tic cod­ing for pro­jects that typ­i­cally take hu­man teams months to com­plete

They talk about some ap­proaches they tried, why they think those failed, and how to ad­dress the dif­fi­cul­ties.

Finally they ar­rived at a point where some­thing solved most of our co­or­di­na­tion prob­lems and let us scale to very large pro­jects with­out any sin­gle agent”, which then led to this:

To test this sys­tem, we pointed it at an am­bi­tious goal: build­ing a web browser from scratch. The agents ran for close to a week, writ­ing over 1 mil­lion lines of code across 1,000 files. You can ex­plore the source code on GitHub (https://​github.com/​wilson­zlin/​fas­tren­der)

This is where things get a bit murky and un­clear. They claim Despite the code­base size, new agents can still un­der­stand it and make mean­ing­ful progress” and Hundreds of work­ers run con­cur­rently, push­ing to the same branch with min­i­mal con­flicts”, but they never ac­tu­ally say if this is suc­cess­ful or not, is it ac­tu­ally work­ing? Can you run this browser your­self? We don’t know and they never say ex­plic­itly.

After this, they em­bed the fol­low­ing video:

And be­low it, they say While it might seem like a sim­ple screen­shot, build­ing a browser from scratch is ex­tremely dif­fi­cult.”.

er­ror: could not com­pile fastrender’ (lib) due to 34 pre­vi­ous er­rors; 94 warn­ings emit­ted

And if you try to com­pile it your­self, you’ll see that it’s very far away from be­ing a func­tional browser at all, and seem­ingly, it never ac­tu­ally was able to build.

Multiple re­cent GitHub Actions runs on main show fail­ures (including work­flow-file er­rors), and in­de­pen­dent build at­tempts re­port dozens of com­piler er­rors, re­cent PRs were all merged with fail­ing CI, and go­ing back in the Git his­tory from most re­cent com­mit back 100 com­mits,

I

could­n’t find a sin­gle com­mit that com­piled cleanly.

I’m not sure what the agents” they un­leashed on this code­base ac­tu­ally did, but they seem­ingly never ran cargo build” or even less cargo check”, be­cause both of those com­mands sur­face 10s of er­rors (which surely would bal­loon should we solve them) and about 100 warn­ings. There is an open GitHub is­sue in their repos­i­tory about this right now: https://​github.com/​wilson­zlin/​fas­tren­der/​is­sues/​98

And div­ing into the code­base, if the com­pi­la­tion er­rors did­n’t make that clear al­ready, makes it very clear to any soft­ware de­vel­oper that none of this is ac­tu­ally en­gi­neered code. It is what is typ­i­cally known as AI slop”, low qual­ity some­thing that surely rep­re­sents

some­thing, but it does­n’t have in­ten­tion be­hind it, and it does­n’t even com­pile at this point.

They later start to talk about what’s next, but not a sin­gle word about how to run it, what to ex­pect, how it’s work­ing or any­thing else. Cursor’s blog post pro­vides no re­pro­ducible demo and no known-good re­vi­sion (tag/release/commit) to ver­ify the screen­shots, be­yond link­ing the repo.

Regardless of in­tent, Cursor’s blog post cre­ates the im­pres­sion of a func­tion­ing pro­to­type while leav­ing out the ba­sic re­pro­ducibil­ity mark­ers one would ex­pect from such claim. They never ex­plic­itly claim it’s ac­tu­ally work­ing, so no one can say they lied at least.

They fin­ish off the ar­ti­cle say­ing:

But the core ques­tion, can we scale au­tonomous cod­ing by throw­ing more agents at a prob­lem, has a more op­ti­mistic an­swer than we ex­pected.

Which seems like a re­ally strange con­clu­sion to ar­rive at, when all they’ve proved so far, is that agents can out­put mil­lions of to­kens and still not end up with some­thing that ac­tu­ally works.

A browser ex­per­i­ment” does­n’t need to ri­val Chrome. A rea­son­able min­i­mum bar is: it com­piles on a sup­ported tool­chain and can ren­der a triv­ial HTML file. Cursor’s post does­n’t demon­strate that bar, and cur­rent pub­lic build at­tempts fail at this too.

Cursor never says this browser is pro­duc­tion-ready”, but they do frame it as building a web browser from scratch” and meaningful progress” and then use a screen­shot and extremely dif­fi­cult” lan­guage, want­ing to give the im­pres­sion that this ex­per­i­ment ac­tu­ally was a suc­cess.

The clos­est they get to im­ply­ing that this was a suc­cess, is this part:

Hundreds of agents can work to­gether on a sin­gle code­base for weeks, mak­ing real progress on am­bi­tious pro­jects.

But this ex­tra­or­di­nary claim is­n’t backed up by any ev­i­dence. In the blog post they never pro­vide a work­ing com­mit, build in­struc­tions or even a demo that can be re­pro­duced.

I don’t think any­one ex­pects this browser to be the next Chrome, but I do think that if you claim you’ve built a browser, it should at least be able to demon­strate be­ing able to be com­piled + load­ing a ba­sic HTML file at the very least.

@@ -33 +33 @@ And if you try to com­pile it your­self, you’ll see that it’s very far away from b

Multiple re­cent GitHub Actions runs on `main` show fail­ures (including work­flow-file er­rors), and in­de­pen­dent build at­tempts re­port dozens of com­piler er­rors, re­cent PRs were all merged with fail­ing CI, and go­ing back in the Git his­tory from most re­cent com­mit back

-about

100

-commits, I

+commits,

[I

could­n’t find a sin­gle com­mit that com­piled

-cleanly.

+cleanly](https://​gist.github.com/​em­bed­ding-shapes/​f5d096d­d10be44f­f82b6e5c­cdaf00b29).

@@ -9,3 +9 @@ On January 14th 2026, Cursor pub­lished a blog post ti­tled Scaling long-run­ning

-In the blog post, they talk about their ex­per­i­ments with run­ning coding agents au­tonomously for weeks”

-with the ex­plicit goal of

+In the blog post, they talk about their ex­per­i­ments with run­ning coding agents au­tonomously for weeks” with the ex­plicit goal of

@@ -33 +33,3 @@ And be­low it, they say While it might seem like a sim­ple screen­shot, build­ing a

And if you try to com­pile it your­self, you’ll see that it’s very far away from be­ing a func­tional browser at all, and seem­ingly, it never ac­tu­ally was able to build.

Multiple re­cent GitHub Actions runs on `main` show fail­ures (including work­flow-file er­rors), and in­de­pen­dent build at­tempts re­port dozens of com­piler er­rors, re­cent PRs were all merged with fail­ing CI, and go­ing back in the Git his­tory from most re­cent

-commit,

+commit back about 100 com­mits,

I could­n’t find a sin­gle com­mit that com­piled cleanly.

@@ -37 +39 @@ I’m not sure what the agents” they un­leashed on this code­base ac­tu­ally did, but

And div­ing into the code­base, if the com­pi­la­tion er­rors did­n’t make that

-sure,

+clear al­ready,

makes it very clear to any soft­ware de­vel­oper that none of this is ac­tu­ally en­gi­neered code. It is what is typ­i­cally known as AI slop”, low qual­ity *something* that surely rep­re­sents *something*, but it does­n’t have in­ten­tion be­hind it, and it does­n’t even com­pile at this point.

@@ -59 +61 @@ The clos­est they get to im­ply­ing that this was a suc­cess, is this part:

But this ex­tra­or­di­nary claim is­n’t backed up by any ev­i­dence. In the blog post they never pro­vide a work­ing com­mit, build in­struc­tions or even a demo that can

+be

re­pro­duced.

@@ -21 +21 @@ Finally they ar­rived at a point where some­thing solved most of our co­or­di­na­tion

This is where things get a bit murky and un­clear. They claim Despite the code­base size, new agents can still un­der­stand it and make mean­ing­ful progress” and Hundreds of work­ers run con­cur­rently, push­ing to the same branch with min­i­mal con­flicts”, but they never ac­tu­ally say if this is suc­cess­ful or not, is it ac­tu­ally work­ing? Can you run this browser your­self? We don’t know and they never

-say.

+say ex­plic­itly.

@@ -25 +25 @@ After this, they em­bed the fol­low­ing video:

-[video]

+![](/content/cursor-screenshots.webm)

@@ -33 +33 @@ And be­low it, they say While it might seem like a sim­ple screen­shot, build­ing a

And if you try to com­pile it your­self, you’ll see that it’s very far away from be­ing a func­tional browser at all, and seem­ingly, it never ac­tu­ally was able to build. Multiple re­cent

-CI work­flow

+GitHub Actions

runs on `main`

-are fail­ing, all the

+show fail­ures (including work­flow-file er­rors), and in­de­pen­dent build at­tempts re­port dozens of com­piler er­rors, re­cent

PRs were

+all

merged with fail­ing CI, and go­ing back in the Git his­tory from most re­cent com­mit, I could­n’t find a sin­gle com­mit that com­piled cleanly.

@@ -39 +39,3 @@ And div­ing into the code­base, if the com­pi­la­tion er­rors did­n’t make that sure, m

They later start to talk about what’s next, but not a sin­gle word about how to run it, what to ex­pect, how it’s work­ing or any­thing else. Cursor’s blog post pro­vides no re­pro­ducible

-demo/build in­struc­tions or

+demo and no

known-good

-commit,

+revision (tag/release/commit) to ver­ify the screen­shots,

be­yond link­ing the repo.

Regardless of in­tent, Cursor’s blog post cre­ates the im­pres­sion of a func­tion­ing pro­to­type while leav­ing out the ba­sic re­pro­ducibil­ity mark­ers one would ex­pect from such claim. They never ex­plic­itly claim it’s ac­tu­ally work­ing, so no one can say they lied at least.

@@ -46,0 +49,2 @@ Which seems like a re­ally strange con­clu­sion to ar­rive at, when all they’ve prov

+A browser ex­per­i­ment” does­n’t need to ri­val Chrome. A rea­son­able min­i­mum bar is: it com­piles on a sup­ported tool­chain and can ren­der a triv­ial HTML file. Cursor’s post does­n’t demon­strate that bar, and cur­rent pub­lic build at­tempts fail at this too.

@@ -55 +59 @@ The clos­est they get to im­ply­ing that this was a suc­cess, is this part:

But this ex­tra­or­di­nary claim is­n’t backed up by any ev­i­dence.

-They

+In the blog post they

never pro­vide a work­ing com­mit, build in­struc­tions or even a demo that can re­pro­duced.

@@ -0,0 +1,57 @@

+date: 2026-01-16

+# Cursor’s lat­est browser ex­per­i­ment” im­plied suc­cess with­out ev­i­dence

+On January 14th 2026, Cursor pub­lished a blog post ti­tled Scaling long-run­ning au­tonomous cod­ing” (https://​cur­sor.com/​blog/​scal­ing-agents)

+In the blog post, they talk about their ex­per­i­ments with run­ning coding agents au­tonomously for weeks”

+with the ex­plicit goal of

+> un­der­stand[ing] how far we can push the fron­tier of agen­tic cod­ing for pro­jects that typ­i­cally take hu­man teams months to com­plete

+They talk about some ap­proaches they tried, why they think those failed, and how to ad­dress the dif­fi­cul­ties.

+Finally they ar­rived at a point where some­thing solved most of our co­or­di­na­tion prob­lems and let us scale to very large pro­jects with­out any sin­gle agent”, which then led to this:

+> To test this sys­tem, we pointed it at an am­bi­tious goal: build­ing a web browser from scratch. The agents ran for close to a week, writ­ing over 1 mil­lion lines of code across 1,000 files. You can ex­plore the source code on GitHub (https://​github.com/​wilson­zlin/​fas­tren­der)

+This is where things get a bit murky and un­clear. They claim Despite the code­base size, new agents can still un­der­stand it and make mean­ing­ful progress” and Hundreds of work­ers run con­cur­rently, push­ing to the same branch with min­i­mal con­flicts”, but they never ac­tu­ally say if this is suc­cess­ful or not, is it ac­tu­ally work­ing? Can you run this browser your­self? We don’t know and they never say.

...

Read the original on embedding-shapes.github.io »

3 424 shares, 13 trendiness

Canada breaks with US, slashes 100% tariffs on Chinese EVs to 6%

In a mas­sive shift in North American trade pol­icy, Prime Minister Mark Carney an­nounced to­day a new strategic part­ner­ship” with China that ef­fec­tively re­opens the Canadian bor­der to Chinese elec­tric ve­hi­cles.

The move marks a sig­nif­i­cant de­par­ture from the United States’ hard­line pro­tec­tion­ist stance and could bring af­ford­able EV op­tions like the BYD Seagull to Canadian roads as early as this year.

For the last two years, Canada has largely walked in lock­step with the US re­gard­ing Chinese EV tar­iffs. Following the Biden ad­min­is­tra­tion’s move to im­pose 100% tar­iffs on Chinese EVs, Canada im­ple­mented sim­i­lar sur­taxes, ef­fec­tively freez­ing com­pa­nies like BYD, Nio, and Zeekr out of the mar­ket.

As part of a broader trade agree­ment se­cured by Prime Minister Carney in Beijing this week, Canada has agreed to al­low an an­nual quota of 49,000 Chinese elec­tric ve­hi­cles into the coun­try at the tar­iff rate of just 6.1%.

According to the Prime Minister’s of­fice, this vol­ume rep­re­sents less than 3% of the Canadian new ve­hi­cle mar­ket. However, the deal ex­plic­itly tar­gets the low end of the mar­ket, with the gov­ern­ment an­tic­i­pat­ing that within five years, more than 50% of these ve­hi­cles will be af­ford­able EVs with an im­port price of less than $35,000.”

In ex­change for open­ing the EV flood­gates (or at least start­ing to break the dam), China has agreed to lower tar­iffs on Canadian canola seed from roughly 85% to 15% and to lift re­stric­tions on Canadian lob­ster and crab.

The Canadian gov­ern­ment claims this is­n’t just about im­ports. The text of the agree­ment states that the deal is ex­pected to drive con­sid­er­able new Chinese joint-ven­ture in­vest­ment in Canada” to build out the do­mes­tic EV sup­ply chain.

While 49,000 ve­hi­cles might sound like a small num­ber com­pared to the to­tal mar­ket, it’s a spe­cific, tar­geted wedge that changes the en­tire dy­namic of the North American EV mar­ket.

For years, we at Electrek have ar­gued that pro­tec­tion­ism, while per­haps pro­tect­ing legacy au­tomaker jobs in the short term, ul­ti­mately hurts con­sumers and slows down the tran­si­tion to sus­tain­able trans­port.

Meanwhile, pro­tect­ing do­mes­tic au­tomak­ers from Chinese com­pe­ti­tion in their home mar­ket makes them less com­pet­i­tive on the global stage, vir­tu­ally giv­ing the global mar­ket to China.

The re­al­ity is that Chinese au­tomak­ers are cur­rently build­ing some of the best, most af­ford­able EVs in the world. Keeping them out en­tirely not only hurts con­sumers but also hurts in­no­va­tion.

Of course, this is go­ing to make Washington fu­ri­ous. The US has been try­ing to build a Fortress North America” against Chinese EVs. By let­ting 49,000 units in tar­iff-free (or near tar­iff-free), Canada is ef­fec­tively say­ing it val­ues af­ford­able cli­mate so­lu­tions (and canola ex­ports) more than com­plete align­ment with US in­dus­trial pol­icy, which is un­der­stand­able since the US was the one to go hos­tile on trade with Canada.

The in­ter­est­ing de­tail here is the Joint Venture” lan­guage. It looks like Carney is tak­ing a page out of China’s own play­book. Canada seems to be us­ing this quota as a car­rot to get com­pa­nies like BYD or CATL to set up shop in Canada and maybe help Canadian com­pa­nies learn from those gi­ants.

...

Read the original on electrek.co »

4 343 shares, 71 trendiness

a deep dive into ASCII rendering

Recently, I’ve been spend­ing my time build­ing an im­age-to-ASCII ren­derer. Below is the re­sult — try drag­ging it around, the demo is in­ter­ac­tive!

One thing I spent a lot of ef­fort on is get­ting edges look­ing sharp. Take a look at this ro­tat­ing cube ex­am­ple:

Try open­ing the split” view. Notice how well the char­ac­ters fol­low the con­tour of the square.

This ren­derer works well for an­i­mated scenes, like the ones above, but we can also use it to ren­der sta­tic im­ages:

The im­age of Saturn was gen­er­ated with ChatGPT.

Then, to get bet­ter sep­a­ra­tion be­tween dif­fer­ent col­ored re­gions, I also im­ple­mented a cel shad­ing-like ef­fect to en­hance con­trast be­tween edges. Try drag­ging the con­trast slider be­low:

The con­trast en­hance­ment makes the sep­a­ra­tion be­tween dif­fer­ent col­ored re­gions far clearer. That was key to mak­ing the 3D scene above look as good as it does.

I put so much fo­cus on sharp edges be­cause they’re an as­pect of ASCII ren­der­ing that is of­ten over­looked when pro­gram­mat­i­cally ren­der­ing im­ages as ASCII. Consider this an­i­mated 3D scene from Cognition’s land­ing page that is ren­dered via ASCII char­ac­ters:

It’s a cool ef­fect, es­pe­cially while in mo­tion, but take a look at those blurry edges! The char­ac­ters fol­low the cube con­tours very poorly, and as a re­sult, the edges look blurry and jagged in places:

This blur­ri­ness hap­pens be­cause the ASCII char­ac­ters are be­ing treated like pix­els — their shape is ig­nored. It’s dis­ap­point­ing to see be­cause ASCII art looks so much bet­ter when shape is uti­lized. I don’t be­lieve I’ve ever seen shape uti­lized in gen­er­ated ASCII art, and I think that’s be­cause it’s not re­ally ob­vi­ous how to con­sider shape when build­ing an ASCII ren­derer.

I started build­ing my ASCII ren­derer to prove to my­self that it’s pos­si­ble to uti­lize shape in ASCII ren­der­ing. In this post, I’ll cover the tech­niques and ideas I used to cap­ture shape and build this ASCII ren­derer in de­tail.

We’ll start with the ba­sics of im­age-to-ASCII con­ver­sion and see where the com­mon is­sue of blurry edges comes from. After that, I’ll show you the ap­proach I used to fix that and achieve sharp, high-qual­ity ASCII ren­der­ing. At the end, we’ll im­prove on that by im­ple­ment­ing the con­trast en­hance­ment ef­fect I showed above.

Let’s get to it!

ASCII con­tains 95 print­able char­ac­ters that we can use. Let’s start off by ren­der­ing the fol­low­ing im­age con­tain­ing a white cir­cle us­ing those ASCII char­ac­ters:

ASCII art is (almost) al­ways ren­dered us­ing a mono­space font. Since every char­ac­ter in a mono­space font is equally wide and tall, we can split the im­age into a grid. Each grid cell will con­tain a sin­gle ASCII char­ac­ter.

The im­age with the cir­cle is pix­els. For the ASCII grid, I’ll pick a row height of pix­els and a col­umn width of pix­els. That splits the can­vas into rows and columns — an grid:

Monospace char­ac­ters are typ­i­cally taller than they are wide, so I made each grid cell a bit taller than it is wide.

Our task is now to pick which char­ac­ter to place in each cell. The sim­plest ap­proach is to cal­cu­late a light­ness value for each cell and pick a char­ac­ter based on that.

We can get a light­ness value for each cell by sam­pling the light­ness of the pixel at the cel­l’s cen­ter:

We want each pix­el’s light­ness as a nu­meric value be­tween and , but our im­age data con­sists of pix­els with RGB color val­ues.

We can use the fol­low­ing for­mula to con­vert an RGB color (with com­po­nent val­ues be­tween and ) to a light­ness value:

Now that we have a light­ness value for each cell, we want to use those val­ues to pick ASCII char­ac­ters. As men­tioned be­fore, ASCII has 95 print­able char­ac­ters, but let’s start sim­ple with just these char­ac­ters:

We can sort them in ap­prox­i­mate den­sity or­der like so, with lower-den­sity char­ac­ters to the left, and high-den­sity char­ac­ters to the right:

I added space as the first (least dense) char­ac­ter.

We can then map light­ness val­ues be­tween and to one of those char­ac­ters like so:

This maps low light­ness val­ues to low-den­sity char­ac­ters and high light­ness val­ues to high-den­sity char­ac­ters.

Rendering the cir­cle from above with this method gives us:

That works… but the re­sult is pretty ugly. We seem to al­ways get @ for cells that fall within the cir­cle and a space for cells that fall out­side.

That is hap­pen­ing be­cause we’ve pretty much just im­ple­mented near­est-neigh­bor down­sam­pling. Let’s see what that means.

Downsampling, in the con­text of im­age pro­cess­ing, is tak­ing a larger im­age (in our case, the im­age with the cir­cle) and us­ing that im­age’s data to con­struct a lower res­o­lu­tion im­age (in our case, the ASCII grid). The pixel val­ues of the lower res­o­lu­tion im­age are cal­cu­lated by sam­pling val­ues from the higher res­o­lu­tion im­age.

The sim­plest and fastest method of sam­pling is near­est-neigh­bor in­ter­po­la­tion, where, for each cell (pixel), we only take a sin­gle sam­ple from the higher res­o­lu­tion im­age.

Consider the cir­cle ex­am­ple again. Using near­est-neigh­bor in­ter­po­la­tion, every sam­ple ei­ther falls in­side or out­side of the shape, re­sult­ing in ei­ther or light­ness:

If, in­stead of pick­ing an ASCII char­ac­ter for each grid cell, we color each grid cell (pixel) ac­cord­ing to the sam­pled value, we get the fol­low­ing pix­e­lated ren­der­ing:

This pix­e­lated ren­der­ing is pretty much equiv­a­lent to the ASCII ren­der­ing from be­fore. The only dif­fer­ence is that in­stead of @s we have white pix­els, and in­stead of spaces we have black pix­els.

These square, jagged look­ing edges are alias­ing ar­ti­facts, com­monly called jag­gies. They’re a com­mon re­sult of us­ing near­est-neigh­bor in­ter­po­la­tion.

To get rid of jag­gies, we can col­lect more sam­ples for each cell. Consider this line:

The line’s slope on the axis is . When we pix­e­late it with near­est-neigh­bor in­ter­po­la­tion, we get the fol­low­ing:

Let’s try to get rid of the jag­gi­ness by tak­ing mul­ti­ple sam­ples within each cell and us­ing the av­er­age sam­pled light­ness value as the cel­l’s light­ness. The ex­am­ple be­low lets you vary the num­ber of sam­ples us­ing the slider:

With mul­ti­ple sam­ples, cells that lie on the edge of a shape will have some of their sam­ples fall within the shape, and some out­side of it. Averaging those, we get gray in-be­tween col­ors that smooth the down­sam­pled im­age. Below is the same ex­am­ple, but with an over­lay show­ing where the sam­ples are taken:

This method of col­lect­ing mul­ti­ple sam­ples from the larger im­age is called su­per­sam­pling. It’s a com­mon method of spa­tial anti-alias­ing (avoiding jag­gies at edges). Here’s what the ro­tat­ing square looks like with su­per­sam­pling (using sam­ples for each cell):

Let’s look at what su­per­sam­pling does for the cir­cle ex­am­ple from ear­lier. Try drag­ging the sam­ple qual­ity slider:

The cir­cle be­comes less jagged, but the edges feel blurry. Why’s that?

Well, they feel blurry be­cause we’re pretty much just ren­der­ing a low-res­o­lu­tion, pix­e­lated im­age of a cir­cle. Take a look at the pix­e­lated view:

The ASCII and pix­e­lated views are mir­ror im­ages of each other. Both are just low-res­o­lu­tion ver­sions of the orig­i­nal high-res­o­lu­tion im­age, scaled up to the orig­i­nal’s size — it’s no won­der they both look blurry.

Increasing the num­ber of sam­ples is in­suf­fi­cient. No mat­ter how many sam­ples we take per cell, the sam­ples will be av­er­aged into a sin­gle light­ness value, used to ren­der a sin­gle pixel.

And that’s the core prob­lem: treat­ing each grid cell as a pixel in an im­age. It’s an ob­vi­ous and sim­ple method, but it dis­re­gards that ASCII char­ac­ters have shape.

We can make our ASCII ren­der­ings far more crisp by pick­ing char­ac­ters based on their shape. Here’s the cir­cle ren­dered that way:

The char­ac­ters fol­low the con­tour of the cir­cle very well. By pick­ing char­ac­ters based on shape, we get a far higher ef­fec­tive res­o­lu­tion. The re­sult is also more vi­su­ally in­ter­est­ing.

Let’s see how we can im­ple­ment this.

So what do I mean by shape? Well, con­sider the char­ac­ters T, L, and O placed within grid cells:

The char­ac­ter T is top-heavy. Its vi­sual den­sity in the up­per half of the grid cell is higher than in the lower half. The op­po­site can be said for L — it’s bot­tom-heavy. O is pretty much equally dense in the up­per and lower halves of the cell.

We might also com­pare char­ac­ters like L and J. The char­ac­ter L is heav­ier within the left half of the cell, while J is heav­ier in the right half:

We also have more extreme” char­ac­ters, such as _ and ^, that only oc­cupy the lower or up­per por­tion of the cell, re­spec­tively:

This is, roughly, what I mean by shape” in the con­text of ASCII ren­der­ing. Shape refers to which re­gions of a cell a given char­ac­ter vi­su­ally oc­cu­pies.

To pick char­ac­ters based on their shape, we’ll some­how need to quan­tify (put num­bers to) the shape of each char­ac­ter.

Let’s start by only con­sid­er­ing how much char­ac­ters oc­cupy the up­per and lower re­gions of our cell. To do that, we’ll de­fine two sampling cir­cles” for each grid cell — one placed in the up­per half and one in the lower half:

It may seem odd or ar­bi­trary to use cir­cles in­stead of just split­ting the cell into two rec­tan­gles, but us­ing cir­cles will give us more flex­i­bil­ity later on.

A char­ac­ter placed within a cell will over­lap each of the cel­l’s sam­pling cir­cles to some ex­tent.

One can com­pute that over­lap by tak­ing a bunch of sam­ples within the cir­cle (for ex­am­ple, at every pixel). The frac­tion of sam­ples that land in­side the char­ac­ter gives us the over­lap as a nu­meric value be­tween and :

For T, we get an over­lap of ap­prox­i­mately for the up­per cir­cle and for the lower. Those over­lap val­ues form a -dimensional vec­tor:

We can gen­er­ate such a -dimensional vec­tor for each char­ac­ter within the ASCII al­pha­bet. These vec­tors quan­tify the shape of each ASCII char­ac­ter along these di­men­sions (upper and lower). I’ll call these vec­tors shape vec­tors.

Below are some ASCII char­ac­ters and their shape vec­tors. I’m col­or­ing the sam­pling cir­cles us­ing the com­po­nent val­ues of the shape vec­tors:

We can use the shape vec­tors as 2D co­or­di­nates — here’s every ASCII char­ac­ter on a 2D plot:

Let’s say that we have our ASCII char­ac­ters and their as­so­ci­ated shape vec­tors in a CHARACTERS ar­ray:

We can then per­form a near­est neigh­bor search like so:

The find­BestChar­ac­ter func­tion gives us the ASCII char­ac­ter whose shape best matches the in­put lookup vec­tor.

Note: this brute force search is not very per­for­mant. This be­comes a bot­tle­neck when we start ren­der­ing thou­sands of ASCII char­ac­ters at  . I’ll talk more about this later.

To make use of this in our ASCII ren­derer, we’ll cal­cu­late a lookup vec­tor for each cell in the ASCII grid and pass it to find­BestChar­ac­ter to de­ter­mine the char­ac­ter to dis­play.

Let’s try it out. Consider the fol­low­ing zoomed-in cir­cle as an ex­am­ple. It is split into three grid cells:

Overlaying our sam­pling cir­cles, we see vary­ing de­grees of over­lap:

When cal­cu­lat­ing the shape vec­tor of each ASCII char­ac­ter, we took a huge num­ber of sam­ples. We could af­ford to do that be­cause we only need to cal­cu­late those shape vec­tors once up front. After they’re cal­cu­lated, we can use them again and again.

However, if we’re con­vert­ing an an­i­mated im­age (e.g. can­vas or video) to ASCII, we need to be mind­ful of per­for­mance when cal­cu­lat­ing the lookup vec­tors. An ASCII ren­der­ing might have hun­dreds or thou­sands of cells. Multiplying that by tens or hun­dreds of sam­ples would be in­cred­i­bly costly in terms of per­for­mance.

With that be­ing said, let’s pick a sam­pling qual­ity of with the sam­ples placed like so:

For the top sam­pling cir­cle of the left­most cell, we get one white sam­ple and two black, giv­ing us an av­er­age light­ness of . Doing the same cal­cu­la­tion for all of the sam­pling cir­cles, we get the fol­low­ing 2D vec­tors:

From now on, in­stead of us­ing the term lookup vec­tors”, I’ll call these vec­tors, sam­pled from the im­age that we’re ren­der­ing as ASCII, sam­pling vec­tors. One sam­pling vec­tor is cal­cu­lated for each cell in the grid.

Anyway, we can use these sam­pling vec­tors to find the best-match­ing ASCII char­ac­ter. Let’s see what that looks like on our 2D plot — I’ll la­bel the sam­pling vec­tors (from left to right) C0, C1, and C2:

Hmm… this is not what we want. Since none of the ASCII shape vec­tor com­po­nents ex­ceed , they’re all clus­tered to­wards the bot­tom-left re­gion of our plot. This makes our sam­pling vec­tors map to a few char­ac­ters on the edge of the clus­ter.

We can fix this by nor­mal­iz­ing the shape vec­tors. We’ll do that by tak­ing the max­i­mum value of each com­po­nent across all shape vec­tors, and di­vid­ing the com­po­nents of each shape vec­tor by the max­i­mum. Expressed in code, that looks like so:

Here’s what the plot looks like with the shape vec­tors nor­mal­ized:

If we now map the sam­pling vec­tors to their near­est neigh­bors, we get a much more sen­si­ble re­sult:

We get , M and $. Let’s see how well those char­ac­ters match the cir­cle:

Nice! They match very well.

Let’s try ren­der­ing the full cir­cle from be­fore with the same method:

Much bet­ter than be­fore! The picked char­ac­ters fol­low the con­tour of the cir­cle very well.

Using two sam­pling cir­cles — one up­per and one lower — pro­duces a much bet­ter re­sult than the -dimensional (pixelated) ap­proach. However, it still falls short when try­ing to cap­ture other as­pects of a char­ac­ter’s shape.

For ex­am­ple, two cir­cles don’t cap­ture the shape of char­ac­ters that fall in the mid­dle of the cell. Consider -:

For -, we get a shape vec­tor of . That does­n’t rep­re­sent the char­ac­ter very well at all.

The two up­per-lower sam­pling cir­cles also don’t cap­ture left-right dif­fer­ences, such as the dif­fer­ence be­tween p and q:

We could use such dif­fer­ences to get bet­ter char­ac­ter picks, but our two sam­pling cir­cles don’t cap­ture them. Let’s add more di­men­sions to our shape to fix that.

Since cells are taller than they are wide (at least with the mono­space font I’m us­ing), we can use sam­pling cir­cles to cover the area of each cell quite well:

sam­pling cir­cles cap­ture left-right dif­fer­ences, such as be­tween p and q, while also cap­tur­ing dif­fer­ences across the top, bot­tom, and mid­dle re­gions of the cell, dif­fer­en­ti­at­ing ^, -, and _. They also cap­ture the shape of diagonal” char­ac­ters like / to a rea­son­able de­gree.

One prob­lem with this grid-like con­fig­u­ra­tion for the sam­pling cir­cles is that there are gaps. For ex­am­ple, . falls be­tween the sam­pling cir­cles:

To com­pen­sate for this, we can stag­ger the sam­pling cir­cles ver­ti­cally (e.g. low­er­ing the left sam­pling cir­cles and rais­ing the right ones) and make them a bit larger. This causes the cell to be al­most fully cov­ered while not caus­ing ex­ces­sive over­lap across the sam­pling cir­cles:

We can use the same pro­ce­dure as be­fore to gen­er­ate char­ac­ter vec­tors us­ing these sam­pling cir­cles, this time yield­ing a -dimensional vec­tor. Consider the char­ac­ter L:

For L, we get the vec­tor:

I’m pre­sent­ing -dimensional shape vec­tors in a ma­trix form be­cause it’s eas­ier to grok geo­met­ri­cally, but the ac­tual vec­tor is a flat list of num­bers.

The light­ness val­ues cer­tainly look L-shaped! The 6D shape vec­tor cap­tures L’s shape very well.

Now we have a 6D shape vec­tor for every ASCII char­ac­ter. Does that af­fect char­ac­ter lookups (how we find the best match­ing char­ac­ter)?

Earlier, in the find­BestChar­ac­ter func­tion, I ref­er­enced a get­Dis­tance func­tion. That func­tion re­turns the Euclidean dis­tance be­tween the in­put points. Given two 2D points and , the for­mula to cal­cu­late their Euclidean dis­tance looks like so:

Put into code, this looks like so:

...

Read the original on alexharri.com »

5 318 shares, 17 trendiness

Structured LLM outputs

LLMs mostly pro­duce syn­tac­ti­cally valid out­puts when we try gen­er­at­ing JSON, XML, code, etc., but they can oc­ca­sion­ally fail due to their prob­a­bilis­tic na­ture. This is a prob­lem for de­vel­op­ers as we use LLMs pro­gram­mat­i­cally, for tasks like data ex­trac­tion, code gen­er­a­tion, tool call­ing, etc.

There are many de­ter­min­is­tic ways to en­sure struc­tured LLM out­puts. If you are a de­vel­oper, this hand­book cov­ers every­thing you need.

Structured gen­er­a­tion is mov­ing too fast. Most re­sources you find to­day are al­ready out­dated. You have to dig through mul­ti­ple aca­d­e­mic pa­pers, blogs, GitHub re­pos, and other re­sources.

This hand­book brings it all to­gether in a liv­ing doc­u­ment that up­dates reg­u­larly.

You can read it start-to-fin­ish, or treat it like a lookup table.

We’re the main­tain­ers of Nanonets-OCR mod­els (VLMs to con­vert doc­u­ments into clean, struc­tured Markdown) and doc­strange (open-source doc­u­ment pro­cess­ing li­brary).

...

Read the original on nanonets.com »

6 288 shares, 13 trendiness

Slop is Everywhere For Those With Eyes to See

Slop is Everywhere For Those With Eyes to See

The size of your plate can in­flu­ence how much food you eat. The ab­sence of a clock on a casino wall can keep you gam­bling through the early morn­ing. On so­cial me­dia, our For You Pages give us the il­lu­sion of in­fi­nite con­tent. How our en­vi­ron­ments are de­signed in­flu­ences how we con­sume. And would­n’t you know it, every­thing around us is de­signed for max­i­mum con­sump­tion.

Open TikTok, and you can eas­ily burn through a hun­dred videos or more be­fore you glance at the time. It does­n’t help that the For You Page hides the time on our phones.

We are over con­sum­ing con­tent on the FYP. The sud­den surge of low-qual­ity, AI-generated con­tent, i.e. AI slop,” is a byprod­uct of that over­con­sump­tion. We don’t see it be­cause, well, we’re con­di­tioned not to, but slop al­ways ar­rives on time. Slop is in­evitable. Slop is quin­tes­sen­tial. Slop is every­where for those with eyes to see.

Olive oil, wasabi, saf­fron, vanilla, Wagyu, honey, cham­pagne, and truf­fle,…re­al­ity TV, all hold ex­am­ples of what hap­pens when de­mand ex­ceeds sup­ply— com­pa­nies fill the gap with slop. The free mar­ket loves a good filler. So, why should the dig­i­tal realm be any dif­fer­ent?

The For You page is de­signed to keep us play­ing the dopamine slot ma­chine for as long as pos­si­ble. The Average Time on Site met­ric is still the goose that lays the golden eggs, and both TikTok and Meta are re­port­ing that their egg bas­kets have never been fuller.

But, there’s a prob­lem. On any given plat­form, only 1-3% of users pub­lish con­tent. It’s called the 90-9-1 rule, and plat­forms that rely on free user gen­er­ated con­tent have been try­ing to solve this prob­lem since the be­gin­ning of the com­mer­cial­ized web. The in­tro­duc­tion of the For You Page, and the il­lu­sion of end­less con­tent, has only ex­as­per­ated the in­equity.

Curation used to be part of our me­dia con­sump­tion process. We would hop from web­site to web­site look­ing for a laugh. We used to click on hy­per­links for Christ’s sake. Now, all we must do is sit at the trough and let daddy Zuck feed us.

In a re­cent es­say, Joan Westenberg makes a com­ple­men­tary ar­gu­ment that the al­go­rithm has flattened” cu­rios­ity by elim­i­nat­ing the need to hunt” for our con­tent. They go on to say:

There’s a con­cept in be­hav­ioral sci­ence called the effort heuris­tic.” It’s the idea that we tend to value in­for­ma­tion more if we worked for it. The more ef­fort some­thing re­quires, the more mean­ing we as­sign to the re­sult. When all knowl­edge is made ef­fort­less, it’s treated as dis­pos­able. There’s no awe, no in­vest­ment, no de­light in the un­ex­pected—only con­sump­tion.

This type of mind­less con­sump­tion is not only harm­ing our cu­rios­ity, it’s help­ing to cheapen cre­ativ­ity for the peo­ple who pro­duce what we con­sume.

Creativity is­n’t scal­able. Content cre­ation has a hard pro­duc­tiv­ity ceil­ing. Every hu­man-cre­ated video on our feeds re­quire some level of writ­ing, pro­duc­tion, and edit­ing. Yet the For You Page has made the con­tent con­sump­tion so ef­fi­cient, that per­haps de­mand has ex­ceeded sup­ply.

If you’re a prod­uct man­ager for a so­cial me­dia plat­form, you can re­duce the fric­tion of pub­lish­ing con­tent to the app, or ship bet­ter edit­ing tools, but you can’t op­ti­mize cre­ative spark. You can’t treat hu­mans like con­tent-gen­er­at­ing ma­chines (as much as they have tried). Despite the il­lu­sion of in­fi­nite scrolling thanks to the FYP, art re­mains a fi­nite re­source bound to the whims of hu­man cre­ativ­ity.

You see their prob­lem.

Mark Zuckerberg wants us on his plat­forms, flick­ing our thumbs, for as long as pos­si­ble. But the more we open Instagram, the more cre­ators he needs post­ing mul­ti­ple times each day. Mark has very lit­tle con­trol over this vari­able. Creators could sud­denly post less, or sim­ply stop post­ing all to­gether, and there’s noth­ing he could do about it. What’s worse, cre­ators could de­mand Meta pay them for their art.

Actually, yes. And it turns out, you could rather ef­fec­tively kill a plat­form if you got a small group of top cre­ators or­ga­nized and an­gry.

In the fall of 2015, twenty so­cial me­dia per­son­al­i­ties took down one of the largest mo­bile video apps on the in­ter­net. They wanted money for their la­bor. The ex­ec­u­tives at Vine said no. The gang of twenty, who were the high­est per­form­ing cre­ators on the app, walked away. They stopped post­ing en­ter­tain­ing con­tent to Vine, and in­stead re­peat­edly im­plored their fol­low­ers to find them on com­pet­ing apps.

Vine shut down for good just months later.

From Inside the se­cret meet­ing of Vine stars that ush­ered in the ap­p’s demise:

Vine’s spec­tac­u­lar rise and fall showed the power of on­line cre­ators. Its demise of­fers cru­cial lessons for plat­forms try­ing to en­gage with power users — and a deeper un­der­stand­ing of who ul­ti­mately con­trols a so­cial prod­uct.

Vine cre­ators ex­posed and ex­ploited a weak­ness in Vine’s con­ven­tional ap­proach to so­cial me­dia. Follower count had power. Old-style dis­cov­ery al­go­rithms could be eas­ily ma­nip­u­lated. Vine cre­ators used that power to take over the app, and con­vinced users to mi­grate to other plat­forms.

You see why fol­lower counts are less im­por­tant to­day, and why black-box al­go­rithms have full con­trol over who goes vi­ral and who gets shadow banned.” TikTok saw the mis­takes of its pre­de­ces­sor, and made it so con­tent cre­ators could never ex­er­cise col­lec­tive in­flu­ence again.

Because vi­ral­ity now feels more like gam­bling, I sus­pect peo­ple post more con­tent to­day than a decade ago. But it’s not enough. Our in­sa­tiable ap­petites for con­tent is push­ing for cor­po­ra­tions to meet that de­mand with slop. 

If it were up to TikTok and Meta, our feeds would be ex­clu­sively ro­bot-made. Humans are a vari­able they can­not con­trol, and I think they de­spise us for it.

Anyway, I have good news. Outside of our FYPs you’ll find a sur­plus of art, es­says, ar­ti­cles, and videos just wait­ing to be dis­cov­ered. And best of all, these artists and writ­ers are mak­ing things on their own terms. We, too, can en­joy the prod­ucts of their la­bor on our terms, while not giv­ing a dime of our at­ten­tion to big tech.

This is the open web. Or the so­cial web. Or the open so­cial web. Or the– you get the point. To find it, you must reac­quaint your­self with the lost art of surf­ing the web.

Surfing the web is very dif­fer­ent than scrolling the FYP. You don’t of­ten hear the words mindful” and internet” to­gether but, surf­ing the web was an art of mind­ful con­sump­tion that does­n’t much ex­ist to­day. Not to get all old man yells at cloud at you, but maybe we should bring it back?

Up next: The Lost Art of Surfing The Web (coming soon)

If you have ever found my writ­ing valu­able and you want to help me con­tinue avoid­ing do­ing my laun­dry, you can buy me a cof­fee. It would mean a lot.

Sometimes, I iden­tify who I’m writ­ing for as a way to pro­vide con­tex­tIt’s like say­ing, I’m us­ing a lot of tech­ni­cal terms be­cause I wrote this post for fron­tend de­vel­op­ers,” or Sorry if I’m get­ting too sym­met­ri­cal, this one’s for my Wes Anderson fans.” But, all are wel­comed, al­ways. If you’re not in this ar­ti­cle’s in­tended au­di­ence, but you find this ar­ti­cle in­ter­est­ing, won­der­ful! Please stick around, read the post, and feel free to ask me ques­tions.

I en­cour­age you to leave me a com­ment on this post by email­ing me. I’d love to hear from you!

I do not re­ceive com­mis­sion for any­thing I share, en­dorse, or dis­cuss, any­where on From Jason. I have no spon­sor­ships, or ad­ver­tiser agree­ments. If that ever changes, I will let you know.

...

Read the original on fromjason.xyz »

7 214 shares, 40 trendiness

The Dilbert Afterlife

Thanks to every­one who sent in con­do­lences on my re­cent death from prostate can­cer at age 68, but that was Scott Adams. I (Scott Alexander) am still alive. Still, the con­do­lences are ap­pre­ci­ated. Scott Adams was a sur­pris­ingly big part of my life. I may be the only per­son to have read every Dilbert book be­fore grad­u­at­ing el­e­men­tary school. For some rea­son, 10-year-old-Scott found Adams’ sto­ries of time-wast­ing meet­ings and pointy-haired bosses hi­lar­i­ous. No doubt some of the at­trac­tion came from a more-than-pass­ing re­sem­blance be­tween Dilbert’s name­less cor­po­ra­tion and the California pub­lic school sys­tem. We’re all in­mates in pris­ons with dif­fer­ent names. But it would be in­suf­fi­ciently am­bi­tious to stop there. Adams’ comics were about the nerd ex­pe­ri­ence. About be­ing clev­erer than every­one else, not just in the sense of be­ing high IQ, but in the sense of be­ing the only sane man in a crazy world where every­one else spends their days lis­ten­ing to over­paid con­sul­tants drone on about mis­sion state­ments in­stead of do­ing any­thing use­ful. There’s an arc in Dilbert where the boss dis­ap­pears for a few weeks and the en­gi­neers get to man­age their own time. Productivity shoots up. Morale soars. They in­vent warp dri­ves and time ma­chines. Then the boss re­turns, and they’re back to be­ing chron­i­cally be­hind sched­ule and over bud­get. This is the nerd out­look in a nut­shell: if I ran the cir­cus, there’d be some changes around here.Yet the other half of the nerd ex­pe­ri­ence is: for some rea­son this never works. Dilbert and his bril­liant co-work­ers are stuck watch­ing from their cu­bi­cles while their id­iot boss racks in bonuses and ac­co­lades. If hu­mor, like re­li­gion, is an opi­ate of the masses, then Adams is mas­ter­fully un­sub­tle about what type of wound his art is try­ing to numb. This is the ba­sic en­gine of Dilbert: every­one is re­warded in ex­act in­verse pro­por­tion to their virtue. Dilbert and Alice are bril­liant and hard-work­ing, so they get crumbs. Wally is bril­liant but lazy, so he at least en­joys a fool’s par­adise of end­less cof­fee and donuts while his co-work­ers clean up his messes. The P.H.B. is nei­ther smart nor in­dus­tri­ous, so he is for­ever on top, reap­ing the re­wards of every­one else’s toil. Dogbert, an in­vet­er­ate scam­mer with a pass­ing re­sem­blance to var­i­ous trick­ster deities, makes out best of all. The re­pressed ob­ject at the bot­tom of the nerd sub­con­scious, the thing too scary to view ex­cept through hu­mor, is that you’re smarter than every­one else, but for some rea­son it is­n’t work­ing. Somehow all that stuff about small talk and sports­ball and drink­ing makes them stronger than you. No equa­tion can tell you why. Your best-laid plans turn to dust at a sin­gle glint of Chad’s per­fectly-white teeth. Lesser lights may dis­tance them­selves from their art, but Adams ra­di­ated con­tempt for such sur­ren­der. He lived his whole life as a se­ries of Dilbert strips. Gather them into one of his sig­na­ture com­pen­dia, and the ti­tle would be Dilbert Achieves Self Awareness And Realizes That If He’s So Smart Then He Ought To Be Able To Become The Pointy-Haired Boss, Devotes His Whole Life To This Effort, Achieves About 50% Success, Ends Up In An Uncanny Valley Where He Has Neither The Virtues Of The Honest Engineer Nor Truly Those Of The Slick Consultant, Then Dies Of Cancer Right When His Character Arc Starts To Get Interesting.If your re­ac­tion is I would ab­solutely buy that book”, then keep read­ing, but ex­pect some de­tours.The niche that be­came Dilbert opened when Garfield first said I hate Mondays”. The quote be­came a pop­u­lar sen­sa­tion, in­spir­ing t-shirts, cof­fee mugs, and even a hit sin­gle. But (as I’m hardly the first to point out) why should Garfield hate Mondays? He’s a cat! He does­n’t have to work!In the 80s and 90s, say­ing that you hated your job was con­sid­ered the height of hu­mor. Drew Carey: Oh, you hate your job? There’s a sup­port group for that. It’s called every­body, and they meet at the bar.”This was merely the ca­reer sub­re­gion of the su­per­con­ti­nent of Boomer self-dep­re­cat­ing jokes, whose other promi­nences in­cluded I overeat”, My mar­riage is on the rocks”, I have an al­co­hol prob­lem”, and My men­tal health is poor”.Ar­guably this had some­thing to do with the Bohemian turn, the re­ac­tion against the forced cheer of the 1950s mid­dle-class es­tab­lish­ment of com­pany men who gave their all to face­less cor­po­ra­tions and then dropped dead of heart at­tacks at 60. You could be that guy, proudly boast­ing to your date about how you traded your sec­ond-to-last patent artery to com­plete a spread­sheet that raised share­holder value 14%. Or you could be the guy who says Oh yeah, I have a day job work­ing for the Man, but fuck the rat race, my true pas­sion is white wa­ter raft­ing”. When your fa­ther came home every day look­ing hag­gard and worn out but still prais­ing his boss be­cause you’ve got to re­spect the com­pany or they won’t take care of you”, be­ing able to say I hate Mondays” must have felt lib­er­at­ing, like the mantra of a free man.This was the world of Dilbert’s rise. You’d put a Dilbert comic on your cu­bi­cle wall, and feel like you’d got­ten away with some­thing. If you were re­ally clever, you’d put the Dilbert comic where Dilbert gets in trou­ble for putting a comic on his cu­bi­cle wall on your cu­bi­cle wall, and dare them to move against you.But t-shirts say­ing Working Hard . . . Or Hardly Working?” no longer hit as hard as they once did. Contra the usual story, Millennials are too earnest to tol­er­ate the pleas­ant con­tra­dic­tion of say­ing they hate their job and then go­ing in every day with a smile. They ei­ther have to gen­uinely hate their job - be­come some kind of dirt­bag com­mu­nist la­bor ac­tivist - or at least pre­tend to love it. The worm turns, all that is cringe be­comes based once more and vice versa. Imagine that guy boast­ing to his date again. One says: Oh yeah, I grudg­ingly clock in every day to give my eight hours to the rat race, but trust me, I’m se­cretly hat­ing my­self the whole time”? The other: I work for a bou­tique so­lar en­ergy startup that’s end­ing cli­mate change - sav­ing the en­vi­ron­ment is my pas­sion!” Zoomers are worse still: not even the fig leaf of so­cial good, just pure hus­tle.Sil­i­con Valley, where hus­tle cul­ture has reached its apogee, has an ad­di­tional con­sid­er­a­tion: why don’t you found a startup? If you’re so much smarter than your boss, why not com­pete against him di­rectly? Scott Adams based Dilbert on his ca­reer at Pacific Bell in the 80s. Can you imag­ine quit­ting Pacific Bell in the 80s to, uh, found your own Pacific Bell? To go to Michael Milken or who­ever was in­vest­ing back then, and say Excuse me, may I have $10 bil­lion to cre­ate my own ver­sion of Pacific Bell, only bet­ter?” But if some­one were to try to be Dilbert to­day — to say, earnestly, I hate my job be­cause I am smarter than my boss and could do it bet­ter than him,” that would be the ob­vi­ous next ques­tion, the same way I am bet­ter at pick­ing stocks than Wall Street” ought to be fol­lowed up with Then why don’t you in­vest?”Above, I de­scribed the nerd ex­pe­ri­ence” of being smarter than every­one else, not just in the sense of be­ing high IQ, but in the sense of be­ing the only sane man in a crazy world where every­one else spends their days lis­ten­ing to over­paid con­sul­tants drone on about mis­sion state­ments in­stead of do­ing any­thing use­ful.” You nod­ded along, be­cause you knew the only pos­si­ble con­clu­sion to the arc sug­gested by that sen­tence was to tear it down, to launch a tirade about how that nerd is naive and nar­cis­sis­tic and prob­a­bly some­how also a racist. In the year of our Lord 2026, of course that’s where I’m go­ing. Dilbert is a relic of a sim­pler time, when the trope could be played straight. But it’s also an ar­ti­fact of the tran­si­tion, maybe even a dri­ver of it. Scott Adams ap­pre­ci­ated these con­sid­er­a­tions ear­lier and more acutely than any­one else. And they drove him nuts.Adams knew, deep in his bones, that he was clev­erer than other peo­ple. God al­ways pun­ishes this im­pulse, es­pe­cially in nerds. His usual strat­egy is straight­for­ward enough: let them reach the ad­vanced physics classes, where there will al­ways be some­one smarter than them, then beat them on the head with their own in­tel­lec­tual in­fe­ri­or­ity so many times that they cry un­cle and ad­mit they’re noth­ing spe­cial.For Adams, God took a more cre­ative and — dare I say, cru­eler — route. He cre­ated him only-slightly-above-av­er­age at every­thing ex­cept for a world-his­tor­i­cal, Mozart-tier, ab­solutely Leonardo-level skill at mak­ing silly comics about hat­ing work.Scott Adams never for­gave this. Too self-aware to deny it, too nar­cis­sis­tic to ac­cept it, he spent his life search­ing for a loop­hole. You can read his frus­tra­tion in his book ti­tles: How To Fail At Almost Everything And Still Win Big. Trapped In A Dilbert World. Stick To Drawing Comics, Monkey Brain. Still, he re­fused to stick to comics. For a mo­ment in the late-90s, with books like The Dilbert Principle and The Dilbert Future, he seemed on his way to be be­com­ing a semi-se­ri­ous busi­ness in­tel­lec­tual. He never quite made it, maybe be­cause the Dilbert Principle was­n’t re­ally what man­agers and con­sul­tants wanted to hear:I wrote The Dilbert Principle around the con­cept that in many cases the least com­pe­tent, least smart peo­ple are pro­moted, sim­ply be­cause they’re the ones you don’t want do­ing ac­tual work. You want them or­der­ing the dough­nuts and yelling at peo­ple for not do­ing their as­sign­ments—you know, the easy work. Your heart sur­geons and your com­puter pro­gram­mers—your smart peo­ple—aren’t in man­age­ment.Okay, I am clev­erer than every­one else”, got it. His next ven­ture (c. 1999) was the Dilberito, an at­tempt to rev­o­lu­tion­ize food via a Dilbert-themed bur­rito with the full Recommended Daily Allowance of twenty-three vi­t­a­mins. I swear I am not mak­ing this up. A con­tem­po­ra­ne­ous NYT re­view said it could have been de­signed only by a food tech­nol­o­gist or by some­one who eats lunch with­out much thought to taste”. The Onion, in its twenty year ret­ro­spec­tive for the doomed co­mestible, called it a frus­trated grop­ing to­wards meal re­place­ments like Soylent or Huel, long be­fore the ex­is­tence of a cul­ture nerdy enough to sup­port them. Adams him­self, look­ing back from sev­eral years’ dis­tance, was even more scathing: the min­eral for­ti­fi­ca­tion was hard to dis­guise, and be­cause of the veg­gie and legume con­tent, three bites of the Dilberito made you fart so hard your in­testines formed a tail.”His sec­ond foray into the culi­nary world was a lo­cal restau­rant called Stacey’s. The New York Times does a pitch-per­fect job cov­er­ing the re­sults. Their ar­ti­cle starts:This is yet an­other story about a clue­less but ob­tru­sive boss — the kind of med­dle­some man­ager you might laugh at in the pan­els of Dilbert,” the daily comic strip.…and con­tin­ues through a de­scrip­tion of Adams mak­ing every pos­si­ble rookie mis­take. As the restau­rant does worse and worse, Adams be­comes more and more con­vinced that he has to fig­ure out some clever life­hack that will turn things around and rev­o­lu­tion­ize restau­rants. First he comes up with a the­ory that light is the key to restau­rant­ing, and spends ages fid­dling with the win­dows. When this fails, he de­volves into an un­mis­tak­able sign of des­per­a­tion - ask­ing blog com­menters for ad­vice:He also turned to Dilbert fans for sug­ges­tions on how to use the party room, in a post­ing on his blog ti­tled Oh Great Blog Brain.” The Dilbert faith­ful re­sponded with more than 1,300 com­ments, mix­ing in­ter­est­ing ideas (interactive mur­der-mys­tery the­ater) with un­likely mis­chief (nude vol­ley­ball tour­na­ments). Mr. Adams asked his em­ploy­ees to read the com­ments and is now slowly try­ing some of them.But what makes this ar­ti­cle truly per­fect - I can’t be­lieve it did­n’t get a Pulitzer - is that it’s not some kind of hos­tile am­bush pro­file. Adams is to­tally self-aware. He also finds the whole sit­u­a­tion hi­lar­i­ous! Everyone in­volved is in on the joke! The wait­ers find it hi­lar­i­ous! After every work­day, Adams and the wait­ers get to­gether and laugh long into the night to­gether about how bad a boss Adams is!There’s a run­ning joke about how if you see a busi­ness that loses mil­lions yearly, it’s prob­a­bly run by some banker’s wife who’s get­ting sub­si­dized to feel good about her­self and pre­tend she has a high-pow­ered job. I think this is ap­prox­i­mately what was go­ing on with Stacey’s. Adams made enough money off Dilbert that he could in­dulge his fan­tasies of be­ing some­thing more than the Dilbert guy”. For a mo­ment, he could think of him­self as a tem­porar­ily-em­bar­rassed busi­ness­man, rather than just a fan­tas­ti­cally suc­cess­ful hu­morist. The same prob­a­bly ex­plains his for­ays into tele­vi­sion (“Dilbert: The Animated Series”), non-Dil­bert comics (“Plop: The Hairless Elbonian”), and tech­nol­ogy (”WhenHub”, his site of­fer­ing live chats with sub­ject-mat­ter ex­perts”, which was shelved af­ter he awk­wardly tried to build pub­lic­ity by sug­gest­ing that mass shoot­ing wit­nesses could profit by us­ing his site to tell their sto­ries.)Adams and Elon Musk oc­ca­sion­ally talked about each other - usu­ally to de­fend one an­other against me­dia crit­i­cism of their re­spec­tive racist rants - but I don’t know if they ever met. I won­der what it would have been like if they did. I imag­ine them com­ing to­gether at some Bay Area house party on co­pi­ous amounts of LSD or MDMA. One, the world’s great­est comic writer, who more than any­thing else wanted to suc­ceed in busi­ness. The other, the world’s great­est busi­ness­man, who more than any­thing else wanted peo­ple to think that he’s funny. Scott Adams could­n’t stop frit­ter­ing his tal­ent and for­tune on doomed at­tempts to be taken se­ri­ously. But some­day Elon Musk will buy America for $100 tril­lion, tell the UN that he’s re­nam­ing it the United States of 420-69”, and the as­sem­bled am­bas­sadors will be as silent as the grave. Are there psy­chic gains from trade to be had be­tween two such peo­ple?Michael Jordan was the world’s best bas­ket­ball player, and in­sisted on test­ing him­self against base­ball, where he failed. Herbert Hoover was one of the world’s best busi­ness­men, and in­sisted on test­ing him­self against pol­i­tics, where he crashed and burned. We’re all in­mates in pris­ons of dif­fer­ent names. Most of us ac­cept it and get on with our lives. Adams could­n’t stop rat­tling the bars.I’m No Scientist, But I Think Feng Shui Is Part Of The AnswerHaving failed his for­ays into busi­ness, Adams turned to re­li­gion. Not in the sense of seek­ing con­so­la­tion through God’s love. In the sense of try­ing to show how clever he was by fig­ur­ing out the true na­ture of the DivineThe re­sult was God’s Debris. This is a breath­tak­ingly bad book. On some level, Adams (of course) seemed to re­al­ize this, but (of course) his self-aware­ness only made things worse. In the sec­ond-worst in­tro­duc­tion to a work of spir­i­tual wis­dom I’ve ever read (Gurdjieff keeps first place by a hair), he ex­plains that this is JUST A THOUGHT EXPERIMENT and IF YOU TAKE IT SERIOUSLY, YOU FAIL. But also, it re­ally makes you think, and it’s go­ing to blow your mind, and you’ll spend the rest of your life se­cretly won­der­ing whether it was true, but it won’t be, be­cause IT’S JUST A THOUGHT EXPERIMENT, and IF YOU TAKE IT SERIOUSLY, YOU FAIL. Later, in a Bloomberg in­ter­view, he would say that this book - and not Dilbert - would be his ultimate legacy” to the world. But re­mem­ber, IT’S JUST A THOUGHT EXPERIMENT, and IF YOU TAKE IT SERIOUSLY YOU FAIL.I read it for the first time while re­search­ing this es­say. The frame story is that a de­liv­ery boy gives a pack­age to the wis­est man in the uni­verse, who in­vites him to stay a while and dis­cuss phi­los­o­phy (REMEMBER, IT’S JUST A WORK OF FICTION! THESE ARE ONLY CHARACTERS!) Their dis­cus­sion is one-quar­ter clas­sic philo­soph­i­cal prob­lems that seemed deep when you were nine­teen, pre­sented with no ref­er­ence to any pre­vi­ous work:“There has to be a God,” I said. Otherwise, none of us would be here.” It was­n’t much of a rea­son, but I fig­ured he did­n’t need more.“Do you be­lieve God is om­nipo­tent and that peo­ple have free will?” he asked.“If God is om­nipo­tent, would­n’t he know the fu­ture?”“If God knows what the fu­ture holds, then all our choices are al­ready made, aren’t they? Free will must be an il­lu­sion.”He was clever, but I was­n’t go­ing to fall for that trap. God lets us de­ter­mine the fu­ture our­selves, us­ing our free will,” I ex­plained.“Then you be­lieve God does­n’t know the fu­ture?”“I guess not,” I ad­mit­ted. But he must pre­fer not know­ing.”There is an on­go­ing meta-dis­cus­sion among phi­los­o­phy dis­cussers of how ac­cept­able it is to pro­pose your own an­swers to the great ques­tions with­out hav­ing fully mas­tered pre­vi­ous schol­ar­ship. On the one hand, phi­los­o­phy is one of the most fun­da­men­tal hu­man ac­tiv­i­ties, gat­ing it be­hind the near-im­pos­si­ble task of hav­ing read every pre­vi­ous philoso­pher is elit­ist and gives self-ap­pointed guardians of schol­ar­ship a per­ma­nent heck­ler’s veto on any new ideas, and it can cre­ate a cul­ture so ob­sessed with cit­ing every pos­si­ble in­flu­ence that even­tu­ally the part where you have an opin­ion with­ers away and phi­los­o­phy be­comes a mean­ing­less rit­ual of pre­sent­ing ci­ta­tions with­out con­clu­sion. On the other hand, this book.An­other quar­ter is philo­soph­i­cal ques­tions which did not seem deep, even when you were nine­teen, and which no­body has ever done work on, be­cause no­body ex­cept Scott Adams ever even thought they were worth con­sid­er­ing:“Well, usu­ally it’s be­cause some im­por­tant re­li­gious event took place there.”“What does it mean to say that some­thing took place in a par­tic­u­lar lo­ca­tion when we know that the earth is con­stantly in mo­tion, ro­tat­ing on its axis and or­bit­ing the sun? And we’re in a mov­ing galaxy that is part of an ex­pand­ing uni­verse. Even if you had a space­ship and could fly any­where, you can never re­turn to the lo­ca­tion of a past event. There would be no equiv­a­lent of the past lo­ca­tion be­cause lo­ca­tion de­pends on your dis­tance from other ob­jects, and all ob­jects in the uni­verse would have moved con­sid­er­ably by then.”“I see your point, but on Earth the holy places keep their re­la­tion­ship to other things on Earth, and those things don’t move much,” I said.“Let’s say you dug up all the dirt and rocks and veg­e­ta­tion of a holy place and moved it some­place else, leav­ing noth­ing but a hole that is one mile deep in the orig­i­nal lo­ca­tion. Would the holy land now be the new lo­ca­tion where you put the dirt and rocks and veg­e­ta­tion, or the old lo­ca­tion with the hole?”“I think both would be con­sid­ered holy,” I said, hedg­ing my bets.“Sup­pose you took only the very top layer of soil and veg­e­ta­tion from the holy place, the newer stuff that blew in or grew af­ter the re­li­gious event oc­curred thou­sands of years ago. Would the place you dumped the top­soil and veg­e­ta­tion be holy?”“That’s a lit­tle trick­ier,” I said. I’ll say the new lo­ca­tion is­n’t holy be­cause the top­soil that you moved there is­n’t it­self holy, it was only in con­tact with holy land. If holy land could turn any­thing that touched it into more holy land, then the whole planet would be holy.”The old man smiled. The con­cept of lo­ca­tion is a use­ful delu­sion when ap­plied to real es­tate own­er­ship, or when giv­ing some­one di­rec­tions to the store. But when it is viewed through the eyes of an om­nipo­tent God, the con­cept of lo­ca­tion is ab­surd. While we speak, na­tions are arm­ing them­selves to fight for con­trol of lands they con­sider holy. They are trapped in the delu­sion that lo­ca­tions are real things, not just fic­tions of the mind. Many will die.”An­other quar­ter of the dis­cus­sion is the most pusil­lan­i­mous pos­si­ble sub­jec­tivism, as if Robert Anton Wilson and the 2004 film What the #$*! Do We Know!? had a kid, then stran­gled it at birth un­til it came out brain dam­aged. We get pas­sages like these: I am say­ing that UFOs, rein­car­na­tion, and God are all equal in terms of their re­al­ity.”“Do you mean equally real or equally imag­i­nary?”“Your ques­tion re­veals your bias for a bi­nary world where every­thing is ei­ther real or imag­i­nary. That dis­tinc­tion lies in your per­cep­tions, not in the uni­verse. Your in­abil­ity to see other pos­si­bil­i­ties and your lack of vo­cab­u­lary are your brain’s lim­its, not the uni­verse’s.”“There has to be a dif­fer­ence be­tween real and imag­ined things,” I coun­tered. My truck is real. The Easter Bunny is imag­ined. Those are dif­fer­ent.”“As you sit here, your truck ex­ists for you only in your mem­ory, a place in your mind. The Easter Bunny lives in the same place. They are equal.”I re­mem­ber the late 90s and early 00s; I was (regrettably) there. For some rea­son, all this stuff was con­sid­ered the height of wis­dom back then. The ac­tual Buddhist clas­sics were hard to ac­cess, but every­one as­sumed that Buddhists were wise and they prob­a­bly said, you know, some­thing like this. If you said stuff like this, you could be wise too.The fi­nal quar­ter of the book is a shock­ingly orig­i­nal take on the Lurianic kab­balah. I‘m not pleased to re­port this, and Adams likely would have been very sur­prised to learn it. Still, the re­sem­blance is un­mis­tak­able. The wis­est man in the world, charged with an­swer­ing all of the philo­soph­i­cal prob­lems that both­ered you when you were nine­teen, tells the fol­low­ing story: if God ex­ists, He must be per­fect. Therefore, the only thing he lacks is nonex­is­tence. Therefore, in or­der to fill that lack, He must de­stroy him­self in or­der to cre­ate the uni­verse. The uni­verse is com­posed of the frag­ments of that de­struc­tion - the tit­u­lar God’s Debris. Its point is to re­assem­ble it­self into God. Partially-reassembled-God is not yet fully con­scious, but there is some sort of in­stinct within His frag­ments - ie within the uni­verse - that is mo­ti­vated to help or­ches­trate the self-re­assem­bly, and it is this in­stinct which causes anti-en­tropic processes like evo­lu­tion. Good things are good be­cause they aid in the re­assem­bly of God; bad things are bad be­cause they hin­der it.Adams’ ver­sion adds sev­eral in­no­va­tions to this ba­sic story. Whatever parts of God aren’t in­volved in phys­i­cal mat­ter have be­come the laws of prob­a­bil­ity; this ex­plains the oth­er­wise in­ex­plic­a­ble evo­lu­tion­ary co­in­ci­dences that cre­ated hu­mankind. There’s some­thing about how grav­ity is pro­duced by some sort of in­ter­fer­ence be­tween dif­fer­ent di­vine cor­pus­cules - Adams ad­mits that Einstein prob­a­bly also had use­ful things to say about grav­ity, but prob­a­bly his own ver­sion amounts to the same thing, and it’s eas­ier to un­der­stand, and that makes it bet­ter (IT’S JUST A THOUGHT EXPERIMENT! IF YOU TAKE IT SERIOUSLY, YOU FAIL.) But my fa­vorite part is the aug­men­ta­tion of Luria with Nick Land: the fi­nal (or one of the fi­nal) steps in the di­vine re­assem­bly is the cre­ation of the Internet, aka God’s ner­vous sys­tem”, which will con­nect every­thing to every­thing else and give the whole sys­tem aware­ness of its di­vine pur­pose. I’m hon­estly im­pressed that a Gentile worked all of this out on his own. Adams com­pletes the per­for­mance by rein­vent­ing Kegan lev­els (this time I’m ag­nos­tic as to whether it’s con­ver­gent evo­lu­tion or sim­ple pla­gia­rism), al­though char­ac­ter­is­ti­cally it is in the most an­noy­ing way pos­si­ble:[The wise man] de­scribed what he called the five lev­els of aware­ness and said that all hu­mans ex­pe­ri­ence the first level of aware­ness at birth. That is when you first be­come aware that you ex­ist.In the sec­ond level of aware­ness you un­der­stand that other peo­ple ex­ist. You be­lieve most of what you are told by au­thor­ity fig­ures. You ac­cept the be­lief sys­tem in which you are raised.At the third level of aware­ness you rec­og­nize that hu­mans are of­ten wrong about the things they be­lieve. You feel that you might be wrong about some of your own be­liefs but you don’t know which ones. Despite your doubts, you still find com­fort in your be­liefs.The fourth level is skep­ti­cism. You be­lieve the sci­en­tific method is the best mea­sure of what is true and you be­lieve you have a good work­ing grasp of truth, thanks to sci­ence, your logic, and your senses. You are ar­ro­gant when it comes to deal­ing with peo­ple in lev­els two and three. The fifth level of aware­ness is the Avatar. The Avatar un­der­stands that the mind is an il­lu­sion gen­er­a­tor, not a win­dow to re­al­ity. The Avatar rec­og­nizes sci­ence as a be­lief sys­tem, al­beit a use­ful one. An Avatar is aware of God’s power as ex­pressed in prob­a­bil­ity and the in­evitable re­com­bi­na­tion of God con­scious­ness.I think go­ing through every David Chapman es­say and re­plac­ing the word metarationality” with THE AVATAR would ac­tu­ally be very re­fresh­ing.What are we to make of all of this?Noth­ing is more American than in­vent­ing weird cringe fu­sions of re­li­gion and athe­ism where you say that God does­n’t ex­ist as (gestures up­ward) some Big Man In The Sky the way those peo­ple be­lieve, but also, there to­tally is a God, in some com­pli­cated sense which only I un­der­stand. When Thomas Jefferson cut all the pas­sages with mir­a­cles out of his Bible, he was al­ready stand­ing on the shoul­ders of gen­er­a­tions of Unitarians, Quakers, and Latitudinarians.This was aug­mented by the va­garies of nerd cul­ture’s in­ter­sec­tion with the sci-fi fan­dom. The same peo­ple who wanted to read about space­ships and ray guns also wanted to read about psion­ics and Atlantis, so the smart sci-fi nerd con­sen­sus mor­phed into some­thing like probably all that un­ex­plained stuff is real, but has a sci­en­tific ex­pla­na­tion”. Telepathy is made up of quan­tum par­ti­cles, or what­ever (I talk about this more in my ar­ti­cle on the Shaver Mystery). It be­came a nerd rite of pas­sage to come up with your own the­ory that rec­on­ciled the spir­i­tual and the ma­te­r­ial in the most cre­ative way pos­si­ble.And the Nineties (God’s Debris was pub­lished in 2001) were a spe­cial time. The decade be­gan with the peak of Wicca and neo­pa­gan­ism. Contra cur­rent ide­o­log­i­cal fault lines, where these ten­den­cies bring up im­ages of Etsy witches, they pre­vi­ously dom­i­nated nerd cir­cles, in­clud­ing male nerds, techie nerds, and right-wing nerds (did you know Eric S. Raymond is neo­pa­gan?) By decade’s end, the clever­est (ie most an­noy­ing) nerds were switch­ing to New Atheism; through­out, smaller groups were ex­plor­ing Discordianism, chaos mag­ick, and the Subgenius. The com­mon thread was that Christianity had lost its hege­monic sta­tus, part of be­ing a clever nerd was pat­ting your­self on the back for hav­ing seen through it, but ex­actly what would re­place it was still un­cer­tain, and there was still enough piety in the wa­ter sup­ply that peo­ple were un­com­fort­able for­get­ting about re­li­gion en­tirely. You ei­ther had to make a very con­scious, marked choice to stop be­liev­ing (New Atheism), or try your hand at the task of in­vent­ing some kind of softer mid­dle ground (neopaganism, Eastern re­li­gion, var­i­ous cults, what­ever this book was sup­posed to be).It’s Obvious You Won’t Survive By Your Wits AloneAdams spent his life ob­sessed with self-help. Even more than a busi­ness­man or a prophet, he wanted to be a self-help guru. Of course he did. His par­tic­u­lar pack­age of woo - a com­bi­na­tion of hyp­no­sis, per­sua­sion hacks, and so­cial skills ad­vice - uni­fied the two great mo­tifs of his life.The­sis: I am clev­erer than every­one else.An­tithe­sis: I al­ways lose to the Pointy-Haired Boss.Synthesis: I was try­ing to be ra­tio­nal. But most peo­ple are ir­ra­tional sheep; they can be di­rected only by charis­matic ma­nip­u­la­tors who play on their bi­ases, not by ra­tio­nal per­sua­sion. But now I’m back to be­ing clev­erer than every­one else, be­cause I no­ticed this. Also, I should be­come a charis­matic ma­nip­u­la­tor.I phrased this in a max­i­mally hos­tile way, but it’s not wrong. And Adams started off strong. He read Dale Carnegie’s How To Win Friends And Influence People, widely agreed to be the clas­sic book on so­cial skills. Then, in search of even stronger per­sua­sion tech­niques, he turned to hyp­no­sis. This has a bad rep­u­ta­tion, but I ba­si­cally buy that some­thing is there. Psychiatry has leg­ends of psy­chother­a­pist-hyp­no­tists who achieved amaz­ing things, and there’s a plau­si­ble sci­en­tific story for why it might work. So when Adams claimed to be a mas­ter hyp­no­tist, I was orig­i­nally will­ing to give him the ben­e­fit of the doubt.That lasted un­til I read The Religion War, Adams’ se­quel to God’s Debris. In the in­tro, which may be lit­er­ally the most an­noy­ing pas­sage ever writ­ten in all two mil­lion years of hu­man his­tory, he dis­cusses the re­cep­tion of the orig­i­nal book:This is a se­quel to my book God’s Debris, a story about a de­liv­ery­man who chances upon the smartest per­son in the world and learns the se­crets of re­al­ity. I sub­ti­tled that book A Thought Experiment and used a va­ri­ety of hyp­no­sis tech­niques in an at­tempt to pro­duce a feel­ing of eu­phoric en­light­en­ment in the reader sim­i­lar to what the main char­ac­ter would feel while dis­cov­er­ing the (fictionally) true na­ture of re­al­ity. Reactions to the book were all over the map. About half of the peo­ple who e-mailed me said they felt var­i­ous fla­vors of eu­pho­ria, ex­panded aware­ness, con­nect­ed­ness, and other weird sen­sa­tions that de­fied de­scrip­tion. A sur­pris­ing num­ber of peo­ple re­ported read­ing the en­tire book twice in one day. So I know some­thing was hap­pen­ing.Other peo­ple wrote an­gry let­ters and scathing re­views, point­ing out the log­i­cal and fac­tual flaws in the book. It is full of flaws, and much of the sci­ence is made up, as it states in the in­tro­duc­tion. I ex­plained that the reader is sup­posed to be look­ing for flaws. That’s what makes the ex­per­i­ment work. You might think this group of read­ers skipped the in­tro­duc­tion and missed the stated point of the book, but I sus­pect that some­thing else is go­ing on. People get a kind of cog­ni­tive dis­so­nance (brain cramp) when their world­view is dis­turbed. It’s fun to watch.I pre­vi­ously felt bad for writ­ing this es­say af­ter Adams’ death; it seems kind of un­sport­ing to dis­agree with some­one who can’t re­spond. These para­graphs cured me of my mis­giv­ings: af­ter his death is by far the best time to dis­agree with Scott Adams.The book is a novel (a real novel this time, with plot and every­thing) meant to dra­ma­tize the lessons of its pre­de­ces­sor. In the near fu­ture, the Muslims and Christians are on the verge of global war. Adams’ self-in­sert char­ac­ter, the Avatar, goes around hyp­no­tiz­ing and mind hack­ing every­one into co­op­er­at­ing with his hare-brained scheme for world peace. In an early chap­ter, the Christian al­liance has cap­tured the Avatar and sent him to be tor­tured. But the Avatar mas­ter­fully de­flects the tor­tur­er’s at­ten­tion with a bit of cold read­ing, some pointed ques­tions, and a few hyp­notic sug­ges­tions:As the Avatar planned, the in­ter­roga­tor’s con­scious mind was scram­bled by the emo­tions and thoughts of the past min­utes. This brutish man, ac­cus­tomed to avoid­ing deep thoughts, had imag­ined the tini­est par­ti­cles of the uni­verse, his child­hood, and the bat­tles of the fu­ture. He had laughed, felt pain and pity, been in­tel­lec­tu­ally stim­u­lated, con­fused, as­sured, and un­cer­tain. The Avatar had chal­lenged his world­view, and it was evap­o­rat­ing, leav­ing him feel­ing empty, unim­por­tant, and pur­pose­lessIn the thrilling cli­max, which takes place at Stacey’s Cafe (yes, it’s the real-world restau­rant Adams was man­ag­ing - yes, he turned his re­li­gious-apoc­a­lyp­tic thriller novel into an ad for his restau­rant - yes, I bet he thought of this as a hypnotic sug­ges­tion”), the char­ac­ters find the Prime Influencer. She is able to come up with a short snappy slo­gan so memet­i­cally pow­er­ful that it de­feats fun­da­men­tal­ist re­li­gion and ends the war (the slo­gan is: If God is so smart, why do you fart?”). Adams’ mouth­piece char­ac­ter says:It was­n’t the wis­dom of the ques­tion that made it so pow­er­ful; philoso­phers had posed bet­ter ques­tions for aeons. It was the pack­ag­ing—the mar­ket­ing, if you will—the re­peata­bil­ity and sim­plic­ity, the tim­ing, the Zeitgeist, and in the end, the fact that every­one even­tu­ally heard it from some­one whose opin­ion they trusted.The ques­tion was short, provoca­tive, and cast in the lan­guage of in­ter­na­tional com­merce that al­most every­one un­der­stood—Eng­lish. Most im­por­tant, and gen­er­ally over­looked by his­to­ri­ans: It rhymed and it was funny. Once you heard it, you could never for­get it. It looped in the brain, gain­ing the weight and feel of truth with each rep­e­ti­tion. Human brains have a lim­ited ca­pac­ity for logic and ev­i­dence. Throughout time, rep­e­ti­tion and fre­quency were how peo­ple de­cided what was most true.This para­graph is the ab­solute cen­ter of Adams’ world­view (later ex­panded to book length sev­eral times in tomes named things like Win Bigly: Persuasion In A World Where Facts Don’t Matter). People don’t re­spond to logic and ev­i­dence, so the world is ruled by peo­ple who are good at mak­ing catchy slo­gans. Sufficiently ad­vanced slo­ga­neer­ing is in­dis­tin­guish­able from hyp­no­sis, and so when Adams has some cute turns of phrase in his pre­vi­ous book, he de­scribes it as [I] used a va­ri­ety of hyp­no­sis tech­niques in an at­tempt to pro­duce a feel­ing of eu­phoric en­light­en­ment in the reader”. This is the cringi­est way pos­si­ble to de­scribe cute turns of phrase, and turns me off from be­liev­ing any his fur­ther claims to hyp­notic mas­tery.Through­out this piece, I’ve tried to em­pha­size that Adams was usu­ally pretty self-aware. Did that in­clude the hyp­no­sis stuff? I’m not sure. I think he would have an­swered: cer­tainly some peo­ple are great charis­matic ma­nip­u­la­tors. Either their skills are magic, or they op­er­ate by some phys­i­cal law. If they op­er­ate by phys­i­cal law, they should be learn­able. Maybe I’m not quite Steve Jobs level yet, but I have to be some­where along the path to be­com­ing Steve Jobs, right? And why not de­scribe it in im­pres­sive terms? Steve Jobs would have come up with im­pres­sive-sound­ing terms for any skills he had, and you would have be­lieved him!Every few months, some group of bright nerds in San Francisco has the same idea: we’ll use our in­tel­li­gence to hack our­selves to be­come hot and hard-work­ing and charis­matic and per­sua­sive, then reap the ben­e­fits of all those things! This is such a se­duc­tive idea, there’s no rea­son what­so­ever that it should­n’t work, and every yoga stu­dio and ther­a­pist’s of­fice in the Bay Area has a lit­tle shed in the back where they keep the skulls of the last ten thou­sand bright nerds who tried this. I can’t ex­plain why it so in­vari­ably goes wrong. The best I can do is tell a story where, when you’re try­ing to do this, you’re se­lect­ing for ei­ther tech­niques that can change you, or tech­niques that can com­pellingly make you think you’ve been changed. The lat­ter are much more com­mon than the for­mer. And the most suc­cess­ful par­a­sites are al­ways those which can al­ter their host en­vi­ron­ment to be more amenable to them­selves, and if you’re a par­a­site tak­ing the form of a bad idea, that means hi­jack­ing your host’s ra­tio­nal­ity. So you’re re­ally se­lect­ing for things that are com­pelling, se­duc­tive, and dam­age your abil­ity to tell good ideas from bad ones. This is a just-so story that I have no ev­i­dence for - but se­ri­ously, go to some­one who has the words human po­ten­tial” on their busi­ness card and ask them if you can see the skull shed.But also: it’s at­trac­tive to be an ef­fort­lessly con­fi­dent al­pha male who oozes mas­culin­ity. And it’s . . . fine . . . to be a nor­mal per­son with nor­mal-per­son hangups. What you re­ally don’t want to be is a nor­mal per­son who is un­con­vinc­ingly pre­tend­ing to be a con­fi­dent al­pha male. Oh hello, nice to meet you, I came here in my Ferrari, it’s def­i­nitely not a rental, you’re hav­ing the pasta - I’m choos­ing it for you be­cause I’m so dom­i­nant - any­way, do you want to have sex when we get back? Oh, wait, I for­got to neg you, nice hair, is it fake?” In the­ory, be­com­ing a hot charis­matic per­son with great so­cial skills ought to be the same kind of task as every­thing else, where you prac­tice a lit­tle and you’re bad, but then you prac­tice more and you be­come good. But the un­canny val­ley is deep and wide, and Scott Adams was too in­vested in say­ing Ha! I just hyp­no­tized you - ha! There, did it again!” for me to trust his moun­taineer­ing skills.It all led, in­ex­orably, to Trump.In sum­mer 2015, Trump came down his es­ca­la­tor and an­nounced his pres­i­den­tial can­di­dacy. Given his comic sta­tus, his be­yond-the-pale views, and his com­pe­ti­tion with a crowded field in­clud­ing Jeb Bush and Ted Cruz, tra­di­tional me­dia wrote him off. Sure, he im­me­di­ately led in the polls, but po­lit­i­cal his­tory was full of weirdos who got brief poll bumps eigh­teen months be­fore an elec­tion only to burn out later. The pre­dic­tion mar­kets listed his chance of the nom­i­na­tion (not the Presidency!) at 5%.Which made it es­pe­cially jar­ring when, in August, Scott Adams wrote a blog post as­sert­ing that Trump had a 98% chance” of win­ning. This claim re­ceived na­tional at­ten­tion, be­cause Trump was dom­i­nat­ing the news cy­cle and Adams was ap­prox­i­mately the only per­son, any­where, who thought he had a chance. There are two ways to make his­tor­i­cally good pre­dic­tions. The first way is to be some kind of bril­liant su­per­fore­caster. Adams was­n’t this. Every big pre­dic­tion he made af­ter this one failed. Wikipedia notes that he dom­i­nated a Politico fea­ture called The Absolute Worst Political Prediction of 20XX, with the au­thors even re­mark­ing that he has man­aged to ap­pear on this an­nual roundup of the worst pre­dic­tions in pol­i­tics more than any other per­son on the planet”. His most fa­mous howler was that if Biden won in 2020, Republicans would be hunted” and his Republican read­ers would most likely be dead within a year”. But other high­lights in­clude a ma­jor pres­i­den­tial can­di­date will die of COVID, the Supreme Court will over­turn the 2024 elec­tion”, and Hillary Clinton will start a race war”.The other way to make a great pre­dic­tion is to live your en­tire life for one per­fect mo­ment - the in­vet­er­ate bear who pre­dicted twelve of the last zero re­ces­sions, but now it’s 2008 and you look like a ge­nius. By 2015, Adams had be­come a bro­ken record around one point: peo­ple are ir­ra­tional sheep who are prey for charis­matic ma­nip­u­la­tors. The pointy-haired boss al­ways wins. Trump was the pointi­est-haired per­son in the vicin­ity, and he was ob­vi­ously try­ing to charis­mat­i­cally play on peo­ple’s in­stincts while other peo­ple were do­ing com­par­a­tively nor­mal pol­i­tics. Scott Adams’ hour had ar­rived.But Adams also han­dled his time in the spot­light mas­ter­fully. He gave us terms like clown ge­nius”. I hate us­ing this, be­cause I know Scott Adams was sit­ting at his desk in his cus­tom-built Dilbert-head-shaped tower think­ing What sort of hyp­notic catchy slo­gans can I use to make my meme about Trump spread . . . aha! Clown ge­nius! That has ex­actly the right ring!” and it ab­solutely worked, and now every­one who was fol­low­ing the Internet in 2015 has the phrase clown ge­nius” etched into their brains (Adams calls these linguistic kill shots”; since I re­mem­ber that term and use it of­ten, I sup­pose linguistic kill shot” is an ex­am­ple of it­self). He went from news out­let to news out­let say­ing As a trained hyp­no­tist, I can tell you what tricks Trump is us­ing to bam­boo­zle his fol­low­ers, given that ra­tio­nal per­sua­sion is fake and mar­ket­ing tech­niques alone turn the wheels of his­tory,” and the news out­lets ate it up.You prob­a­bly thought I was mak­ing up the part where Scott Adams has a cus­tom-built tower shaped like Dilbert’s head.And some of his com­men­tary was good. He was one of the first peo­ple to point out the clas­sic Trump over­reach, where he would say some­thing like Sleepy Joe Biden let in twenty tril­lion il­le­gal im­mi­grants!” The lib­eral me­dia would take the bait and say FACT CHECK: False! - Joe Biden only let in five mil­lion il­le­gal im­mi­grants!”, and thou­sands of peo­ple who had never pre­vi­ously been ex­posed to any nar­ra­tive-threat­en­ing in­for­ma­tion would think Wait, Joe Biden let in five mil­lion il­le­gal im­mi­grants?!” Once you no­tice it, it’s hard to un­see. Adams started out by stress­ing that he was po­lit­i­cally in­de­pen­dent. He did­n’t sup­port Trump, he was just the out­side hyp­no­sis ex­pert point­ing out what Trump was do­ing. IT’S JUST A THOUGHT EXPERIMENT, IF YOU TAKE IT SERIOUSLY, YOU FAIL. Indeed, this per­son is a charis­matic ma­nip­u­la­tor hack­ing the minds of ir­ra­tional sheep” is hardly a pro-Trump take. And he lived in Pleasanton, California - a mem­ber in good stand­ing of the San Francisco met­ro­pol­i­tan area - and nice Pleasantonians sim­ply did not be­come Trump sup­port­ers in 2016.On the other hand, at some point, his in­creas­ingly overblown the­o­ries of Trump’s great­ness opened up a lit­tle wedge. The grow­ing MAGA move­ment started treat­ing him as one of their own; lib­er­als started to see him as an en­emy. His fame turned the All-Seeing Eye of so­cial me­dia upon him, that gaze which no man may meet with­out con­se­quence. Once you’re suf­fi­ciently promi­nent, pol­i­tics be­comes a sep­a­rat­ing equi­lib­rium; if you lean even slightly to one side, the other will pile on you so mas­sively and trau­mat­i­cally that it will force you into their op­po­nents’ open arms just for a shred of psy­cho­log­i­cal se­cu­rity.As he had done so many other times dur­ing his life, he re­solved the con­flict in the dumb­est, cringi­est, and most pub­lic way pos­si­ble: a June 2016 blog post an­nounc­ing that he was en­dors­ing Hillary Clinton, for his own safety, be­cause he sus­pected he would be tar­geted for as­sas­si­na­tion if he did­n’t:This past week we saw Clinton pair the idea of President Trump with nu­clear dis­as­ter, racism, Hitler, the Holocaust, and what­ever else makes you trem­ble in fear. That is good per­sua­sion if you can pull it off be­cause fear is a strong mo­ti­va­tor. It is also a sharp pivot from Clinton’s prior ap­proach of talk­ing about her mas­tery of pol­icy de­tails, her ex­pe­ri­ence, and her gen­der. Trump took her so-called woman card” and turned it into a li­a­bil­ity. So Clinton wisely piv­oted. Her new scare tac­tics are solid-gold per­sua­sion. I would­n’t be sur­prised if you see Clinton’s num­bers ver­sus Trump im­prove in June, at least tem­porar­ily, un­til Trump finds a counter-move.The only down­side I can see to the new ap­proach is that it is likely to trig­ger a race war in the United States. And I would be a top-ten as­sas­si­na­tion tar­get in that sce­nario […]So I’ve de­cided to en­dorse Hillary Clinton for President, for my per­sonal safety. Trump sup­port­ers don’t have any bad feel­ings about pa­tri­otic Americans such as my­self, so I’ll be safe from that crowd. But Clinton sup­port­ers have con­vinced me — and here I am be­ing 100% se­ri­ous — that my safety is at risk if I am seen as sup­port­ive of Trump. So I’m tak­ing the safe way out and en­dors­ing Hillary Clinton for pres­i­dent.As I have of­ten said, I have no psy­chic pow­ers and I don’t know which can­di­date would be the best pres­i­dent. But I do know which out­come is most likely to get me killed by my fel­low cit­i­zens. So for safety rea­son, I’m on team Clinton.My pre­dic­tion re­mains that Trump will win in a land­slide based on his su­pe­rior per­sua­sion skills. But don’t blame me for any­thing President Trump does in of­fice be­cause I en­dorse Clinton.This some­how failed to be a mas­ter­stroke of hyp­notic ma­nip­u­la­tion that left both sides pla­cated. But it was fine, be­cause Trump won any­way! In the New Right’s wave of ex­ul­ta­tion, all was for­given, and the first high-pro­file fig­ure to bet on Trump be­came a lo­cal hero and con­firmed prophet. Never mind that Adams had pre­dicted Trump would win by one of the biggest mar­gins we’ve seen in re­cent his­tory” when in fact he lost the pop­u­lar vote. The man who had dreamed all his life of be­ing re­spected for some­thing other than car­toon­ing had fi­nally made it.Ob­vi­ously, it de­stroyed him.At first, I won­dered if Adams’ right-wing turn was a cal­cu­lated manuever. He’d al­ways longed to be a ma­nip­u­la­tor of lesser hu­mans, and had fi­nally achieved slightly-above-zero skill at it. Wouldn’t it fit his per­son­al­ity to see the right-wingers as dumb sheep, and him­self as the clever Dogbert-style scam­mer who could profit off them? Did he re­ally be­lieve (as he claimed) that he was at risk of be­ing as­sas­si­nated by left-wing rad­i­cals who could­n’t han­dle his level of in­sight into Trump’s ge­nius? Or was this just an­other hyp­notic sug­ges­tion, ret­ro­spec­tively jus­ti­fied in­so­far as we’re still talk­ing about it ten years later and all pub­lic­ity is good pub­lic­ity?But I don’t think he did it cyn­i­cally. At the turn of the mil­len­nium, the ob­sessed-with-their-own-clev­er­ness de­mo­graphic leaned firmly lib­eral: smug New Atheists, hard­line skep­tics, mem­bers of the reality-based com­mu­nity”. But in the 2010s, lib­er­al­ism be­came the de­fault, the pub­lic switched to ex­per­to­la­try, dumb peo­ple’s or­tho­dox­ies about race and gen­der be­came eas­ier and more fun to punc­ture than dumb peo­ple’s or­tho­dox­ies about re­li­gion - and the O.W.T.O.C.s lurched right. Adams was borne along by the tide. With enough time, ded­i­ca­tion, and archive ac­cess, you can hop from Dilbert comic to Dilbert comic, trac­ing the ex­act con­tours of his po­lit­i­cal jour­ney.There’s a pas­sage in the in­tro to one of Adams books where he says that, given how he’s go­ing to blow your mind and to­tally punc­ture every­thing you pre­vi­ously be­lieved, per­haps the work is un­suit­able for peo­ple above fifty-five, whose brains are com­par­a­tively scle­rotic and might shat­ter at the strain. This is how I feel about post-2016 pol­i­tics. Young peo­ple were mostly able to weather the dam­age. As for older peo­ple, I have seen pub­lic in­tel­lec­tual af­ter pub­lic in­tel­lec­tual who I pre­vi­ously re­spected have their brains turn to pud­dles of par­ti­san-fla­vored mush. Jordan Peterson, Ken White, Curtis Yarvin, Paul Krugman, Elon Musk, the Weinsteins, [various peo­ple close enough to me that it would be im­po­lite to name them here]. Once, these peo­ple were li­ons of in­sight­ful de­bate. Where now are the horse and the rider? Where is the horn that was blow­ing? Adams was 58 when Trump changed every­thing. In 2001, age 44, he’d found the fail­ure of his Dilberito funny. But in an­other in­ter­view, at age 50, he sug­gested that maybe his com­peti­tors had formed teams to sneak into su­per­mar­kets and hide them in the back of the shelves. Being trag­i­cally flawed yet also self-aware enough to laugh about it is a young man’s game. In 2024, di­ag­nosed with ter­mi­nal can­cer, Adams de­cided to treat it via iver­mectin, ac­cord­ing to a pro­to­col rec­om­mended by fel­low right-wing con­trar­ian Dr. William Makis. This does­n’t seem to me like a story about a cynic milk­ing right-wingers for the grift. It sounds like a true be­liever. Scott Adams, the man too clever and in­de­pen­dent to join any po­lit­i­cal ten­dency, who had sworn to al­ways be the mas­ter ma­nip­u­la­tor stand­ing above the fray rather than a sheep with or­di­nary ob­ject-level opin­ions - had fi­nally suc­cumbed to sin­cere be­lief.It’s Not Funny If I Have To Explain ItEvery child is hy­po­manic, con­vinced of their own spe­cial­ness. Even most teenagers still sus­pect that, if every­thing went right, they could change the world.It’s not just nerds. Everyone has to crash into re­al­ity. The gui­tar player who starts a garage band in or­der to be­come a rock­star. The var­sity ath­lete who wants to make the big leagues. They all even­tu­ally re­al­ize, no, I’m mediocre. Even the ones who aren’t mediocre, the ones with some spe­cial tal­ent, only have one spe­cial tal­ent (let’s say car­toon­ing) and no more.I don’t know how the mu­si­cians and ath­letes cope. I hear sto­ries about washed-up al­co­holic for­mer high school quar­ter­backs for­ever telling their girl­friends about how if Coach had only put them in for the last quar­ter dur­ing the big game, things would have gone dif­fer­ently. But since most writ­ers are nerds, it’s the nerds who dom­i­nate the dis­cus­sion, so much so that the whole af­fair gets dubbed Former Gifted Kid Syndrome”.Every nerd who was the smartest kid in their high school goes to an ap­pro­pri­ately-ranked col­lege and re­al­izes they’re noth­ing spe­cial. But also, once they go into some spe­cific field they find that in­tel­lect, as ver­sa­tile as it is, can only take them so far. And for some­one who was told their whole child­hood that they were go­ing to cure can­cer (alas, a real quote from my el­e­men­tary school teacher), it’s a tough pill to swal­low.Re­ac­tion for­ma­tion, where you re­place a un­bear­able feel­ing with its ex­act op­po­site, is one of the all time great Freudian de­fense mech­a­nisms. You may re­mem­ber it from such clas­sics as rape vic­tims fall in love with their rapist” or secretly gay peo­ple be­come re­ally ho­mo­pho­bic”. So some per­cent of washed-up gifted kids com­pen­sate by re­ally, re­ally hat­ing nerdi­ness, ra­tio­nal­ity, and the in­tel­lect.The va­ri­ety of self-hat­ing nerd are too many to num­ber. There are the nerds who go into psy­chol­ogy to prove that EQ is a real thing and IQ merely its pale pa­thetic shadow. There are the nerds who be­come su­per-woke and talk about how rea­son and ob­jec­tiv­ity are forms of white su­premacy cul­ture. There are the nerds who ob­sess over embodiment” and somatic ther­apy” and ac­cuse every­one else of living in their heads”. There are the nerds who de­flect by be­com­ing re­ally into neu­ro­di­ver­sity - the in­ter­est­ing thing about my brain is­n’t that I’m smart’ or rational’, it’s that I’m ADHDtistic, which is ac­tu­ally a weak­ness . . . but also se­cretly a strength!” There are the nerds who flirt with fas­cism be­cause it idol­izes men of ac­tion, and the nerds who con­vert to Christianity be­cause it idol­izes men of faith. There are the nerds who get re­ally into Seeing Like A State, and how be­ing into ra­tio­nal­ity and met­rics and num­bers is soooooo High Modernist, but as a Kegan Level Five Avatar they are far be­yond such petty con­cerns. There are the nerds who re­de­fine nerd” as person who likes Marvel movies” - hav­ing suc­cess­fully ger­ry­man­dered them­selves out­side the cat­e­gory, they can go back to their im­pec­ca­bly-ac­cu­rate sta­tis­tics­blog­ging on ed­u­ca­tional out­comes, or their deep dives into an­thro­pol­ogy and me­dieval mys­ti­cism, all while cast­ing about them im­pre­ca­tions that of course nerds are loath­some scum who de­serve to be bul­lied.(maybe it’s un­fair to at­tribute this to self-ha­tred per se. Adams wrote, not un­fairly, that the sci­en­tismists in Kegan level 4 are ar­ro­gant when it comes to deal­ing with peo­ple in lev­els two and three.” Maybe there’s the same des­per­ate urge for level 5 to dif­fer­en­ti­ate them­selves from 4s - cf. bar­ber­pole the­ory of fash­ion).Scott Adams felt the con­tra­dic­tions of nerd-dom more acutely than most. As com­pen­sa­tion, he was gifted with two great de­fense mech­a­nisms. The first was hu­mor (which Freud grouped among the ma­ture, adap­tive de­fenses), aided by its hand­maiden self-aware­ness. The sec­ond (from Freud’s neurotic” cat­e­gory) was his own par­tic­u­lar va­ri­ety of re­ac­tion for­ma­tion, I’m bet­ter than those other nerds be­cause, while they fool­ishly wor­ship ra­tio­nal­ity and the in­tel­lect, I’ve got­ten past it to the real deal, mar­ket­ing / ma­nip­u­la­tion / per­sua­sion / hyp­no­sis.” When he was young, and his mind sup­ple, he was able to bal­ance both these mech­a­nisms; the steam of their dis­so­nance drove the tur­bine of his art. As he grew older, the first one - es­pe­cially the self-aware­ness - started to fail, and he leaned in­creas­ingly heav­ily on the sec­ond. Forced to bear the en­tire weight of his wounded psy­che, it started show­ing more and more cracks, un­til even­tu­ally he ended up as a pod­caster - the surest sign of a de­ranged mind. In com­par­i­son, his fi­nal down­fall was al­most triv­ial - a bog-stan­dard can­cel­la­tion, in­dis­tin­guish­able from every other can­cel­la­tion of the 2015 - 2025 pe­riod. Angered by a poll where some black peo­ple ex­pressed dis­com­fort with the slo­gan It’s Okay To Be White”, Adams de­clared that the best ad­vice I would give to white peo­ple is to get the hell away from black peo­ple; just get the fuck away”. Needless to say, his pub­lisher, syn­di­ca­tor, and ba­si­cally every news­pa­per in the coun­try dropped him im­me­di­ately. He re­launched his comics on Locals, an on­line sub­scrip­tion plat­form for can­celled peo­ple, but his reach had de­clined by two or­ders of mag­ni­tude and never re­cov­ered.Adams was will­ing to sac­ri­fice every­thing for the right to say It’s Okay To Be White”. I can’t help won­der­ing what his life would have been like if he’d been equally will­ing to as­sert the okay­ness of the rest of his iden­tity.Dil­bert’s Guide to the Rest of Your LifePartly this is be­cause we’re too sim­i­lar for me to hate him with­out hat­ing my­self. You’re a bald guy with glasses named Scott A who lives in the San Francisco Bay Area. You think you’re pretty clever, but the world has a way of re­mind­ing you of your lim­i­ta­tions. You try to work a nor­mal job. You do a lit­tle funny writ­ing on the side. People like the funny writ­ing more than you ex­pected. Hardly be­liev­ing your luck, you quit to do the funny writ­ing full time. You ex­plore themes about the ir­ra­tional­ity of the world. You have some crazy ideas you’re not en­tirely will­ing to stand be­hind, and pre­sent them as fic­tion or spec­u­la­tion or April Fools jokes. You al­ways won­der whether your pur­pose in life is re­ally just funny writ­ing - not be­cause peo­ple don’t love the stuff you write, not even be­cause you don’t get fan mail say­ing you some­how mys­te­ri­ously changed peo­ple’s lives, but just be­cause it seems less se­ri­ous than be­ing a ti­tan of in­dus­try or some­thing. You try some other things. They don’t go ter­ri­bly, but they don’t go great ei­ther. You de­cide to stick with what you’re good at. You write a book about the Lurianic kab­balah. You get re­ally into whale puns.As we pass through life, some­times God shows us dopple­gangers, bright or dark mir­rors of our­selves, glimpses of how we might turn out if we zig or zag on the path ahead. Some of these peo­ple are meant as shin­ing in­spi­ra­tions, oth­ers as ter­ri­ble warn­ings, but they’re all our teach­ers. Adams was my teacher in a more lit­eral way too. He pub­lished sev­eral an­no­tated col­lec­tions, books where he would pre­sent comics along with an ex­pla­na­tion of ex­actly what he was do­ing in each place, why some things were funny and oth­ers weren’t, and how you could one day be as funny as him. Ten year old Scott de­voured these. I’ve al­ways tried to hide my power level as a hu­morist, lest I get pegged as a comedic au­thor and peo­ple stop tak­ing me se­ri­ously. But ob­jec­tively my joke posts get the most likes and retweets of any­thing I write, and I owe much of my skill in the genre to cram­ming Adams’ ad­vice into a mal­leable im­ma­ture brain. There’s a di­rect line be­tween Dogbert’s crazy schemes and the startup ideas in a typ­i­cal Bay Area House Party post.The Talmud tells the story of the death of Rabbi Elisha. Elisha was an evil apos­tate. His for­mer stu­dent, Rabbi Meir, who stayed good and or­tho­dox, in­sisted that Rabbi Elisha prob­a­bly went to Heaven. This was never very plau­si­ble, and God sent in­creas­ingly ob­vi­ous signs to the con­trary, in­clud­ing a boom­ing voice from Heaven say­ing that Elisha was not saved. Out of loy­alty to his ex-teacher, Meir dis­missed them all - that voice was prob­a­bly just some kind of 4D chess move - and in­sisted that Elisha had a share in the World To Come. Out of the same doomed loy­alty as Rabbi Meir, I want to be­lieve Scott Adams went to Heaven. There is what at first ap­pears to be promis­ing ev­i­dence - in his fi­nal mes­sage to his fans, Adams said:Many Christian friends have asked me to find Jesus be­fore I go. I’m not a be­liever, but I have to ad­mit the risk-re­ward cal­cu­la­tion for do­ing so looks at­trac­tive. So here I go: I ac­cept Jesus Christ as my lord and sav­ior, and I like for­ward to spend­ing an eter­nity with him. The part about me not be­ing a be­liever should be quickly re­solved if I wake up in heaven. I won’t need any more con­vinc­ing than that. And I hope I am still qual­i­fied for en­try.It is a dogma of many re­li­gions that sin­cere deathbed con­ver­sions are ac­cepted. But I’d be more com­fort­able if this sounded less like haha, I found my fi­nal clever life­hack”. I can only hope he did­n’t try to im­plant any hyp­notic sug­ges­tions in an at­tempt to get a lin­guis­tic kill shot in on the Almighty. As an­other self-hat­ing nerd writer put it, through all these years I make ex­per­i­ment if my sins or Your mercy greater be.”But I’m more en­cour­aged by the sec­ond half of his de­part­ing note:For the first part of my life, I was fo­cused on mak­ing my­self a wor­thy hus­band and par­ent, as a way to find mean­ing. That worked. But mar­riages don’t al­ways last for­ever, and mine even­tu­ally ended, in a highly am­i­ca­ble way. I’m grate­ful for those years and for the peo­ple I came to call my fam­ily.

Once the mar­riage un­wound, I needed a new fo­cus. A new mean­ing. And so I do­nated my­self to the world,” lit­er­ally speak­ing the words out loud in my oth­er­wise silent home. From that point on, I looked for ways I could add the most to peo­ple’s lives, one way or an­other.

That marked the start of my evo­lu­tion from Dilbert car­toon­ist to an au­thor of - what I hoped would be - use­ful books. By then, I be­lieved I had con­densed enough life lessons that I could start pass­ing them on. I con­tin­ued mak­ing Dilbert comics, of course.

As luck would have it, I’m a good writer. My first book in the useful” genre was How to Fail at Almost Everything and Still Win Big. That book turned out to be a huge suc­cess, of­ten im­i­tated, and in­flu­enc­ing a wide va­ri­ety of peo­ple. I still hear every day how much that book changed lives. My plan to be use­ful was work­ing.

I fol­lowed up with my book Win Bigly, that trained an army of cit­i­zens how to be more per­sua­sive, which they cor­rectly saw as a mi­nor su­per power. I know that book changed lives be­cause I hear it of­ten.

You’ll prob­a­bly never know the im­pact the book had on the world, but I know, and it pleases me while giv­ing me a sense of mean­ing that is im­pos­si­ble to de­scribe.

My next book, Loserthink, tried to teach peo­ple how to think bet­ter, es­pe­cially if they were dis­play­ing their think­ing on so­cial me­dia. That one did­n’t put much of a dent in the uni­verse, but I tried.

Finally, my book Reframe Your Brain taught read­ers how to pro­gram their own thoughts to make their per­sonal and pro­fes­sional lives bet­ter. I was sur­prised and de­lighted at how much pos­i­tive im­pact that book is hav­ing.

I also started pod­cast­ing a live show called Coffee With Scott Adams, ded­i­cated to help­ing peo­ple think about the world, and their lives, in a more pro­duc­tive way. I did­n’t plan it this way, but it ended up help­ing lots of lonely peo­ple find a com­mu­nity that made them feel less lonely. Again, that had great mean­ing for me.

I had an amaz­ing life. I gave it every­thing I had. If you got any ben­e­fits from my work, I’m ask­ing you to pay it for­ward as best you can. That is the legacy I want.And please know I loved you all to the end.I had been vaguely aware that he had some com­mu­nity around him, but on the event of his death, I tried watch­ing an episode or two of his show. I could­n’t en­tirely fol­low, but I think his var­i­ous sub-shows are get­ting rolled into a broader brand, The Scott Adams School, where his acolytes dis­cuss and teach his the­ory of per­sua­sion:The woman on the top left is his ex-wife. Even though they’ve been di­vorced for twelve years, they never aban­doned each other. All the other faces are peo­ple who found Adams rev­e­la­tory and are choos­ing to con­tinue his in­tel­lec­tual tra­di­tion. And in the com­ments - thir­teen thou­sand of them - are other peo­ple who loved Adams. Some watch every episode of his pod­cast and con­sider him a ge­nius. Others were touched in more sub­tle ways. People who wrote him with their prob­lems and he re­sponded. People who met him on the street and de­manded the typ­i­cal fa­mous per­son pose for a photo with me”, and he did so gra­ciously. People who said his self-help books re­ally helped them. People who just used Dilbert to stay sane through their cu­bi­cle jobs. Adams is easy and fun to mock - as is every­one who lives their life uniquely and un­apolo­get­i­cally. I’ve had a good time psy­cho­an­a­lyz­ing him, but every­one does what­ever they do for psy­cho­log­i­cal rea­sons, and some peo­ple end up do­ing good. Though I can’t en­dorse ei­ther Adams’ pol­i­tics or his per­sua­sive meth­ods, every­thing is a com­bi­na­tion of it­self and an at­tempt to build a com­mu­nity. And what­ever the value of his ideas, the com­mu­nity seems real and lov­ing.And I’m se­ri­ous when I say I con­sider Adams a teacher. For me, he was the sort of teacher who shows you what to avoid; for many oth­ers, he was the type who serves as in­spi­ra­tion. These roles aren’t quite op­po­sites - they’re both down­stream of a man who blazed his own path, and who recorded every step he took, with un­usual grace and hu­mor, as doc­u­men­ta­tion for those who would face a choice of whether or not to fol­low. This was­n’t a co­in­ci­dence, but the con­scious and wor­thy pro­ject of his life. Just for to­day, I’ll con­sider my­self part of the same stu­dent body as all the other Adams fans, and join my fel­lows in trib­ute to our fallen in­struc­tor. I hope he gets his lin­guis­tic kill shot in on God and squeaks through the Pearly Gates.

...

Read the original on www.astralcodexten.com »

8 198 shares, 36 trendiness

US electricity demand surged in 2025 – solar handled 61% of it

Solar did­n’t just show up in 2025 — it car­ried the grid. A new analy­sis from global en­ergy think tank Ember shows that so­lar power ac­counted for 61% of the growth in US elec­tric­ity de­mand last year, high­light­ing how cen­tral so­lar has be­come as power de­mand ac­cel­er­ates.

US elec­tric­ity de­mand jumped by 135 ter­awatt-hours (TWh) in 2025, a 3.1% in­crease, the fourth‑largest an­nual rise of the past decade. Over that same pe­riod, so­lar gen­er­a­tion grew by a record 83 TWh — a 27% in­crease from 2024 and the biggest ab­solute gain of any power source. That sin­gle jump in so­lar out­put cov­ered 61% of all new elec­tric­ity de­mand na­tion­wide.

Solar growth was es­sen­tial in help­ing to meet fast‑ris­ing US elec­tric­ity de­mand in 2025,” said Dave Jones, chief an­a­lyst at Ember. It gen­er­ated where it was needed, and — with the surge in bat­ter­ies — in­creas­ingly when it was needed.”

Texas, the Midwest, and the Mid‑Atlantic saw the largest in­creases in so­lar gen­er­a­tion last year, and they were also the re­gions where elec­tric­ity de­mand rose the fastest. Solar met 81% of de­mand growth in both Texas and the Midwest, and 33% in the Mid‑Atlantic.

Timing mat­tered, too. In ag­gre­gate, the in­crease in so­lar gen­er­a­tion met the en­tire rise in US elec­tric­ity de­mand dur­ing day­time hours be­tween 10 am and 6 pm Eastern. And as a re­sult of the rapid build­out of bat­tery stor­age, so­lar also helped cover some of the de­mand growth dur­ing the evening hours, from 6 pm to 2 am.

The adop­tion of bat­tery stor­age is turn­ing so­lar from cheap day­time power into some­thing far more flex­i­ble. Over the past six years, California’s util­ity‑scale so­lar and bat­tery gen­er­a­tion has climbed 58%. Yet, out­put at the sun­ni­est hour of the day has in­creased by just 8%, a sign that more en­ergy is be­ing stored and used later, rather than dumped onto the grid all at once.

Most of the new so­lar gen­er­a­tion in 2025 was ab­sorbed by ris­ing elec­tric­ity de­mand, al­low­ing so­lar to scale along­side over­all grid growth.

Solar has the po­ten­tial to meet all the rise in elec­tric­ity de­mand and much more. With elec­tric­ity de­mand surg­ing, the case to build so­lar has never been stronger,” said Jones.

Read more: EIA: All net new gen­er­at­ing ca­pac­ity in 2026 may be re­new­ables

If you’re look­ing to re­place your old HVAC equip­ment, it’s al­ways a good idea to get quotes from a few in­stallers. To make sure you’re find­ing a trusted, re­li­able HVAC in­staller near you that of­fers com­pet­i­tive pric­ing on heat pumps, check out EnergySage. EnergySage is a free ser­vice that makes it easy for you to get a heat pump. They have pre-vet­ted heat pump in­stallers com­pet­ing for your busi­ness, en­sur­ing you get high qual­ity so­lu­tions. Plus, it’s free to use!

Your per­son­al­ized heat pump quotes are easy to com­pare on­line and you’ll get ac­cess to un­bi­ased Energy Advisors to help you every step of the way. Get started here. — *ad

...

Read the original on electrek.co »

9 196 shares, 13 trendiness

High-level is the goal

If you have heard of the Handmade com­mu­nity, you likely think we are about low-level pro­gram­ming” in some way. After all, we are a com­mu­nity in­spired by Handmade Hero, a se­ries where you learn to make a game and en­gine from scratch.

We in the Handmade com­mu­nity of­ten be­moan the state of the soft­ware in­dus­try. Modern soft­ware is slow and bloated be­yond be­lief—our com­put­ers are lit­er­ally ten times more pow­er­ful than a decade ago, yet they run worse than they used to, purely be­cause the soft­ware is so bad. The ac­tual user ex­pe­ri­ence has steadily de­clined over the years de­spite the in­sane power at our fin­ger­tips. Worst of all, peo­ple’s ex­pec­ta­tions have hit rock bot­tom, and every­one thinks this is nor­mal.

The Handmade crowd seems to think that low-level pro­gram­ming is the key to build­ing bet­ter soft­ware. But this does­n’t re­ally make sense on the sur­face. How is this prac­ti­cal for the av­er­age pro­gram­mer? Do we re­ally ex­pect every­one to make their own UI frame­works and mem­ory al­lo­ca­tors from scratch? Do we re­ally think you should never use li­braries? Even if the av­er­age pro­gram­mer could ac­tu­ally work that way, would any­thing ac­tu­ally im­prove, or would the world of soft­ware just be­come more frag­mented?

I do be­lieve, with all my heart, that low-level pro­gram­ming is the path to a bet­ter fu­ture for the soft­ware in­dus­try. But the pre­vi­ous crit­i­cisms are valid, and should be a se­ri­ous con­cern for the Handmade pro­gram­mer. So what is the con­nec­tion here? What role does low-level” play in a bet­ter fu­ture for soft­ware?

Simone wanted an Tesla pickup truck, but the Cybertruck was still just a ru­mor, and she was feel­ing im­pa­tient. So she did what any rea­son­able per­son would do, and de­cided to con­vert a Tesla Model 3 into a pickup truck.

The re­sults speak for them­selves. Truckla looks amaz­ing, dri­ves per­fectly, and still func­tions as a mod­ern EV. This is no small feat—ob­vi­ously you can­not just cut the roof off a sedan and call it a pickup truck. She and her team had to en­sure that the car was struc­turally sound, that it could still charge, and that the soft­ware still worked as in­tended. Truckla is an im­pres­sive feat of en­gi­neer­ing that took gen­uine cre­ativ­ity and crafts­man­ship.

And yet, Truckla is still a pretty bad pickup truck! The bed size is small, it can’t haul much weight, and it’s likely much less ef­fi­cient than a truck en­gi­neered from the ground up. If you were in the mar­ket for a pickup truck, you would not buy Truckla! (You prob­a­bly would­n’t buy a Cybertruck ei­ther, but I di­gress.)

Truckla is an ex­cel­lent ex­e­cu­tion of a flawed idea. If you want to build a good pickup truck, you have to start with the frame.

In the world of soft­ware, the equiv­a­lent of the frame” is the tech stack. Software is shaped by pro­gram­ming lan­guages, frame­works, li­braries, and plat­forms in the same way that a car is shaped by its frame. If you con­vert a sedan into a truck, you will get a bad truck, and if you start with the wrong stack, you will get bad soft­ware. No en­gi­neer­ing ef­fort will be able to save you.

As an ex­am­ple, let’s look at a pro­gram that every­one has in­ter­acted with at some point.

This is New Reddit. It is a new fron­tend they rolled out roughly a decade ago, and it is…not well-loved. Because so many peo­ple hate it, Old Reddit is still on­line, and this gives us a unique op­por­tu­nity to com­pare two func­tion­ally iden­ti­cal pieces of soft­ware made a decade apart.

Back in 2023, I was ex­pe­ri­enc­ing hor­ri­ble lag on New Reddit. The com­ment ed­i­tor was slug­gish, UI was slow to ex­pand and col­lapse, and even hov­er­ing over a tooltip would cause a full-page hitch—all typ­i­cal of mod­ern soft­ware. Old Reddit, on the other hand, was a breath of fresh air—every­thing re­sponded in­stantly. Aside from out­dated aes­thet­ics, Old Reddit was bet­ter in every way.

So here’s a thought ex­per­i­ment: How much work should it take to col­lapse a sin­gle com­ment?

This is a pretty easy ques­tion. All that needs to hap­pen—all that should hap­pen—is to hide or re­move a few DOM el­e­ments, and up­date some text to say collapsed”. A well-writ­ten Reddit fron­tend should more or less do ex­actly this. But let’s see what New Reddit did:

Gross. Call stacks thirty func­tions deep, lay­out com­pu­ta­tion in the mid­dle of ren­der­ing, some kind of event or an­i­ma­tion frame­work, and…hold on, is that jQuery?

My mis­take, that’s ac­tu­ally a pro­file of Old Reddit. Here’s New Reddit:

At the time, it took New Reddit al­most 200 mil­lisec­onds to col­lapse a sin­gle com­ment. That is 200 mil­lisec­onds of pure JavaScript, with hardly any DOM work in sight. If you care about qual­ity soft­ware, your jaw should be on the floor. It is a stag­ger­ing amount of waste for what should have been a few DOM calls. And you feel it as a user: an ugly, in­tense hitch.

Old Reddit, on the other hand, did its work in about 10 mil­lisec­onds. That could be im­proved, but 10 mil­lisec­onds is to­tally fine. It feels re­spon­sive and keeps the site run­ning at 60 frames per sec­ond. So Old Reddit is the clear win­ner here, with a UI 20 times faster than New Reddit.

So, we must pick up our jaws off the floor and ask the ques­tion: How on earth did we get here? Were New Reddit’s devs just stu­pid, lazy JS fan­boys who would rather build Rube Goldberg ma­chines than do their jobs?

Maybe tbh. But lazi­ness alone does­n’t tell the whole story. The real prob­lem with New Reddit was the stack it was built on.

So what was the Reddit stack? Back in 2023, New Reddit was a React app with Redux for state man­age­ment. (These days they seem to have rewrit­ten it in Web Components.) React and Redux of course sit atop the web plat­form: HTML, CSS, and JavaScript. This plat­form is im­ple­mented by some browser en­gine, which then runs on some op­er­at­ing sys­tem, and fi­nally on the user’s phys­i­cal hard­ware (which is it­self ex­tremely com­pli­cated, but we have to stop some­where).

At my last job, I worked on an ap­pli­ca­tion that used pre­cisely this same stack. Our ap­pli­ca­tion was an em­ployee sched­ul­ing pro­gram that al­lowed man­agers to cre­ate weekly sched­ules for hourly work­ers. In about 2016 we re­placed our ag­ing Backbone.js fron­tend with a new one writ­ten in React and Redux, pre­sum­ably be­cause it was a pop­u­lar choice at the time.

As a re­sult, I be­came in­ti­mately fa­mil­iar with how a React+Redux app is con­structed. I also spent a lot of time try­ing to im­prove the ap­p’s abysmal per­for­mance. I lived in­side the Chrome and React pro­fil­ers, dili­gently track­ing down slow func­tions and sup­press­ing un­nec­es­sary React up­dates. We had a whole caching sys­tem for our Redux se­lec­tors, and I added log­ging to help us find se­lec­tors with a high cache miss rate. I built scripts to parse our source code and make graphs of our se­lec­tor de­pen­den­cies, so I could find places to split the app bun­dle into smaller pieces. Unfortunately, none of my work made much of a dif­fer­ence—per­for­mance con­tin­ued to plum­met as the app in­creased in com­plex­ity.

When you try to make a fast React+Redux app, you are con­stantly fight­ing the frame­works. These two li­braries con­stantly do un­nec­es­sary work, and your job is to sup­press that work un­til things run ac­cept­ably again. But some­times the cure is worse than the poi­son: an ex­pen­sive should­Com­po­nen­tUp­date ver­sus an ex­pen­sive React re-ren­der. Everything wants to up­date all the time, and as the app grows larger, the fre­quency and com­plex­ity of up­dates in­creases un­til there’s no sal­vaging it.

New Reddit ex­em­pli­fied this per­fectly: col­laps­ing a com­ment would dis­patch a Redux ac­tion, which would up­date the global Redux store, which would cause all Redux-connected com­po­nents on the page to up­date, which would cause all their chil­dren to up­date as well. In other words, col­laps­ing one com­ment trig­gered an up­date for nearly every React com­po­nent on the page. No amount of caching, DOM-diffing, or should­Com­po­nen­tUp­date can save you from this amount of waste.

At the end of the day, I had to con­clude that it is sim­ply not pos­si­ble to build a fast app on this stack. I have since en­coun­tered many web ap­pli­ca­tions that suf­fer in ex­actly the same way. Time and again, if it’s slow, it’s prob­a­bly us­ing React, and if it’s re­ally slow, it’s prob­a­bly us­ing Redux. The stack is the prob­lem. It’s the only rea­son­able con­clu­sion.

Thankfully, React+Redux is not the only pos­si­ble soft­ware stack. We can choose al­ter­na­tives at every point:

You could choose a dif­fer­ent JavaScript frame­work. Perhaps you could use Vue, or Svelte, or SolidJS, since these have pre­sum­ably had time to learn from React’s mis­takes. Or, of course, you could ditch all the frame­works and just use the DOM APIs di­rectly, es­pe­cially if your ap­pli­ca­tion is mostly sta­tic like Reddit.

You could use other browser APIs in­stead of HTML, CSS, and JS. You could use an al­ter­na­tive frame­work like Flutter, or you could build a cus­tom UI stack in WebGL and WebAssembly. Building it your­self might sound crazy, but it’s been done suc­cess­fully many times be­fore—for ex­am­ple, Figma fa­mously built their app from scratch in WASM and WebGL, and it runs shock­ingly well on very large pro­jects. Google Docs and Google Sheets also use WebGL in­stead of HTML and CSS, and the apps them­selves are writ­ten in Java and com­piled to JS or WASM.

You could build a na­tive app! You could use a cross-plat­form frame­work like Qt, a game en­gine like Unity, an OS ab­strac­tion layer like SDL, or again just use the na­tive APIs di­rectly and build the rest from scratch. This is ob­vi­ously the right choice for per­for­mance-in­ten­sive ap­pli­ca­tions, and a valid op­tion in gen­eral for de­vel­op­ers who are se­ri­ous about de­liv­er­ing a high-qual­ity ex­pe­ri­ence.

Together all these choices ac­tu­ally form a tree. Every node in this tree is a valid stack you could choose to build your soft­ware on. Most im­por­tantly, dif­fer­ent choices in this tree will be bet­ter for dif­fer­ent kinds of soft­ware, so be­ing com­fort­able with many op­tions al­lows you to make bet­ter choices for each prob­lem you face.

Unfortunately, this is how I imag­ine the de­vel­op­ers of New Reddit saw the tree:

There are not a lot of choices here. Critically, the best choice for them (direct DOM ma­nip­u­la­tion, like Old Reddit) was not even on the table. For what­ever rea­son, I think they just did­n’t even con­sider it as an op­tion. Ew, icky, we can’t just keep do­ing what Old Reddit did! We can’t use jQuery!

Their view of the world was too high-level. If all you know is React, you have no choices—you can only use React, or meta-frame­works on top of React. But the lower level you can go, the more the tree opens up to you. Going lower level al­lows you to ac­cess other choices, and to rec­og­nize when an­other choice would be a bet­ter fit.

The first rea­son, then, that we care about low-level is that it al­lows us to make bet­ter choices. We can make bet­ter soft­ware by start­ing in the right place, with the right frame and the right stack. Low-level pro­gram­ming al­lows us to build trucks in­stead of Trucklas.

But…this is­n’t re­ally enough, right? The soft­ware in­dus­try will not be saved by a few pro­gram­mers mak­ing bet­ter choices. It would help, to be sure, but it’s far from the an­swer.

This pre­sents an un­com­fort­able ques­tion: What if there are no good op­tions in this tree? What if none of these choices are ac­tu­ally good for the kind of soft­ware we want to make?

For ex­am­ple, what if your app wants di­rect ac­cess to the hard­ware, but you also want a cross-plat­form UI? What are your choices? You could use Qt, but it tends to feel very dated and has strong opin­ions about how you ar­chi­tect your soft­ware. Game en­gines would like­wise be a strange fit for a lot of ap­pli­ca­tions, of­fer­ing plenty of ren­der­ing power but lit­tle for 2D UI. There are some rel­a­tive new­com­ers like Flutter, but Flutter makes you buy into Dart, and we all know Dart is not the right tool for a per­for­mance-in­ten­sive ap­pli­ca­tion. So what do you do? There are no good choices on the mar­ket—you’ll have to build it your­self.

Our tree is top-heavy. If we sur­vey the soft­ware de­vel­op­ment land­scape to­day, we see an in­sane num­ber of JavaScript li­braries and frame­works, an ever-grow­ing num­ber of browser APIs, and very lit­tle de­vel­op­ment out­side of browsers be­sides frame­works that are Web-compatible and there­fore sub­ject to the same con­straints. If our tree was a real tree, it would look some­thing like this—and this is not a healthy tree.

The anal­ogy works even bet­ter, ac­tu­ally, when you con­sider how many branches are dead or dy­ing. What is the lifes­pan of a JS frame­work these days? Two years? Five if you’re lucky? More likely, the de­vel­oper will have van­ished off the face of the earth within a month.

Do we re­ally imag­ine that the fu­ture of the soft­ware in­dus­try is to grow this tree even taller? To build more on top? Frameworks on top of frame­works? Do we imag­ine that in the fu­ture we’ll still be us­ing HTML and CSS for so­phis­ti­cated ap­pli­ca­tions, when they’ve clearly been the wrong choice for years? Do we imag­ine that we’ll con­tinue to ship apps on top of browsers, on top of op­er­at­ing sys­tems, when mod­ern browsers are ba­si­cally op­er­at­ing sys­tems unto them­selves?

If we keep build­ing, this tree will col­lapse un­der its own weight. We need to prune it, and grow new branches from lower in the tree.

But who is go­ing to do that? Who is go­ing to build that fu­ture for the soft­ware in­dus­try?

It re­quires a par­tic­u­lar type of per­son. They must have in­her­ent drive and pas­sion for in­no­va­tion in soft­ware. But they also must have low-level knowl­edge. They need to be able to make dif­fer­ent choices from those who came be­fore, to ex­plore parts of the tree that haven’t yet been ex­plored.

The over­lap be­tween these cir­cles is tiny. There are so few peo­ple who fit into both cat­e­gories that we are just not see­ing much in­no­va­tion in that space. In fact, this im­age is pretty gen­er­ous when you con­sider how few low-level pro­gram­mers there are in gen­eral.

On the other hand, there are ac­tu­ally lots of peo­ple in the soft­ware in­dus­try with a drive to in­no­vate. The prob­lem is, they’re all mak­ing JavaScript frame­works.

They don’t pos­sess the low-level knowl­edge re­quired to ac­tu­ally make a sig­nif­i­cant dif­fer­ence. That’s just the re­al­ity: if you build from the top of the tree, all the im­por­tant de­ci­sions have al­ready been made for you. It’s like paint­ing a Truckla a dif­fer­ent color—it will not make a dif­fer­ence!

So the sec­ond rea­son I be­lieve low-level is crit­i­cal to the fu­ture of the soft­ware in­dus­try is that it sim­ply ex­pands the cir­cle. We can cap­ture some of those peo­ple with the drive to in­no­vate and equip them to ac­tu­ally in­no­vate in mean­ing­ful ways. We need more peo­ple ex­plor­ing this low-level space, and I know that for many peo­ple, low-level knowl­edge would open their eyes to pos­si­bil­i­ties they would never have dreamed of be­fore.

Not every­one who makes their own text ed­i­tor will have great ideas about the fu­ture of pro­gram­ming. Not every­one who makes their own com­piler will have great ideas about pro­gram­ming lan­guages. But some of them will. And it only takes a few of them to make a dif­fer­ence in the soft­ware in­dus­try.

So, to re­cap: the first rea­son we care about low-level is be­cause low-level knowl­edge leads to bet­ter en­gi­neer­ing choices. The sec­ond rea­son we care about low-level is be­cause, in the long term, low-level knowl­edge is the path to bet­ter tools and bet­ter ways of pro­gram­ming—it is a re­quire­ment for build­ing the plat­forms of the fu­ture.

But there is still one big prob­lem with all of this: low-level pro­gram­ming to­day is ab­solutely ter­ri­ble.

Low-level pro­gram­ming is so frus­trat­ing, and so dif­fi­cult. The ex­pe­ri­ence of low-level pro­gram­ming does not hold a can­dle to the ex­pe­ri­ence of us­ing high-level tools to­day—the very tools we see as a prob­lem.

If I want to make a React app, I can sim­ply Google how to build re­act app” and I will find a beau­ti­fully-crafted web page with demos, in­stal­la­tion guides, doc­u­men­ta­tion, and re­sources to get me on my way. It has com­mands I can run to get an app up and run­ning in five min­utes. If I change a line of code in my ed­i­tor, it re­freshes im­me­di­ately in my browser, short­en­ing that feed­back loop and mak­ing learn­ing fun. And there is a wealth of other re­sources on­line: dev tools, li­braries, tu­to­ri­als, and more, mak­ing it easy for any­one to get up and run­ning.

This is sim­ply not the case for the low-level space. If you’re lucky, you can maybe find an ex­pen­sive book or course. But more likely, you’ll just get a gi­gan­tic man­ual that lists every prop­erty of the sys­tem in ex­cru­ci­at­ing de­tail, which is to­tally worth­less for learn­ing and barely us­able as ref­er­ence. And that’s if you’re lucky—there’s a good chance that you’ll only get a wiki or a maze of man pages, which are im­pen­e­tra­ble walls of jar­gon. In some cases the only doc­u­men­ta­tion that ex­ists is the Linux Kernel Mailing List, and you can only pray that the one guy who can an­swer your ques­tion has­n’t flamed out in the past decade.

This is­n’t just bad for be­gin­ners, it’s bad for every­one. If this is the state of low-level knowl­edge, how can we ex­pect any­one to prac­tice low-level pro­gram­ming, much less the wider in­dus­try?

And the story does­n’t end there, be­cause low-level tools are ter­ri­ble too. In a browser, I can open up the dev tools, go to Performance, click Record”, and I will get a com­plete time­line of every­thing my ap­pli­ca­tion did. Every JavaScript func­tion, every net­work re­quest, every frame ren­dered, all cor­re­lated on a time­line so you can un­der­stand how every­thing re­lates. It is a de­vel­op­er’s dream, and it is a sin­gle click away! But the low-level space just does not have tools like this. There are a few de­cent pro­fil­ers, but in most cases you just have to run a com­mand-line pro­gram with some bizarre set of flags, pipe it through other tools, and then squint at a PDF or what­ever.

The crazy thing is: there is no rea­son for this to be the case. We could ab­solutely have the same kind of dev tools” for na­tive de­vel­op­ment that we do for the web. We could have pro­fil­ers that are ac­tu­ally de­signed to high­light use­ful info. We could have GUIs that show us net­work and file I/O, or in­ter-process com­mu­ni­ca­tion. We could have in­ter­ac­tive doc­u­men­ta­tion and live re­load­ing. We could have ed­i­tor plu­g­ins and lan­guage servers to help be­gin­ners along. The raw ca­pa­bil­i­ties are there. We’re just wait­ing for some­one with high-level sen­si­bil­i­ties to come along and build the tools of our dreams.

But un­til we build that, why should we ex­pect any­one to learn low-level pro­gram­ming? How can we ex­pect them to?

So now we come back to Handmade, and what made Handmade Hero so spe­cial. Most pro­gram­mers look at game en­gines and think that only a su­per-ge­nius could write one—and the idea of mak­ing a game with­out an en­gine is lu­nacy. But Handmade Hero just did­n’t care. Casey just sat down, showed you how to com­pile C, showed you how to put pix­els on the screen, and be­fore too long, you had a game. Not the most so­phis­ti­cated game in the world, but a game nonethe­less.

Handmade Hero shat­tered the bar­rier be­tween low-level and high-level. Casey made a game, and he made an en­gine. The mys­tique was stripped away and re­placed by an ac­tual un­der­stand­ing of how games are made. Many peo­ple have the same re­ac­tion when they fi­nally go through Handmade Hero: Hey, this is not as hard as I thought!” It turns out you ab­solutely can make your own en­gine, de­spite the naysay­ers on­line.

I per­son­ally have found this to be true of so many low-level” dis­ci­plines. Low-level” pro­gram­ming is not im­pos­si­ble; in fact, in many cases, it’s sim­pler than the high-level web dev work I used to do! Today’s high-level” frame­works and tools are so com­pli­cated and so poorly de­signed that they are harder to un­der­stand and work with than their low-level coun­ter­parts. But all the mod­ern non­sense like Svelte, Symfony, Kubernetes—those tools have docs! They have dev tools! Because, for some rea­son, peo­ple are not afraid of them!

Low-level pro­gram­ming is ar­ti­fi­cially ter­ri­ble. I re­ally be­lieve that. And I know that it does­n’t have to be this way.

So my fi­nal ques­tion about low-level pro­gram­ming is: why do we even call it low-level”?

The in­tent of any high-level” tool is to make it eas­ier to ex­press our in­tent as pro­gram­mers. High-level” tools ab­stract away dif­fi­cult de­tails so we can fo­cus on what we re­ally care about. And in many cases this has worked: we’ve seen it in the evo­lu­tion of pro­gram­ming lan­guages, in the pro­lif­er­a­tion of game en­gines, and yes, even in the de­vel­op­ment of the web.

But no­tice: this is not about where these tools are in the stack. It’s not about how many lay­ers they’ve built on top of. High-level” is about the ex­pres­sion of the pro­gram­mer’s in­tent. The po­si­tion in the stack is ul­ti­mately ir­rel­e­vant if pro­gram­mers can use it to achieve their goals.

What then does this mean for low-level”? The con­clu­sion is in­evitable: the rea­son we call things low-level” is be­cause they are ter­ri­ble to use. They are low-level” be­cause we do not use them di­rectly! Because we sweep them un­der the rug and build ab­strac­tions on top, they be­come this low level that we don’t want to touch any­more!

Why are things low-level” to­day? Because no one has made them high-level yet.

When I imag­ine a bet­ter fu­ture for the soft­ware in­dus­try, I don’t imag­ine one where every­one is mak­ing their own text ed­i­tors, their own de­bug­gers, or their own UI frame­works. Instead, I imag­ine a fu­ture where we have new high-level” tools, built from lower in the stack. I imag­ine new tools that give the same high-level ben­e­fits we ex­pect to­day, and in fact do more than the tools we have to­day, be­cause they are freed from the con­strain­ing de­ci­sions of the past. We can build new plat­forms, new tools, and new li­braries that learn from the past, but build on solid foun­da­tions in­stead of pil­ing more on top.

For the de­vel­op­ers who truly care about mak­ing high-qual­ity soft­ware, tools built lower in the stack can be their su­per­power. These pro­gram­mers can be equipped to fine-tune their soft­ware in ways the web could never al­low. And for the lazy Reddit dev who would rather push some slop out the door for a pay­check? Hey, at least their slop can run on a sim­pler, smaller, more ef­fi­cient plat­form. It’s still a net pos­i­tive in the end.

The Handmade com­mu­nity is po­si­tioned right in the mid­dle of that Venn di­a­gram to­day. We have peo­ple with low-level ex­per­tise. We have peo­ple with a drive to make soft­ware bet­ter. Our job, then, is not to just write low-level code and feel smug for know­ing how things work. Our job is to build a new high level for the rest of the soft­ware in­dus­try.

Low-level pro­gram­ming is not the goal unto it­self. High-level pro­gram­ming—a new kind of high-level pro­gram­ming—is the goal, and low-level is how we get there.

This post is adapted from a talk I de­liv­ered to the Handmade com­mu­nity in 2023. The orig­i­nal talk can be viewed here.

...

Read the original on bvisness.me »

10 188 shares, 5 trendiness

Jonathan Corbet (@corbet@social.kernel.org)

So is cur­rently un­der the heav­i­est scraper at­tack seen yet. It is a DDOS at­tack in­volv­ing tens of thou­sands of ad­dresses, and that is af­fect­ing the re­spon­sive­ness of the site, un­for­tu­nately.

There are many things I would like to do with my time. Defending LWN from AI shit­heads is rather far from the top of that list. I *really* don’t want to put ob­sta­cles be­tween LWN and its read­ers, but it may come to that.

(Another grumpy day, sorry)

@ @ this, com­bined with search en­gines pri­ori­tis­ing the stolen con­tent!

This is why I think the web is gen­uinely doomed. It’s not enough to steal the con­tent, for search en­gines to kill click thtoughs and ad rev­enues, they are lit­er­ally killing the abil­ity of orig­i­nal au­thors to serve the traf­fic to the few real users that might want to see it.

Devastating.

As a avid long­time sub­scriber and reader, I can only give thanks and hope you will sur­vive also this blast of will­fully wrong be­hav­iour. Thank you for your open­ness.

@ @ Any inkling which AI (Arsehole Incorporated) it is? The crash can’t come soon enough.

There is no way to know who is af­ter the data. The ac­tual at­tack is likely per­pe­trated by Bright Data or one of its equally vile com­peti­tors.

Just speak­ing with my user hat on here, but given the cir­cum­stances I don’t mind the ever-so-slight in­con­ve­nience of an #anubus chal­lenge.

@ @ If you need help, email me. I can work with you in case there’s low hang­ing fruit that you missed.

This helped me a lot with my lit­tle pro­jects:

https://​code­berg.org/​skewray/​htac­cess

@ @ Obviously that sucks, but I am su­per happy with the RSS in­te­gra­tion that I get with my lwn sub­scrip­tion. People who are af­fected by the out­age should check that out. Not re­ally a so­lu­tion, but maybe part of one.

@ @ I’m not sure how peo­ple in the ker­nel com­mu­nity rec­on­cile us­ing LLMs with the ef­fect these LLMs have on small busi­nesses and in­di­vid­u­als host­ing their web­sites for fun and it’s not as if the ker­nel com­mu­nity it­self is­n’t af­fected by these in­ces­sant DDoS at­tacks.

@ @ sub­scriber.lwn.net that is only avail­able for sub­scribers. One can ei­ther join the que with AI bots for lwn.net or sub­scribe and en­joy the snappy sub­scriber server. I mean that’s not a great so­lu­tion, but it’s the only one that works.

@ @ at this point we might as well be of­fen­sive. If the client seems even slightly sus, just send them gib­ber­ish data talk­ing about how good Chihuahua muffins are. Ideally LLM-generated (yes, gross) be­cause this does­n’t add new in­for­ma­tion (linear al­ge­bra yay) and makes mod­els col­lapse (aka AI in­breed­ing).

@ feel you. Same with my Podcast Directory

I re­cently saw a traf­fic spike to a small HTML-only web­site that never had WP on it, but was sud­denly get­ting failed wp-ad­min lo­gins and hun­dreds of PHP vuln scans, non stop. All from MSFT IP ad­dresses. Abuse re­ports were sent, but there was no re­sponse, and the abuse kept hap­pen­ing.

So now I’m block­ing every MSFT CIDR block that I can find, server-wide.

@ @ I’ve been ex­pe­ri­enc­ing about 20x more web­site traf­fic than nor­mal, my­self. It’s very likely this scraper bot traf­fic as well. Things are hold­ing, but only be­cause I took pains to use sta­tic site gen­er­a­tion (absolutely min­i­mal Javascript, de­signed to be light­weight).

The prob­lem with that so­lu­tion is that it may well make it harder for us to bring in new sub­scribers, which is some­thing we def­i­nitely want to do. First im­pres­sions mat­ter, so giv­ing new folks a poor ex­pe­ri­ence seems … not great.

It may yet come to that, though.

Maybe it does­n’t need to be sub­scriber only, just reg­is­tered users only? Which can also be a PITA, but if there’s no en­shit­ti­fi­ca­tion for non-reg­is­tered users other than the band­width be­ing shared with bots, maybe it’s tol­er­a­ble? Could even have a ban­ner about this ex­plain­ing the ben­e­fits of reg­is­ter­ing, and how LWN won’t sell your data.

Such things have crossed our minds, cer­tainly. The gotcha there is that we’ve al­ready had trou­bles with bots cre­at­ing ac­counts; I don’t think they would hes­i­tate to do more of that if that would im­prove their ac­cess.

That and, of course, the fact that every­body starts as an un­reg­is­tered user. As long as we can avoid mak­ing the ex­pe­ri­ence worse for them, I think we should.

Yeah, it’s hard to ar­gue against that.And maybe you weren’t seek­ing for helpful” ad­vice any­way, but, uh, you know your au­di­ence. :)

Suggestions are much ap­pre­ci­ated! It’s not as if we’ve fig­ured all this stuff out…

@ @ The harder to on­board new users” part is cer­tainly one rea­son why that so­lu­tion is­n’t great I just don’t re­ally see any­thing else work­ing long term. Everything else is just kind whack-a-mole where the mole keeps get­ting more clever.

@ @ @ @ I have a sim­ple so­lu­tion: Stop be­ing so damn rel­e­vant!!!

I don’t think the scrap­ers care about that, though.

@ @ @ @ Sorry, I was be­ing too op­ti­mistic… I was think­ing they wanted sources with high SNR… But you are prob­a­bly right…

@ @ @ @ one day the pho­to­copiers will get busy af­ter the of­fice hours again, but this time it’s go­ing to be linux weekly news in­stead of the punk fanzines

@ @ @ @ for RationalWiki I’ve had to re­sort to a manda­tory JavaScript trick that sets a cookie. Unfortunately it seems to block Googlebot, but it’s down to (a) hu­man users can use the site (b) no­body can use the site in­clud­ing Googlebot.

@ @ @ @ I have a tiny site. SSH moved to a dif­fer­ent port.

I see hun­dreds of loc­ing at­tempts a day. I re­ceive a sum­mary via log­watch. Nearly every day I’m block­ing whole /24 or even /16.I rely on fail2ban to mit­i­gate suche Webserver DDOS, but maybe thats not enough.

How do you de­tect those spikes?

@ @ @ Yep, I’ve also had a big bump in traf­fic over the last cou­ple of months (despite lev­els al­ready hav­ing been el­e­vated be­cause of AI scraper ac­tiv­ity).Hap­pily though, it looks like a lot of them have been falling into my LLM tarpit.I think those fig­ures are un­der-re­port­ing too - I’ve also seen a sig­nif­i­cant rise in the num­ber of 5xx sta­tus codes, sug­gest­ing my tarpit con­tainer might not be keep­ing up

@ @ @ @ Some days, the an­swer is to hit a BGP look­ing glass and just block every pre­fix from the ori­gin AS of that ser­vice provider.

@ Instead of mak­ing it worse for un­reg­is­tered users, how about shard­ing the site with re­cent fre­quently ac­cessed con­tent sep­a­rate from old long-tail? Easier to keep a small site in cache.

Making things worse for real users is some­thing we have gone far out of our way to avoid. I’m not sure that shard­ing in that way would help much, though; cache is­n’t re­ally the prob­lem.

@ Can you say what the prob­lem is? CPU, con­tention in un­shard­e­able data­base?

Please do not use this ser­vice in vi­o­la­tion of the Linux

Kernel Code of Conduct. Doing so will re­sult in your ac­count sus­pen­sion with the re­fer­ral of the mat­ter to the CoC com­mit­tee.

Repeating”/“boosting” some­one else’s sta­tus on this plat­form will be treated as en­dorse­ment and will fall un­der rule #1.

You are en­cour­aged to use this plat­form to pro­mote your work on the Linux Kernel, but there is no re­stric­tion on per­mit­ted top­ics (with the ex­cep­tion of any­thing cov­ered by #1 above).

There is no re­quire­ment to post in English, but it should be con­sid­ered the pri­mary lan­guage of com­mu­ni­ca­tion on this plat­form.

The ad­mins of this ser­vice have ac­cess to all posted sta­tuses. They aren’t look­ing, but if it’s some­thing they should­n’t know about, then you should not post it on this plat­form.

Please see the Linux Foundation Privacy Policy, which ap­plies to this plat­form as well.

Getting your own ac­count

If you would like an ac­count on this in­stance, please check that the fol­low­ing ap­plies to you:

You are listed in MAINTAINERS or CREDITS

OR: You have a ker­nel.org ac­count or email ad­dress

OR: You have a long and es­tab­lished his­tory of in­volve­ment with the Linux Kernel

If the above is true and you agree with the Terms of Service and Privacy Notice

listed above, please use these in­struc­tions to re­quest an ac­count:

How to re­quest an ac­count on so­cial.ker­nel.org

...

Read the original on social.kernel.org »

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.

If you like 10HN please leave feedback and share

Visit pancik.com for more.