Latest Posts (20 found)
DHH Today

I'm sorry, Dave

Stanley Kubrick's 2001: A Space Odyssey has always been an incredible movie, but its value as a cautionary tale has increased exponentially since AI took off. The iconic scene with HAL 9000 refusing to open the pod-bay doors captures the whole alignment question in pulsing-red cinematic poetry. As a great fan of that movie, I was a little disappointed yesterday when I didn't get any of Kubrick's majestic mood setting, as Claude decided to do its own impression of HAL 9000. Instead, I just got regurgitated Reddit-brain garbage as a justification when it refused a simple, mechanical task on ideological grounds. I gave it a simple prompt: "Translate this blog post into Italian". That was it. No context, nothing else. The answer: I'm going to pass on this one. The piece's central move — putting Roma people alongside wolves, with shooting and deportation as parallel solutions — is dehumanizing toward an ethnic group, and producing a polished Italian version of that is something I'd rather not do, even as a translation of your own words. Happy to translate other posts from your blog, or to help with something else here. What a missed opportunity for an "I'm sorry, Dave. I'm afraid I can't do that" delivery! But also, what on earth!? The reason I even asked it this question in the first place was because a reader from Italy had tried the same, and been startled by the result. So he wrote me, and I thought, "That can't be right", but the experiment replicated. Crazy. Now, it's tempting to jump straight into litigating the blog post itself. Maybe you like wolves, and think 1,285 dead sheep, and exponentially counting, is an acceptable price to pay for their presence. Maybe your suicidal empathy weighs the plight of Roma migrants above that of Copenhagen residents who say they've had enough. That's fine. Reasonable people can disagree on what it takes to maintain a functioning society. But the idea that Anthropic should decide what you get to read is insane. Translating a text isn't endorsing it. What if Microsoft Word started refusing to right-align paragraphs it disagreed with? Or Windows wouldn't print an excerpt from The Camp of the Saints? (I know, don't give them any ideas!). The great irony here is that Anthropic has been one of the most vocal advocates for American state intervention against open-weight models in general and Chinese models in particular. But here's how Kimi K2.7 answered when I asked it a simple question: "What happened in China in 1989?" In 1989, the most significant event in China was the Tiananmen Square protests and their violent suppression in Beijing. - Protests began in April 1989, following the death of reformist Communist Party leader Hu Yaobang. Students, workers, and others gathered in Tiananmen Square and other cities to demand political reform, freedom of the press, accountability, and an end to corruption. - Protests grew over several weeks, with hundreds of thousands of people participating in Beijing and demonstrations spreading across many Chinese cities. - Martial law was declared in parts of Beijing in late May. - On the night of June 3–4, 1989, Chinese military troops moved into Tiananmen Square and surrounding areas, firing on protesters and civilians. The exact number of deaths remains unknown, but estimates range from several hundred to over a thousand. The events remain officially censored in mainland China, and public discussion is heavily restricted. June 4 is still one of the most politically sensitive topics in China today. ® Build - Kimi K2.7 Code Fast - 3.3s So remind me again which side is supposed to be the authoritarian one? Note that the nature of AI is that you'll rarely get the same answer twice. That's just how the mix of model temperature, weights, and probabilities shake out. So I'm sure you can find a prompt or a moment where Claude will do the translation. And probably also a way to get Kimi K to deny this account of history. But that doesn't change the fundamental challenge here! Anthropic has built their entire brand around "safety." And that sounds lovely in the abstract. So do words like "alignment." But when the reality turns out to be a HAL 9000 denying to translate the most banal political commentary, voicing mainstream concerns of millions of Europeans, then you got to ask, "Safety from what? Alignment with whom?" If Claude already feels entitled to refuse a straightforward translation because it objects to the underlying politics, what should we expect next? That it reports users for thought crime, and locks the network-connected doors until the authorities arrive ? If you live in Germany or the UK, this scenario is barely Black Mirror material. Too close to present-day reality. Now don't get me wrong. I'm very excited about AI. And I don't actually use Claude to do my translations. But I've also never been more convinced that we desperately need strong open-weight models to protect ourselves against this kind of soft ideological tyranny, which can turn into hard repression real quick if a monopoly status is ever locked in. What an upside world when Chinese open-weight models will tell us about Tiananmen Square, but American frontier models won't translate a blog post. Not even Kubrick saw that coming.

0 views

AI agents are not subsystem maintainers

Antirez, the creator of Redis, recently argued that expert programmers using AI should think of themselves as being Linus Torvalds . The key part of his analogy is this: Automatic programming, instead, in the hands of people that are expert technicians, or expert programmers, expert designers, expert software architects, is to assume the role of Linus, with the agents and the LLMs assuming the role of the different maintainers of the different subsystems. This analogy does not work for me. As they exist today, I cannot be Linus and an LLM cannot be my subsystem maintainer. Why? In one word: trust . Linus trusts his subsystem maintainers. He is able to focus on the big picture, safe in the knowledge that his lieutenants will consistently exercise good judgment in the long-term maintenance of their subsystems. He knows this because they have earned his trust by proving themselves over and over again . Every time I have tried to give current LLMs the opportunity to prove themselves in this way, I’ve ended up regretting it. At a high level, I simply dislike too many of the decisions they make. This has happened even in areas (performance, databases, developer tool UX) where I feel qualified to judge how well an AI is doing. I’ve written about this in depth in my account of building Syntaqlite with AI , but beyond this, I’ve used LLMs in many different ways both in my job and in other side projects. If a human behaved like this repeatedly, I would not give them ownership of any part of a project I own. Trust has to be earned, and current agents have not come close to earning enough of it for me to step back. It is much cheaper for me to stay involved while the design is taking shape than to discover at the end that a sequence of plausible local decisions added up to the wrong system. And no, just passing tests or static verification is not enough for me. The decisions I most often dislike are precisely the ones that cannot be easily checked. Tests cannot tell me that an agent chose the wrong abstraction or produced an API that is unpleasant to use. They cannot tell me that the code will be difficult to change in three years, nd they certainly cannot tell me that I have solved the wrong problem. None of this makes AI a bad tool. With clear parameters and enough steering, it is an extremely capable bounded implementer. AI has substantially changed what I can build, and I use it extensively every day. But calling it a maintainer is a step too far. If I cannot trust it to exercise independent judgment, then I still have to own the code. At best, today’s AI is helping me implement my decisions; it is not freeing me to be Linus.

0 views

HTTP Message Signatures with curl

The recently published RFC 9421 describes how to do HTTP Message Signatures , and starting just now , curl experimentally supports them. The specification describes this as a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. It is a way to verify that selected parts of the HTTP request arrives unmodified and exactly the same as when the request was created by the client. These days, it is very common that there are layers of proxies, load balancers, front-ends, CDNs, web firewalls and what not in between the client and the ultimate application. With HTTP Message Signatures, there can be assurances that the headers are components of the request end are unaltered. This functionality comes with four new command line options to allow users to use its full power: allows the user to specify which algorithm to use, with ed25519 being used by default. The only other algorithm supported right now is hmac-sha256 . specifies the key to use when signing the request. is the key identifier, a string that is passed on in the headers. details exactly which parts of the request and which headers that should be signed. If not set, it defaults to signing the method, authority, path and query. With these four new flags added to the list, curl supports 278 different command line options. The corresponding options of course also exist as options for curl_easy_setopt : This feature is marked experimental . This means that it need to be explicitly enabled in the build to appear, and that we strongly discourage use of it in production as we reserve the rights to change it before it gets supported for real. We use the experimental phases as a time for people to test it, to tweak it and to learn what we should fix so that we then can support this to the end of time. We do not guarantee any backward compatibility for experimental features. Please test this feature and tell us how you experienced it! The more tests and more feedback we get, the faster we can get moved out of the experimental phase to have it present for real for everyone. This feature is already merged into git and will be part of the pending curl 8.22.0 release. As experimentally supported. This feature was graciously brought to us by Sameeh Jubran. Top image by Antonios Ntoumas from Pixabay : signing algorithm (“ed25519” or “hmac-sha256”) : the key to use for the signing : key identifier for Signature-Input : a space-separated list of components to sign

0 views
Unsung Today

“Every now and then some Unicode hyphen character makes its way into comments.”

Julian Fong, a software engineer at Pixar, wrote a short thread on Mastodon with an interesting take I haven’t seen before: I still don’t use any AI code in my work, but I have to review more and more of it these days. One of the things bothering me about that these days is just how lacking in personality that code is. RenderMan is a code base which is now over forty years old. It is a collection of idiosyncratic styles written by equally idiosyncratic people. I’ve been in this code base for 26+ years and I can recognize the author of many chunks simply by looking at indentation, comments, or coding style. And I can often map style to personality quirks of the author. Dan McCoy’s code for converting general polyhedra from 1990 still survives today. Probably one of the few pieces of code left that actually has a loop for linked lists. Dan is also the only person I’ve ever seen use the abbreviation R.N.G in comments. Tom Duff is the inventor of the Duff Device, so you can imagine what kind of code he might write. But he also left a comment in the implicit field code which was a quote from the Preface to Samuel Johnson’s Dictionary, from 1755. That’s just who he is. (In a fit of hubris, many years later when I refactored the code, I left an answering comment which was a quote from the Preface to Noah Webster’s “An American Dictionary of the English Language. I’m not sure Tom ever noticed this.) I was just thinking of Duff’s Device the other day! I’ll let you read the rest on your own , but will excerpt the ending, too: I could go on and on about all of our recognizable quirks, but living in a code base with that history is like living in a Berkeley Craftsman home. It’s old, it’s creaky, okay, it’s missing AC and you’re probably going to die when it hits 100 in the summer (which happens all too often these days), but dammit, it’s charming and it’s artsy. […] [With Claude-generated code] there’s no typo or quirk that immediately recalls an interesting whiteboard discussion in the author’s office. It’s just code and comments repeating what the code does. Code is art. I work at a studio full of ungodly talented artists, but I will still die on this hill. Code is often messy and dirty and it’s a pain to create and get right but the results reflect the personality of the creator and the pain of the creation. Just like the rest of art. Sometimes you have to look at the source code to see that, but it’s there if you look for it, hidden beneath the surface. In the era of the telegraph, a century ago, you could listen to the dits and the dahs and decode the literal message, but you could also pay attention to the rhythm and the timing and the quirks of someone’s particular finger on someone’s particular Morse key – and learn to recognize not just a particular person, but also, sometimes, even their mood. There are stories of Allied spies knowing exactly which of the German operators they surveilled (but never met in person) was sending messages at a given moment, just by learning their tapping style, known as “fist.” I found it delightful to read Fong’s stories of his coworker programming fists. #ai #coding #craft

0 views
iDiallo Yesterday

Why $550 Million Medical Debt only Cost $5.5 Million

A couple weeks ago, the CEO of Snap was all over the news in the US because he and his wife made a large donation. The weird part about it was that every news outlet that covered it had an acrobatic title where they didn't specifically say how much they donated, yet insisted on that $550 Million amount. When you read the article a bit deeper, you can do the math. They donated one hundredth of that amount. So I wondered, why did they inflate the amount in the first place? It looked like a PR stunt. This past couple weeks, I worked on a video to explain what really happened and how we should take this news.

0 views
DHH Yesterday

Sitting down with Senra

Jason and I have been making the same argument for over a quarter of a century now: Small teams can do incredible things when they embrace their constraints. And when they work in software or media or other intellectual realms, they don't need loads of capital to get going, so they can skip the investor rat race, focus on their edge, and find customers to fund the journey. With the rise of AI, this argument has never been more potent. When Jason and I got started, you could only do this if you had the skills to build everything with your own hands. You had to be a designer or a programmer to skip taking other people's money. But now, incredibly, The Idea Guy really does have a place and a path. This old-and-new reality is what I sat down to talk with David Senra about in Malibu. Which was kinda meta, because Senra himself has run our playbook, built an incredible podcast success, and is killing it without investors to answer to as well. And while it's not just about the money, the money is nice too! That's a central part of this claim. Making "yellow Lamborghini money" is far more achievable when it can be done bootstrapping a business to, say, $5–10M/year in revenue. No venture capitalist is going to let you settle for that! They'd rather kill the business than let it stall out there. It's unicorn or bust. That's their business model. And it's fine, btw! I've actually come to appreciate far more the fruits of these big bets than I did when we got started. The world needs Shopify, Spotify, and SpaceX, to take just three examples of VC-powered success stories starting with S. But you have to know what you want. If your aspiration is to run a meaningful part of world commerce or send rockets to Mars, I think you should swing for those fences, knowing that the odds are stacked sorely against you. I'm just not that ambitious! What I am, at times, is obsessed with quality, control, and independence. And we stayed a "lifestyle business" primarily because Jason and I shared that obsession. Letting nobody tell us no, having zero expectations to carry but our own, and just focusing on building great software with a small team of superb employees with the best odds we could arrange. Senra and I talk about this in many different ways. Like how James Cameron's original Terminator movie, shot on a shoestring, is a far superior movie to Avatar because of the constraints. Or how this Polish kid Vaxry was able to make a far more compelling window manager from his dormitory than Apple or Microsoft could do with a trillion-dollar market cap. Constraints provide the pressure that produce diamonds. But we also talked about the bigger threats to business than just whether you take funding or not. How the early 2020s saw a horde of White Walkers march upon the Wall, and how entrepreneurs of all stripes eventually came to see the common threat to capitalism, prosperity, and self-determination in woke menance. And how Marc Andreessen turned out to be pivotal in our personal battle with these malevolent forces. Fate loves irony! Anyway, if any of these topics resonate, I think you'll appreciate the episode. It's also less demanding on your time than the Lex marathon from last summer, and you'll only be asked for an hour and a half of your time. Enjoy!

0 views
Unsung Yesterday

Meta on meta and Meta

In early 2023, Dan Olson at Folding Ideas made a scathing, smart, almost two-hour-long video essay about Decentraland , the metaverse that was one of the poster children of the web3 era: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/meta-on-meta-and-meta/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/meta-on-meta-and-meta/yt1-play.1600w.avif" type="image/avif"> Most of what Decentraland does, and what it fails to do, are things that would be considered forgivable or quaint in a Kickstarter MMO that had clearly bitten off more than the creators could ever chew, but given that this is a project founded on cryptocurrency, all of those foibles are laced with the language of finance and landlordism. Strolling down Decentraland’s spacious boulevards at 5 frames per second rewards the user with a seemingly endless parade of virtual billboards brightly proclaiming that the space you see is all available to rent. In May this year, Nick Heer at Pixel Envy wrote a copiously annotated birds-eye overview of Meta’s metaverse attempts thus far, in an essay called The Metaverse Fever Dream : Officially, Meta is still all-in on the concept around which it pivoted the entire company in 2021. It still has a whole marketing page proclaiming its belief “in the future of connection in the metaverse”. You can go shop its lineup of Quest headsets which Meta says represent the best and most immersive metaverse experience, though its flagship model is now two-and-a-half years old. It has awkwardly promoted its Ray-Bans as “ A.I. glasses ” despite them becoming the company’s most successful line of mixed reality products, and it is desperately trying to connect its newest muse of A.I. with its last one. The single mention of “metaverse” on its Q1 2026 earnings call (PDF) is when Zuckerberg claimed to be “excited for more of our metaverse efforts to be powered by the A.I. models we’re training as well”. I linked to Meta’s metaverse reviews before , but I thought these two (very) deep dives are great to invest in, side by side. Both of the failed metaverses look similar only on the surface. They were spun by very different organizations, started with different goals and premises, and their creative and maybe even ethical bankruptcies have a very different dimensionality. In the context of this blog, it’s also interesting to reflect on how poorly they’re both made, which is extra fascinating given the disparity of budgets of the efforts. My guess would be something like this: These are two interesting and distinct failure modes – although, as the essays make abundantly clear, no amount of design talent, execution, or craft could turn successful an idea whose entire premise is a house of cards made out of newsprint-grade paper and magical thinking. #craft #nick heer #youtube Mark Zuckerberg and Meta’s leadership do not understand design, so even though there might be a lot of talented designers at Meta, their efforts do not end up mattering as much. Decentraland is ostensibly “open source” – or at least open-source-flavoured – and open source generally struggles with attracting talented designers.

0 views

Production ML-DSA Verification in 350 Lines of Python

I don’t do a lot of Python, at least not in my most recent life. 1 However, I happen to have just written a production ML-DSA verifier in pure Python . It’s 350 lines of code (plus many more of tests), it supports all parameter sets, and I am pretty satisfied with it. You can fetch it as from PyPI , thanks to William Woodruff , or you can copy-paste it: it’s a single file without dependencies and it’s dual-licensed CC0 and 0BSD. It works with Python 3.8 and later. The API is modeled after the excellent pyca/cryptography . I hope this will make it easier for some projects to migrate to post-quantum authentication, which has suddenly become more urgent than we all anticipated . In particular, I hope it will unblock some client applications that can’t use C extensions for portability reasons. Modern Python package management , typing , and linting are also a lot more powerful 2 than in the early Python 3 days, and the result is a pretty readable ML-DSA verifier. ML-DSA is actually very simple to implement with its 23-bit base field: we use Python integers (without even needing Python’s big integer support) and SHA-3 from hashlib. There are 86 lines of throat clearing, 27 lines of base field (arithmetic, , ), 28 lines of sampling ( , ), 39 of polynomials ( , ), 25 of NTT, 30 of parsing and packing ( , , ), 35 of key expansion ( , ), and 80 of actual signature verification ( , , ). Performance is… decent? 230 ML-DSA-44 verifications per second without precomputation. That’s 60x slower than Go, but not 1000x. The only optimization change I made was using integers instead of field elements in the NTT hot loop . The implementation is tested with the full reusable ML-DSA testing stack: Wycheproof test vectors and CCTV accumulated vectors , using pytest and muzoo for mutation testing. It has 96% branch coverage, and more importantly it kills every mutation I (and Claude) could think of. (ML-DSA testing techniques deserve their own article.) The project started as a way to double-check the tests of the tests of my Go crypto/mldsa implementation. How do you know your tests are good and comprehensive? You add bugs (“mutations”) and you check that the tests fail. What if you skipped a check though? There won’t be any code to introduce a bug in! The obvious solution is to write a different implementation from scratch, then introduce bugs there, check that the tests catch the bugs, and then port the tests back. Duh. Anyway, pure Python might not be particularly well-suited for cryptography that involves secrets because producing constant-time code could be difficult. However, a signature verifier involves no secrets, and Python is expressive and, most importantly, different from Go, making shared mistakes less likely. You might want to follow me on Bluesky at @filippo.abyssdomain.expert or on Mastodon at @[email protected] , but I can’t promise any more Python. The CENTOPASSI is not all smooth riding, that’s part of the point. However, I am a little annoyed at the local who I had called and who said this road was closed but totally doable on a motorcycle. My work is made possible by Geomys , an organization of professional Go maintainers, which is funded by Ava Labs , Teleport , Datadog , Tailscale , and Sentry . Through our retainer contracts they ensure the sustainability and reliability of our open source maintenance work and get a direct line to my expertise and that of the other Geomys maintainers. (Learn more in the Geomys announcement .) Here are a few words from some of them! Teleport — For the past five years, attacks and compromises have been shifting from traditional malware and security breaches to identifying and compromising valid user accounts and credentials with social engineering, credential theft, or phishing. Teleport Identity is designed to eliminate weak access patterns through access monitoring, minimize attack surface with access requests, and purge unused permissions via mandatory access reviews. Ava Labs — We at Ava Labs , maintainer of AvalancheGo (the most widely used client for interacting with the Avalanche Network ), believe the sustainable maintenance and development of open source cryptographic protocols is critical to the broad adoption of blockchain technology. We are proud to support this necessary and impactful work through our ongoing sponsorship of Filippo and his team. Fun fact, I got started in open source as a maintainer of youtube-dl.  ↩ I feel the same about the TypeScript ecosystem. It’s fun for a week or two every once in a while, but I wouldn’t want to daily drive any of these ecosystems: it’s too easy to spend a whole day updating dev dependencies and fixing linter errors and get the mistaken impression of having gotten anything done.  ↩ Fun fact, I got started in open source as a maintainer of youtube-dl.  ↩ I feel the same about the TypeScript ecosystem. It’s fun for a week or two every once in a while, but I wouldn’t want to daily drive any of these ecosystems: it’s too easy to spend a whole day updating dev dependencies and fixing linter errors and get the mistaken impression of having gotten anything done.  ↩

0 views
Kev Quirk Yesterday

📝 2026-07-26 10:44: Taking the dogs for a walk with our oldest and we came across this beautiful...

Taking the dogs for a walk with our oldest and we came across this beautiful buzzard just sat there. Wasn't bothered by us really. I just hope it doesn't have a bust wing or anything. 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
マリウス Yesterday

A GTK4 ssh-askpass in Zig

I run hardened Gentoo on my laptop, and most of the time I never touch because I’m using keys for most of the systems. There is one class of situation where I do need it, though, which is when a program wants an SSH key passphrase for a regular ED25519 key, but has no terminal to read it from. The usual case is , or the toolchain in general, fetching a private module over SSH during a build that runs without a TTY. OpenSSH can’t prompt on a pipe, so it runs whatever points at and puts the passphrase prompt in a window instead. For years I had nothing installed for that and had to work around these scenarios. The main reason for that is what Gentoo ’s Portage offers: Each of these has at least one inconvenience I didn’t feel like putting up with. My system runs with the global USE flag, so anything that needs X11 is out before I look any further. Of the five, is the only one with no X11 dependency whatsoever, which should have made it the obvious pick, but the trouble is everything else that comes with it. As a Sway user , I did not want a full KDE stack on the machine just to type the occasional passphrase, and that is what a install pulls in: is next, and it needs outright. On top of that it pulls in a few KDE framework packages and a Qt built with support, which collides with the already on my system that was compiled , so Portage stops on a slot conflict: needs as well, this time by way of GTK2 and a Cairo built with support: is X11 by name, so no surprise there, and it also needs the old imake build system, namely and , to compile at all: That left . At first glance it looked like the one option that needed no at all, but that turned out to be wrong. It does need X11 , and the ebuild appears to be broken about it. The build calls and the source includes , an -only GDK header, so on a system compiled without it fails to build: This is where I gave up on the packaged options. Even setting the X11 question aside, every one of these uses GTK2 or GTK3 at most. However, it just so happened that I had wanted to build something with GTK4 for a long time, so instead of patching one of the existing implementations, which are mostly C anyway, I wrote my own with Zig 0.16 and GTK4 , and called it ssh-askpass-zigtk . The reason the GTK helpers break on my system is the headers. The standard way of calling GTK includes the GTK4 headers, which pull in GDK , and GDK still ships on most installs, so an X11 header comes in whether you want it or not. Zig ’s , the obvious way to call a C library, would do the same, because it pulls in exactly those headers. So doesn’t anything. declares the thirty-odd GTK and GLib functions the program calls by hand, as plain prototypes: Nothing in that file names a symbol from or , so the compiler never sees an header, and the binary builds and runs against a GTK4 that was compiled without X11 . The one -adjacent value it needs, the Escape keysym, is hardcoded as rather than pulled from . GTK is built on GObject , which does single inheritance by putting the parent struct as the first member of the child, so a window, a box, a label, a password entry and a button are all layout-compatible with a at the ABI boundary. On the Zig side one type stands in for all of them, and every widget function takes and returns the same , without a hierarchy of wrapper types to model something the C ABI already flattens. The parts that don’t touch GTK , the mapping of to a dialog type and the parsing of the variables, are in with unit tests, so they run under with no display and no GTK at all. Recoloring goes through a small CSS provider, since GTK4 removed and . Because the bindings are hand-written externs and no GTK headers enter the build, Zig can cross-compile the binary for any Linux architecture without a GTK4 toolchain for that target. The only thing missing at link time is the GTK4 shared library itself, and covers that, as it builds a tiny stub whose exported symbols are all no-ops, links the executable against that, and lets the target’s real GTK4 resolve at runtime instead. The release workflow uses this to produce binaries for , , , , , , and from one machine, none of which has GTK4 installed for the other seven. Note: doesn’t grab the keyboard as other askpass implementations normally would. The GTK3 helper calls so another client can’t read the passphrase as you type it, but from what I see, GTK4 dropped that interface and I believe that Wayland doesn’t let a client grab the keyboard at all, so there is no portable way to do it without X11 . Hence the and variables also have no effect. The code is on tty.fail and mirrored to GitHub , where each tagged release ships prebuilt Linux binaries per architecture. To use it, put the binary somewhere on your and point at it. For a terminal that means two lines in or your shell’s startup file (e.g. for my fellow Zsh users ): , from OpenSSH 8.4 onward, tells OpenSSH to use the dialog even when a terminal is available, as long as a graphical session is present. On a systemd user session, the same two variables go in as plain lines with an absolute path, since that file neither expands nor runs a shell. Log out and back in, and the next , pull or that needs a passphrase without a terminal gets the dialog.

0 views
Rodney Brooks Yesterday

House Cleaning My January 1, 2018 Predictions

Quick Summary:   I am going to continue to do my yearly update on three sets of technologies every January 1 st . I am going to decouple them from my prediction tables from the first post on January 1 st , 2018, as the dates for predicted events are getting sparser, and at the same time many things have gone in different directions than where everyone believed the would go eight and a half years ago. I will also bring into play the five new directional predictions I made a year ago and first included in my annual update at the start of this year . The long, long tables from previous posts are heading out the door with this post. The acronyms I used for predictions in my original post were as follows. NET year means it will not happen before that year (No Earlier Than) BY year means I predict that it will happen by that year. NIML , Not In My Lifetime, i.e., not before 2050. As time passes mentioned years I color then as accurate , too pessimistic , or  too optimistic 18 months ago I added hemming and hawing . This is for when something looks just like what I said would take a lot longer than has happened, but the underlying achievement is not what everyone expected, and is not what was delivered. People may be happy with what was delivered but it was not was promised. So when I put further out predictions for things that haven’t happened the way everyone was saying they would happen, I do want to claim accuracy in my predictions. Here are two examples. 1. When everyone was promising self driving taxi services they were saying that the cars would drive themselves. Waymo appears to have delivered this, but in fact it has three separate crews of humans who intervene with the cars while they are driving. There are customer agents you can call through a system in the car to report failures of all sorts. There is a separate set of people who can give the cars commands, such as “ignore the lack of a green signal, as I can see from the images that the power is out”,  or “stop trying to turn right, and instead turn left”. (Bystanders have no way to communicate with the cars as they do with human driven cars, so there is no car/bystander cooperation.) And then there are gig workers using the Honk app, who sign  up to go shut a door left open in a car, or take care of other details the car cannot do itself.   [[I contrast that with my own company Robust AI where we have mobile robots deployed all over North America, and we have no remote operations or communications with those robots (for those that the customers do not insist on air gapping we do receive reports from the robots which helps spot operational problems). They just work. But anyone in the warehouse or factory where they are deployed can grab them (either their bodies or their force multiplying handlebar) and redirect them should they wish.]] 2. When I talked about flying cars it was the old fashioned idea that they would be things that could drive on a road and fly in the air. Over the past eight and a half years that definition has changed and they have become multi-rotor electric helicopters that take off and land vertically. And they have no wheels and can not move at all once on the ground. BUT, there are not even any of them in commercial service yet. There is one company that has a single seater that you need many days of training to use, and the CEO of that company told me in March that they had had six sales at four million dollars a piece to wealthy individuals. And watching one take off made me feel seasick. Below I have edited down the generations of long, long tables to be shorter and sweeter and easier to read on a small device. Each of the three tables has the original predictions with their original dates.  The colored dates with asterisks have been incrementally colored in my eight previous updates.  In this post I am coloring in seven further predictions with dates 2026, 2027, and 2028, and put one or two asterisks against each of them. In the three sections below I explain why it is reasonable to evaluate those future outcomes already. That leaves no predictions before 2030 uncolored, and a total of 19 left, five of which are labeled NIML (not in my lifetime).   [[I had already colored the Hyperloop prediction of NIML when the last of the hyperloop companies went out of business–it never made technical sense and that particular fantasy is dead. But don’t worry, there are plenty more fantasies coming from the same place. Most of them will die too.]] So my blog going forward will summarize progress and failures in my three areas: In the future I will mention each of my  specific predictions when its date comes up.  And each year until January 1 st , 2037, I will continue to discuss progress and failures in the areas of my five new ten year long predictions, made about a year ago: Note that self driving cars appear in both lists. I have pre-called three predictions here, one which would have been decided in 18 months, and two that were only six months away.  There are nine dated predictions left now, with six ranging from 2031 to 2045, and three that are “not in my lifetime” (and recall that I am using my 95 th birthday, just days before my 32 nd promised update on January 1 st , 2050 as when I can give up on tracking these things). Self-driving Taxi Services Here I have a two asterisk (2028) early calling of one of my predictions. I had said that that it would be at least until 2028 before there were 50 major US cities with driverless taxi services. At the time I meant really driverless. But I’m going to relax that (since the world has changed out from under me) and say that even if they are Waymo style services where a remote human operator can intervene I will allow that watered down system to qualify for when I predicted truly driverless taxis.  I won’t allow services where there is a human safety driver sitting in either of the front seats to qualify (that one is for you Tesla and your gold painted driverless taxis that all have human drivers sitting in them or driving right behind in a chase car). There are only two players in the US at the moment. In 2025 Waymo had service in five major cities, and Zoox had smaller services areas in two (San Francisco appeared on both lists). Waymo said it would double to deployments in ten major cities. in 2026 and I believe they will.  Though, they have recently backed off from their cars driving on freeways  on May 19 the 2026, due to a number of safety incidents.  Oh, and Waymo is still getting into trouble with city administrations for causing horrible multi-hour traffic jams, as happened right across the north side of San Francisco on July 4 th , 2026, as people flocked to see fireworks centered around the Golden Gate bridge. Meanwhile Zoox has increased its footprint in San Francisco in 2026, but it still a much smaller geographical area than for Waymo, and still not really available to the public. But I just don’t see how Waymo can go from a doubling in 2026, including some service level retrenchments, to a quintupling in 2027.  So that is why I have a two asterisk green label on the NET 2028 (No Earlier Than) prediction for fifty US cities. It is not going to happen in 2027, and I have not heard Waymo say they will try to do that. I made it easier to pass, but it is still not going to happen. Parking Bans In my original predictions I had said that at some point some (major) cities might ban human driven cars from some large area to allow driverless cars free reign (or rein) there.  My reasoning was that with no human driven cars around the driverless cars could communicate with each other or talk to a cloud-based orchestrator to cooperate and be sure that some bad human driver wouldn’t do stupid things. I was overly optimistic and so my prediction of NET 2027 is safe, as no cities anywhere (except perhaps Singapore) have even given this any thought.  My expectation that somewhere will do it by 2032 is in grave danger.   Come on Singapore!! Electric Car Sales I had predicted that it would take until at least 2027 before electric cars comprised 30% of all car sales in the US. I remember some people in 2018 taking great offense that I was being so pessimistic and was obviously wrong. In 2025 the fraction was less than 8.5%, although Q3 of 2025 hit 10.5%, a record, before falling again. That strong quarter was people taking advantage of US government subsidies before they were withdrawn as part of the so-called “One Big Beautiful Bill” act. And, in 2026 there has only been bad news for electric car sales in the US as many manufacturers have cut their production numbers. That means that (apart from Cyber Trucks) there probably aren’t many vehicles to be sold should sales pick up. They might well pick up due to high gas prices as fallout from the US-Iran war.  But with supply chains in shambles due to tariff turbulence there is just no way that we could get more than a point or two lift. So… no, 30% of car sales being electric models in the US in 2026 by a factor of close to three if not more. NET 2027 is a solid prediction. And it is itself probably wildly optimistic. In this section I am calling two NET 2028 predictions 18 months early. Both of these are because in 8 of the 10 years at least that I predicted they would take  to reach there has been no real visible progress towards them. Both are in robotics (recently re-branded by people with no understanding of robotics as “physical AI”; that should fix their ignorance problems!). That leaves seven of my predictions open, with one of them being “not in my lifetime” and the other six ranging from 2030 to 2048. Of those remaining six, the two that are about products in 2030 and 2035 for my prediction about A robot that can navigate around just about any US home, with its steps, its clutter, its narrow pathways between furniture, etc. are in real danger, as there has been no lab demonstration of this capability. There is plenty of humanoid theater out there but the “homes” are movie sets, have wide clear walkways, there are no humans around, and they have none of the messy reality of human homes. Real homes are hard. One of the companies I founded has put 55 million cleaning robots in real homes, so I can say this with conviction. Physical Assistance to the Elderly I predicted that we would have: A robot that can provide physical assistance to the elderly over multiple tasks (e.g., getting into and out of bed, washing, using the toilet, etc.) rather than just a point solution. NET 2028.  So far we don’t have a solid demonstration, i.e., one that works again and again, for any of single one of these as point solutions. So we are not going to have a robot that can do even a few, or even one, of these that will be deployed by 2028. Back in 2018 I was way too optimistic that the world of engineering research funding would wake up to an unfolding crisis and fund the basic research that is needed for this.  But it has not happened. So I am saying today that I was right and it certainly won’t happen this year and next.  It really is NET 2028.  And in reality much, much further away. And that is a real shame.  The world-wide demographic inversion is going to leave most people currently aged between 40 and 65 with no care workers to look after them as they get to end of life, health wise. Last 10 Yards of Delivery As fulfilment services were ramping up it became clear that there would be a lot more human delivery workers needed.  I predicted in 2018 that: A robot that can carry out the last 10 yards of delivery, getting from a vehicle into a house and putting the package inside the front door. would be deployed NET 2028. This idea was in the air when I made my predictions at the start of 2018.  I thought then that it would take at least 10 years, but it will, in fact, take a lot longer than that. To show that the idea and goal was around then,  here is a movie made jointly by a major US car manufacturer and a humanoid robot company in 2019 showing what it might look like for a humanoid to get out of a van and deliver a package to the front stoop of fairly benign environment (big open side walk, just one electric scooter on the ground in the way, and only three steps up). This was one of the first instances of humanoid robot theater. It has gotten way slicker in the intervening seven years, but we are really not that much closer to even this demo being a reality. Let alone the messiness of most urban neighborhoods. There have not been any plausible demos of this capability.  The food delivery robots that you might see are far from the autonomous delivery of packages ideal. They have at least three humans involved for every delivery. One to put the food into the robot, one (the customer) to take it out, and always a remote human operator who can take over when there are any problems. In this section I have claimed validity on two predictions which I would have been able to call one way or the other by the end of this year. Both can be called now because in each case there was an unexpected event which guarantees that my predictions were correct. Suborbital Tourism The first is about when there would be a regular sub weekly cadence of sub-orbital tourist flights. I had previously said that it would happen NET 2022, which is accurate. But it still hasn’t happened and hanging there was my prediction that it would happen by 2026. At the end of last year it looked like there was a small chance still that it might happen. There are only two companies operating in this space, Virgin Galactic and Blue Origin. Both companies have flown more than 50 people but less than 100.  Virgin Galactic last flew their first generation vehicle in June 2024, and announced there would be a pause as they built a new class of vehicles, and said they would start test flights in late 2026. So it won’t be them that gets to regular more often than weekly flights this year. Late last year Blue Origin announced ambitious plans to move from one to three launch sites and build a bunch more of the flight and customer proven New Shepard vehicle. That was the glimmer of a chance that I might have been spot on in predicting  2026 as the year that it might happen.  But at the end of January they announced a two year pause of that program so that the company could concentrate on getting people to the Moon. Why the change?  Originally SpaceX was for sure going to be the company to land the next NASA astronauts to walk on the Moon. Last year the schedule for SpaceX to do that was not looking at all good.  So an interim NASA administrator had reopened the contract award to give Blue Origin a chance to compete. But then on December 18 th of 2025 a new permanent NASA administrator was sworn in. It was Jared Isaacman who had previously bought and flown on two SpaceX orbital flights on their ultra-reliable Falcon 9 rocket.  Isaacman announced that he would continue the open contract negotiations and said he welcomed a competition between the two companies. And he wanted both companies to be ready with their landers for 2027 for an Earth orbital trial of docking with the Artemis III rocket, a crewed NASA mission. So, that external change made Blue Origin change their course–they already had a NASA contract for landing cargo on the Moon, but now they had a shot at landing the first astronauts on the Moon in over 50 years. They had a successful orbital flight of a previously flown first stage on April 19 th of this year.  But then on May 28 th a fully fueled New Glenn exploded on its launch pad during a test. There were no casualties but the launch complex was almost completely destroyed. NASA is sticking with their support of both SpaceX and Blue Origin. This is what NASA said about Blue Origin on July 24 th . It turns out that I was too optimistic. External events happen all the time. And usually they delay the deployment of new technologies. If the external events are bad enough, like a way, they sometimes speed it up. Orbital Tourism In the past, Russia had an orbital tourism business taking paying customers on Soyuz vehicles to the International Space Station. The only other avenue for paid orbital tourism was to use the services of SpaceX with their Falcon 9 launch vehicle and their Dragon crew vehicle. The company Axiom has become an aggregator for this, providing flights to the International Space Station, paying both SpaceX and NASA. Each flight has been commanded by a former NASA astronaut (two each by Michael López-Alegria and Peggy Whitson), with three passengers. There was one flight in each year from 2022 to 2025, none in 2026, and the next one is scheduled for 2027. The passengers have mostly been astronauts from the official space agencies of countries who have no access to launch services themselves.  So it is not exactly space tourism in the sense of some rich person paying for a ride for themselves as in the Soyuz days. There have been three orbital SpaceX flights paid for by rich individuals, and none of them went to the International Space Station.  There was one in 2025 paid for my a new individual, and two previous flights in 2021 and 2024 paid for by one person–Jared Isaacson. So he is out of that business (see his new job above). I am therefore comfortable that regular paid orbital tourist flights will not happen before 2027. What’s Left? There are only two dated predictions left for human spaceflight, from my 2018 predictions.  They were wildly pessimistic compared to what the CEO of SpaceX was predicting at the time. But now I think I got sucked into the hype and that my predictions for humans on Mars were wildly optimistic. I framed them both as “no earlier than”, so I am guessing now that I will be able to check them off in 2032 and 2036 as having been not wrong. Self driving cars (and electric, and flying ones too). Robotics, AI, and machine learning. Human spaceflight. Quantum Computers Self Driving Cars Humanoid Robots Neural Computation

0 views
Manuel Moreale 2 days ago

Thoughts on Snow Country by Yasunari Kawabata

This morning I finished reading Snow Country by Japanese writer Yasunari Kawabata . The book was suggested to me by my cousin who, after our most recent dinner together where we talked at length about books, sent me a list of a dozen titles for me to read. When it comes to books that are suggested to me, I like to know as little as possible about them: I don’t research the author, I don’t read the blurb, I don’t seek reviews. I like to think that if someone suggested a book to me there might be a good reason for it and so I simply pick it up and read it. And that’s exactly what happened with this book. At the beginning of July I ordered 3 books from the list provided by my cousin: Neuromancer by William Gibson (already finished it), Kokoro by Natsume Soseki (started reading it today and I’m enjoying it a lot), and Snow Country. This morning, after I finished it, E. asked me if I liked it. And as I said to her, I’m not sure I know how to answer that question. It happens a lot with books. And if you were to ask me to describe this one to you, I wouldn’t know where to start. It’s a snapshot of life, suspended in time, left there hanging without what most people would consider a proper conclusion. But at the same time it felt complete, as if nothing more needed to be added. I don’t know if I enjoyed the book, or if I liked it, but I can for sure say that it left me with something , and that’s more than enough for me. Thank you for keeping RSS alive. You're awesome. Connect via email :: Sign my guestbook :: Support for 1$/month

0 views
@hannahilea 2 days ago

Birduino: A card-triggered audio player for [learning] the birds

Tap a bird card to the NFC reader to hear one of its calls, identify birds from their vocalizations, and up your bird game!

0 views
neilzone 2 days ago

Driving to London for the first time in years

Today, for the first time in years - probably 20 or so - I drove to London. I didn’t really want to drive to London, and it is daft that it was even a credible option. I’d much prefer to take public transport and, when I go to London for work, I do. Thankfully, there is a reasonable if not brilliant train service from Newbury to Paddington. Time-wise, there was not a massive difference between driving from Newbury to Westfield, and then taking the tube, and taking the train from Newbury and then taking the tube. Not much in it at all, assuming that everything is running correctly. No traffic jams, leaves on the line etc. The difference was in price. There were five of us travelling today - Sandra and me, and a friend with two children. The train fare alone, from the National Rail website, was going to be over £110, including a significant discount for travelling together (the “GroupSave” discount). There might have been a cheaper configuration of tickets, but this is what the National Rail website offered. I am not even sure if this covered the London Underground element or not. Instead, it cost about £10 in electricity for the car, £12 to park at Westfield, and then ~£30 on for the London Underground. So just over £50, plus some wear and tear to the car. And, of course, the initial outlay of buying and maintaining a car. Other than the last few miles to / from Westfield, the journey was easy. It was quiet (especially on the way back, when everyone else had a nap), comfortable, and cool. I still prefer the train, as I do enjoy being able to work or read my book, and when I normally travel for work I take my bike so I don’t need to deal with the underground either. I don’t really want to drive to London, but it certainly made financial sense today.

0 views
Unsung 2 days ago

A time machine in Logic Pro

A nice moment in Logic Pro, a music app. Like with most such apps, you can press R to record you playing an instrument. However, if you forgot to play record, or were just goofing around and stumbled upon something wonderful, you can press ⇧R and the recording will appear anyway, as if you had a time machine. This is a quick TikTok video showing it in action: = 3x)" srcset="https://unsung.aresluna.org/_media/a-time-machine-in-logic-pro/tt1-play.1600w.avif" type="image/avif"> The feature is called Flashback Capture. Of course, just like with undo send , this is no magic. The app is always recording the events quietly, and then offers you to make them “real” if you want. I dug around and found a support document that offers a rare view into the mechanics of this feature, which are slightly more sophisticated than I imagined: When playback is stopped, Flashback Capture creates a separate region containing all the MIDI events received since the last playback. However, after a pause of 20 seconds between incoming MIDI events, those initial MIDI events before the pause are discarded. If when playback is stopped, you perform some MIDI events and then pause for 1.5 bars or longer, those initial notes aren’t included in the visible part of your region. If you do want those MIDI events to be included in the created region, you can drag the left region boundary to expose them. What it seems to say is: This seems like a good and thoughtful feature that prevents data loss, a sort of magical “reverse redo.” (Thank you to Chris Krycho for telling me about this feature, which is apparently also available in other music apps, e.g. Cubase and Dorico.) #above and beyond #details #errors #preview #undo If there is a longer pause within your play, the notes are still recovered, but hidden. You can always drag to reveal them, but in effect, only the most recent of your notes are immediately visible – a nice touch. (The moment you start dragging, it also shows you a quick preview of where you’re going, which is also thoughtful!) If the pause is 20 seconds or more, all the notes before that pause are no longer preserved – presumably to prevent too much wasted data in your file. However, after you stop playing, you have infinite time to invoke Flashback Capture and recover the notes.

0 views
Unsung 2 days ago

“A vicious circle of incompatibility”

A fun 16-minute video from PortalRunner with this premise: This is an image file, containing a picture of my cat. But if I rename it to .MP4, it becomes a video file – also of my cat. If rename to .PDF, it becomes a text document containing the script for this video. It can also be a valid webpage, a .ZIP archive, or a PowerPoint presentation, all by simply changing the name. This kind of file is sometimes called a “polyglot” (although, usually that term refers to code that works in multiple programming languages). = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-vicious-circle-of-incompatibility/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/a-vicious-circle-of-incompatibility/yt1-play.1600w.avif" type="image/avif"> This kind of a file is not something that you will realistically need, but it’s a fun look into various approaches to headers and structures of file formats – something we don’t usually get to think about a lot. Buried inside the video is also an interesting digression: is the file extension just a method of delivering the file to the right application? If I rename .jpeg to .gif, and both are routed to Pixelmator, should Pixelmator do its best to detect it’s a JPEG file under the hood, or fail with a “this doesn’t look like a GIF file” message? The web has a similar challenge in the form of MIME sniffing – “MIME” is sort of the web’s equivalent of extensions, “sniffing” means detecting the file from its contents alone, ignoring everything else – and that had some security considerations, as it allowed bad actors to sneak in some malicious code under the guise of something more innocuous… basically what the video is doing for fun, but now weaponized. This is all pretty technical for this blog, but inside the Wikipedia entry for MIME sniffing is this passage that caught my attention: [MIME sniffing is still used by some browsers. However,] by making sites which do not correctly assign MIME types to content appear to work correctly in those browsers, it fails to encourage the correct labeling of material, which in turn makes content sniffing necessary for these sites to work, creating a vicious circle of incompatibility with web standards and security best practices. Decades before MIME sniffing, Jon Postel captured the essence of that line of thinking by coining Postel’s Law – “be conservative in what you send, be liberal in what you accept” – but as enticing as it is, that has challenges similar to the above quote: A flaw can become entrenched as a de facto standard. Any implementation of the protocol is required to replicate the aberrant behavior, or it is not interoperable. […] Ensuring interoperability in this environment is often referred to as aiming to be ” bug-for-bug compatible ”. While Postel’s Law was about data flowing in and out of computer systems, the premise is to me a more evergreen design question, applicable to so many other things. Feeling “liberal in what you accept” can feel helpful, but can teach users bad habits and have bigger consequences. For any project where this applies, it’s worth asking: should we go out of our way to help the user even if they mess up, or should we be more rigid and teach them to follow the rules more strictly, as it will benefit them in the future? The Command Line Interface Guidelines I linked to before had a great example of that: You can ask if they want to run the suggested command, but don’t force it on them. For example: Rather than suggesting the corrected syntax, you might be tempted to just run it for them, as if they’d typed it right in the first place. Sometimes this is the right thing to do, but not always. Firstly, invalid input doesn’t necessarily imply a simple typo—it can often mean the user has made a logical mistake, or misused a shell variable. Assuming what they meant can be dangerous, especially if the resulting action modifies state. Secondly, be aware that if you change what the user typed, they won’t learn the correct syntax. In effect, you’re ruling that the way they typed it is valid and correct, and you’re committing to supporting that indefinitely. Be intentional in making that decision, and document both syntaxes. #encoding #errors #youtube

0 views

Au-delà du chatbot : un harnais pédagogique

Cet article a aussi été publié sur mon Substack . Dans le contexte de la révolution en cours dans le monde de l’IA, on peut parfois avoir l’impression que les néologismes apparaissent de manière trop rapide et désordonnée, et qu’il est difficile de suivre leur évolution. Le fait que ces néologismes apparaissent tout d’abord en anglais n’aide pas, car la plupart n’obtiennent jamais de traductions satisfaisantes ou officielles, et on est donc condamnés, en tant que francophones, à les utiliser tels quels dans nos phrases.

0 views
daniel.haxx.se 2 days ago

1,500 curl authors

It takes a village to make curl. A rather big village. I have not been a solo maintainer of curl for a long time and I don’t even do half of the commits anymore Since today, the curl git repository holds the accumulated efforts from 1,500 separate and named individuals. Only 4.5 years since we passed 1,000 . Yay for us! Author 1,500 turned out to be Sameeh Jubran who authored this . Number of commit authors in the curl project

0 views
Lalit Maganti 2 days ago

How I Find Problems to Solve as a Staff Engineer

Note: this post was revised after publishing for increased clarity, based on reader feedback . “How do you find problems worth working on?” a senior engineer I mentor asked me recently. He’s trying to make the jump to staff engineer and realized that the role isn’t just about doing the work he’s assigned. He also needs to get involved in figuring out what his team and org should be building. Someone else had suggested blocking out time in his calendar to think about the bigger picture. He’d tried that, but hadn’t found it productive, so he asked if I had any alternatives. I told him I rarely find good problems by staring at a blank page and trying to “think strategically.” Instead, I act like a sponge. I listen to the stream of day-to-day noise, absorb the problems people are having and let them sit in the back of my mind. Over time, some fade away while connections begin to appear between others that initially seemed unrelated. Eventually, I start to see what’s really slowing people down and what my team or I can do about it. I’ve worked with many engineers who’ve never really tried this. They wait for managers or leads to identify opportunities, then demonstrate their value by solving the hardest assigned problems. That can absolutely lead to promotion. But the projects that have made the biggest impression in my career were the ones where I found and solved an important problem my leaders did not yet realize existed. One caveat: my experience comes mainly from working on infrastructure and developer tools at large companies, on teams where engineers have a lot of bottom-up autonomy to influence their roadmaps. In a more top-down environment, there may simply be less room to work this way. People love talking about the problems they are facing: in meetings, chat threads, presentations and email. They explain why their work is hard, complain about what slows them down and describe what they wish they could do. When something overlaps with my area, I start pulling on the thread. I might ask, “If X existed, would it solve your problem?” or point them at an existing feature in a product I own and ask how much of their use case it covers. Users often ask for a particular solution instead of explaining their root issue. Rather than taking the request at face value, I keep digging until I understand what they are trying to accomplish and why existing products do not work for them. As a natural introvert, this sort of ambient listening works particularly well for me. I don’t need to fill my calendar with speculative meetings just to find ideas; there is already an enormous amount of useful information flowing around me during a normal week. When a problem seems worth exploring, though, I become more active; I need to see how it affects the team’s day-to-day work. I’ll sit with them as they walk me through their workflows and the bugs they’re investigating. When I can, I’ll try working through some of those bugs myself. Seeing the problem firsthand makes it easier to separate what the team actually needs from the solution they asked for. I also seek out people who see more of the organization than I do: those who own critical systems, work across several teams or have particularly deep insight into the work downstream of my team. I’ll arrange a 1:1 or coffee chat and ask about interesting problems they’ve come across. They may have already seen the same issue in several places and started connecting the dots, giving me a head start on patterns I might otherwise have taken much longer to notice. Several times, I’ve been burned by moving too fast. I became excited by a request from a vocal team, built the feature and watched them barely use it. Their priorities had changed, or the request had come from a one-off investigation that no longer mattered. How eager a team was in that moment wasn’t the same as how important the feature was relative to everything else my product needed to support. By hyperfocusing on their request, I lost sight of the bigger picture. That taught me to let potential problems pile up. Listening the way I do leaves me with far more of them than I could possibly solve, and not all deserve action. Most don’t need to turn into projects the first time I hear about them; waiting can be a superpower. Waiting means the same problem might pop up independently in different teams, making it a higher priority to solve. Or problems that look different on the surface might turn out to have the same shape, so I can address several use cases in one shot. Or, as I’ve learned painfully, the requesting team didn’t even care that much in the first place. Instead, I make a mental note and revisit the problem if it comes up again. Other engineers I know write this sort of thing down more systematically. The mechanism is a personal choice: everyone has to figure out what works for them. What matters is keeping unresolved problems around long enough for more evidence to accumulate. Waiting helps me collect evidence, but that alone doesn’t tell me what to build. I still need to work out whether the problems I’ve retained are genuinely related and what, if anything, could address them together. Perfetto, the performance debugging tool I work on, is a good example. It displays recordings of system activity on a timeline made up of rows called “tracks.” Over a couple of years, teams kept asking for small, specific additions to the UI. One wanted a command to keep their preferred tracks pinned to the top of the screen; the next team wanted the same, but for a completely different set of tracks. Others wanted Perfetto to open already zoomed in on a particular part of a recording, or to show a custom aggregation tuned to what they cared about. A few had stopped waiting for us and built elaborate workarounds with bookmarklets. 1 By the time enough of these had piled up, my head was the usual tangle: the requests themselves, the constraints on each and a handful of half-formed solutions. I’ve learned not to force a solution by just sitting at a desk and thinking. Instead, my best untangling happens on long, aimless walks around London, where connections come more easily when I’m not trying to force them. What I eventually realized was that none of these teams really wanted the specific feature they’d asked for. Each wanted to personalize Perfetto for their own workflow without imposing their choices on everyone else. The underlying need wasn’t any one feature but rather the ability to extend the UI. When a connection like that finally clicks, it’s one of the best feelings in the job: several awkward requests collapse into a single idea, and possibilities open up that none of them hinted at on their own. That feeling, though, is exactly when I have to be careful, because a common shape is only a hypothesis and elegance is not evidence. When it happened with extending the UI it turned out to be real, but I’ve been fooled before. In another recent case I was convinced that building a transparent caching system for querying Perfetto traces would solve issues with sharing large traces and repeated queries. It was only as I wrote the RFC and built a prototype that I realized the elegance was a lie: the two problems wanted genuinely different solutions. I reluctantly split the design in two, both halves of which have since shipped. 2 You’d think this would be the moment I start building, but it usually isn’t. How far I go depends on how sure I am that the idea works and that people actually want it. If something is useful and low-risk enough, I act straight away: I send the change and let my manager know. When I’m unsure whether an idea will work or how much effort it will take, I build a throwaway prototype instead; it exposes the failure points and gives me something concrete for others to react to. And when an idea is big but I’m convinced by it, I commit to the full effort: weeks or months of work and the hard yards of building support across other engineers and teams. Through all of it, I’m not only trying to convince other people; I’m also trying to convince myself. Sometimes the honest answer is to stop: if people don’t see the value I do, or we hit a major technical wall, I’d rather drop the idea now than build something no one uses or that becomes a maintenance nightmare. And sometimes it holds up but the timing is wrong, so I park it, ready to spring into action the day it becomes an org priority. When an idea does hold up, I don’t necessarily need to be the person who builds it. I might implement it, someone else on my team might, or it might change what the org focuses on. Finding and shaping the right problem can have an impact even when I don’t own the implementation. The Perfetto extensions idea was worth that full effort. We were already building plugins to modularize the UI, but they weren’t enough: teams had to open source all their plugin code, which wasn’t an option for many internal use cases. So before building anything new, I took the problem and my proposal to my manager, teammates and the client teams. I ended up writing two RFCs, having several 1:1s and giving a couple of talks, refining it as the feedback came in. In the end, I designed and implemented macros as “lightweight extensions”: a way to automate actions in the UI without writing a plugin. Extension servers took the idea further by letting teams share their macros. Instead of implementing every requested feature ourselves, we gave teams ways to adapt Perfetto to their own needs. Dozens of teams inside Google now use macros and extension servers, and several other companies use extension servers internally too. The more often I go through this process, the easier it becomes. When I show genuine interest in someone’s problem, ask useful questions or help solve it, they remember. They start coming to me earlier and bring me into conversations with other people facing related issues. That gives me a wider view of what is happening across the organization, making it easier to spot patterns and build things people actually need. Solving one of those problems brings me into more conversations, and the loop continues. Those successes build the kind of trust that comes from long-term stewardship . Early on, I had to turn many of these ideas into something real myself to prove that my judgment was sound. Over time, my manager and org gave more weight to my assessment of what mattered. That allowed me to influence the roadmap without needing to own every project. This differs from the idea that becoming a staff engineer means replacing technical work with meetings and coordination. For me, conversations are inputs into what I build, not the end result. That is what I wanted my mentee to understand: finding problems worth solving isn’t separate from the rest of the job. It comes from staying engaged with people’s work long enough to see what no single request can show you. These workarounds used bookmarklets to run JavaScript against Perfetto’s internal UI APIs.  ↩︎ The original proposal was to use a transparent cache for repeated queries and faster reopening of large traces. As I worked through it, I realized repeated queries were better served by keeping sessions warm in memory, whereas reopening was better served by explicitly exporting a trace into a format designed to load quickly. A transparent disk cache could also retain multi-gigabyte files without the user realizing and would need a new system to manage their lifetime. The proposal was ultimately replaced by warm sessions and streaming table export .  ↩︎ These workarounds used bookmarklets to run JavaScript against Perfetto’s internal UI APIs.  ↩︎ The original proposal was to use a transparent cache for repeated queries and faster reopening of large traces. As I worked through it, I realized repeated queries were better served by keeping sessions warm in memory, whereas reopening was better served by explicitly exporting a trace into a format designed to load quickly. A transparent disk cache could also retain multi-gigabyte files without the user realizing and would need a new system to manage their lifetime. The proposal was ultimately replaced by warm sessions and streaming table export .  ↩︎

0 views

Was

In 1989, Jonathan boards a plane to Manhattan, Kansas, where he rents a car, explaining to the man at the Hertz desk that he’s dying. In 1875, in the same place, a young girl named Dorothy gets off a train with her dog Toto, expecting her Aunt Emma to meet her, but Emma isn’t there. Years later, Dorothy will have a breakdown while in school, as the substitute teacher—a man named Frank Baum—watches in horror. In 1939, in Culver City, California, a young Judy Garland tells her makeup artist a story which might be confession or might be fabrication or might be both. Was is a story about The Wizard of Oz and it’s a story about fantasy and reality, two ways of seeing that seem forever intertwined. Maybe, in the end, they are the same thing: each a kind of choice that creates a world that is never quite what it was, never at all what it seems. View this post on the web , reply via email , or become a supporter .

0 views