Passing | blarg blarg Contact PassingI’ve said elsewhere that I don’t think that the GPT, OpenAI arbitrary-text-generation stuff is all that interesting. A machine repeating permutations of things we’ve already said back to us is a weird thing to be impressed by or frightened of, unless you secretly know that your job is confidently repeating plausible-sounding nonsense with no regard for whether there’s any truth to it. But in practical terms, their real impact will be that how we conceive of knowledge at all gets rapidly bifurcated into “small towns that can still pump clean water from the wells” and “London during the Great Stink, though, so as the attendants say, be sure to put your own mask on first. Anyone remember when Google’s mission was “organize the world’s information and make it universally accessible and useful”, and not “build tools that automatically generate an endless stream of believably averacitous text?” Yeah, me neither. I guess it’s no surprise that a few consecutive generations of people being really, methodically deliberate about misinterpreting the Imitation Game to avoid staring directly at Turing’s persecution, debasing his life and work so profoundly that they’d claim that a believable deception is some indicator of nascent intelligence would bring us here. The Imitation Game was a cry for help from a man being destroyed by the society he spent his life saving. Is it any wonder that a brilliant, closeted gay man, who might be incarcerated or even executed for the crime of being themselves, would have existential questions about what it means to need to deceive people – your friends, your colleagues, your family and maybe even yourself, every single day – simply in order to be treated like a human being? Using the tools Turing gave us to build stochastic parrots that cannot hew to any concept of right or wrong, whose only utility is a weapon aimed at the foundations of justice, civil democracy and the entire concept of truth, that’s bad enough. But saying they “pass” a made-up test about plausibly lying to yourself that you’ve named after a closeted man the state hounded to suicide is beyond disgusting. It’s grotesque. The mere existence of these tools demeans us all as scientists, engineers and humans. If you’re involved in building these things you should resign from the field in shame. In honour of Alan Turing’s memory and basic human decency, if nothing else. Is Neither DiscussEvery now and then I see some more of the Muskrat Standom’s effluent ooze past my eyes and all I can think is, kid, that boot’s never gonna lick you back. Timnit Gebru recently wrote about Effective Altruism for Wired, where she correctly notes that it’s all self-serving nonsense, “promising an “unimaginably great future” around the corner while proliferating products harming marginalized groups in the now.” “Some of the billionaires who have committed significant funds to this goal include Elon Musk, Vitalik Buterin, Ben Delo, Jaan Tallinn, Peter Thiel, Dustin Muskovitz, and Sam Bankman-Fried, who was one of EA’s largest funders until the recent bankruptcy of his FTX cryptocurrency platform. … and she’s right. But I also think that there’s a dynamic at play that she’s elided, an ideological metagame at play. In his 1963 speech “Wealth And Poverty“, Galbraith observed that “the modern conservative is not even especially modern. He is engaged, on the contrary, in one of man’s oldest, best financed, most applauded, and, on the whole, least successful exercises in moral philosophy. That is the search for a superior moral justification for selfishness. It is an exercise which always involves a certain number of internal contradictions and even a few absurdities”. This was penned before social media existed, obviously, and long before it was thoroughly weaponized, so it’s understandable how quaint it seems today. How could Galbraith have anticipated the rise of the postmodern conservative, for whom power is self-evidently its own justification, for whom the whole ideas of truth or moral justification are laughable as anything but a tool for retaining that power? There’s a particular strain of technically-competent, ideologically-adrift pseudointellectual who somehow just stops asking questions the moment they’ve got a mental model that “makes sense” to them. You’ve met their flock on the hellbird and they’ve got a prominent hive over on the orange website, but you’ll find them in any techno-libertarian circle where a dash of cleverness mixed with the facile reasoning that comes with graphs in Econ 101 is praised until it becomes a self-reinforcing cycle, a nerd-posturing Coriolis force churning all these ideas together as they circle the bowl. “The market exists therefore systemic inequality obviously can’t” is the grade of reasoning I’m sure you’ve seen, championed by people happy to believe that the whole story is the just-so story they’ve just told themselves. Setting aside inquiry and getting to work once you’ve got what you believe is a good mental model of a system is actually a pretty good approach to writing software, and if you’re both a competent engineer and a comfortably-incurious human being you can get a lot done that way. But politics and ideology aren’t software. The code will never ask you, to whom is it useful that I believe this? Are they really on my side? Do I want to be on theirs? I’ve said this before, that stories are weapons. Software is quite literally an idea that you’ve taken out of your head and turned into a machine, a set of decisions and parameters that you, as a programmer, impose on people who will have little or no say in the matter. It is ideology and bias turned into power. If you’re happy to repeat things you’ve heard without caring about whether or not they’re true, what are you? … and I will very happily bet you sixteen billion dollars – payable in six hundred years, assuming an average 4% interest rate – that exactly none of Musk, Buterin, Delo, Tallinn, Thiel, Muskovitz, or Bankman-Fried or anyone else whose net worth goes past the seven-digit mark gives a single fuck about “effective altruism”. Not one. They care about retaining wealth and power, full stop. And that’s where Effective Altruism really shines. Not as a philosophy, but as a weapon. Because Effective Altruism gives this entire class of technically competent people a mental model that “makes sense” and has a veneer of moral nobility to it while – conveniently – justifying not doing anything in the present that might inconvenience that wealth and power. As an ideology, effective altruism is obviously a pile of nonsense. It’s what you’d end up with if you started with Scientology and replaced “thetans” with “dollars.” But as a tool, it’s fantastic: precision-designed to target people who are capable of understanding and changing complex systems and completely neuter them as a threat to that wealth and power. Put differently: what effective altruism is most effective at is turning smart kids into political NPCs. It’s effective at making its adherents ideologically irrelevant, the world’s smartest, most useful idiots. Technical Note: Bluetooth & Automatic Volume AdjustmentThe symptoms for this are that: You’re probably using MacOS, and your bluetooth headset is automatically, seemingly randomly, muting and unmuting during calls, but this muting is not reflected in the visible state of the call software, leading you to believe that it’s a problem with the bluetooth headset itself. The solution to this is to find and disable automatic microphone volume adjustment in the application. I can reproduce the problem with the “Aftershockz” bone-conduction headset I’m quite fond of. While this problem was not easy to diagnose, the solution is one checkbox. In more detail, many conference applications, Zoom and Teams in particular, have an “automatically adjust microphone volume” option somewhere under the hood. This will in some cases auto-adjust your microphone volume to zero, which in turn results in the operating system sending a signal to your headset telling it to mute the mic in the hardware. The hardware will do that, but this change of state will not be reflected in the zoom client. And there’s just enough lag in this process, particularly if you’re trying to solve it by pushing the buttons on the headset that unmute you, that nothing quite happens with the immediacy that we normally expect from discernible causality. So you can end up with the software tricking you into the impression that your headset is in some bizarro state of hardware failure, which is not the case. A quick google search suggests that this is an endemic problem at the intersection of “MacOS confcall apps (Zoom, Teams, bunch of others…) that try to be clever with volume management” and “Bluetooth devices that try to manage power aggressively”, and digging into the preferences to uncheck the “automatically adjust microphone volume” option solves the problem immediately. Bluetooth has not worked right anywhere since Nokia died, I have no idea how any human who has not been heads down over this class of problems for decades would even start forming a mental model of what might be happening here much less how to fix it, and despite taking some pride in this there are times that I actively resent having to be really good at solving problems that shouldn’t exist in the first place. Zero Again Hillel Wayne has registered a strenuous disagreement with a bit I wrote in 2013 about zero-indexing and now I need have an internet argument because, I suppose, that is simply my nature. I’ve never met them, though I’ve enjoyed their writing whenever I’ve come across it, so if you’re invested in precision beef calibration that’s where I am. They seem like decent people, I feel like my case was misrepresented, strap in. Wayne makes some solid points; I could stand to clean up and republish that article, something I was reluctant to do back when it took off and haven’t gotten back to. He definitely understates the case in saying “Most modern languages have at least some C influence in them”: in fact, approximately every programming language now needs to speak C, something I’m really only mentioning because it gives me an excuse to link up an amazing post that deserves a wider audience. But he falls into the same trap I railed against in my 2013 conclusion: retelling just so stories because it’s easy and fun. I think his gist-of-it summary is not really a fair reading of the post, but the straw man I’m initially arguing against is that the claim that zero-indexing specifically-in-C “makes sense” because of an argument Dijkstra made is compelling and easy to retell, and obviously nonsense, even if Dijkstra’s argument was influential to later languages. You can make that claim about Python, though, and you’d be right! Dijkstra’s interval-elegance argument did carry the day there. But I don’t know this because Python was born after 1982, or because elegant math, or because of some hand-waved set of conflated circumstances. I know this because I looked it up and found that Guido Van Rossum said so. Literally everything having to do with computing was somebody’s decision, and we should not be confident we really understand the why if we can’t point at the person. We really start wobbling on the rails further in, when… look: there’s no kind way to say this: that offhand sentence “wire formats like EBDIC and ASCII “started from 0″, since they considered the 0-byte a valid unit” is exactly what I mean, when I’m talking about things that are made up, that don’t even rise to the level of wrong. What is ‘valid’? Who’s they? How do we get from there to why? I mention it because I know the real answer, and talking about the “wire format” of a character encoding when the first networked computers wouldn’t exist for another half decade is precisely what I’m getting wound up about here. The reason we have an all-zero-bits representation in those character sets is the same reason we use null as a string terminator, and that reason antedates mainframes, transistors and the Church-Turing Thesis. There are plenty of benefits to it that came about later! Definitely. But the reason we chose to have that in EDCBIC and ASCII (and Baudot, ITA2 and others of that era) is not “all the ways it turned out to be useful later”, and that reason was so that we could easily re-use punchcards. (Fun fact, and this is a fact: around the time these standards were being hammered out, punch cards and related tooling made up 30% of all of IBM’s revenue. Consequently, one design constraint on EDCBIC that ASCII did not share was anchored in IBM’s business model: keeping too many holes in punch cards from being too close together, making the cards less likely to fail. Yes, I can find you a citation for everything in these parentheses.) There are a few other arguments in there, rebutting claims I’ve made that I don’t really think I made, but I recognize enough contrarian in myself that I guess I’m obligated to be charitable with anyone pointing their contrarian at me. And charitable can be a job, for sure, but fair’s fair and a job’s a job. But there’s one larger point here, the real point that I wanted to make then and want to make now, that I’m not going to let go: “Hoye’s core point is it doesn’t matter what the practical benefits are, the historical context is that barely anybody used 0-indexing before BCPL came along and ruined everything. […] I may think that counting 0 as a natural number makes a lot of math more elegant, but clearly I’m just too dumb to rise to the level of wrong.” My point is not, my point has never been, that “zero indexing is bad”. My point is “believing and repeating uninterrogated stories because they sounded plausible to you” is bad, and I’m saying that because it’s really, really bad. “We’re doing this like this because it just makes sense” is not just the general shape of made up stories I see programmers and engineers telling themselves all the goddamn time. It’s a habit that opens an attack surface on your soul. Smart people who’ve fallen in the habit of believing and retelling just-so stories about why things are the way they are, stories that are easy to digest and repeat, are incredibly easy to manipulate into building monstrosities, ignoring structural and systemic injustices, and acting in service of forces they don’t even realize exist because their little constructed reality seems to hold itself together. Stories are weapons. I don’t know how to say this loud enough. Software is quite literally an idea that you’ve taken out of your head and turned into a machine, a set of decisions and parameters that you, as a programmer, impose on people who will have little or no say in the matter. It is ideology and bias turned into power. If you’re happy to repeat things you’ve heard without caring about whether or not they’re true, what are you? Because this is where antivaxxers come from. This how the cryptocurrency cultists can bring themselves to believe their racist monkey cartoons are worth anything or ending fiat currency will stop war or any amount of all the other bullshit they believe while they’re destroy the planet and the lives of the people on it. This is why the world’s worst despots have buildings full of people spending all day on the far end of a VPN pretending to be Michigan soccer moms or Boston Antifa or Alberta Gun-Owners Rights advocates or any goddamn thing that helps them pour kerosene on anything that might set a democracy on fire. This is how smart, young developers can convince themselves that their work is morally and politically neutral while building the algorithms that, oops, hand a megaphone to fascists and turn explicit racism into implicit policy. It’s this. And yeah, sure: it’s also other things. It’s complicated. I get it. But it’s this. Don’t be a dick. Ok, sure. I could stand to work on that part. I concede the point. Making LightHey quick question, is it a normal thing to be so used to struggling to make things work right that when you try something new and it works exactly right on the first try that you feel kind of strangely sad and empty? Or is that super weird and probably really unhealthy and hey mhoye are you OK maybe you should probably talk to someone? Asking for a me. Anyway, today I took a desk lamp whose Halogen light had burned out, whose crappy transformer always made those bulbs sputter, and whose mildly art-deco appearance I’d always liked, and swapped it out to run an LED bulb off USB power. It took about an hour’s work to replace the light with an LED, the switch with a nice heavy clicky one and now the whole thing runs off USB-C instead of wall voltage. It emits no appreciable heat, and if these calculations are to be believed, will run for decades for a few cents per year, assuming I leave it on all the time. I hadn’t really appreciated how big a deal USB-PD voltage negotiation was until I found out that the little chips that handle that negotiation are about the size of the end of a pencil, that if you include the USB-C port you can replace basically any low-voltage transformer with something smaller than a quarter. The magic search string, if you want to try this yourself, is “usb-pd trigger module”, and if you have a soft spot for ideas like componentized repairability and separation of concerns you’re in for a treat. In a practical sense, this means that the negotiation about what power is delivered to a device can be tiny and inexpensive, and the decision about what’s delivering that power is a separate question entirely. So if you, like me, have seen good hardware killed by bad power, there’s a whole class of problems you can put behind you. Another way to say that is, power bricks are obsolete now; in fact, anything that doesn’t run a motor or heat up a coil won’t need wall voltage at all. It also means refurbishing old electrical stuff just got a lot cheaper and easier. That old lamp that looked great at the thrift shop or your grandmother’s basement but hasn’t worked since the Cold War and will definitely burn your house down? For a few bucks it’s good as new, running cheap and cool. And there it is: to my significant surprise, something was cheap, easy, and worked exactly as intended on the first try. I don’t think I’ll be able to recognize myself, if this keeps happening. Park’s Haunted I would like to thank the City of Toronto for warning me away from this clearly haunted staircase that’s somewhere in the Don Valley. Your Mulders, Coopers and Constantines get all the limelight, but as far as I’m concerned, in the fight against your garden variety supernatural malefactors, it’s the workaday maintenance and cleanup crews that are the real heroes. Free() As In Going To The MattressesIf you’ve updated a mainstream Linux recently and it feels like everything is inexplicably crashy and unreliable when you’re trying to get anything of substance done, particularly on smaller machines, it’s not just you. Fedora and Ubuntu have both started shipping with systemd-oomd – an unproven SystemD OOM-killer – turned by default, on the desktop versions of their products. To break that incantation down – “single-user desktop machines run the system daemon out of memory daemon by default” – into what it means and explain how we got here would be an exercise in ritual humiliation that I have no inclination to pursue. A 17th-century grammarian two centuries too early for the light bulb might glance at that phrase and ask how the infernal ‘machine’ in question had become so thoroughly curse-ed that the word “daemon” is in there twice, and that would be an excellent question. Here in the 21st century it’s still an excellent question. But in short, an “oom killer” is a program whose only job is to shut down – “kill” in the parlance of Unix – processes that are hoarding enough memory… truncated (11,240 more characters in archive)