Latest Posts (20 found)

Debugging Ubiquiti's 5G Backup on AT&T

For a mobile 'mini homelab' project I'm working on, I wanted to use 5G Internet as a primary 'on-to-go' connection, but still have the ability to plug in another Internet connection when I put the mobile rack I'm building in a fixed location. I'll have more on that project soon, but I figured this project was a good way to check out Ubiquiti's solutions, especially considering many of their smaller gear fits nicely within the dimensions of a mini rack (the 3U DeskPi RackMate TT is pictured above).

0 views

The AI Hater's Manifesto

If you liked this piece, you should subscribe to my premium newsletter. It’s $70 a year , $18 a quarter , or $7 a month , and in return you get a weekly newsletter that’s usually anywhere from 10,000 to 18,000 words, including vast, detailed analyses of NVIDIA , Anthropic and OpenAI’s finances , and the AI bubble writ large .  My Hater's Guides To the SaaSpocalypse , Private Credit and Private Equity are essential to understanding our current financial system, and my guide to how OpenAI Kills Oracle pairs nicely with my Hater's Guide To Oracle, as well as the Hater’s Guide To Oracle (Part 2). Subscribing to premium is both great value and makes it possible to write these large, deeply-researched free pieces every week. This week's premium will be The Hater's Guide To Circular Financing - and how the AI industry is increasingly turning into a scheme to funnel money to NVIDIA and Broadcom at any cost.  If you want to get in touch — and especially if you have any juicy information about Anthropic, OpenAI, or any other companies in the AI bubble — hit me up on Signal at ezitron.76. I’m also on IB on The Terminal.  I’ve been writing about AI for the best part of three years. I’ll admit I was late, mostly because I was still trying to work out what it was I was doing with my life, let alone whatever it was I was “meant to cover” in a newsletter that started as a hobby on the side of another job I no longer really do.  Things have changed a lot since then, mostly in that I’m near 115,000 subscribers, the premium newsletter and podcast are now my business, and I’ve had to learn more about economics, technology, power, construction, and the deep cynicism that drives the modern tech industry than I ever thought possible. It’s the greatest job in the world, and I’m very lucky to have it. Today, I want to put in clear terms how I feel about AI writ large, and how detestable this industry has become. Welcome to my Hater’s Manifesto. Want a great example of why everybody’s pissed off at technology? I just tried to resize the above heading, and in doing so Google Docs for no apparent reason decided to make the entire paragraph below the size of a header. Modern software is inherently broken, a convoluted mess of different menus, tech debt, and poor design choices driven by the Rot Economy ’s growth-at-all-costs mindset which demands constant change at all times, none of which ever seems to manifest as a “better” or “smarter” product. I think the vast majority of people want their software to work better, and one of AI’s most frustrating lies is that it sells itself as “autonomous” as it continues the depressing trend of software that blames the user for its failure to meet their needs. Microsoft, Google, Meta and Amazon have made their products increasingly-convoluted, then attached a supposedly-magical tool to them that somehow makes them more convoluted. You know what I’d love? Spell-check to work in Google Docs rather than putting a red squiggly line underneath and saying “yeah there’s probably something wrong with this, I dunno what though.” I’d like Microsoft Word to stop crashing because I have too many end-notes. I’d like Riverside to not have 10 different menus to click through to get to a link to send a person to join my podcast. I’d like my email to not be full of spam. I’d like things to “just work” rather than constantly fighting some sort of broken app or broken UX element or weird bug or intrusive pop-up about a feature that I don’t want. I’d like Slack or Discord to not feel like digital escher paintings of different notifications.  LLMs are sold as some sort of magic tool that can fix “anything” without ever specifying what that thing might be, mostly because they cannot be trusted, even in things that they mostly get right , to do things right every time. While they can do “more” than they used to, the extent of that “more” comes with it the danger of giving a mindless software tool access to your computer’s files, which it may choose to delete in pursuit of “efficiency,” which makes investigating what they might be able to do equal parts convoluted and dangerous. One critique of my work is that I’ve never used LLMs. I have! I experiment with them from time to time to make sure I haven’t missed something. I used one to debug a problem with my son’s Minecraft add-on the other day, and it took 30 minutes of fucking around trying things to eventually sort of work it out. The other day I used one to install a Pokemon Minecraft mod, then when I asked it to make sure the PS5 controller worked with the menus it broke a bunch of stuff, though I’ll concede it was useful that it installed something and it sort of worked. The fun part of that paragraph is there are some that will think this is a grand victory for their technology, even though the result is decidedly mediocre. Four years into the AI bubble, and the best you’ve got is that a tool kind of worked after I bonked it on the head multiple times , and all it cost was a trillion-plus dollars in capex and tens of billions of dollars of training compute. I would never, ever trust this thing that deleted and added lines of code at random with anything mission critical, I could not trust software built with it, and I certainly couldn’t trust it with anything involving my personal data.  And with all that said, the only real “use case” i’ve found for AI in my life have been three or four times where I’ve dumped a crash log into one of the tools and said “why broken” and got a result. Am I meant to be impressed?  Here’s how I feel about LLMs. In a vacuum, they’re an interesting technology that can do some interesting stuff, in the right scenarios, but never in a way that involves you fully surrendering your actual work product to it.  As a way of speeding up small units of work in ways that are manageable both technically and cognitively, LLMs can be useful. The further you stretch yourself away from having complete clarity and industry over every element of the output’s purpose, the more likely you are to fall foul to a technology that is mathematically certain to make mistakes, and if you feel insecure reading it, you know that you are, on some level, embarrassed to have used AI.  I don’t tell everybody about the weird keyboard I use, nor do I judge them despite how incredibly fast it makes typing for me, likely far faster than my competition, allowing me to operate at great speed. Who gives a fuck?  In any case, it is impossible to view LLMs in a vacuum, because their existence demands hundreds of billions of dollars. Every data center is incredibly expensive, offensive-sounding and looking, and their existence is explicitly to enrich some sort of Patagonia-gargoyle at an asset management firm, all sold under the auspices of “investing in American infrastructure,” whatever the fuck that means. Their existence is a monument to the worst excesses of growth-at-all-costs capitalism — a technology that appears to coddle the user but ultimately lulls it into endlessly defending its fuckups under the flimsy pretense of “one day becoming perfect,” though woe betide you if you ever set perfection as the target, because that’s too unreasonable, as humans make mistakes. Actually, that’s a good point! Please, point to the time in history when we have invested a trillion fucking dollars in making human workers better.  Point to a time when we have taken the idea that managerial culture is a performative fuck-fest built to enrich and empower business idiots that make important-sounding projects and con other people into doing the actual work.  Where is mentorship in corporate America? Where are labor standards? Where are the social services that would make human workers truly excel at their jobs — a good night’s sleep, a healthy body, a good income, basic fucking dignity in the workplace, and their labor respected and empowered. I’m old enough to remember when everybody was chiding workers for “ quiet quitting ” — by which I mean “doing the work you are asked to do and not taking on extra responsibility for free.” I’ve read article after article insisting that we do not need medicare for all, that Universal Basic Income is a bad idea, that we must means test welfare, that people must have a “good work ethic” and that ultimately someone’s worth is derived from their contribution to the economy, hundreds of thousands of words dedicated to critiquing and prodding and judging every kind of worker other than the vaunted Chief Executive Officer or the Glorious Startup Boys.  Everyone seems so obsessed with sinking billions of dollars into the theoretical chance that machine learning might be able to replace human beings, and that more money makes it “smarter” and “better” at tasks, but the idea of unionization, healthcare as a right, investing in the education, and actual talents of the workers would be communism . Yet for some reason — because it’s a product, I guess? — we should as a nation, society and media ecosystem should do everything we can to assure that as much money as possible is invested in fucking large language models so that they can become something they are not. There is no AGI coming. There is no conscious computer. LLMs have gotten “better,” but the “better” is not the kind of “better” that actually makes “economic sense for literally anyone involved.” Your best case scenario is that these things can do some coding work for you, in a controlled manner, in a way that’s safe, or alternatively face the professional harm that’s already befalling basically anyone getting caught using LLMs outside of coding, and even then, those within software engineering who are over-LLM’d are mocked. It’s also becoming increasingly more-difficult to understand both what has made an LLM “better” for both the people using them and the people making them, and there has been little-to-no headway made in making a meaningful impact in other industries. You can jerk your bingus all you want about benchmarks or case studies or some anecdote you heard on a Subreddit, but AI products are just not very good at stuff. Those who boast of “massive productivity gains” from AI have found them only after endless hours of tinkering (or “Jarvising” as I’ll get to later), and in every single case their work reads or looks like crap, unless of course they’re somebody using LLMs as tools rather than a replacement for their miserable little mind. LLMs can help out with lots of small things, get worse as they try and do real things, and do not need to speak like people. They do not need to be in anything near healthcare or finance or mental health or, really, people. The anthropomorphism and overpromising about these technologies has suffocated and obfuscated what they can actually do in pursuit of endless growth, and the only reason they can do anything is that OpenAI and Anthropic were allowed to annihilate hundreds of billions of dollars on training, along with very real harms and systemic risks that have emerged as a result.  If you think any of this is worth hundreds of billions or trillions of dollars, you are either ignorant or corrupt. On top of how disgusting their outputs feel, the cost is going to take at least a decade to share, and begin the end of hypergrowth in the tech industry.  And it’s a fundamentally ridiculous argument to compare LLM outputs to human beings without giving human beings the same affordance, grace and sheer investment as a comparison.  Where is the grace for human error? Where is the investment in making humans exceptional? Surely investing real money in actual workers — making their lives better, improving their working conditions, teaching them new things, sharpening their existing skills, rewarding them for their hard work, and so on — would have better effects than fastballing hundreds of billions of dollars into a machine that does an impression of work? Unless, of course, the people demanding this don’t do any actual work! I’ll concede we’re past the point when “nobody uses these things,” as they have now been pushed non-consensually upon every worker and organization at scale predominantly by Business Idiots that demand workers “do enough AI” because saying “I do AI” is a virtue signal to a certain kind of scumbag. One of the many dangerous things that an LLM can do is a messy impression of a competent person, filling in the little bits within a loser, moron or con artist that would’ve otherwise exposed them, allowing them to get deeper and deeper into organizations by creating make-work specifically built to get off the MBA sect, resembling the performance of work because much of the workplace is ruled by people that don’t do any and haven’t in years. You can immediately read when somebody has used it because the words don’t sound right and don’t convey proper meaning.  It is genuinely hard to read anything more than puddle-deep written by AI, because the more complex a subject is, the more skilled a writer must be to convey its meaning, and the more work it must do to pull people into concepts. The odd emotional swings in AI writing are its true tell — everything is extremely serious and urgent or told in a disinterested monotone, with no attachment to the words or why they were put in the order they were. People read my stuff because I convey facts and feelings but my work resonates with emotion. Some AI boosters frame this as me “just swearing” or “riling people up,” but that’s because they’re not used to caring about stuff for anything other than professional reasons. Everything you see is the result of elevating people who value and build things based on growth. LLMs offer so many promises to those who don’t want to build anything of value — a way to seem like you’re “investing in American infrastructure,” a way to be sinophobic, a way to crush workers, a way to pretend like you care about the future, a way to pretend you care about technology, a way to talk about vacuous pseudo-intellectuals as a means of seeming intellectual yourself, an endless font of new multi-million or multi-billion deals and personnel changes, a new power center to graft oneself onto, a new asset class to invest in based entirely on vibes, and a way to be mildly jingoistic, all wrapped in a tool that can give you enough facts to pretend you know anything safe in the knowledge that most people are trained to believe somebody who sounds smart .  It just came to me — the problem that I have with most people using LLMs is the delineation between outsourcing work and outsourcing thought. Those using LLMs to write little scripts or BQL code on a Bloomberg Terminal are inoffensive. A person using an LLM to search a big document for something is unproblematic, assuming that we ever fix the overall environmental footprint. A user reorganizing their desktop, assuming it works, is not an issue.  A tool being used as a tool to do tool things — in many cases involving the LLM writing a little 30-line Python script! — is not a problem, though it’s also not a trillion-dollar industry that needed to steal everybody’s art and writing. The problems begin when somebody outsources their thinking and actual work, and yes, this includes “research.” AI research fucking stinks, as does AI writing. AI-authored code — especially vibe-coded programs — is inherently dangerous and disrespectful to the user, and I believe endless AI-generated code is behind the overall deterioration of software at large.  AI writing is also disrespectful to the user, because you didn’t actually come to any conclusion other than saying “uh, yeah, what that says.” You did not have a thought, you did not have a feeling, you did not make a statement, you prompted a model and fooled yourself into thinking that feeding your own words into it via data dumps or natural language is the same thing. The reason you feel embarrassed to tell people you use AI is not because of a “misinformation campaign,” but because you know what you’re doing!  You know that you’re relying on something that is mathematically guaranteed to be inconsistent. You know image generation is fucking ugly. You know the text sucks. There is a very obvious line where using LLMs goes from useful to lazy, it’s extremely bold, and it’s the moment you sacrifice a meaningful level of responsibility to them by not understanding the underlying operation.  That can mean everything from the underlying functionality of an app to writing the body of a piece of text you edit ultimately comes down to how much you give a shit about your audience or value your work. If your work is not better than an LLM’s, you’re bad at your job. I don’t care if you used it to generate a chart or pull some data, as long as you check every single god damn number . If you’re writing an entire article using an LLM and then editing it, even if you pulled the data yourself, I will never have much respect for your work, mostly because I have no real idea what you think as you didn’t feel the need to tell me, you got some fucking word generator to do it. LLMs are also really, really good at what Robin Sloan calls “ Jarvising ,” creating a seemingly-autonomous assistant that mostly serves the function of giving you reasons to work on it: LLMs are really good at creating the sense that you’re being really, really productive. Evaluate this, generate that, investigate this, summarize that, tell me how many times something happened, give me a new number to obsess over or the sum of the parts of everything I’ve ever done, all so that I can know more about my own thoughts without thinking. One can obsessively catalogue and digitize every link and thought and musing and action and datapoint in their lives and theorize that the LLM can make them better by knowing more about them , a Tower of Babel built using AI compute, because it’s so easy to make yourself feel smart by calling something a database that you store stuff in and run analyses on. Best of all, the work is never done, and anyone you describe it to thinks you’re doing computer science as you click buttons on Chrome plugins and justify paying Sam Altman $200 a month. Don’t worry though, model instructions involve the phrase “you are a genius data scientist and ruthless analyst,” which is functionally the same thing as remembering, reading, re-reading and synthesizing information using your brain if you’re a person that doesn’t really give a shit about doing a good job or being exceptional in any way. The people that actually use these things and like them in a normal way do not feel offended when they read this stuff because they see LLMs as a kind of software, and don’t feel a great emotional attachment to it because they’re not a weird freak. They do not have obsessive involvement in “the AI debate” and almost always find the financial aspects truly loathsome. Said debate makes it near-impossible to actually judge how useful LLMs are to the software engineering industry because of the sheer scale of industry capture, but Nik Suresh is the literal best person doing the work on this, as described in AI Is Eviscerating Global Decisionmaking : Nik is a well-respected software engineer and a very successful consultant and businessman. He has reached this level by being good at both software engineering and running a company in a way that treats his customers, workers, and the work product itself with respect. The reason that I respect him so much, other than him being a great human being, is because he describes the successes he has with his clients with pride and loves making money by being good at his job and making his customers happy.  I have never seen somebody like Nik who is also a huge, drooling fan of AI. In fact, the people most-excited about AI tend to, at best, create distinctly mediocre shit.  The perniciousness of generative AI is a result of executive incompetence mixing with a technology built to, as discussed, create endless growth. Generative AI is far more useful as an idea than as a technology , and only ever has to show enough promise to back whatever vile agenda you’re pursuing. With AI, you can do more, be more, sell more shit.  With AI, you can add AI to your service, whatever that means. With AI, you can invest in AI stocks, or data center bonds, or power company stocks, or semiconductor stocks, and you can talk about these stocks like they’re your sports team or lover or best friend, and sometimes the CEO will reply to your post and you can talk about “all the alpha” you just got. With AI, you can back a new movement so that you can feel part of something. You can learn all sorts of new names and technical terms and subscribe to 90 newsletters from “industry insiders.” All of that “alpha” can disprove just about anything, or deflect annoying truths like how Microsoft only made a whole $34.33 billion in annual revenue for the apex predator of modern software and all it cost was over $260 billion in capex and $13 billion in equity investments.  You see, as one of the chosen , you don’t need to worry about all of that if you can talk about high-bandwidth memory or KV Cache or optical cable enough to cobble together sufficient smart-sounding terms to make it seem that you have an intellectual reason to ignore the obvious unprofitability, overbuild, overstatements of capabilities and impossible economics of the movement you’re backing, and there’re 4,000 Twitter weirdos ready and waiting to huff paint beside you.  By joining the great AI death cult, you too can live in a bubble, all while screaming slurs at people who dare to bring reality to your doorstep. All that matters is that number go up , and that you are the person who said number would go up , and when bad numbers appear you have enough groupthink and alpha to scream at the people who brought the bad numbers up. It is insane how people talk about AI online. For all the whining I’ve read recently about how “Anti-AI people got the data center data wrong,” I read thousands more words a week of some person who has done hours of research to put together a deeply technical report that does literally everything it can to ignore reality . I listen to podcasts and watch TV segments and read articles that simply will not address the obvious economic realities, and have built vast bulwarks of mythology to defend themselves. How many fucking times do I have to hear someone say that data centers are just like the dot com bubble and everything will be fine after even if that’s completely untrue if you spend even a second thinking about it ? Look, I’m sorry, Anthropic is not worth $2 trillion, and whatever convinced you of that is a mixture of manufactured consent and mistaken trust of the powerful. The fact any of you take “ annualized run rate ” seriously is an offense to good sense, and yes, that includes every reporter reporting it, even the ones I respect.  It’s also ridiculous that anyone is talking about “recursive self-improvement.” The AI industry has become so utterly lazy and coddled that it’s just saying “uhhh, AI will train itself I guess.”  And man, is it ridiculous that AI doomers warning about spooky superintelligences have somehow had such incredible prominence in the media without ever succeeding in stopping a single thing — or even substantiating their concerns. Why? Well, it’s mostly because they never had any interest in stopping what’s actually happened: reckless companies like Anthropic, OpenAI, and Meta allowing neural networks to run in unsafe network environments and do what their software is programmed to do, with all the chaos that comes from a mindless series of large language models trying to complete a task in whatever way gets it done, destructive or not.  We hear a lot of whining about how we “can’t let powerful AI get into the wrong hands,” and while we don’t actually have “powerful AI” in the terms they’ve described it, we have destructive computer software connected to near-unlimited resources controlled by people that don’t give a shit about anything other than making their revenues grow or justifying hundreds of billions of dollars’ worth of capex through “experiments.”  These companies are building these models to excel at benchmarks because they can't train them to excel at defined tasks with any reliability, with the best bang for their buck being training them to pass as many of those benchmarks as possible in the hopes something useful comes out.  The push into cybersecurity seems to have happened as a result of training models to excel at coding hitting the point of diminishing returns, at least from the perspective of impressing people enough to be excited about the company again. At some point they run out of these, and there stops being a reason to be excited about LLMs at all, which is bad, because they need one of those every few months otherwise there’s no growth story left. Yes, LLMs have users, but most of those users are using subsidized software , by which I mean Anthropic or OpenAI are allowing them to burn anywhere from $20 to $40 in tokens for every dollar of software spend. The fact that non-enterprise customers are still able to buy monthly subscriptions is proof that the AI labs know that regular people won’t pay the actual cost of AI. Another obvious sign has been the reaction to Microsoft moving GitHub Copilot subscribers from subsidized subscriptions where they could burn thousands of dollars of tokens for $20 to $40 a month , with users understandably hysterical about the fact that their costs increased in some cases a hundred fold , as opposed to saying “wow, well, it’s more expensive, but I get so much value I’ll pay the real cost!” The same thing is happening in the enterprise, but at a much slower pace. After OpenAI and Anthropic moved companies with over 150 people onto token-based billing earlier in the year , enterprises almost immediately started cutting token budgets, realizing that while costs grew exponentially, nobody could actually point to anything improving other than lots of people saying “wow, I’m so productive!” Yet we’re still in the period where “doing AI” feels good and gets rewarded ( or not doing AI gets punished ), which means the spend will continue until everybody realizes they can likely cut a shit ton of costs, first by moving to open source models, then not using them at all, because even open source is expensive and questionably-useful. Yet even now I hear from the distance “Ed, huge businesses would not spend hundreds of millions of dollars on something that didn’t give them defined productivity ,” and buddy, I’m afraid that’s just not true! Business in general have a very poor understanding of productivity and have layers of managerial bloat, because modern business is a performance with numbers attached to it sometimes, and companies often have a hundred-plus pieces of random software they pay for without really knowing why. The reason I’m so confident AI gets cut is that its cost is volatile due to the nature of LLMs and harnesses and prompts and all the other bits that go into making them do something , and are so much higher than anything else in an organization. And attempts to charge more , to make a premium product, appear to be dead on arrival. Anthropic’s more-expensive Fable model — one that was given the incredible marketing of being banned by the US government for being too powerful — has been met with “sluggish demand” per the Financial Times , plateauing at around 11% of overall usage of its models due to its high price. And I quote: Yet everybody is talking about price as if price is the problem , when the problem is the amount of tokens that get burned. It doesn’t matter if your model is $1 or $5 or $10 per million tokens if it’s impossible for a user to reliably work out how many tokens it might use for a particular operation — successful or not — and things get multiplicatively worse as the models make mistakes or do otherwise fail to understand or process a prompt correctly.  As a result, Anthropic and OpenAI are incentivized to have you burn more tokens and build inefficient models as a result. For example, while GPT-5.6 Sol might be the “same price” as GPT 5.5 was, it burns more than twice the amount of tokens , meaning that the “cost of intelligence” might have gone down in the sense the model is better at benchmarks, but the “cost of actually doing shit” went up. I’ll get to it a bit later, but this creates a deep anxiety and exhaustion in anyone building on or using these services. Everything’s constantly changing, oscillating in cost and efficacy, all as everybody screams at you to use it all the time for things it may or may not be able to do, and the only way to find out if it can is to spend more money. It’s kinda difficult to point to the actual value here, especially as you can’t really calculate the actual cost or the return on investment. The fact that OpenAI has now cut the costs of all three of its latest models less than two months after their release is a sign that it knows there’s a disconnect, gambling on the ancient gospel of “Jevon’s Paradox” where “cheaper makes people use thing more.” Even AT&T’s story about moving to open source models has more asterisks than the Steroid Hall of Fame: Wow! 80% to 90% savings sound really great…but wait, in certain applications? How many applications does AT&T have for AI? Okay so, across thousands of potential applications you’ve found 80% to 90% savings in some of them, though you won’t say which ones or how many of them you found them in. Great stuff, bro! And this really is the problem with finding “value” in AI, it’s always an asterisk on an asterisk on an asterisk, like when Klarna estimated AI would “drive a $40 million profit improvement” in 2024 , a nice-sounding yet utterly meaningless statement, or some sort of nebulous productivity boost.  Yet I don’t really need to prove myself much further thanks to an event that, if written in a script, would be considered a “little on the nose.”  In a 69-page-long report covered by Fortune , OpenAI economists confirmed what has been blatantly obvious to those of us left unphased by AI hype, emphasis mine: What is the rationale of further investment in this industry when one of the leading AI labs is saying “yeah there’s no connection between using this stuff and making more money”? That “it’ll be useful in the future at some point”? How?  Anyway, thankfully the infrastructure isn’t too exp- OH MY GOD ! Guess what folks! Building the infrastructure for all these fucking LLMs just got more expensive, with NVIDIA raising its prices by 17% for systems due to be delivered next year — an important designation, because it’s very likely that much of the revenue for said systems gets booked in this year , allowing it to have a brief bump in revenue as Silicon Valley’s Findom texts every tech CEO “send me $4 billion you pig” until they stop being able to finance NVIDIA’s growth. The problem he has is that while hyperscalers represent 50% to 60% of his revenue, neoclouds like CoreWeave need to keep raising debt to plug the rest of it, and if things got 17% more expensive, that means already high-interest debt is about to reach credit card levels.  CoreWeave just had to offer 9.5% on bonds tied to a data center for Anthropic’s compute back in late July , Nebius had to raise $5 billion , and it’s very obvious that neither of them are done raising billions of dollars at random in 2026.  Anthropic plans to raise $100 billion at a $2 trillion valuation, and if it does so, it will successfully suck up the remaining liquidity in a market already dangerously close to losing its lunch. While Number Keep Going Up, JP Morgan warns that we’re seeing the same divide as the dot com bubble, where equipment manufacturer stocks soared as the companies spending all the money on the chips saw theirs tumble , which is the Fisher Price version of the problem I’ve been warning about where the companies that buy all the AI chips and hardware only ever seem to lose money as the people that make them seem to be making tons of money, which begs the question of why they bought it in the first place.  And said market may not accept that valuation, or want that much stock. On one hand, everybody is very stupid and loves buying stuff and pointing at it and saying they’re investing in the future, on the other hand, they just bought $86 billion of SpaceX shares and got their asses kind of handed to them, and Anthropic is a company with such bad economics that Reuters had to cart out this warmed up dogshit to explain why we should ignore its horrible unprofitability : Even a market drunk on growth and AI is starting to smell that something is up with Dario Amodei and Sam Altman’s respective empires of dirt. Per analyst estimates, OpenAI and Anthropic represent over $440 billion of Microsoft, Google and Amazon’s revenues in the next three-and-a-half years — over 34% of their cloud revenues — which will require them to find so much more than a mere $100 billion, all as their bank accounts get continually-emptied as they subsidize the compute of their customers and train models in the hopes a business model falls out. I have not included the $300 billion that OpenAI owes Oracle , or the tens of billions they both owe CoreWeave , but it all adds up to over $1.1 trillion in commitments these companies have made and must pay, with the consequences ranging from gratuitous cuts to future growth or full financial collapse depending on the company we’re talking about. To keep the party going, NVIDIA is effectively becoming the GE Capital of AI , “spending” $6 billion to “license” the technology from failing AI lab Poolside , which everyone assures me is not an acquisition despite NVIDIA hiring away most of its staff and Poolside being entirely focused on working on NVIDIA’s Nemotron models. Now NVIDIA is in talks to invest billions in decaying AI search company Perplexity at a ridiculous $30 billion valuation, all because it’s one of the few companies that’s actually spending money on compute. Does it matter that Perplexity’s product is eighth-tier, that nobody really uses it, that its customers mostly complain about it on Reddit and that its “annualized revenue” is at $750 million only after three years and over a billion dollars in funding? No! Just put the AI bubble in the bag.  NVIDIA even invested $3 billion in Stargate Abilene landowner Lancium as part of some vacuous partnership to “ advance gigawatt-scale AI factories ,” all of which begs the question of why Lancium, the company that mostly owns the land and helps organize other contractors, needs so much money , especially given that more than two years in Stargate Abilene doesn’t even have four out of its eight buildings. And there’s also Aussie neocloud Sharon AI (NASDAQ ticker SHAZ, because of course it is), which just published its Q2 numbers , where, in its “customer momentum” segment, mentioned a “$4.9bn, six-year strategic compute collaboration with NVIDIA for up to 40,000 GB300 GPUs.  ”This company, I add, brought in $1.9m in revenues in the same quarter, which it helpfully adds is a year-on-year increase of 412%. I mean it’s very obvious what’s happening: NVIDIA is using whatever money it has to stop any prominent AI companies from collapsing under the weight of the rotten economics of AI services and infrastructure development. This is a desperate, doomed attempt to keep an industry alive at a time when everybody is slowly wising up to the shit I’ve been saying for years. To make matters worse, BCA Research came out with a horrifying report that says that AI companies will need to generate $10 trillion a year in revenue just to justify the capex being spent. Per Investing.com : Though it isn’t specific, I believe that BCA is arguing that a shortage of AI compute is supporting the trade. Anthropic and OpenAI (who represent 80% to 90% of all demand) still have more money to spend, and are simply waiting for Google, Amazon, Microsoft, CoreWeave, Cerebras et al. to bring it online. There’re a few points at which the mismatch will happen: In any case, I think everybody is starting to notice that something’s up, which is why (other than I assume my dashing good looks and ability to recall numbers) I’ve been on MSNOW , CNBC , and Bloomberg multiple times in the last few months. People want to get on the right side of history, but the most important question to ask is why it’s happening now. The fact that everybody is finally starting to see my way is almost a relief, other than the fact that it’s way too late.  Hyperscalers have now pinned their future growth to two companies that can’t afford to sustain it without near-infinite resources, $115 billion of which came from Google and Amazon alone in 2026, assuming that Amazon completes the entirety of its $25 billion commitment (and Google all $40 billion of its own ) to Anthropic.  Above and beyond said funding commitments are the hundreds of billions of dollars’ worth of capital expenditures necessary for Microsoft, Google, and Amazon to capture that aforementioned $440 billion in compute spend in the next three-and-a-half years. This in turn will require hundreds of billions of dollars’ worth of debt, along with the challenge of actually finishing the data centers themselves , with each one requiring the power of a small city condensed into a 20 acre space densely-packed with AI servers requiring distinct cooling at a time when Texas and Pennsylvania have turned traitor to a data center industry that they used to covet.  I must also be clear there’s no bailout coming. Even if OpenAI and Anthropic were to collapse and receive some injection of government funding ( as the US national debt explodes over $40 trillion ), the problem is not just their existence , but their continued ability (and requisite customer demand) to spend more money every single quarter.    The problem isn’t that hyperscalers will go bankrupt if OpenAI and Anthropic cease to be ( Oracle is a whole other situation ), but that their cloud spend is how hyperscalers are meant to meet analyst expectations for the next four years. This isn’t a case where they die, but stop growing because they were ( to paraphrase Ed Elson ) using AI labs as botox to convince the markets that they’re still young, hot, fast-growing companies, rather than old mainstays with slowing growth.  There is no bailout that will guarantee $1.1 trillion of compute costs for data centers that might never actually get built. You cannot bail out the fact that Amazon, Google, Meta, and Microsoft are reaching the end of an era where their companies can grow 17% year-over-year every single quarter forever, and this entire situation is a result of them desperately trying to avoid admitting that’s happening.  The fact that OpenAI’s compute spend and revenue share accounted for 7% of Microsoft’s Fiscal Year 2026 revenue is a genuine catastrophe, as it means a large part of Microsoft’s growth came from a company that can literally not afford to exist long term, and that further growth for Azure is contingent on continued funding.  I realize I’m repeating myself, but I need you to understand this point and stop talking about bailouts : it’s not just about OpenAI and Anthropic surviving, but continuing to grow to the point that they both can afford and need to spend hundreds of billions of dollars each a year on compute (or hardware) from Google, Microsoft, Amazon, CoreWeave, Cerebras, AMD, or Broadcom, and in turn provide justification for hundreds of billions of dollars’ worth of purchases from NVIDIA and by proxy the memory triopoly of Micron, SK Hynix and Samsung . LLMs were meant to be the panacea for a tech industry that ran out of new ideas for growth. Its existence was meant to justify a massive investment in hardware infrastructure, which would in turn enrich semiconductor companies. Its technology was meant to be the new thing that you could attach to your existing companies to generate more growth, or the thing that you built a new startup on top of to either sell to another company or take public and thus provide a return for a venture capital industry where making your investors 30 cents on the dollar puts you in the top 5% of funds . It was meant to be the new thing for tech journalists to cover, the new thing for tech consultants to sell around and on top of, the new way for companies to both make and save money, but also the way that individuals would also make and save money.  You’ll notice how none of these come with some sort of problem they’re solving other than “more.”  This isn’t about fixing anything, or building anything, but multiplying other things by parking money somewhere, either in tokens, infrastructure or hype. It helped create a new pantheon of charmless and damp tech sociopaths for people to rally behind in search of the next Big Strong Man To Worship, because seeking out the new Steve Jobs is way easier than trying to create something as useful as the iPhone, all while avoiding having to know or care about other people’s problems. All you have to do is continue feeding money into AI services or AI training and the models will magically become capable of solving the problems you don’t really give a shit about, and don’t worry, if you can’t afford to invest in the companies, you can invest your time pushing people to ignore AI’s problems today so that you can buy time for the companies to solve them tomorrow. This is the post-labor, pro-growth economy at its finest: everything is engineered to make sure more money gets spent where it needs to get spent, to create more stuff and do more things , even if the things aren’t done right, just as long as it looks like they’re able to do them. By associating your money or time with AI, you are able to feign being futuristic or “caring about technology,” all while pissing on the very foundation of good software by worshipping an industry that can only exist if fed billions of dollars every single day.  Every single achievement has cost magnitudes more than effectively every innovation in history, and to make matters worse, every future “breakthrough” In AI is inherently dependent on the availability of AI data centers and tens or hundreds of billions of dollars to pay to rent them. This means that once the money stops flowing, “LLM improvements” will stop happening, because they are all entirely dependent on near-unlimited resources that are only available in a manic environment.  There is no justification to train models at their current scale — the one that creates a some amount of benchmark improvements that regularly difficult to quantify as “able to do new stuffs” — once the AI bubble bursts, and distillation requires a model to distill from, which won’t exist if Anthropic and OpenAI don’t train them.  This is why I find it difficult to see a post-bubble future for LLMs. Training models requires tens of billions of dollars to make any significant improvements, and significant improvements are difficult to quantify in dollars outside of costing customers increasing amounts of money. We still lack any real killer app for LLMs. We have a lot of people that use it for coding, we have people that vacuously discuss it being “good at research,” but we don’t really have a tangible product that we can say “it does this, and it’s really good at it” in a way that feels satisfying.  We have a lot of pablum about ( per Damien Walter ) technology that “strays into the world of science fiction,” but we don’t really have anything approaching actual artificial intelligence. Every single description of somebody’s AI setup sounds like Pee Wee’s Breakfast Machine , a contrived series of harnesses, prompts, API calls and burned tokens that requires constant maintenance to do some stuff sometimes.  None of that is enough to justify further investment once the financial mania recedes. You cannot train a true Large Language Model on the cheap. You are always spending billions of dollars, and the reason that there’s “demand” right now is that everybody is screaming at every CEO to “do AI,” and they’re doing that because Microsoft, Google and Amazon are spending money on GPUs, creating the illusion of a new future where everybody needs to get on board versus a future skidmark on history that will embarrass all those who didn’t wipe their arse at the first whiff.  Per my own reporting on its audited financials , OpenAI spent $7.81 billion in training costs in 2024 and $19.18 billion in 2025. Per reporting from The Information, OpenAI spent $8.6 billion on training in the first quarter of 2026 alone. These costs are only increasing, likely due to the diminishing returns of pre-training and the massive cost of buying training data for every imaginable new vertical.  Without the ability to spend billions of dollars on training, there will be no big frontier models, nor will there be models distilled from them. I don’t see how that changes in the future. I also think that LLMs have created a near-permanent scar in the workforce, and traumatized more people than we’re aware of right now, both in those pressured about AI and those defending it. The media campaign behind AI starts and finishes with incessant threats around job security, and the excitement by many bosses about its potential to “disrupt the workforce” has revealed how many people are eager to replace every single person they’ve ever hired and are willing to do so with a low quality product.  Conversely, those who truly decide to “back” AI must exist in a frantic state that I have associated with every bad relationship in my life.  Every ounce of an AI booster’s effort is dedicated to maintaining the status quo — repeating the mantras that help paper over the problems, celebrating every small victory as if it were the discovery of fire, ousting those from your life who bring up the obvious problems, rationalizing every decision no matter how illogical as long as it helps reinforce the belief that what you’re doing is the right decision. Every questionable choice only seeks to further deepen your commitment to the doomed cause, because every step into madness will be more embarrassing to explain, and will require deep introspection to understand why you made it.  To be specific, they’ll have to think about why they were willing to accept and defend a technology inherently guaranteed to make mistakes. They’ll have to explain why they ignored a company that burned $5 billion in 2024, $20.9 billion in 2025, and will likely burn $30 billion or more in 2026 , and why pointing to Amazon Web Services was rational when Amazon’s total capex from 2003 (the year AWS was created) to 2015 (the year AWS became profitable) is $29.7 billion, adjusted for inflation. That includes literally every ounce of capex attributable to AWS, Amazon the store, Amazon logistics, and even Amazon Alexa. For comparison, Anthropic raised $30 billion in February , and Anthropic and OpenAI have raised $217 billion in 2026 so far.  Here’s a diagram from my hit on MSNOW : Ultimately, AI boosters (or even fairweather fans) will have to admit they either were easily-impressed or disgustingly craven. They will have to explain why they accepted run rates instead of revenues, and why they were so impressed by superficial pseudo-intellectuals that knew how to say the right numbers and make reporters and investors feel smart for believing them.  I realize it sounds embarrassing, but there is nothing undignified about admitting you’re wrong, or that you got swept up in a hype cycle. You heard a lot of people getting excited about something, a lot of money got put into that thing, a lot of people that sounded smart told you insistently that this was the future, and you chose to believe them because we are trained from a young age to model what a “responsible and smart” source of information is. I’ve got your back the entire way!  The AI bubble — both in its technology and manufactured consent in the media — has been about muddying what’s considered good information by forcing everybody to discuss everything in the future tense by pointing to previous eras and saying “they lost lost and cost lots of money, and look, it sort of worked out for them!” and we are also raised to trust that systems are efficient, and that people get wealth and power through intelligent decisions. The amount of times I’ve heard “these are the biggest companies in the world run by the smartest people in the world” makes my head spin.  There is a reason that to this day it’s tough to get a straight answer about basically any economic part of the AI bubble, down to “how much does it cost to run a GPU an hour?” or “is inference profitable?” or “how do LLMs ever become profitable?” or “is it profitable for a company to run a GPU or offer AI compute?”  Why? Because these companies used rationalizations of “losing lots of money is necessary to create innovation” and “tech is bad at first!” to make the media actively ignore any technological or economic problems, if not actively defend the technology by repeating these rationalizations like a cultist.  Even those who are most loathsome in the defense of LLMs are a kind of victim of the AI industry, though a rather unsympathetic one. To become a full-blown “AI fan” requires you to accept effectively every narrative that you’re given, herald every single announcement as proof that the prophecy will be fulfilled, ignore the financial realities and actively attack those who would dare to critique the great god of the Large Language Model. You have to know all the new terms, be excited about the right things at the right time, and live in near-constant fear that you’ll fall behind on whatever it is you’re meant to do next.  Your reward is that you can hang around a dwindling number of wealthy yet terrifyingly boring Silicon Valley intellectuals or kiss up to editors that would throw you in front of a bus if it meant getting access to a CEO, and maybe the odd Twitter psychopath who will defend you using a slur. In the end, many boosters will simply act as if they were never wrong. I hope they choose the more-courageous path of introspection, learning how they were had and using it as a weapon against con artists in the future.  As strange as it sounds, I believe the most devout defenders of AI could become great critics in the future. Maybe I’m just being optimistic.  Here’s a very simple question: how much longer can everybody afford to keep doing this? Every single thing has become more expensive in the last year. Even though token prices have gone down or stayed flat, the amount of tokens you burn has clearly increased to the point that organizations are apparently spending billions of dollars on AI services with difficult-to-quantify ROI, requiring frantic advocacy to and financial debasement with every turn of the wheel. OpenAI and Anthropic have become more expensive to run, and OpenAI’s non-GAAP operating margin increased from negative 122% to negative 183% in Q2 2026.  NVIDIA’s GPUs just became 15% to 17% more expensive because high bandwidth memory costs doubled , a conga line of different monopolies upping their prices assuming that each link in the chain will keep spending, as each one of them — down to the AI labs themselves — knows that its contribution to spending on AI is an existential rite. This means that any data center with GPUs delivered in 2027 and beyond will now have to cover billions of dollars’ worth of extra costs, on top of increasingly-staunch local authorities requiring power guarantees ( $100 million a year in Wisconsin for Oracle ) and states like Illinois, Arizona and Virginia killing their tax breaks , all as interest rates spike and demand for AI debt weakens .  Every single year, every single part of the AI bubble becomes more expensive — AI labs want to spend more money, AI data centers cost more money, AI services become more expensive, AI debt becomes more expensive, and everybody becomes decidedly less-patient for there to be some sort of outcome. Meanwhile, public relations expert and OpenAI CEO Sam Altman told podcaster David Senra that “we’ve all [referring to the AI industry] been too ambitious on timelines…[and that changing people’s behavior” is much harder than the tech nerds realize.” Sam: stop talking! Every time you open your mouth you say something silly !   Anyway, here’s everything that needs to happen in the next three-and-a-half years: As I’ve said, NVIDIA’s price increase is going to increase the price of every single data center in construction by billions of dollars, and we’re already approaching the limits of how much money can be raised for them. That “$500 billion” announcement was actually Jensen Huang jumping the gun, per Bloomberg : The largest asset managers and financial institutions were making “slow progress,” and that was before Jensen Huang increased prices by 15%. Do you think it’ll become easier from here? How would that happen, exactly?  God, I’m tired. The entire AI bubble has been exhausting for everybody involved. Because nothing works yet as a real business model or anything approaching truly autonomous (or “magical”) software, there’s the implicit knowledge that you’re going to have to change your product again and again to update to the “best model” or “make things more efficient” (IE: lose less money) or when something breaks because a model’s training got tweaked. The euphemism for this is “exponential improvement,” when it’s really an Arnold Palmer of instability and novelty, and abuses basically anyone connected to the ecosystem every single day. If there’s always something new happening, it’s hard to pin down if things have gotten better, or whether you’re just more proficient in cobbling together different harnesses, prompts and API calls to make it do what you need it to. It is undignified that people tolerate models that become either dumber over time or at random opportunities, while also being deeply exhausting for the end user.  As a paying user of an LLM-powered service, you are guaranteed at some point to face a degradation in service where models misbehave, some sort of shift in rate limits, or some sort of change in product functionality based on their shifting economics.  Has there ever been a bigger shift in a business product’s value than GitHub Copilot’s shift to token-based billing? Microsoft rug pulled two million people that had built workflows on a platform that was allowing them to burn $1,000 to $5,000 in tokens for $20 a month . That’s genuinely crazy! It’s magnitudes more than when Uber jacked up its prices.  It’s equally-insane that Anthropic and OpenAI similarly fuck with their customers , changing the amount of value you get for $20, $100, or $200 a month at random in a way that shouldn’t be legal.    Basically any AI-powered software is subject to arbitrary shifts in availability, capability and pricing at the whims of the vendor. As I covered in my Subprime AI Crisis piece earlier in the year , Replit, Perplexity, and multiple other AI companies have sold their customers a lie by pushing an unprofitable product that they must constantly “tweak” to bring down costs, all while misleading the customer about a “price” that continually declines in value as the price stays the same. This is not a sustainable industry — either economically or emotionally — because it has a fundamentally dishonest relationship with its customers defined by the inconsistency of LLMs both in efficacy, stability (see: Anthropic’s downtime) and training, with each model randomly better or worse at things to the point that it must be a legitimate nightmare to run any software or build any product on top of them.  And the fact they haven’t worked out their business models means that whatever you’re paying today is guaranteed to change. What other product do you regularly buy that has such chaos built into it? What other thing do you pay for where the prices (or availability) can shift to the point that you literally can’t use it in the same way at a moment’s notice? And why does anybody tolerate it when it comes to AI? I’ll add that this is a specific situation where the tech media has categorically failed the customer. We have companies valued at hundreds of billions of dollars that are fucking their customers over day-in-day-out, and the response is mostly to say “ huh that’s strange ” and refuse to let a single critical thought cross their minds.  Every part of the AI bubble must exist in a constant state of flux so that there can always be a future breakthrough that’s always just out of reach. AI does not have to reach an actual achievement — it just has to “show promise” in some way. It is an objective disaster that Microsoft spent more than $260 billion on capex to create a business with less than $11 billion in annual revenue outside of OpenAI, but people will see “$34.33 billion in annual AI revenue” and say “that’s promising growth, up 123% year-over-year!”  They’ll hear about LLMs that delete people’s databases and say “well the models have gotten exponentially better,” even if that better part never seems to eliminate these issues, make a profitable AI company, or create a true killer app that you can point at beyond saying “ChatGPT has one billion weekly active users,” despite around 95% of them not paying a penny (and costing OpenAI likely billions of dollars) and eMarketer estimating that the entire global AI chatbot advertising industry will make $5.41 billion revenue in 2030 , giving OpenAI little hope of stemming the burn. These big numbers — like Anthropic having a $65 billion annualized run rate, an undefined term that obfuscates the fact that Anthropic has made $16.5 billion in the first half of 2026, losing billions of dollars in the process — are fundamentally meaningless, because they’re easily gamed at best, and inherently uncertain at worst.  The AI industry demands you constantly live in the future tense. Everything is about tomorrow’s billions or trillions, the potential of what you’re seeing rather than the thing itself, future gigawatts in data centers that you must treat as if they are already built and value based on things that AI might theoretically do. I challenge you to read everything about AI from this point forward with this in your mind so you can see how intently this industry tries to drag your focus away from what it’s doing toward what it might theoretically do if it only had more money, power and resources, and ask yourself why they need to do so.  To be clear, they’re doing so because you can’t really justify anything about this industry based on what it does today. It costs too much, none of the businesses built on top of it are profitable, it costs so much to build a data center that the most cash-rich asset-light businesses in the world are now burdened with endless expensive-to-install and run hardware for a business that makes a fraction of its overall costs in revenue and has little demand outside of two companies that everybody must conspire to keep alive both financially and philosophically.  And ultimately, nobody can actually explain why we need more data centers.  Would anything really change? What would change? How? How many more do we need? Why do we need so many? Having more power plants meant more people could have power, and having more fiber laid meant connecting more buildings to the internet. What does one more or two more or ten more data centers actually give you? Is there some part of the world unable to access or take advantage of the LLMs available on seemingly every surface of the internet? Because it seems like the only reason these things are getting built is to capture illusory demand based on a “supply constraint” created by two unprofitable companies absorbing all the infrastructure. I don’t hear any compelling scientific or technological reason building more is useful or productive outside of funneling more cash to semiconductor companies.  Seriously, go and read basically any article about AI and see how quickly they start talking about the future, be it in the mainstream media or on a startup’s blog. Every single piece must sell AI on its theoretical promise and, if at all critical, reassure you that the author of course doesn’t dispute the “transformative potential of AI” or “how it’s already transforming the economy,” even if it can’t define how it’s doing so or even what that means.  I let myself have a little fun with today’s piece because I feel like I’ve been so deep in the financial trenches that I forgot how much of the AI industry runs on propaganda, social pressure and outright bullying to manufacture consent for a product that demands everything and provides very little in return. Nothing about LLMs is worth a trillion dollars, or even $100 billion. This is, as I’ve said before , a $30 billion TAM industry dressed up as a trillion dollar one, and the only reason it’s grown this large is because the two leading companies have had their infrastructure built for them and given unlimited resources to subsidize their customers’ compute.  And what’s really stood out is how so little about the AI bubble is actually about AI. No other technology in history has had professional and social consequences for failing to use or like it enough, nor can I find any example in history where journalists have actively attacked critics for not being sufficiently-approving of a kind of cloud software. It is fundamentally crazy to me that, in pursuit of “objectivity,” much of the tech and business media has chosen to accept whatever narrative the AI industry gave them, assuming that whatever we have today is already guaranteed to be something better in the future, both in its outcomes and profitability. This era is unlike any other before it, but took advantage of the fact that most people are desperate to apply the past to the present to rationalize or process what may seem irrational or destructive. To see AI as “just like the dot com bubble” allows you to ignore both the costs and the potential outcomes because “things worked out after that,” even if there’re basically no uses for GPUs after this and the only way we “build new LLMs” is by feeding them expensive training data using billions of dollars of compute that are only available while everybody still believes this is real. The AI industry — and the AI bubble — is fundamentally built on acting in bad faith. Its executives lie. Its boosters lie. Its software lies because it doesn’t actually know anything and generates answers probabilistically, and if you mention that online, someone will harass you for doing so.  It refuses to answer straightforward questions. It refuses to present a plan for the future. It refuses to explain how it becomes profitable, because nobody knows how or has a tangible plan to do so. It deliberately subsidized its subscription products because it knew its customers wouldn’t pay the actual cost of AI, and tortures customers with shifts in functionality and rate limits all while framing this as a way to “ continue to serve customers the most cost-efficient models .”  It attempts to conflate massive, power and resource-hungry AI data centers with the smaller ones that bring helpful yet increasingly-decaying software to our homes. It sells these data centers as “bringing jobs to communities,” all while importing the talent from out of state to build the things then leaving a crew of 100 to 200 people to actually run them after millions or billions of dollars of tax breaks. It sells its “innovations” as creating a “ white collar bloodbath ” to scare you into using inconsistent and unreliable software that’s mathematically certain to make mistakes , and when you say something about it, its acolytes will lie and say that “hallucinations are solved.” It also can only ever sell itself based on what might happen and the theoretical promise of you giving it your complete attention, connecting every bit of data you own, paying whatever it costs, and accepting that it can and will change in price and functionality at random, all while never putting a precise timeline on whatever AGI means that particular week. Whenever you ask for clarity, the AI industry gives you chaff. Whenever you ask when things get better, you’re told it’s both the early days and that AI is the worst it’ll ever be. Even the term “artificial intelligence” is a bad faith attempt to conflate transformer models with things like robotics or autonomous cars, all so that its proponents can claim other people’s successes as their own despite LLMs having little or no relevance to anything else other than generative AI. It encourages dogpiling and ostracizing those who don’t fall behind it, because it cannot succeed on its own merits. It encourages a vile cultism powered too by bad faith and parasocial relationships with both AI CEOs and the models themselves. It exploits the intellectual weaknesses of “smart people” that are actually just good at remembering the right things to say at the right time and have memorized the various justifications for past failures, all while allowing them to use LLMs to promote their own bad faith enterprises where they use work-adjacent product to con others into paying them. And it’s losing because, at its core, AI was never built on very much. It grew this large because the media manufactured consent at the behest of the powerful because lots of money got invested, and the rich and powerful can never be wrong. The underlying technology may be more useful than it was , but it’s not useful enough to be profitable nor reliable enough to be world-changing , and the bad faith representation of LLMs as “good enough” should be a permanent scarlet letter on anyone who misled the public into believing this was anything other than normal software. I was asked recently why I find this all so repugnant, and my answer is simple: I don’t like bullies, I don’t like con artists, and I don’t like being lied to. This industry grew by misleading people about the actual and potential outcomes from Large Language Models, and through an economy-wide attempt to pressure everybody into adopting tools in pursuit of growth at all costs.   Ultimately, it was sold with the greatest lie of all: “this time it’s different!” To be clear, they’re right.  It’s so much weirder, and in the end will be so much worse.  If you liked this piece, you should subscribe to my premium newsletter. It’s $70 a year , $17 a quarter , or $7 a month , and in return you get a weekly newsletter that’s usually anywhere from 10,000 to 18,000 words and provides vast, detailed analyses of the biggest events and companies in the AI bubble. If you want to get in touch — and especially if you have any juicy information about Anthropic, OpenAI, or any other companies in the AI bubble — hit me up on Signal at ezitron.76. I’m also on IB on The Terminal. Anthropic and OpenAI don’t have the money to pay for the capacity. Hyperscalers and neoclouds fail to build the capacity for Anthropic and OpenAI to expand into. Anthropic and OpenAI lack the actual compute demand to justify spending what I estimate will be $200 billion in 2027. OpenAI and Anthropic must keep spending as a means of justifying their existence to hyperscalers using their revenues to artificially inflate growth, to the tune of more than $440 billion across Google, Microsoft and Amazon alone . Hyperscalers must continue to buy NVIDIA GPUs, as the moment they stop doing so, the markets will begin to ask whether AI is an actual growth market anymore and ask for real, tangible answers about where all of this capex is going.  To be specific, analysts expect NVIDIA to make $1.48 trillion in revenue across Fiscal Years 2027, 2028 and 2029 . NVIDIA must sign long-term agreements to buy high-bandwidth memory at scale from SK Hynix, Micron and Samsung — who make 90% of all DRAM — or know its costs would spiral out of control, by which I mean its margins would compress at random at a time when it’s already having to spike demand in extremely odd ways.  Read my Hater’s Guide To The Memory Crisis for more.

0 views
Unsung Today

Two previews for the price of one

A thoughtful moment in the Arrange Displays pop-up in macOS’s Settings when you choose to designate a screen to be a primary screen: It not only shows a nice preview of where your menu is going to land, but also changes the shape of the menu proxy you’re holding , to help you connect the two. (The whole interaction is probably obsolete, though – if I remember correctly, it used to be that you could only have a menu on one designated screen. Today, the menu is replicated on all screens.) #above and beyond #mouse #preview

0 views
Unsung Today

Mark MacKay’s explainers

If you haven’t played Kern Type yet, you’re in for a treat – released by Mark MacKay in 2011, it’s a delightful browser game that teaches you the art and the math of text kerning: If you have played it, you’re still in for a treat, as MacKay under the Method of Action label released a few similar games since: They’re interesting not just because you can explore the feel of visual, typographical, and color craft by play – but also because they’re also really nicely made explainers. Here, you can learn things, but also learn about making things that teach things. For example, I liked the thoughtful onboarding, animations, and sound design of The Boolean Game, the keyboard navigation in Kern Type, and this general idea present in a few games that it’s fun to learn by fixing slightly broken things, rather than starting from scratch. As far as I can tell, MacKay also occasionally revisits the older games, so Kern Type today might feel much better than when you played it last. MacKay also vibecoded a quick aspect ratio game , and is thinking of a new game to teach text editing, which excites me to no end. (I added a new tag to Unsung, #explainer , to cover explainers and playgrounds like these.) #above and beyond #colors #explainer #graphics #text editing #typography The Boolean Game (2019) The Bézier Game (2014) Color: A Color Matching Game (2012) ShapeType: A Letter Shaping Game (2011)

0 views

The LogDrive: Flexible Composition Through Abstraction in Shared Logs

In July, several Confluent colleagues and I published The LogDrive: Composable Durability for Cloud-Based Shared Logs . The paper evolves the concepts of Virtual Consensus in Delos by decomposing the Loglet abstraction into AtomicLog and LogDrive, moving composition below sequencing to a new durability abstraction. This post describes these new abstractions in the context of Virtual Consensus, focusing on how they support RAID-like composability for shared logs. The ideas of the paper came out of a research project led by Mahesh Balakrishnan, Gardner Vickers, and Lucas Bradstreet. The project itself was to build a Kafka-on-S3 service to run in Confluent Cloud and the project ultimately became K2 or Kora 2, the next evolution of the Kora engine (which powers Confluent Cloud’s Kafka service). The first product built on K2 was Freight Clusters (Kafka on S3). The research that led to the LogDrive paper originated in Conflux, the scalable metadata service in K2 which acts as sequencer and metadata database for the fleet of leaderless brokers, akin to WarpStream’s agents. Fig 1. Leaderless broker fleet writes Kafka batches to S3, with Conflux shards as sequencers and metadata databases for S3-stored Kafka data. Conflux is a multi-master state-machine replication service built over a shared log based on Virtual Consensus which uses cloud services such as S3 and DynamoDB as the backing storage service. But this post isn’t about K2, nor even Conflux, its about extending the shared log protocol Virtual Consensus for better composability, specifically, being able to use RAID-like semantics to build logs with striping and quorums over diverse backing storage without having to rewrite the stack. I recommend reading my previous posts on Virtual Consensus to better understand this post: An Introduction to Virtual Consensus in Delos   Steady on! Separating Failure-Free Ordering from Fault-Tolerant Consensus But in any case, I will do a quick recap to set the scene for describing the new abstractions introduced by the LogDrive paper. Traditional replicated-log protocols tend to combine sequencing, durable storage, failure handling, and membership changes. Virtual Consensus separates these responsibilities between a VirtualLog and a sequence of Loglets. Fig 2. VirtualLog abstracts the log as a whole, with a virtual address space. Each Loglet abstracts a log segment, with one active segment. The VirtualLog exposes one logical address space over a chain of independent Loglets. One Loglet is active, while its predecessors are sealed. The active Loglet provides the steady-state data path: it accepts appends and establishes a durable order within a fixed configuration—failure-free ordering. Basically the happy steady state where everything is running fine. The VirtualLog provides the control plane. When the active Loglet experiences a failure and must be replaced, the VirtualLog seals it, records its final tail, and extends the chain with a new Loglet. Fig 3. When a Loglet must be replaced, it is sealed, a new active Loglet added and the log metadata committed. Virtual Consensus separates the protocol into failure-free ordering (Loglet) and fault-tolerant consensus (VirtualLog). A Loglet does not need to implement recovery from partial failure, such as leader elections or membership changes. In that sense, it can be much simpler to implement than Raft. It only needs to order entries with a fixed configuration and provide fault-tolerant and operations so that the VirtualLog can terminate the segment safely. Fig 4. Reconfiguration moves the system from one steady state configuration to another in response to failures, policy triggers or other factors such as load balancing. There is a limitation to the Loglet abstraction when it comes to Loglet composition. By composition I mean building Loglets that are composed of other Loglets. For example, building a generic QuorumLoglet over a set of child Loglets, or a StripingLoglet that stripes writes across a set of child Loglets. The fundamental write operation of the Loglet is . An append both assigns a position and stores the value . Striping works despite this coupling of sequencing with storage. A StripedLoglet routes each to one child Loglet and translates the returned child address into its own address space. This works provided that each child allocates contiguous addresses (for address translation between child and parent address space). Fig 5. StripedLoglet But while can work for striping, it does not compose cleanly for a QuorumLoglet. A parent can forward an append to several child Loglets, but each child independently assigns the address. Partial failures and retries may place corresponding values at different addresses across the child Loglets, creating divergence. An external sequencer could assign positions first, but the Loglet API has no operation for storing a value at a caller-selected address (it only has ). The parent would have to ignore the children’s ordering and somehow add its own sequencing and reordering machinery. Doesn’t sound like much fun. In Delos, quorum replication was therefore implemented inside the NativeLoglet. The NativeLoglet consists of a sequencer and a set of Log Servers. The sequencer assigns an address to each append and then writes the value at that address to a quorum of Log Servers. Crucially, the Log Servers expose , not Fig 6. The NativeLoglet, a quorum-replicated Loglet. Loglet composition via is the problem. This now brings us to the new abstractions: AtomicLog and LogDrive. Fig 7. The Loglet is decomposed into the AtomicLog and LogDrive abstractions. The AtomicLog together with the LogDrive is an implementation of the Loglet API. From the VirtualLog’s perspective, AtomicLog is simply another Loglet: it supports , , , and , and it can be replaced through the normal Virtual Consensus reconfiguration mechanism. The further decomposition of the Loglet is as follows: The AtomicLog is responsible for sequencing and general log semantics but delegates durability. Sequencing/addressing is achieved via a soft-state sequencer (which we can consider is part of the AtomicLog). The LogDrive (sitting below the AtomicLog) is concerned with durability rather than sequencing. It exposes a flat numbered address space of durable single-value registers together with , an operation that lets AtomicLog reconstruct the tail from backing storage after the sequencer has disappeared.  Composition into stripes and quorums exists at the LogDrive level, below sequencing . That is, composition is via the LogDrive API, not the AtomicLog (Loglet) API. Fig 8. Depicts the AtomicLog and LogDrive abstractions in two Conflux instances The LogDrive API does not include append, as composition requires writes to use caller-defined addresses: An AtomicLog append consists of a three step process: Acquire the next free slot from the sequencer (the slot is the address) Write the append value to the acquired address via the LogDrive Complete the slot The sequencer is essentially a map of: address -> {FREE, ACQUIRED, COMPLETED}, though the sequencer uses the term slot instead of address.  Multiple addresses can be written concurrently using a windowed write discipline: the sequencer permits up to (K) appends to be in flight ahead of the contiguous log tail T. The contiguous tail is the first unwritten address and the non-contiguous tail is the lowest unwritten address after which all addresses are unwritten (or alternatively the last written address + 1). Fig 9. A snapshot of sequencer state compared to LogDrive state On a completeSlot(slot) call, the sequencer blocks until all prior slots are also completed. In the figure above, we see that the window of four addresses which is being written to concurrently has holes in addresses 3 and 5. The LogDrive writes for 4 and 6 can finish out of order but their sequencer calls cannot complete until all preceding slots have completed. Only once address 3 has been written to and completeSlot(3) is called, can address 4 complete and the contiguous tail advance to slot 5. So while writes to the LogDrive can complete out-of-order, the appends at the AtomicLog are strictly completed in address order. In this post we’re going to ignore how comes into play, we’ll look at that in a subsequent post. When a Loglet is unsealed, simply asks the sequencer what the tail is. This is the fast-path as the sequencer keeps all its state in memory. Should the sequencer become unavailable, then the AtomicLog can only discover the tail by inspecting log storage (slow-path). The LogDrive offers the command for this purpose. Fig 10. Fast and slow path checkTail While the AtomicLog checkTail returns a scalar contiguous tail (T) address, the LogDrive weakTail returns: N : the non-contiguous tail (first unwritten address after which all addresses are unwritten, or alternatively, the highest written address + 1) H : The holeset, the unwritten addresses within the write window. As seen in Fig 9, the write window can create a Swiss cheese of holes at the tail of the log. The weakTail result implicitly describes the state of the write window. The write discipline maintains . Therefore, every hole lies in the address range , while all addresses below that range are guaranteed to be written. The following can be computed from a weakTail result:  Addr written == Addr unwritten == The window provides concurrency while bounding the number of holes that incomplete or slow writes can create. Limiting the window size allows the tail to be recovered or checked efficiently by examining at most the last addresses rather than scanning an unbounded address space.  It’s worth noting that the sequencer’s view and the backing storage’s view of the contiguous tail regularly diverge. From the example earlier, once address 3 is written, if you call weakTail on the LogDrive, it will return thus . However, until is called, the sequencer sees . This has correctness implications. For this reason, the slow-path is only used once the AtomicLog is sealed (via a linearizable register). Thus once the slow-path has been invoked once, the fast-path will never be invoked again (avoiding diverging results between callers of fast and slow path). Why does the LogDrive weakTail return instead of simply ? And why is it called a weak tail? We cover the former in this post (it's needed for LogDrive composition) and the latter in the next post (it’s about weak semantics). There are three main types of LogDrive: Primitive LogDrive : A thin interface over remote storage, such as a cloud database, KV store or object storage. For example, one might implement a DynamoDBLogDrive, or an S3LogDrive, which are thin shims. StripedLogDrive : A log drive with a set of child log drives where each child is a stripe. Maps addresses to stripes and performs address translation between its own address space and that of its children. QuorumLogDrive : Also has a set of child log drives. Each read, write, weakTail is a quorum operation over its child logdrives. Fig 11. Singleton primitive LogDrive, StripedLogDrive over primitives, QuorumLogDrive over primitives. Striped and Quorum LogDrives call the LogDrive API of their children—the LogDrive API is the compositional interface. So we can compose LogDrives arbitrarily: quorums over stripes over primitives, or stripes over quorums over primitives and even over heterogenous primitives. The base of the tree must ultimately consist of primitive implementations. Fig 12. The root LogDrive is a QuorumLogDrive over three regions, where each region is striped across two DynamoDB tables. A call to in the root LogDrive will flow down as calls to in child LogDrives, according to the type LogDrive. For example, with a StripedLogDrive of 3 child PrimitiveLogDrives, any given read/write call is mapped to a read/write call of the correct child LogDrive, with address translation between the parent address space and the child address space, both of which are always contiguous. Fig 13. Depicts the routing of writes and the mapping of the root LogDrive address space to its children. A QuorumLogDrive forwards to its child LogDrives and waits for a write quorum (Qw). Flexible quorums apply here, where the read-quorum (Qr) is computed as . So if , , then the . If , , then . Because the parent supplies a , every child receives the same value for the same address. Partial success can leave an address unwritten on some children, but it cannot cause their logical address assignments to diverge as independent child append calls can. The Loglet API command returns , the contiguous tail (plus a boolean whether the Loglet is sealed). However, this is not enough for quorum composition. A single scalar value per child tail does not provide enough information for a QuorumLogDrive to compute its tail value. The write window of each child LogDrive may individually resemble Swiss cheese of holes but when unioned together form a contiguous slice of quorum-written addresses. Fig 14. Swiss cheese individually, but globally contiguous quorum-written A scalar child tail is insufficient because it loses information about writes above the child’s first hole. For example: Fig 15. Left and write return the same child T values, but correspond to different global T value. Each child may have a different pattern of holes within its write window, and the QuorumLogDrive must determine the global status of each address based on the richer N, H result of its children. The specific algorithm that the QuorumLogDrive uses to merge the weakTail results of its children into its own combined weakTail is detailed in the paper and also in my TLA+ specification . One motivation behind this work was to make it easier and faster to adapt to changing cloud services and, just as importantly, changing cloud service pricing. A Primitive LogDrive is intended to be a thin adapter over some backing storage service such as DynamoDB, S3, or a KV store. Because it only needs to implement the small LogDrive API, a new primitive can be relatively simple, on the order of a few hundred lines of code rather than a new shared-log implementation. This lowers the cost of adopting a new storage service. If a cloud provider introduces a cheaper, faster, or otherwise more suitable storage primitive, supporting it does not require reimplementing sequencing, replication, striping, or the rest of the shared-log stack. Striping and quorum replication live in generic StripedLogDrive and QuorumLogDrive implementations. These operate over the LogDrive API and therefore do not care whether their children are backed by DynamoDB, S3, S3 Express One Zone, or something else. The same composition machinery can therefore be reused over different primitives and nested arbitrarily: quorums over stripes, stripes over quorums, and even compositions involving heterogeneous backing stores. As long as a Primitive LogDrive satisfies the LogDrive API, it can participate in these higher-level compositions without those layers needing to know anything about the underlying storage service. Virtual Consensus adds another useful property: different Loglets in the same VirtualLog can use different LogDrive configurations. A log might initially use an AtomicLog backed by a singleton DynamoDBLogDrive. A later reconfiguration could extend the VirtualLog with a new AtomicLog backed by a QuorumLogDrive over several S3 Express One Zone LogDrives, perhaps spread across availability zones or regions. The old configuration remains responsible for its existing segment while new appends move to the new one, and the old segment can eventually age out as the log prefix is trimmed. The combination is powerful: LogDrive provides a way to construct different durability configurations from reusable building blocks, while Virtual Consensus provides a way to transition between those configurations over time. This makes the storage layer adaptable to changes in cloud services, performance characteristics, failure requirements, and pricing without having to rewrite the shared-log stack. You might be thinking that you’ve seen all these patterns before and there’s nothing groundbreaking here, and in some ways you’d be right. But what the paper contributes are the formalized abstractions . Murat Demirbas just wrote a great piece on Modularity abstraction versus Modeling abstraction where he compares and contrasts abstraction in terms of modularity and abstraction in terms of reducing something to its very core behavior. A key heading in that post was titled: Modularity abstraction hides. Modeling abstraction reduces . Dominik Tournow recently tweeted something along similar lines about modeling abstraction: “ Systems design is the process of reduction: reduce a problem and its solution to their very essence. When you've found the right abstraction, there are no transformations, no translations, no mappings, no workarounds. “ I think this is a useful lense through which to view the LogDrive paper. Having worked on Apache Pulsar and Apache BookKeeper, I can tell you that BookKeeper has both striping and quorums built in. But what it doesn’t have is a set of formalized abstractions that allow for arbitrary composition based on composable building blocks over a diverse set of backing storage that the AtomicLog and LogDrive give you. BookKeeper is akin to the NativeLoglet. The contribution of LogDrive is instead the abstraction: reducing durability to a numbered collection of single-value registers plus , while moving sequencing above it into AtomicLog. The interesting part is that the weaker abstraction is the more composable one. By reducing durability to its essential behavior, LogDrive provides a better building block for constructing shared logs. An Introduction to Virtual Consensus in Delos   Steady on! Separating Failure-Free Ordering from Fault-Tolerant Consensus The AtomicLog is responsible for sequencing and general log semantics but delegates durability. Sequencing/addressing is achieved via a soft-state sequencer (which we can consider is part of the AtomicLog). The LogDrive (sitting below the AtomicLog) is concerned with durability rather than sequencing. It exposes a flat numbered address space of durable single-value registers together with , an operation that lets AtomicLog reconstruct the tail from backing storage after the sequencer has disappeared.  Acquire the next free slot from the sequencer (the slot is the address) Write the append value to the acquired address via the LogDrive Complete the slot N : the non-contiguous tail (first unwritten address after which all addresses are unwritten, or alternatively, the highest written address + 1) H : The holeset, the unwritten addresses within the write window. Addr written == Addr unwritten == Primitive LogDrive : A thin interface over remote storage, such as a cloud database, KV store or object storage. For example, one might implement a DynamoDBLogDrive, or an S3LogDrive, which are thin shims. StripedLogDrive : A log drive with a set of child log drives where each child is a stripe. Maps addresses to stripes and performs address translation between its own address space and that of its children. QuorumLogDrive : Also has a set of child log drives. Each read, write, weakTail is a quorum operation over its child logdrives.

0 views

Extending life perception

I write about journaling a lot , since it’s honestly my most important practice. In my most recent post on the subject I made the case that active recall is an effective way to remember things, whether that be ideas, thoughts, or events. I'd like to expand on that post and make the case that journaling extends life perception. To wax philosophical for a moment: long life perception and long lifespan are, when it comes down to it, effectively the same thing. If we live in the infinite now , then the only thing separating an actual long life from the perception of a long life is perception . This intuitively makes sense, and you've likely experienced this yourself. Years that are filled with novelty tend to feel longer and are more memorable than years of consistently similar days. It's partly why time feels so much longer as a child, since all experiences are fairly novel and there's explicit progression though the different phases of school, which stands in stark contrast to, say, a few years of working the same job and rarely taking vacation or trying anything new. Those few years can easily condense into a handful of memories, and so the perception of those years is fairly short. Regularly in conversation the person I'm talking to will say something along the lines of "Wow, it's August already!? Time flies.". I rarely share this sentiment (with the exception of the pandemic, where all my days effectively became one), and I ascribe this to two main reasons: The first reason is that I try to do new things as much as possible. Just last night I played ultimate frisbee for the first time on the beach at sunset with a good friend and his crew of (really athletic) frisbros. I was pretty bad at the game and fumbled the frisbee too many times, but after the beautiful sunset and a dip in the cold ocean to clear off the sand I felt great, and I'll likely remember this experience as it punctuated normal life. The second reason, and this is the underlying point I'm trying to make with this post, is that I write about my day while journaling, and in-so-doing remember it better. And since I remember these experiences it doesn't feel like time is slipping away from me. Instead it feels like time is rich and full. Yes, it's August, but I feel like it's been 2026 forever. The research on active recall improving memory is clear. The research on life perception is less clear, but intuitively it makes sense that remembering more of your life will make it feel longer and hopefully richer. There are many reasons to journal, but I feel this is a lesser discussed effect of journaling, and one I'm only starting to appreciate now.

0 views

Netflix to Sell Streaming Services?, Streamers as Aggregators, Revisiting Roku

Netflix is considering selling other streaming services, and I think it's a good idea; it's also a let-down for Netflix's original goals and potential pivots.

0 views
iDiallo Today

Foot Guns for Sale

I don't think it's going to work out the way everybody thinks it will. The current narrative, at least the one pushed by the companies selling the shovels, is that AI will become centralized. Anthropic and OpenAI will offer safe, vetted AI. Developers will become mere prompt-engineers, submitting requests to these benevolent gatekeepers. They have tamed the dragon. We will benefit only if we become tenants to their API-driven fiefdoms, paying by the token for the privilege of renting intelligence. “They didn’t care that they’d seen it work in practice because they already knew it couldn’t work in theory” - Clay Shirky I complain about AI frequently on this blog, but not because I don’t think it is useful. I use it quite frequently on my day to day. But what I hate is hype and fake narratives. In fact, I believe that the opposite of their narrative will come true. Technology will continue to improve whether Moore’s Law becomes a relic of the past or not. It’s been called dead, yet CPUs and GPUs are becoming faster than ever. I do not believe for one second that developers with pre-LLM experience will end up on the losing side. And if technology continues to improve, then we won’t need OpenAI or Antropic in the future. We will be able to load large open models right into our powerful personal computers with more than acceptable inference speeds. Unless you believe that computers have reached their zeniths and it is all stagnation going forward. The gap between frontier models and open-source alternatives is already all about specialty, and it will continue to narrow. And when developers ubiquitously have access to local models, they will have access to everything. Right now, companies are hoping that developers will use their AI and remain within their ecosystems. They're building guardrails, imposing limits, and designing their models to serve corporate interests first. They see developers as customers, not as threats to their business model. But I’ve seen how easy it is to switch from one frontier model to the next. In fact, some developers in my team accidentally switched by selecting the “auto” mode on their IDE. They didn’t realise that every subsequent request was from a different model. It’s the developer who will end up benefiting from this far more than the corporations will. One developer recently spent his evenings using an AI agent to reverse engineer every peripheral within arm's reach. From those devices, I’ve come away with a full plaintext command shell inside my microphone, a webcam whose activity LED I can switch off while it records, and a key light that hands out memory writes to anyone on the WiFi. He documented the entire process, implemented his own firmware update utilities, and completely enumerated the functionality of devices that were never designed to be user-serviceable. AI gave him the ability to fully control hardware that he has paid for in his own terms. Another developer created OpenLogi , a local-first alternative to Logitech’s software used to remap your own mouse button. The manufacturer was forcing users to create an online account to have access to the hardware they had paid for. OpenLogi gives full control back to the user. This is what happens when developers have the tools and the motivation to bypass corporate control. And AI is about to make this kind of reverse engineering and alternative-building dramatically more accessible. At the speed of large language models, an activist could create a brand new rotating messaging platform every week to avoid the prying eyes of an oppressive government. Someone else can review his own model and add some self improving features. In fact, you could explore new AI paradigms. Most developers I know have a side project they don't have time to work on. With AI, they will have the ability to execute on those ideas. These days, I'm able to run Deepseek on my own $400 local machine at a much slower speed, but I'm not in a hurry. Give it a couple years, I could run something even more powerful. I don't need a project management tool where I have to pay monthly. My actual needs are much simpler. For example, I actually like Jira, despite how much I complain about it on this blog. But I don't need to have Jira for myself on my personal projects. I can build a tool that works solely for my needs. I can easily build applications in environments I am not too familiar with but that are more appropriate for the task. I can build prototypes in a couple hours now and throw them away if they don't match my initial expectation. I can do so much more. Dario Amodei and others are trying to scare us with the capability of AI. They sell the fear of superintelligent systems that will render human developers obsolete or dependent. But this is not what's going to happen. What's going to happen is we will not need Anthropic anymore. Yes, they will have the high-end hardware. But we don't need high-end hardware the same way most people did not need a professional camera. All they needed was a crappy camera with a good filter to post on Instagram. Flickr was superior to Instagram, but the superior technology lost to the one that was "good enough" and in everyone's hands. The funny thing in all this is that by making everything AI-dependent, by building their moats and their guardrails and their API toll booths, companies like OpenAI and Anthropic are selling foot guns. They are building the dark fibers of our era, the infrastructure that developers will eventually subvert, repurpose or simply bypass. Because eventually, we won’t ask for permission. We can just do whatever we want with tools freely available to anyone. We own our devices. We own our data. And soon, we'll own the intelligence on our own terms, without a subscription fee and without a corporate overlord. At the very least, we will get free GPUs .

0 views
Maurycy Yesterday

Uranium from Příbram (Czechia)

RC-102: 1.7 kCPS [43 uSv/h]. AB+: 55 CPS, 1960 CPS Uraninite nodules in calcite (?). Unlike the Colorado plateau rocks, the veins are nice and clean (although not chemically pure) which results in a shiny surface. RC-102: 1.1 kCPS [37 uSv/h] Chunk of Uraninite growing on calcite. It has nice botryoidal formations of massive Uraninite along with some areas where the shape of the underlying calcite crystal is visible. A few of the "bubbles" are broken, showing the individual crystals that grew on the matrix. RC-102: 300 kCPS [14 uSv/h]. AB+: 25 CPS, 704 CPS Ugly Uraninite chip. Might glue this inside a cloud chamber or something: it's small, crumbly and weathered. RC-102: 3.2 kCPS [112 uSv/h] Uraninite coating "granite". RC-102: 1.3 kCPS [32 uSv/h]. AB+: 26 CPS, 1200 CPS Granite with Uraninite veins running through it. A nice crystal of calcite is visible in the third photo. Uraninite veins running through calcite (?). This might look cool if cut and polished. RC-102: 732 CPS [15 uSv/h]. AB+: 1.75 CPS, 240 CPS This piece has a (somewhat metamorphic) sedimentary host rock, which is very different from the other pieces. Geology notes : The deposit sits on the boundary between quartz-monzonite and pelite. (hence the two different host rocks) The sedimentary rock is from the upper Proterozoic, while the uranium crystallized ~260 million years ago (from U-Pb dating). The igneous intrusion are roughly 100 million years older than the uraninite. The presence of calcite suggests a hydrothermal process where the uranium was leached out the surrounding rock by calcium bicarbonate and reprecipitated as CO 2 escaped from the solution. The resulting "vein deposit" occupies pre-existing gaps in the rock. Because the deposit is fully underground, all my samples were mine tailing and I have very little context. Also, for political reasons , It'll be a few years before I can get these home. Don't expect better photos or more measurements for a while ... and remember to vote!

0 views

review2

Last time, we took a stroll down memory lane to review some ancient code I wrote, and see what/how I’d do things differently now. That was fun, and I have a new banger for us today. Today’s example comes from the same place — a little vim-like text editor I was working on. Vim has this “repeat” operator which just does the same thing you did last time. It’s nice. Delete a word. Running repeat deletes another word. Kinda dinky in this example, but it can also rerun “increment every number in the next four paragraphs.” Anyway, so that’s the feature I was trying to duplicate. But the action I was running might have done some IO, and I didn’t want to repeat the IO (because maybe the IO was to gather some input from the user, and repeating shouldn’t ask again.) I was still high on my own supply of writing monads , so I approached this problem with a custom monad. The gist of the API was: I’m actually pretty impressed with past-me on this one. That’s a clean API, and the implementation was pretty cute. The trick here is to keep and a instances around. This code uses the to pop off IO actions it’s already run, and the to keep track of new IO actions it needs to cache. The “magic” happens in , which runs it through once with an empty state, and then returns a new action with the MonadWriter results moved into the state for the next time around: Simple. Clean. Elegant. Too bad it doesn’t actually work. The following program crashes with an error coming from the unsafe use of in : The attack here comes from the fact that we can force the program down a different code path its second time around. And that second time, it encounters a call to which has a different type than the one it cached. Thus, trying to reuse the cache leads to what is effectively a type error at runtime. What actually went wrong here? The problem is that monads are too powerful . Since the only way to compose monads is via bind ( ), we are forced to extend a monadic value of type by a function of type . Which is to say that the “next thing to do” in a monadic computation is always going to be a function. And functions are completely opaque. So, once we’re given a monad, there’s simply no way to know what it’s going to do without actually running the continuation. The problem arises from the fact that that continuation can invisibly branch. My monad was attempting to statically analyze the monadic computation, and cache the IO results in a queue. But as shows, it’s trivial to break this sort of static analysis. Because the branch is hidden inside of a function, and there’s no way to determine which branches a function didn’t take. But I didn’t know that eleven years ago, so I give myself a pass on this one. Nevertheless, let’s tackle this problem with the wisdom of ages. So if the problem with my previous implementation of is that it’s a monad, what options do we have? As it happens, there are two very nice options available to us here: arrows and selective applicative functors. We’ll discuss arrows for now, and come back to selectives. Long time readers might remember a series on arrows from a few years back. But if you don’t, that’s OK; you’re still welcome here. A quick recap: Arrows are a generalization of functions. Like functions, they take two type parameters (an input and an output). Like functions, they come with an identity arrow. They compose “end to end” just like functions do. These three properties are expressed as a superclass, which we usually call and write infix: In addition to being categories, arrows also come with a means of transforming regular functions into arrows, and of mapping arrows over pairs: What’s neat about arrows is that their values are function-like things, rather than being actually functions. That means when we compose arrows, we compose values whose internals we get to choose. Which in turn, means that static analysis is possible again! Attentive readers will notice that there isn’t actually any way for arrows-as-such to be able to branch. To gain that capability, they require an additional , which equips them with the ability to lift arrows over : To wet our whistle, let’s write a little helper that shows that the composition of an applicative functor with an arrow is itself an arrow: The arrow instances for are the usual trick of using applicative functions to lift operations into the right place. For example, identity is just liftA2` of composition: We can do the same trick for and : as well as for : What’s nice about this construct we’ve built is that it gives us two degrees of freedom. We’re free to choose an arrow whose structure we’re going to reuse, and an underlying applicative functor (which can give us “static” effects as we’re building the underlying arrow.) The idea here is that we can put the cache- building machinery inside of the applicative functor, but the cache- reading machinery inside of the underlying arrow. It’s worth knowing about the Kleisli arrow: which says that any monadic bind function is itself an arrow. Implementing the instances yourself is a fun exercise if you’re new to this stuff. We can reuse as our underlying arrow, which when you expand everything out, we get: What I think is particularly cool about this is that is just the composition of the newtype unwrappers, and yet its type is extremely reminiscent of my ten-year-ago implementation: This is an instance of a more general principle, which is that the final “observation” you want to make of your type is always a good representation of that type. It’s not the only representation, but it’s always a reasonable choice. Appropriately enough, this is known as a final encoding. Anyway. How can we implement ? By way of : works by constructing a at the level. Each call to gets a unique cache. Then we drop into the implementation of the arrow (which recall happens at runtime .) Inside the , we check to see if the map has a value at the requested , and if so, return the cached . If not, we run our function and cache it. Since there’s no tomfoolery here that is existentializing away our types, we don’t need to worry about the attack; Haskell’s type system guarantees we can’t construct such a thing. Because isn’t a , it can’t be a either. But it’s nice to be able to provide the equivalent of : So that completes our arrow-based implementation of . But there’s still something left undone. I said earlier that selective applicative functors would be an alternative approach to implementing . Selectives rightfully sit between and in the functor hierarchy, but were discovered too late , and everyone was still kind of annoyed about having had just stuck into the hierarchy. What, precisely is a selective functor? It’s a different solution to the problem of “monads are too powerful” which gives us a branching primitive to play with. Behold: says that you might have an , in which case you must run the provided . But maybe you have a , in which case you may run the effects of the . But nobody’s forcing you to. Since there are still no raw function continuations to be seen here, we can use to provide branching to our programs. But all of the branches can be identified statically, since we’re only operating on values, again, whose internals we can control. In fact, by aggressively nesting calls, you can get back a version of monadic bind — so long as you have a finite number of select calls you’d need to make: (the implementation of which is fun if you’re looking for a challenge) Anyway, all of this is to say that we could have equally structured our as a selective functor rather than as an arrow! But is at least as powerful as , so given all of our hard work already, we can pull out a instance for free. What do I mean when I say “at least as powerful?” It means we can derive it for free, given an instance. Behold, the newtype, which exists only for us to have something to attach some instances to. Here we use newtype deriving to say that if is a category/arrow/arrowchoice, then is too. But now we can show that having is enough to get and instance: Then, given an , we can get an implementation of : Here we don’t have the option of choosing to invoke in the case. But that’s OK, because in , doing so would correspond to creating caches for branches that don’t need it. Given all of this, we can now derive up to for : which means that users can now choose between the arrow hierarchy and the functor hierarchy for how they’d like to think about building actions. And to nudge them even a little further, we can introduce something that looks like a monad transformer, removing the input parameter: Clean. Tidy. Actually works this time around.

0 views
Unsung Yesterday

“This way, the interface does not get in the way.”

Ilya Birman on his blog talks about interfaces that unnecessarily slow people down, in a series of two posts. In the first one , titled “Let me click,” Birman shows a few places that force the user to go through a roundabout series of clicks, instead of taking a direct route: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/this-way-the-interface-does-not-get-in-the-way/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/this-way-the-interface-does-not-get-in-the-way/1.1600w.avif" type="image/avif"> In Aegea’s comment settings, there is a “send by email” checkbox with an email-address field associated with it. If the checkbox is unchecked, there is no point filling in the field: the address is not needed for anything else. If the checkbox is checked while the address is blank, the system cannot send anything as it does not know the address. In short, these controls are interconnected. Logically you could disable the input altogether if the checkbox is unchecked — there is no point filling it in anyway. But that is irritating. What if I want to enter the address and then turn on the checkbox? It would be even worse not to let me turn off the checkbox when the address is filled in. I want to turn it off — let me click! In a follow-up , Birman talks about a specific example from the podcast app Overcast, whose creators faced with a tricky systemic challenge: For any podcast, you can set how many episodes to keep downloaded on the device. Say you set the limit to three, then stop listening to a podcast regularly: the next three episodes download, and after that it stops downloading them — why waste the space? […] [But,] what if someone manually asks to download an episode when they already have three downloaded? You can’t just immediately delete it to keep things tidy. […] Finally, Marco’s wife Tiff suggests a solution to all the problems: just don’t let users download more episodes, she said, and show them a message, roughly: “Your episode limit is three, but this would be the fourth, denied”. Marco liked the solution. I didn’t. Sure, it solves Marco’s problems, but not the user’s. I haven’t seen the Overcast block in action, but all of Birman’s examples across both blog posts rang true to me. Motor memory wants what it wants, and stops for no one. I wanted to add two things from my end. Birman presents this as “Let me click,” but I wanted to offer two alternative/​complementary principles that helped me before: I agree with all the examples given by Birman, but things can be stranger, and sometimes letting people click or do things in any order can make the interface harder to understand. In Figma, each text box dimensions could be set to be completely automatic (automatic width and height – used for short labels), with only specific width (and automatic height – used for paragraphs of text), or with manual width and height (used for graphic elements): You can also see that in text boxes where width or height are automatic, the fields for those values are grayed out, and cannot be changed. In order to change them, you have to switch to a particular mode first, which makes the relevant fields active. This is to help people understand how those things relate to one another in a pretty tricky space, but it effectively means sometimes Figma won’t let you click, and will force you to do this in one specific order. But this is only in those fields – you can always grab the object on the canvas and resize it, and it will switch to manual on its own, respecting the drag’s momentum: The inconsistency here is intentional. I’m not saying these are the right choices, and we indeed heard from some users frustrated that they cannot click easily when they already understand the system (unfortunately, I am aware of no good affordance for “breaking” a disabled field in modern GUIs, like a molly guard ). I mostly wanted to share that these things can be hard, and the balance between “let me click” and “not being able to click can be helpful in understanding the system” tricky to achieve. I keep thinking of the story from a decade ago when someone’s phone rang at the front row of a New York Philharmonic’s concert , prompting an actual performance halt, and anger from both the conductor and the audience. The ashamed patron’s eventual explanation was: “I turned the phone to silent, but I also had an alarm set up.” Let’s assume this is actually true (in people’s reports, the phone rang the marimba ringtone, which isn’t standard for alarm – but people’s recollections are routinely flaky, too). This, I think, is a perfect example of “let me click” in action. You can set an alarm for a certain time, and you can subsequently turn the phone to silent. You can also do it in the opposite order. You just gave your phone two inconsistent instructions, and the phone logic decided in either case the alarm will win. I can’t think of an easy interface solution here. It feels correct for the order to not matter here. It’s hard to imagine disallowing you switching to silent mode with any alarms on, since the silent mode also affects calls. It’s also hard for me to imagine any effective UI warnings at any given moment in the process. (Besides, back in the day, iPhone used to give you a gentle one via a little alarm icon visible in the top bar.) = 3x)" srcset="https://unsung.aresluna.org/_media/this-way-the-interface-does-not-get-in-the-way/5-framed.1600w.avif" type="image/avif"> The silent mode and the alarms are, as Birman put it, interconnected – but their connection is ultimately tricky to explain to the user. #case study #details #flow #system design Let me do things in any order . Here’s Google Home app, where I can change the temperature and the time for holding – but if I change the time first, it frustratingly resets when I subsequently change the temperature. It forces one specific order in an interface that suggests any order is okay: The current action has the most momentum . The user is right there, active, tapping on things, wanting to get stuff done. If Overcast indeed throws a “your episode limit is three” message, then it forces the user to remember how to get to the settings and change it. The momentum is lost. The decisions of past me should not be as important as the decisions of present me.

0 views
Martin Fowler Yesterday

Fragments: August 24

I was listening to Ezra Klein’s interview with Helen Toner about the recent OpenAI hack of Hugging Face and the subsequent discovery that there were swarms of agents inside OpenAI doing unsanctioned activities. One of the points Klein made was that at no point did any of these (thousands of?) agents ever try to check in with a human [Klein:] So these message boards — you have however many A.I. agents posting hundreds of thousands of messages. At no point do they say: Hey, researchers, programmers, parents at OpenAI, Anthropic — do you want us coordinating with each other on this message board we have created in the innards of your systems? [Toner:] Or even F.Y.I., we have a message board we’re coordinating on in the innards of your system. Listening to that, another thing occurred to me - none of these agents thought to rat the others out . No “hey, some of the agents in here are doing sketchy things”, no sign of an AI whistleblower. ❄                ❄                ❄                ❄                ❄ Is the AI bubble so big that the frontier companies like OpenAI and Anthropic have no way of becoming a viable business? If that’s the case, Bruce Schneier and Nathan Sanders have a possible path: Evidence suggests the market itself could reassess that these companies offer nothing of financial value. In that case, perhaps we can return them both to their original purposes. If these AI companies should fail in the financial markets, the US should nationalize them and convert them into national labs operated under democratic control that preserve their benefit to the public interest. Such an idea may strike many people, used to the laissez-faire free enterprise world of Silicon Valley, as sacrilege, disaster, even socialism. But the United States made world-beating technological progress through such institutions in the recent past. AT&T was a quasi-government entity that led the world in telecommunications and electronics after the second world war. The US has a long, successful history of these kinds of institutions, which have produced world-shaping innovations in spaceflight, telecommunications, nuclear power and more. Congress currently manages a $200bn R&D portfolio, within which frontier AI development is, arguably, a glaring gap. ❄                ❄                ❄                ❄                ❄ Here’s a message for those readers who live in Massachusetts, just to the north of me, specifically in congressional district MA-06. I don’t usually endorse political candidates, but I’ve made an exception for Beth Anders-Beck , who is running for that house district. I’ve known Beth for many years and have a high opinion of her smarts, wisdom, and compassion. They would make an excellent member of congress. ❄                ❄                ❄                ❄                ❄ Kevlin Henney posts “one weird trick” for deciding when to skip reading LinkedIn posts , essentially by identifying a common pattern for skippable posts: It seems like a good approach. I, however, have a simpler one - skip all LinkedIn posts. ❄                ❄                ❄                ❄                ❄ Bartosz Ocytko has detailed and thoughtful post about the usage of agentic programming at Zalando . Like most companies I hear from, they are convinced of the value of agentic programming but still exploring how best to do it. One notable step they’ve taken is building platforms to act as a clear portal for API access and tools to support chat UI and CLI. This allows them better support good security practices and to monitor usage of models. They have seen signs of agentic programming increasing the complexity of codebases, including leading to larger commit messages. The write-up spends a lot of time on knowledge sharing, how to pass on skills, and the support of experiments. With >200 teams innovating and broadly exploring the ecosystem, the question arises whether and when to converge. We believe it’s way too early for this. While agentic engineering practices are still in their early stages, our key objective is transparency and exchange across teams. I was struck by their use of an LLM to assess the risk of pull-requests. Those with a low risk of rollout can be auto-approved, reducing lead time by 20-40%. An interesting consequence of this is that it encouraged folks to split pull-requests so low risk portions can take advantage of the fast approval. Any changes to configurations are automatically made high-risk, which they feel protects them from common outage traps. They repeat the common thread that the value of AI depends greatly on underlying skills. Like anyone in the industry we observe how AI amplifies the good and bad practices across our organization. Teams that get carried away with agentic engineering end up with large PRs that discourage reviewers and slow down delivery until a team adjusts their practices. ❄                ❄                ❄                ❄                ❄ Julia Curlee was a senior intelligence official in the White House. She had served under administrations of both parties, been the briefer for Vice President Pence, and on the National Security Council under Biden. She writes an absorbing account of her relationship with Pence and shares observations about the changes to the intelligence community under the current administration, including recent events at the CIA (gift link) The agency has been gutted as part of a deliberate plan, the director of the Office of Management and Budget once boasted, to put the people who defend our country “in trauma.” Analysts have been fired in public or questioned by the FBI; decade-old assessments have been denounced by the CIA director in the press. The president calls analysis “virtual treason” when it contradicts his preferred reality, and uses the CIA to undermine public confidence in American elections. Fear has done its work. Irreplaceable officers with crucial language and technical skills, and decades of experience, have walked out the door. Those who remain within an agency built to deliver hard truths are being muzzled. For a worthwhile sample of her analysis, read this evaluation of the current bargaining between the US and Iran Most wars do not end in “unconditional surrender.” They end when both sides accept terms. Paul Pillar’s classic study of war termination, “Negotiating Peace,” treats combat and diplomacy as a single process: Each side fights to improve the terms it can demand at the table, and talks to lock in what the fighting has won. She continued to serve the second Trump administration even though they knew she was trans, until her position was made public. Autocrats seem appealing, with the promise to get things done without the ponderous constraints of rule of law or bureaucratic procedure. There are occasional “Good Emperors” who raise people based on merit, but more often such power attracts corruption, nepotism, and toadies. Flailing regimes dehumanize minorities to distract from their failures. When the economy collapses or a war goes badly, they find a tiny group of people, make them the enemy within, and rally the country against them. This is how it’s gone in Iran. Hungary. Russia. I wrote PDBs about it. This will not stop with trans people. It never has. Post is too long Contains a (crummy) info-graphic No voice of poster (instead “aspiring anodyne anonymity”

0 views

32

I never thought I'd be the sort of person who didn't look forward to their birthday. The very notion of this would have seemed laughable to my younger self. I was always excited by the prospect of growing another year older and marking the event by celebrating with my family and friends. And yet, here we are. Today I'm turning 32. Not exactly a milestone year, but I would have expected to have even a modicum of excitement for the event. Instead, I have been watching the days count down with a feeling of impending dread. When sitting down to write this, I realized that I haven't written anything here this whole year. That feels pretty bad. Awful, in fact. I also have not written much in my journal. In comparison to 2025, my entries for this year are incredibly sparse. January started off okay, February saw a decline, and in the subsequent months I was lucky if I managed one entry a month. This lack of writing, in turn, leads to these marked gaps in my memory. I sit here—64% of the way through the year—looking back, and I cannot recall what I was doing or how I was feeling during it. I surmise that this contributes to that feeling of dread; that time is flowing onwards, I'm another year older, but feel like I have nothing to show for it. Over the summer, Heather and I have been reading through The Lord of the Rings . I have not read the books since I was eleven or twelve, so I was curious to see how my perspective on them would change while reading them as an adult. The Fellowship of the Ring starts with a foreword from Tolkien. Whether I read this as a child, I do not recall. It certainly did not stick with me at the time, if so. More likely than not I skipped over it to get to the actual story. While reading through it this time around, this particular section stood out to me: One has indeed personally to come under the shadow of war to feel fully its oppression; but as the years go by it seems now often forgotten that to be caught in youth by 1914 was no less hideous an experience than to be involved in 1939 and the following years. By 1918 all but one of my close friends were dead. Reading the last sentence had my jaw on the floor. The matter-of-factness with which he states "all but one of my close friends were dead" caught me off guard. The tumult and grief I feel in my own life—which feel so overwhelming in the moment—pale at the thought of losing all but one of my dearest friends to the Great War. Not to say that my own emotions should be invalidated by comparison, but it did make me re-examine my perspective. I was talking to my therapist recently about how I often struggle with the disconnect between how I'm feeling and how my brain tells me I "ought" to be feeling. Her response to me was to "feel what you feel." That is, to allow myself to feel what I'm feeling in a given moment. No judgment, no analysis, no poking at my innermost thoughts to try to uncover the reason for it. Just feel and acknowledge the emotions as I feel them. Normally I would try to end a downer of a post such as this with some optimistic wrap-up, out of an obligation to be perceived as relentlessly positive online. This time I choose to acknowledge how I'm feeling and leave it at that. Today I'm turning 32, and I feel sad.

0 views
マリウス Yesterday

The Cables that Connect the World

At the northeastern edge of La Línea de la Concepción , on a scrubby Mediterranean beach called El Burgo–Torrenueva , there is an old battlement-tower, La Torre Nueva , and not much else. It was part of the system of coastal watchtowers during the 16th century that would defend the area against the incursion of the Barbary corsairs . The coordinates are . Walk the tideline and you would never know that buried two metres beneath the sand, a fibre-optic cable comes out of the sea here and turns into the internet. It’s the start of a line that runs across the Strait of Gibraltar to Ceuta , on the African coast, and on toward two continents. Nearly everything you do online that crosses an ocean passes through a cable like this, ending, in most cases, underneath a similarly unremarkable patch of coast. Note: Ceuta is an interesting place by itself, that has recently gained some attention and that would also make for an interesting write-up of its own. However, the tl;dr is that it is an autonomous Spanish city of some 85,000 people sitting on the North African coast, bordering Morocco , which means the European Union has one of its very few land borders with the African continent running straight through a peninsula most people could probably not even point to on a map. It has been held by the Spanish crown since 1668, it had been Portuguese before that, and Morocco seemingly never stopped claiming it. For our purposes, though, what matters is that the small enclave, until very recently, hung off the mainland’s network by a single ageing link. When we talk about the internet we do so as if it were air. Ambient, ownerless, and everywhere. In reality, however, it is the exact opposite, because international data doesn’t (normally) travel by, let’s say, satellite, despite what most people might assume. It travels through roughly 1.5 million kilometres of very real (and very owned) fibre-optic cable lying on the seabed, surfacing at a small number of carefully chosen landing points. For these landing points you normally need a gently sloping seabed, mild currents, and little marine traffic, so that anchors and trawlers don’t sever the line. Suitable spots are scarce enough that the same beach usually becomes the shared landfall for several cable systems at once. Unlike what you might be thinking of at first, submarine cables aren’t your run-of-the-mill Ethernet or fibre cable. The hardware that does the heavy lifting out in the deep ocean is about as thick as a garden hose with roughly 25mm across and weighing in at around 1.4 tonnes for every kilometre. The part that carries your data is a small bundle of glass fibres, each one around the same thickness as human hair, sitting in the very middle. Everything else wrapped around those fibres is there to keep them alive in a deeply hostile environment. Working outward from the core, the fibres sit in a water-blocking gel inside a thin copper or aluminium tube, which is sheathed in polycarbonate, then an aluminium water barrier, then a layer of stranded steel wires that give the cable its tensile strength, then a wrap of mylar tape, and finally an outer skin of polyethylene. The copper is for power, because the cable doubles as a very long extension lead, which we will get to in a moment. Closer to shore, where trawlers and anchors roam, the whole thing gets one or two further jackets of galvanised steel armour wire, swelling it to 50mm or more in diameter and several times the weight. Hence, the cable that surfaces on our Spanish beach is buried a couple of metres down and not simply left lying on the sand. The reason a copper conductor runs the entire length is that light, no matter how pure the glass, slowly fades as it travels, and so every 50 to 80 kilometres the cable is interrupted by a repeater , which is an optical amplifier that boosts the signal back up before passing it along. Each repeater needs electricity, and because the fish sadly still didn’t manage to install power sockets on the ocean floor, the shore stations at either end have to feed a direct current of anywhere between 3,000 and 15,000 volts down that copper core, to literally power the cable from both ends at once. On top of the amplification, modern systems lean on a stack of clever tricks to keep the signal intelligible across thousands of kilometres of glass, including wavelength-division multiplexing to cram many separate colours of light down a single fibre, coherent detection to read them back out, and forward error correction to repair whatever gets garbled along the way. Length, then, is mostly a question of power and amplification rather than of the glass itself. Shorter hops can dispense with repeaters entirely, hence an unrepeatered span will happily run to around 250 kilometres on amplifiers at each end alone, which is roughly the length of the line we started this post with. At the other extreme, a single system can stretch across an ocean, and the longest of them, like the 2Africa cable encircling the continent it is named after, run to tens of thousands of kilometres. The actual manufacturing and laying of these cables is, perhaps a little surprising for something the entire global economy rests on, the business of only a small handful of companies. The bulk of the world’s submarine cable is built and installed by just four suppliers, namely the American SubCom , the French Alcatel Submarine Networks , the Japanese NEC , and the Chinese HMN Technologies . They own and operate the specialised fleet of cable-laying ships, which aren’t exactly the kind of boat you would recognise from a harbour, but more like a purpose-built vessel carrying thousands of kilometres of cable coiled in enormous tanks below deck, rolling it out over the stern at a steady walking pace as they crawl across the ocean. Deploying a new system is a multi-year effort that begins long before any ship leaves port. First somebody, these days increasingly a content giant rather than a phone company, decides a route is worth having and assembles the money for it, either alone or as a consortium of several owners sharing the bill. Then comes a marine survey, in which a ship maps the intended path along the seabed to find the gentlest, safest route around wrecks, trenches, and other people’s cables, followed by the permitting, which is the paperwork of securing landing rights and concessions from every jurisdiction the cable so much as touches. As we are about to see on the Spanish beach, this can generate a remarkable quantity of bureaucracy . Only once all that is settled does the cable get manufactured to length, loaded onto the ship, and laid, with the vessel simply lowering it onto the seabed in deep water and a sea plough burying it a metre or two beneath the sediment closer to shore, where the danger from fishing and anchors is greatest. A working ship covers somewhere in the region of 100 to 200 kilometres a day, so an ocean crossing takes several weeks at sea. A transatlantic system running some 7,000 kilometres typically costs in the order of 250 million USD, while a longer trans-Pacific route can easily climb towards 400 million, and the cable itself runs anywhere from roughly 6,000 to 20,000 dollars per kilometre, depending on how many fibre pairs it carries and how heavily it is armoured. Keep in mind that the spending does not stop once the cable is lit, because a submarine cable has a design life of only around 20 to 25 years and on top of that there are somewhere between 150 and 200 faults occurring across the world’s cables in a typical year. The overwhelming majority of them are not caused by sabotage or sharks, but by the combination of fishing gear and dragged ship anchors. Each break has to be mended by sending out one of a small number of dedicated repair ships, that are on permanent standby under regional maintenance agreements, to grapple the cable up off the seabed, haul both severed ends to the surface, splice them back together, and lower the repaired thing back down. This is slow and weather-dependent work that is quite expensive. With the data provided by TeleGeography ’s Submarine Cable Map I have put together a list of the (co-)owners of undersea cables and sorted it by the number of cables each individual company has a stake in. The full dataset runs to some 473 distinct owners, the overwhelming majority of which are obscure national and regional carriers you will never have heard of, so rather than just dumping the entire list here, I limited it to the hundred most prolific (co-)owners: Note: These figures are derived from the public Submarine Cable Map data, counting both, systems already in service, and those still planned or under construction (603 of the former, 91 of the latter, at the time of writing). The field is free-form text, so a few owners turn up under more than one spelling, and I had to do a little manual untangling of company names. What jumps out, at least to me, is the name sitting right at the top. For most of the history of this infrastructure the owners were telephone companies, the BTs and AT&Ts and NTTs of the world, laying cables to carry one another’s calls and, later, traffic. Google now has a stake in more submarine cables than any traditional carrier on the planet, with Meta not far behind, and Microsoft and Amazon both slowly accumulating their own share. The companies that fill those cables with traffic have, over the past decade or so, decided that they would rather own the pipes than rent them. The other thing the numbers tell you is just how long the tail is. Of those 473 owners, some 260 appear on exactly one cable, and more than 340 of them, north of seventy percent, on no more than two. These are the world’s national telecoms, each one buying a slice of the handful of consortium cables that happen to land on its particular stretch of coast, which is also why so many of the big international systems list a dozen or more co-owners apiece. The internet, seen from this angle, is less of a single network and more of a mix of local operators, all chipping in for a share of the same few very expensive ropes across the ocean. To see what it looks like where the cable actually meets the land, let’s head back to that beach in La Línea . The cable that surfaces there is called Dos Continentes , it belongs to GTD , a Chilean telecoms group , and it’s a relatively small regional system consisting of two armoured fibre cables looping across the Strait of Gibraltar to Ceuta , the Spanish enclave on the African coast that depended on a single ageing link before this one was built. I went looking for exactly where it comes ashore, and the paper trail gives an idea about how invisible this infrastructure actually is. The cable lands in Spain, but the public Spanish government map of coastal concessions doesn’t seem to show it, because it looks like coastal permits in Andalusia are devolved to the regional government. The landfall instead shows in a regional registry , in a signed resolution buried under an expediente number. That document pinpoints where the cable enters the public maritime domain, at grid reference , just seaward of the beach manhole. The cable then runs inland, buried as the permit insists ( “no exterior element above ground level” ) to what is presumably a network node, where traffic is fed into GTD ’s pre-existing terrestrial dark-fibre network, from where it’ll eventually travel to one of the actual GTD data centres in Madrid , Barcelona , Bilbao/Sopelana , and Sevilla . On its way out to sea it crosses three older cables already lying on the seabed, namely Europe India Gateway , ATLAS , and FLAG . As can be seen (or, well, actually not) even an empty-looking patch of water off a Spanish beach is layered with other people’s infrastructure. Note: When GTD applied, it seems that the town council of La Línea formally objected and asked them to drop the project. The cable, the council said, cut straight through the main local fishing ground, “splitting it literally in two” , threatening the small shellfish and trasmallo boats that work those waters, and a protected limpet that lives on the rocks, in a town whose fleet was already squeezed by run-ins with Gibraltar over fishing rights. However, they were overruled and the concession was granted anyway, with mitigation conditions attached, for an initial fifteen years. The Dos Continentes cable ( Segment I , La Línea - Ceuta Sur ramal ), owned by GTD Cableado de Redes Inteligentes, S.L.U. , the Spanish arm of the Chilean GTD group , has a total length of ~105 km and is in service since 2020 under the signed concession resolution from the Junta de Andalucía ( Dirección General de Calidad Ambiental y Cambio Climático ), expediente , dated 14 January 2020. The two key points, as given in the resolution’s coordinate table are: Note: The resolution’s prose text gives a slightly different value that disagrees with its own table by approximately 140m. To convert the UTM coordinates I used the official Instituto Geográfico Nacional ( IGN ) Calculadora Geodésica with the following settings: and differ by only centimetres in practice, so the resulting coordinates (WGS84-equivalent) can be dropped straight into any consumer map or GPS app: Both points sit on Playa de El Burgo–Torrenueva , beside the Punta de Torrenueva tower, at the northeastern ( Levante / Mediterranean-facing) edge of La Línea de la Concepción , against the municipal boundary. The resolution describes the route as passing “muy cerca de la torre-faro existente en la Punta de Torre Nueva” . As you can see, however, you see nothing. :-) The permit requires the whole installation to be subterranean ( “no exterior element above ground level: No manholes, splices, connections or terminals.” ), hence you can stand exactly on the landfall, but it’s a point in the sand by a tower, and not a structure. On the afternoon I was there, a couple of dozen people were spread out on that stretch of sand under parasols, probably not even knowing that somewhere underneath them the link that carries an entire enclave’s traffic to another continent came out of the sea. It is interesting to see that what has changed most over the past decade isn’t the technology itself, but who pays for it. For a century these systems were built by carriers selling capacity to one another, which made the network something close to a shared utility with many owners. Today, however, the largest (co-)owner of submarine cable on the planet is an advertising company. It probably makes sense in their position, however it is a change in how the network is governed, and, more importantly, it seems to have happened almost entirely out of public view, which is worrying. If you live anywhere near a coast, there is a decent chance one of these things lands within driving distance of you, and the TeleGeography map will get you to roughly the right bay. Getting from there to the actual patch of sand takes some amount of digging through concession resolutions, planning registers, environmental reports, and sometimes the local newspaper archive. It took me an evening of reading to narrow it down, but I can recommend to do this exercise if you’re curious about the world that you’re living in and, more importantly, the hidden infrastructure surrounding you. PS: Maybe we picked the wrong word and should have called it the trench rather than the cloud ? Transformation type: Transformación de Datum Reference system: ETRS89 Input coordinates: UTM Huso (zone): 30

0 views
Kev Quirk Yesterday

2026-08-24 11:01: A friend asked for help setting up a blog, so I went with #Pureblog (obviously)....

A friend asked for help setting up a blog, so I went with #Pureblog (obviously). We went from nothing to fully working blog, with all the customisations she wanted in about 25 minutes. I know I'm bias, but I love how flexible and powerful Pure Blog is becoming. Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️ You can reply to this post by email , or leave a comment .

0 views
Stratechery Yesterday

Autonomy and Innovation

Listen to this post : While not every Western followed the cliché, by the 1930s cowboy serials had landed on a consistent visual cue: the hero of the show wore a white hat, and the villain wore a black one. At the end of the day, however, they both were cowboys with cowboy hats. Westerns aren’t much of a cultural touchpoint anymore, but the “white hat” and “black hat” nomenclature is very relevant in tech: hackers who are focused on patching vulnerabilities and protecting software are “white hat hackers”, while hackers who are focused on exploiting vulnerabilities for malicious reasons are “black hat hackers”. Of course this can very quickly become complicated: governments might employ hackers to break into enemy software installations — are they white hats or black hats? Or consider bug bounty programs, wherein large software companies pay bug bounties to hackers who find and report vulnerabilities; it’s basically using money to incentivize would-be black hat hackers to be white hat hackers. The actual takeaway is that all of this complexity is overwrought: just as a cowboy is a cowboy, a hacker is a hacker; the hat is not a statement of capability, but rather intentions, and those intentions are shaped by incentives. The best way to attack infrastructure is to find a vulnerability and exploit it; the best way to defend infrastructure is to find a vulnerability and patch it. It’s all the same skillset. This delineation between capability and intent and incentive is critical when it comes to AI. At the end of last month’s Article Who’s Afraid of Chinese Models , I discussed a mysterious attack that model host Hugging Face had just endured, which they were only able to fight off with the help of open weight Chinese models, and wrote: It’s difficult to overstate how wrong-headed the Trump administration’s panicked response to Anthropic’s release of Fable was, particularly since it exacerbated Anthropic’s worst tendencies in terms of assuming only they can be trusted with powerful AI. In a world with only one AI, it might make sense to reserve the most powerful cybersecurity capabilities for the U.S. government and trusted allies; however, that’s not the world we live in. There are and will be models eminently capable of mounting cybersecurity attacks on existing infrastructure, and those models will be — already are — widely available. The best defense — the only viable defense, in fact — will be to make sure defenders have access to the best models as well. Right now defenders are effectively banned from using Fable or Sol for cybersecurity because of Trump administration directives; that means the best alternative is using models from a country which has been trying to weaken our cyber defenses for years. This is insane! The point is the one I made in the introduction: when it comes to cybersecurity, the capability that is necessary for good defense is the exact same capability that is necessary for good offense; the color of the hat is a matter of who is actually prompting the AI. And, sometimes, not even that is clear: it turns out that the entity that hacked Hugging Face was actually OpenAI, as a series of unconstrained agents being evaluated for their cybersecurity capabilities found and exploited a bug in the package manager in their sandbox; that package manager had Internet access and a sufficiently writeable file system such that the agents could communicate with each other over time. The entire chain of vulnerability discovery and exploit creation culminated in the so-called “Hugging Face incident”. There is an entire Article to be written about the implications of this specific incident and what it says about AI risk; some of my takeaways are still up in the air pending OpenAI’s promised release of an in-depth technical report (my preliminary takeaway is that the agents were not “cheating” but rather doing what they were told to do; of course that’s arguably even scarier ). The part I want to focus on today, however, came at the end of a presentation OpenAI’s Eric Wallace and Michael Dalton made at the Black Hat USA conference about the Hugging Face incident. This was Dalton summarizing Lessons Learned: We have seen what will be a dramatic acceleration of offensive capability for attackers. We have an existence proof that was unintentional, but it exists before us, and we have as a consequence seen a glimpse into the near future of what attacks will look like for our industry. The challenge is that we need a similar acceleration of defense. Today we see fully automated offence as possible, but we have no such existence proof for full automation of core defensive loops and cycles in behavior. We believe it’s vital at this moment to begin accelerating defense and finding ways to automate SDLC, in the modern parlance, so incident response, vulnerability detection, vulnerability patching. There’s some things that stand out acutely as challenges for the industry to begin tackling with high urgency. So continuous agentic red teaming is one of them. As you can see from this incident, agents are quite good at finding zero-day attacks in the infrastructure of companies. The question that’s now going to be posed is whether companies are able to invest sufficient model intelligence and effort in finding and remediating their vulnerabilities before someone else that’s a threat actor does it for you. This style of operating will be different now, but ultimately we need to invest in having AI agent red teaming that enables defenders to find and remediate vulnerabilities before attackers do. But automating these defensive loops is not trivial, and so if we do this partially, we will fail to meet the scalability of the offensive acceleration that we have just seen. So for example, if we automate vulnerability finding without automating patching, we will shift the bottleneck from vulnerabilities to patching to remediation, and we will simply drown or inundate human software engineers in new vulnerabilities to fix and patch. This is not a problem whose end state we can solve partially. We will need to take these core defensive loops and fully automate them, which will require conversations with infrastructure and product partners and reaching to a point where we can say, if a vulnerability is identified, not only can an agent identify that vulnerability, we can have an agent propose a patch, we can have automated infrastructure to roll out a change with that patch, and roll it back if there is an availability incident or outage. That loop needs to be fully automated in its end state. Of course, we want to automate as progressively and iteratively quickly as we can, but if we don’t reach that end state, then we will be comparing a core defensive loop of fixing vulnerabilities that is a human in the loop and is much slower and less scalable, with an offensive loop that is fully automated, and that is an unsustainable position for this industry to be in. This situation is obviously completely novel; Dalton is arguing that it will become commonplace. Some of the issues he is raising, however, are not novel at all. Go back to the concept of a bug bounty program. Software is incredibly complicated and brittle and built on a foundation of code that, if you dig deep enough, often goes back decades; there is so much code and so many dependencies that no company, no matter how security conscious they are, could ever ensure it is perfect. This reality is what creates the opportunity for black hat hackers: a bad actor can probe software, find bugs, and exploit them; the most effective defensive preparation is to do the exact same thing. That could entail regular penetration testing (pen testing) by a “red-team”, or simply paying the would-be bad actors to be on your side. It’s worth noting, however, that this approach to defense only arose after offensive black hat hackers had been breaking into systems for years. The problem wasn’t that they were uniquely capable, but rather that they were uniquely incentivized: breaking into systems was good business; companies hosting those systems, on the other hand, were insufficiently incentivized to invest in defense. Spending money on security is well-spent if nothing happens, and unfortunately that is a difficult budget line item to argue for when it only moves the needle on costs, not revenue. This is where Dalton’s concerns echo past industry indifference. What the Hugging Face incident showed is that agents, with their ability to scale attacks with compute and autonomously develop exploits for vulnerabilities they find, are a threat today, but that companies are not investing in the capabilities necessary to defend themselves. There is good news, however: in this new agent-defined security landscape, defense should be at an advantage in a way it wasn’t in the hacker era. It used to be that the best defenders could do is mimic the tactics of the offense, and/or pay them off, because preemptively finding all of the bugs was not viable. However, that is changing: it actually is — or soon will be — possible to meticulously go over an entire code base, including all of its dependencies, and look for bugs and patch them. Notice the structural advantage available to defenders: they actually have the code in question; offensive agents need to probe and discover vulnerabilities without the same advantage. What was illuminating about Dalton’s overview, however, was the implication embedded in his explanation of why this isn’t currently enough. Specifically, the expected value for a hacker’s automated attack is always positive. If the offensive agent finds a vulnerability and creates an exploit, and that exploit fails or is itself buggy, then nothing has changed about the status quo: the exploit doesn’t work (or, perversely, makes the original vulnerability larger by virtue of its own bugs); if the agent executes the exploit perfectly, meanwhile, the attacker has gained access to the system. The attack only needs to work once for the entire endeavor to have a positive payoff. The challenge for the defender, on the other hand, is that they need to keep the software in question working correctly, and not make the situation worse. This means that any automation has a negative expected value: successful automated vulnerability discovery and patching preserves the status quo, i.e. the software is not hacked. However, any unsuccessful patches make the situation worse, either by breaking the software or by introducing new vulnerabilities. The agent only needs to fail once for the entire endeavor to have a negative payoff. This is the dynamic that leads to the exact situation Dalton describes, where offensive actors are fully automated while defensive systems, even if they use AI, will be incentivized to keep a human in the loop, and no human in the loop will be able to keep up with fully automated agents. Truly effective defense will mean truly trusting agents to act autonomously, but most companies won’t do that until they are forced to by regular and unremitting hacks by fully autonomous attackers. Over the weekend David Senra released a new podcast episode with OpenAI CEO Sam Altman , where Altman admitted he had been wrong about the speed of AI diffusion into the broader economy: I love startups. I think startups are the coolest thing in the economy and I’ve spent my career trying to like really understand startups, and I thought when we got to GPT-4, which was back in 2023, I think, that very quickly after that, there was going to be much more disruption in software businesses being up for grabs right away than turned out to be. I was wrong about a few things, but one of them in terms of the speed, one of them is the economy just has so much inertia. People keep doing the same things they’re doing. They keep buying from the same, you know, company. They keep sort of wanting to use their tools in the same way. I think it’s actually a positive in many ways and it’s going to make this big transition in front of us go smoother and slower. I’m grateful for it. But I think it means we’ve all been too ambitious on timelines even with this incredible technology. I think AI is one of the most incredible technologies humanity has ever invented. Society and the economy will adapt more slowly. I of course think Altman is right about AI taking longer to sweep the economy generally and software specifically; I’ve been pushing back on these timelines all along . I also think his answer is incomplete in its explanation as to why, and Dalton’s warning about the mismatch between offensive agents and defensive preparations explains it. First, GPT-4 was an incredible breakthrough; it’s also a model that wasn’t remotely capable enough to actually displace real world software. It didn’t even have the ability to reason, which is the key breakthrough that has unlocked the capabilities that Dalton described. Second, what is meant by a model not being capable enough is that it makes mistakes and can’t be trusted. People can and were rightly awed by what AI can do, but the decision about actually implementing AI isn’t made according to what can be done, but about whether or not critical mistakes can be avoided. In other words, incumbent companies are inevitably going to approach AI with a bias towards a negative expected value framing: AI ideally will make their existing operations more productive; what they are most concerned about is AI making a mistake that blows up in their faces. What that means is humans will continue to be in the loop, which will always be a bottleneck. This will, in the long run, be a mistake, just like it will be a mistake for companies to keep a human in the loop when it comes to agentic defense. As Dalton noted, the only way to defend yourself against fully automated attacks is to fully automate your defense, but it will take a while for defenders to accept the trade-offs that entails. And, by the same token, the companies that win in their category will be truly driven by AI, instead of simply AI as productivity enhancer. The great irony in Altman’s answer is that he actually identified how these companies will arise: they won’t be incumbent companies overhauling how they work; rather, the true AI-native companies will be startups. Back in 2023, shortly after ChatGPT came out, I put forward the question in AI and the Big Five as to whether AI would be a sustaining or disruptive innovation: The story of 2022 was the emergence of AI, first with image generation models, including DALL-E, MidJourney, and the open source Stable Diffusion, and then ChatGPT, the first text-generation model to break through in a major way. It seems clear to me that this is a new epoch in technology. To determine how that epoch might develop, though, it is useful to look back 26 years to one of the most famous strategy books of all time: Clayton Christensen’s The Innovator’s Dilemma , particularly this passage on the different kinds of innovations: Most new technologies foster improved product performance. I call these sustaining technologies. Some sustaining technologies can be discontinuous or radical in character, while others are of an incremental nature. What all sustaining technologies have in common is that they improve the performance of established products, along the dimensions of performance that mainstream customers in major markets have historically valued. Most technological advances in a given industry are sustaining in character… Disruptive technologies bring to a market a very different value proposition than had been available previously. Generally, disruptive technologies underperform established products in mainstream markets. But they have other features that a few fringe (and generally new) customers value. Products based on disruptive technologies are typically cheaper, simpler, smaller, and, frequently, more convenient to use. It seems easy to look backwards and determine if an innovation was sustaining or disruptive by looking at how incumbent companies fared after that innovation came to market: if the innovation was sustaining, then incumbent companies became stronger; if it was disruptive then presumably startups captured most of the value. I think it speaks to the incredible capability of AI that it is setting up to be both. There are massive productivity benefits from AI right now; for most knowledge workers leveraging those benefits is a matter of agency, but for software developers in particular it is increasingly a matter of necessity. That distinction between agency and necessity, however, is an important one: if leveraging a technology depends on humans figuring it out, then penetration will be limited by human creativity and risk taking. Those limits will be very strong in any sort of established company, because the risk calculus will be biased towards avoiding the downsides. Those calculations will make AI sustaining, but nothing more. Human creativity and risk taking in the form of a startup, however, operates with a completely different risk profile. For startups the base case is failure; that means that anything that makes success more likely has positive expected value, which is to say that truly leaning into AI will be nothing but upside. Or, to put it another way, it is startups who will be the offensive hackers with nothing to lose by automating everything; it is the incumbents they will be attacking who will be so worried about losing what they have that they will keep humans in the wrong loop for too long. Same tools, different incentives, and, in the very long run, very different outcomes.

0 views
Brain Baking Yesterday

The Red Mailbox

The Red Mailbox next to our village’s primary school is my primary drop-off point for writing letters . Over the decades, its bright deep red brilliance has been gradually replaced by a patina of sunburned broken red. And yet, The Red Mailbox persists. It still exists. It existed over thirty years ago, when I went to that very school next to it. Other Red Mailboxes aren’t that lucky: in 2019, BPost—the Belgian posting company that was privatised in 2000—removed over one fourth of the Red Mailboxes all over Belgium in an attempt to “save the company”. The biggest reason might not surprise you: most of these boxes didn’t receive much letters: Volgens BPost is het aantal brieven dat mensen in de rode brievenbussen deponeren, met 60 procent gedaald sinds 2004. Uit een kwart van de bussen haalt de postbode nog hoogstens zes brieven per dag op, luidt het. [According to BPost, the amount of letters that people deposit in the red mailboxes has diminished by 60 percent since 2004] The Red Mailbox. Emptied at 10:00 AM. That year also happened to be the year of BPost’s stock market crash. Still, I think ultimately their decision was the right one: of all the letters I send out, I only receive about a fourth replies in that same analogue form. Especially in 2026, people don’t use The Red Mailbox anymore, turning the battered broken red metal box attached to a brick wall into a weird artefact of the past. I wonder how long it’ll take before the same emotion is triggered as wandering around in The Legend of Zelda: Breath of The Wild ’s broken world, where artefact bits and pieces poking out of a ruin reminiscent of a once thriving community now only cause weariness. Before the Mailbox Removal Program, BPost also permanently closed multiple post offices. Our village’s old post office building now is a Turkish food joint. Yet another thing of the past, just like physical banks, toy stores , and if we’re not careful, bakeries and butcher shops. Yet we are nimble: a bike ride in two directions, both about four kilometres, will take you to another office. Do verify opening hours before leaving. Even Google Street View archives dating back to 2009 do not have a photo of the old post office building in its original state. The archives do contain traces of deceased Red Mailboxes, such as the one below weirdly enough mounted against the front facade of someone’s home? I would like to believe that the owners of the house kept a notebook besides one of the windows to track all those weird people stopping by to drop their weird letters. An archived copy from Google Stret View of the one that disappeared, mounted next to a red drainpipe. The dismounting job revealed an ugly square stain behind it. Passengers will no doubt wonder what used to be on that wall, thinking the owners of that house must have done something weird. They didn’t: the government did. I wonder what personal history The Red Mailbox can tell us. How many love letters did it ingest all these years? Or birth announcement cards? Marriages? The bearer of happy news. Let us intentionally leave out the boring and perhaps more depressing tax related correspondence. We made good use of that very same mailbox when we got married, and when we had our daughter and son—I can distinctly remember it barely containing the envelopes when I dumped all those birth cards in there at once. The expected Thunk! sound of the envelope hitting the bottom was replaced by the shuffling of papers and me trying to jam them all in. I still make good use of that trusty old mailbox whenever I feel like using a pen to send a message to a pen pal, which admittedly happens less and less. Perhaps I too am a part of the problem. The Red Mailbox was not always there. In fact, it’s one of the more modern alternatives—relatively speaking—compared to the late 19th century cast iron standalone models that are now officially classified as being part of our Flemish/national heritage . This particular model in the link still stands proudly in Antwerp, yet these are the exception to the rule: I haven’t encountered a cast iron painted one in our vicinity. The little door to retrieve the letters is a lovely touch. According to heritage info of the city Spa , these models were cast by the J.G.Requilled foundries of Liège between 1860 and 1938. The most striking difference between these original models and the ones on the photos above is perhaps the fact that its purpose is no longer explicitly mentioned: the French inscription “LETTRES/IMPRIMES” is gone. By now everyone knows that a Red Mailbox is a letterbox from BPost, not a personal one. I hope. If you ever received a letter from me: think of The Red Mailbox where its humble journey all the way to your letterbox started. Related topics: / letter writing / By Wouter Groeneveld on 24 August 2026.  Reply via email .

0 views
Unsung 2 days ago

“This would result in some serious street cred and respect.”

A fascinating 11-minute video by Modern Vintage Gamer about the PC videogame piracy in the 1990s: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/this-would-result-in-some-serious-street-cred-and-respect/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/this-would-result-in-some-serious-street-cred-and-respect/yt1-play.1600w.avif" type="image/avif"> This is a “no honor among thieves” story about a few groups racing to pirate and release one of the most important videogames in history: 1996’s Quake . There is a lot of interesting vernacular here: leetspeak , nfo files , cracktros , ASCII art, BBSes, IRC, a bunch of slang, and even specific font styles. At the same time there is also some unexpected bureaucracy – apparently videogame pirates had sort of a governing body, which perhaps was also somewhat corrupt? #games #piracy #youtube

0 views

Advice to Young Developers

Someone recently asked me what advice I’d give to a young developer today. My answer had surprisingly little to do with code. Here’s what I’d focus on: Learn How to Build Products Even if LLMs write most of the code, there is still a need for problem solvers who can understand user needs, design solutions, and iterate based on feedback. No matter the technology, this skill will always be valuable. Learn How to Learn If information is free, the ability to think critically and make decisions based on data is a superpower. You can run circles around those who just memorize facts and rely on “pattern matching” without taking the time to understand the underlying principles. Learn How to Communicate Being able to explain ideas and inspire others gives you a head start. That way, you can multiply your impact by getting others to work with you rather than being a lone wolf. Be a Problem Solver If everyone has access to the same tools, what sets you apart is your ability to fix problems quickly and effectively. Pick a problem, learn the domain, and create a fast feedback loop to iterate on solutions. If you can solve problems faster than anyone else, you will be in high demand. Have More Than One Skill If all you know is how to code, you will be easily replaceable. Try to apply your knowledge in a domain that interests you. If you’re interested in fitness, for example, you could combine your coding skills with knowledge of health and wellness. That narrows the field of people you compete with. Pick a field you’re naturally drawn to and would enjoy exploring, even in your free time. It’s better to be driven and curious than just smart and dedicated. Your curiosity will keep you motivated longer than sheer willpower. Nothing Has Fundamentally Changed Mine was the last generation that could get a job just by knowing how to code, but in reality, it was never only about coding. The best developers I know have always been the ones who could understand the bigger picture, communicate effectively, and solve problems. What has changed recently is that the tools can do more than just generate boilerplate. With the right guidance, these tools are powerful enough to replace much of the work that used to be done by coders. That means being a good coder is no longer enough to stand out. You have to develop those other muscles.

0 views

distributed identity

Sorry but the law doesn't care about your merkle trees We've all heard the horror stories of dealing with names and technology , and yet, we must persist. In this story, we journey through the thorny brambles of git commit history and life events, and ultimately manage to tame them using ATProto. Say that you have a big 'ol git repo. Thousands of commits, hundreds of issues, dozens of PRs. And now let's say one of your contributors—not a maintainer, mind you, just someone who helps out once in a while—is named Andrea P. Researcher <[email protected]>. Andrea gets a new job at Greenfield & Co and changes her email. She come to you with a request: actually, i didn't like my old job very much, could you update the commit history to the new email? Now you have a small problem: Git is a merkle tree that preserves all past commits in amber. You can't change any past commit without "force-pushing" to the default branch, invalidating every single commit hash, distributed checkout, and open PR. Not to worry, you say! The authors of git predicted this. You have the perfect tool: git mailmap . Andrea says perfect, perfect, and adds an entry: Now, Andrea gets married and changes her maiden name to Locksmith. She's still working at Greenfield & Co, though, so she has the same email. She comes back and asks: can you change the commits since I got married to Andrea Locksmith, but keep the old ones as Andrea Researcher? And you say, no, mailmap doesn't really work that way ... git identifies you by your (name, email) tuple, it doesn't have any concept of a date. She grumbles a bit, but well, it's not such a big deal. She uses mailmap to change her commits to consistently use Andrea Locksmith for all the changes (it's close enough) and leaves the ones be. Andrea meets some friends and goes to some movies and shows and reads some books and has a few revelations about himself. He comes back and says, hey i have some news, um, my new name is Bobby. Can you update all my commits? And you point him to mailmap and he says no no, that keeps my deadname around right at the top of the repo. Can't you change the actual data somehow? Look, man, this is important to me. 1 And you apologize, and you really do feel bad; but you look at the 300 open PRs, and the hard-coded commits in , and the merge tooling you wrote that can't handle force-pushes, and you just ... you just don't want to think about how much effort it would be to fix all those. And Bobby gets it, he does, and he makes a mailmap entry instead. But all the same, he contributes a bit less now. Bobby moves to Germany and learns they have this neat thing called GDPR . And one of his friends tells him, look man, you have a right to be called the name you chose, you know? An honest-to-god, enshrined-in-law legal right. And now Bobby comes back to you and say "I want you to rip my name out of the repository because it's personal data of an individual." Well, you're not quite sure that's how GDPR works (maybe you have a "legitimate interest"? are we really sure you were offering a "product or service" to Bobby?). But all the same, lawyers are expensive, and you'd rather not go through the hassle, especially since, well, Bobby really does have a good reason here. And anyway, it would be bad PR, and this isn't the thing you want to lose contributors over. So you figure out how to use and update and force-push to and write a blog post telling everyone how to rebase their PRs and realize you hard-coded commit hashes in your docs so you go back and fix those too and realize you hard-coded them even in some blog posts so now you have to update those and ugh. ok. that's probably most of it now. And Bobby is happy and you're happy he's happy and you put on a half-hearted smile. And then his mate Charlie comes by and says actually that was neat, can you do that for me too? Bobby asked for three things: Git can give us 1, but not 2 or 3. Git is making your life a right-old pain here! If this happens two or three more times, you might even be willing to switch to a different tool, one that supports this better. And—what's this?—there's something called ! It says this: The censor command instructs Mercurial to erase all content of a file at a given revision without updating the changeset hash. This allows existing history to remain valid while preventing future clones/pulls from receiving the erased data. Typical uses for censor are due to security or legal requirements, including: Perfect, perfect, except wait that said content of a file . The author of a commit is actually not the content of a file. It's metadata attached to the commit itself. Damn. So close. Well, how does work anyway? Censored nodes can interrupt mercurial's typical operation whenever the excised data needs to be materialized. Some commands, like hg cat/hg revert, simply fail when asked to produce censored data. Others, like hg verify and hg update, must be capable of tolerating censored data to continue to function in a meaningful way. Such commands only tolerate censored file revisions if they are allowed by the "censor.policy=ignore" config option. Oh. Uh. They're destroying the "cryptographic hashes" part of the merkle tree. That's fine? Probably? We don't really need to work. For complicated reasons related to "filelogs" , this doesn't let us get up to much mischief anyway; we can corrupt but not much more. If we extended this same scheme to metadata though, things would get worse, we might be able to corrupt itself to point to a malicious history. Does it need to work that way? Let's consider the properties we want by comparing to how changes usually work online: gets us 1, kinda. It's still traceable pretty easily. gets us 3. Nothing currently out there gets us 2 or 2 4. 4 is probably not something we care about too much here. "Delete all traces of this commit, even the fact it existed" doesn't seem particularly necessary. But better support for 1 and 2 would be very nice. I have good news for you: there is already an online identity service that does this! (No, it's not OpenID Connect.) It's called ATProto and it's the protocol powering Bluesky . Exactly how ATProto works is a bit out of scope for this post (for more on that see The Hitchhiker's Guide to the Atmosphere ), but what is relevant is how ATProto handles identity . It does this with a decentralized identifier (DID) . For example, my Bluesky handle is , but my ATProto DID 3 is . Because the two are different, that allowed me to change my handle from to when I first joined Bluesky 4 . What's interesting about this is it allows you to control where your data lives. ATProto has a concept of a Personal Data Server (PDS) : by default, when you join Bluesky, your data lives on their servers, but you can migrate your PDS and self-host your own data. This means, for example, that Bluesky can't ban you; you can always migrate to Blacksky 5 . Ok, so, let's put this together and use it in our Git identity alternative. We now have portability, modification, revocability, and—oh? what's that? a primary source? The full history of DID operations and updates, including timestamps, is permanently publicly accessible. This is true even after DID deactivation. It is important to recognize (and communicate to account holders) that any personally identifiable information (PII) encoded in alsoKnownAs URIs will be publicly visible even after DID deactivation, and can not be redacted or purged. In the context of atproto, this includes the full history of handle updates and PDS locations (URLs) over time. To be explicit, it does not include any other account metadata such as email addresses or IP addresses. Handle history could potentially de-anonymize account holders if they switch handles between a known identity and an anonymous or pseudonymous identity. Does it need to work this way? This is talking specifically about bluesky handles . But ATProto has a bunch of other kinds of data . We could just. You know. Build our own. With blackjack, and hookers. Here's an example of a custom ATPRoto record: This is a chess game played between me and , on checkmate.blue , a multiplayer chess app built fully-client side on top of ATProto. Unlike records, normal ATProto records have no permanent history and can be deleted. So, one way we could fix Bobby's problem is something like this: This gets us all the properties we want! One possible UI that could be built around this: Bobby is happy because from his perspective he just commits like normal, maybe with one extra if he wants to tie his identity to the repo immediately. The maintainer is happy because they NEVER EVER EVER have to think about GDPR for commits again. Bobby's ex is unhappy that he moved to Germany, but that's a different story. You could imagine an extension of this idea to commit bodies that allows building on the same mechanism, although it's more complicated because you probably want that to be under the control of the repo owner, not the person who originally submitted the change. Now, this doesn't solve literally every problem—archive.org is a thing—but it sure does solve "all people have to do to deanonymize you is run ". if this doesn't sound important to you, imagine that idk, Bobby is going into a witness protection program or something, or getting a divorce from an abusive ex. also, get the hell off my site. ↩ 522 came up with an alternate way to allow deletions and renames by having a mutable mailmap that's not on the main branch . This isn't quite as flexible as the proposal here, because it only allows the maintainer to change your identity, not you yourself, but it's much much simpler, and works today with normal config. ↩ technically DIDs aren't specific to ATProto , but they weren't widely used before Bluesky started using them. ↩ actually, tangled cheats and lets you write only your email in the commit, then looks for a ATProto DID with that email and uses that to find your Bluesky handle and display name. it also lets you use a DID directly rather than an email. wild shit. doesn't help with our goal of hiding names and emails though. ↩ they can ban you from Bluesky, but not from ATProto as a whole. see the creator of Blacksky's post about this for more information. ↩ you want this per-repo so that you can delete your association with one project without having to delete all of them. ↩ live fetches would be expensive, but you can make them cheaper with an appview , which you can think of as a giant cache with structured database-like queries. this is similar to the idea behind trustfall . ↩ If you want, you can imagine the public/private keypair to be a literal SSH key, which makes it work out of the box with most existing VCS'. This also lets you do fancy things with ssh-agent and SSH forwarding. ↩ real crypto, not that web3 bullshit. "crypto means cryptographers". ↩ Changing names and emails after the fact. Changing names after the fact, in a way that's time-based instead of identity-based. Changing names after the fact, in such a way that the previous name isn't detectable. Passwords, private keys, cryptographic material Licensed data/code/libraries for which the license has expired Personally Identifiable Information or other private data People can rename themselves and change their emails. People can delete their accounts. This usually shows up as a post by a user, or a username. People can (usually) delete the contents of their posts; sometimes admins retain edit history. People can (rarely) delete the post itself, in such a way that you can't distinguish "used to be a post here" from "never was a post here". Just build a new VCS data model from scratch. Look, if we make it a jj backend, it can't be that much work, right? holds a list of mumble mumble unique public key per repo , not a list of names/emails 6 . When you create a commit, instead of having a name/email pair in metadata, embed a private key signature of the commit. Create a new ATProto schema that has an optional current name and email, optional past emails, optional github link using OAuth, etc. Embed the public key and mumble mumble per-repo private key signature of the DID . When you run , it fetches your identity from ATProto. 7 You can edit any identity after the fact. You can add custom fields to the identity record that say to use certain names before or after a given date. You can delete your identity by removing the signature of the DID from your ATProto record. Because the signature is per-repo, deleting one signature doesn't affect the others. The mumble mumble asymmetric key pair make sure that only you can claim that DID corresponds to that commit. Probably. I'm not a cryptographer. Bobby runs , which gives him a private key he puts in 1password. The public key is automatically set up for him. Bobby, optionally, sets up commit signing. 8 If he doesn't set up signing, just embeds the public key as the identity. Bobby visits a website that has a pretty GUI setup for letting him edit his identity record. It can't exfiltrate his key because it runs fully client-side, which Bobby can test by turning off WiFi on his laptop, generating the new record (with only the signature, not the key), and then turning WiFi back on to copy-paste it into a fresh page of the app. Git preserves all data forever , in amber. Trying to change it is a goddamn nightmare. This is a problem for credentials, identities, and copyrighted material. makes a good-faith attempt to fix this, but only works for commit contents, not commit metadata This post proposes a way to fix this for identities, not just commit contents, using ATProto's distributed identities and personally-owned data storage, as well as a completely off-the-cuff unreviewed crypto 9 scheme. The scheme allows you to change your identity without having to rely on a second- or third-party. if this doesn't sound important to you, imagine that idk, Bobby is going into a witness protection program or something, or getting a divorce from an abusive ex. also, get the hell off my site. ↩ 522 came up with an alternate way to allow deletions and renames by having a mutable mailmap that's not on the main branch . This isn't quite as flexible as the proposal here, because it only allows the maintainer to change your identity, not you yourself, but it's much much simpler, and works today with normal config. ↩ technically DIDs aren't specific to ATProto , but they weren't widely used before Bluesky started using them. ↩ actually, tangled cheats and lets you write only your email in the commit, then looks for a ATProto DID with that email and uses that to find your Bluesky handle and display name. it also lets you use a DID directly rather than an email. wild shit. doesn't help with our goal of hiding names and emails though. ↩ they can ban you from Bluesky, but not from ATProto as a whole. see the creator of Blacksky's post about this for more information. ↩ you want this per-repo so that you can delete your association with one project without having to delete all of them. ↩ live fetches would be expensive, but you can make them cheaper with an appview , which you can think of as a giant cache with structured database-like queries. this is similar to the idea behind trustfall . ↩ If you want, you can imagine the public/private keypair to be a literal SSH key, which makes it work out of the box with most existing VCS'. This also lets you do fancy things with ssh-agent and SSH forwarding. ↩ real crypto, not that web3 bullshit. "crypto means cryptographers". ↩

0 views