<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Idiomdrottning</title>
    <description>Idiomdrottning demonstrates a new and often cleaner way to solve most systems problems. The system as a whole is likely to feel tantalizingly familiar to culture users but at the same time quite foreign.</description>
    <link>https://idiomdrottning.org/</link>
    <atom:link href="https://idiomdrottning.org" rel="self" type="application/rss+xml" />
    <pubDate>Wed, 11 Mar 2026 08:29:43 +0100</pubDate>
    <lastBuildDate>Wed, 11 Mar 2026 08:29:43 +0100</lastBuildDate>
      <item>
        <title>Klimatmålssloparen</title>
        <description>

&lt;blockquote&gt;
  &lt;p&gt;Klimatminister Romina Pourmokhtari (L) vill avskaffa ett av de mest omstridda klimatmålen—det så kallade transportmålet—och i stället införa ett annat mål.&lt;/p&gt;

  &lt;p&gt;Hon dömer ut det nuvarande målet som orealistiskt. Pourmokhtari anser att det nuvarande målet »har brister och fokuserar väldigt mycket på vad som inte ska göras, i stället för vad som ska göras«.&lt;/p&gt;

  &lt;p&gt;Transportmålet går ut på minska utsläppen från transportsektorn med 70 procent från 2010 till 2030. L vill i stället se ett »elektrifieringsmål«.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nej men snälla avgå genast, en klimatminister måste förstå att det viktigaste för att jorden inte ska dö &lt;strong&gt;är&lt;/strong&gt; att utsläppen minskar. Under din regim och som en &lt;em&gt;direkt&lt;/em&gt; följd av din politik har dom tidigare stadigt minskande utsläppen från transportsektorn &lt;strong&gt;ökat med en fjärdedel på ett enda år&lt;/strong&gt;. Som jag &lt;a href=&quot;/when-the-eu-wanted-to-crank-up-solar&quot; title=&quot;When the EU wanted to crank up solar&quot;&gt;har skrivit om tidigare&lt;/a&gt; &lt;em&gt;är&lt;/em&gt; det faktiskt viktigare vad man inte gör än vad man gör. Ja, mer elektrifiering skulle kunna bibehålla en del av vår livskvalitet när fossilbrännandet minskar, så den &lt;em&gt;skulle&lt;/em&gt; kunna vara ett verktyg,&lt;small&gt; (och därför är det jättekonstigt att din regim avskaffade elbilsbonusen och sänkte bensinskatten vilket krympte dom relativa TCO-fördelarna med elbil med runt tvåtusen kronor i månaden)&lt;/small&gt; &lt;strong&gt;men vi måste aktivt se till att utsläppen minskar också&lt;/strong&gt;. &lt;a href=&quot;https://en.wikipedia.org/wiki/Jevons_paradox&quot; title=&quot;Jevons paradox - Wikipedia&quot;&gt;Jevonsparadoxen&lt;/a&gt;, har du hört talas om den?&lt;/p&gt;

&lt;p&gt;Hur mycket av politikernas klimatförstörelse både här och i USA och Ryssland som är okunskap jämfört med hur mycket av den som är drypande illvilja och grymhet är &lt;a href=&quot;/farewell-hanlon&quot; title=&quot;Farewell, Hanlon&quot;&gt;omöjligt för mig att veta&lt;/a&gt;. Men vilketdera det än är så är du så otroligt långt över gränsen för vad en kompetent klimatminister borde göra. Det är mänsklighetens framtid du leker med.&lt;/p&gt;

&lt;p&gt;Utsläppen inom transportsektorn hade minskat rejält tills du drastiskt och avsiktligt ökade dom. Våra konsumtionsbaserade utsläpp hade faktiskt sjunkit stadigt innan tidöregimen och det är ett otroligt trendbrott hur fort dom har ökat som en direkt följd av er ansvarslösa och/eller hänsynslösa politik.&lt;/p&gt;

&lt;p&gt;Att i en sån situation ha mage att säga att du vill ta bort målet är det sjukaste jag någonsin hört. Låt oss säga att det istället hade varit &lt;lang style=&quot;font-style: italic&quot;&gt;ça plane pour nous&lt;/lang&gt; och allt hade flytit på perfa och du i &lt;em&gt;det&lt;/em&gt; läget sagt “okej nu har jag en idé på hur vi kan jobba ännu effektivare, vi byter från ett undvikemål till ett aktivt mål”, då skulle jag iofs absolut varit tveksam &lt;a href=&quot;/when-the-eu-wanted-to-crank-up-solar&quot; title=&quot;When the EU wanted to crank up solar&quot;&gt;utifrån samma resonemang som tidigare&lt;/a&gt;, men nu när du har styrt skutan och vänt oss 180° rakt om mot helvetets avgrund, då är det otroligt skamligt att komma dragandes med att vi slopar målen som du har förstört.&lt;/p&gt;

&lt;p&gt;Målen var ett löfte och Sverige hade inga problem med att dunka sig själv svinhårt i ryggen när dom löftena gavs som om dom redan vore kirrade. Nu när ödets klocka rullat på och det inte visade sig vara så lätt så visar det sig att dom löftena var en väldig hög av inget. &lt;a href=&quot;https://theshovel.com.au/2021/10/26/man-announces-he-will-quit-drinking-by-2050/&quot; title=&quot;Man Announces He Will Quit Drinking by 2050&quot;&gt;Det fatt’ man ju&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Wed, 25 Feb 2026 09:33:53 +0100</pubDate>
        <link>https://idiomdrottning.org/klimatmalssloparen</link>
        <guid isPermaLink="true">https://idiomdrottning.org/klimatmalssloparen</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>Discord is not a good product</title>
        <description>

&lt;p&gt;The other day, someone told me that “Discord is a good product”. And
I’m grateful for that phrasing because it helps me explain why I’m
having such a cow about Discord.&lt;/p&gt;

&lt;p&gt;Because it’s &lt;strong&gt;not&lt;/strong&gt; a good product. The worst part about it is how
mandatory it is. As an analogy, let’s take some soda… what’s a really
gross one? Pepsi? Pepsi &lt;a href=&quot;https://en.wikipedia.org/wiki/Special:Search?search=pepsi+controversy&quot; title=&quot;pepsi controversy - Search results - Wikipedia&quot;&gt;has a lot of problems&lt;/a&gt; but it would be a heck
of a lot worse if it was a “mandatory” product. If everytime you went
past a grocery store you would loose all control over your hand and
it’d drag you into the store and grab a bottle and you’d physically be
forced to get it, even though you have water at home—or you’ll lose your friends or not be able to access
product support or an event or even in some cases housing.&lt;/p&gt;

&lt;p&gt;While normal, free, common-sense alternatives like email, IRC, XMPP
and Fediverse are “products” in &lt;a href=&quot;/the-answer&quot; title=&quot;The Answer&quot;&gt;some senses of the word&lt;/a&gt;&lt;small&gt; (they
are produced things that exist and you can use them; and this goes
extra for commercial but FOSS-friendly forums like Discourse or
Vanilla)&lt;/small&gt;, they’re products the same way breathable air is a
product. If someone were to take away your lungs in order to sell you
bottled oxygen that’d not be a product I’d be a happy customer of. I
might be buying but I’d be pretty sad about what they took away.&lt;/p&gt;

&lt;p&gt;In one way it’s even worse than heroin—not in all or even most ways,
and not to make light of the opiate crisis,&lt;small&gt; (stay in school,
kids!)&lt;/small&gt; but with dope there’s at least multiple vendors.&lt;/p&gt;

&lt;p&gt;That’s what Discord did. We have free ways to talk to each other, but
they made a way that they &lt;em&gt;own&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;With Discord you &lt;em&gt;have&lt;/em&gt; to make an account with this one company.&lt;/p&gt;

&lt;p&gt;There are no other “products” like this, “mandatory” products, outside
of the internet. It’s even illegal. &lt;a href=&quot;https://en.wikipedia.org/wiki/Competition_law&quot; title=&quot;Competition law - Wikipedia&quot;&gt;Antitrust laws date back to the
Roman Empire.&lt;/a&gt; But we tolerate it online for some reason&lt;small&gt; (and that
reason is that we have to because it’s mandatory)&lt;/small&gt;.&lt;/p&gt;

&lt;p&gt;You might’ve heard this slogan before, but with Discord’s business
model, “you are the product”. We’ve &lt;a href=&quot;https://en.wikipedia.org/wiki/You_are_the_product&quot; title=&quot;You are the product - Wikipedia&quot;&gt;known about this stuff since
1973&lt;/a&gt; but people still get sucked in&lt;small&gt; (because they have to)&lt;/small&gt;.&lt;/p&gt;

&lt;h2 id=&quot;one-thing-you-can-do&quot;&gt;One thing you can do&lt;/h2&gt;

&lt;p&gt;While the people who participate in a forum on Discord don’t have much
of a choice, the people who start the forums do. If you are a
community organizer, don’t choose Discord. At least not &lt;strong&gt;only&lt;/strong&gt;
Discord. The normal, classic internet tools like email, IRC, Fediverse
or XMPP still exist.&lt;/p&gt;

&lt;p&gt;And if you’re a lawmaker, a policy-maker, it’s &lt;a href=&quot;/network-freedom-act&quot; title=&quot;Network Freedom Act&quot;&gt;time for you to step
up&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;but-email-and-them-suck&quot;&gt;“But email and them suck?”&lt;/h2&gt;

&lt;p&gt;I get this a lot from people who have a bad client for email or IRC or
XMPP or whatever it might be. Yes, there are bad ones. But there are
also good ones.&lt;/p&gt;

</description>
        <pubDate>Fri, 13 Feb 2026 12:07:39 +0100</pubDate>
        <link>https://idiomdrottning.org/discord</link>
        <guid isPermaLink="true">https://idiomdrottning.org/discord</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>The Myth of “The Myth of Complementary Protein”</title>
        <description>

&lt;p&gt;In the seventies Frappé popularized an idea that vegetarians should
combine protein sources, i.e. eating grains with beans, just like
traditional food cultures have done for longer than recorded history,
is a complete amino acid profile as opposed to just eating grains with more
grains or eating beans with more beans.&lt;/p&gt;

&lt;p&gt;In just a few years this was “debunked” with scientists (correctly) pointing out that the body can easily store up amino acids way longer and combine all kinds of protein even if you don’t take extra care at every meal. You can eat all grains one day and all beans the next and you’ll be fine and you won’t get protein deficiency.&lt;/p&gt;

&lt;p&gt;True.&lt;/p&gt;

&lt;p&gt;But protein deficiency isn’t the entire story. A complete amino acid profile in one meal (i.e. yes to combining grains with beans) does a better job at triggering the release of satiety hormones like PYY and GLP-1 in the gut and ghrelin right in the mouth—so far, so proven, but it’s also hypothesized that the combo also is more satisfying for vagus nerve satiety along with learned taste/sensory satiety (i.e. your brain has learned that eating these two things together will be more satiating in an hour so it already craves it on the tongue). Eating a meal of grains+grains or beans+beans as opposed to a mixed double just immediately feels less satisfying and if there’s a psychological component to that, that’s not weird because the psychology is created by these weird hunger and satiety hormones too.&lt;/p&gt;

&lt;p&gt;Conclulu: you don’t have to &lt;em&gt;worry&lt;/em&gt; and &lt;em&gt;stress&lt;/em&gt; that you’re gonna get a deficiency or problem if you don’t combine. The “debunkers” were right in taking that particular load off your mind. But, what the debunkers were wrong about and traditional grandma cooks going back millennia were right about is that there’s an opportunity here for you to make a satisfying meal called a peanut butter sandwich where there actually &lt;em&gt;is&lt;/em&gt; a synergy between the two ingredients.&lt;/p&gt;

&lt;aside&gt;(In fact, it’s &lt;em&gt;so&lt;/em&gt; satisfying that there’s the extra worry that you won’t get enough &lt;em&gt;calories&lt;/em&gt; overall unless you take extra care. Even for those who are eating with &lt;abbr title=&quot;intentional weight loss&quot;&gt;IWL&lt;/abbr&gt; in mind, having a calorie deficit that is too large will just backfire. Please make sure you eat enough.♥︎)&lt;/aside&gt;
</description>
        <pubDate>Wed, 11 Feb 2026 11:36:01 +0100</pubDate>
        <link>https://idiomdrottning.org/protein-combining</link>
        <guid isPermaLink="true">https://idiomdrottning.org/protein-combining</guid>
        <category>texts</category>
        <category>cooking</category>
      </item>
      <item>
        <title>When the Emperor called you a NIMBY before he killed you</title>
        <description>

&lt;p&gt;There are situations where the word “NIMBY” applies. It’s short for “Not in my backyard”, like someone might think needle exchanges and refugee housing are great but don’t want them in their own neighborhoods&lt;small&gt; (FWIW, I used to live in a neighborhood that had both and it was great)&lt;/small&gt;. When something is good for everyone including the people who live there but the people who live there are squeamish for bad-faith reasons, NIMBY has been a pretty appropriate slag on them.&lt;/p&gt;

&lt;p&gt;But it can also be completely misapplied. If the Galactic Empire wants to excavate your entire planet to death in search of kalkite for its Death Star, and you protest that, it’s not really fair to trot out the old “NIMBY” slag as you’re under the boot.&lt;/p&gt;

&lt;p&gt;I’m not saying I know all the ins and out of each situation. I was pretty surprised when Thunberg protested a wind power installation—I thought wind power was good?—but I’m not fully read up so I’ll hold off on coming to a conclusion on that. Similarly, lots of communities here have been protesting uranium mining. Since I’m pretty sure nuclear isn’t the solution we’re looking for, I’m leaning in their favor even more than the wind power thing.&lt;/p&gt;

&lt;p&gt;To my surprise, an acquaintance of mine said something like “Oh, what NIMBYs they are!” and it made my jaw drop. “Calling NIMBY” seemed like fair game as long as it was between peers. Like “Oh, stop being such a NIMBY, we both live in this neighborhood and I think we should shoulder this responsibility for good the entire city” or, at the very least, although distantly second-tier, something like “Oh, stop being such a NIMBY, we both live in equivalent neighborhoods and if my neighborhood had been selected to have to have the garbage burning plant, I would’ve gladly said yes, it’s my duty for our city”.&lt;small&gt; (Bringing to mind the old “two cows” joke: “If you had two farms would you give one of them up for the motherland?” “Yes, of course!” “And if you had two cows?” “…” “Why do you hesitate?” “Because I &lt;em&gt;have&lt;/em&gt; two cows!”)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;But if I’m part of the oppressor/exploiter class, there’s no way I’m gonna call someone under my boot “a NIMBY”! That’s one thousand percent impolite and inappropes!&lt;/p&gt;

&lt;p&gt;Now, I know I usually like to zoom out and take the holistic “whole-forest-rather-than-a-single-leaf” approach in these essays so I’d better call out that this time, I’m not doing that. This isn’t me making a final judgment call on the whole “uranium mining yes or no” situation. I’m leaning no on nuclear, it’s just a really inefficient and destructive non-solution as far as I can tell, but the fossil-burning situation is a desperately urgent emergency and if we doom the whole in quest of preserving every part, all parts will die anyway. So a &lt;em&gt;lean&lt;/em&gt; no on the uranium thing but a &lt;strong&gt;decisive&lt;/strong&gt; no on the whole NIMBY shaming of these folks. That was strong “let them eat cake” vibes as you sat in your palace fueled by what they had and your class took from them.&lt;/p&gt;

&lt;aside&gt;I’m a language nerd and I got a li’l hung up on the calling-nimby part of this as opposed to read up for real on the real issue. Sorry about that!&lt;/aside&gt;
</description>
        <pubDate>Wed, 11 Feb 2026 10:26:45 +0100</pubDate>
        <link>https://idiomdrottning.org/kalkite-nimby</link>
        <guid isPermaLink="true">https://idiomdrottning.org/kalkite-nimby</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>When the EU regulated means instead of ends</title>
        <description>

&lt;p&gt;Let’s say a land wanted to make burglary illegal. They notice that a
lot of people who do breaking and entering wear shoes when doing so.
So they make wearing shoes illegal.&lt;/p&gt;

&lt;p&gt;That’s sort of how many EU laws are.&lt;/p&gt;

&lt;p&gt;I’m getting a li’l frustrated with how my particular headphones and
DAC and app combo I can’t hear anything except at the highest volumes.
But every once in a while the audio will cut out entirely and I have
to fish out the LP3 from deep inside the bag and fiddle with the
volumes and up pops the legally mandated volume warning dialog. This
is really frustrating and also pretty dangerous if it happens when I’m
outside. I don’t want to stop and fiddle with this stuff on the
sidewalk or an escalator. I get that it’s well-intentioned to not have
people blast their own ears off but the phone can’t know the decibels
from a particular DAC/headphone combo so this isn’t really a vector of
regulation that works in real life.&lt;/p&gt;

&lt;p&gt;There’s also the whole “Do you love cookies?
yes/sure/yep/legitimate/accept” click maze on websites. They should’ve
made tracking ads illegal instead. This is an even better example than
the headphone thing since here they didn’t even criminalize the end.
It’s as if in the burglary analogy, they &lt;em&gt;only&lt;/em&gt; criminalized the
shoes, not the actual theft.&lt;/p&gt;

&lt;p&gt;This is also the problem with “Chat Control”. Unlike some very
frustrating and self-foot-shooting and frankly gross and horrific
anti-Chat-Control ad campaigns here in Sweden, I don’t have a problem
with the EU going after abusers. I’m glad that those ends are
criminalized. CSAM is actually bad as much as &lt;a href=&quot;https://idiomdrottning.org/when-i-hated-mondays&quot; title=&quot;When I hated Mondays&quot;&gt;that might come as news to some&lt;/a&gt;. I only have a problem with
&lt;em&gt;how&lt;/em&gt; they do it, by &lt;a href=&quot;https://idiomdrottning.org/dont-ban-e2ee&quot; title=&quot;Don&apos;t ban e2ee&quot;&gt;undermining all e2ee&lt;/a&gt; which &lt;a href=&quot;https://idiomdrottning.org/sudo-eu&quot; title=&quot;When the EU wanted to own all computers&quot;&gt;is only enforcable through super dubious methods&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Wed, 11 Feb 2026 10:25:51 +0100</pubDate>
        <link>https://idiomdrottning.org/eu-vs-means</link>
        <guid isPermaLink="true">https://idiomdrottning.org/eu-vs-means</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>I don&apos;t want to paint or write</title>
        <description>

&lt;p&gt;I don’t want to paint or write long-form fiction in the age of
AI.&lt;/p&gt;

&lt;p&gt;This isn’t me going on strike or anything. It’s just a report from my
soul-crushed inner landscape of not feeling like making art and not
having felt like making art for the past few years.&lt;/p&gt;

&lt;p&gt;Doing &lt;em&gt;everything&lt;/em&gt; by hand feels pointless and tedious like writing a
desktop app in all assembly without macros would be in the age of
compilers. “Kind of like construction work with a toothpick for a
tool.” &lt;a href=&quot;https://www.gnu.org/fun/jokes/eternal-flame.en.html&quot; title=&quot;Eternal Flame - GNU Project - Free Software Foundation&quot;&gt;as the lyric goes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While combining AI and my own penstrokes into one image is taboo in
this age of anti-AI sentiment. Using AI for flatting or backgrounds or
art assistance is just as frowned upon as full-on prompt-jockeying and
slop-pushing.&lt;/p&gt;

&lt;p&gt;I can’t bring myself to paint or write longform. It’s like how stairs
become that much more tedious to climb once an elevator is installed
next to them. The hacker mindset, right? We want to do things for the
first time and solve problems generally and recursively, solve a whole
class of problems in one go.&lt;/p&gt;

&lt;p&gt;As a painter I embraced G’MIC and brush-editing and scripting and path
effects. 3D-modelling some blocks to help me with perspective lines
that I then painted over. The digital equivalent of stippling with a
toothbrush instead of placing dot by dot with a finetip. That was core
to my whole art ethos: I make tools in order to make my art. I’ve made
auto-masking scripts, Emacs comic lettering modes, auto-hatching
brushes, stamp sprays, feathering path effects. For writing it’s been
working on outliners and text metadata and timeline sorting tools.&lt;/p&gt;

&lt;p&gt;I always try to look for the general solution.&lt;/p&gt;

&lt;p&gt;Please don’t get the wrong idea that I’m trying to blame this bleak
ennui on the anti-AI crowd. I think &lt;a href=&quot;https://idiomdrottning.org/ml&quot; title=&quot;Machine Learning—good and bad arguments against&quot;&gt;some of their arguments are
great&lt;/a&gt; and &lt;a href=&quot;https://idiomdrottning.org/slop-cure&quot; title=&quot;The Cure for Slop&quot;&gt;I don’t look at AI art either&lt;/a&gt;. This isn’t a manifesto,
I haven’t figured out an answer yet.&lt;/p&gt;

&lt;p&gt;I’m not trying to push a context where I could combine AI art and my
own art into one work, where I could make a comic mixing my own
drawings and AI, where I could figure out some way to have AI
assistance when writing that’s still primarily my own voice, without
it getting hate and without me getting bans.&lt;/p&gt;

&lt;p&gt;I understand full well the reasons why it can’t be like that. People
in my bubble hate everything that AI has touched and they hate it not
out of irrationality but for good reason and I do to.&lt;/p&gt;

&lt;p&gt;It’s just me feeling hopeless since everything I used to do—write,
paint, make music, write programs—that’s all gone. I don’t have any
other skills. I can’t do anything else and everything feels so
meaningless and tedious.&lt;/p&gt;

&lt;p&gt;So that’s the main soulcrush: I wish I could use the tools in
conjuction with my own hand, like how a camera was both a blessing and
a curse to realistic painters. When the camera was invented it ate
that them but they could also use it as a tool for reference. But
mixing in AI with art production is rightly condemned since this time
around the camera is evil. It’s more like horse&amp;amp;buggy vs a
gas-guzzling, earth-wrecking automobile than it is like canvas vs
lens.&lt;/p&gt;

&lt;h2 id=&quot;competing-with-the-machine&quot;&gt;Competing with the machine&lt;/h2&gt;

&lt;p&gt;The secondary soulcrush is that even if I make art, &lt;em&gt;publishing&lt;/em&gt; that
art into this AI world doesn’t feel fun either. Not that I worry that
AI would learn from it&lt;small&gt; (I have consented to that. This web site has 1300 text posts and
300 images all made by me and most of them CC-BY-SA and I have not
minded if AI wanted to learn from them. That’s been OK by me. I
haven’t fought scraping)&lt;/small&gt;, but trying to upload music into in a
world where 40% of the hit list is fully AI made just isn’t something
I want to do. I don’t want to be put on the same plate as an AI dish.&lt;/p&gt;

&lt;p&gt;I know I harp on the Monet/​Turner/​Twombly exhibition all the time but
putting Twombly up with Monet and Turner felt so wrong. I don’t want
to slag Cy Twombly because I do like his art too. It’s just that it
felt like such a staring-at-finger-and-missing-the-moon moment. “Oh
these three artists all look blurry so they belong together” where
Monet and Turner are impressionists, the ultimate
&lt;a href=&quot;https://idiomdrottning.org/brain-lateralization&quot; title=&quot;One “left”, one “right”—brain edition&quot;&gt;right-side-of-the-brain&lt;/a&gt; sublime-what-you-see conduits, Twombly is a
lexical symbolist. That is the opposite.&lt;/p&gt;

&lt;p&gt;If I were any one of the three them I’d feel slightly offended to be
equivocated is what I’m saying. All three of them are good but it’s
like “If you think we are the same you don’t understand what we were
trying to do”.&lt;/p&gt;

&lt;p&gt;I pour my heart and soul into this stuff—I’m “painting my nightmares”
as a friend said when I was painting with him around—and I don’t want
it served up on the same menu as a bunch of machine talk.&lt;/p&gt;

&lt;p&gt;Or for another version of the same metaphor: ever been to a party and
as you’re in a productive but exhausting conversation with some
privitive screwhead that you’re giving the 101 to, up comes a
even more wrongheaded schmoe and starts “agreeing” with you and now
you’ve got two problems because you’re stuck in the middle of the
original argument and the “whoah &lt;em&gt;what&lt;/em&gt; did you just say?!” Completely
hecked-up new argument.&lt;/p&gt;

&lt;p&gt;Yeah, yeah, when I hate AI the least I can think of it as sort of a
&lt;a href=&quot;https://en.wiktionary.org/wiki/rhizomatic&quot; title=&quot;rhizomatic - Wiktionary, the free dictionary&quot;&gt;rhyzomatic&lt;/a&gt; &lt;a href=&quot;https://wiki.lspace.org/L-space&quot; title=&quot;L-space&quot;&gt;L-space&lt;/a&gt;, an organism that grew through roots of a
million voices. It’s not a machine talking, it’s us—it’s just been
filtered and composted and regrown into new meaning by this
organic-like ginormous ANN. But any such appreciation for AI I could
possibly twist and turn and force my mind into feeling, I’m gonna put
on permanent hold until the two biggest problems—first is is the
extremely externalized and un-accounted-for costs to &lt;a href=&quot;https://idiomdrottning.org/externalities&quot; title=&quot;Externalities&quot;&gt;the planet&lt;/a&gt; and
&lt;a href=&quot;https://drewdevault.com/2025/03/17/2025-03-17-Stop-externalizing-your-costs-on-me.html&quot; title=&quot;Please stop externalizing your costs directly into my face&quot;&gt;to other humans&lt;/a&gt;, and second is the increased centralization of
means-of-production ownership—are solved, and it’s looking right now
like they’ll never be.&lt;/p&gt;

&lt;p&gt;I’m right there with y’all: When I find out that a song I’m listening
to is AI, I turn it off. That’s happened twice now. I believe I can
tell right away when a text or image is AI made but I know for sure I
can not tell when it’s music. So it’s not out of repulsion I turn it
off. I don’t know why. I just do.&lt;/p&gt;

&lt;p&gt;I fear that a misread of the main text and of this appendix is as some
sort of passive-aggressive slag agaist the AI-hating crowd. That I’m
trying to be all sly and smug and friends-romans-countrymen about it.
But that’s not it. I &lt;em&gt;do&lt;/em&gt; understand where the hate against AI is
coming from. I think &lt;em&gt;some&lt;/em&gt; of the arguments are really bad and I don’t
agree with those &lt;em&gt;parts&lt;/em&gt; of it&lt;small&gt; (as a copyright hater I’m
especially sickened by those arguments
relying on a proprietarization of visual expression)&lt;/small&gt; but I’m trying to
be super frank and transparent about that. I’m not trying to be swifty
or satirical here. We’re all stuck in this wrongheaded world during
this utterly misguided era and navigating it best we can. To the exent
that people feel threatened by AI, &lt;strong&gt;I do too&lt;/strong&gt; and that’s the whole
point of this essay.&lt;/p&gt;

&lt;p&gt;My entire reason for living has suddenly been swept away and with it
my footing. I don’t know what to do for a job and I don’t know what to
do for leisure. &lt;strong&gt;It all feels so meaningless.&lt;/strong&gt; Don’t worry, I’m not
about to [end it][ei]—my
mental health toolbox is jam packed and I get by with a li’l help from
my friends. For now. But on an
existential and philosophical level&lt;small&gt; (and on an income level because
what’s my job gonna be?)&lt;/small&gt;, I’m like what the heck? Where do
I even go from here? I don’t know how to do anything other that this.
I thought I was renaissance and multi-field with my writing and music
and art and programming and game-design but it’s all been fell-swooped
by this slop singularity. I’m too dyspraxic for woodcarving or sewing.
All I could do was this stuff.&lt;/p&gt;

&lt;h2 id=&quot;the-glimmers-of-hope-and-why-theyre-unbearably-faint&quot;&gt;The glimmers of hope and why they’re unbearably faint&lt;/h2&gt;

&lt;p&gt;I’m not saying never. Maybe I’ll just pick up the pen or the guitar
one day when I for some dumb reason feel like it. The most recent
batch of art I made was all pen &amp;amp; paper. Scribbling every mermaid
scale by hand. Gillian Welch has a song lyric “We’re gonna do it
anyway even if it doesn’t pay”&lt;small&gt; (originally a pro-copyright screed
and that part does not sit well with a &lt;a href=&quot;https://idiomdrottning.org/stance_on_copyright&quot; title=&quot;My current stance on copyright&quot;&gt;copyright abolitionist&lt;/a&gt; like
me, but that’s okay since it’s
such a great song)&lt;/small&gt;. Yeah, maybe we are. I just don’t feel like
it and I haven’t felt like it in a long time.&lt;/p&gt;

&lt;p&gt;Last time the world faced this problem, just over a hundred years ago,
what happened was modernism. When the machine (the camera, in that
case), mastered the &lt;em&gt;means&lt;/em&gt; more than we could, what was left to us
was pure &lt;em&gt;ends&lt;/em&gt;, &lt;a href=&quot;https://idiomdrottning.org/ds100&quot; title=&quot;H. L. C. Jaffé, De Stijl 1917–1931, p 100&quot;&gt;pure expression&lt;/a&gt;. Maybe this time around the machine
has encroached a little bit too much on the expression part of
things—for sure it has on the slop algo side of things, but that
particular variety of suffering &lt;a href=&quot;https://idiomdrottning.org/slop-cure&quot; title=&quot;The Cure for Slop&quot;&gt;is optional&lt;/a&gt;—but maybe it can still
become a vehicle, a communication tool for what we want to tell each other.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/ai-colophon&quot;&gt;AI colophon&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 13 Jan 2026 11:38:14 +0100</pubDate>
        <link>https://idiomdrottning.org/ai-vs-art</link>
        <guid isPermaLink="true">https://idiomdrottning.org/ai-vs-art</guid>
        <category>texts</category>
        <category>psychology</category>
      </item>
      <item>
        <title>False variability in Rebirth</title>
        <description>

&lt;p&gt;One unexpected game design lesson from &lt;a href=&quot;/rebirth&quot; title=&quot;Rebirth—why the best board game since 1980 sucks&quot;&gt;Rebirth&lt;/a&gt;’s Ireland side for me is this:&lt;/p&gt;

&lt;p&gt;The game has random distribution of “Tower” powers and in a two player game, a random eight of the twelve goals will be public and a random two will be available as private goals and two won’t be in a game&lt;small&gt; (in a four player game all twelve will be in the game)&lt;/small&gt;.&lt;/p&gt;

&lt;p&gt;That setup variability doesn’t matter that much.&lt;/p&gt;

&lt;p&gt;Now, I’m not saying it matters &lt;em&gt;zero&lt;/em&gt;. It &lt;strong&gt;does&lt;/strong&gt; matter. A little. I usually like to start near one of the 2× tiles, for example (since I often like to rush for the 24-point connect-four-castles goal) so it matters to me where that tile ends up. And knowing when to use a “time walk” tower or a “brainstorm” tower is a key part of the tactics in the game.&lt;/p&gt;

&lt;p&gt;But the flip side is that usually most of the players will visit most of the towers especially at 2p. Even at 3p I’ve noticed players take care to at least get most important towers on their itinary. Eventually.&lt;/p&gt;

&lt;p&gt;Same with the goals. We sort the public goals after drawing them so they’re easier to keep track of (settlement goals, coastline goals, connection goals, surrounding goals etc) so which eight are drawn doesn’t matter as as which two &lt;em&gt;aren’t&lt;/em&gt; in the game (because they’re the two goals at the bottom of the private goal deck).&lt;/p&gt;

&lt;p&gt;It’s “false variability”. The game wouldn’t be &lt;strong&gt;that&lt;/strong&gt; different&lt;small&gt; (and the setup time would be shorter but the i18n story would be way harder, at least for goals if not for towers)&lt;/small&gt; if the goals and towers were pre-printed on the board. I’m not saying to literally do this. The little variabiilty that &lt;em&gt;is&lt;/em&gt; there is fun. Kinda. Even though it feels like it’s much much less than other vartiable setup games like Chess 960 or even Caylus or Star Realms.&lt;/p&gt;

&lt;p&gt;Because of the lacklusterness of this setup variability I started worrying a few plays in that the game would feel samey and not have legs.&lt;/p&gt;

&lt;p&gt;Then over Christmas I had the chance to play Samurai again. It doesn’t have any variable setup at all. Yet every game feels different—because of what my opponents are doing and how they are playing and the decisions they’re making (along with the luck of the draw throughout the game, just like in Rebirth). When we got back home we brought Rebirth [Ireland] back out and wouldn’t you know it? Same thing. The games started  feeling different because my opponent stepped up his game and started becoming more aware of bottle necks and blocking and edge patterns. Some of the thick layer of sameyness that had gathered on top of this game&lt;small&gt; (in just a little over one year since it was released)&lt;/small&gt; was cleared off.&lt;/p&gt;

&lt;p&gt;And that’s the game design lesson of today: how putting in a variable setup on the Ireland side of Rebirth’s game board kind of hurt the game because that draws the eye, that makes me think “Okay this is gonna matter, this is what’s gonna make each game different” when it’s not at all. That’s not where the variety is hiding. The variety is all in what my opponents do and how I need to react to that and vice versa. I’m not sure I’d go as far as saying it’d’ve been &lt;em&gt;better&lt;/em&gt; if the towers and goals had all been fixed,&lt;small&gt; (because once we can see through the illusory nature of their variability, we can appreciate the little variety it does bring without placing undue expectations on it)&lt;/small&gt;, but maybe. Yeah, maybe a little. Affordance and conveyance is a huge part of game design, and a fixed setup would’ve more clearly conveyed the reality that “hey, this setup is more or less the same as it always is so what matters is what ruckus &lt;em&gt;you&lt;/em&gt; are gonna bring so step up.” and not as much “hey, wow, look at these eight random goals that were drawn, can you catch them all, they’re gonna super matter and so is the tower distribution, you’re gonna really be where all those 3s and 13s are” which is only such a small part of the game compared to basics like points from clusters, settlements, and castles.&lt;/p&gt;

&lt;p&gt;I’ve said before that the first food farm I play away from my big cluster is -12 points. The second one is -11 points, and the third one is -10 points. It might not look like that if I play away from it in the beginning (“I’m only giving up three points with this play since my existing cluster is only two big”) but that’s gonna be the end result once all your food farms are out, and ditto of course for power farms. There’s not a lot of goals that can compare to 12 points. A castle is a 10 point swing in a 2p game and most goal cards are only 8 points. Now, conversely, this doesn’t apply to playing apart but connecting up later. 1, 2, 1, 4 is correctly read as only two points short of 1, 2, 3, 4. The “away” I’m talking about is a food token so far away that you’ll won’tc connect up to it in time. That’s worth it but only when it results in a commensurately big point swing somewhere else. Like, playing a loose food farm next to the final 13p tile is minus twelve plus fourteen for a 2p gain so it’s better there than in your main cluster. Or, a loose food farm that cuts off and isolates three tiles from your 2p opponent might cost you twelve points but cost them ((12+11+10)-(1+2+3)) = 27 points if they were gonna link them all up, for a net +15 point delta for you, making it worth it to play away.  This sort of play is often worth way more than the goal points, tower points, and off-shore farm points. (And yeah not every farm away is gonna be -12. The average value of farms in a big cluster is 6.5. Pretty good compared to playing four tiles in Dublin for 4.25 points per tile. But I like to think of the farm tiles as worth 12, 11, 10, 9… etc, i.e. mentally reversing the order of them compared to the order they’re actually scored just so I can remind myself early on of how valuable they actually are; I give up twelve points with the first played away, eleven with the second played away and so on. If I end up with a cluster of say eight farms, that’s only 8+7+6+… uh, 4.5 points per tile! I could’ve gotten way more if I hadn’t played away as much!&lt;/p&gt;

&lt;p&gt;So while I’ve started becoming a li’l suspicious that Rebirth might not go the distance, I’m not counting it out just yet. The comparison to Samurai—a game without any setup variability at all—made me remember how vital the actual interplay of farm placement can be. &lt;a href=&quot;/pretty-sneaky-sis&quot; title=&quot;Pretty sneaky, sis&quot;&gt;Real interaction with a real human&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, I’m still not happy that the Scotland side has so few of what we’ve started calling “meadows” and too much “forests” where food farms must go and “mountains” where power farms must go. That kind of fixed, paint-by-numbers game play that reduces the game to only a matter of timing and miai values is a much bigger threat to the game variability interest than any fixed-vs-varied setup issue.&lt;/p&gt;

</description>
        <pubDate>Sat, 03 Jan 2026 18:14:50 +0100</pubDate>
        <link>https://idiomdrottning.org/variability-in-rebirth</link>
        <guid isPermaLink="true">https://idiomdrottning.org/variability-in-rebirth</guid>
        <category>texts</category>
        <category>boardgames</category>
      </item>
      <item>
        <title>Same-deck formats solve it all</title>
        <description>

&lt;p&gt;When I first got started with Magic I only had one deck, a huge pile
of I dunno 120 cards or something (Revised and Fallen Empires), I’m
not sure. There were enough lands in there to cover everything too. So
my neighbor and I played the then–well-known “both players draw from
the same deck” format for a while and it sucked. We were beginners so
we got board stalls until someone drew the &lt;a href=&quot;https://scryfall.com/card/me1/101/keldon-warlord&quot; title=&quot;Keldon Warlord&quot;&gt;Keldon Warlord&lt;/a&gt; and won.
&lt;a href=&quot;https://scryfall.com/card/6ed/170/burrowing&quot; title=&quot;Burrowing&quot;&gt;Burrowing&lt;/a&gt; and &lt;a href=&quot;https://scryfall.com/card/8ed/304/iron-star&quot; title=&quot;Iron Star&quot;&gt;Iron Star&lt;/a&gt; were also good cards in the “format”.&lt;/p&gt;

&lt;p&gt;So I quickly concluded that the right way to play Magic is that
everyone builds their own deck like constructing a clever li’l machine
and then we’d face them off.&lt;/p&gt;

&lt;p&gt;Not so fast! Because I’m going back to same-deck formats (like &lt;a href=&quot;https://articles.starcitygames.com/articles/the-danger-room/&quot; title=&quot;The Danger Room - Star City Games&quot;&gt;Battlebox a.k.a. Danger Room&lt;/a&gt; for example) now that I’ve
realized that it solves all Magic’s problems.&lt;/p&gt;

&lt;p&gt;That’s a way of playing where both players draw from the same deck.&lt;small&gt; (Danger Room also has a special rule for how to get lands—the deck is
all action has no land, and players start with ten specific lands in
hand that don’t count towards hand limit. That’s not what this article is about and I’m not a hater of Magic’s original mana system, but we often do play it wiwith this separate land system like Danger Room. It makes the shared deck easier to build, there can be more colors, and more cards can fit in the box. Some shared-deck formats like Forgetful Fish just shuffle all the lands in and they work fine.)&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;save-the-environment&quot;&gt;Save the Environment&lt;/h2&gt;

&lt;p&gt;Paper Magic is fundamentally not a sustainable game. There are climate
culprits that are even worse, way worse, but the idea of indefinitely
adding cards to a game, and most memorable usable keepable cards are
surrounded by a bunch of draft chaff, one-time-use disposable cards.
The fantasy equivalent of losing scratch tickets. With same-deck
formats you can use old existing cards you already have and you can
use them again and again.&lt;/p&gt;

&lt;h2 id=&quot;power-level&quot;&gt;Power Level&lt;/h2&gt;

&lt;p&gt;You can build it to be all-powerful or all-weak or anyhere in between.
If there is &lt;em&gt;any&lt;/em&gt; home for old &lt;a href=&quot;https://scryfall.com/card/4ed/200/gray-ogre&quot; title=&quot;Gray Ogre&quot;&gt;Gray Ogres&lt;/a&gt; and &lt;a href=&quot;https://scryfall.com/card/5ed/50/pearled-unicorn&quot; title=&quot;Pearled Unicorn&quot;&gt;Pearled Unicorns&lt;/a&gt; to
butt heads once more, it’s here.&lt;/p&gt;

&lt;p&gt;To me as someone nostalgic for those early days at the kitchen table
when cards like &lt;a href=&quot;https://scryfall.com/card/leg/163/raging-bull&quot; title=&quot;Raging Bull&quot;&gt;Raging Bull&lt;/a&gt; and &lt;a href=&quot;https://scryfall.com/card/leg/102/headless-horseman&quot; title=&quot;Headless Horseman&quot;&gt;Headless Horseman&lt;/a&gt; actually were
super cool and appealing and I wanted to play with them and see them
in actual action, this is the way. This is something I like compared to Cube where those cards wouldn’t get picked.&lt;/p&gt;

&lt;p&gt;At the same time, for those who enjoy powerful cards and “bombs”,
same-deck Magic is a way to include them in the deck guilt-free
because any player can draw them.&lt;/p&gt;

&lt;h2 id=&quot;no-more-pay-to-win&quot;&gt;No more pay to win&lt;/h2&gt;

&lt;p&gt;Constructed Magic can absolutely devolve to pay-to-win in many
formats. Limited becomes pay to even play (and the more you do it the
better you get at it).&lt;/p&gt;

&lt;p&gt;Even lending decks to each other becomes awkward. Do you lend the best
deck or the second-best deck or how do you even find out? Here, y’all
draw from the same deck.&lt;/p&gt;

&lt;p&gt;Now, cube (a weird word for “shuffling up old cards and drafting them
or using them for faux sealed deck play” is another solution. And I
love it. And I’ve been playing mostly cube for many years now and I
wish I had found cube long ago. Magic in high school would’ve been so
much more fun with our tiny collections if we had had the idea to just
shuffle up and redraft our cards.&lt;/p&gt;

&lt;h2 id=&quot;no-bad-matchups&quot;&gt;No bad matchups&lt;/h2&gt;

&lt;p&gt;Bad matchups is an even bigger reason I don’t like Constructed than
pay-to-win is. People don’t like mana screw? How about losing the game
before even shuffling up? Not into it. Even limited can suffer from
bad matchups. Same-deck Magic fixes it. Some people love the metagame
analysis part of Magic. “Hmm control is big now so maybe I can run
under it with a fast valuetown aggro”. Not into it.&lt;/p&gt;

&lt;h2 id=&quot;a-home-for-un-cards-or-home-made-cards&quot;&gt;A home for un-cards or home-made cards&lt;/h2&gt;

&lt;p&gt;Even the occasional un-card or home-made card&lt;small&gt; (you can use
“double-faced helper cards” a.k.a. substution cards to scribble your
own rules text on)&lt;/small&gt; can belong here. You don’t have to risk a
bunch of stickers or dexterity cards, just put in the specific cards
that make the game better. One of the problems with home-made cards is
that you don’t wanna make them too good or too bad but in a shared
deck, any player can draw them so balancing them becomes
easier.&lt;small&gt; (Just don’t make “Target Sandra loses the
game”.)&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;world-building--flavor&quot;&gt;World-building &amp;amp; flavor&lt;/h2&gt;

&lt;p&gt;Normally in Magic you can’t really control what your opponents play.
If they put in cards with a flavor or vibe you hate in their decks and
on the table there’s not a lot you can do against that in your local
FNM. But a shared-deck can be more curated if you want.&lt;/p&gt;

&lt;p&gt;If you want all Sarpadia all the time, you can. All old-face? All
Spider-Man? All Ravnica? We have a D&amp;amp;D-themed one.&lt;/p&gt;

&lt;p&gt;This is optional and you can go the other direction and make it
sprawling and wild and have people contribute mystery ingredients to
the soup.&lt;/p&gt;

&lt;h2 id=&quot;but-what-about-deckbuilding&quot;&gt;But what about deckbuilding?&lt;/h2&gt;

&lt;p&gt;People who love deckbuilding can pour that love into building shared-decks and danger rooms!&lt;/p&gt;

&lt;p&gt;Or two people can build decks and then shuffle them up.&lt;/p&gt;

&lt;h2 id=&quot;but-what-about-the-bubble&quot;&gt;But what about the bubble?&lt;/h2&gt;

&lt;p&gt;I’ve been burned before by the dream of “okay everyone just buy
exactly &lt;em&gt;this&lt;/em&gt; amount of random product and then we just use that to
build decks from all summer”, a “bubble” of nostalgia and re-imposed
kitchen table limits. The allure of getting to build and rebuild to
fight each other in a hyperlocal mini-meta. It just… it requires a
small group of people to be on the &lt;em&gt;exact&lt;/em&gt; same page about the appeal
of that idea.&lt;small&gt; (And you still get into problems like bad
matchups or unbalanced cards.)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;A shared-deck is fun even if you’re just two players. It scales all
the way down to “Hmm, it’s been a long time since you and I played
some Magic. Wanna shuffle up and play?” It’s a less ambitious approach
that keeps the game in the box. Magic’s goal was to be a game bigger
than its box. Between games you’re trying to acquire cards, meet
others, hone your decks. Shared-deck formats puts Magic back into the
box, making it more like any other boardgame. That feels like a very
welcome change to me.&lt;/p&gt;

&lt;h2 id=&quot;but-what-about-addiction&quot;&gt;But what about addiction?&lt;/h2&gt;

&lt;p&gt;Okay, okay. It’s not all roses. Any time someone comes up with a
solution to Magic, like how a few years ago the Tolarian Community
College professor suggested “everyone just buy one Deckbuilder’s Tool
Kit and stick to that”, what ends up happening is that people play
Magic, get into Magic, start lusting after more cards, more formats,
new cards, more cards. This doesn’t solve that. Cube already solved
many of the above issues and people can be like “Okay I only play
cube” and some can stick to that and that’s great and other’s can’t
and that’s not so great. I don’t have an answer for that. It makes me
hesitate to even post this because maybe this “solution” is the
equivalent of “enh, &lt;em&gt;one&lt;/em&gt; glass is fine”. Paving the road with good
intentions.&lt;/p&gt;

&lt;h2 id=&quot;draft-as-you-play&quot;&gt;Draft-as-you-play&lt;/h2&gt;

&lt;p&gt;I’ll give you a li’l bonus: We’ve also experimented with replacing the
draw from the shared deck with a Winston draft and we’ve also tried
having a row of cards be a shared hand in addition to the private
hands. Kind of like Star Realms a little bit. Magic the deckbuilding
game except it’s not your deck you’re “building” out of these
draftable cards, it’s your board.&lt;/p&gt;

&lt;p&gt;In the end I usually prefer just drawing normally but this stuff is
fun occasionally for variety.&lt;/p&gt;

&lt;h2 id=&quot;not-literally-a-shared-deck&quot;&gt;Not literally a shared deck?&lt;/h2&gt;

&lt;p&gt;Also if you have plenty of tutors or milling or deck manipulation just
feel free to split the deck up into two decks. Re-shuffle them and
re-split them between each game. I really do enjoy the “drawing from
the same deck”, literally drawing from one deck, where a &lt;a href=&quot;https://scryfall.com/card/ema/60/memory-lapse&quot; title=&quot;Memory Lapse&quot;&gt;Memory Lapse&lt;/a&gt; becomes a way to take the card for yourself or the occasional
scrying effect can impact either or both players but that’s for decks
that don’t go overboard with those kinds of effects. If you do have
lots of those cards just feel free to split the decks up into two
literal and physical decks.&lt;/p&gt;

</description>
        <pubDate>Mon, 29 Dec 2025 13:33:23 +0100</pubDate>
        <link>https://idiomdrottning.org/same-deck-magic</link>
        <guid isPermaLink="true">https://idiomdrottning.org/same-deck-magic</guid>
        <category>texts</category>
        <category>mtg</category>
      </item>
      <item>
        <title>And the band kept on playing (until it didn&apos;t)</title>
        <description>

&lt;p&gt;Sweden disastrously had the biggest year-over-year CO₂E emissions increase since 1990 as a direct and immediate consequence of our elected government’s policies—it’s proven that their diesel pricing was the culprit. When people tell me “We’re such a tiny country, we don’t need to do anything” that’s so wrong because:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We’re disproportionately bad, among the worst countries in the world&lt;/li&gt;
  &lt;li&gt;At the very least we shouldn’t be actively and deliberately increasing our emissions the way our gov’t has done&lt;/li&gt;
  &lt;li&gt;Fundamentally the idea that, when faced with a collective problem, any given subset claiming they don’t have to do anything because they’re just a small subset makes zero sense. It makes &lt;em&gt;less&lt;/em&gt; than zero sense when they’re among the worst culprits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“Everyone aboard the boat needs to stop drilling holes in the hull” “Okay but we the shuffleboard club isn’t gonna stop because we’re just one eighth of a percent of all the passengers on this boat and we’ve seen other people drilling too! 🎼🎵 Drill drill drill 🎶” “But you’re among the ones drilling &lt;em&gt;the most&lt;/em&gt;! Not as much as the dining club and you’re not as numerous as the dance club but– wait, what, you’re increasing your drilling in the middle of this conversation!?” “🎵 Drill drill drill 🎶”&lt;/p&gt;

&lt;p&gt;On a fundamental level the designation of this group as “the shuffleboard club” is arbitrary. We went and talked to someone in the dance club who was a real drillmaniac and she said “uhm we with shoesize 37.293 doesn’t need to stop drilling, we’re just one percent of a percent of the passengers, why are you going after us shoesize 37.293 folks? It doesn’t matter what we do, we are so few”.&lt;/p&gt;
</description>
        <pubDate>Wed, 17 Dec 2025 10:12:29 +0100</pubDate>
        <link>https://idiomdrottning.org/such-a-tiny</link>
        <guid isPermaLink="true">https://idiomdrottning.org/such-a-tiny</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>Call by value but the value is two pointers</title>
        <description>

&lt;p&gt;With &lt;code&gt;push!&lt;/code&gt; from &lt;a href=&quot;https://wiki.call-cc.org/eggref/5/miscmacros&quot; title=&quot;miscmacros - The CHICKEN Scheme wiki&quot;&gt;miscmacros&lt;/a&gt; you can cons onto that particular
name whereas with &lt;code&gt;mutate-cons!&lt;/code&gt; defined like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (mutate-cons! val lis)
  (set-cdr! lis (cons (car lis) (cdr lis)))
  (set-car! lis val))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can change all instances of that particular list. Super dangerous.♥︎&lt;/p&gt;

&lt;p&gt;Here, I’ll show you:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(let* ((abc &apos;(a b c))
       (abc2 abc)
       (fish &apos;(f i s h))
       (fish2 fish))
  (push! &apos;nope abc)
  (mutate-cons! &apos;yeah fish)
  (list abc abc2 fish fish2))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Returns this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;((nope a b c) (a b c) (yeah f i s h) (yeah f i s h))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That’s not a slag on &lt;code&gt;push!&lt;/code&gt; which is more often what you want. It’s a
macro modifying what one particular &lt;em&gt;name&lt;/em&gt; points to. Whereas
&lt;code&gt;mutate-cons!&lt;/code&gt; is a procedure that changes the actual underlying
object.&lt;/p&gt;

&lt;p&gt;Also &lt;code&gt;mutate-cons!&lt;/code&gt; doesn’t work on the empty list. You can only push
onto lists with at least one element. They need to be actual cons pairs.&lt;/p&gt;

</description>
        <pubDate>Mon, 08 Dec 2025 23:51:27 +0100</pubDate>
        <link>https://idiomdrottning.org/cbv-push</link>
        <guid isPermaLink="true">https://idiomdrottning.org/cbv-push</guid>
        <category>texts</category>
        <category>programs</category>
      </item>
      <item>
        <title>Scheme Do</title>
        <description>

&lt;p&gt;I thought the &lt;code&gt;do&lt;/code&gt; in in Scheme was a li’l hard to learn since the
examples I could find was a li’l too fancy and clever. Just like a lot
of my own documentation often is; sorry about that.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(do ((a 0 (add1 a))
     (e 13)
     (i 7 (sub1 i)))
    ((zero? i) (print &quot;ended &quot;) (print a))
  (print &quot;game cube&quot;)
  (print e)
  (print  a &quot; wii&quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The first argument is a list of bindings like a let. But if you put in
three things they will be rebound every round. Like in the above
example, &lt;code&gt;a&lt;/code&gt; will be rebound to &lt;code&gt;(add1 a)&lt;/code&gt;, and &lt;code&gt;i&lt;/code&gt; will be rebound to
&lt;code&gt;(sub1 i)&lt;/code&gt;. And you can also put in just one thing like the example
here just binds &lt;code&gt;e&lt;/code&gt; to 13 and then it just stays that.&lt;/p&gt;

&lt;p&gt;The second argument is a list that starts with the ending condition
and the rest of the list are statements that will be evaled after.&lt;/p&gt;

&lt;p&gt;And then all the remaining arguments are evaled every round.&lt;/p&gt;

&lt;p&gt;Yes, this is backwards that the ending stuff comes before the main progn body.&lt;/p&gt;

&lt;p&gt;Here’s a more basic example to just print happy birthday four times:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(do ((i 4 (sub1 i)))
    ((zero? i))
  (print &quot;happy birthday&quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Although for simple things like that, Chicken has &lt;code&gt;dotimes&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(dotimes (i 4) (print &quot;happy birthday&quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Both &lt;code&gt;do&lt;/code&gt; and &lt;code&gt;dotimes&lt;/code&gt; are pretty side-effects oriented but in both cases you &lt;em&gt;can&lt;/em&gt; put in a return value:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(do ((i 4 (sub1 i)))
    ((zero? i) &apos;my-return-value)
  (print &quot;happy birthday&quot;))

(dotimes (i 4 &apos;my-return-value) (print &quot;happy birthday&quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that return value can access your do scoped binds.&lt;/p&gt;

&lt;p&gt;The same miscmacros that gives us &lt;code&gt;dotimes&lt;/code&gt; also has the even simpler &lt;code&gt;(repeat 4 (print &quot;happy birthday&quot;))&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I refer to my own &lt;a href=&quot;/fold-maps&quot; title=&quot;A fold is a map&quot;&gt;fold write-up&lt;/a&gt; all the time (the
&lt;a href=&quot;/named-let-fold&quot; title=&quot;Named Let → Fold&quot;&gt;folds as named lets&lt;/a&gt; version hasn’t been as useful) and maybe with
this, I can use &lt;code&gt;do&lt;/code&gt; and &lt;code&gt;dotimes&lt;/code&gt; more instead of making let loops
and consing up unnecessary iotas.&lt;/p&gt;

</description>
        <pubDate>Tue, 02 Dec 2025 20:02:38 +0100</pubDate>
        <link>https://idiomdrottning.org/scheme-do</link>
        <guid isPermaLink="true">https://idiomdrottning.org/scheme-do</guid>
        <category>texts</category>
        <category>programs</category>
      </item>
      <item>
        <title>Advent of Code, 2025</title>
        <description>

&lt;p&gt;Here is where I’ll post my solutions to &lt;a href=&quot;https://www.adventofcode.com&quot; title=&quot;Advent of Code 2025&quot;&gt;Advent of Code&lt;/a&gt; using zshbrev.
Spoilers ahead, and no promises that I’ll make it through the entire 12 days.&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-01_15:05&quot;&gt;Dec 1st&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;(define (turn)
  (define-parameters zero 0)
  (fold
   (fn
    (with-result
     (when
         (zero?
          (save
           (modulo
            (+ (string-&amp;gt;number
                (strse x &quot;L&quot; &quot;-&quot; &quot;R&quot; &quot;&quot;)) y) 100)))
       (zero (add1 (zero))))))
   50
   (read-lines))
  (zero))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Last time I attempted Advent of Code, I got tangled up modifying the
step one solutions to handle step two and then I ended up wanting
to revisit step one but they were gone. So this year I’m going to
try to paste a second copy before modifying and I hope that works out
better.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (dial acc r d)
  (with (+ d r)
    (when
        (or
         (zero? it)
         (= 100 it)
         (&amp;lt; it 0 d)
         (&amp;lt; d 100 it))
      (acc))
    (modulo it 100)))

(define (dial acc (? (fn (&amp;lt; x -100)) r) d)
  (acc)
  (dial acc (+ r 100) d))

(define (dial acc (? (fn (&amp;lt; 100 x)) r) d)
  (acc)
  (dial acc (- r 100) d))

(define (dial acc (? string? x) y)
 (dial acc (string-&amp;gt;number (strse x &quot;L&quot; &quot;-&quot; &quot;R&quot; &quot;&quot;)) y))

(define (turn)
  (define-parameters zero 0)
  (fold (c dial (fn (zero (add1 (zero))))) 50 (read-lines))
  (zero))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This was one of the hardest bugs I’ve ever had to debug.&lt;br /&gt;
I’ve had to write log parsers, differs between different logs from
different versions, multiple implementations to check against each
other, Emacs highlight-regexp and count-matches and so on. It took
me ten tries on the Advent of Code website. I get paranoid that I
had mistyped my answer in there.&lt;/p&gt;

&lt;p&gt;The line that now says &lt;code&gt;(&amp;lt; it 0 d)&lt;/code&gt;, originally I had it
as &lt;code&gt;(&amp;lt;= it 0 d)&lt;/code&gt; but it gave false positives on rotating from zero.&lt;/p&gt;

&lt;p&gt;For a while I had it as &lt;code&gt;(and (&amp;lt; it 0) (&amp;lt;= 0 d))&lt;/code&gt; which… doesn’t
fix that problem at all. Even after coming up with the fix &lt;code&gt;(&amp;lt; it 0
d)&lt;/code&gt;, that gives false &lt;em&gt;negatives&lt;/em&gt; on rotating exactly one rotation
left from zero. But there’s no L100 in the data set? No, but my
code before I cleaned it up had:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(dial acc (+ r 100)
      (dial acc -100 d))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;where it now says:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(acc)
(dial acc (+ r 100) d)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;…leading to lots and lots of zero to zero turns which came with a
false positive in some versions and false positives in others.&lt;/p&gt;

&lt;p&gt;A complete PEBCAK on my part but the hunt for the bug became a real
adventure of trying to sift through clues in logs that were
thousands of lines long.&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-02_11:53&quot;&gt;Dec 2nd&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;(define (valid? x) #t)

(define (valid? (= -&amp;gt;list x))
  (-&amp;gt;* x (split-at (/ (require even? (length x)) 2)) equal? not))

(define (sum-not-valids-in-range
         (=
          (fn
           (map string-&amp;gt;number (string-split x &quot;-&quot;)))
          (current end)))
  (descend ((steps (- (add1 end) current)) current)
    (+ (if (valid? current) 0 current)
       (desc (sub1 steps) (add1 current)))))

(define (sum-not-valids)
  (-&amp;gt;&amp;gt;
   (-&amp;gt; (read-string)
       (string-split &quot;,\n&quot;))
   (map sum-not-valids-in-range)
   (reduce + 0)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After adapting that same idea to part two with a few minor tweaks,
it’s too slow! Works fine with the example data but not the full
input. I hate it when I have a working solution that
I really like beacuse it does something clever but have to write a
whole new one that’s faster. This is a “Project Euler” type
problem where I need to come up with a math solution instead of
just list procressing. But then I don’t really hate it because I
did come up with a good solution.&lt;/p&gt;

&lt;p&gt;Inverting the puzzle by making an &lt;code&gt;is-in-any-range?&lt;/code&gt; predicate and
then we can generate all invalid numbers up to the ceiling and see
if they’re in any range.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (is-in-any-range? x)
  (or
   (&amp;lt;= 1 x 19)
   (&amp;lt;= 51 x 69)
   (&amp;lt;= 72 x 85)
   (&amp;lt;= 86 x 113)
   (&amp;lt;= 411 x 466)
   (&amp;lt;= 525 x 652)
   (&amp;lt;= 660 x 782)
   (&amp;lt;= 859 x 1056)
   (&amp;lt;= 1626 x 1972)
   (&amp;lt;= 2768 x 3285)
   (&amp;lt;= 4002 x 4783)
   (&amp;lt;= 4919 x 5802)
   (&amp;lt;= 7025 x 8936)
   (&amp;lt;= 9096 x 10574)
   (&amp;lt;= 13004 x 15184)
   (&amp;lt;= 32138 x 36484)
   (&amp;lt;= 48548 x 61680)
   (&amp;lt;= 69302 x 80371)
   (&amp;lt;= 82984 x 100358)
   (&amp;lt;= 126397 x 148071)
   (&amp;lt;= 193276 x 237687)
   (&amp;lt;= 266408 x 302255)
   (&amp;lt;= 333117 x 414840)
   (&amp;lt;= 431250 x 455032)
   (&amp;lt;= 528410 x 680303)
   (&amp;lt;= 726807 x 764287)
   (&amp;lt;= 779543 x 880789)
   (&amp;lt;= 907442 x 983179)
   (&amp;lt;= 2558912 x 2663749)
   (&amp;lt;= 5117615 x 5149981)
   (&amp;lt;= 7702278 x 7841488)
   (&amp;lt;= 9231222 x 9271517)
   (&amp;lt;= 13413537 x 13521859)
   (&amp;lt;= 32295166 x 32343823)
   (&amp;lt;= 49829276 x 50002273)
   (&amp;lt;= 67606500 x 67729214)
   (&amp;lt;= 99990245 x 100008960)
   (&amp;lt;= 146086945 x 146212652)
   (&amp;lt;= 4747426142 x 4747537765)
   (&amp;lt;= 5552410836 x 5552545325)
   (&amp;lt;= 5858546565 x 5858614010)
   (&amp;lt;= 7454079517 x 7454227234)
   (&amp;lt;= 8764571787 x 8764598967)
   (&amp;lt;= 9999972289 x 10000034826)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Okay, great! I checked that there’s no overlapping ranges in this
particular data set. That means we can make an idempotent summer so
we don’t add the same number twice.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define summer (memoize (call-key* proc: + initial: 0)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now for a generator. The spine is just incrementing the numbers and
the ribs are repeating them.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define roof (biggest 2558912 2663749 1 19 72 85 82984 100358 86 113
                      193276 237687 51 69 779543 880789 13004 15184 2768 3285 4002 4783
                      7702278 7841488 7025 8936 5858546565 5858614010 5117615 5149981 4919
                      5802 411 466 126397 148071 726807 764287 7454079517 7454227234 48548
                      61680 67606500 67729214 9096 10574 9999972289 10000034826 431250
                      455032 907442 983179 528410 680303 99990245 100008960 266408 302255
                      146086945 146212652 9231222 9271517 32295166 32343823 32138 36484
                      4747426142 4747537765 525 652 333117 414840 13413537 13521859 1626
                      1972 49829276 50002273 69302 80371 8764571787 8764598967 5552410836
                      5552545325 660 782 859 1056))

(define (add-all-repeats seed big-number) (void))

(define (add-all-repeats seed number)
  (with (require (c &amp;gt; roof) (string-&amp;gt;number (conc number seed)))
   (when (is-in-any-range? it) (summer it))
   (add-all-repeats
    seed it)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let’s hard code it to five-digit numbers which is okay for this
particular input.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (generate-the-answer)
  (do ((num 1 (add1 num)))
      ((&amp;lt; 100000 num) (summer))
    (add-all-repeats num num)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Okay, that’s a relief! Today was a lot easier to debug. I
originally had the summer see the numbers even before they were
repeating. But that bug was easy enough to find and fix.&lt;/p&gt;

&lt;!-- And for true nerds checking the source code and my git repo
you might see that I&apos;ve kept on editing this one even long since I
had a working answer. If anything I should be tweaking yesterday&apos;s
entry since that one is more embarassing. But there&apos;s just
something fun in polishing something that I&apos;m already proud of. --&gt;

&lt;h2 id=&quot;date_2025-12-03_09:24&quot;&gt;Dec 3rd&lt;/h2&gt;

&lt;p&gt;Okay, here we have a similar dilemma of “extracting” vs building up
possible joltages and filtering for them like &lt;code&gt;(strse? &quot;9.*9&quot;)&lt;/code&gt;.
Maybe if I start with extracting, that will still be useful as a
fallback for any stragglers after a filtering solution.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (extract bank)
  (with (find-tail
         (is?
          (biggest (butlast bank))) bank)
    (list (car it) (biggest (cdr it)))))

(define (sum-joltages) (fold (fn (+ ((as-list extract) x) y)) 0 (read-list)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Okay, that worked fine. I’m always remarkably bad at predicting
what step two is gonna be. I feel like I’m gonna try extracting for
step two also.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define ((extract amount) bank)
  (with (find-tail
         (is?
          (biggest (drop-right bank amount))) bank)
    (cons (car it) ((extract (sub1 amount)) (cdr it)))))

(define ((extract 0) bank) (list (biggest bank)))

(define (sum-joltages) (fold (fn (+ ((as-list (extract 11)) x) y)) 0 (read-list)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That worked! Weird feeling how Monday took all day because I was
chasing a bug and even Tuesday took more than an hour, maybe closer
to three hours, but this one my idea worked right away and the
solution for part 1 was also the right direction for part 2. I
lucked out! And/or am actually good at programming especially when
it’s straight-forward list-processing like this.&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-04_10:27&quot;&gt;Dec 4th&lt;/h2&gt;

&lt;p&gt;This time around&lt;small&gt; (it’s my second time attempting Advent of
Code; I tried it in 2023 but quit before the end)&lt;/small&gt; I’m
paying more attention to the story and I’m really getting into the
Matt Groening–like shenanigans.&lt;/p&gt;

&lt;p&gt;As for the puzzle, this type of 2d, maps-and-neighbors stuff is
something I don’t have as much of a standard library for. SRFI-1
doesn’t really cover it so I’m starting more from scratch here and
I’m buckling in, accepting that it might take a li’l more time and
what write here I’ll get use out of later too. I actually thought
to work a li’l bit ahead and look up some array stuff in the latter
SRFI’s but then I didn’t have time to do that in November.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (count-accessible)

  (define nodes (call-list (map call-string (read-lines))))

  (define (get-node x y) (void))

  (define (get-node x y)
    (handle-exceptions exn (void)
                       ((require procedure?
                                 (nodes (require (c &amp;lt; -1) y)))
                        (require (c &amp;lt; -1) x))))

  (define (get-neighbors x y)
    (parse (c apply get-node)
           (list-ec (: dx -1 2)
                    (: dy -1 2)
                    (if (not (= 0 dy dx)))
                    (list (+ x dx) (+ y dy)))))
  (let ((width (length (nodes)))
        (height (string-length ((nodes 0)))))

    (sum-ec (: x 0 width)
            (: y 0 height)
            (if (eq? #\@ (get-node x y)))
            (if (&amp;gt; 4 (count (is? #\@) (get-neighbors x y))))
            1)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Okay I like it when it works first try because I hate to put in
more than one guess but this was right. Good. Also didn’t have any bugs.&lt;/p&gt;

&lt;p&gt;Now onto part 2. I really have to give Advent of Code a stern
scolding when it comes to accessibility: the dark grey text on dark
grey background is really really really hard to read so I use
einkbro’s light mode but that mode didn’t show the highlighted @
signs in the part 2 example. I had to toggle off the mode but then
I almost can’t see anything on the screen. Bad bad elves!&lt;/p&gt;

&lt;p&gt;But okay, I figured out from what the text says what to do.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (count-accessible)

  (define nodes (call-list (map call-string (read-lines))))

  (define (get-node x y) (void))

  (define (get-node x y)
    (handle-exceptions exn (void)
                       ((require procedure?
                                 (nodes (require (c &amp;lt; -1) y)))
                        (require (c &amp;lt; -1) x))))

  (define (get-neighbors x y)
    (parse (c apply get-node)
           (list-ec (: dx -1 2)
                    (: dy -1 2)
                    (if (not (= 0 dy dx)))
                    (list (+ x dx) (+ y dy)))))

  (let* ((width (length (nodes)))
         (height (string-length ((nodes 0))))
         (get-accessible
          (lambda ()
            (sum-ec (: x 0 width) (: y 0 height)
                    (if (memq (get-node x y) &apos;(#\x #\@)))
                    (if (&amp;gt; 4 (count (fn
                                     (memq x &apos;(#\x #\@)))
                                    (get-neighbors x y))))
                    (begin
                      ((nodes y) x #\x)
                      1)))))
    (descend ((accessible (get-accessible)))
      (do-ec (: x 0 width) (: y 0 height)
             (if (eq? #\x (get-node x y)))
             ((nodes y) x #\.))
      (+ accessible (desc (get-accessible))))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Okay. That worked. No wrong entries today either which always feels
great. I could spot my bugs on the example output. The bug today
was that while I realized right away that I need to count X as
neighbors, I forgot that I needed to count X as self too. So I was
done in a li’l less than an hour (three quarters rather) which is
fine. More than yesterday but that’s OK. I had to implement all
this 2D neighbors stuff. I liked the idea of using &lt;code&gt;parse&lt;/code&gt; since it
just elides voids.&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-05_08:57&quot;&gt;Dec 5th&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;(define ((in-ranges? ranges) ingredient)
  (any (fn (&amp;lt;= (first x) ingredient (second x))) ranges))

(define (count-fresh)
  (receive (ranges ingredients)
      (break number?
             (with (read-list)
               (strse* it
                       (: (=&amp;gt; start integer) &quot;-&quot; (=&amp;gt; end integer))
                       (conc &quot;(&quot; start &quot; &quot; end &quot;)&quot;))))
    (count (in-ranges? ranges) ingredients)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Today was a real head-scratcher because it seemed to me part 1 is a
subset of December 2nd and part 2 is even easier than part one.
Then I realized that the difference is that unlike December 2nd,
this time our input data have overlapping ranges (something I
checked for on Dec 2nd but almost forgot to do here). I’m grateful
that the test input also did, or I would’ve wasted a guess on the
real thing. Joining the ranges is just a smop once you know that
it’s there.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (join-ranges single) single)

(define (join-ranges (and ((had hadd) (nak nadk) . tail) (hd . tl)))
  (if (&amp;lt;= nak hadd)
      (join-ranges (cons (list had (biggest hadd nadk)) tail))
      (cons hd (join-ranges tl))))

(define (count-fresh)
  (fold
   (fn
    (+ y 1 (second x) (- (first x)))) 0
   (join-ranges
    (sort
     (take-while
      list?
      (with (read-list)
        (strse* it
                (: (=&amp;gt; start integer) &quot;-&quot; (=&amp;gt; end integer))
                (conc &quot;(&quot; start &quot; &quot; end &quot;)&quot;))))))))
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;date_2025-12-06_08:35&quot;&gt;Dec 6th&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;(define (pivot table) (cons (map car table) (pivot (map cdr table))))

(define (pivot (? (c every null?) table)) &apos;())

(define (cephaluate)
  (reduce + 0
          (map (o eval (c map string-&amp;gt;read) reverse)
               (pivot
                (map string-split (read-lines))))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Oh, wow, here’s what I’ve been dreading: an easy part 1 followed by
a seemingly completely different part 2!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define ((space-pad gl) str)
  (conc str (make-string (- gl (string-length str)) #\space)))

(define (cephaluate)
  (let* ((lines (read-lines))
         (gl (biggest (map string-length lines))))
    (reduce + 0
            ((over (eval
                    (map string-&amp;gt;read
                         (cons* ((as-list list last) (car x))
                                ((as-list butlast) (car x))
                                (cdr x)))))
             (parse (?-&amp;gt; string? (fn (if (strse? x &quot;^ +$&quot;) (values close: open:) x)))
                    (append
                     (map list-&amp;gt;string
                          (pivot
                           (map (o string-&amp;gt;list (space-pad gl)) lines)))
                     (list close:)))))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I live for this convoluted maps of maps of maps of maps stuff! Very
fun problem.&lt;/p&gt;

&lt;p&gt;Uh but if I were to try to explain how my program works… Hmm. From the inside out:&lt;br /&gt;
Reads all lines as lines.&lt;br /&gt;
Adds extra spaces to the end so all lines are the same length.&lt;/p&gt;

&lt;p&gt;Pivots the lists so columns become rows and rows become columns.&lt;/p&gt;

&lt;p&gt;Then with Acetone’s parse I split the problems into their own
lists.&lt;/p&gt;

&lt;p&gt;I split out the operator (that’s the &lt;code&gt;list last&lt;/code&gt;, &lt;code&gt;butlast&lt;/code&gt; stuff)
and put it first then read and eval each problem.&lt;/p&gt;

&lt;p&gt;Then finally I sum all those answers up.&lt;/p&gt;

&lt;p&gt;Didn’t have any bugs today.&lt;small&gt; I did put in two redundant
reverses that still gave me the right answer; I found them and
removed them after getting the star while making this write
up.&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-07_10:32&quot;&gt;Dec 7&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;(define-parameters splits 0)

(define (tachyon-count (prev current next . beams))
  ((over
    (when (and (eq? x #\S) (eq? y #\.)) (current i #\S))
    (when (and (eq? x #\S) (eq? y #\^))
      (splits (add1 (splits)))
      (next (sub1 i) #\S)
      (next (add1 i) #\S)))
   (prev) (current))
  (tachyon-count
   (cons* current next beams)))

(define (tachyon-count (last exit))
  (splits))

(define (tachyon-count)
  (tachyon-count (map call-string (read-lines))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now this is what I’m talking about! This is the longest I’ve spent
on a part 1 so far. Even Dec 1st, which was my longest day, part 1
wasn’t where I got stuck. Here I knew what to do, it was just tricky
to keep track of everything. Now onto part two of this wonderful
puzzle!&lt;/p&gt;

&lt;p&gt;After reading part two… what a let down! It’s just the
non-idempotent version. Although smopping that together on a
tired-brain day like today is easier said than done.&lt;/p&gt;

&lt;p&gt;I apologize to the makers of Advent of Code for calling their hard
work a let down, it’s just that the non-idempotent “naively
recursive” version is what I almost wrote by accident for part 1. I
checked myself in time before making that version so actually
implementing it did take some time.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define ((list-&amp;gt;indices pred) lis)
  (filter-map (fn (and (pred x) y)) lis (iota (length lis))))

(define (tachyon-count prev (next . beams))
  (if (memq prev next)
      (+
       (tachyon-count (sub1 prev) beams)
       (tachyon-count (add1 prev) beams))
      (tachyon-count prev beams)))

(define (tachyon-count last &apos;()) 1)

(define (tachyon-count)
  (with
   (remove
    empty?
    (map (as-list (list-&amp;gt;indices (complement (is? #\.)))) (read-lines)))
   (tachyon-count (caar it) (cdr it))))

(memoize! tachyon-count)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Before I thought to clean up the input it was hard to keep track of
everything (I had prev, current, next, blank lines, passing through
etc). And I had something that worked on the example input but was
too slow for the real input. So I started over and that’s the
version you see above. It introduced a bug (I forgot to pass
through beams at first) which required some creative logging to
find with ever-increasing indentation prefixes etc etc until the
new version finally worked on the example input. But it was &lt;em&gt;still&lt;/em&gt;
too slow for the real input. And memoization fixed that and here we
are. All in all an extra hour or two.&lt;/p&gt;

&lt;p&gt;The hardest problem yet after the “breathers” of 5th and 6th, but I
remember last time (2023) I was completely stumped on some problems
even after spending a day with a paper notebook just thinking and
thinking and so far we haven’t seen that. I remember back then
having to postpone some of the stars like “Okay I’ll get back to
this one later” and doing it in the evening or the next day or
something and this year I’ve just done both of them in the morning
except for the first day that did take all day.&lt;small&gt; (And what a
privilege to be able to work all day on a recreational
puzzle!)&lt;/small&gt; Maybe it says more about how incredibly burnt out
I was after the apartment move back then than about the
difficulties of the puzzles.&lt;/p&gt;

&lt;p&gt;Also this one felt more like a “knowledge test” than the preious
entries. I knew about the basics of recursion vs iteration,
idempotence vs shadowing, and the life-changing magic of
memoization. I know about those things from books like &lt;abbr title=&quot;Structure and Interpretation of Computer Programs&quot;&gt;SICP&lt;/abbr&gt; and
&lt;abbr title=&quot;Paradigms in AI Programming&quot;&gt;PAIP&lt;/abbr&gt;. It’s less
about me figuring out something clever and more about me having
book learning. That doesn’t feel super fair.&lt;/p&gt;

&lt;p&gt;Maybe I should take this opportunity to share some of that book
learning: My part one solution went through every row once. That’s
why it’s fast. It’s an iterative solution. The part two solution
needs to go through every row for every beam splitter above it. It
branches over three trillion times. That is too slow for even my
super duper computer to figure out. But memoization, which in this
case means having a hash-table that stores the results it has seen
before, means that it doesn’t have to re-calculate subtrees it has
seen before. It becomes fast again.&lt;/p&gt;

&lt;p&gt;memoize! the brev-separate version does work even through
match-generics (but it needs to be called after all the
definitions) and zshbrev (since the entire file is compiled).&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-08_19:50&quot;&gt;Dec 8th&lt;/h2&gt;

&lt;p&gt;I usually hope for a hard one but today I overslept or rather I had
a hard time falling asleep and it’s already like two hours past my
normal wake-up time and I have laundry day so I hope it’s an easy
one today.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (read-csv) (map (o (strse* &quot;[,\&quot;]&quot; &quot; &quot; ) list) (read-lines)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I haven’t gotten to read the problem yet but I’m opening the wrong
windows, pasting the wrong files etc. This is gonna be a hard day
no matter how easy the problem is just from my own tiredness.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (pyth a b) (sqrt (+ (* a a) (* b b))))

(define (distance (x1 y1 z1) (x2 y2 z2))
  (pyth (abs (- z1 z2))
        (pyth (abs (- x1 x2)) (abs (- y1 y2)))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note to self: It was way slower when or both of these was memoized
because they’re usually not called that often on the same inputs so
the lookup costs more than it saves. Also note to self: I could
save a little by removing the outermost sqrt. Orders of squares are
the same as the order of roots.&lt;/p&gt;

&lt;p&gt;Aaand it’s a super hard problem. We’re in the back half now folks! The deep end!&lt;/p&gt;

&lt;p&gt;Back after breakfast break. This is three problems (distance in 3D
space, keeping track of groups of circuits, and recursive pairwise
comparison) that each on their own would’ve been enough the past
week. I for one did not know how to check distances in 3D space so
I had to figure it out. (I did know how to check them in 2D space.)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define circuits (call-table))

(define (connect a b)
  (unless (memq a (circuits b))
    (with (append! (circuits a) (circuits b))
      (for-each (fn (circuits x it)) it))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This one, &lt;code&gt;take-up-to&lt;/code&gt; is a goody that I should get around to
putting in brev-separate. I use it all the time for RSS stuff. I’m
sure it’ll come in use for more than one day this challenge:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define ((take-up-to lim) lis)
  (take lis (min lim (length lis))))

(define (mutate-cons! val (and lis (hd . tl)))
  (set-cdr! lis (cons hd tl))
  (set-car! lis val))

(define (insert-sorted! val lis)
  (cond ((&amp;lt;= (car val) (caar lis))
         (mutate-cons! val lis))
        ((null? (cdr lis))
          (set-cdr! lis (list val)))
        (else
         (insert-sorted! val (cdr lis)))))

(define spans (call-table))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This divides up the half a million distances into spans.&lt;/p&gt;

&lt;p&gt;After getting my two stars I wanted to keep optimizing and I timed
it out that five or six was the fastest quotient. I started out
with a hundred but that’s way slower. Even seven is slower and so
is four. With five, we have 25909 spans (hash-table entries) with
an average list length of just under twenty each. That’s an
indictment of my fancy mutating cdr-setting &lt;code&gt;insert-sorted!&lt;/code&gt;. But a
testament to the glory of hash-tables.♥︎&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (stash! contender)
  (with (quotient (floor (car contender)) 5)
    (this (spans it)
      (if that
          (insert-sorted! contender that)
          (spans it (list contender))))))

(define (connect-and-count limit)
  (define-parameter quitter limit)
  (define boxes (read-csv))
  ((over (circuits x (list x))) boxes)
  (pair-for-each
   (fn (with (car x)
         ((over
           (stash! (list (distance it x) it x)))
          (cdr x)))) boxes)
  (let/cc break
   (for-each
    (fn (for-each (fn (when (zero? (quitter)) (break &apos;ok))
                      (quitter (sub1 (quitter)))
                      (connect (second x) (third x))) (spans x)))
    (sort (hash-table-keys (spans)))))
  (with (sort (map length (delete-duplicates (hash-table-values (circuits)))) &amp;gt;)
    (apply * (take (sort it &amp;gt;) 3))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Getting a solution that even works on the example of part one took
several hours&lt;small&gt; (the actually figuring out the three parts of
the problem took a long time and then I also had a bad bug in my
connect routine where it worked until I was connecting existing
networks)&lt;/small&gt;. That solution was too slow for the real
input—and that was still on the first star! The first problem was
that I was running sort on all the distances and then took the
limit on that sorted list. Running sort post-hoc on half a million
entries was something I thought it would’ve been able to handle but
apparently not.&lt;/p&gt;

&lt;p&gt;Then I made an insert-sorted that, functionally (pure shadowing)
inserted the new distances as I went instead of sorting them
post-hoc. That finally gave me an answer for part one’s full data
but it took several minutes to find the answer. So after reading
part two, I made the mutating insert-sorted! and also added the
spans. Initially I had spans by hundreds which gave me the answer
in about twelve seconds or so. Really strange to me that sorting
was the bottleneck but that’s what it was.&lt;/p&gt;

&lt;p&gt;Now for part two:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (connect a b)
  (unless (memq a (circuits b))
    (with (append! (circuits a) (circuits b))
      (for-each (fn (circuits x it)) it)))
  (length (circuits a)))

(define (connect-and-count)
  (define boxes (read-csv))
  (define boxl (length boxes))
  ((over (circuits x (list x))) boxes)
  (pair-for-each
   (fn (with (car x)
         ((over
           (stash! (list (distance it x) it x)))
          (cdr x)))) boxes)
  (let/cc break
   (for-each
    (fn (for-each (fn (when (= (connect (second x) (third x)) boxl)
                        (break (* (caadr x) (caaddr x))))) (spans x)))
    (sort (hash-table-keys (spans))))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I had it down to “just” twelve seconds to sort all the half a
million distances, but then the connecting them all into one big
network was still too slow. I tried several other algoritms for
connect until I landed on the one I used above and I updated part
one to match also. Since this was largely an optimization puzzle, I
kept working on part one to make it faster making sure I’d still
get the right answer and then applying it to part two. So today I
didn’t submit any wrong answers either. It just took all day, is all.&lt;/p&gt;

&lt;p&gt;I had a bunch of versions of connect which added all the boxes to
all the boxes one by one. One of those versions was bugged (before
I even had part one done). I felt like galaxy brain when I came up
with the &lt;code&gt;append!&lt;/code&gt; solution since it was so different than anything I
had and such a Gordian shortcut. If some of y’all had that approach
figured out right away I salute you.♥︎ For me it took some time
getting there.&lt;/p&gt;

&lt;p&gt;Wow!! I loved this puzzle! I had it ticking along slowly until I
figured out a new way to connect and now the connection part is
instant. I’m really proud of my solution. I ended up with getting
the distance sorting down to under two seconds and the connection
part to be instant. That’s a good optimization down from an
instance sorting that timed out, and then I got it down to twelve
seconds, so that then the connection part was what timed out. And
now the whole thing is done in two secs. I loved this puzzle. It
took all day but it was a day well spent and I learned a lot just
by experimenting, without looking things up&lt;small&gt; (beyond just
reading the docs for SRFI-1, SRFI-69 and the other libraries I was
using. Especially my own. I don’t consider it cheating to read my
docs I’ve written and posted to this website♥.)&lt;/small&gt;.&lt;/p&gt;

&lt;p&gt;Maybe this is backwards and &lt;abbr title=&quot;results-oriented thinking&quot;&gt;rotty&lt;/abbr&gt; but I’m way more proud of spending a whole
day on the problem like today than when I solve it quickly.
Although as per ushe with me there’s a &lt;a href=&quot;https://idiomdrottning.org/zone-of-suck&quot; title=&quot;The Zone of Suck&quot;&gt;zone of suck&lt;/a&gt; where
spending a couple of hours is what I’m least proud of compared to a
fast solution or sticking to it all day.&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-10_00:09&quot;&gt;Dec 9th&lt;/h2&gt;

&lt;p&gt;I’m hoping for easy ones from here on out and at first glance it
seems like today delivered on that since I can use a similar
pairwise comparison as yesterday. Unlike yesterday where I couldn’t
figure out any easier way to count up the distances than to
actually pyth them out, here an idea immediately comes to mind
where I can discard candidates based on one or both axes and weed
things out considerably, but I’ll try the more brute force wasteful
approach first, maybe it’ll be enough.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (carpet (ax ay) (bx by)) (abs (* (- ax -1 bx) (- ay -1 by))))

(define (all-squares)
  (with (read-csv)
    (biggest (list-ec (:list a it) (:list b it) (carpet a b)))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sloppy! For the first time in a while I entered a wrong input into
the website; I didn’t notice that my code gave the wrong answer on
the example input, I was just happy that it was fast enough on both
the example input and the actual input. It was, so I’m not gonna
have to do anything fancy at least for part one, but, uh, being
right is more important than being fast.♥︎ The bug was that I had
forgotten the &lt;code&gt;-1&lt;/code&gt; above, counting the tile distances exclusive
rather than inclusive.&lt;/p&gt;

&lt;p&gt;Okay so unlike yesterday where I thought part one was pretty
difficult on its own, here there’ a huge jump in difficulty by part
two, or rather, what I did for part two is not super relevant for
part two. But that’s okay. That’s why I like to get to part two
quickly so I can know what I’m really supposed to do.&lt;small&gt; (And
the fact that it’s often hard to predict is part of the fun of
Advent of Code.)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;It’s just after midnight and I haven’t figured out the second part yet.&lt;/p&gt;

&lt;h2 id=&quot;date_2025-12-10_11:41&quot;&gt;Dec 9th, continued&lt;/h2&gt;

&lt;p&gt;Okay it’s the next morning! Back to yesterday’s problem before even
looking at the new problem. Most of the following was written
yesterday. I write and delete and write and delete, that’s my
workflow.&lt;/p&gt;

&lt;p&gt;The red tiles are all inside the area 1837,1574 to 98308,98188 so
initializing a vector of vectors to fit that dies with OOM so
we’re gonna have to get fancy and procedural.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(define (horizontal? line) #f)
(define (horizontal? ((ax y) (bx y))) #t)

(define (data-&amp;gt;lines data)
  (partition!
   horizontal?
   (map (compose sort list) data (cons (last data) data))))

(define nodes (read-csv))

(define h-lines #f)
(define v-lines #f)

(define red? (call-table))
((over (red? x #t)) nodes)

(define ((connected-v-line? point)
         (start end))
  (or (eq? start point)
      (eq? end point)))

(define (bendy? (start end))
  (with
      (map second
           (list
            start
            (find (complement (is? start))
                  (find (connected-v-line? start) v-lines))
            (find (complement (is? end))
                  (find (connected-v-line? end) v-lines))))
    (or (= (second start) (biggest it))
        (= (second start) (smallest it)))))

(receive (hl vl)
    (data-&amp;gt;lines nodes)
  (set! h-lines (map sort hl))
  (set! v-lines (map sort vl))
  (set! steppy-lines (remove bendy? h-lines)))

(define ((cross? (= sort ((mxl my) (mxh my))))
         ((gx gyl) (gx gyh)))
  (and (&amp;lt; gyl my gyh)
       (&amp;lt; mxl gx mxh)))

(define ((cross? (= sort ((mx myl) (mx myh))))
         ((gxl gy) (gxh gy)))
  (and (&amp;lt; myl gy myh)
       (&amp;lt; gxl mx gxh)))

(define ((cross? ((mx my) (mx my))) any) #f)

(define ((overlap? line) anything) #f)

(define ((overlap? ((mx myl) (mx myh)))
         ((gx gyl) (gx gyh)))
  (and
   (eq? mx gx)
   (&amp;lt; myl gyl gyh myh)))

(define ((overlap? ((mxl my) (mxh my))) ((gxl gy) (gxh gy)))
  (and
   (eq? my gy)
   (&amp;lt; mxl gxl gxh mxh)))

(define (inside? point)
  (or (red? point)
      (with (list (list 0 (second point)) point)
        (odd?
         (+ (count (cross? it) v-lines)
            (count (overlap? it) steppy-lines))))))

(define-parameters best 2 heck &apos;())

(define ((small ungreen?) ax ay bx by)
  (ungreen?
   (min (add1 ax) bx)
   (min (add1 ay) by)
   (max (sub1 bx) ax)
   (max (sub1 by) ay)))

(define ((normalize ungreen?) ax ay bx by)
  (ungreen? (min ax bx) (min ay by)
          (max ax bx) (max ay by)))

(define (ungreen? ax ay bx by)
  (or
   (any (cross? `((,ax ,ay) (,ax ,by))) h-lines)
   (any (cross? `((,bx ,ay) (,bx ,by))) h-lines)
   (any (cross? `((,ax ,ay) (,bx ,ay))) v-lines)
   (any (cross? `((,ax ,by) (,bx ,by))) v-lines)
   (not
    (every inside? `((,ax ,ay) (,bx ,ay) (,ax ,by) (,bx ,by))))))

(define (square-size ax ay bx by)
  (* (add1 (- bx ax)) (add1 (- by ay))))

(define (carpet (ax ay) (bx by))
  (with ((normalize square-size) ax ay bx by)
    (unless
        (or
         (&amp;lt; it (best))
         ((normalize ungreen?) ax ay bx by)
         ((normalize (small ungreen?)) ax ay bx by))
      (best it)
      (heck `((,ax ,ay) (,bx ,by))))))

(define (path-format ((ax ay) (bx by)))
  (conc &quot;M &quot; (/ ax 1000.0) &quot; &quot; (/ ay 1000.0)
        &quot;H &quot; (/ bx 1000.0) &quot; V &quot; (/ by 1000.0)
        &quot;H &quot; (/ ax 1000.0) &quot;Z&quot;))

(define (all-squares)
  (do-ec (:list a nodes) (:list b nodes) (carpet a b))
  (print &quot;The answer &quot; (best))
  (print &quot;which looks like this &quot; (path-format (heck))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Oh no I give up on this for now. So heartbroken.&lt;/p&gt;

&lt;p&gt;I painted the red and green tiles both green in this image and
superimposed my program’s best solution as a black rectangle on
top.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/theater-carpet.svg&quot; alt=&quot;Their floor&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But it’s not accepted as the right answer. I can’t see a better
answer with my own eyes either. So I’m leaving this as a one star
and I’m just that much closer to giving up on the entire Advent of
Code. I obsess over it, I spend all day on it in this horrible
hyperfocused state. Other activities like playing games with
friends or eating food become stress isntead of joy. And to boot
I’m still not smart enough to actually solve the problems!&lt;/p&gt;

&lt;p&gt;I’ll go and take a look at Dec 10th’s problem.&lt;/p&gt;

</description>
        <pubDate>Mon, 01 Dec 2025 15:06:05 +0100</pubDate>
        <link>https://idiomdrottning.org/aoc25</link>
        <guid isPermaLink="true">https://idiomdrottning.org/aoc25</guid>
        <category>texts</category>
        <category>programs</category>
      </item>
      <item>
        <title>Kindred isn&apos;t a supertype because sorceries can&apos;t be goblins</title>
        <description>

&lt;p&gt;A lot of people wonder why the kindred cardtype in Magic can’t be a
supertype or why it’s even necessary in the first place and I’ll
explain that here!&lt;/p&gt;

&lt;h2 id=&quot;why-its-even-necessary&quot;&gt;Why it’s even necessary!&lt;/h2&gt;

&lt;p&gt;It was decided once upon a time that subtypes belong to &lt;em&gt;specific&lt;/em&gt;
card types. Like “aura” is an &lt;em&gt;enchantment&lt;/em&gt; subtype, “elephant” is a
&lt;em&gt;creature&lt;/em&gt; subtype and so on. And the game rules is a super stickler
about this point. It’s something it really insists on.&lt;/p&gt;

&lt;p&gt;Now, could this decision change? Yes. With strange aeons even
foundational rules can die.&lt;/p&gt;

&lt;p&gt;That’s actually one of many reasons why Wizards better never hire me
as a rules manager because I’d spend so much time trying to undo this
“subtypes belong to specific card types” rule because I think that
rule is so dumb. I’d just have a trait list and I’d make it more than
just one line too.&lt;small&gt; (Similar to how Netrunner does it.)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;But dumb as it is, it does have a silver lining: because of this rule,
if the game sees a card that’s “enchantment creature — aura licid” it
can know that the “licid” part belongs to the “creature” part, and the
“aura” part belongs to the “enchantment” part.&lt;/p&gt;

&lt;p&gt;Now, if that li’l silver lining makes the restriction worth
it&lt;small&gt; (especially as they’re moving away from subtypes having
rules baggage, like how it’s not the “aura” part that makes
enchantments stick to stuff, it’s the “attach” part that does
that)&lt;/small&gt;? I’m not sure. But it is what it is and that’s why it’s
there.&lt;/p&gt;

&lt;p&gt;By now that’s also something that digital relies on It knows that a
“destroy all goblins” it only needs to look at creatures and kindreds.&lt;/p&gt;

&lt;h2 id=&quot;but-splice-onto-arcane&quot;&gt;But splice onto arcane!&lt;/h2&gt;

&lt;p&gt;However, while subtypes can’t be mixed and matched, two card types can
share subset typesets as long as they share all of them. Instants and
sorceries share all the same subtypes, which is why both instants and
sorceries can be arcane.&lt;/p&gt;

&lt;p&gt;And that’s why kindred: it’s a card type that share the subtype
typeset with creature without sharing creatures other rules baggage
like being permanents.&lt;/p&gt;

&lt;h2 id=&quot;so-why-isnt-it-a-supertype&quot;&gt;So why isn’t it a supertype?&lt;/h2&gt;

&lt;p&gt;If this could be done with any other marker, like a supertype, it
wouldn’t need to be a supertype either. In that world it could be a
keyword even or a li’l icon or whatever. And maybe that &lt;em&gt;is&lt;/em&gt; possible
with Magic rule 101. That’s the paradox of this: if this &lt;em&gt;could&lt;/em&gt; be a
supertype, it would &lt;em&gt;not&lt;/em&gt; need to be a supertype. That’s a mindmelting sentence so let me try again:&lt;/p&gt;

&lt;p&gt;If the card could just say “This sorcery can have creature subtypes
even though it’s not a creature”, it could do that through card text
or a keyword granting that ability.&lt;/p&gt;

&lt;p&gt;If the card could &lt;em&gt;not&lt;/em&gt; just say that, it couldn’t do that with a
supertype either.&lt;/p&gt;

&lt;p&gt;Now, &lt;em&gt;one&lt;/em&gt; advantage for our très cray future rules manager unraveling
all this stuff to prefer making it a supertype instead of other kinds
of markers like keywords or icons would be that existing kindred cards
would still look right. “Kindred Sorcery — Goblin” would look the
same, visually and typographically I mean, as it it does now when it’s
a card type. But that’s really the only advantage in the supertype
camp.&lt;/p&gt;

&lt;h2 id=&quot;why-did-the-kindred-card-type-go-away&quot;&gt;Why did the kindred card type go away?&lt;/h2&gt;

&lt;p&gt;The reasons Wizards don’t like it is that it doesn’t make sense to
only use it some of the time. Like if a goblin sorcery can be gobliny,
why isn’t a fireball spell fiery or a counterspell wizardly or a heal
spell clericy or an ice spell icy? They’d have to put that stuff on
all the cards all the time&lt;small&gt; (which I’d think would be pretty
cool actually, hence why I’d want to move to a multi-line trait
system)&lt;/small&gt; and they don’t like putting stuff on there that the
current environment doesn’t even refer to. So either you &lt;em&gt;always&lt;/em&gt; have
kindred on &lt;em&gt;everything&lt;/em&gt; or you never do it, was their thinking, and
that’s why they stopped using it.&lt;/p&gt;

&lt;h2 id=&quot;why-did-it-change-its-name&quot;&gt;Why did it change its name?&lt;/h2&gt;

&lt;p&gt;“Tribal” was an awful name for it in the first place. Card types have
changed names before&lt;small&gt; (creatures used to be called summon spells
in some zones)&lt;/small&gt; so that’s not new.&lt;/p&gt;
</description>
        <pubDate>Sat, 29 Nov 2025 17:15:37 +0100</pubDate>
        <link>https://idiomdrottning.org/kindred-cardtype</link>
        <guid isPermaLink="true">https://idiomdrottning.org/kindred-cardtype</guid>
        <category>texts</category>
        <category>mtg</category>
      </item>
      <item>
        <title>Shirking: Unplugged in Stockholm</title>
        <description>

&lt;p&gt;As I continue my self-racking of heart and mind to figure out why I hate smartphones and internet and screens so much, here’s one more reason I came up with and this one is not pretty. Kind of wish that I had stayed in the self-deluded dark and not figured this one out:&lt;/p&gt;

&lt;p&gt;Once upon a time, a subconscious part of my own twisted mind must’ve realized that if it’s not possible for me to do something, that’s the best excuse for not having to do it. “Oh, I can’t go and check and fix and do all that for you now, I don’t have internet here.” “Oh, I didn’t see your email, I wasn’t at home.”&lt;/p&gt;

&lt;p&gt;I can’t do that right now because I had to walk away from the tools.&lt;/p&gt;

&lt;p&gt;I finally managed to track down this unknown impulse by thinking long and hard about just exactly &lt;em&gt;why&lt;/em&gt;, as I’m trying out mods for Light Phone III, it’s so important for me to not be able to, for example, open browser or F-Droid or Termux on that thing. Like, I found myself uninstalling AntennaPod because of how it has an “open website” widget on podcasts that lets me, from there, access the open web. Other apps where I’m like “oh no from the help page or even log in screen I can break out into the open web so okay goodbye this app was good but I &lt;strong&gt;need&lt;/strong&gt; to stay disconnected”. I had to ask myself why this mattered so much to me that I’m going through ridiculous hoops for it.&lt;small&gt; And it’s two reasons. The biggest is that I just don’t want to spend all nights and all mornings online. It’s nice to do podcasts or audiobooks late at night as long as I then have to physically leave bed in the morning and get a tablet if I wanna go online, because I’ve found again and again that if I don’t, I’ll miss breakfast, I’ll miss the entire day. Or if I can go online in the middle of the night, I’ll wake up and do that. That’s right, the even bigger reason than my laziness is my lack of impulse control. Hmm, this essay is making me doubt my own awesomeness.&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Secondary reason is the aforementioned shirking. Being offline as a way to get out of work. Apparently I have this hangup that “If I &lt;em&gt;can&lt;/em&gt; do it, I’m gonna keep finding myself in situations where I &lt;em&gt;ought&lt;/em&gt; to do it”. My conscious mind, my values, really do want to help and say yes, to the extent that &lt;a href=&quot;/two-wolves&quot; title=&quot;The Two Wolves&quot;&gt;my subconscious wants to protect myself&lt;/a&gt; by putting up these barriers. I’m not the type of person that can just easily say “no I don’t wanna” or “I’ll get to that later, I’m doing something else now” or “I’m gonna put it on airplane mode for a few hours”. But my other brain noped out for me, ahead of time, by making sure I don’t have internet in my pocket and that online is something I can and do walk away from.&lt;/p&gt;

&lt;p&gt;Now, to pull back from the self-deprecation for three seconds and try to figure out how this kind of antisocial shirking-through-disconnection sometimes actually can be the responsible choice.&lt;/p&gt;

&lt;p&gt;It might be the case that I can do stuff more efficiently and faster by using batching and a more appropriate and capable device like a bigger screen and a real keyboard. If I can reply to ten emails spread out over the day in a way that adds up to forty-five minutes total or even more due to context switching and mindset and resources and thumb-typing vs touch-typing, that’s an overall loss if I otherwise could’ve replied to them all in one half-an-hour window.&lt;/p&gt;

&lt;p&gt;The batching can also foster a more responsible selection of duties making sure society &lt;a href=&quot;/efficiency&quot; title=&quot;The ruthless efficiency of spoons&quot;&gt;gets the most out of my limited spoons&lt;/a&gt;. If more requests come in than I can handle, batching them can help me get enough of an overview to select the most worthwhile ones.&lt;small&gt; (Uh, that’s not to say that I’m good at it yet and if I’ve missed some of y’all’s messages that’s more likely due to a mistake on my part than a deliberate deselection.)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Even if it can’t, the shirking might be a vital rest and recuperation and acknowledgment of limited bandwidth.&lt;/p&gt;

&lt;p&gt;This is also interbraided with the other reasons for going offline, like my frustration with the mental ice age of &lt;a href=&quot;/appified&quot; title=&quot;Against the Appified Society&quot;&gt;the corporate-owned, appified society&lt;/a&gt;. Maybe &lt;a href=&quot;/unplug-weirdo&quot; title=&quot;Being an unplug weirdo to not be a FOSS weirdo&quot;&gt;I can’t explain why&lt;/a&gt; I &lt;a href=&quot;/franklin&quot; title=&quot;Franklin Street Statement on Freedom and Network Services&quot;&gt;don’t want to go on Facebook&lt;/a&gt; but if I physically &lt;em&gt;can’t&lt;/em&gt; because I don’t have a smartphone with me, I don’t have to worry as much about the other person trying to convince me or bully me. Nope, sorry, I just literally can’t.&lt;/p&gt;

</description>
        <pubDate>Tue, 25 Nov 2025 13:34:05 +0100</pubDate>
        <link>https://idiomdrottning.org/shirking</link>
        <guid isPermaLink="true">https://idiomdrottning.org/shirking</guid>
        <category>texts</category>
        <category>psychology</category>
        <category>gtd</category>
      </item>
      <item>
        <title>Bilavgaserna är som fem tjernobylkatastrofer i veckan</title>
        <description>

&lt;p&gt;Jag har ju protesterat mot KD:s kärnkraftshajpande energipolitik förut och kommer göra det igen tills dom skärper mig men jag har alltid svårt för dåliga argument om än för en god sak som i &lt;a href=&quot;https://www.dn.se/debatt/vi-samlades-till-byatraff-i-cancervarden-efter-tjernobyl/&quot; title=&quot;DN Debatt. ”Vi samlades till byaträff i cancervården efter Tjernobyl”&quot;&gt;den här DN-essän&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Väldigt tragiskt. Det är gripande att läsa om deras livsöden och hur hemsk den här sjukdomen som även jag själv har förlorat flera familjemedlemmar till.&lt;/p&gt;

&lt;p&gt;Jag har inget problem med något av det som står i artikeln. Det stämmer att kärnkraften inte är kostnadseffektiv nog eller snabb nog för att lösa problemet och att slutförvaring och andra säkerhetsproblem inte är lösta och att gen IV och bridreaktorer är ett hittepå som inte blivit verklighet. Jag uppskattar också väldigt mycket att den lyfter hur KD själva på åttiotalet var linje 3. Mitt problem är med två saker som inte står men som borde stå:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Flera miljoner människor har redan dött i klimatkatastrofen. Alltså redan. Bara inräknat hittills. Mångdubbelt fler om vi inte fixar det.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Den solklart vanligaste och farligaste cancerogenen i vår omgivning är bilavgaser (både från röret och från vad som rivs upp av däcken). &lt;strong&gt;Det är ungefär &lt;a href=&quot;https://www.ivl.se/english/ivl/press/press-releases/2022-12-02-air-pollution-is-estimated-to-cause-6700-premature-deaths-in-sweden-each-year.html&quot; title=&quot;Air pollution is estimated to cause 6,700 premature deaths in Sweden each year - IVL.se&quot;&gt;sjutusen svenskar&lt;/a&gt; som dör i förtid varje år på grund av luftföroreningar&lt;/strong&gt;—hundratusentals per generation—och ungefär en fjärdedel eller femtedel av det är då mer direkt kopplade till trafiken.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Jag har sett uppskattningar att det är ett fyrsiffrigt antal (kanske fyra tusen till sex tusen) som dödas av Tjernobylkatastrofens genom åren, alltså sammanlagt över dom drabbande länderna inklusive här. Greenpeace har föreslagit att det kan vara uppemot 200000 snarare, sedan 1986. Det är med andra ord vad hur många av oss som då under varenda generation &lt;em&gt;bara medräknat i det här jäkla “landet”&lt;/em&gt; som stryker med av avgaserna&lt;small&gt; (och då alla krockar och olyckor är inte ens medräknade, och inte bilarnas bidrag till klimatkatastrofen heller, som KD är direkt ansvariga för med deras bensinpopulistiska hets mot reduktionsplikten)&lt;/small&gt;.
Det innebär att om vi bara räknar Sverige så är bilarna som en hela-världens-tjernobylkatastrof om året, och om vi räknar in hela världen på bilsidan också så blir det snarare som sexton tjernobylkatastrofer i veckan som dör i förtid av luftföroreningar (varav en fjärdedel till hälften av det är trafiken så 4—8, därför skrev jag “fem” i rubriken idag).&lt;/p&gt;

&lt;p&gt;Jag vet att tu quoque är otroligt tradigt à la “hur kan du klaga på bullernivån när det finns barn som svälter” som till sist blir ett trolleyproblemhelvete där “jag kan inte rädda livet på er tusen personer där borta därför att det står ett-tusen-och-en personer åt andra hållet så sorry ha det så kul i himlen”. Jag vet det. Och jag &lt;em&gt;tycker&lt;/em&gt; det är viktigt och bra att kärnkraften kritiseras och jag uppskattar känslan och värderingen bakom artikeln.&lt;/p&gt;

&lt;p&gt;Men jag är också samtidigt så frustrerad över att vi hela tiden ska behöva &lt;a href=&quot;https://sv.wiktionary.org/wiki/sila_mygg_och_svälja_kameler&quot; title=&quot;sila mygg och svälja kameler - Wiktionary&quot;&gt;svälja den mycket större kamelen&lt;/a&gt; som heter bilavgaser och när vi då lyfter en okänd och möjlig och kanske och eventuellt litegranna överdödlighet så kommer avskummen i KD kunna argumentera mot oss hur lätt som helst och distrahera från kärnkraftens egentliga problem. &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Ones_Who_Walk_Away_from_Omelas&quot; title=&quot;The Ones Who Walk Away from Omelas - Wikipedia&quot;&gt;Jag tycker inte att en enda människa ska dödas&lt;/a&gt;. Men &lt;a href=&quot;https://idiomdrottning.org/tragedy-vs-statistics&quot; title=&quot;Tragedy vs Statistics&quot;&gt;än mindre ska hundratusentals det&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Sun, 23 Nov 2025 21:37:27 +0100</pubDate>
        <link>https://idiomdrottning.org/automobyl</link>
        <guid isPermaLink="true">https://idiomdrottning.org/automobyl</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>KD vill skapa ett helvete på jorden</title>
        <description>

&lt;blockquote&gt;
  &lt;p&gt;Kristdemokraterna vill inte längre ha några separata svenska klimatmål.&lt;/p&gt;

  &lt;p&gt;―Klimatpolitiken hanteras bäst globalt och Sverige ligger väldigt långt före många andra länder. Att vi fortsätter att späka oss ser inte vi som en framkomlig väg, säger landsbygdsminister Peter Kullgren (KD) till TT.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Inte för att vi borde lyssna på KD ens en sekund efter att dom låg bakom att Sveriges utsläpp ökade (när dom hade sagt att “svenskar inte okynneskör”) men vi ligger långt efter många många fler länder än vi ligger före. Sverige är värre än ⅚ av världens länder!!!!&lt;/p&gt;

&lt;p&gt;Kullgren och dom andra statsråden tillhör också den rikaste procenten som släpper ut &lt;a href=&quot;https://oxfam.se/nyheter/de-rikaste-fordrojer-klimatomstallningen-och-slapper-ut-mer-pa-1-ar-an-en-medelsvensk-gor-pa-30-ar/&quot; title=&quot;De rikaste fördröjer klimatomställningen och släpper ut mer på 1 år än en medelsvensk gör på 30 år - Oxfam Sverige&quot;&gt;tio gånger så mycket&lt;/a&gt; som den fattigaste hälften av svenskarna gör sammanlagt (och det är också pga den politiken som dom driver som det är så). Så ja fram med späket säger jag bara! “Qu’ils mangent de la brioche” nej fy!&lt;/p&gt;

&lt;p&gt;“Vi ska inte göra nåt innan dom andra gör nåt” är raka vägen från
&lt;a href=&quot;https://idiomdrottning.org/discourses-of-climate-delay&quot; title=&quot;Discourses of climate delay&quot;&gt;klimatförsinkarnas handbok&lt;/a&gt; men det blir extra mycket blodsmak i
urhasplingen när det kommer från en grupp som ligger bakom mer än tio
gånger världsgenomsnittet i ett av världens mest utsläppande länder.
Stadsråden och andra i den inkomstklassen har ökat sina utsläpp med
24% procent senaste åren (och för den rikaste tiondelen av dom är det
44%) och om vi ska klara klimatmålet behöver dom minska utsläppen med
96% resp 99%. Dom släpper alltså personligen ut 20 till 100 ggr så
mycket som dom ska. Medan den fattigaste halvan av Sverige inte är i
närheten, och ligger redan nära världsgenomsnittet, och dessutom redan har minskat sina utsläpp med 31%.&lt;/p&gt;

&lt;p&gt;Inför detta faktum har då KD mage att fortsätta vädja till bensinpopulisterna trots att det är dom själva och dom andra ultrarika som förstör jorden. Och nu till och med säger att Sverige
ska bli ett svikarland, ett förrädarland som efter att ha självgratulerat sig och klappat sig själva på axeln och gett sig själva medaljer för sina utlovade klimatmål nu ska torka sig i lyktan med våra löften. Så lite tycker dom alltså att Sveriges ord och integritet är värt. Mindre än ett ruttet lingon på askhögen i deras speedrun mot inferno.&lt;/p&gt;

</description>
        <pubDate>Wed, 19 Nov 2025 18:18:45 +0100</pubDate>
        <link>https://idiomdrottning.org/kd-vill-skapa-ett-helvete-pa-jorden</link>
        <guid isPermaLink="true">https://idiomdrottning.org/kd-vill-skapa-ett-helvete-pa-jorden</guid>
        <category>texts</category>
        <category>politics</category>
      </item>
      <item>
        <title>The Cure for Slop</title>
        <description>

&lt;p&gt;I know I daydream about throwing away the internet entirely but for this one post let me pull back on that fantasy, almost all the way back, and instead just make a much more reasonable and smaller request:&lt;/p&gt;

&lt;p&gt;Give up on all “push algo” apps. Yes, all of them.&lt;/p&gt;

&lt;p&gt;You can keep all other apps if you want, including “subscription” type apps where you get stuff from the people you follow and maybe even things that they (real humans) “boost” to you. You can subscribe to a thousand people for all I care, or just friends and fam. You can stay entertained for all time watching hours and hours, any kind of screen, brightness set as high as you like, headphones on too, why not, as long as it’s stuff you actually subscribed to.&lt;/p&gt;

&lt;p&gt;What I mean by push algo apps are the ones that have a robot that “recommends” things for you to “explore” and “discover”. Stop using them entirely.&lt;/p&gt;

&lt;p&gt;For all y’all who like me are trying to get away from screen even more, that’s great, welcome here, that’s been my obsession topic for a while (and sometimes I falter and other times I can stay away), you’re great, keep going, but this one is for those who &lt;em&gt;love&lt;/em&gt; being online and actually &lt;em&gt;want&lt;/em&gt; to be on the internet all the time and who think all of us gray screen offline nerds are self-flagellatingly boring. To those I say:&lt;/p&gt;

&lt;p&gt;You can stay online. You can stay connected. You can stay hooked up to each other literally all the time if you want. (If you don’t that’s fine too.) You don’t have to read books or write poems. (If you want to, that’s cool.) You can still use phone, computer, and apps.&lt;/p&gt;

&lt;p&gt;But there’s a whole category of apps that push junk to you that I’m asking you, pleading with you, to give up.&lt;/p&gt;

&lt;p&gt;Good thing is you’ll be free from all the machine generated slop out there.&lt;/p&gt;

&lt;p&gt;There’s this related-ish issue, the network effect, that in a perfect world I’d also ask you to scrub away (corporate-owned apps like Line and WhatsApp that turn your conversations and relationships into a product) but that’s a story for another day. If you only manage to ditch the push algo apps you’ll still have made such a huge positive change for yourself and for the world.&lt;/p&gt;

&lt;h2 id=&quot;its-not-about-the-notifications&quot;&gt;It’s not about the notifications&lt;/h2&gt;

&lt;p&gt;This isn’t a notifications issue. Whether your phone is constantly bonging and beeping with the latest vid from your faves or if the pushing algo apps only are open when you reach for the phone and click on their icons to open them, that’s completely secondary. Even if you only use the apps whenever you want to, intentionally and deliberately, a lot of the same problems remain.&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Nov 2025 20:25:40 +0100</pubDate>
        <link>https://idiomdrottning.org/slop-cure</link>
        <guid isPermaLink="true">https://idiomdrottning.org/slop-cure</guid>
        <category>texts</category>
        <category>fedi</category>
      </item>
      <item>
        <title>Emacs Font Fun</title>
        <description>

&lt;p&gt;I actually love fonts!&lt;small&gt; (Which might surprise those who know that I leave my webpage set to the browser default font, but it’s &lt;em&gt;because&lt;/em&gt; I love good fonts so much that I think fonts should be a reader decision, not a server decision.)&lt;/small&gt; When my desktop went headless after having to move to a way smaller apartment and my Emacs had to live in SSH only, I was sad because I had set up all kinds of weird fonts in Emacs and functions to switch the entire Emacs over along with “only switch this particular buffer over” variants. E.g.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defun to-june ()
  (interactive)
  (set-frame-font &quot;Junicode-32&quot;))

(defun to-june-b ()
   (interactive)
   (setq buffer-face-mode-face &apos;(:family &quot;Junicode&quot; :height 320))
   (buffer-face-mode))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Along with this to make a changed buffer go back to the frame-wide font:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defun unbufface ()
  (interactive)
  (buffer-face-mode -1))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now I have all those fun fonts working again on the Android version of Emacs! ♥︎♥︎♥︎&lt;/p&gt;

&lt;p&gt;Hence the huge sizes. I was on 12 for most non-Junicode fonts with a -16 “big” option, while Junicode with its lower x-heights I had at 14 pts. But on “Moria”, I use 28 as the “small” size, 34 as the big size and Junicode gets to be 32.&lt;/p&gt;

&lt;p&gt;My default font for coding and general emacsing around was (CW non-free) Futura while I wrote most prose texts with Junicode. Coding in proportional?! A geometric sans with a super ambiguous character set for I1O0? Well, it works great for Lisp for the most part and I had it set up so I could super easily toggle out from it back into Deja Vu Mono, or Fira Code these days.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(add-to-list &apos;default-frame-alist &apos;(font . &quot;Futura LT-28&quot;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I set this all of this up pretty soon before having to switch away from it so I only got to enjoy it for a few months so I’m grateful that I have it back albeit not on my big 21″ 4:3 screen. It’s on a more cozy and puny lantern-lit 7″ screen. Last piece of the puzzle is that I’m gonna go find a retro-ish typewritery font. Old Timey Code maybe. I was on “Bohemian Typewriter” but I couldn’t get that to work on since the &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/emacs/Android-Fonts.html&quot; title=&quot;Android Fonts (GNU Emacs Manual)&quot;&gt;Android version of Emacs don’t support OTF&lt;/a&gt;. And good riddance since the latin-1 coverage was so bad, but also not good riddance since the alternatives I’ve found so far are more consistenly x-spaced instead of nostalgically jittering around like an X-File on uppers.&lt;/p&gt;

&lt;p&gt;I really like switching fonts with the same text open. It helps me get fresh eyes on the same text and see different problems or things I can write in a more beautiful or clear way.&lt;/p&gt;

</description>
        <pubDate>Sat, 15 Nov 2025 16:59:50 +0100</pubDate>
        <link>https://idiomdrottning.org/emacs-font-fun</link>
        <guid isPermaLink="true">https://idiomdrottning.org/emacs-font-fun</guid>
        <category>texts</category>
        <category>programs</category>
        <category>aesthetics</category>
      </item>
      <item>
        <title>Boredom and existentialism</title>
        <description>

&lt;p&gt;I heard fourth hand with citations long forgotten that too much boredom can be dangerous, cause depression etc&lt;small&gt; (and some sprawlbrained people like me are extra sensitive to that)&lt;/small&gt; but too little boredom is also unhealthy and is much more common.&lt;/p&gt;

&lt;p&gt;So I’ve started practicing boredom a bit more. When I first &lt;a href=&quot;/dumbphone-experience&quot; title=&quot;The Dumbphone Experience&quot;&gt;started dumbphone&lt;/a&gt; I had a long-running, then–still-going meditation practice, and while at first I was listening to radio and music on the dumbphone, the headphone jack quickly broke leaving me bored when walking around which was horrible at first, then nice and I got used to walking without &lt;a href=&quot;/headphones&quot; title=&quot;My headphones, they save my life&quot;&gt;the headphone soma&lt;/a&gt;, then it led to me just walking less until I figured out how to hook up an old 2DS game console to play podcasts and gradually I got bored less often and when the contagion first hit my meditation practice also ended and then two years into that I got really sick.&lt;/p&gt;

&lt;p&gt;And then two years after that, two years ago now, I got re-obsessed with the whole phone-hating thing, I’m hyperfixated on it, all that I eat and sleep and breathe is hatred of smartphones and of the modern web, and I am gradually getting into retro aesthetics even when it’s &lt;a href=&quot;/antique-phone-experience&quot; title=&quot;The Antique Phone Experience&quot;&gt;mostly larping&lt;/a&gt; and the for-show component is at least as important as the for-real part of it.&lt;/p&gt;

&lt;p&gt;I got away from glowyglowy screens in favor of e-ink and RLCD and aural interfaces (radio and podcasts) and &lt;a href=&quot;/books-vs-internet&quot; title=&quot;Books vs Internet&quot;&gt;paper books&lt;/a&gt; both for writing and reading. Thinking all of that was my proverbial nicotine patch away from constant online and that actually facing the horrible silence would be the next step. And, it eventually was. It took me a while to get there but I’m dipping my toe in it now.&lt;/p&gt;

&lt;p&gt;Not all the time and I’m not forcing myself too much. It’s more like (figuratively speaking) exercising, nudging myself a liiittle bit and then it feels nice. Maybe I’ll have headphones off on the way there and put them on on the way home or vice versa.&lt;/p&gt;

&lt;p&gt;Being bored here in Stockholm&lt;small&gt; (where I’ve lived for almost twenty years)&lt;/small&gt; feels like traveling. That’s a missed reference these days because these days traveling is the same as home. Your “For You”–page looks the same away as it does at home. But for me, putting away the book and headphones evoked a sense memory of travel, of more fully noticing the air, lamps, cobblestones, trees, trash fluttering in the wind, rain on the window.&lt;/p&gt;

&lt;p&gt;Ironic given that Stockholm, specifically, I first started visiting only &lt;em&gt;after&lt;/em&gt; I’ve gotten hooked on headphones. I’d always put on the &lt;em&gt;Way Beyond Blue&lt;/em&gt; album on the repeat-all mode when I was here so if I want to evoke a feeling of traveling to Stockholm specifically, embracing the headphone life to the tunes of sweet Catatonia would be the ticket for that. But that’s not what I meant. Just that sitting at the deli counter with headphones off made me more aware of the world is all.&lt;/p&gt;

&lt;p&gt;Being bored is scary, and for good reason: the brain wants to have fun, fun things makes it easier to learn and be happy and connect. But physical exercise is similarly scary-for-a-good-reason; instinctively I don’t want to give up precious, hard-won  energy on unnecessary, unplayful, &lt;a href=&quot;/two-wolves&quot; title=&quot;The Two Wolves&quot;&gt;duty-bound&lt;/a&gt; movement. Conclusion: right now, as in the past few weeks, I’ve finally re-discovered the joys of boredom, along with the pains and dreads of it and how holding on through that pain is sometimes rewarded with how alive everything is and other times is just why-am-I-even-doing-this?&lt;/p&gt;

&lt;p&gt;The existential dilemma of boredom is &lt;a href=&quot;https://www.youtube.com/watch?v=SxPZF_LWJaU&quot; title=&quot;You&apos;ll Have Time - YouTube&quot;&gt;wasting time vs tasting time&lt;/a&gt;. At the end of all things, what will deserve the most regret? The mystic, the ascetic might think “Dang it! I should’ve embraced my curiosity, my desire to explore, I should’ve scrolled down for more videos, I should’ve let my brain cyber up and go discover and get recommended more and more and more stuff online.” And the screen junkie might think “Why did I waste it on this compulsion, this digital sugar, this junk, why did I never ever look up from this pervasive trash can I had my head stuck in all this time?”&lt;/p&gt;

&lt;p&gt;Knowing whether boredom is good or bad becomes a pretty important question. I really wish I had the answer to that because that’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacob_wrestling_with_the_angel&quot; title=&quot;Jacob wrestling with the angel - Wikipedia&quot;&gt;an angel&lt;/a&gt; I’m in a particularly nasty no-holds-barred cage fight with.&lt;/p&gt;

&lt;p&gt;Until I figure out an answer for this, here’s a temporary answer, a cop-out, a Gordian solulu sidestepping that question:&lt;/p&gt;

&lt;p&gt;Let’s say for the sake of argument that the experience-rich life is the better option over the staring-at-the-wall shikantaza yawnfest. Buddha don’t at me because that’s not where I’m gonna land, this is gonna be rhetorics, it’s the null hypo that we’re postulating and putting a pin in.&lt;small&gt; Like in a sudoku, we’re just saying &lt;em&gt;if&lt;/em&gt; this is an eight, would that cause contradictions elsewere? We’re not painting in the eight with ink just yet.&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Now, the next question becomes what &lt;em&gt;kind&lt;/em&gt; of experiences we’d want to fill that experience-rich life with. &lt;a href=&quot;/gtd-basics&quot; title=&quot;GTD basics&quot;&gt;Actually doing stuff?&lt;/a&gt; Helping other people? Doing meaningful things? Not drowning in procrastinating and self-hatred and compulsive behavior? Okay, so step two then is thinking “we postulated how awesome and truly great the TikTok-drowned life is compared to the paint-dry life of &lt;a href=&quot;/sitting&quot; title=&quot;Sitting&quot;&gt;just sitting&lt;/a&gt;. But it’s only the &lt;em&gt;second&lt;/em&gt; best compared to all the stuff I wish I could be doing &lt;em&gt;instead&lt;/em&gt;.” With me so far?&lt;/p&gt;

&lt;p&gt;Then step there becomes: okay, okay, what if &lt;em&gt;some&lt;/em&gt; amount of deliberate boredom is what’s gonna help you get away from that second best thing into the best thing? If the anti-boredom compulsion is what’s exacerbating procrastination and leaving us unable to get going on the things that really would matter to us, and overcoming the fear of boredom is what’s gonna unlock creativity, problem-solving, even regain a tiny bit of executive function? If that is true—and I don’t have the answer to that yet—then boredom is not wasting it. If that is true, boredom becomes win-win:&lt;/p&gt;

&lt;p&gt;In the one branch of the dilemma where boredom is awesome and boredom means savoring life-as-it-is, here and now, boredom is already the winning ticket, and in the opposing branch of the dilemma where fun and busyness and jamjamjam is the ideal, boredom is still a stepping stone right into the best &lt;em&gt;version&lt;/em&gt; of that richer life that helps us sift signal from noise.&lt;/p&gt;

&lt;p&gt;Please don’t conflate that with that myth of how supposedly Warren Buffett at one point said “make a list of your 25 most important things, now circle your five most important ones. Done? Put the remaining twenty on an absolutely-do-not-do list.” That is fake, that doesn’t work, I’ve tried it, he never said that, I wouldn’t wanna emulate him anyway. Here, I’m not saying “step away from the 20 other appealing things in order to somehow magically receive focus and motivation and energy for the 5 best things”; instead, I’m saying that perhaps stepping &lt;em&gt;towards&lt;/em&gt; some amount of boredom might give you the tools to better work with the more important things.&lt;/p&gt;

&lt;p&gt;To what extent all this philosophy applies more to mainstream-headed folks and is a complete mismatch to sprawlbrains like us, that’s an unsolved question for me. It could be that this boring structure was made specifically for us and is vital lifeblood for us scatterheads whereas the plainjanes don’t need it as much, or it could be the other way around where I’m barking up the wrong tree altogether and I should try to find a more fun and entertaining toolbox to get through the day. I’m gonna keep exploring this path for a little while longer. It’s early days yet for me. And heaven knows I’m grasping at straws at this point. 😭&lt;/p&gt;

</description>
        <pubDate>Fri, 14 Nov 2025 12:26:55 +0100</pubDate>
        <link>https://idiomdrottning.org/boredom</link>
        <guid isPermaLink="true">https://idiomdrottning.org/boredom</guid>
        <category>texts</category>
        <category>psychology</category>
        <category>gtd</category>
      </item>
      <item>
        <title>Twenty Percent Cooler</title>
        <description>

&lt;p&gt;Have you ever felt half-full, half-hungry? Some folks for whom hunger is a more binary switch might not relate to that, but then perhaps they can think of something else, like how much you groan when you see that the elevator’s out or how different things can make you differently happy.&lt;/p&gt;

&lt;p&gt;From there, it’s not that far of a step to also want to talk of three-fourths hungry or to, over time and with some self-awareness and reflection&lt;small&gt; (or I guess it could just as likely be just wrong-headed, hubristic misguessing)&lt;/small&gt; remember and rank all kinds of moods and experiences with some more granularity and express them on a scale of one to a hundred.&lt;/p&gt;

&lt;p&gt;Many years ago someone commented that they never knew where people like me got our percentages from. When I say things “I’m 90% sure that…” they’re like whuh how could you even measure that and I didn’t have a good answer for them. I felt caught, I realized that I had only been pulling the numbers out of my hat and I felt like a phony. The topic weren’t the kinds of things where you actually do have percentages like if you poll a bunch of people and do statistics to see what percentage of people eat plants or whatever, the topic was something along the line of “I’m 75% sure”. Of discussing &lt;a href=&quot;/sleeping-beauty&quot; title=&quot;Running the Sleeping Beauty Experiment&quot;&gt;credence&lt;/a&gt; in relative terms rather than absolute terms. Their comment only left me speechless for a moment and the next day my mouth was as full of percent signs and scales as it ever was&lt;small&gt; (I feel that people who tell me I’ve got “black-and-white thinking” don’t really know me at all)&lt;/small&gt;. But only today I figured out a way to actually answer their question; to my own satisfaction at least. I don’t know about them because I don’t remember who it was that said that. Someone on IRC, I think. But it’s like saying you’re half-hungry, except taken to a ridiculous level. That’s my answer.&lt;/p&gt;

</description>
        <pubDate>Fri, 14 Nov 2025 12:25:50 +0100</pubDate>
        <link>https://idiomdrottning.org/twenty-percent-cooler</link>
        <guid isPermaLink="true">https://idiomdrottning.org/twenty-percent-cooler</guid>
        <category>texts</category>
        <category>aesthetics</category>
      </item>
  </channel>
</rss>

