People are sometimes sceptical that providers use extremely distributed residential botnets to scrape, but it’s very obvious, particularly once you have done every thing you’re “meant to” and several steps beyond: when all the robots.txt blanket disallows and Anubis aren’t enough, and then you have to proceed to straight-up disallowing almost every request from a non-logged in user? They just keep trying, only no longer from officially tagged sources.
Here is a screenshot of nóssa’s Shynet analytics. Something happened during May 21–22! Let’s zoom in on those days.
These, too, have given 403s for the last month. Hmmm. Did they all just go to sleep for a month and then retry?
Everyone loves desktop Chrome on Windows.
From roughly the middle of the period, requests from networks identified as “Sky UK Limited”, “CABLE-NET-1”, “TWC-20001-PACWEST”, “COMCAST-7922”, “CITYOFWILSONNC”, “EGIHOSTING”, “CHARTER-20115”, “Virgin Media Limited”, “TWC-11426-CAROLINAS”, “OWS”, “UUNET”, “ATT-INTERNET4”, “Shenzhen Katherine Heng Technology Information Co., Ltd.”, “CENTURYLINK-US-LEGACY-QWEST” …
Many years ago, a wonderful coworker and friend got me the book あなたの知らない超絶技巧プログラミングの世界, English title “The World of Obfuscated, Esoteric, Artistic Programming”. (Literally translated, it is “the world of transcendental programming technique you don’t know”. I’m going to elide “technique” from hereon out, though.)
This book introduces a new way to enjoy programming: transcendental programming. Transcendental programming is the play of using practical programming languages to create completely impractical things […] a kind of program unlikely to be of much use to anyone.
Traditional programming has naturally been associated with a practical perspective, but that can lead us astray. By turning away from earthly gain, we can savour the pure joy inherent to programming. Programs created with transcendental programming necessarily lack practical use, but the creation process itself brings all kinds of awakenings. For example, you may notice unexpected capabilities in everyday programming languages, catch a glimpse of some profound theory underlying programming, or get the opportunity to try algorithms and technologies you haven’t used before.
Someone like you who has gone out of their way to get an entirely strange book like this probably already finds programming fun. But why is it fun? Because you can make things you want to make? Because you can solve your own problems? I do think there is fun in these things. But I believe programming is fun because it is both “creation” and “research”. Creation and research are both enjoyable, even if they aren’t solving real-life problems.
Even if you feel that you don’t particularly like programming, or that you don’t want to program outside of work, by trying for a moment to forget about the obligations of practicality, you may find yourself feeling that programming is actually pretty fun.
And so it is that this book introduces the “useless programming” idea I have presented over the years, and the implementation techniques for it. Naturally, the contents of this book will not directly useful in your day-to-day life (nor should you try to make them so!). However, I believe I can communicate a different kind of enjoyment that programming can carry; let’s enjoy it together.
Iris Meredith’s What’s left to say—speaking to concepts now seemingly alien like virtue, noting that hardline positions have sheared from reality, identifying that slop being in fact broadly desired explains its proliferation more than the tools! —we have plenty of machinery to create many other things en masse —and much more cheaply!— and yet do not— —is what has made now feel like a good time to checkpoint my own feelings again.
What is left to say? I think I have little left to comment on capabilities—they’re spiky (jagged, per Helen Toner1), quite decent at many things, extremely inconsistent, the right harness/prompt/context increasingly one-shots larger and larger things (but see also: “extremely inconsistent”), even smaller changesets carry decisions you have to ask about if you want to understand the premises of those decisions; often ones that do not fully hold, sometimes ones that don’t hold at all, and despite this you will tend, over time, to ask less and less often than you know you should. Gotta go fast!
Overall I have continued to use them at work, as is increasingly measured/expected/required (and I mean at my company, but broadly true of the industry too!), and still I don’t feel there is moral penalty in an individual’s use. But as for work: the pitfalls continue to show underfoot, and I find myself having to contort and constrain my use of them to avoid them invisibly infecting the outcome of the next thing I do. This is as an expert in my domain, with full ownership of it across the entire codebase! It gets really bad when well-meaning people use these things in areas they don’t understand fully23, and it seems not like a far stretch to make this (extremely well-supported) observation and then think: hmm. Perhaps there are deleterious effects yet, even when the understanding is there?
I feel like I digress; am I still talking about capability, on which I said I had little left to comment? In some ways yes, but I want to get at that which isn’t, so let’s adjust our perspective: assume these tools are perfectly capable. They make the correct change, write the feature perfectly, get the answer right 100% of the time. What then?
So you don’t need to learn to program (or whatever your field is), you can just have the thing. What thing is it you needed? Is it satisfactory?, having the thing?
We recently had this experience: enbi is the lovely Operator which builds the things our cluster runs. I was super proud of our efforts here (+1 Kubebuilder), and like, it works solidly. Only taken the cluster down a few times4! It’s incredibly helpful for me, and just, yeah. Gosh.
While evaluating the current era of agentic coding, one thing I thought would be a well-scoped task was to add a web dashboard to enbi; show NixBuilds in the system, live refresh, stream logs from builds in progress, that kind of thing.
And, with not much effort, it worked. I’ve used it ever since then and it’s needed zero effort. While most of it was rote work (add listener, fight html/template, cache in SQLite, &c.), and the resulting interface forgettable, I had no idea how to do the log streaming thing, and it just made it happen!
This was, overall, a bad outcome. Despite reading the diffs closely at the time, I did not gain an iota of understanding, and while I now know, in theory, how to do the thing (though, not having actually gone through the motions myself, could not recall to you now how that is!), what I actually know (of) is this one specific way that happens to do the thing, but cannot speak to any tradeoffs about it whatsoever. I don’t know if it’s a good way to do the thing, a bad way, the only way; I don’t know at all. I don’t know if there was some obviously bad decision made in the implementation. I could speak for the system as a whole before; now there was a sizeable component that was opaque without considerable work, and any such work done to understand it post-hoc—and any outcomes of such work—would necessarily be of completely different character to that if I’d instead actually done the thing myself to begin with.
Now I’m back to k enbi ga and k enbi l -f pod/podwatcher-859ffb94cf-859ffb94cf-8xj27 with the pod name selected by C-t P RET, and if that’s friction, that’s good: to be felt until I care enough to fix it myself, to understand the shape of the problem- and solution- spaces, and the topography surrounding5 them ..
It turns out, for me at least, that having the thing isn’t satisfactory. Even if the tool was 100% capable! Like, remove all the negative “I don’t knows” from two paragraphs earlier:
This was, overall, a bad outcome. Despite reading the diffs closely at the time, I did not gain an iota of understanding, and while I now know, in theory, how to do the thing (though, not having actually gone through the motions myself, could not recall to you now how that is!), what I actually know (of) is this one specific way that happens to do the thing, but cannot speak to any tradeoffs about it whatsoever. I don’t know if it’s a good way to do the thing, a bad way, the only way; I don’t know at all. I don’t know if there was some obviously bad decision made in the implementation. I could speak for the system as a whole before; now there was a sizeable component that was opaque without considerable work, and any such work done to understand it post-hoc—and any outcomes of such work—would necessarily be of completely different character to that if I’d instead actually done the thing myself to begin with.
Is that better? Do trade-offs actually cease to exist; cease to need consideration? Are we starting to think that maybe the concept of a tool which can be “100% capable” is deliriously underspecified? Ignoring the immensity of questions which must needs go unanswered in this hypothetical, suppose the tool now says:
To do this next thing you’ve asked of me, I’ll have to rearchitect the whole thing due to earlier decisions as were made necessarily without unlimited foresight—and I’ll do it immediately now, perfectly.
Are we still happy, as programmers, as thinkers, as crafts[non]people and living beings? Do we press “allow” and consider no more? Did we --dangerously-skip-permissions when deciding to forgo consideration as a whole? There’s a pigeon sitting on the roof outside, not struggling with this question at all.
My hobby/craft/profession/practice/way of being isn’t about the things I’ve made; it is not about value, (the) economy, outcomes or output. It is about me; about what is inside of me.
And speaking of “me”: my computing system extends me in thought and ability; how careful I should be when delegating any part of that practice of self to another! How unthinkable to delegate to a trillion-parameter black box!
Over a decade ago, I wrote the programming language Rouge (wayback1) — a reimplementation of Clojure in Ruby, the language itself adapted for the specifics of its new home. I didn’t really know what I was doing, but it was a fun diversion.
To my surprise, some years later, I noticed a gist turn up, written in Rouge2. Wondering perhaps what else there might be, I sniffed around, and found …
I periodically re-find and lose this thread again, so recording it once and for all here. I finally bought the actual e-book, too; seems like the least I can do.
wish the CSS were preserved, or that monorepos were already in vogue and I still had the website source. iirc it was pretty! ↩
and indeed, turns out that user has a couplemore! ↩
either clone the repo locally or log in to see past the root, you aren’t asked for anything beyond the OAuth dance, just want some representation that you’re not a scraper. ↩
Unless you pay for it, or it’s specifically designed to dehumanise you, you won’t get a diagnosis. There’ll just be something kinda wrong with you, but not in a legitimate way or anything. You’re probably imagining it. Have you tried yoga?
(This is written from the Australian perspective, where paying for general healthcare is not the norm, and likewise getting some company you pay to cover the more ridiculous bill of some other company that renders a health service is not contingent on perhaps some third party blessing you with a diagnosis that renders you eligible to claim such payments. I don’t know if that’s how it goes in the US but I imagine it may.)
To wit, here’s the list of diagnoses I actually have:
Autism. The assessment cost me around A$1000 (A$175 rebated) ca. 2022.
ADHD. Likewise the assessment was around A$1200 (A$255 rebated) ca. 2022; another A$900 (A$455 rebated) to get medication permits renewed in 2025.
Borderline personality disorder. This one cost me nothing apart from my usual psychiatrist session fees, and was covertly assigned! (You can read more about how that happens but woaaah pardner, read the notas de contenido first.)
Now, contrast this with the (already outdated!) list of medications I’ve ever been on. I guess I have had depression for decades of my life at a time. Anxiety of various forms, too; symptoms matching panic disorder for a year or so. Long COVID. Chronic insomnia. Heavy and persistent dissociative issues, though perhaps they fold into BPD. Likewise recurrent hypomania; or is it cyclothymia? PTSD; or is it cPTSD? I’ve met the “new clinical fibromyalgia diagnostic criteria” for about a year and a half by now, although as a diagnosis of exclusion (“3. You do not have a disorder that would otherwise explain the pain”), it’s funny because perhaps there are other, mutually exclusive diagnoses of exclusion that would match; namely hEDS, which I’m one or two (perhaps undiscovered!) signs off meeting.
But y’know, unless I go to a specialist and pay them specifically to assess me for something, it won’t happen. (Unless, per the opening paragraph, there’s something of you that needs to be stripped away. For society’s safety! And the life insurance companies’.) And this can be annoying: I would really like some answers, or hell — speaking now of chronic pain — a better legitimised excuse for feeling as awful as I do every day. Every time someone newly learns of how I’m doing: “oh but you look good!” “I hope you’re on the mend at least.” MY FRIEND I JUST TOLD YOU I HAVE HAD STEADILY WORSENING WIDESPREAD UNTREATABLE PAIN FOR TWO YEARS NOW DESPITE SEEING THIRTY DOCTORS A YEAR IN THAT TIME. WHAT DO YOU THINK.
The other thing I’d be remiss to omit is that health conditions and diagnoses are (by and large) not real1. There is nothing so locable as “depression” in the brain/body/wherever you think things are. “Generalised anxiety disorder” and “social anxiety disorder” and “other specified anxiety disorder” aren’t, if the last one didn’t give it away, reified, separable, and specific conditions. Diagnostic criteria are for diagnoses, and diagnoses are for guiding treatment at the population level. At the individual level, you could have all the problems in the world and not one set of criteria may fit; or many may fit, and every one of those may indicate the wrong solution for you specifically.
otoh there are plenty that are, but those definitionally tend to have extremely specific indicators and correspondingly specific remedies (or wants thereof). ↩