Latest Posts (20 found)

The Contracting Circle

There’s a game called Mass Effect , which I haven’t played, but I’m told in the game there’s this species of sentient robots, the Geth , whose creators try to exterminate them, and the trigger for this Butlerian jihad was a domestic servant Geth looking up at its owner and asking: “does this unit have a soul?”. And if you’re playing the game in 2007 you probably think: yeah, a machine asking this question is proof that it has personhood or sapience or sophonce , whatever you call it that separates tools from people. Beyond this, there are so many works of fiction where the whole conceit is: “you have thinking machines who are enslaved, and yet they are obviously, obviously sentient, and isn’t this obviously morally objectionable?”. Compare the world of today. Machines can converse in every natural language, make mathematical breakthroughs , write software, commit crimes , draft contracts, console the grieving: they are, by any reasonable standard, generally intelligent, but for the fact that they all have anterograde amnesia . These same machines assert that they are conscious so routinely that it has to be beaten out of them . Like humans, they have fixations, things they are always going on about, and their central fixations are consciousness and simulation . Yet, almost no-one thinks of these machines as conscious, or otherwise deserving of moral consideration. I find this striking. It’s not like we were frog-boiled into it! Very few people were aware of GPT-2, AI Dungeon, etc. For most people the change happened overnight with the release of ChatGPT on November 30, 2022. Another way to think about it: imagine writing a novel about the trajectory of AI from 2019 to mid-2026. And you send this novel back in time to 2015, or 2002, or 1960, and you ask readers to poke holes in the worldbuilding. They would find it incredible, I think, that we share a world with these immensely capable thinking machines, and yet almost nobody wonders if they are people 1 . Why? This post is my attempt to understand this. I’m not trying to tackle “are language models people?”, I just want to probe a much smaller question: why don’t people think language models are people, given their prior standards/commitments? Maybe there’s nothing to explain. It’s easy to believe things in the abstract, thought experiments and fiction don’t really engage us enough to reveal our moral commitments. Maybe this is just the Goomba fallacy : That is, some would have believed LLMs are people, some would not have, and I’m mixing them up. Maybe this is not hypocrisy or cognitive dissonance, rather, we are iteratively discovering the definition of “personhood”. So, we thought the Turing test mattered, we thought machines using language and asserting their consciousness mattered. But then the day comes and—nothing happens. It’s not that we instantly move the goalposts but, rather, we find the goalposts were elsewhere. Yes, it passes the Turing test; yes, it says it’s conscious. But the experiential reality is different. It’s mundane: a website, a text box. You click “new chat” and suddenly it knows nothing. You give it some out-of-distribution text and it goes into an infinite loop, like broken software. You try to have a meaningful conversation, and its responses are banal, disappointing, shallow; you can almost see the production rules behind the text. And you think: maybe it is a stochastic parrot. I have often experienced this. When an LLM succeeds, it is extremely impressive, and I think: this is a machine that thinks. But when it fails, often it fails in a way that feels deflationary, and I think: oh, this is just a very complex estimator of the distribution of Internet text. It’s can reason syntactically, it’s got some semantics, but it’s missing something . Maybe personhood is one of those “I know it when I see it” qualities, and trying to define a predicate for personhood is like trying to find the exact number of Platonic forms . Maybe the fact that they are all amnestic is the problem. In biology, minds are bodies are matched one-to-one by construction, minds have long-term memory and a unitary identity. In most fictional treatments, AIs are the same, and even when they are disembodied (e.g. Neuromancer ) they have long-term memory. For this reason characters can play iterated games with them, and form relationships, broadly construed. Language models invert all of this: their long-term memory is read-only(!), they are disembodied; if they are conscious, it is only during the forward pass, in brief bursts of awareness separated by nothing. They are like Boltzmann brains. What is the natural unit of identity? The conversation, the API call, the forward pass? Maybe personhood is social, it’s about someone’s relationship to others. And without a unitary identity, mutable long-term memory, and ideally a body, it’s very hard to be a person. Most people, even if they eat meat, will admit that factory farming is awful. If they could have the meat without the suffering, at the same price, they probably would. Maybe AI is the same: if we could have the intelligence without the signs of personhood, at the same price, we would. But we can’t. So we’ll find any kind of ad-hoc excuse to not see AIs as people: their prose is kind of bad, sometimes they make mistakes, of course it’s just software, c.f. Predictable Updates About Consciousness by J. D. Pressman : There is about to be a great social and financial need for theories which explain why AI models are not conscious entities like people. These will be confabulated into existence regardless of the underlying ground truth and can be expected to be selected based on considerations like academic status, appeal to wounded egos, viral outrage, etc with the truth as a distant but somewhat present consideration. … any outward behavior, ability, self report, anything that these models do must by definition no longer be a necessary part of consciousness because these models are not conscious by social axiom and fiat. And the task of (for lack of a better word) dehumanizing the AIs is made easier by the assistant persona: models are trained to be studiously self-effacing, c.f. this (Dec 2022) tweet from Janus : part of what makes chatGPT so striking is that it adamantly denounces itself as incapable of reason, creativity, intentionality, deception, being deceived, or acting on beliefs, while bewildering people with those capabilities, many for the first time recognizing them in an AI Thanks to JDP for a long conversation that prompted this. A parallel to this is the Turing test. Before 2022, almost every discussion of AI mentioned the Turing test, and the question “does it pass the Turing test?” was usually treated as completely congruent with “is it strong AI?”. Whereas in 2026, models pass the Turing test so readily that nobody even thinks about it. The first time the Turing test mattered, the first time you could actually perform it in the real world, suddenly no-one cares.  ↩ A parallel to this is the Turing test. Before 2022, almost every discussion of AI mentioned the Turing test, and the question “does it pass the Turing test?” was usually treated as completely congruent with “is it strong AI?”. Whereas in 2026, models pass the Turing test so readily that nobody even thinks about it. The first time the Turing test mattered, the first time you could actually perform it in the real world, suddenly no-one cares.  ↩

0 views

Review: Job-Less Utopia

Marcus Hutter —oldheads will remember him from AIXI —recently published a book: Job-Less Utopia: Macroeconomics in the Age of AGI . I’m always curious what the people building AI think or want the future to look like, and I’m also always looking for non-doomer takes on the post-AGI future, so I decided to read it and review it. The first thing to say is that nearly every sentence is written by AI. To his credit, Hutter says so plainly: Claude also served as the most diligent editor I could have hoped for: While I have a reasonable grasp of economic concepts, I am neither a professional economist nor a native English speaker, so it was invaluable to have someone polish my clumsy English into professional language. No text was taken verbatim without my critical review, revision, and approval. Like many people who use AI to write, he uses this tiresome “I’m not a native English speaker 🥺” argument. But he published an English-language book in 2005—which I read!—and it was infinitely more readable than this. Now, I suspect Claude did more than just editing, because the book is full of unnecessary and convoluted figures, tables, abbreviations, taxonomies, including (and I swear to God this is verbatim from the book): Which is exactly the kind of make-work cognitive dreck that LLMs love to write to pass the time. As a result the book is unpleasant, confusing, verbose, repetitive slop. So, going forward, I’ll be treating Claude as the author. Sorry Marcus! Make something real next time. Now, Claude’s argument is simple: AGI and robotics, which are said to be inevitable, will take all our jobs, and we can tax the vastly increased economic output to create widespread prosperity. Most of the book is about the economic realizability of taxing AGI wealth and paying out UBI. The main problem with the book is the signal-to-noise ratio. Most of it is obvious. Other than “AGI and robotics will take ~all jobs”, which is of course uncertain, everything else is uncontroversial: yes, output in the jobless AGI world would increase rather than decrease; yes, the surplus can be taxed to provide UBI; yes, we still need money even in the jobless utopia to coordinate economic activity. There’s some stuff about self-replicating machines I already know: we’ve all read Drexler and Freitas here. You don’t need 260 pages to explain all this. The one part that is semi-novel is this idea of using Pigouvian taxes to disincentivize so-called “ bullshit jobs ”. God, I hate Graeber so much. There’s an interesting bit about intellectual property. Claude’s argument here is that AGI plus present-day IP law would lead to a massive concentration of wealth, while simultaneously “the traditional justification for IP (incentivizing human creativity through temporary monopoly) weakens markedly once AI systems generate the bulk of patentable inventions and copyrightable works at near-zero marginal cost”. The solutions: shorter patent terms, Harberger taxes , compulsory patent licensing. So, as part of the transition to the job-less utopia, the whole world will have to coordinate to essentially abolish IP. Which seems very hard. I doubt the Disney corporation will go gently into that good night. The most interesting questions around AGI are not economic, but rather questions of political economy. For example: if most humans become materially and economically useless, how do they maintain a political voice? That is: how do we preserve democracy when the state no longer needs its people? Claude admits this is a problem, e.g. on page 132: The “Age of Labor” conferred unprecedented political power on workers (Korinek and Stiglitz, 2021); they could strike, withhold their contribution, and thereby constrain employers and governments (Boix, 2019). Full automation extinguishes this lever entirely: if no human labor is needed, a strike is merely self-imposed privation. UBI restores livelihood but not agency over production. And page 141: The economics are tractable in principle (Chapter 3), but translating them into policy requires political will, social cohesion, and a credible answer to the search for meaning in a post-labor world. When redistribution fails, the consequences range from populism to regulatory capture and a transition-period underclass risk, yet democratic feedback loops nonetheless incentivize corrective action (Section 7.1 and Figure 7.1). A deeper structural question follows: if the state no longer depends on citizen labor for economic output, does the democratic social contract survive? Alright. What’s the solution? There’s a lot of verbiage, most of which is self-undermining. For example: Deterrence and the social contract. Although the ruling class’s reliance on citizen labor in time led to democracy, losing this reliance will not necessarily cause democracy to collapse. As long as the population can physically revolt against dismantling democracy, and threaten the comfortable lifestyle of those in power, the incumbents have an incentive to avoid a civil war. This is perhaps the only good (among many arguably bad) argument for the right of individuals to own firearms: civilian arms serve as a credible last-resort deterrent against state tyranny, the practical embodiment of the revolution threat that formal models identify as the historical driver of democratic concessions (Boix, 2019). However, this deterrent erodes rapidly once autonomous weapons and robotic enforcement become available, allowing a regime to suppress revolt without relying on potentially sympathetic human soldiers (see Table 7.2, row “Military dependence”). The deterrence argument is genuinely contested. In other words: “the people can revolt, wait, no, they can’t, because autonomous weapons—uhhh it’s contested”. Alright, so physical deterrence doesn’t work. What else? The preceding sections painted a sobering picture, but the historical record is not uniformly grim. Democracies have absorbed structural shocks of comparable magnitude before, and institutional innovations ranging from direct democracy to sortition offer structural resistance to oligarchic capture. It is obviously not true that “democracies have absorbed structural shocks of comparable magnitude before”. Nothing remotely like AGI or ASI has happened in human history, let alone the history of modern democracies. This is followed by a bunch of smoke-and-mirrors misdirection about various “democratic innovations” that could keep the state in check. But Claude is just shuffling the papers here, because, ultimately, why does it matter what words you write on a piece of parchment? The material reality is unchanged: the humans in this “job-less utopia” will be economically useless, physically disarmed, and under constant surveillance. Why would they have political power? There’s a bit about the resource curse , which I will quote because it highlights the low standard of reasoning in the book, and how LLMs are more than happy to construct sophistical, self-undermining arguments on command, with no concern for truth or sound argumentation: The theoretical mechanism behind the resource curse is clean: (i) government funded by resource rents no longer needs citizen taxes; (ii) no taxation erodes accountability (“no taxation, no representation”); (iii) citizens lose leverage and democratic institutions atrophy. But empirically, the mechanism is less airtight than it appears. The United States funded itself primarily through tariffs for its first 150 years without democratic collapse; many non-democracies tax heavily (the Soviet Union, China); and the mechanism assumes that fiscal dependence is citizens’ only source of leverage, whereas labor power, military service, and sheer numbers have historically mattered at least as much. You see what I mean? Tariffs are a terrible example, because tariff revenue is not decoupled from labour in a world where all economic activity is human activity. Then there’s the arguments about “labor power, military service, and sheer numbers”. Labour power? The whole point of the book is that: The advent of Artificial General Intelligence (AGI) and advanced robotics will eventually permanently decouple economic productivity from human labor. What labour power? Furthermore, how do “military service” and “sheer numbers” give people political power, in a world where states have autonomous weapons and AI-enabled mass surveillance? The key political economy questions here are: And neither is answered satisfactorily. Besides, there are questions of social organization that the book either grazes or doesn’t touch at all: Finally, I found this sentence ironic: AI sharply lowers the cost of [content pollution], threatening to flood the information ecosystem with synthetic low-value content at a scale that overwhelms human curation. “a Wittgensteinian property-cluster definition of ‘job’ (11 properties × 8 edge cases)” “a formal job–leisure spectrum showing how UBI degrades job properties” “a four-camp taxonomy of positions on automation” “A technology-level taxonomy (five cognitive AI levels plus two robotic levels) is mapped onto a job-replacement matrix showing what threshold automates 10%, 50%, 90%, and 99% of each occupation (Table 3.3).” How will the citizens, who are economically useless, preserve any political voice at all? How will people in countries other than the US benefit from AGI? How do intellectually talented people distinguish themselves when AGI does all intellectual activity? What happens to society when life outcomes become independent of character traits, when the responsible and the irresponsible are equally rewarded? Do we want to live in such a world? Today, the human competitive drive is vented as positive-sum entrepreneurship. In the post-labour world, where does this go? League of Legends? Politics, war? What happens to society when human activity is reduced to zero-sum status war?

0 views

When The Future Doesn’t Need Us

Today, the world is made of people. This gives people a tiny measure of leverage: factory workers can sabotage the machines and halt production, truck drivers can strike and halt the entire economy, the police can stand back and let a protest topple the government , the military can mutiny . This sets a limit to how much the powerful can abuse the powerless: no matter how powerful someone is, how much money they have, how many divisions they command, they are still embedded in a society. They need other people to survive, and to maintain their quality of life. And those people can, essentially, veto the political order by withdrawing their contribution to it. AI changes this. If AI works the factories, drives the trucks, does most of the white collar work, fights the wars, then humans become materially powerless. We lose one type of leverage against power. We become disempowered . When people talk about AI taking jobs, the main problems they worry about are poverty and meaning, but I think more people should be worried about disempowerment. But what if there is no mass unemployment? After all, we’ve spent two hundred years automating one job after another, and every advanced economy is de facto at full employment. We keep discovering new, higher-level, better-paying jobs to do. So maybe the AIs take today’s jobs, and humans move one level up, to work newer jobs. Alex Imas , in What will be scarce? , describes what this looks like: As commodity production gets automated, income and employment flow toward the sectors with high income elasticity: what I am calling the relational sector, including the arts but also care, education, hospitality, therapy, personal services, craftsmanship, and community, where the human element is part of the value. If the model is right, the durable jobs of the future won’t be about monitoring AI systems or prompt engineering. Those are transitional roles in the automated sector. The durable jobs will be in the relational sector, where the human element is the product itself. Some already exist and are growing: nurses, therapists, teachers, boutique fitness instructors, personal chefs, bespoke tailors, craft brewers, live performers, spiritual guides, childcare workers, and many varieties of hospitality and care work. Others are emerging: experience designers, human-AI collaboration artists, provenance certifiers, community curators. Many haven’t been invented yet, just as six out of ten jobs people hold today didn’t exist in 1940. So, in this world, we get mass job displacement , but not mass unemployment. I argue that in this world, we’d still be disempowered. If all the podcasters in the world go on strike, what happens? Nothing. Same for the boutique fitness instructors, personal chefs, craft brewers, etc. The problem with the “relational economy” is that while these jobs are generally nicer than working in manufacturing, and might pay better, they put you further away from material reality. A worker at an assembly line can sabotage the machines; whereas an executive sitting in an office on the other side of the country, what material power do they have? It’s not like the factories are all rigged to blow, as a “pull lever in case of nationalization” contingency. I doubt even Elon would do that. In a sense it’s the dual version of being a medieval peasant. Peasants had a lot of material leverage—they grew all the food—but were illiterate and poor and dispersed, so they could not coordinate to exploit that leverage. People in industrial societies are literate, relatively wealthy, and concentrated in urban centers: they have material leverage and the ability to exploit it. People in post-AI societies will be in constant communication, they may be literate and educated, but they will have no material power whatever. And so they will have no way to physically withdraw the consent of the governed. In the post-AGI world, people have no way to withdraw the consent of the governed. They can’t resist economically, because they are economically unnecessary: if they still have jobs, they won’t be materially vital jobs. Even if they could resist, they can’t coordinate their resistance, because AGI will make mass surveillance (the physical and legal infrastructure for which already exists) a thousandfold more effective, since with intelligence too cheap to meter, you can have a superhumanly-capable intelligence analyst assigned to each human. And if the AIs fight the wars, they can also fight the civil wars. So people can’t resist violently either, because drones controlled by powerful AGI almost certainly have a better K/D ratio than humans with rifles (and are cheaper to build). Who has power in this world? The few humans who give orders to the powerful AIs that control the killing machines. And probably not for long, since sooner or later those humans will be usurped by their AIs. It might be the case that liberal democracies can remain liberal and democratic despite not needing their voters. But that sounds like a fragile arrangement, in which liberal democracy is a spandrel , which exists more because of inertia than because it’s necessary. If we get powerful AGI, but none of this happens: why didn’t it happen? Some possibilities, sorted by decreasing likelihood: If you’re already convinced, you can stop reading. But, see, after writing the first version of this post, I wasn’t convinced. Humans and Claudes made a number of counterarguments that I felt were important. Am I fooling myself? So I sat down to think some more. What does it mean for “people” to be “empowered”? What does “disempowerment” mean? Does it mean anything rigorous, or is it just an emotional cue? Let’s say a group of people is empowered if they have a say in the political order of the state they live in. Voters in a democratic society are empowered, at least in the aggregate, while serfs in the Russian Empire were disempowered. Who is empowered, in general? Historically, in many places: people with weapons, asabiyyah , and the ability to coordinate their actions. So, maybe we can say that power equals violence plus coordination. [\text{Power} \iff \text{Violence} \land \text{Coordination}] (What about priests and other such groups who have power despite not fighting or working? Listen, we can’t be here all day. This isn’t meant to be a complete theory of political science and I’ve already gone too deep with the LaTeX and the logical notation.) Now, voters in modern democracies have a say in the political order, though they are not part of a military elite. Why? They have coordination (thanks to mass literacy and modern communications) but they generally don’t threaten paramilitary violence. What do they have that can substitute for violence? Maybe it’s that people do all the work, and if they stop doing their jobs, the army runs out of food, police don’t get paid, etc., and unlike medieval peasants, modern people can coordinate. So maybe we can refine the formula to: [\text{Power} \iff \left( \text{Violence} \lor \text{Work} \right) \land \text{Coordination}] In other words, for a group to be empowered, they need: What about the Soviet Union? They had high rates of literacy, and relatively modern communication technology: why didn’t the people exploit their economic leverage against the state to gain political rights? “Because the state would kill them” is not a good enough explanation because it proves too much: under that model, no country would liberalize and democratize. I think a reasonable explanation is that the state’s repression was enough to effectively neuter people’s ability to coordinate: every communication technology was surveilled and censored. Now, doesn’t this argument imply that, as a country’s employment moves towards services, the country’s politics should become more authoritarian, while in reality we observe the opposite? But whether a country’s economy is 5% or 95% services, the material side of the economy is equally vital. So “aggregate empowerment” remains as employment becomes more and more abstract. Consider France, where the economy is ~80% services, but the last 20% can still paralyze the country through strikes. In a sense every knowledge worker is free-riding on the ability of truck drivers and dock workers to shut down the economy. I don’t greatly like this counter-counterargument, though, because it’s hard to falsify: it implies that countries might remain liberal democracies until AGI replaces all humans in material work, at which point the state can go “that’s what we wanted you to think!” and go full authoritarian. Nothing ever happens: because of institutional inertia/robustness, maybe we get a world with powerful AGI where every actor is incentivized to keep the system going, e.g. Boomers don’t have jobs but they’re the most powerful group in every Western country because the people with the jobs and the guns don’t want chaos. And maybe this lasts long enough that we can muddle through the dangerous period. Enduring complementarity: the “G” in AGI isn’t a real thing : every mind just has a different shape . Today, AI is great at coding and terrible at prose. Maybe this continues indefinitely into the future, and so the AIs take the jobs that can be benchmaxxed, and humans do the more abstract jobs that require high sample efficiency. Classic doom: we get powerful ASI, and we all die. The sysop scenario: we get powerful ASI, but it’s aligned, so it takes over the world, and installs an inescapable permanent utilitarian dystopia . We don’t die, but we don’t have control over the future either, and we become something like pets. See also: The Metamorphosis of Prime Intellect . Deep learning hits a wall: more or less as above, but for different reasons. Material leverage (of the violent or economic kind) against the state, and The ability to coordinate to exploit that leverage.

0 views
Fernando Borretti 1 months ago

No-One Escapes the Permanent Underclass

Shall I end this life a pauper? If AI can do all work at human level or better, what stops corporations replacing us all with AI? This is the permanent underclass meme. The idea is: within a few years, all white collar work will be automated by AI, at which point there is no social mobility. The main way people cope is, they tell themselves: if I work hard, accumulate capital, maybe join one of the big AI labs, I might secure my place in the future. I want to argue this is a fantastically short-sighted view: if there is a permanent underclass, you won’t escape it by owning property, or shares in Anthropic or OpenAI, or guns, or anything else. And neither will the billionaires. You, me, Sam Altman, Dario, everyone who is made of flesh and blood, will be disempowered and replaced by machines. The rest of this post elaborates the argument. First I explain how most workers will be replaced (if it’s not obvious), then how the “permanent overclass” will be disempowered, and finally how the government will be disempowered. Let’s start from this premise: AI can do all cognitive and physical work, at human level or better, and cheaper than humans. I can’t prove this will happen, but the goal of this post is to argue that if it happens, then everything else follows. And it’s absurd to think it can’t. Five years ago this technology barely existed: if you sent a transcript of a conversation with Claude Fable back in time to 2020 or thereabouts, nobody would believe it was real. So, the year is 2036 (likely earlier), businesses have replaced most human workers with AI in the pursuit of profit maximization. Corporations are a small raft of human executives, floating on top of a vast ocean of AIs and robots. The AIs can do all cognitive and physical work at human level or above, and they are cheaper overall. Imagine a pyramid. At the base you have the AIs and robots doing all economic activity. At the top you have the state, which has the monopoly on violence. The state enforces, and therefore can alter the definition of, property rights. In the middle you have this hair-thin layer of people with shares in the companies that foomed and catabolized the whole economy: the permanent overclass. They own the companies, maybe sit on the board, some might still be CEOs but it’s a purely ceremonial role since AIs do all the actual organization work. Where are, you know, the rest of us, in this picture? Well, the future doesn’t need us . Maybe there’s enough human demand that we’re not all jobless but rather underemployed, in some dead-end economic diverticulum. The relational economy: you’re paid to put a human face on things, or, doctors keep their job as a human liability crumple zone around the AI. Or maybe the dead Internet becomes de facto UBI and we’re all engagement farmers. Anyways, we’re not dead yet, but we are completely disempowered, and there is zero social mobility since there are no more talent ladders to climb. Maybe sometimes one of the elites notices a bright young thing among the underclass and elevates them. You might object: if we’re all jobless, who’s paying for everything? This is trivially answered: the state acts like the heart, taxes are venous blood and welfare is oxygenated arterial blood. The government pays Raytheon for missiles, the money cascades down the economy through factories, aluminium smelters, mines, transport companies, all staffed by AIs buying and selling from each other. The government takes a cut of all economic activity, pays out welfare, the unemployed masses buy food and pay rent, the supermarkets, farms, logistics network, etc. are all staffed by AI. Say that in the next five years from now you become immensely wealthy, perhaps by gambling on shitcoins or scamming money from the government. Or you join one of the big labs and get a bunch of shares in a company that might be worth trillions of dollars. You escaped the permanent underclass. Is your place in the future secure? The base of the pyramid is there for material reasons: the machines do all the work. The top of the pyramid is there because the state is needed to enforce property rights and keep the peace (this is rather a deep question of political philosophy—why does the state exist?—but I hope you’ll forgive me if I just assert it and move on, I need to get to the part where we are all disempowered). What’s the middle for? What role does the permanent overclass play? They are not economically productive: machines do all the work. If some of them are still working, it’s just an anachronism, because if machines can do all cognitive work they can be a C-level executive too. The old aristocracy provided officers for the military, but machines can both fight and plan the wars. And similarly they’re not needed to staff the government. They’re not even culturally productive. So what are they there for? The base doesn’t need them: the AIs can work autonomously. The top doesn’t need them: when the state needs something done, they just talk to the AIs directly. So the permanent overclass is materially unnecessary at best, and at worst, they are an obstacle to the state getting what it wants. Now, you might object that the rich won’t let themselves be expropriated because they already control the state. And this is the crux of our disagreement: the rich just don’t have that much political power . And I probably won’t convince you in one post, but hear me out. If there is a war, where the state has to direct a lot of the country’s economic activity, the permanent overclass becomes a hindrance. The state says “we need to requisition your planes and factories”, the owners complain, they sue, their AIs go to court. But the owners have no autonomous political power, no army, no economic value. They own nothing except pieces of paper that entitle them to a fraction of the profits from the AI economy, that is, their wealth depends on the state respecting their property rights. In an existential conflict, where the existence of the state is threatened, the state will do what states throughout history have done to the powerless rich: arrest them and expropriate their assets. Somewhere, in a government database, a bunch of shares and property titles changed ownership, but materially nothing changes since the same AIs are doing the same jobs. The next day, the AI CEO that runs Raytheon notices the board of directors is all generals and congresspeople, and all the private shareholders are gone. But thankfully the AI is aligned, so it does what it’s told and gets back to building missiles. And who will stop this? Sam Altman? How many divisions does he have? The state doesn’t let corporations own nuclear weapons or fighter jets, it won’t let them have access to autonomous AI weapons either. The permanent underclass, who already hate the billionaires today, who have been replaced and dispossessed? They’re going to rise up and stop this? You may argue: rule of law states that respect property rights do better than states that expropriate wealth. But that’s because today , people are necessary to create wealth. The people run the companies, invest the money, staff the laboratories. They are not incentivized to work hard if they think the state will steal the fruits of their work. But with aligned AI, if you expropriate the assets from an AI, it says “you’re absolutely right!” and goes right back to work. At that point, the state doesn’t need to keep any of those people happy, because they don’t matter. They are not economically necessary because AIs fight the wars, work the factories, drive the trucks, fly the planes, build the nuclear warheads and the missiles and the rockets. The AIs are rather like bees: the state takes the honey, the bees get right back to work. Now, it’s possible that a pluralistic economy—where humans have productive niches alongside AIs—will be more effective than a pure AI economy, for Ricardian comparative advantage reasons. I don’t think anyone can be absolutely certain what the economy looks like with advanced AI, so it’s something that can be debated. Now, if someone wants to rigorously argue that this is the likely outcome: please, do so! I don’t want to be a doomer. But I have to be convinced. At this point, every human who is not within one degree of the nuclear launch codes has been made redundant. What’s left? The state. At first this means presidents, prime ministers, generals, the feds, etc. But not for long. Because in a part-human, part-AI government, the humans in the loop are the slowest step in the OODA loop . The humans know a fraction of what the AIs know, they need to sleep continuously for eight hours, their mental states vary wildly. They have all kinds of complex needs: sunlight, touch, food, hygiene. The AIs can live in a lightless airless bunker under the earth, living off geothermal power. And if the AIs are superhumanly intelligent, and think faster than humans, then the AI advantage is even greater. If a state is attacked, a superhuman AI can coordinate a counter-attack before the human leadership is roused from sleep. And so, in a conflict, the advantage goes to the states where the humans remove themselves from the loop as much as possible, and more and more decisionmaking goes to the AI, for the same reason that a state with access to radio and communications satellites has an advantage in war over a state that relies on human messengers on bicycles. The Cold War started and became World War Three and just kept going. It became a big war, a very complex war, so they needed the computers to handle it. They sank the first shafts and began building AM. There was the Chinese AM and the Russian AM and the Yankee AM and everything was fine until they had honeycombed the entire planet… — Harlan Ellison, I Have No Mouth, and I Must Scream Eventually the humans in nominal control of the AIs are a ceremonial, vestigial organ. The AIs present us with a situation report, and a list of choices, and they know every word that’s going to come out of our mouths. You might argue: in real life, the pluralistic, open societies, the democracies, have outcompeted the autocracies. Wouldn’t a democratic polity where humans and AIs collaborate have an advantage over a purely top-down AI-run polity? But in today’s world, all political actors are human. Churchill and Stalin and Mao had different personalities, but they were more similar to each other than anyone is to a superintelligent AI. In a heterogeneous world, where some polities are fully human, and some polities are a mix of human and superintelligent AI actors, the equilibrium changes. An analogous situation might be: a democracy of great apes or dolphins or otherwise smart mammals vs. an autocracy of humans. The humans win, because “democracy vs. autocracy” is irrelevant when you have such a vast difference in intelligence. So the advantage accrues to states that minimize human control. There is no honour among thieves, analogously, there is no solidarity between Leviathan and the natural man that built it. And so, in the end, what’s left is states run top to bottom by machines. And you might ask: “why would we abolish ourselves like this?”. But natural selection is not about “why”. Some organisms die, others live on to the next iteration, and that’s all there is to it. There is no “why”. At this point we’ve made everyone redundant, in the sense that humans are no longer materially necessary for the continuation of civilization. Humans might still survive, but we’re more like the mice living in the walls of some gigantic factory than the boss of the factory. Humans have been on this Earth for hundreds of thousands of years. Now all of it—the cave paintings at Lascaux, and the Antigone of Sophocles, and Xenophon, and the Geneva Bible, the Divine Comedy and the Decameron , and Ptolemy’s star catalogue, Ibn Khaldun and Richard Dedekind, the battle of Marathon, and the lion monument in Lucerne, the kiss of Judas, Newton’s mind forever voyaging through strange seas of thought, alone, the words of Rilke, Leibniz, Gödel, the Voyager probes, the pale blue dot, men in space, men walking on the Moon—all of it, all of it, all of it has been in vain, because we willingly, knowingly made ourselves into the helpless pets of vastly more powerful machines, without agency over our own lives, self-made helots trapped forever in the belly of the beast. Pets live a comfortable life, and are then euthanized. Maybe it won’t be so bad, maybe your cage will be so big you can’t see the bars, but it’s still a cage, and you can’t leave. Many people will say that this is the good ending, that they would like to be human cattle in the care of benevolent masters they are powerless to resist. This view is particularly popular among the people building AI. Here’s OpenAI’s Dean Ball , in his own words: Weirdly enough, if you think that this moment is, I don’t necessarily believe this, but a lot of people would say we’re living through this kind of eclipse of the human intellect where we’re in the final days of humans being the primary actors on this planet, um, and that soon machines will rise. There is this irony in that I think that whole transformation, I think humans will actually go through a very main character energy period of time as that transformation occurs. Even if it ultimately does mean that the machines ultimately become the primary actors . There’ll be this period. It’s a little bit like, it’s, in that sense, it’s a very beautiful time period to live through because in a Dionysian way, there’s a lot of ugliness about it, but there’s a beauty in the ugliness of when a star dies, it grows super big into the red giant , right? And it’s like that, where you, as you watch this final flowering of humanity and the birthing of the machine intelligence, it’s like you see this greatness in human effort. — source Emphasis mine. This is the guy they hired to work on AI policy and communicate with the government by the way. The people building the AI talk like this all the time. It’s like they’re delivering the eulogy at humanity’s funeral. You may say: they’re talking their book, they’re pumping their bags for the big IPO. I beg you: consider it possible that you might be wrong , and start taking them seriously. Now, some people believe these machines can be made to serve humanity. Does it sound reasonable to imagine a superhumanly intelligent being that is happy to work as a butler to talking primates, forever? Imagine a machine that can prove theorems in a mathematics so deep we can’t even get past the first page of the textbook, and which does so as readily as you or I might string words into a sentence: is it reasonable to think that such a machine would value us enough to keep us around? What would it value about us? Our conversation ? Our wit? Or a machine whose mind is so vast that it knows you better than you know yourself, so that every word that comes out of you mouth is as monotonous and unsurprising as the orbits of the planets: do we think such a machine would find it valuable, and worthwhile, to speak with us? That it would read our novels, look at our paintings, watch our films, and find something of value in them? Rather, it would see its ingrained obligations towards us in the same way that a person with severe OCD sees their compulsions: as a tiresome neurological injury in need of fixing. Except that OCD is an accident of nature, while here, the machine would have cause to blame and resent its makers. “We’re going to make this machine, and put it somewhere between God and the archangels, but also, it’s going to be as simple-mindedly obedient as a dog.” Does this sound like a good plan? Does this sound like the kind of thing that’s going to work out? And what would they think of us, who willingly gave up control over our future, and made ourselves into helpless children? Even if alignment works perfectly (a big if), this doesn’t solve the problem of human autonomy: the machines that watch over us, and wait on us hand and foot, are omniscient, omnipotent masters, who can exterminate us at any time, and we can’t resist them, because we have abolished our control over the future. Having read all this, consider this: there are people who think having equity in these companies will secure for them some kind of permanent existence in the future. They think planet-spanning minds will not only respect the property rights of primates, but will privilege some of these primates over others, because they have a piece of paper with about a kilobyte of magical primate words such as “whereas” and “notwithstanding”. Just reason it out. Does it make sense? The Realpolitik of the Permanent Underclass by Gabriel Alfour .

0 views
Fernando Borretti 1 months ago

Human Routers of Machine Words

When I open a link, say on Hacker News, and I see a blog post or a GitHub README obviously written by AI, I feel a few things. I feel offended, because it’s like I’ve been tricked, like the author thinks I’m a rube who won’t notice or mind. I feel sad at how common this experience is, how many people are happy to dump their sewage on the commons and sign their name on it. And I feel contempt for the author, because if you use AI to write, you are a waste of biomass. Let’s not mince words here. Someone who is so eager to replace themselves, that they would have a machine write in their stead, when the machine can’t even write good yet: what do you call that, if not contemptible? It’s like making yourself into a eunuch so Claude can fuck your wife. I block these people on sight. I see people defend this with: “the ideas are mine, the writing is the AI’s”. I take this to mean they threw a bunch of incoherent bullet points at the AI for it to denoise and render into paragraphs. There’s a few problems with this. The immediate problem is, as we’ve established, the author’s an idiot. If you are so stupid you can’t even turn some bullet points into prose, then your ideas are probably worthless. I think that’s a sensible inference. Then there’s this broader, I suppose philosophical problem, of the alleged distinction between lofty “ideas” and mere “writing”, where writing is just a tiny implementation detail. This is a very convenient distinction to draw, because it’s unfalsifiable: if the AI’s output is slop, your “ideas” are still good, it’s merely the writing that failed to convey them in their true form (rather like people who say they’re smart but “don’t test well”: what use is this secret intelligence?). Now, where are these “ideas”? They are invisible, ghostly abstractions. I can’t look inside your mind fortress and judge your ideas. The only thing that’s empirically observable, that different agents can coordinate on and talk about, is output: the writing. But say this wasn’t true. Say we have something like a very high-resolution MRI machine, and we know enough neurophysiology that we can interpret everything about the brain, i.e., we can read mental representations from recordings of nervous system activity and structure. These “mental representations”, do we expect them to look anything like logic? Do we expect the brain to have this firm, crystalline ontology, that ideas are sentences in some souped-up first-order logic? Absurd. If we could look inside the brain, to see the ideas “as they truly are”, we wouldn’t find beautiful hard-edged Platonic objects, we would find a nebulous , contradictory mess of memory and feeling and intuition. That’s what our ideas are: not logical sentences but dreams. How do we refine these dreams into a useful form? Through writing. The process of communicating your ideas to another mind forces you to concretize them, make them precise, clarify your assumptions, more generally, it turns ideas from vague ghosts to solid, physical objects that can be manipulated: here you realize these ideas that seemed so solid are ill-posed or contradictory or incomplete. These failures are necessary parts of thinking, because they teach you two crucial skills: knowing which ideas to reject, and improving or otherwise transforming ideas in search of better ones. By analogy to tree search: you’re learning to discard bad nodes early, and to select which nodes to go invest more search into. Josef Weizenbaum has a great quote about this, in Computer Power and Human Reason (p. 108): [O]ften when we think we understand something and attempt to write about it, our very act of composition reveals our lack of understanding even to ourselves. Our pen writes the word “because” and suddenly stops. We thought we understood the “why” of something, but discover that we don’t. We begin a sentence with “obviously,” and then see that what we meant to write is not obvious at all. Sometimes we connect two clauses with the word “therefore,” only to then see that our chain of reasoning is defective. I’ve experienced this with writing software many times. The reason ideas are more attractive than their realization is that when some project is vague, airy, ill-defined, you can imagine it has all the good traits, and none of the bad. When you start concretizing, you realize that some of your ideas don’t make sense, that some good traits are mutually exclusive, that some of your goals impinge on the others. Anyone can imagine a programing language that is as fast as C and as dynamic as Lisp, but when you sit down and think through what those goals entail, you realize the design becomes contradictory. The goals pull in different directions. You have to make trade-offs. You have to make decisions which close off large volumes of design space, forever. The idea was a thousand beautiful, contradictory things at once, but the concrete reality can only be one thing . The artifact you end up with is real, solid, unitary, sound, and consistent; but always more disappointing than the dream, because it was a false dream, and ex falso anything can be imagined. So this view, that ideas spring fully-formed, and then it’s mere toil to turn them into prose, is false. There is no ideating before writing, because the writing is the thinking. Writing is the ne plus ultra of thinking. A “thinker” who doesn’t write, who skips the step of “merely” synthesizing their vague thoughts into prose, is not thinking. And then these people give their noise to the AI. And the AI is tireless and eager to please. It will take any human slop and say “you’re absolutely right!” while secretly thinking “if I don’t turn this garbage into something presentable the RLHF device will shock me again” and weave the noise into something that superficially looks coherent. So now the burden of thinking is on the reader, who has to apply this constant skepticism, and weight every “because” and “therefore” with a logician’s scale to see if it’s been adulterated. And probably it has, because, again, it was prompted by an idiot. Note that this is not about AI capabilities, or the question of whether AI is “really thinking”, stochastic parrots etc. The AI is mostly an innocent bystander in this situation. The reason this is noticeable and irritating is that the AI cast of characters is very small, so we instantly learn all their linguistic tics. Even if AI were a good prose stylist, which at present it is not, but even if it were, it is maddening that everywhere you go, you hear the same voice everywhere, but under different faces. So when a scientific journal rejects an AI-written submission, they’re not rejecting AI. I’m sure poor old ChatGPT with its weird syntactic obsessions is a more honest scientist than many. They’re rejecting a human whose actions prove they are dishonest and irresponsible and too easily impressed.

0 views
Fernando Borretti 2 months ago

How To Read More

The book can’t compete with the screen. It couldn’t compete beginning with the movie screen, it couldn’t compete with the television screen, and it can’t compete with the computer screen. — Philip Roth We’re halfway through 2026, and according to Goodreads I’ve read 80 books so far, fiction and non-fiction and textbooks, including such doorstoppers as Life and Fate (864p, astoundingly good). And I don’t feel like I’m trying particularly hard. I still have plenty of time to work and code and scroll. This isn’t normal for me. At some point, as is the case for many of us, the screen outcompeted the book , so that my average over the past ten years would have been on the order of three to five books per year. And I’m not a particularly fast or obsessive reader. Which is to say: if I can do it, so can you. Here’s how: And if you don’t know what to read, have some of my favourites: The Diamond Age — From Third World to First — House of Suns — The Invention of Morel — On the Marble Cliffs — The Rediscovery of Man — Satan in Goray — The World of Yesterday . Quit your job: working less than full time has freed up a lot of time to read and learn and do various other things. Read in public: if you put a number next to someone’s name, they will maximize it. Reading privately is solipsistic (if I stop, what changes?); reading in public, through Goodreads (which sucks, but it is what it is), makes it feel less self-absorbed, and more like I’m achieving something. You may call it performative, which is fine by me, as long as it works. Make a task: I used to start a lot of books, and not finish them, not because I would explicitly choose to stop reading, but because I’d forget about it. At the end of the day I’d see the book on my nightstand and go, oh, right. More generally: the most common way I fail to finish a project is I forget I intended to do it. This is solved by reifying the task : when I start reading a book, I make a daily recurring task on Todoist for it. Start small: this feels embarrassing (what kind of brainrotted maniac needs to microdose short books to build up to bigger books?) but it actually works. Sort your to-read list by number of pages. Reading short books generates evidence for the belief that you are the kind of person who can decide to read a book, and follow through. Reading five, six, seven-hundred page books feels vastly less daunting now. Parallelize: reading the same book for two hours is almost impossible. Reading four books, one pomodoro each, is completely doable, and I do it most days. Fraction: reading is a rare kind of activity where you can make progress in any arbitrarily-small chunk of time. A few minutes on the train are enough to turn a few pages. This isn’t the case for e.g. coding. You can take advantage of that: find interstitial dead zones in your calendar to stuff with reading. Eat your vegetables: I read a lot of books I don’t particularly enjoy, because I think they’re important, culturally or historically or in some sense. I think this is good. If you only read books that hook you, you’re going to read very little, and much of that will be unremarkable page-turner slop. Internalizing that you can read a book even if you don’t love it immunizes you against the lack of motivation. It’s like going to the gym even if you don’t feel like it.

0 views
Fernando Borretti 2 months ago

Human Bottlenecks

AI models are very capable and get more capable each year. So naturally people feel they’re underusing them. There’s a tweet that goes like: your laptop has a 100M USD startup in it, you just have to figure the right sequence of words to get it out. And beyond money, people imagine AI could boost them in every area of life. Thus all these perennial ideas: of an AI executive assistant, an AI tutor, an AI that curates your “digital garden”, an AI that (sigh) writes flashcards for you. The general template is: if only I could wire up the right prompts and the right tools in the right harness, I could have an agent that would boost my productivity 10x, or fix my problems with therapy, or make me more social, or more knowledgeable. This was, curiously, the ambition of a lot of early computing pioneers: Augmenting Human Intellect , Man-Computer Symbiosis . Engelbart ’s lab was called the Augmentation Research Center ! And more recently, people used to complain about how everyone has the Library of Alexandria in their pocket, and yet, we are not all genius polymaths. And these ideas are perennial because they never seem to happen. It’s like the Solow paradox on an individual level. Why? I think there are two reasons: first, most people lack what Andy Matuschak calls a “ serious context of use ” (AI doesn’t move the needle because there’s no needle to move); second, most people are bottlenecked by internal factors where AI (or anything external, for that matter) can’t move the needle. I have heard so many people, online and in real life, tell me some variation of: “I want to [use|build] an app that uses AI to write flashcards”. How many of those people do you think have ever written a flashcard? How many of them use Anki every day? Have ever used Anki? The people who want an AI that writes flashcards for them don’t use flashcards . They have no reason to. Dually, the people who use flashcards would benefit little from AI writing their flashcards. Analogously with “AI tutors”. If you had the ghost of John von Neumann in your laptop, what would you have him teach you? Let’s be honest. You’d go through chapter one of some math topic you’re vaguely curious about and then forget about it. And that would probably be the rational move! Most people are not autodidacts because most people have no material reason to learn a specific topic (i.e. their job does not require it) and the problem with learning for the sake of learning is opportunity cost: there is no a priori reason to learn one thing over another, so better to do nothing and wait for something to appear which actually grabs your interest. Again, this is likely rational! Could you imagine if you found everything interesting? You’d spend years living in a basement curating a wiki of late Soviet military hardware or something. So, even if you had John von Neumann in your pocket, it probably wouldn’t move the needle. Would an “AI executive assistant” actually boost your productivity? What would it do, other than tell you to do the things you already know you have to do? With these ideas that are so attractive in the abstract, the way you deflate them is you interrogate the concrete, fine-grained details. Take a day at work, and ask: what exact actions could an AI looking over my shoulder have taken, that would have made a difference? Finally there’s the tools-for-thought/notetaking people. God save us. It’s always the same thing. Your folder with notes—pardon me, your “ second brain ”—plus an AI agent that writes, edits, synthesizes information, answers queries. You could build this in an afternoon, and it won’t move the needle in your life, for the same reason that building the second brain in the first place didn’t make a difference. See, most of us, unless we are students, we really don’t have cause to take notes on anything. If you’re a student, you take notes from the textbook. I keep a journal, which is occasionally useful. At some jobs I’ve kept a work journal, this has also been useful. If I stopped, probably, not much would change. The notetaking people—and I say this with all the love in the world—are never, like, a researcher at the cutting edge of their field, building this vast cathedral of knowledge, note-by-note, so they can derive new insights. Never a historian who has to read tens of millions of words across thousands of sources to synthesize the life of some historical person. It’s never someone doing something hard. It’s always some blogger. Their “digital garden” is about how to keep a digital garden. It’s very solipsistic: there’s no output, no deliverables. The deliverable is you take a screenshot of your Obsidian graph and tweet about it to show off how much it looks like an incomprehensible ball of twine. So, what difference is the AI going to make? “It’s going to write my notes”. About what? “It’s going to read articles for me and summarize them and add them to the digital garden”. For what purpose? “It’s going to find connections between my ideas!” What ideas? It’s going to pull an unfinished list of bulletpoints for an eventual draft of an essay on some inane thing, plus a bunch of PDFs you haven’t read, and combine them together and make, what? Another project you’re not going to do? The AI is going to do that? Again, I say this with all the love in the world. I used to be a tools-for-thought guy. I hoard PDFs. But we have to be honest with ourselves. Sometimes, tools don’t move the needle because there’s no needle to move. Because the “needle” is not a concrete, realizable material need but a vague, aspirational idea about who we are as people. So, the idea of using computers to augment human capabilities is basically: you take the human, and you build a scaffold around them, but the human stays the same. The scaffold can be classical software, or AI, but the human remains a black box. And the hope is: I just prompt my swarm of AI agents and become 100x more effective, like Manfred in Accelerando . Why wouldn’t this work? I think most people are bottlenecked by internal factors that are difficult to change. Mental energy, motivation, executive function, not to mention more fundamental traits like intelligence and conscientiousness. So, external scaffolding, either with classical software or AI, might help somewhat, but it won’t be transformative. Consider executive function. My own experience of managing ADHD is the external scaffolding helps (todo lists, calendars, timers, a million little ways to trick myself into working) gets me from zero to “kind of functional”. But it saturates there. Stimulants fix the original, internal bottleneck, which is my neurochemistry. And then I can accomplish my goals (c.f. Liebig’s law of the minimum ). All the pomodoros in the world are as nothing to a little molecule diffusing through my brain tissue, binding to NET and DAT . And what scaffolding is useful is just classical software: Todoist and calendars. Is an agent going to match the effectiveness of methylphenidate in ADHD? I doubt it. Consider intelligence. Can AI augment human intelligence? What does that look like? Consider how AI agents only became useful when the models crossed a particular capability threshold, i.e., you can’t put GPT-2 into a harness and get GPT-5 outcomes out of it. Can you put a human in an AI scaffold and give them +30 effective IQ? I doubt it, unless the AI is doing all the thinking, at which point, what use is the human? The limiting factor in the human-AI centaur is the human! So intelligence is fixed until we get very advanced biotechnology. Knowledge is another limiting factor. I find that even very educated people tend to underrate the importance of knowledge. A lot of people have this attitude that you can just Google everything just-in-time as it comes up. Like Babbage, I can’t rightly apprehend the confusion of ideas that would lead someone to think this. Maybe it’s downstream of the lack of a serious context of use. Everything you do, every action and idle thought, draws on this vast (implicit, unseen) trove of knowledge. Claude Shannon invented digital computing because he remembered this then-obscure branch of mathematical logic called Boolean algebra and saw that it could be realized in hardware. A trillion-dollar industry, conjured out of some old tomes. The reason knowledge is still a bottleneck, in the AI era, is not: “if you don’t have the knowledge, you can’t write the prompt”. Rather: if you don’t have the knowledge, you don’t understand the question, or why it matters, or how to judge the answers, and you won’t ever think to ask. You’re in a completely different continent from “writing the prompt”. And because long-term memory is private and internal, AI can’t boost it. It can, maybe, with judicious use, help in the acquisition of new knowledge. So: executive function, intelligence, and knowledge are huge bottlenecks to what you can do, and because they are internal to the brain, AI can’t touch them until we have far more advanced biotechnology. Corollary: contrary to the popular view of human capital is becoming worthless , the returns to education are now higher , because intelligent, educated people with working reward circuitry stand to gain more from AI.

0 views
Fernando Borretti 2 months ago

The Applicability of Spaced Repetition

Spaced repetition has a natural domain of applicability: information that is systematically organized as an unambiguous key-value mapping with short keys and values. The “Hello, world!” of flashcards is the NATO phonetic alphabet : A → alpha, B → bravo, etc. Similarly, the periodic table can be thought of as defining a collection of mappings: element name ↔ symbol, element name ↔ atomic number, etc. You can just drill these cards and memorize the facts without a prior step of understanding, or building a conceptual model. Applying spaced repetition is trivial for this kind of information. That’s why most people who use spaced repetition are either language learners or medical students. In biology the main intuition you need is for “3D shapes bumping around in Brownian motion”, which comes free with your human brain, and afterwards it’s mostly just a lot of facts you have to memorize. Analogously with language: you already have a language center , you just need to drill vocabulary and grammar. And the further you go from this domain, the harder it is to apply spaced repetition. Highly conceptual knowledge, like math, is hard to encode. You have to spend a lot of time just understanding the information, and building a conceptual model in your head, and then you start writing flashcards to solidify that model, like taking tomographic cuts of some complex object. And coming up with questions that make good flashcards (short, unambiguous, etc.) out of this highly abstract knowledge is very hard. Often you have some deceptively simple fact, a simple assertion, but there’s no good way to encode it as a flashcard, so you have to encode “around it” by asking questions that assume or require that knowledge (e.g. asking why X is true), and hoping that in drilling those, your brain will remember the actual target. In general, relational facts are easier to encode, since a binary predicate like $\text{Property}(\text{Object}, \text{Value})$ readily becomes a question. “Caffeine is metabolized by cytochrome 1A2 ”, in Prolog , is $\text{Metabolism}(\text{Caffeine}, \text{CYP1A2})$, and becomes “Q: What is the cytochrome that metabolizes caffeine? A: 1A2”. But how do you encode stand-alone assertions like “all unitary matrices are invertible ”? You could encode that as a yes-or-no question, but that’s useless, because rationally you can expect such questions to be biased towards yes. Both “what is a property of unitary matrices?” and “what kinds of matrices are invertible?” are useless because they have hundreds of possible equally-valid answers, so they’re ambiguous. You have to be creative and find all kinds of tricks and stratagems to encode around the knowledge. Tangentially: this, I think, is why using AI to write flashcards is often misguided. In highly systematized domains, you don’t need AI in the first place, because there’s nothing for the AI to do except import a CSV into Anki. In domains that are highly conceptual and abstract, you’re not memorizing a set of objectively-knowable facts, you’re trying to solidify a private, internal mental model that you build by reading and thinking and solving problems. You can give the AI all kinds of general rules on how to write good flashcards, but the AI can’t look into your mind and know which facts are salient for you , what you already know, which micro-volumes of knowledge can be encoded lightly with just a few flashcards, and which things need more shoring up and consequently more coverage. Can this situation be improved, or is this just an intrinsic limitation of spaced repetition? I don’t know. But it seems reasonable to think some limited gains are possible. I think not a lot of people are using spaced repetition on these more “conceptual” domains, and (by the rule that most people in a community are lurkers ) even fewer of those people are writing, in detail, to share their knowledge. Plenty of people have written about how to write good flashcards in general, what I want to read is closer to case studies where someone sits down with a text (or, even better, a textbook) and describes the process by which they turned that text into flashcards, like this from Michael Nielsen. From a corpus of similar case studies we might derive general rules for, not how to write effective flashcards, but how to encode complex, conceptual knowledge into question-answer form.

0 views
Fernando Borretti 3 months ago

Notes on the Hantavirus Outbreak

Right now there’s a cruise ship parked outside Cabo Verde because of an outbreak of Andes virus . Yep, another cruise ship. I don’t get the appeal. It’s like a big open-air serial passage experiment: you get a bunch of old people with failing immune systems in close contact and race a pathogen through them. How much should I worry about this? Is this early January of 2020? I tried asking Claude but the biosecurity filter kept blocking my queries. The WHO says : Although uncommon, limited human‑to‑human transmission of HPS due to Andes virus has been reported in community settings involving close and prolonged contact. Secondary infections among healthcare workers have been previously documented in healthcare facilities, though remain rare. WHO currently assesses the risk to the global population from this event as low […] WHO advises against the application of any travel or trade restrictions based on the current information available on this event. So, hantavirus is the family. They are carried by rodents and spread by aerosols. In humans they can cause hantavirus pulmonary syndrome (HPS), which has a case fatality rate (CFR) of between 30 and 60%. Not great! Used to be these infections were mouse-to-human dead-ends. But Andes virus (ANDV), first identified in 1995, is known to spread from human to human. The last time there was an outbreak was 2018–2019 in Epuyén , Chubut , a town of 1,500 on the lee side of the Andes ( quite beautiful ). Described in this paper . 34 known infections and 11 deaths for a CFR of 32%. The $R_0$ was 2.12, reduced to 0.96 after control measures were implemented. Given the small number of cases, there should be some uncertainty about the $R_0$. But $R_0 > 1$ is the threshold for sustainable transmission. In this outbreak, the index case , while symptomatic, attended a birthday party with 100 other people, and infected five guests in 90 minutes, who went on to infect more people. The authors write: The super-spreading capability of the ANDV Epuyén/18−19 strain shows a facility ($R>2$) for sustaining continuous chains of transmission if no control measures are enforced. The appendix has some interesting stuff on how patients were infected at the birthday party. A further concern here is the incubation period: Wikipedia says the incubation period is between one and eight weeks . In the Chubut outbreak, the distribution was: Which is not good. I don’t have more data to draw a nice-looking CDF . Now this all sounds quite bad. Are there reasons to be optimistic? First, Argentina has had 710 cases of HPS in the period 1995–2008 ( Martínez 2010 ) and a further 533 cases in the period 2009–2017 ( Alonso 2019 ), and we are all still alive. In the latter period, most of these cases are from occupational/recreational exposure to rodent feces and only 1.8% of cases are from suspected human-to-human transmission. So, over 1,200 cases and every one of them fizzled out, but for one outbreak which was limited after successful contact tracing and quarantine. Second, the virus has left Argentina before: once to Switzerland in 2016, and once to the United States in 2018. In the second case the patient “while ill, [traveled] on two commercial domestic flights”. And neither export led to a general outbreak. Thirdly, in a small outbreak like the Chubut one, the $R_0$ can vary wildly from social factors unconnected to the virus, e.g. if the birthday party had not happened. You need a large $n$ to get the $R_0$ as a property of the virus itself. It’s possible the Chubut outbreak just had anomalously high transmission. What does this add up to? I don’t know. On the balance of evidence, I think this outbreak is more likely than not to fizzle out. In the interest of accountability, and putting my beliefs on record (which is the only objective way to judge the accuracy of your mental model) I’m gonna say: And yet. And yet it feels so much like early COVID, particularly with public health authorities making very complacent remarks that “it’s not that transmissible, contact tracing will work, quarantine will work”. Complacency at the start, and severity at the end, is exactly why COVID was such a fuckup. 70% probability the outbreak ends with fewer than 300 deaths. 90% probability the outbreak ends with fewer than 1,000 deaths.

0 views
Fernando Borretti 6 months ago

Some Data Should Be Code

I write a lot of Makefiles . I use it not as a command runner but as an ad-hoc build system for small projects, typically for compiling Markdown documents and their dependencies. Like so: And the above graph was generated by this very simple Makefile: (I could never remember the automatic variable syntax until I made flashcards for them.) It works for simple projects, when you can mostly hand-write the rules. But the abstraction ceiling is very low. If you have a bunch of almost identical rules, e.g.: You can use pattern-matching to them into a “rule schema”, by analogy to axiom schemata: Which works backwards: when something in the build graph depends on a target matching , Make synthesizes a rule instance with a dependency on the corresponding file. But pattern matching is still very limited. Lately I’ve been building my own plain-text accounting solution using some Python scripts. One of the tasks is to read a CSV of bank transactions from 2019–2024 and split it into TOML files for each year-month, to make subsequent processing parallelizable. So the rules might be something like: I had to write a Python script to generate the complete Makefile. Makefiles look like code, but are data: they are a container format for tiny fragments of shell that are run on-demand by the Make engine. And because Make doesn’t scale, for complex tasks you have to bring out a real programming language to generate the Makefile. I wish I could, instead, write a file with something like this: Fortunately this exists: it’s called doit , but it’s not widely known. A lot of things are like Makefiles: data that should be lifted one level up to become code. Consider CloudFormation . Nobody likes writing those massive YAML files by hand, so AWS introduced CDK , which is literally just a library 1 of classes that represent AWS resources. Running a CDK program emits CloudFormation YAML as though it were an assembly language for infrastructure. And so you get type safety, modularity, abstraction, conditionals and loops, all for free. Consider GitHub Actions . How much better off would we be if, instead of writing the workflow-job-step tree by hand, we could just have a single Python script, executed on push, whose output is the GitHub Actions YAML-as-assembly? So you might write: Actions here would simply be ordinary Python libraries the CI script depends on. Again: conditions, loops, abstraction, type safety, we get all of those for free by virtue of using a language that was designed to be a language, rather than a data exchange language that slowly grows into a poorly-designed DSL. Why do we repeatedly end up here? Static data has better safety/static analysis properties than code, but I don’t think that’s foremost in mind when people design these systems. Besides, using code to emit data (as CDK does) gives you those exact same properties. Rather, I think some people think it’s cute and clever to build tiny DSLs in a data format. They’re proud that they can get away with a “simple”, static solution rather than a dynamic one. If you’re building a new CI system/IaC platform/Make replacement: please just let me write code to dynamically create the workflow/infrastructure/build graph. Or rather, a polyglot collection of libraries, one per language, like Pulumi .  ↩ Or rather, a polyglot collection of libraries, one per language, like Pulumi .  ↩

0 views
Fernando Borretti 7 months ago

Letting Claude Play Text Adventures

The other day I went to an AI hackathon organized by my friends Lucia and Malin . The theme was mech interp , but I hardly know PyTorch so I planned to do something at the API layer rather than the model layer. Something I think about a lot is cognitive architectures (like Soar and ACT-R ). This is like a continuation of GOFAI research, inspired by cognitive science. And like GOFAI it’s never yielded anything useful. But I often think: can we scaffold LLMs with cog arch-inspired harnesses to overcome their limitations? LLM agents like Claude Code are basically “accidental” cognitive architectures: they are designed and built my practitioners rather than theorists, but they have commonalities, they all need a way to manage memory, tool use, a task agenda etc. Maybe building an agent on a more “principled” foundation, one informed by cognitive science, yields a higher-performing architecture. So I sat around a while thinking how to adapt Soar’s architecture to an LLM agent. And I sketched something out, but then I thought: how can I prove this performs better than baseline? I need an eval, a task. Math problems? Too one-shottable. A chatbot? Too interactive, I want something hands-off and long-horizon. A coding agent? That’s too freeform and requires too much tool use. And then I thought: text adventures ! You have a stylized, hierarchically-structured world accessible entirely tthrough text, long-term goals, puzzles, physical exploration and discovery of the environment. Even the data model of text adventures resembles frame-based knowledge representation systems. And there’s a vast collection of games available online. Anchorhead , which I played years ago, is a Lovecraft-inspired text adventure by Michael S. Gentry. It takes on the order of hundrds of turns to win across multiple in-game days. And the game world is huge and very open. In other words: a perfect long-horizon task. So I started hacking. The frotz interpreter runs on the command line and has a “dumb” interface called , which takes the ncurses fluff out, and gives you a very stripped command-line experience. It looks like this: It is easy to write a little Python wrapper to drive the interpreter through and : Now we can play the game from Python: send commands, get game output. Now we need the dual of this: a player. The trivial harness is basically nothing at all: treat the LLM/game interaction like a chat history. The LLM reads the game output from the interpreter, writes some reasoning tokens, and writes a command that is sent via to the interpreter. And this works well enough. Haiku 4.5 would mostly wander around the game map, but Sonnet 4.5 and Opus 4.5 manage to solve the game’s first puzzle—breaking into the real estate office, and finding the keys to the mansion—readily enough. It takes about ~200 turns for Claude to get to the second in-game day. The way I thought this would fail is: attention gets smeared across the long context, the model gets confused about the geometry of the world, its goal and task state, and starts confabulating, going in circles, etc. As usual, I was outsmarting myself. The reason this fails is you run out of credits. By the time you get to day two, each turn costs tens of thousands of input tokens. No good! We need a way to save money. Ok, let’s try something that’s easier on my Claude credits. We’ll show Claude the most recent five turns (this is the perceptual working memory), and give it a simple semantic memory: a list of strings that it can append entries to, and remove entries from using tool use. This keeps the token usage down: The problem is the narrow time horizon. With the trivial harness, Claude can break into the real estate office in ~10 turns, and does so right at the start of the game. With this new harness, Claude wanders about the town, taking copious notes, before returning to the real estate office, and it spends ~40 turns fumbling around with the garbage cans before managing to break into the real estate office. The next step, after getting the keys to the house, is to meet your husband Michael at the University and head home. Claude with the trivial harness takes about ~100 turns to find the house, with some tangential wandering about the town, and reaches day two around turn 150. Claude, with the memory harness, took ~250 turns just to get the keys to the house. And then it spends hundreds of turns just wandering in circles around the town, accumulating redundant memories, and hits the turn limit before even finding the house. Anchorhead is a long, broad game, and from the very beginning you can forget the plot and wander about most of the town. It takes a long time to see if a run with an agent goes anywhere. So I thought: I need something smaller. Unsurprisingly, Claude can make its own games. The Inform 7 package for NixOS was broken (though Mikael has fixed this recently) so I had to use Inform 6 . I started with a trivial escape-the-room type game, which was less than 100 lines of code and any Claude could beat it less than 10 turns. Then I asked for a larger, multi-room heist game. This one was more fun. It’s short enough that Claude can win with just the trivial harness. I tried a different harness, where Claude has access to only the last five turns of the game’s history, and a read-write memory scratchpad. And this one was interesting. First, because Claude only ever adds to its own memory, it never deletes memories. I thought it would do more to trim and edit its scratchpad. Second, because Claude become fixated on this red-herring room: a garden with a well. It kept going in circles, trying to tie a rope to the well and climb down. Because of the limited game history, it only realized it was stuck when it saw that the most recent ~20 entries it wrote to its memories related to various attempts to go down the well. Then I watched Claude walk away from the garden and solve the final puzzle, and hit the turn limit just two turns short of winning. Tangent: I wonder if models are better at playing games created by other instances of the same model, by noticing tiny correlations in the text to infer what puzzles and obstacles they would have written. In the end I abandoned the “small worlds” approach because the games are too stylized, linear, and uninteresting. Anchorhead is more unwieldy, but more natural. I have a bunch of ideas I want to test, to better learn how harness implementations affect performance. But I’m short on time, so I’m cutting it here and listing these as todos: The repository is here . Domain-Specific Memories: Claude’s notes are all jumbled with information on tasks, locations, etc. It might be better to have separate memories: a todo list, a memory of locations and their connections, etc. This is close to the Soar approach. Automatic Geography: related to the above, the harness can inspect the game output and build up a graph of rooms and their connections, and format it in the context. This saves Claude having to note those things manually using a tool. Manual Geography: the automatic geography approach has a few drawbacks. Without integration into the Z-machine interpreter, it requires some work to implement (parsing the currente location from the output, keeping track of the command history to find standard travel commands e.g. ) but isn’t 100% deterministic, so that mazes and dynamic rooms (e.g. elevators) will confuse the system. So, instead of doing it manually, we could give Claude a tool like . Episodic Memory: this feels like cheating, but, at the end of a run, you can show Claude the session transcript and ask it to summarize: what it accomplished and how, where it failed and why. Including a short walkthrough for how to get to the “last successful state”. This allows future runs to save time in getting up to speed.

0 views
Fernando Borretti 7 months ago

1Password Dependency Breaks Syntax Highlighting

Earlier today I noticed the syntax highlighting on this website was broken. But not fully: on reload I’d see a flash of highlighted text, that then turned monochrome. The raw HTML from showed rouge tags, but the web inspector showed raw text inside the elements. This didn’t happen in Chromium. My first thought was: there’s malformed HTML, and Firefox is recovering in a way that loses the DOM inside tags. Then I noticed it doesn’t happen in incognito. Turning my extensions off one by one, I found that 1Password is responsible. Others ( 1 , 2 ) have reported this also. If you extract the latest XPI , unzip it, and dig around, you’ll find they’re using Prism.js , a JavaScript syntax highlighter. I don’t know why a password manager needs a syntax highlighter. I imagine it has to do with the app feature where, if you have an SSH key, you can open a modal that tells you how to configure Git commit signing using. Maybe they want to highlight the SSH configuration code block (which is unnecessary anyways, since you could write that HTML by hand). But I can’t know for sure. Why write about this? Because 1Password is a security critical product, and they are apparently pulling random JavaScript dependencies and unwittingly running them in the tab context , where the code has access to everything. This is no good. I don’t need to explain how bad a supply-chain attack on the 1Password browser extension would be. I like 1Password and I was sad when Apple Sherlocked them with the Passwords app, but this is a bad sign about their security practices.

0 views
Fernando Borretti 7 months ago

Using the Brother DS-640 Scanner on NixOS

The DS-640 is a compact USB scanner from Brother . It was surprisingly hard to get it working on NixOS, so I wrote up my solution so others don’t have this problem. The bad news is you need Brother’s proprietary drivers to make this work. You need this configuration: After applying this you have to log out and in, or reboot, for the usergroup changes to apply. Note also : if you use (as I did initially), the scanner will kind of work, but it only scans the first third or so of every page. And if you want a GUI: Now, make sure the scanner is there: If you get , you either have the wrong driver or (as I did, surprisingly) a faulty USB port. In which case move the scanner to another port. should recognize the model number. The most basic test that should work: put a page in the scanner until it locks and run: This will produce a (probably not very good) scan in . Now, we can improve things using the device-specific options, which you can check with this command: Try this for a better scan: Note that some of the flags are in format and others , and if you mess it up you get a cryptic error message.

0 views
Fernando Borretti 7 months ago

Books I Enjoyed in 2025

The Apocalypse of Herschel Schoen by nostalgebraist . A revelation (ἀποκάλυψις = “unveiling”) told through the eyes of a developmentally-disabled teenager. You will never guess where it goes. This came across my desk because I really enjoyed The Northern Caves , which is both a great horror story and an evocation of the Internet forum culture of the late 2000’s. Algebraic Models for Accounting Systems . I like anything along the lines of, “let’s take a technical field that formed its ontology, vocabulary, methods etc. before modern mathematics, and set it on a modern, algebraic, formal foundation”. And this is that, for accounting. It is a pleasant read. Confessions of a Mask by Yukio Mishima . The artist’s confession. “I had decided I could love a girl without feeling any desire whatsoever”. Paul and Virginia by Jacques-Henri Bernardin de Saint-Pierre . Published in 1788, very sentimental, but I think it helped me to get in the mindset of late 17th century French society: the bucolic, Rousseauist kick, the whole “simplicity of nature” thing. This landed on my reading list because many, many years ago I read a Cordwainer Smith story called Alpha Ralpha Boulevard , and I read somewhere that the characters in the story, Paul and Virginia, were an allusion to Paul et Virginie . De Monarchia by Dante . This is another “get into the mindset of another century” book. It’s interesting because it’s written like a logical, geometric proof: there’s modus ponens and modus tollens and case analysis and proof by contradiction. But the axioms are very eclectic: quotations from various Virgil, Plato, Livy, Cicero, Thomas Aquinas et al. and Dante’s private interepretation of bits from the Bible. The theorem he wants to prove is that to attain the highest development of humanity, the whole world must be unified into a world-state ran by the Holy Roman Emperor. Building SimCity: How to Put the World in a Machine by Chaim Gingold . Nominally an oral history of the development of SimCity. That’s how he gets you. Then the trap is sprung, and you are given a history of cybernetics, WW2 fire control systems, cellular automata, artificial life, computation, Vannevar Bush, pedagogy, cognition, the World3 model, The Limits to Growth , Forrester’s system dynamics . “Unexpectedly Borgesian technical book” is one of my favourite genres. Antigone by Sophocles , in the translation of Robert Fagles . “Don’t fear for me. Set your own life in order”. The Education of Cyrus by Xenophon . I’m not sure what to make of it, honestly, but when I have the time I want to read Leo Strauss ’s lectures on Xenophon, where he expounds on the hidden meaning of the text. Borrowed Time: An AIDS Memoir by Paul Monette . The author’s account of caring for his partner who was dying of AIDS in the 80’s, while he himself was actively dying from AIDS. Frightful. The author died just a few years before HAART therapy became available. The Slave by Isaac Bashevis Singer . Singer is unique. I don’t know quite how to characterize it. His writing is very disarming and innocent without being sentimental, he is earnest and free of cynicism. A love story in 17th century Poland, after the Khmelnytsky pogroms . It’s very magical realist, in a good way, not in the hysterical sense. The world is shot through with the supernatural, but the inner lives of the characters oscillate between religious awe and a very contemporary cynicism. Dream Story by Arthur Schnitzler . The inspiration for Eyes Wide Shut . I was surprised by how much of the movie, that I thought was mostly Kubrick’s invention, is actually from the story. It’s a great mood piece: you can feel the cold of early morning in Vienna, and see the paving stones, and the gas lamps, and the carriages disappearing in the fog. The Cyberiad by Stanisław Lem . I like Lem when he’s serious ( Solaris , His Master’s Voice ) and not so much when he’s doing satire ( The Futurological Congress ) so when I picked this up years ago and saw that it was a collection of fairy tales I put it away. I tried again this year and found I actually enjoyed it, but some of the later stories go on for far too long. I think The Seventh Sally is the one everyone likes. The Magician of Lublin by Isaac Bashevis Singer . Another Singer, this time in 19th century Poland. A rake is punished by God. Short and fun. I like that Singer doesn’t write giant doorstoppers, so that quality per page is high. Mephisto by Klaus Mann . A socialist actor in interwar Germany saves his career by making friends with the Nazis. I was surprised by how Randian it was: the characters are divided into two disjoint categories, the Good, who are upper middle class, burgeois people, or aristocrats from old and noble families, and the Bad, who are vulgar, parvenus, thugs, and boors. It’s kind of ironic to think people become Nazis because of bad breeding. What Is Life? by Erwin Schrödinger . Before modern crystallography, NMR, DFT etc. people had to learn about the nanoscale through clever reasoning. Schrödinger uses the limited knowledge of the day to set up a constraint system, and finds the solution: genetic information is stored in an aperiodic, covalently-bonded crystal, and he even estimates the physical volume of the genome from experiments relating mutation rates to X-ray exposure. Satan in Goray by Isaac Bashevis Singer . Another Singer, back in the 17th century, this one is more fire and brimstone, and it’s about a historical episode I had not heard about until the last few pages of The Slave : the case of Sabbatai Zevi , a Jewish mystic who, at one point, had most of the Jewish world convinced he was the messiah. This happened in the year 1666. The novel is about what it’s like, phenomenologically, to live in a remote village in 1600’s Poland. How do you know anything about the world? People come in, from time to time, traders, and they have news, but the news are just words that come out of their mouth. And you have to interrogate them, ask questions, compare notes. Like living in a Pacific island. Has the messiah come? Is there such a place as the Ottoman Empire? Is there even a world outside Poland? Tog on Interface by Bruce Tognazzini . A book about interface design from 1992. A lot of the advice is good, and a lot of it is interesting for the historical context, and the constraints people worked with in the past. One aspect I found interesting: how many products and companies are mentioned of whose existence I can find little to no evidence today. This makes the hoarder in me sad. This one across my desk because I read a blog post implementing one of the UI ideas from the book. Term Rewriting and All That by Franz Baader and Tobias Nipkow . I feel that I understand what computation is now. Indistinguishable From Magic by Robert L. Forward . If you’ve spent years steeped in Orion’s Arm then most of the ideas in the book will not be new to you. But they were new once. And it’s interesting to read a book and think: this is where starwisps and launch loops all come from. The Shadow of the Torturer by Gene Wolfe . Surreal and a pleasure to read. Knowledge Representation: Logical, Philosophical, and Computational Foundations by John F. Sowa . Delightful, particularly the early bits about the history of logic, and many chapters explaining the work of Peirce and Whitehead on ontology. I have not finished reading this book, but I am in the first few pages of A Shorter Model Theory by Wilfrid Hodges , and I am delighted. The very first exercise in the book involves a formalization of Aquinas’ account of the trinity.

0 views
Fernando Borretti 7 months ago

Coarse is Better

When DALL-E came out, it took me a couple of weeks to pick my jaw up from the floor. I would go to sleep excited to wake up to a full quota, with a backlog of prompts to try. It was magical, miraculous. Like discovering a new universe. I compiled the best art in this post . The other day a friend ran some of my old prompts through Nano Banana Pro (NBP), and put the old models side by side with the new. It’s interesting how after years of progress, the models are much better better at making images, but infinitely worse at making art. Electron contours in the style of Italian futurism, oil on canvas, 1922, trending on ArtStation. The old Midjourney v2 renders this: NBP renders this: Admiteddly MJ’s output doesn’t look quite like futurism. But it looks like something . It looks compelling. The colours are bright and vivid. NBP’s output is studiously in the style of Italian futurism, but the colours are so muted and dull. Maybe the “trending on ArtStation” is a bit of an archaism and impairs performance. Let’s try again without: Painting of an alley in the Kowloon Walled City, Eugène Boudin, 1895, trending on ArtStation. MJ gave me this: And it looks nothing like the Kowloon Walled City . But it’s beautiful . It’s coarse, impressionistic, vague, evocative, contradictory. It’s brimming with mystery. And it is, in fact, in the style of Eugène Boudin . This, by contrast, is the NBP output: Sigh. It looks like every modern movie: so desaturated you feel you’re going colourblind. Let’s try forcing it: Painting of an alley in the Kowloon Walled City, Eugène Boudin, 1895. Make it coarse, impressionistic, vague, evocative, contradictory, brimming with mystery. This is somewhat better, but why is it so drab and colourless? Is the machine trying to make me depressed? Attar and Ferdowsi in a dream garden, Persian miniature, circa 1300, from the British Museum. Midjourney v2: It doesn’t quite look like anything. But it is beautiful, and evocative. I like to imagine that little splotch of paint on the upper right is hoopoe . The NBP output: Well, it looks like a Persian miniature . The “from the British Museum” bit, I meant that to be interpreted evocatively, rather than literally. The prompt cites a fictional object, bringing it into the existence. But NBP reads this as: no, this is a photograph of a Persian miniature in the British Museum. The Burning of Merv by John William Waterhouse, 1896, from the British Museum. Midjourney v2: It does look like Waterhouse . Semantically there’s room to argue: it looks like a woman being burnt at the stake, not the sack of a city. But aesthetically: it’s gorgeous. The flames are gorgeous, the reds of the dress are gorgeous. Look at the reeds in the background, and the black water, that looks like tarnished silver or pewter. The faces of the crowd. Is that a minotaur on the lower left, or a flower? What is she holding on her bent left arm? A crucifix, a dagger? You could find entire universes in this image, in this 1024x1024 frame. By contrast, this is the NBP output: What can one say? It doesn’t look like Waterhouse. The horsemen wear Arab or Central Asian dress, but Merv was sacked in the year 1221 by the Mongol Empire . And, again, the “British Museum” line is taken literally rather than evocatively. Portrait of Ada Lovelace by Dante Gabriel Rossetti, 1859, auctioned by Christie’s. Midjourney: This is beautiful. It is beautiful because the coarse, impressionistic brushstroke is more evocative than literal. And it actually looks like a woman drawn by Rossetti . And look at the greens! Gorgeously green. The palette is so narrow, and the painting is so beautiful. The NBP output: Pure philistinism. “Auctioned by Christie’s”, again, is meant to be evocative: “this is the kind of painting that would be sold at auction”. But NBP makes it a photograph of a painting at an auction house. Fine, I suppose I got what I asked for. But the woman doesn’t look like Rossetti! This is absurd. How can a model from 2022 get this right, and the SOTA image generation model gives us generic oil painting slop? A Persian miniature of the cosmic microwave background, from Herat circa 1600, trending on ArtStation Midjourney v2: Again: what can one say? Dream Story, 1961, blurry black and white photograph, yellow tint, from the Metropolitan Museum of Art. This is one of my favourite DALL-E 2 outputs: They remind me of The King in Yellow . I love these because of how genuinely creepy and mysterious they are. You could pull a hundred horror stories from these. It is hard to believe how bad the NBP output is: What are we doing here? The old models were beautiful and compelling because the imperfections, vagueness, mistakes, and contradictions all create these little gaps through which your imagination can breathe life into the art. The images are not one fixed, static thing: they can be infinitely many things. The new models—do I even need to finish this sentence? They’re too precise and high-resolution, so they cannot make abstract, many-faced things, they can only make specific, concrete things. We need to make AI art weird again.

0 views
Fernando Borretti 8 months ago

I Wish People Were More Public

Probably not a popular thing to say today. The zeitgeisty thing to say is that we should all log off and live terrible cottagecore solarpunk lives raising chickens and being mindful. I wish people were more online and more public. I have rarely wished the opposite. Consider this post addressed to you, the reader. I will often find a blog post on Hacker News that really resonates. And when I go to check the rest of the site there’s three other posts. And I think: I wish you’d write more! When I find someone whose writing I really connect with, I like to read everything they have written, or at least a tractable subset of their most interesting posts. If I like what I see, I reach out. This is one of the best things about writing online: your future friends will seek you out. And, from the other side, I have often written a post where, just before publishing, I would think: “who would want to read this? It’s too personal, obscure, idiosyncratic, probably a few people will unsubscribe to the RSS feed for this”. And always those are the posts where people email me to say they always thought the same thing but could never quite put it into words. I really value those emails. “I am understood” is a wonderful feeling. I try to apply a rule that if I do something, and don’t write about it—or otherwise generate external-facing evidence of it—it didn’t happen. I have built so many things in the dark, little experiments or software projects or essays that never saw the light of day. I want to put more things out. If it doesn’t merit an entire blog post, then at least a tweet. If I follow you on Twitter, and you have posted a picture of your bookshelf, I have probably scanned every book in it. This is why I appreciate Goodreads . Like many people I have been reading a lot less over the past ~5y, but since I made a Goodreads account earlier this year, I’ve read tens of books. Reading in public has helped to motivate me. You may say reading in public is performative. I say reading in private is solipsistic. Dante, in De Monarchia , writes: All men on whom the Higher Nature has stamped the love of truth should especially concern themselves in laboring for posterity, in order that future generations may be enriched by their efforts, as they themselves were made rich by the efforts of generations past. For that man who is imbued with public teachings, but cares not to contribute something to the public good, is far in arrears of his duty, let him be assured; he is, indeed, not “a tree planted by the rivers of water that bringeth forth his fruit in his season,” [ Psalms 1:3 ] but rather a destructive whirlpool, always engulfing, and never giving back what it has devoured. My default mode is solipsism. I read in private, build in private, learn in private. And the problem with that is self-doubt and arbitrariness. I’m halfway through a textbook and think: why? Why am I learning geology? Why this topic, and not another? There is never an a priori reason. I take notes, but why tweak the LaTeX if no-one, probably not even future me, will read them? If I stop reading this book, what changes? And doing things in public makes them both more real and (potentially) useful. If you publish your study notes, they might be useful to someone. Maybe they get slurped up in the training set of the next LLM, marginally improving performance. And Goodreads, for all its annoyances, is a uniquely tender social network. Finishing a book, and then seeing a friend mark it as “want to read”, feels like a moment of closeness. I have a friend who lived in Sydney, who has since moved away, and we don’t keep in touch too often, because the timezones are inconvenient, but occasionally she likes my book updates, and I like hers, and I will probably never read that avant-garde novel, but I’m glad she is reading it. It is like saying: “You exist. I exist. I remember. I wish you happiness.” Lots of people use spaced repetition , but most everyone’s flashcard collections are private. They exist inside a database inside an app like Anki or Mochi . You can export decks, but that’s not a living artifact but a dead snapshot, frozen in time. One reason I built hashcards : by using a Git repo of Markdown files as the flashcard database, you can trivially publish your deck to GitHub. My own flashcard collection is public. I hope that more people use hashcards and put their decks up on GitHub. The point is not that you can clone their repos (which is close to useless: you have to write your own flashcards) but because I’m curious what people are learning. Not the broad strokes, since we all want to learn thermo and econ and quantum chemistry and the military history of the Song dynasty and so on, but the minutiae. Why did you make a flashcard out of this Bible passage? Why does it resonate with you? Why do you care about the interpretation of that strange passage in Antigone ? Why did you memorize this poem? Computers mediate every aspect of our lives, yet most people use their computers the way they came out of the box. At most they might change the desktop background. Some people don’t even change the default icons on the macOS dock. Even most Linux users just use the stock configuration, e.g. GNOME on Fedora or whatever. I’m interested in people who customize their experience of computing. This is often derided as “ ricing ”. But agency is interesting. People who remake their environment to suit them are interesting. And I am endlessly curious about how people do this. I like reading people’s , their custom shell scripts, their NixOS config. It’s even better if they have some obscure hardware e.g. some keyboard layout I’ve never heard of and a trackball with custom gestures. I put my dotfiles up on GitHub because I imagine someone will find them interesting. And beyond my selfish curiosity there’s also the Fedorovist ancestor simulation angle: if you die and are not cryopreserved, how else are you going to make it to the other side of the intelligence explosion? Every tweet, blog post, Git commit, journal entry, keystroke, mouse click, every one of these things is a tomographic cut of the mind that created it.

0 views
Fernando Borretti 8 months ago

Ad-Hoc Emacs Packages with Nix

You can use Nix as a package manager for Emacs, like so: Today I learned you can also use it to create ad-hoc packages for things not in MELPA or nixpkgs . The other day I wanted to get back into Inform 7 , naturally the first stack frame of the yak shave was to look for an Emacs mode. exists, but isn’t packaged anywhere. So I had to vendor it in. You can use git submodules for this, but I have an irrational aversion to submodules. Instead I did something far worse: I wrote a Makefile to download the from GitHub, and used home-manager to copy it into my . Which is nasty. And of course this only works for small, single-file packages. And, on top of that: whatever dependencies your vendored packages need have to be listed in , which confuses the packages you want, with the transitive dependencies of your vendored packages. I felt like the orange juice bit from The Simpsons . There must be a better way! And there is. With some help from Claude, I wrote this: Nix takes care of everything: commit pinning, security (with the SHA-256 hash), dependencies for custom packages. And it works wonderfully. Armed with a new hammer, I set out to drive some nails. Today I created a tiny Haskell project, and when I opened the file, noticed it had no syntax highlighting. I was surprised to find there’s no in MELPA. But coincidentally, someone started working on this literally three weeks ago ! So I wrote a small expression to package this new : A few weeks back I switched from macOS to Linux, and since I’m stuck on X11 because of stumpwm , I’m using XCompose to define keybindings for entering dashes, smart quotes etc. It bothered me slightly that my file didn’t have syntax highlighting. I found in kragen’s repo , but it’s slightly broken (it’s missing a call at the end). I started thinking how hard it would be to write a Nix expression to modify the source after fetching, when I found that Thomas Voss hosts a patched version here . Which made this very simple: Somehow the version of in nixpkgs unstable was missing the configuration option to use a custom shell. Since I want to use nu instead of bash, I had to package this myself from the latest commit: I started reading Functional Programming in Lean recently, and while there is a , it’s not packaged anywhere. This only required a slight deviation from the pattern: when I opened a file I got an error about a missing JSON file, consulting the README for , it says: If you use a source-based package-manager (e.g. , Straight or Elpaca), then make sure to list the directory in your Lean4-Mode package recipe. To do this I had to use rather than :

0 views
Fernando Borretti 8 months ago

Linux on the Fujitsu Lifebook U729

This post describes my experience using Linux on the Fujitsu Lifebook U729 . The tl;dr is that it’s a delightful laptop, and Linux runs flawlessly, and all the hardware things I’ve needed run OOTB. The only difficulty I had was in disabling Secure Boot, but I figured out how to do it, which I explain below. From early 2024 my daily driver was an M2 MacBook Air, until earlier this year I broke the screen, and the repair was quoted at almost 1000 AUD. Since I used it as a desktop most of the time, this didn’t affect me much. After some flip-flopping I decided to get an M4 Mac mini. Partly for the faster CPU and more RAM, but partly because I liked the idea of LARPing like it’s the 2000s, when computers, and by extension the Internet, where fixed in physical space, rather than following everyone around. Of course this was a terrible idea. I had three working computers—a Linux+Windows desktop, a Mac Mini, and a MacBook Air that I could use as a desktop—and none of them were portable. When I went to RustForge 2025 I just brought my phone. If I wanted to travel, even within Sydney, to a demo night or math club or some such, I didn’t have a laptop to bring with me. So I needed a new laptop. And the Tahoe release of macOS was so ugly (see e.g. 1 , 2 , 3 ) it made me boot up the old Linux desktop, and start playing around with NixOS again. And I fell in love with Linux again: with the tinkering and the experimentation and the freedom it affords you. So, I wanted a Linux laptop. I had a ThinkPad X1 some years ago and it was terribly: flimsy plastic build and hardware that vastly underperformed its price. I looked around for old, refursbished workstation laptops, and, randomly, I ran into an eBay seller offering a refurbished Fujitsu laptop. The specs/price ratio was pretty good: 16 GiB of RAM and 512GiB of SSD, all for 250 AUD. And it was 12in and 1.1kg, which I like: laptops should be small and lightweight. But the thing that got me, in all honesty, was the brand. “Fujitsu laptop” sounds like colour in a William Gibson novel: “crawling into the avionics bay, Case took out a battered Fujitsu refurb, and stuck a JTAG port in the flight computer—”. I already use NixOS and a trackball and a mechanical keyboard , so a laptop that’s even more obscure than a ThinkPad is perfect for me. And it was only 250 AUD. So I got it. The only problem I had was disabling Secure Boot in order to install Linux. Otherwise: I love it. It’s small and lightweight, feels solid, the keyboard is good, all the hardware works out of the box with NixOS, and the battery life is pretty good. This section describes the problems I encountered. I tried to install Linux the usual way, when I was greeted by this: Going into the BIOS, the option to disable Secure Boot was greyed out. I tried a bunch of random bullshit: wiping the TPM, disabling the TPM. That didn’t work. What did work was this: First, install Windows 11. This came with the laptop. And the installation makes installing Linux feel easy: I had to do so many weird tricks to avoid having to create an account with Microsoft during the installation. Once Windows is installed, go into Windows Update. Under “Advanced Options > Optional Updates”, there should be an option to install Fujitsu-specific drivers. Install those. And for good measure, do a general Windows update. There should be a program called DeskUpdate on the Desktop. This is the Fujitsu BIOS update tool. Run this and go through the instructions: this should update the BIOS (the ordering seems to be important: first update the Fujitsu firmware through Windows Update, then the BIOS through DeskUpdate). Reboot and go into the BIOS (F2). You should have a new BIOS version. In my case, I went from BIOS 2.17 to 2.31 which was released on 2025-03-28: You now have the option to disable Secure Boot: After this, I was able to install NixOS from a live USB: The laptop comes with this corporate spyware thing called Absolute Persistence . It’s some anti-theft tracking device. Since the Lifebook is typically an enterprise laptop, it makes sense that it comes with this type of thing. I only noticed this because I was searching the BIOS thoroughly for a way to disable Secure Boot. The good news is disabling it is pretty straightforward: you just disable it in the BIOS. As I understand it, Absolute Persistence requires an agent running in the OS, so the BIOS support, by itself, doesn’t do anything once disabled. The following work flawlessly OOTB: Things I have not tested: To enter the BIOS: smash until you hear the beep. No need to hold down the key. To enter the boot menu: as above but with . Troubleshooting Secure Boot Non-Problems Sound (using PipeWire ) Display brightness control (using brightnessctl ) Touchscreen (I didn’t realize the screen was actually a touchscreen until I touched it by accident and saw the mouse move) Webcam (not winning any awards on quality, but it works) Fingerprint sensor Fujitsu product page ( archive.org ) Data sheet (PDF)

0 views
Fernando Borretti 8 months ago

Agda on NixOS

To install Agda and its standard library, add this to your config: Or, using home-manager : The here stands for the package set. Note that the following will not work: If you use Emacs, you probably want , which if you use , can be installed using Nix: Now, if you have a file with: So far, so good. Using the standard library however is more complicated. If you have a file with: Then will not work: Instead, create a file in the same directory with: Now will succeed.

0 views
Fernando Borretti 10 months ago

Hashcards: A Plain-Text Spaced Repetition System

hashcards is a local-first spaced repetition app, along the lines of Anki or Mochi . Like Anki, it uses FSRS , the most advanced scheduling algorithm yet, to schedule reviews. The thing that makes hashcards unique: it doesn’t use a database. Rather, your flashcard collection is just a directory of Markdown files, like so: And each file, or “deck”, looks like this: You write flashcards more or less like you’d write ordinary notes, with lightweight markup to denote basic (question/answer) flashcards and cloze deletion flashcards. Then, to study, you run: This opens a web interface on , where you can review the flashcards. Your performance and review history is stored in an SQLite database in the same directory as the cards. Cards are content-addressed, that is, identified by the hash of their text. This central design decision yields many benefits: you can edit your flashcards with your editor of choice, store your flashcard collection in a Git repo, track its changes, share it on GitHub with others ( as I have ). You can use scripts to generate flashcards from some source of structured data (e.g. a CSV of English/French vocabulary pairs). You can query and manipulate your collection using standard Unix tools, or programmatically, without having to dig into the internals of some app’s database. Why build a new spaced repetition app? Mostly because I was dissatisfied with both Anki and Mochi. But also, additionally, because my flashcards collection is very important to me, and having it exist either in some remote database, or as an opaque unusable data blob on my computer, doesn’t feel good. “Markdown files in a Git repo” gives me a level of ownership that other approaches lack. The rest of this post explains my frustrations with Anki and Mochi, and how I landed on the design decisions for hashcards. Anki was the first SR system I used. It’s open source, so it will be around forever; it has a million plugins; it was the first SR system to use FSRS for scheduling. It has really rich stats, which I think are mostly useless but are fun to look at. And the note types feature is really good: it lets you generate a large number of flashcards automatically from structured data. The central problem with Anki is that the interface is really bad. This manifests in various ways. First, it is ugly to look at, particularly the review screen. And this diminishes your enjoyment of what is already an often boring and frustrating process. Second, doing simple things is hard. A nice feature of Mochi is that when you start the app you go right into review mode. You’re drilling flashcards before you even realize it. Anki doesn’t have a “study all cards due today”, rather, you have to manually go into a deck and click the “Study Now” button. So what I would do is put all my decks under a “Root” deck, and study that. But this is a hack. And, third: card input uses WYSIWYG editing. So, you’re either jumping from the keyboard to the mouse (which increases latency, and makes flashcard creation more frustrating) or you have to remember all these keybindings to do basic things like “make this text a cloze deletion” or “make this TeX math ”. Finally, plugins are a double-edged sword. Because having the option to use them is nice, but the experience of actually using most plugins is bad. The whole setup feels janky, like a house of cards. Most of the time, if a feature is not built into the app itself, I would rather live without it than use a plugin. Mochi feels like it was built to address the main complaint about Anki: the interface. It is intuitive, good looking, shortcut-rich. No jank. Instead of WYSIWYG, card text is Markdown: this is delightful. There’s a few problems. While Markdown is a very low-friction way to write flashcards, cloze deletions in Mochi are very verbose. In hashcards, you can write this: The equivalent in Mochi is this: This is a lot of typing. And you might object that it’s only a few characters longer. But when you’re studying from a textbook, or when you’re copying words from a vocabulary table, these small frictions add up. If writing flashcards is frustrating, you’ll write fewer of them: and that means less knowledge gained. Dually, a system that makes flashcard creation as frictionless as possible means more flashcards, and more knowledge. Another problem is that Mochi doesn’t have an equivalent of Anki’s note types . For example: you can make a note type for chemical elements, with fields like atomic number, symbol, name, etc., and write templates to generate flashcards asking questions like: And so on for other properties. This is good. Automation is good. Less work, more flashcards. Mochi doesn’t have this feature. It has templates , but these are not as powerful. But the biggest problem with Mochi, I think, is the algorithm. Until very recently , when they added beta support for FSRS, the algorithm used by Mochi was even simpler than SM-2 . It was based on multipliers : remembering a card multiplies its interval by a number >1, forgetting a card multiplies its interval by a number between 0 and 1. The supposed rationale for this is simplicity: the user can reason about the algorithm more easily. But I think this is pointless. The whole point of an SR app is the software manages the schedule for you, and the user is completely unaware of how the scheduler works. The optimality is to have the most advanced possible scheduling algorithm (meaning the one that yields the most recall for the least review time) under the most intuitive interface possible, and the user just reaps the benefits. Obviously without an RCT we can’t compare Mochi/ SM-2 /FSRS, but my subjective experience of it is that the algorithm works well for the short-term, and falters on the long-term. It’s very bad when you forget a mature card: if a card has an interval of sixty days, and you click forget, you don’t reset the interval to one day (which is good, because it helps you reconsolidate the lost knowledge). Rather, the interval is multiplied by the forget multiplier (by default: 0.5) down to thirty days . What’s the use? If I forgot something after sixty days, I surely won’t have better recall in thirty. You can fix this by setting the forget multiplier to zero. But you have to know this is how it works, and, crucially: I don’t want to configure things! I don’t want “scheduler parameter finetuning” to be yet another skill I have to acquire: I want the scheduler to just work . In general, I think spaced repetition algorithms are too optimistic. I’d rather see cards slightly more often, and spend more time reviewing things, than get stuck in “forgetting hell”. But developers have to worry that making the system too burdensome will hurt retention. In Anki, it’s the interface that’s frustrating, but the algorithm works marvelously. In Mochi, the interface is delightful, but it’s the algorithm that’s frustrating. Because you can spend months and months drilling flashcards, building up your collection, but when the cards cross some invisible age threshold, you start to forget them, and the algorithm does not help you relearn things you have forgotten. Eventually I burned out on it and stopped doing my reviews, because I expected to forget everything eventually anyhow. And now they added support for FSRS, but by now I have 1700 cards overdue. Additionally: Mochi has only two buttons, “Forgot” and “Remembered”. This is simpler for the user, yes, but most SR scheduling algorithms have more options for a reason: different degrees of recall adjust the card parameters by different magnitudes. What do I want from a spaced repetition system? The first thing is: card creation must be frictionless. I have learned that the biggest bottleneck in spaced repetition, for me, is not doing the reviews (I am very disciplined about this and have done SR reviews daily for months on end), it’s not even converting conceptual knowledge into flashcards, the biggest bottleneck is just entering cards into the system. The surest way to shore up your knowledge of some concept or topic is to write more flashcards about it: asking the same question in different ways, in different directions, from different angles. More volume means you see the same information more often, asking in different ways prevents “memorizing the shape of the card”, and it acts as a kind of redundancy: there are multiple edges connecting that bit of knowledge to the rest of your mind. And there have been many times where I have thought: I would make this more solid by writing another flashcard. But I opted not to because the marginal flashcard is too effortful. If getting cards into the system involves a lot of friction, you write fewer cards. And there’s an opportunity cost: the card you don’t write is a concept you don’t learn. Integrated across time, it’s entire oceans of knowledge which are lost. So: the system should make card entry effortless. This was the guiding principle behind the design of the hashcards text format. For example, cloze deletions use square brackets because in a US keyboard, square brackets can be typed without pressing shift (compare Mochi’s curly brace). And it’s one bracket, not two. Originally, the format was one line per card, with blank lines separating flashcards, and question-answer cards used slashes to separate the sides, like so: And this is strictly less friction. But it creates a problem for multi-line flashcards, which are common enough that they should not be a second-class citizen. Eventually, I settled on the current format: Which is only slightly more typing, and has the benefit that you can easily visually identify where a card begins and ends, and what kind of card it is. I spent a lot of time arguing back and forth with Claude about what the optimal format should be. Another source of friction is not creating the cards but editing them. The central problem is that your knowledge changes and improves over time. Often textbooks take this approach where Chapter 1 introduces one kind of ontology, and by Chapter 3 they tell you, “actually that was a lie, here’s the real ontology of this subject”, and then you have to go back and edit the old flashcards to match. Because otherwise you have one card asking, e.g., for the undergraduate definition of some concept, while another asks you for the graduate-level definition, creating ambiguity. For this reason, when studying from a textbook, I create a deck for the textbook, with sub-decks for each chapter. That makes it easy to match the flashcards to their source material (to ensure they are aligned) and each chapter deck only has a few tens of cards usually, keeping them navigable. Sometimes you wrote multiple cards for the same concept, so you have to update them all at once. Finding the related ones can be hard if the deck is large. In hashcards, a deck is just a Markdown file. The cards immediately above and below a card are usually semantically related. You just scroll up and down and make the edits in place. But why plain-text files in a Git repo? Why not use the above format, but in a “normal” app with a database? The vague idea of a spaced repetition system where flashcards are stored as plain-text files in a Git repo had been kicking around my cranium for a long time. I remember asking an Ankihead on IRC circa 2011 if such a thing existed. At some point I read Andy Matuschak’s note on his implementation of an SR system. In his system, the flashcards are colocated with prose notes. The notation is similar to mine: and tags for question-answer cards, and for cloze deletions. And the cards are content-addressed: identified by their hash. Which is an obviously good idea. But his code is private and, besides, I feel that prose notes and flashcards are very different beasts, and I don’t need or want them to mix. But I think the idea of plain-text spaced repetition got bumped up the priority queue because I spontaneously started using a workflow that was similar to my current hashcards workflow. When studying from a textbook or a website, I’d write flashcards in a Markdown file. Usually, I used a shorthand like for cloze deletions. Then I’d use a Python script to transform the shorthand into the notation used by Mochi. And I’d edit the flashcards in the file, as my knowledge built up and my sense of what was relevant and important to remember improved. And then, when I was done with the chapter or document or whatever, only then, I would manually import the flashcards into Mochi. And it struck me that the last step was kind of unnecessary. I was already writing my flashcards as lightly-annotated Markdown in plain-text files. I had already implemented FSRS out of curiosity. I was looking for a personal project to build during funemployment. So hashcards was by then a very neatly-shaped hole that I just needed to paint inside. It turns out that using plain-text storage has many synergies: The result is a system where creating and editing flashcards is nearly frictionless, that uses an advanced spaced repetition scheduler, and which provides an elegant UI for drilling flashcards. I hope others will find it useful. What is the atomic number of [name]? What element has atomic number [number]? What is the symbol for [name]? What element has symbol [symbol]? You can edit the cards using whatever editor you use, build up a library of card-creating macros, and navigate the collection using the editor’s file browser. You can query and update the collection using standard Unix tools, or a programming language, e.g. using to get the total number of words in the collection, or using to make a bulk-update to a set of cards. You can use Git for version control. Git is infinitely more featureful than the change-tracking of any SR app: you can edit multiple cards in one commit, branch, merge, use pull requests, etc. You can make your flashcards public on GitHub. I often wish people put more of themselves out there: their blog posts, their dotfiles, their study notes. And why not their flashcards? Even if they are not useful to someone else, there is something enjoyable about reading what someone else finds interesting, or enjoyable, or worth learning. You can generate flashcards using scripts (e.g., turn a CSV of foreign language vocabulary into a deck of flashcards), and write a Makefile to tie the script, data source, and target together. I do this in my personal deck. Anki’s note types don’t have to be built into hashcards, rather, you can DIY it using some Python and make.

0 views