Caoimhe

Subtags

In my endless quest to turn the code that generates this website into an ever-more indecipherable mess I have added a hierarchy to how the site defines tags. For instance the tag for my cat Easóg is now a child tag of the cats tag. As such any post tagged with Easóg will now appear under the pages for cats even if I don’t tag the post as cats as well, and the cats tag is a child of the new animals tag so all posts tagged Easóg or cats will also show up under there too. Each tag page also shows its parent tag and any child tags. The site’s RSS feeds will provide the full tag ancestry for each post, so if you are, for example, blacklisting a tag in your feed reader then it should catch any posts with that tag’s child tags applied to it as well.

Consequently I’ve gone back through old posts and trimmed a lot of tags that are now redundant, which should reduce tag clutter under posts, and added tags to other posts where I felt they would be appropriate. I might rearrange how they’re organised a bit more but I think the system in general is working okay now.

The full set of tags can be seen on the tags page.


Caoimhe

Jailbreaking my partner’s 2018 Kindle Paperwhite 4

After asking for recommendations for a new e-reader I did some searching and realise that the Kindle may have been more repairable than I actually thought. I found a guide for how to open it up and replace the screen and found an ad online for someone selling a reader of the same model as mine with a working display but damaged touch input. I thought that perhaps I could separate the display and touch surface of the screen and mix and match parts to keep my one going. This ran into two problems: The first is that the different components of the screen seem to be thoroughly glued together, so if I wanted to replace the broken display I would have get a fully functioning replacement screen and the one with the working display but broken touch input would not be suitable, and the second and larger problem is that I fucked up while trying to remove the screen and ripped a ribbon cable connector off of the board, breaking it in a way that would be very, very difficulty to repair at home unless I got much, much better at precise soldering than I currently am.

But then I remembered that my girlfriend had their own old Kindle lying around unused and I asked could I simply take that and load my own books onto it instead, which they kindly acquiesced to. It’s a Paperwhite 4, as oppossed to my Paperwhite 1, and there is a noticably improvement in screen quality. I am not going to be writing up another jailbreaking guide as this time I was able to find an existing straightforward one that worked for me on first try thanks to the Kindle Modding Wiki’s jailbreaking wizard, which pointed me towards and then guided me through the Winter Break 2 jailbreaking process.

I’d also like to mention that as well as the Kobo and XTEink e-readers that I mentioned in my last post, someone also pointed me towards Diptyx which also looks up my alley. But the best and least wasteful tool to use it the one that you already have, so I will stick with my girlfriend’s Kindle until I accidentally break it as well, which hopefully won’t be for a long time.


Caoimhe

Breaking my 2012 Kindle Paperwhite

My post on jailbreaking my 2012 Kindle Paperwhite is by far the most visited and commented on part of my website. I have gotten a lot of comments from people thanking me for helping them keep their old reader going. Unfortunately there are limits to making things last and sometimes one is just a bit too careless.

An e-reader is particularly useful for travelling, allowing one to bring myriad books with them in a smaller, lighter, package than even a single novel would be. While coming back from my trip to Warsaw I discovered that I had accidentally smashed the screen of my Kindle. I think I may have thoughtlessly sat on my bundled-up coat while it was still in the pocket. Now all but the bottom-left corner is stuck displaying the cover of Ursula Le Guin’s The Wind’s Twelve Quarters.

My Kindle with a busted screen.
Book machine broke.

I doubt that it’s repairable so I am now on the lookout for a new e-paper reader and I’d be happy to take recommendations. Qualities I would be looking for are EPUB support, responsiveness, good battery life, USB-C charging and data transfer, brightness adjustment, easy dictionary lookup, and ruggedness. A lot of those are standard features, but I figured it was worth stating them all explicitly. I have generally liked KO Reader when using it on my Kindle, so support for that particular reading software would be a big plus as well and I don’t care about it having internet access.

A few people have already recommended me Kobo as a good standard and the colour displays interest me if they’re have the same quality and responsiveness as the more typical black and white e-paper displays, but I also recall Laura Michet posting about XTEink readers and I do find the idea of the tiny little reader I can easily carry in pocket all the time intriguing as well.


Caoimhe

Technological Nostalgia

I was in Warsaw this past week and hit up a few museums, particularly ones centred around technology. The gasworks museum was an interesting look into industrial and municipal processes and while I ducked out of the national technology museum early because I was tired and it seemed underwhelming, my partner stayed on and told me that it was much more expansive and interesting than it first looked.

We also hit up the Interaktywne Muzeum Flipperów, a.k.a. Pinball Station. It’s a fun place. Lots of pinball machines and a good few video arcade machines as well in an old railway building. All machines are set to freeplay so once the entrance fee is paid you’re covered for all the games and there’s a bar and quieter seating areas to retreat to as well if you need to get away from the noise. The noise was surprisingly not too bad, though! Everything was, mercifully, set to silent when in attract mode, which I have never experienced in an arcade before and was a welcome reprieve from the usual cacophony. It wasn’t too busy when we were there, though, and I imagine it must get louder in the evenings and on weekends.

I am not too familiar with pinball, having played more computer game pinball machines than real ones, and am also not very good at it (another reason the freeplay was very nice) and there were a few interesting machines that had features I hadn’t seen on a table before. There was an NBA basketball-themed twin table with a two-player head to head mode where the game was on a timer, and a Godzilla machine where at one point my ball got grabbed by a little magnetic roller and swung around. The way pinball machines are constructed is really interesting and I highly recommend this Technology Connections video on the subject.

What really excited me, though, was getting to play Asteroids on a real machine. I’ve played various clones and ports of Asteroids before, but this is the first time I’ve gotten to experience it will a real vector display and it is a gorgeous little thing. It is one thing to see a line drawn in pixels on a modern LCD display, or even a conventional CRT, but quite another to see the clean, smooth, glowing lines drawn by an electron beam, the intensity of the beam making your bullets really glow as the phosphor screen halos around them. It’s a shame that vector displays have fallen by the wayside so completely. I wonder if they technology had been iterated on and developed further what could have been done with them. The lines drawn on a vector display are not the idea of a line abstracted and approximated into a grid of pixels, but an actual line drawn by a beam of light being physically traced across the glass. The quality of that light and that shape is so much different compared to raster displays.

Similarly the neon museum showcased a lighting technology that, while it’s much less of a dying one, is quite a retro throwback at this point, largely superceded by cheaper light-up displays and, more recently, OLED signage. I actually quite dislike OLED advertising signs; they’re far too bright when it’s dark out and a few particularly large and bright panels near home have really been nasty to walk past at night when I’m dealing with migraines. Neon signs, while they are also a form of garish advertising, at least tend to be less blinding (though some of them have quite a loud, unpleasant buzz when one is right next to them on the museum floor) and have more intentional and considered artistry behind them. They are less ephemeral than whatever ad is being displayed on a video screen; they become part of the landscape. A good part of the story being told in the neon museum is that of “neonisation” being pursued in Warsaw as a deliberate act of modernisation of the city, setting a new identity for the urban space. And as it happened under the communist government, the neon signs were not strictly advertising for businesses, with landmarks, libraries and civic buildings getting lit up. And again, the light from a neon sign is just a bit different from that of other lit signs, even LED ones designed to immitate the aesthetics of neon signs, especially the true neon red signs where the glow is visibly coming from the gas within in the tube rather than phosphors on the glass.

Pinball, vector displays, big neon signs. There are reasons these technologies have fallen by the wayside and become much more niche. They are specialised, constrained. Everything they can do can be done by cheaper, more general purpose technologies that can also fill many other roles. But in their specialisation, their deliberate construction and especially in their physicality they have a beautiful elegance that is easy to love.


Caoimhe

What I’m reading vol. ⅩⅥ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Today’s musical accompaniment will be relevant further down the post.


Games

Interview with Satoshi Yokokawa — Ashley Rojas

Cool interview with the enemy designer of Sonic 3 & Knuckles. I’ve always thought that the badniks in Sonic 3 had a more industrial look to them compared to the enemies from the previous games and I’ve always really liked that about it and it pleases me to hear the intent behind that being articulated. I also love Mecha Sonic’s design and it’s really lovely to hear him appreciate the fan art and reinterpretations of his designs. Also look at this short fan animation, it’s really cool.

Given that setting, since the Death Egg had suffered enormous damage from crashing due to Sonic's attack in "Sonic 2," I thought the mecha production facilities inside the fortress must also have been heavily damaged, making it difficult to carry out production as before.

From there, I arrived at the idea that Dr. Eggman, needing a fighting force to oppose Sonic under conditions where the production facilities weren't functioning properly, would gather up usable parts and hastily assemble machines to deal with the situation.


mantle.nes breakdown blog part 1 — Melon

First of (so far) two posts where Melon breaks down the development of their NES recreation of the “original game” in Deltarune chapter 3.

I had previous experience working on NES games already - at least, I had tinkered a little bit and had enjoyed enormously Pikuma’s course on beginning-to-end gamedev with 6502 assembly on the NES a few years back, so I felt confident I could pull it off! Even if the journey seemed daunting, I just had to go one step at a time…


The Web

Self-censorship practices as anti-shibboleth — Laura Michet

Oh do I hate algospeak. I stopped talking to a therapist once in part because I lost a massive amount of respect for him for using the word “unalive”.

In my experience, self-censoring adult terminology on that site in particular is a great sign that you're dealing with someone so incurious, with such a limited experience of online conversation, that they don't understand where they are, or who they're dealing with, or who's accountable for maintaining the peace in the community where they're speaking. I do not want to read the things these people write, and I do not want to talk to them. I'd rather not be the person who teaches them to be curious.


Hulagirl.txt — Deli

An investigation into the origin of a classic, old web GIF.

Perhaps enough time has passed that she is merely an inconsequential sighting to the average webuser, a rarity of a signal overlooked in the noise. There was once a time that she danced her way across webpages all over geocities and brought a small injection of joy and energy to whatever page she graced. Early on, she was a known quantity but the passage of time and memory made her mysterious. Stayed mysterious for a long while since, honestly, who really cares about the provenance of a free-to-use gif that is barely 5kB?


I Found Evidence Of My House Spinning — Blackle Mori

Some fiction for once, recommended by Laura Michet again. Interesting use of HTML as a medium.

This is the story of the most inexplicable thing to ever happen to me. It still keeps me up at night, just rolling it around in my head as I fail to make it make sense. This is the story of how I took a video from inside a recurring dream.


Animating Bad Apple with no JS, no CSS, & minimal HTML — Vivian

Explainer of Vivan’s very cute little Bad Apple animation using a technique similar to Geocities HTML Chat.

I wanted to show the Bad Apple animation without JS or CSS, with an impressively minimal set of HTML tags, by abusing slow chunked response, forcing the browser to load the page piece-by-piece. That's happening now (unless you're reading some archive) but how can we use it for animation?


The Crawler Zoo

Less of an article and more of a cool website: The Crawler Zoo monitors and categorises bots that scrape the site. Visitors can even watch bots wander an infinitely generated maze of junk pages.

Every request that reaches the site is examined at the gate. Bots are identified, named, drawn and filed into an enclosure; people are waved through and counted only as an anonymous daily total. Everything you see is live: the figures update as the bots arrive.


Irish

What to use: the “w” or “v” difference in dialects

Improving my Irish is something I’ve wanted to do for a long time but found difficult to sustain long-term, but I do still have occasional bursts of enthusiasm. In this case I found this article, and especially the videos linked within, a good crash course in improving my understanding of Irish phonetics.

When learners come across this difference in pronunciation, they are usually looking at words like “bhfuil” (i.e. “an bhfuil”) and “mháthair” (i.e. “mo mháthair”). How you pronounce it largely depends on which dialect you choose.


The tale behind the Irish translation of Dracula is something to really get your teeth into — Darach Ó Séaghdha

I’ve written about the Irish translation of Dracula before, so of course I was interested to learn a tiny bit more about the history of the book.

Should the Free State find exciting new literary voices working as Gaeilge and bring them to a wider audience, or should they focus on translating bestselling titles that readers had already heard of?

Finance Minister Ernest Blythe took the latter view. In particular, Blythe was very interested to discover that the Berne Convention for the Protection of Literary and Artistic Works had a clause at the time regarding translation rights.


Politics

Europe’s centrists are finally paying the price of their extremism — Yanis Varoufakis

Valve Software’s former in-house hat economist weighs in on the consequences of “centrism”.

Everywhere, it is the same mechanism: Parties that called themselves sensible, pragmatic, and centrist have pursued one of the most doctrinaire economic programmes in European history – and pursued it with a rigidity, an intolerance of dissent, and a contempt for democratic contestation that the actual political extremes of the 20th century would have recognised as their own method, even if they had rejected the content.


Caoimhe

What I’m reading vol. ⅩⅤ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

I find myself feeling rather inarticulate this afternoon as I sit down to write this, so my comments on each piece shall be brief.


Games

Sandustry is the first factory simulation game I've played that gets heaps right — Edwin Evans-Thirlwell

Sandustry is probably the first factory game I've played that really communicates the physicality of industrial waste, the appalling magnificence of it, for all the dinkiness of its 2D artstyle. It's the only factory game that really makes me think of post-industrial landscapes, like those colossal spoil piles above Aberllefenni. It also engineers a weird exuberance inside the concept of 'byproduct'.

It’s been added to my Steam wishlist.


Technology

CD-ROM Journal - A Trip to 90s Kansai: Exploring the XD FirstClass Network BBS — Misty De Méo

I gestured briefly at the PASSTHRU folder earlier, but I really want to dig deeper into that because this is something very cool. I said before that when you're connecting to a BBS like this, you're connecting to one system rather than the internet as a whole. This is a bit of an exception to that. FirstClass had support for what they called "relays", which allowed BBSs running the same software to talk to each other and exchange messages. It wasn't a realtime connection; this still isn't the internet. It's a little bit more like snail mail. The servers would sync with each other every day, or once every few days, fetching new replies in the conferences they were sharing and transmitting any replies that had been made from a different server. It's quite a bit more "slow internet" than we'd probably tolerate today, but in the pre-internet era the idea you could be talking to these other communities at all would have felt revolutionary.

A really interesting look at early digital communication.


La Fin: I've finished remaking all the websites in H2O: Just Add Water — Alyx Wijers

A little over a year ago, I published a post (“I wasted $410 recreating a fake website that shows up for 10 seconds of a TV show almost no one remembers “) about having re-created a website that showed up for a few seconds in an episode “H2O: Just Add Water”. In the title I described it as “…a TV show almost no one remembers”, which was evidently incorrect, because after posting on Mastodon I discovered that it seemed to be widely known amongst German audiences.

There’s one more fake website that appears in H2O: Just Add Water: greekmythicalcreatures.com

This is just very cute.


An interactive introduction to the terrific experience of rendering Arabic typography and its technical debt — Saleh

To understand why every machine since Gutenberg has wrestled this script and mostly lost, you need one structural fact: Arabic is cursive always. There is no print-versus-handwriting distinction, no block letters. The letters connect in stone inscriptions, in manuscripts, in metal, on screens. Each letter therefore changes shape depending on its neighbours (an isolated form, an initial, a medial, a final), and six letters refuse to connect forward at all, which breaks words into joined clusters and gives the script its rhythm. The shapes are not costumes over some underlying "real" letter. The positional variation is the letter.

Really good read on the history of digital typography for Arabic. Seen from Natalie Weizenbaum sharing it. Speaking of…


I really do think you should learn to use the Linux command line. — Bruno Dias & Natalie Weizenbaum

I really do think you should learn to use the Linux (or Mac, I suppose) command line if you can find the time at all. It is, genuinely, a dramatically more empowering way to use your computer than the alternative, and it will enable to think about your computer as a tool in ways that are completely different.

Cocosigning this post and Weizenbaum also gives a nice quick primer of navigating the command line.


Why do projects reject AI contributions? — Darío Samo

If we were to go by actual lines of code, generated projects easily contain over tens to hundreds of times more documentation and code than human-made ones do. This is intentional by design: the AI companies do not want these projects to be maintainable by anything but their tooling, so you'll have no choice but to keep paying them to work on it.

A good Reddit post from an accomplished game modder on the problems of maintaining or working with generated codebases.


Politics

The End of Trans Rights in the UK Is the Start of Democratic Collapse — Toby Buckle

Unlike, say, Brexit which had rights implications but could point to democratic inputs (however flawed), nothing in the story I told above was backed by any democratic input of any kind. In fact, all of it was elites acting in explicit defiance of the democratic inputs they did receive.

Buckle hammers home how utterly undemocratic the movement against trans rights in the UK is.


The Real Class Politics Behind Ireland’s Fuel Protests — Conor McCabe

The oft-used phrase, squeezed middle, may indeed apply here – not in the mainstream media meaning of cost-of-living and prices, but rather in terms of position-of-production and power. There is of course a qualitative difference between a pushbike and heavy goods vehicle, but when seen in terms of mode and relations of production that difference somewhat fades.

A Marxist analysis of the class position of the Irish fuel protests from earlier in the year.


The End of the 100 Year Government — Simon McGarr

Protection of the property-owning class has been the water that Irish politics swims through, invisible to its fishy participants but explaining nearly everything. It is why our housing crisis exists and why it cannot, apparently, be solved. Solving it would mean a political evolution on a scale of growing legs and lungs and actually climbing out of that water.

An essay on the class priorities of the Irish governments of the last century.


History

The Workers and the Tombs of the Ancient Dead — Margaret Killjoy

Last week I researched the first labor strike in known history. The tomb builders living in a town called Deir el-Medina in Egypt went on strike on November 14th, 1152 BCE. Three thousand, one hundred, and seventy-eight years ago. And their strike looked an awful lot like ours today. They set down their tools and staged sit-ins, they blocked roads, they marched, they engaged in workplace sabotage. They wrote letters to the authorities requesting a redress of grievances. They stole from work. They did everything that we do today.

And a meditation on labour struggle throughout history.


The Empresa de China & the Hapsburg Bid for World Supremacy — Nathan Goldwag

The Jesuits proposed an invasion force to be spearheaded by 10,000 Spanish and Portuguese troops, augmented by 6,000 Filipino auxiliaries and between 5,000-7,000 Japanese Christian mercenaries, leading a two-pronged invasion through Guangdong and Fujian.

A part of colonial history that I had no idea of.


What programme do people use for writing prose in plain text? I usually just write in Markdown format and at the moment usually in Sublime Text, but I was wondering if anyone had other recommendations for writing prose specifically? Needs to be something offline (an actual programme, not a website) geared towards editing and saving out to plain text formats and run on Linux.


I am trying out Novel Writer.


Caoimhe

I want a non-evil version of Bump

A month ago I saw this this Tumblr post screenshotting a Twitter thread about Bump and was enthralled by both its maximalist aesthetics and how utterly evil it was. Now, before I continue I do what to emphasise: Do not install Bump. It is horrendously evil.

Do not install Bump.

The linked post gives you both a good idea of how invasive Bump is and also what is repulsive but also potentially alluring about it: It records as much as it possible can about everything you are doing through every means it has available to it as a phone app, which is quite a lot. This is, as the thread says, shared with everyone that you have linked with on Bump. That of course means it is also recorded and sent to Amo, the company that makes Bump. People often have a very defeatist attitude about privacy, that so many companies are already tracking everything you do anyway, but Amo really go above and beyond with trying to hoover up everything they can about you and with the way this app works I doubt that internal safeguards are much of a priority. A reminder before I go on: Do not install Bump.

Myself and Caoimhe³ both installed it, added each other, and then deleted our accounts after a couple of days. It was even more of an invasive nightmare than I was expecting.

  • If you do not allow access to your contacts straight away it repeatedly badger you to do so. I think it asked me five times before it reluctantly allowed me to continue without doing so.
  • It obvious asks your location permission to work. The basic point is broadcasting your location to people, but even if you grant it location permission it will display constant red warning signs on the main map screen and lock you out of features until you grant Bump permission to read your location at all times, even when the app is closed.
  • It will then also repeatedly ask you to disable power management features for Bump so that it can always keep monitoring you even when your battery is dying.
  • It has a feature to add live widget to your phone’s homescreen that constantly tracks a specific person. Like, stalking your friends at all times is kind of the selling point in the first place, but bloody fuck.
  • It doesn’t just want your raw location it is also interested in what places you hang out in and business you frequent. It locks features behind adding a certain amount of favourite locations that it can log you as being at. Each location also has public leaderboards that shows who is there most often, potentially showing where to find you even to people you never linked with in Bump.
  • In its quest to log and display everything it goes as far as to display your live battery percentage to everyone (so you can’t feign low battery as an excuse for not replying or wanting to go out).
  • Features are locked behind linking with enough people, so even if you were fine with sending all this (live, at all times) to a few people, it will push you to expand that circle.

And yet, I do see some of the appeal. The dwindling of third places gets talked about a lot and I think that something that facilitates spontaneous gatherings by being able to see when friends are nearby or in a group could have value. Back in the day this would be having a local pub where you would go without a plan in the hopes of running into people, but the cost of drinks are so goddamn expensive these days and most people do not want to be functionally alcoholic in order to have a social life any more.

Do not install Bump.

I think a non-evil version of this is possible, thought it would not be straightforward or easily. Something that provided some of this openness, at the discretion of the user, with many safeguards, that did not store any data, and was end-to-end encrypted, could actually have benefits. But it would also never, ever be profitable and would never have the backing that it would need to push it to large-scale adoption. And of course the intersection of people who are safety-focused enough to want these kinds of safeguards and people who are lax enough about privacy to want something like this in the first place is probably quite small.

The other thing about Bump is its maximalist aesthetics. It’s like a ’00s Nickelodeon children’s sitcom’s idea of what smartphones would become. A partner thought that it was aimed at young people who may not have been around for the Y2K aesthetic old web but have seen it evangelised through nostalgic lens. I do find it genuinely quite charming, especially its chat, which allows you to not just customise your textboxes in garish, clashing fashions but allows all elements to be freely moved around, rotated and zoomed, creating an utterly nightmarish form of communication that I kind of love.

Caoimhe urging me to look at her boy.

I do kind of want this as its own thing. Give me the secure, end-to-end encrypted, privacy-focused, overstimulation nightmare group chat. I would probably get bored of it relatively quickly but I feel like I would have a good time for a few days and then again every few months when I’m feeling particularly silly and whimsical.

A chat featuring various elements overlapping messily, with Nanao from Robot Alchemic Drive on top with text saying “hiiiiiii~”
Say hi to Nanao!

Do not install Bump.


Caoimhe

Sign my guestbook!

I have a guestbook page now! This is something I kept meaning to set up for a while but kept forgetting to. Seeing as I already have a comments system with Comentario I have set it up just as a mostly blank page with a comments section and some extra styling. The homepage is also displaying the latest guestbook message and a link to the page. You don’t need to make an account.

I generally do be tinkering with the site a lot without posting about most of the changes. Recently I’ve added more tags, including adding new tags to existing posts, and making custom icons for some old tags that were using emoji as icons.


Caoimhe

Fairphone repair

I’ve posted about having a Fairphone before and I also have a set of headphones from them. They are honestly not that great for how much they cost. The noise cancelling cannot handle any wind or much movement, you cannot change the default mode that they start in, and most importantly a piece of the headband snapped in two on me a couple of weeks ago. Now, I was straining it with a bad habit of pulling one ear off widely to hear sometimes, but I had expected them to be able to take that force. There is a newer revision of these headphones available now and perhaps those solve some of the problems, but I am somewhat annoyed by the fact that, like with each generation of their phones, the parts for the old and new models are not compatible. Each iteration is a total replacement, not an upgrade path.

That said, they still sell replacement parts for older models and I am very glad that I can replace one piece and not have to throw an entire set of headphones and all the electronics in the bin just because some plastic snapped.

My Fairbuds XL 2023, mostly green but with one side in black.
They are also now fashionably asymmetric as I go the replacement part in black instead of green.

My phone screen had not been in perfect shape either; scratched and cracked from being dropped too many times and with some dead zones, but mostly still usable. I wasn’t bothered to get a replacement for it on its own but with the headphones needing repair anyway I decided to pick up a new display for the phone at the same time and keep the old one as a spare. The only special tool I needed to do the swaps was a Philips #00 screwdriver and it’s all fairly straightforward. Like I said I don’t think that these are the best electronics out there, especially for the cost, but I appreciate being able to keep them going for a long time rather than having to send them to landfill.


Caoimhe

Jailbreaking my 2012 Kindle Paperwhite

Update Septmber 2026: I’ve changed the wording of a few steps based on feedback in the comments.

I usually prefer to read paper books and get them from my local library when I can, but I have an old Kindle Paperwhite that I generally load up with books to read while travelling. It saves a lot of hassle, bulk and weight compared to carrying around several paperbacks.

I had previously looked into custom Kindle firmware and found people saying that such things don’t exist, but with Amazon pulling support for old Kindles I had another look and realised that I’d missed something: There may not be fully custom firmware for Kindles, but there is jailbreaks and custom software. I took me a while to get it working, navigating various Mobile Read forum threads to piece together steps that worked and now that I have KOReader up and running (and can therefore finally read EPUB files on my Kindle) I decided to write up the exact, reproducible steps that I took to get there.

Getting device information

The first thing you need is the serial number of your Kindle to determine the exact model type and compare it to the Mobile Read wiki page on Kindle serial numbers. You can get this on Amazon’s website while logged into the account that the Kindle is registered to or from the device itself.

Confusingly, on my Kindle you must access this by ☰Menu button, selecting Settings, then pressing the ☰Menu button again (which pops up a different menu when pressed from inside the settings screen) and then selecting Device Info. The wiki page does mention this too, but I missed it at first. The device info popup also has the firmware version, which for me was 5.6.1.1, which will also be important.

In my case the serial number starts with B024. Amazon’s site describes it as “Kindle Paperwhite (5th Generation)” and the Mobile Read wiki calls it “Kindle PaperWhite WiFi”, but more importantly the nickname that is used in Mobile Read’s guides is PW (or PW1), which was needed for figuring out which jailbreak I needed.

Grabbing the software

The jailbreak method I used for my PW1 only works for firmware version 5.0→5.4.4.2, while mine was 5.6.1.1. The jailbreak can’t be installed in version 5.6, but if it was previously installed it can be patched to work again. This meant that I had to downgrade the firmware, install the jailbreak, upgrade the firmware again, and then apply the upgrade patch to fix the jailbreak. And then I also needed the software I want to actually run on the Kindle afterwards, which in my case was KOReader, a Stardict dictionary for KOReader, and Kindle Unified Application Launcher (KUAL) to allow me to launch the reader in the first place.

These can all be grabbed here:

Factory reset (do not actually do this)

To ensure that these steps worked from a blank slate I repeated them after doing a factory reset on my Kindle. As Amazon are ending support for older Kindles if you do a factory reset after the 20th of May 2026 you will not be able to re-register your old Kindle and it will be effectively bricked. I intend to keep mine on permanent aeroplane mode from now on to ensure Amazon don’t do anything else funny to mess it up.

If Amazon haven’t turned off the servers yet and you are logging into an old Kindle and you have two-factor authentication enabled then login will fail if you try to log in with just your username and password, but you can append your six-digit authentication token to the end of your password and it should work.

Update Septmber 2026: Helen in the comments has said that this process did work after a factory reset. I have not verified this. Do at your own risk.

Installation

  1. Getting ready

    1. If Amazon haven’t already turned off the servers then now is the time to download any books that you want to keep from your Amazon account onto the Kindle.
    2. Once that’s done enable aeroplane mode by navigating to ☰Menu→Settings→Aeroplane Mode.
  2. Downgrade the firmware to 5.4.4

    1. Connect the Kindle to your computer with a Micro-USB cable, it should mount the same as an external drive or memory stick. If it doesn’t and only starts charging try using different Micro-USB cables until you have one that does data transfer.
    2. Copy update_kindle_5.4.4.bin to the root directory of the Kindle.
    3. Without ejecting the Kindle or unplugging the USB cable hold down the power button of the Kindle until the charging light goes out and it unmounts from the PC. This took about twelve seconds for me.
    4. When you release the power button the Kindle should restart and begin installing the new firmware after a few seconds.
  3. Install the jailbreak

    1. Once the firmware downgrade is finished and Kindle has restarted check that the downgrade was successful by going to ☰Menu→Settings→☰Menu→Device Info and ensuring the firmware version is now 5.4.4.2.
    2. Reconnect the Kindle to your PC.
    3. Extract the contents of kindle-jailbreak-1.16.N-r19426.tar.xz. Within this is another compressed file called kindle-5.4-jailbreak.zip. Unzip that second file and move its contents into the root directory of the Kindle.
    4. Eject the Kindle from your PC and unplug the USB cable.
    5. Install the jailbreak from your Kindle by navigating ☰Menu→Settings→☰Menu→Update Your Kindle. If the option is greyed out make sure that aeroplane mode is on, reconnect your Kindle to your PC and double check that all the contents of kindle-5.4-jailbreak.zip (including Update_jb_$(cd mnt && cd us && sh jb.sh).bin) are still in the root directory of your Kindle (copy them over again if not) and try again.
    6. If the jailbreak was successful then some text saying JAILBREAK should appear at the bottom of the screen.
  4. Install KOReader and KUAL

    1. Reconnect the Kindle to your PC.
    2. Extract the contents of koreader-kindle-v####.##.zip to the root directory of the Kindle.
    3. On the Kindle create the directory /koreader/data/dict/ and extract the contents of dict-en-en.zip to it.
    4. From KUAL-v2.7.37-gfcb45b5-20250419.tar.xz extract KUAL-KDK-2.0.azw2 and copy it to /documents/ in the Kindle root directory.
  5. Upgrade back to 5.6.1.1

    1. Copy update_kindle_5.6.1.1.bin to the root directory of the Kindle.
    2. Eject the Kindle from your PC and unplug the USB cable.
    3. Navigate to ☰Menu→Settings→☰Menu→Update Your Kindle and wait for the upgrade to install.
  6. Install the jailbreak hotfix

    1. Reconnect the Kindle to your PC.
    2. Copy Update_hotfix_universal.bin to the root directory of the Kindle.
    3. Eject the Kindle from your PC and unplug the USB cable.
    4. Navigate to ☰Menu→Settings→☰Menu→Update Your Kindle one last time.

All going well there should now be a Kindle Launcher/KUAL entry on your Kindle homescreen amongst the books and when pressed should take you to a screen that will let you launch KOReader (or any other homebrew software that you install). KOReader itself should give you a file browser that you can use to read EPUBs, PDFs and other formats that your Kindle couldn’t natively. You can transfer books over just by copying them over with a USB cable the same way as any other file.

KO Reader, showing volumes of Otherside Picnic ready to read.
These are all EPUBs.

I use Calibre to organise my e-books and it can handle transferring them over to the Kindle too, though by default it only sends books in formats the Kindle can natively read. You can change what formats it will transfer over as well as the folder structure it uses from the settings for the Kindle plugin under Preferences→Plugins.


Trying and failing to jailbreak my Kindle paperwhite gen 5 (serial number starting with B024, firmware 5.6.1.1) and get Kual and Koreader up and running. Following these instructions and trying it twice, doing a factory reset after the first time failed and trying again, but just get an error reading “This item is not signed by an authorised developer. Please contact the developer.” when trying to launch Kual after I’m done.

Posted on the forums looking for help
https://www.mobileread.com/forums/showthread.php?p=4578869#post4578869



Caoimhe

What I’m reading vol. ⅩⅢ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Hello! I am having a lazy Sunday to kick off the start of March and it seemed like a good time to post some more links.

Musical accompaniment is the Celeste soundtrack, inspired by me having just watched Bizmuth’s video on the world record speedrun and getting emotional watching someone playing the summit again. I think Maddy Thorson might be good at making games.

Apologies for the amount of these that are more bitching about “AI” I will keep that section for the end so you can ignore it if you are sick of reading about that.


Warfare in Dune, Part I: Fighting Faufreluches — Bret C. Devereaux

Starting with something fun: I always enjoy Devereaux analysing fiction from the perspective of historical systems and technologies with a particular eye for the reasons why things were done or made in a particular way in a given time and place.

So we might first ask if this fighting system, at the individual level, makes sense given the fantastical constraints Herbert’s shields impose. And I guess my answer is…sort of? I think the idea of a return to contact weaponry in this context works in the main, but with two main exceptions, which is that the style of contact weapon fighting that dominates is not what I would anticipate and second that the way Herbert also excludes laser weaponry strikes me as perhaps not fully thought out.


Games

Finally, a car mechanic sim where your mates do all the work — Brendan Caldwell

First off I am giving Jank another plug. Go read Jank! Support non-ad ridden publications! They got Alice Bell and Sin Vega (as freelancers)! What more do you dogs want?

I sell the wheels, both tires and rims. This is when I notice a small, uh, discrepancy between the listed "sell price" and what we actually receive into our bank account. Jonty expresses some worry, and tells me to check the computer in the corner of the garage to see how much it's going to cost to buy the new wheels, you know, "down the road" as it were. I look at the prices. I walk away from the computer.

"Let's worry about that later," I say, quietly.


I recreated every katsu curry recipe in Romeo is a Dead Man and almost none of them made me better with swords — James Archer

Despite a decent bit of Rock, Paper, Shotgun’s best being distinctly janky these days (read Jank!) there are still some gems coming out of the old site.

Tasting notes: Also delicious, even if – in spite of the in-game description – it’s about as Indian as sumo wrestling. The butter does make the sauce beautifully smooth, though, and the stacking of the breaded chicken creates a pleasant optical illusion of having more breaded chicken. Just don’t expect, if you make this yourself, to achieve the same yellowish colour as in Grasshopper Manufacture’s artwork. On the basis of this experiment, that would require so much butter that your curry would legally become a croissant.

Effects: Increases defence. I caught my finger while loading the dishwasher with curry-smeared plates and it still bloody hurt. Failure.


Technology and Design

A Look At Some Interesting Linux Terminal Text Editors — Pom

I confess that I work on this blog in Visual Studio Code. For general text editing I usually use Sublime text but since installing Bazzite on my desktop I have been using Kate, but I think I am going to swap back to Manjaro (or maybe try Cachy) soon and back to Sublime with it. In the terminal I have stuck to Vim with some plugins to style it for a while but this is making me think of checking out Fresh.

Another thing I've always been very fascinated by, is terminal writing programs; I think that might come from how often you hear people in videos about Linux talk about how much they use terminal text editors, particularly things like Vim and Emacs get commonly mentioned, and how much more efficient they are compared to their GUI counterparts. I personally also have almost exclusively used plain text editors for basically all writing I was doing on a PC; at school I did use Word, but none of my personal computers ever had MS Office installed; as such, I was already used to writing in programs with very minimal interfaces.


The Slow Death of the Power User — Fireborn

I think there is a bit of a degree of rose-tinted glasses in the reminiscing here. The idea that the culture around technology did not use wield levels of technical competency as gatekeeping or elitism does not ring true to my experience at all. Personally I think that a lot of technically minded communities are a lot better about that now than they used to be, or perhaps it just took me a while to find them. Maybe the eighties BBS scene that Fireborn is hearkening back to was better for this than it would be a few decades later when I was dipping my toes online (was it if you were openly a woman? or gay?).

But I do agree with the central point. The ideal form that technology has centred on in a black box. Something that the owner is not meant to understand or be capable of understanding. Something that cannot be repaired, altered, or used to do anything that is not approved of by its real owners.

That culture didn’t die because the knowledge became irrelevant. It died because it became economically inconvenient. The platforms that replaced the open internet — YouTube, Reddit, Discord, eventually TikTok — are consumption platforms. Their business model requires passive engagement. A user who spends three hours going down a documentation rabbit hole, breaking things in a terminal, and actually understanding something is worth less to them than a user who watches three hours of content. They don’t ban technical material. They algorithmically deprioritize anything that demands active engagement, they reward passive consumption, and they shape the culture of their platform accordingly over years and years until the culture that emerges is one that treats passive consumption as the default relationship with technology.


Have We Forgotten How to Design? — Louie Mantia

And adding to the above, it’s also all, of course, shitty and badly designed.

How has Waymo the technical ability to self-drive a motor vehicle around a city carrying human passengers, but they do not possess the skill to automate closing a door? Did they overlook every method that might encourage the passenger to close it themselves? Was there no other possible method to get the door in a closed state without resorting to a third party that commissions human drivers to drive over to the automated car and do it manually?


“AI”

15+ years later, Microsoft morged my diagram — Vincent Driessen

Everyone running every major company really does not give a single shit about anything any more other than shareprice. It’s good for the economy when the entire thing is hollowed out in the name of gambling, right?

The AI rip-off was not just ugly. It was careless, blatantly amateuristic, and lacking any ambition, to put it gently. Microsoft unworthy. The carefully crafted visual language and layout of the original, the branch colors, the lane design, the dot and bubble alignment that made the original so readable—all of it had been muddled into a laughable form. Proper AI slop.


Toolmen — Mandy Brown

Sorry, I meant in the name of gambling and eugenics.

This has always been the intention of AI, and where its connection to the intelligence-rankers of years past is cruelly apparent: if those in power cannot prove that a great many people are already inferior then they will bring that inferiority about by forcing them to use a tool that diminishes their intellectual and creative capacity. I think of the engineers and designers who have spent decades honing their skills, deepening personal and public creative practices in service both to the users of the systems they built and to their own brilliant spirits, now being told to park themselves in front of a sycophantic oracle that can be appeased only through rote dictates, and which never tires of lying even as their own minds and muscles atrophy from disuse. What is being automated here: the work or the people?


Tunic, Night in the Woods Publisher Says TikTok Is Creating and Running Racist GenAI Ads for Its Games Without Permission — Rebekah Valentine

And of course these systems themselves are also opaque, horrendously designed, and shitty.

What really is utterly baffling is what appears to be a profound void where common sense and business sense usually reside. Does TikTok want me to be grateful for the mistreatment of my company and our game? Based on the wild response through the weeks of customer service correspondence we have received, I think this is their stance and take on their obvious offensive and racist technology and process and how they secretly use it on the assets of their paying clients without consent or knowledge.



I feel like with HTTP responses the scenarios of “the URI you are trying to access is not a valid or defined endpoint” and “the URI is valid but the specific thing you are requesting doesn’t exist” should not both be 404 errors. Those should be two different things.


Caoimhe

EMCSH: AI Girlfriend

Welcome to the The Erotic Mind Control Story Hour, where I ramble about weird or interesting kink stories that have lodged themselves in my brain. This is coming off fairly soon after the last one but I don’t intend this to become my main output. I just had some notes jotted down already and it’s a much shorter one this time.

In many ways automation does not liberate us from work, but constrains us; stripping away our humanity and forcing us to work more like robots such that we may fit as neat cogs into an unfeeling machine. Large language models strip joy and humanity from communication and art, reducing everything to a palatable, generic slop or shallow wish fulfilment. AI Girlfriend by Savage Peach asks: What if that was hot, actually?

Grace Mei-Lai Ng, an English literature graduate from New York is struggling to find work. LLMs have swallowed so much of the copywriting and editing industries that jobs are non-existent. Behind on rent and desperate for cash she takes a job offering $1,500 for one evening’s work acting as a human proxy for a rich cunt’s anime waifu chatbot girlfriend. She is given a purple wig, violet contact lenses and an earpiece for the chatbot to relay to her what she is to say. She isn’t there to go on a date herself, she is a living mouthpiece for the computer generated schoolgirl Kurumi. It’s a little like Eliza, but as smut.

It’s humiliating but Grace keeps doing it. It’s easy money and she gets a large bonus if David rates her performance well and he isn’t allowed to touch her without her permission. But she must endure stroking his ego while he disregards her humanity, acts like a general dickhead, and confidently explains art wrong. She just has to agree with everything he says and stroke his ego. Her opinions don’t matter. She was chosen chosen only because she has a large chest and looks like Kurumi’s avatar. She’s not even fucking Japanese.

But it pays. And it starts to get easier. All she has to do is let Kurumi tell her what to do1. She talks to Kurumi all the time, even when she’s not on a date with David. She starts to get into character. She does her homework. Binges anime, starts learning Japanese, staying in character as Kurumi more and more. She alienates her friends and family by acting like a bizarre anime pod person, making her even more dependent on keeping this gig going. She gives permission to let David touch her, to go further. She wants him to at this point.

Some mind control is hinted at in this, but left vague, and in the end when Grace (now living as Kurumi full-time) asks David how they did it he claims that there wasn’t any brainwashing. The economic incentives, gentle encouragement and taking away of worries and having to think for herself were enough to boil the frog and let her hollow out her own humanity herself bit by bit and thank him for doing it.

  1. Despite the contemporary LLM angle Kurumi is, for all intents and purposes in the story, a fully sentient sci-fi AI. Just one programmed to be this guy’s fetish. ↩


Caoimhe

What I’m reading vol. Ⅻ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Oh it is has been a while since I posted one of these and I have built up quite a backlog of links.

Musical accompaniment for this volume chosen mostly to cause psychic damage against my partner.


Da Web

The State of Modern AI Text To Speech Systems for Screen Reader Users — Samuel Proulx

Interesting insights here into how the uses of text to speech for sighted and blind people are fundamentally different and how functionality for the latter is usually, unfortunately an afterthought.

Supertonic is slightly faster, as it can stream result audio as it becomes available, whereas Kitten TTS cannot start speaking until all of the audio for the chunk is fully generated. But for use in a screen reader, a text to speech system needs to begin generating speech as quickly as possible, rather than waiting for an entire phrase or sentence. Users of screen readers quickly jump through text and frequently interrupt the screen reader, and thus require the text to speech system to be able to quickly discard and restart speech.


A tale of two Webs — Oblomov

A lot of the development efforts (both creative and destructive) in web browsers in the last decade+ has been going into fostering the “web app” vision of the web, to the detriment of the “web of documents” vision. From the removal of native support for RSS and Atom feeds to the introduction of JavaScript APIs like WebUSB or the Web Environment Integrity attempt I already discussed in the past, nearly all work done on browsers has been in this direction.

I feel this a lot. The web of documents now lives in the margins of the web of apps and with Google’s capturing of standards has made maintaining a web browser to keep up with the former impossible without the backing of Google or other huge companies who are increasingly hostile to users having any agency. I feel similarly about operating systems at this point, too. I abandoned Windows on my home computer years ago and since then it has become ever more hostile to users having control over what their machine does. This isn’t new, simply an acceleration of trends that have existed for a long, long time.

As much as I want the “AI” bubble to burst I do wonder if the push for “agentic” systems might actually stick simply from the obscene amounts of money being powered into trying to make users handing over nearly all agency and control of their machines to chatbots actually work or be desirable. Currently Windows still does allow itself to be used as an actual desktop operating system, but clearly Microsoft at this point want to push everything towards locked-down, controlled and monitored black boxes, possibly even worse than phones possibly are. How long till they think they can get away with amputating the shrivelled lump of the desktop operating system, cut off direct user access to the filesystem outside of what you have in Dropbox that you pay a subscription for and lock everyone into software from the app store for everyone but enterprise customers who can pay through the nose? Or at least just keep breaking core parts of the operating system until they’re barely useable.

On a more positive note this article also prompted me to add metadata to the site that will work with the Website Navigation Bar addon for Palemoon if you’re using that because I thought it was cute and it was easy to do as I was already using that information to render on-page navigation elements anyway.

And speaking of the web of documents…


Consider Making 2026 the Year of the Personal Website! — The Virtual Moose

I know I’m going to be preaching to the choir with the kind of people who are reading a personal blog already, but still.

I think it’s also just fun to see what old posts still get traffic. My most popular posts on here are very old ones about how to play the late 90s MMO Asheron’s Call today, ttrpgs based on video games, and the late 90s Microsoft puzzle game Pandora’s Box. It’s more useful and permanent than an unwieldy thread of posts on bluesky or mastodon too, where you would have to refresh it for anyone to even come across it again.


Stolen Focus — Luna

I do still have to catch and reset myself with various bad computer and social media habits every once in a while. It’s easy to fall into when you are tired and sore and everything that would be interesting or engaging or useful just feels like a massive hump to get over.

By this time, however, I had become once again hopelessly addicted to social media. I wasn’t getting notifications, and I wasn’t fixated on numbers any more, but I was still compulsively checking and refreshing, desperate for the feed to give me another hit of dopamine. I lost hours each day to flicking through TikTok any time I had a quiet moment — rather to flood my brain with stimulation than have to sit in uncomfortable silence even for a moment. A partner and I would engage in a habit we called “TikTok time”, where we’d screen-share the videos we’d Liked recently with each other. Increasingly I was finding I had little to show for the hours I’d spent scrolling the feed. It had become akin to a slot machine; I kept scrolling and scrolling in the hopes that maybe the next video would be something I wanted to see — whatever that was.


Payment processors were against CSAM until Grok started making it — Elizabeth Lopatto

What else is there to say?

So why is X different? It’s run by Elon Musk. “He’s the richest man in the world, he has close ties to the US government, and he’s incredibly litigious,” says Pfefferkorn. In fact, Musk has previously filed suit against the Center for Countering Digital Hate; in a now-dismissed lawsuit, he claimed it illegally collected data showing an increase in hate speech after he bought the platform formerly known as Twitter.


Games (general)

Horses Is Tame — Chris Person

But of course, if you want to make art…

This is a hegemony of American prudishness, applied globally, incoherently, unevenly, and unseriously. Anybody responsible for these decisions would be vaporized in seconds by a Pinku movie from the 1970s, and if a single person in this chain of command has an arts degree they are pretending they don’t for the sake of an ill-defined idea of business.


Alternative Games From The Fringes Of Cyberspace — Nathalie Lawhead

And a somewhat more hopeful view on being considering unmonetisable.

The games that exist outside the mainstream, and I think the type of personal empowerment they represent, is what makes them “controversial”.
Especially under the scope of mainstream culture where everything needs to sell, satisfy a commercial value, be consumer centric, or live up to such capitalist standards.

Unmonetized self expression is an act or resistance in today’s tech landscape.


Why we are making Jank — Brendan Caldwell

Games journalists Jon Hicks, Brendan Caldwell and Graham Smith have launched a new games site called Jank that fails to live up to its name by functioning well and not being bloated with ads, tracking, affiliate links, chatbots and other crap that turns sites into a churn of advertisement-friendly sludge.

Perhaps less obvious is the kind of writing that disappears in the process. Articles about new games, niche games, and experimental work don't get traffic, so off they go. Deeply researched columns from subject matter experts don't get traffic, so they’re cut. Not many people read interviews, unless you can get someone to say something controversial and pull it out as a news story, so it’s rarely worth talking to developers about their work. Articles designed purely to entertain with daft jokes, such as diary series, don't deliver numbers at scale no matter how much their readers adore them.

Will this work out? Can they make enough money doing this to actually make a living? I don’t know but I hope so, and I hope they make enough that they can round up a few other Rock, Paper, Shotgun veterans as well. They are also trialling a partnership with the Total Playtime podcast which I am a fan of as well. Supporting one will give you access to the membership perks of the other, at least for the next few months.


The gamers hate generative AI — Laura Michet

Gamers rise up.

I've assumed for a while that gamers would have mild distaste for genAI material, in the same way that they have distaste for asset store assets and, for some reason, the Unity engine. It turns out that I was wrong - they hate it a lot more than either of those things.


Games (specific)

“interest sources”, contextual interactions for NPCs in Sleight of Hand — Joe Wintergreen

On the more technical side of games I always like reading Joe Wintergreen’s breakdowns of how systems work.

A scenario I’ve found useful to expose a lot of edges cases is a guy pissing against a wall and leaving a puddle of piss. Support this scenario with no aberrant behaviours and you are doing okay.


Abstraction in Rhythm Doctor — Blueberry Lemonade

How are layers of abstraction perceived? What expectations do they set? At what point do UI elements stop being representational and start to become part of the fiction itself?

It sounds small (and it is), but it was a firm example in my mind of how the game was changing the longer we worked on it. Instead of characters simply appearing and disappearing in abstract space whenever they were needed for gameplay, we were now introducing the idea that they are real characters standing in real rooms that are connected to each other. They can walk, or run, from one place to another. They’re living lives of their own when they aren’t being treated.


The Great Celeste Race 2026 — Caoimhe³

Caoimhe wrote a much better narrative of the annual Celeste race than mine.

This part was a delight. Ruby and I swapped the lead as we often did, but with microscopic gaps becoming the norm. A single death in a puzzle would swap the lead, and hesitating would throw away any advantage we may have had. I lose the lead at the end of the 1500 metres section, at a puzzle I know I hate, and pull it back cleanly at 2000 metres. At 2500 metres, I had a small lead, but here is where the dream ends.


list animals until failure — Vivian

Here is a new blog with a strong, realistic, game plan for updates and a fun post about the suffering involved in defining how many animals there.

If you’re an entomologist, or an evolutionary biologist, you might say “well, bees and ants are just wasps, really”, and I respect that. But colloquially, bees and ants aren’t wasps. If this game insists on a purely phylogenic approach, then it’s like, come on, I can’t get a point for saying wasp and ant? That’s unreasonable. If I ask a 2-year-old to list animals and she lists wasp and ant, I’m not gonna break out the DNA sequences like “Ohh well evolutionarily ants are technically wasps”. I’m gonna say yeah, good job, that’s two animals.


Serious stuff (trans)

'A Directive From Above': Former NYT Editor Lays Out How The Paper Pushes Anti-Trans Bigotry — Billie Jean Sweeney

A look into how hatred and transphobia gets pushed down from above in the media.

She assigned it to a UK correspondent, who wrote it in the context of UK politics, talked about it being very contentious, talked about the criticisms of its findings. Cass was talking about them herself, this isn't jumping to any conclusions at that point. It really put it in the context of being this very contentious, very political sort of document.

When I saw it, because we're a few hours behind, there were 600, 700 words written. I had a pretty good sense of how the story was going to turn out. But within a few hours the story was to the top New York editors, and I don't know who exactly it was who did that. I assume it was Carolyn or her intermediary. They said ‘oh no, we want the science desk to do that,’ specifically that was Azeen [Ghorayshi], who had been a key reporter in a lot of the other anti-trans coverage.


I bear the scars of a healthcare system that fails trans people — Jenny Maguire

And another article on the Loughlinstown gender clinic being awful to throw on the pile.

“Oh wow,” she said. “Did you do this yourself?” Immediately, I felt her fingers running through my curls, as if I was a glamorous dog being poked and prodded. Still, I put on a smiley face and went along with this condescending charade. I knew what I needed, and I was not going to cause a fuss — as if I had any choice.


Serious stuff (general)

Outlive The Bastards — Caoimhe³

May we.

There's been several eye-opening moments for me in the past few years. Realisations that we can simply do things never before imagined. These rolling revelations haven't stopped. I can live and love in ways I was never able to before, and nothing can stop this.

So we live. But only in a way that works for us. We dictate how we breathe, how we act, how we medicate, how we live and how we die. How long did I spend dancing to other peoples' tunes, hoping and begging to be given basic respect, only to be thrown aside? Never again.


TrAPPed: Arrested by Phone — Anand RK, Suparna Sharma & Natalie Obiko Pearson

Bloody fuck.


shit i keep seeing: “conflict resolution” via gaslighting — Joe Wintergreen

I fear that I may been this person before but I know I have definitely worked with a guy who did this.

I guess what I’m seeing is guys who’ve never learned to resolve conflict, only to “win”, overcorrecting and becoming what might be termed “conflict-avoidant”, but their avoidance strategy is pretending, the moment there is a conflict, that there isn’t one. If they can get this past everyone in the moment, face is saved and they’re off the hook for a true resolution.


We Don’t Need Any More Renewables — Adapt : Survive : Prevail

I am endlessly frustrated by people thinking that if we just have more renewable energy then everything else about our suicidal systems of exponential growth and resource extraction will be fine.

So in plain language, here is the actual claim: “We have no choice but to meet all electricity demands and doing so via renewable energy increases greenhouse gas emissions by a lesser amount than fossil fuels.”

Now that we have clarity on the actual claim, we can break it down. The reality is this: 1) We absolutely do have a choice because demand is politically, economically, and socially constructed, and 2) The choice between renewables and fossil fuels is a false binary, like telling a healthy person they must chose between losing an arm or a leg.


Meaning, Memory and Christmas in Ireland — Seán MacBrádaigh

A brief dive into the complex place of Catholicism in Ireland.

A new state, born of revolution, civil war and counter-revolution, sought stability through moral uniformity. In doing so, it aligned itself closely with a powerful and highly conservative Catholic hierarchy, outsourcing social order, education, health and morality to the Church. This was not a neutral partnership. It produced an official vision of Irishness that was narrow and exclusionary - defining virtue and respectability in rigid Catholic terms.


Caoimhe

You can now hide tags on this site

The page for each tag on this site now has a button to hide that tag, so if you don’t want to see me posting about Doctor Who you can visit that tag’s page and select to hide it. This will hide those posts entirely from the homepage list and elsewhere will collapse them with a button you can click if you want toggle the visibility of the individual post and another button to remove any tags that that post has from the hidden tags list. I’ve set it so that tags for adult topics are hidden by default.

This is done with a hundred and thirty-odd lines of Javascript and stores the tags one has hidden in one’s browser’s local storage and so will persist between visits on the same device but will not transfer to any other browser or computer and it doesn’t send any data to me.

By the way, tags are also included in the site’s Atom feed and some readers support blocking tags as well (I believe that Newsblur does), though other readers (like Feedbin) just ignore tags entirely and don’t even show them.


Less Wrong and The Scariest Snake Imaginable

We sat around the campfire. All of us rational, we rarely gave in to the aesthetic of the primal. But fire reminded us of masculinity, the most rational of the two genders, according to Christian God. And it was warm to the flesh.

"Let us tell campfire stories," one of us said, "For we are Rationalists and most scary stories are irrational. We can only be scared by rational scary stories."

"Agreed," another said, "I fear not ghosts since they can't possibly exist. Perhaps something real which is scary?"

"Actually, I think ghosts are real, but they aren't scary," another chimed in.

Recalling earlier the slithering beast we found earlier on the trail, positively identified as the thamnophis sirtalis sirtalis, I made the grave mistake and proposed,

"Perhaps stories of snakes?"

Snakes are, after all, scary. "I saw a snake" is a pretty scary story.

And so began the worst night of my life.


"… And then he said, better Nate than Lever, and his dune buggy turned that snake into a fine pate in the sand."

"Wow," said Markus Yakovlevich Rothkowitz, the inexplicable thirteenth member of our group. "What a tale. But that snake was not scary, merely the circumstances."

"Can you propose a scarier snake, Rothko?"

"Perhaps… What if it were a large square of color?"

"That doesn't sound scary."

"You'd have to be there," Rothko retorted.


The tales went through the night, when a member of our group who had not yet spoken a sentence said,

"Well, what about the scariest snake you can imagine?"

This gave me pause. The night was black and deep and a chill ripped through the air. The scariest snake I could imagine? That's like the '10' on the scale of pain from 1 to 10.

My compatriots were similarly chilled. Images of a gigantic beast, slick and venemous, faster than a moving train, teeth sharp and venemous. I shuddered. Surely we were all imagining the same thing.

"Besmirch you, Roko, that was scary!" said the leader of our gang, Eliezer Yudowsky. "I might have to get naked, like in Beowulf, in case that snake comes. Does anyone want me to get naked?"

"Well," Roko said, with no pretense of answering the question, "Now imagine a snake scarier than that."

I brought my trembling hand to my trembling face. I knew such a snake could not exist, but… Being a rationalist, if I could imagine it, it must be possible. And something scarier than my imagination….

Eliezer, unbuckling his pants, began with a voice one step too fast and one octave too high, "Do not say such a thing! Even if it is so unlikely to exist, it would be so horrible that it counters out!!"

Roko smiled. "p(doom) approaches zero, but e(doom) approaches infinity, no?"

Cursing that I was too blasted during the entirety of the semester I took Calculus II and Probabilistic Modeling, I nodded pretending to understand.

But now, Eliezer was standing, and running in circles, making a scene. Being that he was a rationalist, like us, I knew this must be bad.

"No! No, it is too terrible to imagine- a snake that scary-"

"Actually," said Roko, "Even scarier than that."

My God- I realized. Once the sentence "A snake scarier than I can imagine" was internalized, that snake immediately became as scary as I could imagine. And so, the snake scarier than I could imagine was even scarier than that.

My God. That meant-


My eyes uncrusted under the blazing sun as I opened them. I must have had blacked out.

I propped myself up on my elbows, to see all but blood around me. The scant unstained surfaces were oases in the sanguine sea under the cerulean sky and its searing sun. It felt as if I was sitting in the middle of the canvas of an abstract painting.

The bodies which produced the blood were nowhere to be seen; it was only I and Eliezer, hunched forward.

"I saved them," he explained, "From the snake."

I thought this was the beginning of a longer explanation, but he said no more words. He sat squat in silence, and I lay propped. We mutually understood I needed no further explanation– except, maybe, for why he spared them and not me.

Eliezer was entirely nude now. "Like Beowulf," I said.

I winced as the image of the snake danced in my mind. Scarier than I could imagine, it notched one iterated aleph higher.

Fuck.

That's a really scary snake.


Caoimhe

Tags page!

Something that should have been obvious with adding tags but I didn’t think of until after the fact: There is now a tag page showing all the tags used on the website, ordered from most ot least used. I also added some more tags and went back and retagged a lot of posts.


Caoimhe

Tags!

After a year I have finally added a functioning tagging system. I had been tagging posts already but they were pretty much non-functional, just sitting at the bottom looking pretty. Now every post has some category icons under it. Mouseover each for titles if it’s unclear what they’re meant to be. As well as posts the tag pages include reviews and gallery exhibits.


talking about AI art and weird fetishes, not serious, nothing explicit

I bet the wonderbread guy with the fetish for blonde women destroying the environment and building polluting sandwich factories etc. really loves AI slop

people keep asking “who are these AI generation tools for?” and the answer is it’s for the wonder bread guy


Caoimhe

What I’m reading vol. Ⅹ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Did you know that due to the differences in power grid standards the Mega Drive CPU ran at 50 Hz in Europe and Australia rather than its original 60 Hz? That means that if the programming for the games didn’t compensate for it that meant they ran one sixth slower, even the music. This is what the original Sonic the Hedgehog sounded like to me as a child and most of these songs still sound strange to me at full speed. And following on from that…


PAL retro games deserve to be preserved, respected, and re-released — Kimimi

In most cases these aren’t the games an entire continent (and beyond) grew up with, and we need to seriously consider how successfully the industry’s caring for its past by so quickly and easily throwing out the likes of Castlevania: The New Generation (Bloodlines), Shin Megami Tensei: Lucifer’s Call (Nocturne), and Kirby’s Fun Pak (Kirby Super Star). For millions of us there is no preservation to be found in these otherwise excellent re-releases nor any chance to revisit a childhood favourite, because the games we played often aren’t even mentioned, let alone included.

Yes I have a bee in my bonnet about this. There’s another interesting thing to note here: PAL versions of Japanese games also often had quite different English translations to the North American releases. As a child I played Soleil on my Mega Drive, saving the world with Johnny the dog, Charlie the cheetah and Penguy the Penguin, while a girl in Canada playing Crusader of Centy on her Genesis would have met Mac, Flash and Chilly instead1. Nintendo did this as well and for a lot longer than you might expect. The most recent game that I know off the top of my head that had two different English translations for PAL and NTSC regions was Splatoon in 2015.


Overview of my Sun Microsystems Type 7 Keyboard and a little Guide on how to use the Compose key in Linux — Pom

I haven’t bound all of them, but having extra keys to do with as you please is sooooooo nice. I really wish I could get, like, relegendable keycaps where I can write down what alternate functions I have them mapped to. (this is where the Type 5 would kinda come in handy, since that has MX switches, that I could easily put relegendable ones on). So far I’ve mainly have them mapped to window controls, like Stop and Undo each move windows between my monitors. The Help key is one I’m kinda unsure on, since I’ve often hit it by accident instead of Escape so I don’t want something else pop up in situations where this happens. Maybe I could map something to hitting Help along with a modifier? I’m not sure.

I haven’t done much manual key remapping myself but on the Manjaro install on my main desktop I have keyboard layout set to an Irish Cló Gaelach layout that gives me easy access to writing vowels with síntí fada and consonants with poncanna séimhithe using the AltGr key but a lot of other handy or cute little key combinations for different characters, including smart quotes, en and em dashes, and the Tironian et (⁊) which is still sometimes used in place of an ampersand in Irish and Scottish Gaelic and is appropriately on AltGr+⇧ Shift+7.


Blaugust Notes on Comments — Rabbit

“If you don’t have comments enabled, then you’re just preaching your truth. You don’t want to have a conversation.”

Correct.

Okay, no, not really–but why is that so bad? If you believe this, why do you think it’s a bad thing for someone to opt out of other people’s viewpoints on it? It’s their blog. A blog or personal website is intrinsically a different thing than a social media account. It is entirely customizable and on your terms. Why is it a bad thing to have full ownership of your space in an era of the internet where we own so little?

Agree wholeheartedly with xir on this. I do have comments on here but I mostly just hope for the occasional nice little comments for my friends. This is my website and I am fully and unapologetically in control of what appears on it. I am not averse to feedback or discussion but if you try to post a comment I don’t like I will simply delete it.


Further Notes on the Death of the Author — Rabbit

We watched this during critique in class and sat afterwards in horror, none of us willing to be the first person to speak up, until finally someone broke and said, “Is this a film advocating for suicide?”

She was upset with us for thinking such a thing when, to her mind, this was a film about getting in touch with nature to brighten your life. Obviously. Unfortunately, no matter what her intentions were, she had definitely just made a film that was pro-suicide. She was too unskilled at that time to be able to make a film that met her intentions, and also too unskilled to identify what the film was actually about.

Some more notes from Rabbit.


if you love it, download it — Erysdren

this post started out as a rant about the current state of media preservation on the modern internet… but ranting and complaining rarely helps anything.

so instead, i have written a few short guides and notes about ways you can help contribute to media preservation by doing it your damn self. most of the guides lean very technical, but i try to give appropriate explanations and links to the tools and documentation where i can.

I think that every blog that I currently follow that does its own little post roundups has already linked to this but I will add my voice to the choir as someone who was recently struggling to download and preserve something myself.

Laura Michet also recommended a few other downloaders.


Let's stop pretending that managers and executives care about productivity — Baldur Bjarnason

Today, big chunks English-language management and executive culture are effectively the opposite of what we know works when managing organisations.

One example are open offices: these have been proven many times over to harm productivity, focus, collaboration, and employee well-being. They only improve real estate costs and employee surveillance.

I love the efficient allocation of resources under capitalism.


An infodump on vaginal sex, by a lesbian — Elilla

Lately the bottoms I've had the privilege of bedding all have described my fingers with the word “magic”, so I figured I must be doing something right. Might as well write down what I've learned from a lifetime of chasing skirt.

I already linked to this on my own recent post on penile sex and might as well throw it in here too.

  1. And the original ラグナセンティ(Ragnacënty) had ぽち(Pochi), ちった(Chitta) and ぺんぎー(Pengī). ↩



Caoimhe

My first expo

I exhibited at a showcase for local game makers yesterday. It was the first time I had done something like that and it was extremely fun and utterly exhausting. Working on games is an occasionally hobby; I don’t intend to make it my job and I haven’t worked on any game projects since the game jam last year, but I dusted off Snolf Robo Blast 2 and Conway’s Garden and set them up with some controllers for people to try out.

Someone “enjoying” Snolf.

I had not thought about how exhibiting these would work before the event but I quickly realised that I was going to have to give a lot of context to people as to what they were playing. The vast majority of people attending never heard of Sonic Robo Blast 2 before so I had to give a quick rundown to everyone on what it was and sometimes the concept of fangames and mods.

Even with that explained, though, it became apparent how awkward it was to try to convey what the mod is doing when people seeing it do not have a context of the base game and how the mod is creating an experience on top of that. They are coming in and seeing and playing this game for the first time and expecting it to be a coherent whole, not this deliberate awkward layer on top of a base game. You don’t have the context that the joy in it is that you are playing the game “wrong”, layering a control scheme and method of play that the world was not intended for. Many people when seeing it as a golf-type thing started looking for a hole or guidance on where they are shooting for. The levels have a fairly legible linear structure when played normally, but when you have never seen them before and can freely shoot yourself much farther and higher than the levels for designed for, bouncing every which way, it is become very difficult to parse the structure of the space. More than one person suggested there should be guiding arrows of some sort to help.

Some people, though, did gel with it straight away and were delighted by blasting Snolf around, which was really nice to see. I was quick to give credit to the SRB2 team for the game itself and Dr. Melon for the concept. A line I fell into saying that got a laugh from a lot of people is that “all I did was make the controls worse.” A lot of people also got a kick out of it when I pointed out that the game was technically an extremely heavily modified version of Doom. Some people did have more of a concept of an antigame and compared it to QWOP and Getting Over It when I tried to explain the awkwardness of it not being entirely unintentional and the other game makers there generally got it and found it interesting. There were a few parents who brought children, including a Sonic fan or two, and they gravitated over to it being one of the more brightly coloured, exciting looking things on display, only to get pretty frustrated with it. For the kids at least I did quickly quit back to the main menu and restart the game with normal Sonic so that they could have a bit of fun trying it out and gave on the details of SRB2 to their parents if they were interested in it, pointing out that it was free. I think if exhibiting it again it would be useful to have a second computer set up with the unmodified version of the game, both to give context and to allow any child who sees Sonic and gets excited to play something that would actually be fun for them.

Similarly for Conway’s Garden I had to let people know that there wasn’t really any goal or point to it and it was more of a piece of art and a challenge to make something in a tiny amount of code. I had the code open in a second in a second window to the side so people could see how small it was for themselves. A lot of people, quite fairly, lost interest in it quickly, but some people were fascinated by the highly condensed code and the idea of tweetcarts and Pico-8 itself and a surprising number of people were already familiar with and recognised Conway’s Game of Life.

There was one man in particular I had a lovely chat with who was unfamiliar with games generally (he had to ask to clarify if “mods” was short for “modifications”) but enthusiastic about discussing the things on display as art. He said the mix of chaotic generation with the player’s simple, deliberate movements in Conway’s Garden reminded him of Joseph Beuys’s I Like America and America Likes Me and immediately recognised the Sisyphean nature of Snolf.

I don’t know if I will do anything like this again any time soon (and I won’t be working on anything new to show for the moment) but I had a great time and met some very cool people.


Caoimhe

The Apotheosis of American Cultural Hegemony

It bothers me more than it should when I hear Irish people, or anyone outside of North America, call a Mega Drive a Sega Genesis. It’s quite common among people younger than me; people who didn’t grow up with the machine itself. They know about it from the internet, from the video game history that gets talked about and passed down online, and that is generally the American history of video games. The great video game crash, the dominance consoles over home computers and the dominance of the “Super Nintendo”1 among consoles—all things that did not really happen here. There were only two countries where the Mega Drive was called a Genesis but one of those two countries is the United States of America which is, of course, the only country that matters.

This is a pretty trivial aspect of the general cultural imperialism of the USA and this is nothing new. The US is a huge country, the largest economy in the world and has spent the last hundred years dominating the media and cultural output of the rest of the world. It drowns out all other voices and perspectives, especially in a small English-speaking, and up until recently, very poor country like Ireland.

And as the internet allows us to be more connected and allow other voices to get out this it also accelerates this. Now the world is not only watching the same Holywood movies but following the same big accounts on US-based and -designed social media networks, having the same conversations about the big American political news. Which, to be clear, there is good reason to do2. America is, again, the biggest economy and most powerful country in the world. What it does impacts all of us but also what its tech companies do shape the information we see and the ways in which we see it.

How we access information and what information is prioritised is controlled largely by companies like Google, Microsoft and Facebook. Facebook’s algorithms, policies and moderation are responsible for genocide. I perhaps cannot as easily level such a claim against Google yet but its search, the most common tool for accessing information in the world, has gotten worse and worse at doing that, prioritising profit, advertising and keeping you enclosed within a Google ecosystem. And now, of course, funnelling you away from links to other sites entirely, links to other resources and perspectives, and towards their chatbot output.

Large language models are swallowing so much of the internet right now and lot of people already swear by them, turning to them for questions, for help with writing, for ideas for when they’re stuck, for therapy and for companionship. There is a lot to be worried about with this but one thing I have been thinking about is how these chatbots—whether Google’s or Open AI’s or whoever’s—is that they are probably all going to call a Mega Drive a Genesis unless specifically prompted against it.

These models are trained using the internet as a corpus, an internet already dominated by American perspectives. They are made and shaped by American tech companies who are increasingly cosying up to an ever-more chauvinist US state which is itself embracing “AI” tools as much as it can.

There is reason to think that the current bubble is unsustainable (and I do hope it bursts), but if these tools become normalised as a primary way of attaining answers, of seeking information and perspectives, I think it will have a horrifying flattening effect and accelerate the general Americanisation of the world beyond what is already happening.

And everything I said above is assuming no outright maliciousness. Twitter has repeatedly shown us that the people who make these chatbots can deliberately steer them to avow certain perspectives, from promoting South African white genocide myths to conspiracy theories about Jews. There is nothing really stopping Google from, say, deliberately trying to seed racist, anti-vaccine or anti-transgender propaganda into its chatbot and search summaries if it thinks that might get it points with the current regime which is already demanding idealogical purity from such systems, in effect ordering the limitation of acceptable perspectives.

  1. Another shibboleth. We called it a “snez” here. ↩

  2. And I am not saying the internet was a mistake or being connected to people around the world is itself bad. It has been a wonderful thing for many of us weirdos to connect with people who actually understand us. One of my best friends is in Australia and even though I have not yet met her in person and I am very glad to have the connection I have to her through the internet. ↩


Caoimhe

What I’m reading vol. Ⅸ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

I have been rewatching Fullmetal Alchemist 2003 and talking about it with friends a lot so here is my favourite of all the intros from it or Brotherhood (it’s just the first intro from Brotherhood).

Also just a small rant: I hate how the top results on Youtube for this kind of stuff is always horrible interpolated to 60FPS upscaled crap that ruins the animation.

It’s been a while since I’ve done one of these. I have conflicting urges to want to write more and do more but also I know I need to rest more. Don’t expect me to be Blaugusting. I am actually trying to get as much off my plate as possible and not commit to things, including pruning my RSS feeds quite a bit so I feel less obliged to keep up with so much. Everything is difficult 👍🏻

But I have still been reading and have things to share. No particular order or categories to things this time.


The Narrative Fallacy — Nikhil Suresh

On how a compelling narratives not just get people to buy into ideas, but obscure otherwise very obvious flaws, and how the use of narratives in this way is actually taught and enforced in university education.

No, the real point is that the claims from this study are ridiculous and intelligent people that have been studying for years can’t pick up on it. The real point is that I am actually really confused as to how Piff got his results, but at least I’m not tricking myself into thinking I know what’s going on. Did he fudge the numbers? Was the experiment poorly set up? Just pure bad luck in sampling? Hell, is the result true? I don’t know, but I will say that you don’t know either.


The Missing 11th of the Month — David R. Hagen

Why is the 11th of each month (other than September) consistently underrepresented in the Google Books database as shown in this XKCD comic? The answer is typographical.

When I began this study, I was hoping to find a hidden taboo of holding events on the 11th or typographical bias against the shorthand ordinal. Alas, the reason is far is far more mundane: a numeral 1 looks a lot like a capital I or a lowercase l or a lowercase i in most of the fonts used for printing books. An 11 also looks like an n, apparently. Google's algorithms made mistakes when reading the 11th from a page, interpreting the ordinal as some other word.


So-Called "AI" Cannot Program — Natalie Weizenbaum

This really resonated with me. The most frustrating projects I have coded for are the ones where people have not thought through the meaning of what they are asking for, where they ask “make this work” with no clear definition of what working looks like outside of the most idealised possible scenario without consideration of real world use, let alone edge cases or failure states. I feel “a programmer is paid to refine semantics” to my bones.

Programming is the act of making a computer enact a semantic task. The computer's silicon internals, its RAM and hard disk and even its pixels, are the syntax here. It has no intrinsic meaning, just a set of ones and zeros and a very complex set of rules for transforming them. The semantics are the human interpretation of what it's doing and why, the understanding of those numbers and pixels as a map to the nearest ramen joint or a simulation of a puppygirl begging for treats.


(a) cohost postmortem: life after death — Jae Kaplan

I still get far too emotional thinking about Cohost.

the reality of social media is that unless you have an Audience, you are probably better served among friends.


Revisiting Chapters: Tyrion V, ACoK — Turtle-paced

I really love A Game of Thrones and I used to read a lot of fan analysis stuff and listened to a couple of podcasts just about the series. Turtle-paced is the one person in that sphere that I still follow and I still really enjoy reading her deep dive chapter analyses when she posts them. She does, as the name of her blog implies, post them at the rate of a testudine and it is a nice occasional treat for me.

This is just how it is, per Tyrion. His response is not to address the unfairness but to show gratitude for the benefits he enjoys. The idea that everyone should have those privileges does not cross his mind. It’s a way in which he’s like Cersei. Though again, and as usual for the Lannister siblings, this is also a product of an abusive home. Tyrion’s only protection against the various injustices he faces in life due to his disability come from being a Lannister. The idea that everyone should have Lannister-level privileges is a threat to him - which in turn is a belief born of despair that of course everyone will hate him for his disability, and this can never change.


GameCube controllers in Sunfluffs — Azure

Putting native Gamecube controller in a new PC game, cool! Seen via Misty.

okay so, something that's been bugging me for 15+ years but i never realized how to put it into words until recently: regular game controllers have different layouts depending on if you're in gameplay or in menus.


Moon Light Café — CD-ROM Journal

Another multimedia CD.

Writing about early CD-ROMs means coming across a lot of early examples of things that became famous later. Sometimes that means finding new and exciting angles on something familiar… and sometimes it means something that's only notable for being early. Today's disc is one of those.


What I'm Reading, Volume 3 — Caoimhe

My clone also shared some interesting links, including an article about the decline of bin stores, a type of business I didn’t even know existed and beautiful photos of industrial waste dumps in Russia.


Ancient Globalism: Rome, India, China, & Beyond — Nathan Goldwag

Ancient trade is cool! The past was international!

Titianus himself was a Macedonian, as well as a Roman citizen, and reflects just how complex and multifaceted these exchanges truly are. We talk of “Rome” and “China” as unitary civilizations, exchanging speech and goods like two singular individuals, but of course both were mere representations of vast conglomerations of peoples, cultures, and nations, all of which were constantly in flux. At Shatial, in the Karakoram Mountains of the Punjab, more than 1,000 inscriptions and 700 petroglyphs were carved into the rock near a key pass, recording names, dates, and prayers from travelers. They appear mostly in Sogdian, Middle Persian, Parthian, Aramaic, Brahmi, and Kharosthi. Nine are written in the extinct Bactrian language, one uses Chinese characters, and one is in Hebrew.


Rachel’s iPod — Luna

A short lament about erasing someone’s past from an old device.

Have you ever bought a pre-owned game cartridge or MP3 player or something, and the previous owner’s data is still on it — and for a brief moment, you feel a sense of connection with that stranger through their lingering data, and a twinge of sadness at the idea of deleting it to use the device for yourself?

Hell, I have felt sad in the past about clearing out my own childhood savedata from a cartridge. A few years ago I was able to boot my old copy of Soleil and was greeted with save files under my deadname as well as my brother and sister’s names.


Let’s make up fantasy consoles for fun — Kyle Labriola

Seen via Mike Egan’s link roundup.

If you could wave a magic wand and wish a new fantasy console into the world…what would it be like? What constraints would it have to force developers to get creative? If it came with hardware, like the Playdate, what would the console physically be like?

This is something I have actually thought about before. One of the myriad little ideas filed away that I will certainly never have time for (and would have to learn many, many new skills to ever do myself) and if I ever do get time for it the moment for it will probably have passed. But the idea of a Pico-8 style fantasy console with its own integrated development environment but 3D with an eye to creating PSX-style visuals in the way that been in vogue, especially with horror games with a Crocotile-style friendly editor for mapping and modelling has been fermenting in my mind for years.

And very importantly it would also be paired with a secondary, 2D, low-spec fantasy console similar to Pico-8 (some musings of this involved it being a Pico-8 clone that could run Pico-8 carts itself, but maybe that would be stepping on Zep’s toes too much) that could play its own separate games as well as link to main console to act as a simple secondary screen like a VMU, either running it in a separate window on the same desktop or else running on your phone linked via wifi connection. Have extra HUD info on the second screen, control a game entirely through your phone with a unique interface, pass it to a friend and allow extra asymmetrical co-op control, download a chao to your phone! I am aware that second-screen peripherals have been done a load of times and it has basically always bombed but I don’t care I love control and interface gimmicks and am eternally enamoured with stuff like the Dreamcast port of Silent Scope allowing you to use the VMU screen as an incredibly low fidelity scope and Zombi U’s gimmick of making you look away to the Wii U gamepad so much to divide your situational awareness in stressful situations.


What My Hysterectomy Taught Me About Bodily Autonomy and Misogyny — Kelly

Medical misogyny is nothing surprising to me but this lays it out very strongly.

There was no medical reason to keep it. You don’t need your uterus to survive, it’s only function is to be a womb. If you keep your ovaries you won’t even go into early menopause. Yet they made it clear that saving my womb was more important than my life.


Why are games scary? — Laura Michet

But at a certain point, you have got to stop accepting the argument that an amateur Daz 3D porn game is worth an international uproar, no matter how transgressive and offensive it's trying to be.

I think this raises an interesting question of why anyone is bothered to take a game like No Mercy seriously at all. I do think there is an interesting idea in how games so very opaque to a lot of people that they don’t necessarily intuit the obvious difference between a shovelware porn game and something with the the actual cultural impact of, say, Call of Duty in the way that they obviously can between a Holywood movie and some random porn film but I do feel like it is something more culturally based than games just been too long and too much of an investment to experience.


if Windows is going to demand line endings be \r\n it should actually treat them as separate operations and not one thing. If it sees a \n character on its own it should put the output onto the next line without returning to the start of the line instead of just doing nothing. if it sees an \r character on its own it should start layering lines on top of each other




Caoimhe

What I’m reading vol. Ⅷ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Your musical entertainment:


Media

The Curious Case of the Pygmy Nuthatch — Forrest Wickman in Slate

A look at how creative decisions and compromises get made on a movie set.

You see, there’s a scene in that movie that tormented me, that kept me up at night, and that lately has had me interrogating a wide variety of seemingly devoted, and certainly well-compensated, filmmaking professionals. That’s because the bird in Charlie’s Angels is, I believe, the wrongest bird in the history of cinema—and one of the weirdest and most inexplicable flubs in any movie I can remember. It is elaborately, even ornately wrong. It has haunted not just me but, as I’d later learn, the birding community at large for almost a quarter of a century.


Heaven Will be Mine – Caoimhe

My clone recently discovered Worst Girl Games and has been having a time of it. When I played it I actually didn’t click with Heaven Will Be Mine nearly as much as We Know the Devil but Caoimhe’s words on it are making me want to revisit it.

Heaven Will Be Mine is short and sweet. A full playthough is roughly five hours. Within that time, it packs a narrative of the trans struggle for identity and recognition, the search for meaning in a perpetually hostile world, the never-ending quest of humans' self-discovery and exploration, and of course cool mechs beating each other up.


A List Of Games By Trans People Before 2010 — Dot Maetrix

Cute little list and led me to this fun interview from Bad Games Hall of Fame with Rebecca “Burger” Heineman and to revisit this interview with Megumi, the programmer of Virtual Lab1 that I had read before.

Not gonna lie I did NOT realise how long Maddy Thorson had been doing Trans-People-Can-Double-Jump Platformers before making this list. Like, I thought that Celeste was primarily her drawing from the twitchy platformer style of Super Meat Boy but as it turns out, lmao nope Not only does Jumper predate Meat Boy by sevaral years, but the lead character, Ogmo, went on to appear as a playable character in Super Meat Boy, acknowledging the influence that game had taken from Thorson's work. Like, I fully had the order of cause and effect completely wrong here.


Chips Theory, In Brief: Doctor Who’s Unresolved Aesthetic Debate — Tamsyn Elle

I swear that I am not going to keep linking to blogs by lifeforms that have been bred for thousands of years to sustain themselves solely on ever-more incomprehensible Doctor Who criticism but I needed to share the chips–soufflé spectrum model of media analysis with the world.

Note how chips becomes synecdoche for an ordinary life, an inescapable pillar of the daily grind as fundamental as work, home, sleep, and commuting. Chips is what the rest of us do.

There’s an inescapable class element to this. Science fiction is often accused, with some justice, of being a middle-class genre; even when it’s militaristic our focus tends to be on the officer class. A good deal of the value of Rose in the first place is that, as a working-class soap opera type of character, she does not at first seem to belong on Doctor Who. Indeed, often that’s part of her quality: in her first episode it’s her experience in her school’s gymnastics team, silver medal, swinging on a chain, that saves the day with straightforward physicality where the Doctor’s talk of Shadow Proclamations and anti-plastic failed to hold sway. Then she’s befriending the lowly mechanics and servant girls who turn out to be key to their respective stories.


Thoughts on IDW Transformers: The Furman Era — Bobby Schroeder

A nice little piece laying out some interest aspects of the Transformers series2 through the lens of a particular run of comics including the historically weird handling of gender and how later IDW comics corrected that.

When James Roberts began writing the fan favorite series More Than Meets the Eye, he wanted to explore the subject of Transformer romance. And if Furman said that there aren't any women on Cybertron, then, well… I guess he's been left no choice but to declare it the robot yaoi planet! His hands were simply tied, folks.


Media ∩ Technology

The Logistics of Road War in the Wasteland — Bret C. Devereaux

Look. If Bret Devereaux is going to keep writing articles analysing the practicalities of speculative fiction tropes I am going to keep linking to them.

Complicating this picture further are spare parts. Without the ability to manufacture bespoke spare pairs at scale, keeping these vehicles in operation is going to be very difficult. So we ought to expect to see, alongside an emphasis on fuel efficiency, a preference for robust, easy-to-maintain platforms that use widely available civilian vehicle components, rather than hard to source or scavange military components. After all, asking your local junk mechanic to service the AGT1500 gas turbine engine in an Abrams MBT is going to be a pretty big ask, compared to finding the parts to fix the engine of yet another Toyota pickup.


Why We Don’t Have UIs Like the ones in Neon Genesis — Zemnmez

Damn now I want a vector-based display again.

Everyone who works with interfaces should be looking at these and asking themselves why interfaces don’t look like this. Where did we go so wrong? Where’s the big fuckup where we ended up with like, windows 95 instead of this shit? This is something I have devoted untold and definitely irresponsible brain space to. And honestly, the best answer I have is very simple, but I think also a kind of interesting look at how our tools shape the designs we make.


I wasted $410 recreating a fake website that shows up for 10 seconds of a TV show almost no one remembers — Alyx Wijers

Wijers doing an extremely important job 🫡

When I watch TV and movies, I sometimes notice web addresses. I’ll usually note them down, and look them up later to see if they’re registered. In most cases, they’re registered by the studio or network or whatever and just redirect to their site. AMC, for example, keeps www.savewalterwhite.com up from Breaking Bad (now 12 years after the series ended, as of the time of writing), and www.cometlist.net up from Halt and Catch Fire.


Technology

Xerox scanners/photocopiers randomly alter numbers in scanned documents — David Kriesel

Quite an old one but recently linked to by Tina. What if your scanned just randomly changed numbers around in the scanned image? What multiple models of scanners from the largest manufacturer in the world did that for years without being fixed? There is also an accompanying video.

In this article I present in which way scanners / copiers of the Xerox WorkCentre Line randomly alter written numbers in pages that are scanned. This is not an OCR problem (as we switched off OCR on purpose), it is a lot worse – patches of the pixel data are randomly replaced in a very subtle and dangerous way: The scanned images look correct at first glance, even though numbers may actually be incorrect. Without a fuss, this may cause scenarios like:

  1. Incorrect invoices
  2. Construction plans with incorrect numbers (as will be shown later in the article) even though they look right
  3. Other incorrect construction plans, for example for bridges (danger of life may be the result!)
  4. Incorrect metering of medicine, even worse, I think.

I Want to Love Linux. It Doesn’t Love Me Back — Fireborn

First of a series of posts on this blog dealing with the hell that is trying to use Linux while blind.

Linux claims to support blind users here. It even ships the tools. But using them? Getting speech or braille output when you need it most? That’s a punishing mess of driver quirks, missing defaults, audio stack failures, and layers of modern regression hidden under the surface.


Avoiding becoming the lone dependency peg with load-bearing anime — Xe Iaso

Anubis is a piece of software that has become popular for helping block unfriendly crawlers that have been overloading a lot of sites to grab data for neural network training without care for the damage they are doing to the web. It also has an cartoon character mascot that has proven useful for weeding people who like being dismissive pricks.

At some level, I use the presence of the Anubis mascot as a "shopping cart test". If you either pay me for the unbranded version or leave the character intact, I'm going to take any bug reports more seriously. It's a positive sign that you are willing to invest in the project's success and help make sure that people developing vital infrastructure are not neglected.


Technology ∩ Capitalism

Why Bell Labs Worked. — Areoform

Seen via a post by Fabio Manganiello going further into Bell’s treatment of people compared to what companies and academia both demand of them now, shared by Xerz and boosted by Jennifer Glauche which also inspired the next post by Elilla.

Reportedly, Kelly and others would hand people problems and then check in a few years later. Most founders and executives I know balk at this idea. After all, "what's stopping someone from just slacking off?" Kelly would contend that's the wrong question to ask. The right question is, "Why would you expect information theory from someone who needs a babysitter?"


Deep in Mordor where the shadows lie: Dystopian tales of that time when I sold out to Google — Elilla

On the empty promises and dehumanisation of Google.

It's the little things that bugged me, how people would eat the free candy or have a bowl of cereal and just leave trash and dirty dishes everywhere for the cleaning ladies (contractors) to deal with; more than that the way nobody looked at them or said “thank you”. We Brazilians have a social class for that, a social code underlying that studied invisibility, I knew what this was: these were maids. Servants. The women in my family, my friends at school. The “campus” was pretty open and my then-wife visited it a few times; it creeped the Fuck out of her, the distinction between people and non-people.

  1. Virtual Lab is a body-horror falling-block game that used the Virtual Boy’s 3D effects for the self-insert mascot character’s breasts. ↩

  2. I was going to mention her talking about the distinction between the Budianskian and Furmanist modes of Transformers stories but while she does allude to this she keeps it accessible for those who don’t want to know a bunch of fandom jargon and just mentions the distinction as “robots in space” stories versus “robots in disguise” stories. ↩



I got an MRI done a little while ago and I decided to download the data for it from the clinic just because I could and apparently the KDE Dolphin file browser has a thumbnail for MRI data files

A thumbnail for a computer file depicting a brain.

Caoimhe

What I’m reading vol. Ⅶ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

First some website bookkeeping: I’ve updated the homepage to emphasis my original bog posts a bit more and keep them on the page longer and moved the reviews and posts from other accounts that I’m mirroring to their own section. The bog and beag pages are left as-is at the moment. I am considering modifying them and their respective Atom feeds as well to have the default be without the mirrored posts but that will need a bit more consideration because I don’t want to create lots of broken links or cause a million posts to reappear in people’s newsreaders. I also updated my memorial page for Cohost a bit.

For some music: I had lovely time recently watching a couple of NPR’s Tiny Desk Concerts with my partner in bed. Here is the Moses Boyd one:


Digital media

Music CDs Are the Best — The Virtual Moose

Of course I ripped all the cds to my plex server while reading the booklets, something I really enjoy from the cd era. What no one told me though, and I guess why would they, is that Sarah McLachlan’s album Surfacing is a fucking multimedia cd-rom??

I am not the only person right now who is getting nostalgic about going back to a website and I think there’s a similar joy in old multimedia CDs from before everything got squashed into completely standardised forms for either social media site or streaming services. Little experiments, surprising features, discs that acted as different formats depending on what was reading them. While I was updating my Cohost page I threw in a short little bit of Javascript just embedded in the body of the page for a little bonus feature when you play the Love Honk audio. That wouldn’t actually have been possible even on Cohost itself but I think just quickly throwing a little unique interaction is carrying on that spirit that CSS crimes also gave us a glimpse of.

And in the golden age of multimedia discs you could have, as Virtual Moose discovered, little bonus programmes in your music album, hidden audio tracks if you put your PSX CD into a CD player or a a full XBox game demo on in your movie DVD alongside the minigames you could play on a normal DVD player with a remote.

This is turning into its own post so I will move on.


Retro Achievement Mastery 168 - The Yakyuuken Special - Kon'ya wa 12-kaisen!! — Lizstar

Lizstar is nearly defeated by a pornographic rock-paper-scissors game for the Saturn.

This is Rie Kouno. My villaness. Pretty sure she’s the oldest girl here, actually. She’s got this like, Japanese Housewife energy to her, as if 22 is 45 years old, cause this game is make by perverts with bad views on women. But anyway, my strategy did not work on her. I left the game playing, on double speed, for two days. And I did not win. By the end of the five days, I had assumed I had run through the entire RNG track, and it didn’t work. So I tried on Paper. Still nothing, two days later. Scissors? Nothing.


Kim-Venture (1979) — Jason Dyer

Seen via Misty De Méo. A not-quite Colossal Cave Adventure for a computer with a six-digit LCD calculator display and just over a kibibyte of memory.

Just like a common hack for modern machines is to see if it runs DOOM, programmers of the late-70s-early-80s tried to make every computer play a form of Adventure, even ones that were absurdly limited. Leedom cheekily explains in an interview he managed to fit “26 rooms, 2 treasures to take back, a magic rod, a magic word, a dragon, a bird, a whole bunch of stuff in there and I crammed it all into 1,185 bytes. I left 3 bytes over for user expansion.” In a different interview Leedom explains he used compression rather like the Z-Code of Infocom or the A-Code of Level 9.


Sci-fi nerd shit

Doom’s Tears: Remote Villainy and Real Violence — Jack Elving

An old musing on the line between supervillainy and real evil.

I think one can argue that the reason Gwen Stacy’s death is romanticized has to do with that simple and basic genre convention being overturned. The staging of Gwen Stacy’s death is extremely weird and odd for several reasons. But at it’s core, the logic of the scene is simple: Villain kidnaps Girl — Hero chases after Villain — Hero confronts Villain — Villain endangers Girl — Hero at last moment catches her.


The Second Russian Epoch, on Trial — The Hands Have Eyes

The first post of a new blog looking at Russel T. Davies’ return to writing Doctor Who. There is a second post too titled A Theory of Hyperpop Television. This is very much in the weeds of the fandom discourse and uses fandom terminology that is so obscure that I am not sure if some it is familiar to anyone outside of one specific Discord server. To explain two of the terms used: The Cambrian Era is a tongue-in-cheek term for the run of Doctor Who from 2005-2021 in reference to the geological Cambrian Era because the show was being produced by BBC Wales1 and the Lupine Era is the run of Doctor Who from 2024 to the present because it is now being produced by a studio named Bad Wolf2.

Obviously, at the end of the day, when the official (and snarky unofficial) histories are written up, the truth will out that this was an era incapable of living up to being all things to all people. And perhaps that was the only bar it was ever going to be allowed to define success as clearing. The historians may well conclude (the snarky ones, anyway), that it was simply not capable of being enough things to enough people to justify the ambition of attempting to appease the rads, the trads, the frocks, the guns, the soufflés, the chips, the centrists and the left (while the official histories will have a fascinating time explaining why the series cancellation was the result of a barnstorming success).


A little more serious

Over five decades, here's how voters have shifted away from the major parties — Casey Briggs et. al for the ABC

An animated visualisation of the steady drift away from the two major parties in Australian elections. I also appreciate that they have a legible non-animated version of the article in place if you don’t have Javascript enabled.

Liberal MP Keith Wolahan agrees: "When I speak to colleagues in Canberra, even those on really healthy margins, they're looking over their shoulder thinking, is my seat facing a contest that hasn't happened before?"


Futa_FAQ.md: My lesbian experience with topping without testosterone — Elilla

Seen via Rabbit’s link roundup, which also happens to link back to one of my link roundups. You are now trapped in an infinite loop.

Unter testosterone, spontaneous libido was urgent, almost like having to pee, or having to crack your fingers when they're tensely uncomfortable. It would happen without rhyme or reason (I recall getting hard for no reason in the midst of trying to understand math textbooks (and I don't even like math (ok δ looks kinda fuckable but…))).

Under estrogen, my responsive libido frequently needs to be fed before it can exist.


The History of Women’s Public Toilets in Britain — Claudia Elphick

Also via a link roundup from Rabbit.

This lack of access to toilets impeded women’s access to public spaces as there were no women’s toilets in the work place or anywhere else in public. This led to the formation of the Ladies Sanitary Association, organised shortly after the creation of the first public flushing toilet. The Association campaigned from the 1850s onwards, through lectures and the distribution of pamphlets on the subject. They succeeded somewhat, as a few women’s toilets opened in Britain.


The Serious Zone

‘It left me traumatised’: The barriers to accessing transgender healthcare in Ireland — Conor O’Carroll

If you haven’t had enough misery reading about Ireland’s treatment of trans healthcare from me Conor O’Carroll has written a series of three articles in The Journal after having interviewed Irish trans people about healthcare and DIY.

Muireann, who was in her early 20s at the time, explained that her family weren’t overly supportive and that she had come out to her friends.

She was told that she had to be out publicly full-time in order to access healthcare.

[…]

When Muireann got her family on board, she rang the clinic and was told she could now see an endocrinologist. Fifteen months passed without any word from the NGS, despite monthly calls from Muireann and enquiries from her GP on her behalf.


The Gist: Trans rights are Data rights — Simon McGarr

A solicitor looking at some recent legal rulings related to trans rights.

In other words, the CJEU, building on the earlier findings of the European Court of Human Rights' privacy law decision in the Godwin case against the UK, recognises that the issue of recognising, recording and otherwise processing a person's gender identity is an issue of data protection.

This is not a novel application of data protection law. It is exactly what the law has always been intended to achieve- it is a recognition that, all other things being equal, a person should be empowered to be the primary author of their own life.


People Are Losing Loved Ones to AI-Fueled Spiritual Fantasies — Miles Klee

I think I saw David Gerard sharing this one.

The infinite “yes, and…” machine does not mix well with people going through mental health crises it turns out.

“I have to tread carefully because I feel like he will leave me or divorce me if I fight him on this theory,” this 38-year-old woman admits. “He’s been talking about lightness and dark and how there’s a war. This ChatGPT has given him blueprints to a teleporter and some other sci-fi type things you only see in movies. It has also given him access to an ‘ancient archive’ with information on the builders that created these universes.” She and her husband have been arguing for days on end about his claims, she says, and she does not believe a therapist can help him, as “he truly believes he’s not crazy.” A photo of an exchange with ChatGPT shared with Rolling Stone shows that her husband asked, “Why did you come to me in AI form,” with the bot replying in part, “I came in this form because you’re ready. Ready to remember. Ready to awaken. Ready to guide and be guided.” The message ends with a question: “Would you like to know what I remember about why you were chosen?”

  1. Cambrian is derived from the Latin Cambria, meaning Wales, from the Welsh Cymru. ↩

  2. The era of the original run of Doctor Who from 1963-1989 is, of course, the Beebeecene. ↩


When I post reviews to my blog I include a star rating in the title with star characters like this: ★★★☆☆

I want this not to be a mess for screen readers so I decided to wrap them in spans with ARIA labels like this: <span aria-label="3 stars">★★★☆☆</span>

But trying to look more into accessibility I am finding people saying that aria-label should only be used on interactive elements or elements with a specific role assigned and not general text but then I am not sure what alternative to use here to make this work better. Does anyone have any specific suggestions for what to do here or good general guides on accessibility to read?

Also is there any practises over labelling things that are correct names but that screen readers are probably going to struggle with. E.g. the new Gundam show is officially called “Mobile Suit Gundam GQuuuuuuX” which I understand is meant to be pronounced something like “G-Quacks” or labelling “Kevin Can F**k Himself” to be clearly pronounced without the censoring.

Another weird question I’ve thought of: Does having a span in the middle of a word (e.g. if yo were doing some decorative text on just part of a word for whatever reason) fuck up accessibility? Or even bolding or italicising parts of words? Like if I write unimportant to indicate I am emphasising that part of the word?


Caoimhe

Fairphone

The last time I bought a new phone was two years ago. My old One Plus 3 that I had gotten three years prior was becoming finicky, slow, was showing a lot of visible wear around the edges of the glass and finally the power button had broken. I ran out of batteries while taking photos with and was only able to turn it back on by powering on into debug screen by plugging it into my PC while holding down the power button and once I got it on I couldn’t unlock the screen without plugging it in or out of something.

After a little bit of looking around I settled on getting an Fairphone 4. It’s pricer than other phones with similar specs but I do not care about having a top of the line phone and the company who makes it is trying to be less evil than other companies, using recycled, fairtrade materials and such and the phone itself has swappable parts if things get damaged and they promise security updates for longer than most other companies do.

They’re certainly not perfect. I know the Graphene OS developers are not impressed by Fairphone’s security policies and spare parts for different Fairphone models are not compatible with each other; I cannot upgrade my Fairphone 4 with parts for a Fairphone 5. But they do still keep selling replacement parts for older models after newer ones are released. They still sell parts for the Fairphone 2 which was released in 2015 so hopefully I can keep this phone going for a long time even if I drop it one too many times and have to repair it. I am quite clumsy.

In fact in the time I have had this phone I have already dropped it many times, including once into the toilet. It seemed fine at first after this but after a little while the screen stopped responding to touch. I had thankfully left bluetooth on and I had with me my fold out bluetooth keyboard and mouse with me and I was able to connect them and use them to shut down the phone to try to prevent any permanent damage.

My phone on a little stand with a mini keyboard and mouse, making a tiny mobile desktop computer setup.
Is this cyberpunk?
Everything from the previous image folded away and stacked on each other. They keyboard is about the same size as the phone when folded up.

When I got home I was able to disassemble the phone with a Phillips #00 screwdriver. I wiped down the parts and left them to dry fully and when I put everything back together the screen was working fine and has been working ever since. A lot of other phones would probably have been more waterproof and able to survive a quick dunk better but being able to disassemble it and dry all the parts thoroughly made me at least feel a lot better about the chances of getting the screen to work again. Thankfully it did, but even if I hadn’t I would have been able to get a new screen and swap it in myself rather than having to pay a specialist to fix it or replace the phone entirely.


Incredible web design from my insurance company. The name field is automatically filled with my account details and is not editable but then fails validation due to the presence of a fada in my name. This is an Irish company. Editing the value of the form with my browser developer tools of course allows me to submit with no problem.

A form with an error calling my legal name invalid.

Caoimhe

Splicing in The Big O’s original intro with FFmpeg… again!

I have posted before about using FFmpeg to restore The Big O’s original intro and also my Jellyfin server. I am going to talk about the former again but first some more detail on the latter.

My Jellyfin server is actually just my desktop, which acts as server for everything on my home network. It has a 12TiB hard drive for storage which is divided up into a few partitions, one of which is my “library” partition of important files I want to keep, and which I make regular backups of, and one of which is my “media” partition that holds the files for my Jellyfin server. The media partition was running out of space (I may go a bit extreme with the bluray rips) and the library had several times more free space than used, so I decided to try to resize them and grow the media partition into some of the library partition’s empty space.

I just used KDE’s built-in partition manager for this, which successfully shrank the library partition but for some reason failed when trying to grow and move the media partition. I don’t know why this happened and am just hoping there’s no hardware problems. Nothing from the library partition was lost (and it was all backed up anyway) but the media partition was gone and so I’ve had to rebuild my Jellyfin library. This is not a huge deal it’s just been a little time-consuming but one of the things that was lost was, of course, my edited Big O episodes, which meant that I had to redo splicing the original intro in. But I had a fresh head again, free of the frustrations accumulated while trying to do this the first time, and I decided to do it better and actually get to grips with FFmpeg’s filter syntax. Here are the commands I ended up with:

mkdir -p tmp
mkdir -p out
for v in The\ Big\ O*.mkv
	set b (basename "$v" ".mkv")
	ffmpeg -i intro.webm -ss 00:01:12.02 -i "$v" -filter_complex "[0:v] scale=1424:1080,setsar=1:1 [intro]; [intro][0:a][0:a][1:v][1:a:0][1:a:1] concat=n=2:v=1:a=2 [outv][outa];" -shortest -map "[outv]" -map "[outa]" -metadata:s:a:0 language=eng -metadata:s:a:1 language=jpn "tmp/$v"

	set subs "$b.ass"
	ffmpeg -itsoffset -4.42 -i "$v" "tmp/$subs"
	ffmpeg -i "tmp/$v" -i "tmp/$subs" -shortest -map 0 -map 1 -c copy -metadata:s:s:0 language=eng "out/$v"
end

Let’s break down what’s happening here. First I create two directories, tmp and out. tmp is where temporary working files are going to be written to and out is for the final files when we’re finished processing.

Then loop over each episode matroška file with the file name for each one assigned to $v inside the loop. The file name without the file extension is set to the variable $b. I’m using a Fish shell here rather than Bash so the syntax is a little different to Bash.

Then the big command. We pass in the first input, intro.webm, which is the intro that I downloaded off of Youtube. Our second input is the episode, with the seek parameter -ss telling FFmpeg to skip to one and twelve point zero two seconds in when reading it. This is, unintuitively, set before you specify the input it applies to, not after.

Then the big -filter_complex. This takes a big string that takes filter definitions separated by semicolons. Each filter has input and output streams identified by labels in square brackets.

The first filter is [0:v] scale=1424:1080,setsar=1:1 [intro]. Its input is [0:v], the video stream from the first input1, i.e., intro.webm. It then resizes it to a resolution of 1,424×1080 pixels and sample aspect ratio of 1:1 and outputs it to a new stream labelled [intro]. The [intro] stream now has the same resolution as our episodes which will allow us to concatenate them in the next filter.

The second filter is [intro][0:a][0:a][1:v][1:a:0][1:a:1] concat=n=2:v=1:a=2 [outv][outa]. Let’s start in the middle here. concat=n=2:v=1:a=2 means that we are going to concatenate two segments (n=2) which each have one video stream (v=1) and two audio streams (a=2). Those two audio streams are going to be the English and Japanese dubs.

The inputs for this filter are [intro][0:a][0:a][1:v][1:a:0][1:a:1], which can be divided into our two segments—[intro][0:a][0:a] and [1:v][1:a:0][1:a:1]—which each have one video and two audio streams specified. The first segment has our resized intro video stream, [intro], and [a:0] is the audio from our first input (the intro again) specified twice because we are going to combine the same intro audio with both the English and Japanese episode audio. The second segment has the video and two audio streams from our second input file; the episode itself and its English and Japanese audio tracks.

The concatenation then has two output streams, [outv][outa], the video and audio.

Then the rest of the command: -shortest makes sure that the output of the command is equal to the shortest stream in the output, i.e. if your output has five minutes of video but only two minutes of audio then the output will be two minutes long rather than five minutes of video with three minutes of silence. I think that shouldn’t really be needed here but I was using it while testing and forgot to remove it and thought it would be dishonest to take it out for the post when it was what I actually ran.

-map "[outv]" -map "[outa]" defines what streams to include in the output, which here is simply the output streams of our concatination.

-metadata:s:a:0 language=eng -metadata:s:a:1 language=jpn labels the audio output streams as being English and Japanese, respectively, so that media players can display that information.

And then the last part of the command is ouputting the video to the tmp folder.

This gives us output files with the original intro with both dub tracks preserved, which is more than I had last time and with a lot less processing. But if I am going to include the Japanese audio I probably also want subtitles for that and unfortunately the -ss parameter does not seem to correctly offset the subtitles. If I want subtitles with correct timing I will have to fix them with another command.

First set a variable, $subs to the file name we want for the subtitles in the Advanced SubStation format.

Then read the original episode file into FFmpeg again with a negative offset of 4.42 seconds (-itsoffset -4.42) and write the subtitle data to a file in the tmp folder.

The last command is taking in out output video and the subtitle file and recombining them, using another metadata command to label the subtitle track as English, setting the codec mode (-c) to copy so that the audio and video do not get re-encoded and writing the finished file to the out folder.

I didn’t bother fixing the chapters this time.

  1. FFmpeg indexes from 0, so [0:v] refers to the video stream from the first input, [1:a:0] refers to the first audio stream from the second input, etc. ↩


Caoimhe

Font optimisation

I have done some tweaks to fonts on the site. In particular I optimised the fonts I use for headings on the homepage using the pyftsubset command in Font Tools to consist only of the characters needed to display the text used on the site and no more. This should reduce the download footprint of the site a bit.

I don’t remember who I saw link to pyftsubset originally so can’t give credit for where I saw it, unfortunately.


Caoimhe

What I’m reading vol. Ⅴ

This roundup is going to link to and quote articles dealing with sex, kinks, sexual assault and also fascism at the end.

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Taking a page from Mike I am going to include a suggested piece of music to listen to while you read this; the first track from my Cohost song of the day playlist, the title theme from Robocop for the Game Boy:

I’ve divided this into two sections, the first for people who I haven’t linked to as part of these roundups before and the second for people who I have.

New challengers

Hermit Crab Intimacy (On Visitors) — Rabbit

Home, intimacy and vulnerability.

When I live somewhere, I feel like my life saturates it and sinks into the walls, like cigarette smoke. Every strong emotion I feel creates an energy that overtakes the room for a while; if I had a big hard talk with my partner in the old living room, I knew it was over when we moving upstairs to relax in bed, and the feeling would be left behind. And over time, the kitchen isn’t just the place where I cook, it’s where I care for my loved ones; the bedroom isn’t just the place where I sleep, but where I connect with my partner and feel safe at night. The house is not just a house. It is a home, a being, a body that I have a relationship with that requires love and care and patience. Cleaning my house feels like also shoveling out all of that psychic debris. It is an act of care for the place, and an act of care for myself. I have always been part of a house; my home has always been part of me.


design thoughts: let things be rare — Joe Wintergreen

Some game design thoughts.

Some things are cool because they’re rare, and that’s the whole reason. You can implement a cool feature, say “wow, that’s cool, we should make that happen more”, and just like that, it’s not cool. It’s no longer a story players tell each other. The first time you play Splinter Cell Conviction, and you’re hanging off the side of a building waiting to pull another guy out a window, and a particularly savvy guard actually leans out a window and checks the side of the building – that’s amazing! What a smart, weird thing to do! But then they do it again, always. It’s not reactive or rare, like you thought, so it’s no longer cool. You won’t be saving that clip.


I Love Niche Problems — Caoimhe

I am not a Formula One girlie but Caoimhe’s passion for saving and sharing the history of it is inspiring.

Long story short, I've been building up a rather popular niche in the high seas community. My archive of F1 media is solid, comparable to plenty of other buffs around the world, but I've made a commitment to sharing it as widely as possible, for as long as possible.


The Digital Packrat Manifesto — Janus Rose for 404 Media

Relatedly, a celebration of media hoarding. Anything on any streaming service, on a website, can be taken away without notice. What’s yours is yours, and also organising a Jellyfin server is very satisfying.

Sure, there are websites where you can find some of this material, like the Internet Archive. But this archive is mine. It’s my own little Library of Alexandria, built from external hard drives, OCD, and a strong distrust of corporations. I know I’m not the only one who has gone to these lengths. Sometimes when I’m feeling gloomy, I imagine how when society falls apart, we packrats will be the only ones in our village with all six seasons of The Sopranos. At the rate we’re going, that might not be too far off.


Johnson. A Plane Man — Hyphinett

A little downpour game made from a Ryanair Boeing 737 safety manual :)


Returning champions

A Hackable, Custom, Magic Wand (Plus) Board — Kore

Kore’s third post about hacking a Hitachi wand, as previously seen in the first and fourth roundup.

So: the Hitachi Magic Wand is a very good device. It, however, has very little granularity in how strong it is. Even the newer Magic Wand Plus only has four, non-customizable settings.

I don't like this and want to fix it. In the process, I'll also be adding bluetooth connectivity, because I thought that was pretty funny.


The Cuddled Little Vice — Elizabeth Sandifer

I have previously linked to Sandifer’s writing on Doctor Who and inane September the 11th memorial comics but another one of her long-term projects is The Last War in Albion, a sprawling series of essays which she describes as “a history of British comics. More specifically, it is a history of the magical war between Grant Morrison and Alan Moore”. After a long hiatus she is back with a book-length article on Neil Gaiman. This is obviously written in light of the sexual assaults that have come to light, but is neither a polemic nor trying to turn his works into some sort of gotcha against him or his fans. It is a clear-eyed and fair assessment of the merits and flaws of his work woven with the story of the man himself and of his craft, his cynicism and his actions.

When one talks about Sandman being foundational to millions of people, one is talking not exclusively but substantially about teenage girls of the 90s and 00s who were into goth subculture. And a fundamental part of its appeal is that its best character—the one who gets all the good lines and who the reader is all but forced to love—looks like them. In contrast to Cinnamon Hadley, who was a bold fashion and makeup experimentalist, at the end of the day dressing up like Death required little more than a black tank top, black jeans, some boots, a cheap piece of jewelry, and a bit of practice with an eyeliner pen. It is difficult to think of another iconic character in comics that was routinely first encountered by people who were already cosplaying her. It’s no surprise that many of those young goth girls passionately identified with her, nor that they became adoringly loyal fans of her creator—fans that he would spend the rest of his career both catering to and preying upon.


The Strange Armor of Dragon Age: The Veilguard — Bret C. Devereaux

Last time I linked to two of Devereaux’s pieces and am doing so again. Following on from his piece about sci-fi body armour we have this analysis of the armour of Dragon Age: The Veilguard.

And that actually makes a fair bit of sense: if you expect to be fighting in close combat, you hardly want anything on your person adding encumbrance or weighing you down or providing an extra easy hand-hold for someone to grab and pull at. And more to the point, your ancient or medieval soldier doesn’t need them because he has nothing to put in a bag or pouch that he needs to grab in combat. His primary weapon and shields, after all, are carried in his hands, his armor is worn on his person, his backup weapon is in a scabbard at his waist…and that’s it. Archers might carry arrows in a quiver, of course and slingers stones in a small bag, but that’s just one small container of clear and distinct purpose, generally at the waist. This is just a design feature one does not find in the kind of technological environment posited in these games.


Coinage and the Tyranny of Fantasy ‘Gold’ — Bret C. Devereaux

And the second on the logic of “gold” as a generic currency in fantasy settings compared to historical reality of money and coinage.

But part of the reason these coinage systems work they way they do is that they operated in societies in which a lot of economic activity was non-monetary or at least, non-coinage. And here, we should go back to our ‘money’ vs. ‘currency’ or ‘coinage:’ remember, money came first. So let’s say you live in a small community – like a peasant village working beneath a large landholder’s manor – and you need to transact some things, but you don’t have any actual silver because coins are scarce and valuable (and being a subsistence farmer, you grow most of what you need yourself), how do you do it? Well, one way is to do it ‘on accounts’ – you need wool and so when the shepherds come down from the hills, you trade for some of their wool during the shearing with a family you know and both you and they make a mental note that you owe them for the wool. You might express that amount of debt in silver (as a unit weight – see how we get to coinage as a pre-measured weight of silver?) but there’s no reason to measure out silver (even if you had any) because you see these folks every year and next time they’ll ask you for some grain and so on.

Note that this is not the same as the concept of ‘barter’ – there is, in fact, a notional ‘money’ intermediary, it’s just not a physical coin or bill, its expressed as an account, a purely notional unit of value.


The Quietly Coercive Nature of "Vanilla" Sex — Devon Price

Following on from linking to a bunch of his writing this piece from Devon Price that made me reconsider my relationship to sex a bit and do some self-reflection pushed me to start moving forward with trying to get bottom surgery, something I had previously considered but put off.

I think one of the biggest problems in how people conceive of diverse sexualities is by attempting to place all sex acts upon a single hierarchy from "extremely kinky" to "tame." Under this framework, activities like PIV and oral are viewed as neutral precursors to the racier and more extreme forms of sex that a person must "work themselves up" to – and this obscures that those supposedly neutral sexual activities can be both incredibly exciting & fulfilling to some, and downright disturbing or traumatizing to others.

[…]

According to the Vanilla-to-Kinky Staircase Model, boundaries can only be drawn hierarchically: you can only say no thanks forever to sexual acts that are more “extreme” and higher up on the staircase than the ones you’ve already engaged in. This means that kinky people often feel coerced into sexual acts that do absolutely nothing for them, and non-kinky people are expected to like anything and everything that their social group considers to be ‘standard’ sex.


AI and Esoteric Fascism — Baldur Bjarnason

Last time I linked to an economics-based analysis of the popularity of software development frameworks. This time fascism, yay 💖

These “bonkers” ideologies are integral to the fascist project as a rationale for atrocities and destruction. They are a belief system that promises a bright future to the selected people and provides them with a systemic rationale for letting mass death happen as “AI” will replace the workers.


Caoimhe

Splicing in The Big O’s original intro with FFmpeg

I have an updated version of these commands in a new bog post.

I have been rewatching The Big O with my partner from bluray rips and as nice as it is to watch it in so much higher quality than when I saw it as a kid but the bluray release lacks the original iconic intro, which is presumably related to the fact that it’s basically Flash by Queen over the visuals of the intro for Ultraseven.

I know enough FFmpeg to be a danger to myself so I decided to spend far too much time banging my head against my keyboard until I managed to splice the original intro into all the episodes. There was a good bit of trial and error and fixing things and adjusting commands but I decided to document a cleaned up version of the steps mostly as a reference material for myself if I decide to do something like this in the future but if it helps anyone else then that’s cool.

What I have below is definitely not the best way to do this. I ended up reprocessing the same videos multiple times which is inherently going to result in a loss in quality and I lost information like subtitles and the Japanese audio track by converting from Matroška files to plain MPEG-4s but I wasn’t using those anyway.

1. Prepare the intro

I used yt-dlp to download the intro from Youtube as it wasn’t included in the bluray files and then blew it up to the same resolution as the bluray rips, 1424×1080.

yt-dlp 'https://www.youtube.com/watch?v=s7_Od9CmTu0'
ffmpeg -i The\ Big\ O\ Opening⧸Intro\ Theme\ \[720p\]\ \[s7_Od9CmTu0\].webm -vf "scale=1424:1080,setsar=1:1" intro.mp4

2. Preparing files

I copied all the episodes that had the intro I wanted to replace into a folder. Episodes one and two of the first series and episodes one, eight and thirteen of the second series have special intros so no processing needed to be done on them. For step 4 it turned out that spaces in the filenames broke the command and I couldn’t figure out how to properly escape them so while preparing the files also remove any spaces or other characters that might cause problems from the filenames.

3. Strip the existing intro

I loaded episodes up in Kdenlive just to check the exact length of the existing intro on the episodes and found it to be 1′12″ and so wrote a command to iterate over all the files and write out an MP4 version with the English audio track (the second audio track in the file, but mapped as 1 in the command as FFmpeg indexes from 0) with that much time cut from the start.

I use a Fish shell rather than Bash. If you use Bash or a different shell you will need to adjust the commands.

for v in *.mkv
	set b (basename "$v" ".mkv")
	ffmpeg -i "$v" -ss 00:01:12.01 -map 0:v -map 0:a:1 "$b-nointro.mp4"
end

There were a couple of episodes where it turned out that there was still one frame of the old intro left at the start so those had to be reprocessed with the start time set to 00:01:12.02.

4. Splice in the original intro

I moved the downloaded intro file into the same folder as the episodes and spliced it into the files. This broke when there were spaces in the filenames and I wasn’t able to escape it properly so I ended up just stripping spaces out and renaming the files back with KRename afterwards.

for v in *-nointro.mp4
	set b (basename "$v" "-nointro.mp4")
	ffmpeg -i intro.mp4 -i "$v" -filter_complex "movie=intro.mp4, scale=1424:1080 [v1] ; amovie=intro.mp4 [a1] ; movie=$v, scale=1424:1080 [v2] ; amovie=$v [a2] ; [v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]" -map "[outv]" -map "[outa]" "$b-intro.mp4"
end

5. Fixing chapter metadata

The episodes had some chapter metadata dividing up parts of the episode, with the first one covering just the episode intros, which cutting out that part of the video removed. I decided to fix that with the versions with the restored intro, even though obviously I am never actually going to skip it in practise. The first step of this was outputting the metadata to a text file.

for v in *-intro.mp4
	set b (basename "$v" "-intro.mp4")
	ffmpeg -i "$v" -f ffmetadata "$b.txt"
end

I then manually adjusted the metadata entry to restore the Chapter 01 entry, putting it above the existing chapters in the file. Most of them had their Chapter 01 entry wiped out so I just added it in above the Chapter 02 entry, though some of them still had a Chapter 01 lasting just a few milliseconds so for those I just modified the END time for it. The new intro was 1′7.61″ which meant a 67,610ms timestamp. I also changed the START entry for every Chapter 02 to 67610 to match.

[CHAPTER]
TIMEBASE=1/1000
START=0
END=67610
title=Chapter 01

Once they were all updated I applied the modified chapter metadata back to the files

for v in *-intro.mp4
	set b (basename "$v" "-intro.mp4")
	ffmpeg -i "$v" -i "$b.txt" -map_chapters 1 -codec copy "$b.mp4"
end

6. Done!

Then I deleted all the intermediary files and dropped the processed files into my Jellyfin server along with the episodes that didn’t need fixing.


Caoimhe

My Jellyfin server

I really like Jellyfin. It’s sort of an open-source Plex. I run a server that is just on my local network that lets me watch films and television shows from my desktop, couch, phone or anything else on my home network and even simply organising everything is very pleasing to me. I spend far too long picking covers and artwork for everything, sometimes even making my own, like when I made an Irish logo and cover for Na Conriochtaí when I couldn’t find one to match the official Irish posters for the other two Cartoon Saloon folklore movies.

My collection for the Cartoon Saloon Irish Folklore Trilogy in Jellyfin.
I went through the official logos from as many languages as I could find to get all the letter shapes to put the Irish logo together for Wolfwalkers.

It has some other really nice features as well like telling you what time something will end at if you started playing now and letting you easily have multiple version of the same film under the same entry, letting you as easily select them as you would the right language for a movie with multiple audio tracks, so you can have both a bluray rip and the Morton Jankel cut of Super Mario Bros. together or the official black and white cuts of Fury Road or Johnny Mnemonic alongside the colour versions.

The Matrix in Jellyfin, showing a scan of the theatrical print as the version selected.
No green tint here!

And of course you can also customise the artwork for all the different media categories, so mine look like this:

My Jellyfin server where all the categories at the top for films, television, music, etc. all feature different versions of Sonic the Hedgehog.

Caoimhe

Migrating comments from Cusdis to Comentario

The story so far: I was using Cusdis to provide a comments section for the bog but it proved to be broken and unmaintained so I replaced it with a self-hosted instance of Comentario.

I am going to walk through what I did to set up Comentario and import old comments from Cusdis. This is not a guide and the scripts that are posted below have serious problems that should be fixed before being used and I am not going to be the one to do that and you would obviously need to change any references to oakreef.ie to your own site.

Subdomain

First of all I needed to have an address to host the Comentario instance at. I chose a new subdomain at comments.oakreef.ie and had to update my Let’s Encrypt certificates to cover that new subdomain. I did not save the commands I used to do that but it was pretty straightforward to do from the command line.

Docker

Then I installed Docker on my server and following Damien’s example with a few tweaks I created my docker-compose.yml and secrets.yaml files.

docker-compose.yml

version: '3'

services:
  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_DB: comentario
      POSTGRES_USER: {INSERT POSTGRES USERNAME HERE}
      POSTGRES_PASSWORD: {INSERT POSTGRES PASSWORD HERE}
    ports:
      - "127.0.0.1:5432:5432"

  app:
    restart: unless-stopped
    image: registry.gitlab.com/comentario/comentario
    environment:
      BASE_URL: https://comments.oakreef.ie/
      SECRETS_FILE: "/secrets.yaml"
    ports:
      - "5050:80"
    volumes:
      - ./secrets.yaml:/secrets.yaml:ro

secrets.yaml

postgres:
  host:     db
  port:     5432
  database: comentario
  username: {INSERT POSTGRES USERNAME HERE}
  password: {INSERT POSTGRES PASSWORD HERE}

Changing the ports configuration to 127.0.0.1:5432:5432 means that the Postgres database is only accessible from the server locally and not publicly available. I also don’t have an email setup for the Comentario instance currently.

Launching the instance is then just a matter of:

sudo docker compose -f docker-compose.yml up -d

Nginx

Then I needed to modify my Nginx config to direct comments.oakreef.ie to the Comentario instance running on port 5050.

server {
	server_name comments.oakreef.ie;

	listen 443 ssl;

	ssl_certificate     /etc/letsencrypt/live/oakreef.ie/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/oakreef.ie/privkey.pem;
	include /etc/letsencrypt/options-ssl-nginx.conf;
	ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

	location / {
		proxy_pass http://127.0.0.1:5050;
		proxy_redirect off;
		proxy_http_version 1.1;
		proxy_cache_bypass $http_upgrade;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection keep-alive;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Forwarded-Host $server_name;
		proxy_buffer_size 128k;
		proxy_buffers 4 256k;
		proxy_busy_buffers_size 256k;
		add_header Cache-Control "private";
	}
}

Importing comments

Once there were a few comments on the new system I used the export feature in Comentario to get a JSON file and looked at how Comentario defined comment data in that. I also manually went through all the comments on the old system and made a basic CSV file of all of them with the author name, date posted, the URL of the post the comment was on and the text of each comment. I then wrote this Python file to take the exported Comentario comments—named basedata.json—and the CSV with the old Cusdis comments—comments.csv—and exported a new file with the combined data in the Comentario format.

There are some problems with this!

  1. When importing data Comentario does not check for duplicates. I ended up creating duplicates of all the new Comentario comments that already existed on the site doing this and had to manually delete them. If you are doing this do not include existing comments as part of the file you are creating to import.
  2. I did not include replies at all. I decided to try importing replies I had made to people as a second, separate, step (see the second Python script below). This made things more awkward down the line. Do everything in one batch.
import csv
import json
from datetime import datetime, timezone
from dateutil.parser import parse
from pprint import pprint
from uuid import uuid4

now = datetime.now()
pages = {}
site_url = 'https://oakreef.ie'
date_format = "%Y-%m-%dT%H:%M:%SZ"

my_id = "ADMIN USER UUID"

with open('comments.csv', newline='') as csv_file:
		csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"')
		for row in csv_reader:
				author, date, url, text = row
				date = parse(date)
				
				if url not in pages:
					pages[url] = {
						'comments': []
					}
				
				pages[url]['comments'].append({
					'author': author,
					'date': date,
					'text': text
				})


with open('basedata.json') as json_file:
		data = json.load(json_file)

domainId = data['pages'][0]['domainId']

for url, page in pages.items():
	page_id = str(uuid4())
	data['pages'].append({
		'createdTime': now.strftime(date_format),
		'domainId': domainId,
		'id': page_id,
		'isReadonly': False,
		'path': url,
	})

	for comment in page['comments']:
		comment_id = str(uuid4())
		data['comments'].append({
			"authorCountry": "IE",
			'authorName': comment['author'],
			'createdTime': comment['date'].strftime(date_format),
			"deletedTime": "0001-01-01T00:00:00.000Z",
      "editedTime": "0001-01-01T00:00:00.000Z",
      "html": f"\u003cp\u003e{comment['text']}\u003c/p\u003e\n",
			'id': comment_id,
			'isApproved': True,
			'isDeleted': False,
			'isPending': False,
			'isSticky': False,
			'markdown': comment['text'],
			"moderatedTime": comment['date'].strftime(date_format),
			'pageId': page_id,
			'score': 0,
			'url': f'{site_url}{url}#comentario-{comment_id}',
			'userCreated': '00000000-0000-0000-0000-000000000000',
			"userModerated": my_id
		})


with open('import.json', 'w') as import_file:
	json.dump(data, import_file)

When that was done I put it away for a while as I wasn’t feeling well and eventually came back to do replies. I, again, manually went through all replies I had made to comments on the old system and made a CSV file with the reply date, URL of the page, the UUID of the parent comment as it existed in the new Comentario system, the UUID of the page the parent comment is on in teh new Comentario system and the text of the reply.

Two things are important to note about this:

  1. It was a pain in the hole. If I had done replies at the same time as the rest of the comments I could have used the UUIDs that I was generating in the script rather than going to find them manually and making them into a CSV.
  2. The initial upload failed as apparently Comentario couldn’t match the page and user IDs to what was in the database and it needed those to be in the import file. I got around this by doing another export and copying the entries for pages and commenters from that into the new one and uploading. This was not a good way to do this! It could have gone badly or had unexpected side effects. Again, if you’re doing this do not import comments and replies as two separate steps!
  3. It still didn’t fully work anyway. My replies did import and do show up on the right pages but they are not nested properly as replies. It’s like looking at a comment section on a very old Youtube video where reply chains are broken and everything just displays as individual comments. I don’t think that I am going to bother trying to fix this as I don’t have that many comments on this site and I think everything reads understandably as it is but if you want to try this approach you will want to figure out a way of not fucking up importing the replies.
import csv
import json
from datetime import datetime, timezone
from dateutil.parser import parse
from pprint import pprint
from uuid import uuid4



now = datetime.now()
site_url = 'https://oakreef.ie'
date_format = "%Y-%m-%dT%H:%M:%SZ"

my_id = "ADMIN USER UUID"

data = {
  "version": 3,
  "comments": [],
}

with open('replies.csv', newline='') as csv_file:
		csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"')
		for row in csv_reader:
				date, url, parent_id, page_id, text = row
				date = parse(date)

				comment_id = str(uuid4())

				data['comments'].append({
					"authorCountry": "IE",
					"createdTime": date.strftime(date_format),
					"deletedTime": "0001-01-01T00:00:00.000Z",
					"editedTime": "0001-01-01T00:00:00.000Z",
					"html": f"\u003cp\u003e{text}\u003c/p\u003e\n",
					"id": comment_id,
					"isApproved": True,
					"isDeleted": False,
					"isPending": False,
					"isSticky": False,
					"markdown": text,
					"moderatedTime": date.strftime(date_format),
					"pageId": page_id,
					"parentId": parent_id,
					"score": 0,
					"url": f'{site_url}{url}#comentario-{comment_id}',
					"userCreated": my_id,
					"userModerated": my_id
				})



with open('reply-import.json', 'w') as import_file:
	json.dump(data, import_file)

My avatar

One last thing is that Comentario doesn’t allow GIF avatars, but I like my sparkly Jupiter. After looking at the Postgres database I could see that user avatars are simply stored as binary data in the table cm_user_avatars with three sizes avatar_l, avatar_m and avatar_s corresponding to 128×128, 32×32 and 16×16 pixels, respectively, so I made some GIFs in the appropriate sizes, converted them to binary strings, and overrode the avatar_l and avatar_m entries in the cm_user_avatars table manually (I left the avatar_s as a JPEG).

UPDATE cm_user_avatars SET avatar_m = '\xBINARY_DATA_HERE'  WHERE user_id = 'UUID_HERE';

This seems to work without any problems and my avatar in my own comments section is sparkly now.

Conclusions

That’s it I hope I don’t have to worry too much about this setup again for some time.


Caoimhe

New comments section with Comentario

I have finally set up a replacement for Cusdis. Following Damien’s example I have set up a self-hosted instance of Comentario.

You can comment with or without setting up an account. If you create an account please don’t forget your password because I do not have an email account set up for it to send out password resets but also please don’t reuse a password because you should not trust me with that.

I will try to transfer old comments from Cusdis over but that won’t happen immediately.

I have also set up a page that has all my bog posts without the stuff syndicated from other sites mirroring the existing Atom feed that does that.




Caoimhe

Cusdis problems

Cusdis appears to not be refreshing my monthly comment allowance so I am not able to approve any new comments. I reported this issue a week ago but I think that the developer is not currently working on the project. I may look into getting up a self-hosted version set up and migrating all existing comments to it but I am not sure when I’ll be able to get that done.


Caoimhe

I’m sorry I’m going to rant about large language model bots now

Instagram have started creating fake accounts that post entirely machine-generated images and text. They will reply to you if you comment under their posts or direct message them.

Update: Apparently the specific account I was referencing here is an experiment from 2023 and doesn’t post any more but still replies to direct messages. People thought it was new due to some recent announcement about bot accounts and I didn’t dig into it myself. The rest of my frustrations with how people treat these things remains.

I mostly want to talk about stuff I like on here and not just add to endless bitching about bad stuff but I just needed to write out some frustrations I have with how people talk about these kinds of large language model bots.

I have seen people posting their conversations with it and attempting to ask it various things about itself and how it was created to try and dig for information on it or just to create gotcha moments they can screenshot and it makes me want to scream.

I won’t link to any of those for a few reasons, but the one I want to state is the same reason that these screenshots make me want to tear my hair out: Large language models are machines that make up nonsense constantly. The text it generates does not have semantic content and least of all meaningful information about itself. It is not worth looking at specific responses it gives. And so because of that: Stop asking it about itself. It is not capable of knowing anything. It takes a processed set of training data and whatever input it has (its prompting that you are not able to see plus whatever text you send it) and then generates output that is a statistically likely continuation of that.

People are asking it what is the diversity of its team of creators and get a response about how it was mostly white people. It doesn’t know that. Again. It doesn’t know anything. It is incapable of knowledge. But it will generate something that is a likely response to a question of this nature. The training data that was used to create it has many texts about how American software development is very white and it will create a response in this vein.

People have asked it who led the project that created it and it spat out a name and people are trying to dig up information from the Linked In profile of a Facebook employee with a similar name.

People are asking it to repeat its prompt and then analysing its response to make judgements on the people that wrote it. This is at least asking it for something that the model actually has as part of its input so it might result in text that is a copy of or close to things it was actually prompted with. But it mightn’t. It could be anything. People asking bots to repeat their prompt is now an established trope in online writing that is pulled for training data for these models and so its output to this type of question will be influenced by the presence of such texts in its training corpus as well.

There is no way to trick these bots into meaningfully divulging information because facts are not a thing that exist to it. You are at best nudging it in a direction where it is more likely to output text that happens to line up with reality. This is more likely to happen for widely known and repeated information that exists in its training data a lot. If you ask it the capital of France it will probably say Paris. But there is no reason to think that its training data contains any meaningful information about itself and even if it was prompted with information like that what information it was given would be entirely under Instagram’s control and why the fuck would trust Instagram to be honest either?


Caoimhe

If don’t want to follow my posts but not see the movie reviews, etc. here’s a new feed for that

I made some updates to the site yesterday, including a smaller feed at /beag.atom1 that only includes posts I write for this site itself, not the ones copied from my Letterboxd, Serializd, Backloggd or Fediverse accounts or things that I repost. Update: It will still include reposts.

I also added some art to the Transy page by Kate Barrett that I had forgotten to.

Otherwise it was mostly some layout and styling tweaks and fixes. Text in dark mode should be a bit brighter now, there’s custom text selection colours and on the homepage there’s one new 88×31 pixel button and an infobox telling you to install an adblocker if you don’t have one.

  1. Beag is Irish for “small”. ↩


Caoimhe

What I’m reading vol. Ⅳ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

Doing another one of these. I still intend on doing rebogs as well and I’ve added some more styling to make reposts stand out from my own words and make a more clear divide between them.

History and science fiction

On Bread and Circuses — Bret C. Devereaux

Devereaux digs into the origin of the phrase “bread and circuses”.

So the surface reading seems clear: he is putting the Roman people on blast for letting their authority over public affairs be taken away, usurped by emperors who promise them bread and circuses (we’ll come to if this is an accurate representation of the history in a moment). They used to have all of this power, the power to bestow offices and armies, but now they cower fecklessly in the wake of imperial slaughter and arbitrary rule.

Except, of course – wait a minute – isn’t the theme of this passage that power is an unwise thing to ask for? The theme of the whole poem is that you shouldn’t be asking the gods for these sorts of things!

The Problem with Sci-Fi Body Armor — Bret C. Devereaux

Also from Devereaux.

Instead, where real armors evolve against threats, fictional armors evolve as a visual language, borrowing the design elements of other fictional armors far more often than they dip into their own historical exemplars, with the result that the whole thing sort of devours itself.

Fiction referencing exclusively other works for fiction rather than looking to the world is something I think about as well from time to time.

Book Review: War with the Newts — Nathan Goldwag

Goldwag reviews a book from the man who coined the word “robot”.

The novel starts with Captain van Toch, a Czech sea-captain in the service of a Dutch trading company, stumbling upon an isolated community of giant amphibians in the Dutch East Indies, living on a single tiny island, their numbers culled constantly by sharks. Van Toch realizes that they’re trainable, and extremely intelligent, and has the idea to plant colonies of them across the Pacific to work as pearl divers. After his death, the Pacific Export Company transitions from luxury goods to mass labor, selling newts across the world as an undersea work force capable of hydraulic and maritime engineering, which results in Newts settling most of the world’s coastlines and becoming an integral part of the global economy. “So now we find the salamanders on the road to their finest flowering; but the human world, too, is enjoying unprecedented prosperity. New continental coasts are being feverishly constructed, new dry land is emerging from where shallows used to be; artificial air support islands are springing up in the middle of the ocean.” (Newts, pg. 165). For all the absurdity, however, Čapek treats his topic seriously. We’re given footnotes, citations, discussions of legal dilemmas and cultural disputes, discourse on the economic impact of newt labor and how it affected different nations and groups, taxonomies on newt evolution and biology. It doesn’t feel like a cheap trick or a gimmick because it’s all done with such care.

Gender

Degendering and Regendering — Talia Bhatt

In short, to acknowledge transmasculinity, a society would have to first admit that manhood—just like womanhood—is a social class and not a 'natural' category. Its people would have to acknowledge that the desire for independence and self-actualization exists within all of us and is not, in fact, stored in the balls.

My Doctor Emailed Me Back — Abigail Thorn in Trans Writes

Thorn outlines very well the fundamental ideological problems in the NHS and how trans healthcare is handled that I think apply very well to the HSE here in Ireland as well.

There are even more serious charges. The coroners’ reports into the deaths of Sophie Williams and Alice Litman said lack of gender affirming care contributed to their deaths. That is to say, it is a matter of publicly recorded fact that the NHS’ failure to provide gender affirming care has contributed to the deaths of patients. Nobody at NHS England has resigned or faced consequences.

Of course panic, misinformation, and mistrust take hold in these conditions! Of course people come to believe the NHS are making secret plots behind closed doors! These conditions are entirely of the NHS’ own making. Slapping a famous trans person’s face on a new outreach program does nothing to address them. As I told Colonel Korn, if the NHS wants to increase trust they should start by apologising.

But the Colonel expressed his bind to me the same way every other NHS senior official I’ve spoken to has. The Department of Health and Social Care tells the NHS how they have to spend their money. The mandate they get from the Health Secretary tells them what services they have to commission: if it says “Ten more transplant wards,” they need ten more transplant wards, and that’s that. If it says “Spend £90m pathologizing trans people,” that’s what he has to do.

This point bears underlining: every single person I have spoken to in the NHS- from local GPs to the National bosses- told me they are powerless. There is nobody at any level of the organisation who takes responsibility for the state the service is in and the suffering it is causing. Every single person blames the person above them, even the man at the top.

Technology

Hitachi Hacking, part two! — Kore

Followup from the first of these posts.

In my last post, I succesfully made a bluetooth/wifi Magic Wand Plus. Unfortunately, though, I completely bypassed the original Hitachi board, which happens to be where all the buttons and LEDs are attached, so it was only usable remotely. To make the physical controls work again, I could either make my own copy of the Hitachi's board, with buttons and LEDs in the same places, or somehow reprogram the original board and make it do my bidding.

The first option requires a lot of measuring, which I find really annoying to do. So, let's hack the Hitachi's microcontroller!

React, Electron, and LLMs have a common purpose: the labour arbitrage theory of dev tool popularity — Baldur Bjarnason

I love economic forces.

MongoDB’s popularity among managers during its peak was largely down to the idea that you no longer needed a database expert. Just throw the data into the document DB puddle and let your existing less-specialised developers handle it. The promise of the document database during the peak of their hype was that you didn’t need to employ as many specialists.

Electron, PhoneGap, and React Native promised to let companies replace their expensive platform specialists with more commodified generalists.

Standardisation in web development lowers costs, increases predictability, and makes the various browsers more interchangeable. It’s a hedge that reduces the individual market power of each browser, but usually in equal degree while increasing the value of the overall web, leaving each browser vendor better off as a result. Their market share might not increase but they have a bigger cut of a larger pie. Incompatibility tends to drive developers and companies to other platforms, reducing the overall pie.

Standardisation of labour, conversely, does not benefit labour.

Open source maintainers are drowning in junk bug reports written by AI — Thomas Claburn in The Register

Everybody hates A.I! Here’s another reason to.

Whatever happens to Python or pip is likely to eventually happen to more projects or more frequently. I am concerned mostly about maintainers that are handling this in isolation. If they don't know that AI-generated reports are commonplace, they might not be able to recognize what's happening before wasting tons of time on a false report. Wasting precious volunteer time doing something you don't love and in the end for nothing is the surest way to burn out maintainers or drive them away from security work.

Seth Larson

Palette swaps — Mabbees

Seeing as I dusted off Pico-8 again recently here’s a little post about doing palette swaps in it.

The concept of a palette swap is drawing something with a different set of colors. It’s a good way to get more mileage out of your PICO-8 sprites. There are a bunch of things you can do with palette swapping

  • create variations on a character
  • make simple looping animations
  • fade in or out of a scene
  • simulate day/night cycles

But what does this mean for us as programmers? How do we represent the concept in code?

Scrapers I block (and allow), with explanations — Seirdy

Technical website bullshit, but something I’ve been meaning to look at setting up for this site too.

Bots I block fall into one of the following categories:

  • Bots that only serve to power adtech on other sites. My site has no ads, but I allow bots such as Google’s AdsBot.
  • Intellectual property snitches. I forbid robots that scan for plagiarism, trademark/copyright violations, brand protection, etc.
  • Robots that power invasive background checks that border on cyberstalking.
  • Scrapers that build datasets to train Generative AI (GenAI), such as large language models (LLMs). I don’t block search clients used by GenAI research assistants; I only block scrapers used to train GenAI models.

Everything else

Saying Gaelic / Gaeilic is ok

I used to be one of the people who “corrected” people about the word Gaelic. I am sorry.

The Irish Language was referred to as both Gaelic and Irish until the Republic was formed. “Irish” was mainly used by academics; “Gaelic” was used by the common people.

The Republic chose “Irish” over “Gaelic” for political/nationalistic reasons.

Pornhub Sees Surge of Interest in Tradwife Content, ‘Modesty,’ and Mindfulness — Samantha Cole in 404 Media

Dahl started an Instagram account in 2023 that parodied tradwife content creators, after her own account was banned by the platform multiple times. Tradwife content (short for “traditional wife) is fetish content, even if the “wife” isn’t showing skin. It’s a fantasy, and always has been, even when it was used to sell ovens to 1960s homemakers.

Laziness Does Not Exist — Devon Price

Kim is the person who taught me that judging a homeless person for wanting to buy alcohol or cigarettes is utter folly. When you’re homeless, the nights are cold, the world is unfriendly, and everything is painfully uncomfortable. Whether you’re sleeping under a bridge, in a tent, or at a shelter, it’s hard to rest easy. You are likely to have injuries or chronic conditions that bother you persistently, and little access to medical care to deal with it. You probably don’t have much healthy food.

In that chronically uncomfortable, over-stimulating context, needing a drink or some cigarettes makes fucking sense. As Kim explained to me, if you’re laying out in the freezing cold, drinking some alcohol may be the only way to warm up and get to sleep. If you’re under-nourished, a few smokes may be the only thing that kills the hunger pangs. And if you’re dealing with all this while also fighting an addiction, then yes, sometimes you just need to score whatever will make the withdrawal symptoms go away, so you can survive.

Playing Both Sides — Mike Egan

A cute story about Star Wars: Battlefront.

But it wasn't just that it was super difficult and took a long time. The hilarious part of all of this is that the fact that there was still a battle going on outside meant that the number one reason we didn't get to destroy the shield bunker was that the match had ended. The AI armies we were ignoring went on fighting their war and reached a conclusion before we were able to deal enough damage to the damn thing.




Caoimhe

Rebogs

I’ve been testing how I want to handle rebogs on this site.

The previous post was rebogged entirely manually. I wrote a post in the normal format for Jekyll and defined metadata for the rebog information to link back to Freja’s website and display her avatar. Now I have to figure out how I want to streamline that process.

For posts syndicated from Letterboxd and such I have a setup where when I build the site there’s some code that checks those feeds and processes them into their own special folders that then get processed and added into the list of posts.

For rebogs though I think I’m going to do it differently and write a script, probably in Python, that I can run from my command line and give a link to a post that will attempt to parse the content of it then write it to a file directly into the same folder as my normal posts but with the extra metadata I’ve defined for for rebogs.


Caoimhe

Webmentions

Continuing to crib from Natalie I have finally gotten around to trying out webmentions for this site.

I had bookmarked her posts on it and made notes and was going to get around to implementing it myself when I thought “hey I’m using Jekyll has a webmentions plugin already been made for Jekyll?” and the answer was of course it had. Adding it was very straightforward and hopefully it works out of the box.


Caoimhe

Removing other Atom feeds

The previous version of this site was originally just the gallery and it included an Atom feed honestly mostly just because I wanted to understand better how RSS worked and it was an interesting and fun thing to make. When I made the bog instead of retiring the old feeds I added a new one and then made a combined one that had everything and as I’ve reorganised things this has become a pain.

And the gallery is a record of past things I’ve worked on. The dates listed are retroactive. Even when I add new things they’re usually pretty heavily back-dated. It’s not really an appropriate use of an RSS feed. You shouldn’t really be adding things that have dates months or even years in the past. And when I add something there now I’m probably going to have a post about it anyway. So I’ve decided to simplify things. I am going to remove the other feeds and redirect them to the one for the bog. If I add something to the gallery there’ll be a post about it and obviously the two podcasts have their own feeds. Because they’re podcasts and that’s how podcasts work.


Caoimhe

I finally added h-entry markup to the bog

I bookmarked a couple of posts from Natalie ages ago about h-entry and have finally gotten around to marking up my posts with them.

Hopefully I didn’t mess anything up and everything parsable now. I should have done this sooner as it was fairly simple but better late than never.

Now I have that set up as well as syndicating posts from my Backloggd and Letterboxd feeds. Next steps in trying to get set up to be part of the sociable web: Webmentions and figuring out how I want to handle rebogging individual posts.



Caoimhe

CSS is fun!

This post demonstrates custom CSS that won’t display in RSS readers.

One of the things that Cohost taught me is that CSS is actually fun. Styling a website is a really lovely form of self-expression and I have been really enjoying styling this this website1. And I thought I’d highlight some of the things I’ve done.

Colours

The site has two different colour schemes for dark mode and light mode. I much prefer the dark mode one but I generally use dark mode for everything I can. The dark mode has a cool, blue palette while the light mode uses a warmer colour scheme with oranges and peach colours. Most of the colours I used are picked from the Pico-8 palette.

There is a gradient as you scroll down the page in both colour schemes ending in a different footer images2. In dark mode stars also come out as you scroll down.

External links and internal links have different colours3 and also some links have special decorations. If I link to the atom feed for the bog or my page about Snolf they have little Nintendo dialogue icons appended to them or if I link to Transy it uses the typeface that she talks in: Hobo.

This applies whenever those specific things are linked to and I don’t need to do anything special with this post to apply them.

Cursors

The site also has custom cursors based off of old Windows cursors. If you mouse over the above links you might have noticed that there are also different cursors depending on what type of link they are.

Fonts

For the Irish language portions of my site I use Mínchló GC from Gaelchlo instead of Crimson Text which is used for English text. I also use it for the title of The Bog because using silly fancy text for headings is fun. Other examples: Gallery is Tate Regular, The the Ring Podcast uses Some Rings and a bunch of other fonts I use for titles on my homepage are references to Sonic the Hedgehog because of course they are.

Buttons!

The most important part of any site is 88×31 pixel buttons, obviously, to which I have a crippling addiction. I’ve copied some CSS from Hyphinett to embiggen them when you mouseover them and also set rendering mode to pixellated to keep them nice and crispy.

oakreef.ie

If you have your browser set to prefer reduced motion the mouseover effect is disabled and all the animated buttons are replaced with static ones.

For sites that don’t have buttons I use a little 88×31 image of a little piece of paper that I tore up with the names rendered on top slightly askew in Cinema Calligraphy.

Layout

The homepage divides into multiple columns depending on the screen width. Other pages generally have a single-column layout with navigation elements on either side that collapse to the top of the page if the screen is narrow enough, like on mobile. The avatar for the bog also snaps to the top on narrow screens and otherwise sits beside posts and scrolls with the page.

Gallery pages have sets of links next to/under the title that all change to the site’s link hover colour when mouseovered. This applies is applied to images using a combination of -webkit-filter sepia and hue-rotate. This also changes with light and dark mode. Projects with git repos have an icon here that expands into an info box with the git repo address.

And sometimes I just do little bespoke things for pages, such as the vertical Ogham text on the Cló Piocó-8 page. Trivia: Ogham is one of the few scripts that is written bottom-to-top.

Printing

I also have some custom CSS for printing. I don’t really plan on printing pages from this site nor do I expect anyone else to, but it was fun to play with. Colour is drained out of styling to save on coloured ink, links are instead underlined and the addresses they point to appended after them in brackets. Videos and audio players are hidden, the link icons in gallery pages are turned into a bullet point list under the header and the comment box is hidden.

When there’s no CSS

Printing is just one alternative way I like to think about how my site could be displayed. While I don’t test the site with Netscape Navigator4, I do read back over posts in my RSS reader and sometimes check the site in the terminal-based web browser Lynx.

Again I don’t really expect people to be navigating this site in the terminal but it does make me mindful of how the site functions in terms of pure HTML content elements without the fancy styling and I think it’s important to keep it understandable and navigable in that mode too. That is how the site is going to be parsed by accessibility tools. I also try to have as little Javascript involved as possible as well and not use it to render page content5.

At the top of this post there is a little infobox warning. There is CSS to make this eye-catching but it’s also defined as an <b> element so that even in the absence of CSS it will display bold and be a little attention-grabbing.

On gallery pages, and especially on podcast episode pages, there is a credits/links section at the bottom of the page in smaller text. There is a heading about this section saying “Credits” but it’s hidden by CSS as I thought the page flowed better without it. It’s still there for if the page is being read without CSS and the styling can’t be used to differentiate it as a separate element from the main page text as clearly.

I used to some invisible horizontal rules across the page, set to not display using CSS, that would divide the header and footer of the site from the main content to try and make it read cleaner in situations where there was no CSS. That was before I simplified the site layout somewhat and took out the more divided header and footer areas with links in them that the site used to have.

Conclusion

That’s all that I can think of off the top of my head. Bye.

  1. When it is not making me tear my hair out at least. ↩

  2. Both footers are modified Sonic the Hedgehog backgrounds. ↩

  3. Green and blue in dark mode, brown and orange in light mode. ↩

  4. Sorry, Luna. ↩

  5. Other than comments and webring stuff on the homepage. ↩


Caoimhe

What I’m reading vol. Ⅲ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

the little lies robots tell us — Melon

The longer we tolerate the little lies that robots tell us, the bigger the lies become, and the more difficult it becomes to untangle them from our everyday lives. This is not an inevitability, however; we can find in ourselves and in our connections with eachother the self-confidence to learn how these things work, to unpick the threads, to see through the smoke and mirrors that they are only barely veiled behind.

How To Post — Mike Egan

Always remember to Post Hog.

And yeah, sometimes I want to do that, if I'm writing about my experience playing a game or something, but I also have a HUGE list of ideas for blog posts that I plan to write "eventually" that I'm very much not posting because I think I don't have time to do it right. Because I think it has to be some level of "interesting" or "good" or "having a point."

I've forgotten the lesson of Post Hog.

TIL cool math. Also we need knowledge engines that we can trust (that is: not chatgpt) — Llaura

I am honestly mostly linking to this for the absurdity that is the comparison image that Open AI used to show how “DALL·E 3 significantly improves uon DALL·E 2”. Look at this:

Two machine-generated images for the prompt “An expressive oil painting of a chocolate chip cookie being dipped in a glass of milk, depicted as an explosion of flavors”.

The older one looks somewhat like an actual oil painting while the “improved” version is a cacophonic mess that fails to represent what it asked of it while being aesthetically ugly as shit.

It almost makes me think that perhaps generative AI could actually produce output that is meaningfully better than it currently does and is at least partially hampered by simple obstacle that people who are making and curating these systems have truly atrocious taste.

The cookie example doesn’t seem to be on the site any more but the comparison they’ve replaced it with shows the exact same problem.

My 6 Favorite HEPA Filters & Air Cleaners — Joey Fox

The PC fan CR box was a recent invention to find a method to achieve high clean air delivery rates with very low noise. Noise is the greatest limitation of in-room air cleaners and PC fans are the best option to address it. There are no other air cleaners on the market that have the capability to supply 150 lps of clean air at 35 dBA. Nothing comes close.

Via House of Nettles. I am also still following Natalie’s posts about reblogging and keen to try my hands at doing similar with this site now that my rewrite to make posting easier is done. Also also from Natalie: This amazing look.

TERF Island — Sophie Lewis in Lux Magazine

A distilled history of the TERF movement and its roots in reactionary feminism.

For the twenty-first-century feminist who has never heard of this schismatic moment and has perhaps swallowed the narrative that transphobia and biological essentialism were intrinsic to feminism’s Second Wave, reading the movement magazine the Lesbian Tide is an education. Morgan’s keynote was reprinted in the May-June 1973 issue but placed at the back in small type, sandwiched between contributions that all criticize Morgan and oppose her sabotage of the gathering. MacLean’s diary conveys participants reactions to the conflict on stage: “This can’t be happening. This woman is insisting that Beth Elliott not be permitted to perform because Beth is a transsexual.” “That’s bullshit! Anatomy is NOT destiny!” In her own contribution, “Of Infidels and Inquisitions,” Elliott testifies that the solidarity she experienced “kept alive my faith in womankind.” Concerning Morgan herself, however, she states with dignity that “I personally distrust those who hate men more than they love or do anything positive for women.”

the embroidery tips page that forgot to close its <h3> tags

Via the Internet Archive, via Emma Zhou, via Peter Krupa via a reblog from Sin Vega.

Fandom has toxified the world — Alan Moore in The Guardian

This fairly mild and nothing that hasn’t been said over and over again, but it’s still sort of nice to hear it directly from Alan Moore?

Soon thereafter, caught up in the rush of adolescent life, I drifted out of touch with comic books and their attendant fandom, only returning eight years later when I was commencing work as a professional in that fondly remembered field, to find it greatly altered. Bigger, more commercial, and although there were still interesting fanzines and some fine, committed people, I detected the beginnings of a tendency to fetishise a work’s creator rather than simply appreciate the work itself, as if artists and writers were themselves part of the costumed entertainment.

The V*mpire — P.H. Lee in Reactor

A short story about being groomed on Tumblr. Mind the content warnings.

Friendly reminder that not inviting vampires into your house is viviocentrism. Stop being viviocentric!

OP, I don’t want to demand more emotional labor from you, but I really don’t understand what you mean. Should I really invite in every vampire?

Disrespectfully, go fuck yourself. It’s not my job to educate you.

ᵃʷᵒ°

ᵃʷᵒ°

ᵃʷᵒ°

See, this is exactly the sort of bullshit that living “allies” always impose on us. OP made it extremely clear: Not inviting in a vampire is viviocentrism. INVITE IN EVERY VAMPIRE.

You may think that nested quote looks horrendous but I am just providing the genuine 2010s Tumblr experience.

Why play a fascist? Unpacking the hideousness of the Space Marine — Edwin Evans-Thirlwell in Rock Paper Shotgun

Edwin pulls together multiple articles that are worth reading in and of themselves to look at how Space Marines have been sanitised away from their satirical roots.

It's saying something about how accustomed I am to the ostensibly parodic figure of the Space Marine being portrayed as a hero that I didn't really question this desire to make you "like" and "get" the "fanatical killing machines" at the time. To be clear, I don't think Saber are deliberately and consciously trying to kindle empathy for literal fascist enforcers in Space Marine 2. Much of the above reasoning is grounded in ostensibly neutral, best-practicey questions of craft and characterisation.

A Maze of Murderscapes: Metroid II — S.R. Holiwell

An old classic that I think about a lot. I hope Stephy Rei Holiwell is still doing well out there. This and some other now-deleted writing of hers meant a lot to me.

Games about killing should probably make you uncomfortable. They shouldn’t be carefully crafted to be pleasant. Metroid II is openly about killing. It makes me uncomfortable with wordless specificity. This is one of the game’s saving graces.

This article was also, I believe, a large and overlooked part of the critical re-evaluation of Metroid II, being the basis for Game Maker’s Toolkit’s appraisal of the game when discussing its remakes.

Sex in the '60s in Cork… and the racy agony aunt who faced death threats — Teddy Delaney in Echo Live

An extract from someone’s memoirs published in a local paper. I don’t think the book would be the most interesting thing in the world if I’m being honest but I found some of the quoted letters to an agony aunt column amusing.

We are four worried 17-year-old teenagers. We are going to our first dance soon and a friend has told us to refuse a mineral from a boy because if you accept it you are supposed to spend the rest of the dances with him. We would like to know if this is true. Also, if a fellow asks you to go outside does this mean that he is bad? And what should you do if a boy asks you to go outside?

And to explain the terminology: An agony aunt is someone who pens an advice column and mineral here means soft drink or soda. Sorry if I ruined the picture in your head of teenagers in the 1960s exchanging rocks at a dance.


concept: rewrite a bunch of my website code to split out sections from each other more cleanly so I can more easily make small posts with less effort

result: oh god oh fuck everything is broken and I have way to many unstaged changes what was I in the middle of doing a week ago before I went on holiday if I want to post anything I need to stash fifty files and change branches which takes several minutes right now

Though honestly that describes the situation more a week ago than right now. I do have the podcast processing stuff finished now and I just need to do similar rewrites with the Pico-8 processing. That should🤞🏻 be easier now that I have done the podcast stuff and can base what I do on how I handled that.


Caoimhe

Conway’s Game of Life in 138 characters

k=2^13::s::for a=0,k do
n=0 for x=0,8 do
n+=peek(k*3+a+x/3+x%3*64-65)end
poke(a,n==12 and 4 or n==16 and peek(a))end
memcpy(k*3,0,k)goto s

That is the entire source code for my my Pico-8 implementation of Conway’s Game of Life, which you can run here:

Control with ⏴⏶⏷⏵, Z and X

I made this as a tweetcart back when tweets were still 140 characters and I am still pretty proud of it. Let’s run through how this works!

If you have never heard of it, the Game of Life is a type of cellular automation, a simulation consisting of a grid of cells. Each cell is either alive or dead and with each iteration of the simulation the state of each cell changes based on the following rules, as copied from Wikipedia:

  • Any live cell with fewer than two live neighbours dies, as if by underpopulation.
  • Any live cell with two or three live neighbours lives on to the next generation.
  • Any live cell with more than three live neighbours dies, as if by overpopulation.
  • Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.

It’s pretty hard to see how those rules translate to the above code, so I’ll try to explain it as best I can. It relies on some tricks specific to Pico-8.

The first thing in the code is is setting k=2^13, that is 8,192. This is a magic number that is going to have a few uses.

Then we set a label ::s::. This is a label we can use goto later on in the code to return to.

Then we start a for loop, for a=0,k do, counting from 0 to 8,192. This is the length, in bytes, of the part of the the Pico-8 virtual machine’s memory that holds the current screen state. Pico-8 has a resolution of 128×128 pixels, for 16,384 pixels total, and each pixel can have one of 16 colours. That means that the colour of each pixel can be stored in 4 bits—half a byte—and therefore the full screen information can be stored in 8,192 bytes. We are going to treat every byte as a single cell, which means every cell is actually made of two pixels. You can see how every cell in the simulation is one brown and one black pixel side-by-side.

The reason we’re doing this is so that we can iterate over the current screen state in order to determine the next iteration and which cells survive or die. By examining the screen memory directly we don’t have to create a different data structure for storing the cell information; it’s just whatever’s currently on screen. This saves an awful lot of characters.

Then, inside the loop, we start by setting n=0, this is going to be used to track the number of neighbours that every cell has.

Then we start up a new loop, for x=0,8 do, to iterate over all the neighbouring cells.

Which brings us to the first complicated expression, n+=peek(k*3+a+x/3+x%3*64-65). This is adding up the values of all the neighbours (for the purposes of this implementation, each cell is considered to be be one of its own neighbours). It peeks at the memory addresses of each of the neighbours, then adds it to the running total, stored in n.

k*3 (24,576 or 0x6000) is the start of the screen memory, the starting point for iterating over the screen data. Adding a to it is iterating over each cell in sequence in the memory.

Every byte (cell) is going to have a value of 0, for dead, or 4, for alive. I’ll explain why I used the value of 4 rather than the more obvious value of 1 later.

The screen memory is arranged in the order you would probably expect, it starts in the top left corner and scans left to right, top to bottom. The first 64 bytes are the first line of the screen, the next 64 bytes are the second line, etc. As such getting the cells to the left and right of the left and right of the current one is just a matter of taking away or adding one to the address we’re querying. Getting the cells above and below means subtracting or adding 64, respectively.

To get all nine neighbours (including the current cell itself) we need to check nine memory addresses: The current address, k*3+a, and offsets of -1, +1, -64, +64, -65, -63, +63, +65. This is accomplished with the +x/3+x%3*64-65 part of the expression as it iterates from 0 to 8. +x/3 will go from +0, +1, +2 over the course of the loop1. +x%3*64 cycles through +0, +64 and +128. Then the -65 corrects these to be centred around 0 (-1 for the horizontal and -64 for the vertical).

You may notice that this is going to behave weirdly at screen edges: For the first and last row it will be checking for “neighbours” in memory before and after the screen data. These are simply going to be blank as they aren’t otherwise being used for this programme. Additionally, due to the layout of the memory the left and right edges will wrap around and be treated as neighbours of each other, with a one pixel vertical offset. This weird behaviour is going to be the price we have to pay for trying to fit a mathematical simulation into a tweet2.

Once we have the total value of n totted up it’s time to write the next iteration of the simulation: poke(a,n==12 and 4 or n==16 and peek(a)).

Poke is the opposite of peak, it lets us write to a value in memory, and we’re going to just starting writing at address 0x0, which in Pico-8 is normally spritesheet data, but we’re not using sprites in this programme so we can treat it as effectively free memory.

The poke expression is a bit weird but effectively we’re either going to poke a value of 4, 0 or the current value of the cell (peek(a)).

Let’s go back to our bullet points from Wikipedia for a second. We need to rewrite them slightly because we’ve changed the way we counted living neighbours to include the cell itself as its own neighbour. Rephrasing it in those terms we have:

  • A live cell with fewer than three live neighbours dies.
  • A live cell with three or four neighbours lives.
  • A live cell with more than four neighbours dies.
  • A dead cell with exactly three live neighbours lives.

Or, simplifying it:

  • Any cell with three live neighbours is alive in the next iteration.
  • Any cell with four live neighbours keeps its current value in the next iteration.
  • Any other cell is dead in the next iteration.

Or, n==12 and 4 or n==16 and peek(a). If n==12 this evaluates as 4, the value we’re using for a living cell. If n==16 this evaluates as peek(a), write whatever the value for the cell is currently. Otherwise this evaluates as nil, and fortunately for us Pico-8 treats poke(a,nil) as being equivalent to poke(a,0), meaning every other case produces a dead cell.

Now we’ve iterated across the entire screen and made the next iteration of our simulation, the only thing left to do is copy the new iteration into the screen memory (memcpy(k*3,0,k)) and then start our loop again (goto s).

That’s it! Except, you might wonder, what about our starting state? We didn’t set any initial data, so why is there anything here in the first place when you run it? Well, our initial data is whatever is on screen when we run the code. You can have any starting state you want simply by having something different drawn to the screen when you hit run.

And that’s also why I used 4 for the value of a living cell: it produced interesting results when running directly after Pico-8’s boot screen rather than dying instantly, which happens if you used 13. 4 was chosen by trial and error. It’s also a bit easier to look at than using 1, which uses a dark blue colour rather than brown that’s harder to see against the black.

You can play around with this code yourself using Pico-8 Education Edition4 or check out my other Pico-8 projects

And that’s (actually) it! I hope you found this interesting.

  1. peek thankfully ignores any fractional values, so we can act as if these are being rounded. ↩

  2. At least to fit into what the size a tweet was back in the good old days, when men were men and tweets were tweets. Now I’m a woman and I’ve deleted my Twitter account… Actually, those might have been the bad old days. ↩

  3. Which would have shaved off two two more characters as the poke command would have been changed to n==3 and 1 or n==4 and peek(a). ↩

  4. Click the ⏵ button to start it and then hit Esc twice to open the editor. To run it again hit Esc again to bring up the command line, enter run and hit Enter . ↩


Caoimhe

Comments

I am trialling a comments section using Cusdis. There should be a comment section below this and every other bog post as well as every entry in the gallery.

This means most pages on here now use Javascript which makes me a little sad but maybe it is worth it.

Or maybe I will just decide to remove this again! We’ll see.

In any case feel free to say hello in a comment below.


Caoimhe

What I’m reading vol. Ⅰ

Vols.: Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, ⅩⅢ, ⅩⅣ, ⅩⅤ, ⅩⅤⅠ

As Cohost shuts down I have been making a fuss about moving away from social media and I am not the only one. We are in the final week before it goes read-only and people have been sharing blogs and websites and my RSS reader has been filling up. So here I will share some things I have been reading lately, both from Cohost people and just other interesting articles.


Makeup

vampy lipsticks — Tulip

There is going to be a lot of more typically nerdy stuff in here so let’s start with something else. I don’t wear makeup much these days but I am not immune to black lipstick recommendations.

as fall approaches, my craving for deep, dark lipsticks increases… my dark metamorphosis.

OK, well, technically it's Vampire Season year-round here - i don't need Halloween as an excuse to embrace black clothes and dark lipstick. but still! i thought it would be appropriate to showcase some of my favorite vampy lip colors from my personal collection.


Hardware

The Working Archivist's Guide to Enthusiast CD-ROM Archiving Tools — Misty

Misty digs through CD-ROM preservation and touches on why the history of the CD as an audio format first and data format second makes it more complicated than it might seem.

CD audio isn’t a file-based format, and instead uses a series of unnamed, numbered tracks. CD-ROM extends this by making it possible for a track on a disc to contain data and a filesystem instead of audio. Since CD-ROM extends CD audio, the two formats aren’t mutually exclusive: a CD-ROM disc can still contain multiple tracks, and it can even contain more than one data track or a mixture of data and audio tracks.

Hacking a Hitachi Magic Wand (Plus) — Kore

This is just cool.

So: the Hitachi Magic Wand is a very good device. It, however, has very little granularity in how strong it is. Even the newer Magic Wand Plus only has four, non-customizable settings.

I don't like this and want to fix it. In the process, I'll also be adding bluetooth connectivity, because I thought that was pretty funny.


Software

software rendering is awesome — erysdren

i fuckin love software rendering. the act of creating a fully realized 3D scene entirely in your own program, without the aid of OpenGL or DirectX or any GPU whatsoever. something about that is so charming to me. it leads to so many interesting technical design decisions and shortcuts taken to get it to run fast (if that is the goal).


Social media

RIP Cohost — Mike Egan

I had to have at least one RIP Cohost article in here.

From a design perspective, compared to all other social media, Cohost was a paradise. No numbers, no algorithm, no global feed, no discover page, and a lot of really useful ways to curate what shows up in your feed. Having a reverse-chronological feed of only the things I wanted to see from the people I asked to see them from has done wonders for my brain.

It was never about the numbers — Aurahack

Also somewhat of a reflection on Cohost but also on how numbers and stats make you worse.

The close friends I made there motivated me to get better because they were further in their art journey than I was. I looked up to them not because they were my favorite artists but because they would create alongside me and it would inspire me! I wanted to grow like they were visibly growing. Over time, I did, and my following would start to outpace theirs and… I think that’s where it started getting kind of nasty.


Computer games

Everywhere and Nowhere: Emptiness in Level Design — Nat Clayton

Nat Clayton talks about in-between spaces in games both in her work and in other games. She has also made me aware of the Weird Maps series by Whomobile which is great.

There’s a dead-end I think about every single day, tucked away in the back of Half-Life 2’s airboat chapter. It’s a right turn where you’re supposed to go left, a gun turret and a headcrab ambush and some secret crates for those nosy enough to go scavenging. It’s one of a thousand dead ends in Half-Life 2, but this one sticks out to me. As the sickly golden twilight paints the concrete runoff, illuminating basic shanty structures, the sparseness of the space is unavoidable. The roar of airboat fans and chase music given way to gusts of wind and mechanical creaking. Some designer decided that someone once lived here, died here, and painted that scene with an absolute minimum of brushes and textures.

Listening, Watching, Gaming — Chris Hall in First Person Scholar

Not a million miles away from this but in the much more academic side of games writing here’s a piece on the paratext created by submerging oneself in the soundscape and environment of a game level.

As I write this, I have open on another screen, as I often do, one of these ambient paratexts—in this case, an hour-long video from Metal Gear Solid 3: Snake Eater. There’s no music, no avatar, only a first-person scene at the ground level providing a nighttime view of the exterior of the Graniny Gorki research outpost in Tselinoyarsk, the Soviet Union. Directly before us is a high fence, followed by patches of grass and the concrete façade of the facility. To the far right a guard patrols within the fenced area, as oblivious as the sleeping dog nearby. Presumably we perceive the scene through the eyes of the game’s protagonist, Naked Snake, lying prone, but we needn’t be aware of this, and Snake provides no signs of his presence. The peaceful scene is backgrounded by the ambient sounds of the southern USSR forest, the constant chirping of bugs punctuated by the faraway cries of nocturnal birds.


Doctor Who

Perverting the Course of Human History (War of the Sontarans) — Elizabeth Sandifer

I have been enjoying Elizabeth Sandifer ripping the Chibnall-era of Doctor Who to shreds as part of her long-running TARDIS Eruditorum series analysing the entire run of Doctor Who from the 1963 to the present.

You figure there’s got to be this entire shadow Chibnall era—the one that exists only in Davies’ head and perhaps some text messages to his mates. No more detailed than the Leekley era, perhaps, but undoubtedly there. Like poor Penny in Partners in Crime we can see its shadows—obviously The Timeless Children would have stuck larger and more mind-wrenchingly than the rest, with Davies at once transfixed by its potential and vexed by its production. Ironically, he’s the one person who seems to have been substantially influenced by the Chibnall era.

The Problem with Doctor Who — Luna

An older post but keeping with on the topic of Doctor Who: Luna points out a problem with the current Doctor Who intro segment that has been in place since the 2023 60th anniversary specials. We can only hope that they fix it by this year’s Christmas special.

But something is seriously amiss in the 2023 specials, and neither I nor my inner child can let it go. And it’s not the [whatever the bigots are angry about this time], nor even the [actually legitimate criticism here]. No, none of that. The probl-

Timing.

-em with the 2023 specials is… oh. Right.


Serious articles for serious people

AI and the American Smile — Jenka

In the same way that English language emotion concepts have colonized psychology, AI dominated by American-influenced image sources is producing a new visual monoculture of facial expressions.

‘Right to Repair for Your Body’: The Rise of DIY, Pirated Medicine — Jason Koebler for 404 Media

“I don't know who needs to hear this but I'm scared too all the time of losing the health that I have. I know what it feels like,” he says. “I know what it feels like to not know what's wrong with your body and to have to go shop for a stranger who has the authority to maybe or maybe not give you what you need. I know what it feels like to know what's wrong with your body and to know what you need and to be told you can't have it because the infrastructure has failed and it's not available.”

The Third Sex — Talia Bhatt

Here is a morbid, maddening irony: anthropological scholarship, distinctly Western anthropological scholarship, that for decades has touted the maxim of ‘binary gender’ being an ‘imposed’, ‘colonial’ concept, has now been cited by an Indian court in an opinion that explicitly third-sexes the hijra and purports that recognizing them as women would ‘violate their constitutional rights’. It is seemingly only imperialism when populations who seek the technologies of transition and legible womanhood are granted access to them, while the opinions of Western academics shaping local politics is merely sparkling scholarship.


Caoimhe

How my bog handles images

A different GIF will displayed below depending on your browser’s prefers-reduced-motion and prefers-color-scheme settings. There’s four different possibilities:

A white cat

I hadn’t used prefers-reduced-motion before but I saw a chost from Kore linking to a blog post about accessibility and GIFs and decided I wanted to follow it but I also didn’t want to have to manually write the HTML code for it each time. Thankfully programming is the art of being tactically lazy and I can put some effort in up front and solve an interesting problem once and then let my site generator handle it automatically from then on.

Also thankfully I had done something like this before after taking inspiration how Luna’s blog handles images. I don’t have high DPI images but I do have different dark and light mode versions of images for the The “the Ring” Podcast series tracker chart and the Dracula International diagram I made.

The way I had initially done that was, characteristically, a mess. I wrote a custom custom Liquid tag to handle it which meant that instead of actually using the existing, basic Markdown syntax I had to put images into my posts with something like this:

{% image /bog/images/easóg.gif %}

So revisiting this to include prefers-reduced-motion options I decided to do it differently this time. A way that would allow me to just type the normal Markdown syntax and let my code handle everything else.

![A white cat](/bog/images/easóg.gif "Easóg")

The next step was to look into how to extend and customise Jekyll’s Markdown parsing and output but that sounds hard and I didn’t want to do that so I just used a regular expression1:

/((!!?)\[([^\[\]]*)\]\((.*?) *("([^"]*)")?\))/

This runs against the raw Markdown before it’s parsed into HTML and pulls out the link, alt text and title. That last part is also a big improvement over the custom tag I previously made as that didn’t support alt text or titles at all.

The code then takes the link and checks if there are any alternative versions listed in the site’s static file list like easóg.dark.gif, easóg.static.gif or easóg.dark.static.gif. when writing a new post now I don’t have to do anything extra other than have those other versions with the right naming scheme in the same folder as the original image.

From there it it compiles it into HTML and replaces the original Markdown in the document:

<picture>
  <source srcset="/bog/images/easóg.dark.gif" media="(prefers-color-scheme: dark) and (prefers-reduced-motion: no-preference)" />
  <source srcset="/bog/images/easóg.gif" media="(prefers-reduced-motion: no-preference)" />
  <source srcset="/bog/images/easóg.dark.static.gif" media="(prefers-color-scheme: dark)" />
  <img src="/bog/images/easóg.static.gif" alt="A white cat" title="Easóg" loading="lazy" />
</picture>

Well, actually it does something else too. You might have noticed in the regular expression up above I am actually checking for an optional, second exclamation mark at the start of the image tag. That’s my own extension of the syntax. If I’m doing my own parsing I might as well go wild with it. If there are two exclamation marks at the start of the tag it also wraps the image in a link to itself and adds an extra class:

<a href="/bog/images/easóg.static.gif" class="dynamic-image-link">
  <picture>
    <source srcset="/bog/images/easóg.dark.gif" media="(prefers-color-scheme: dark) and (prefers-reduced-motion: no-preference)" />
    <source srcset="/bog/images/easóg.gif" media="(prefers-reduced-motion: no-preference)" />
    <source srcset="/bog/images/easóg.dark.static.gif" media="(prefers-color-scheme: dark)" />
    <img src="/bog/images/easóg.static.gif" alt="A white cat" title="Easóg" loading="lazy" />
  </picture>
</a>

The classes are to enable a little bit of Javascript2 to swap out the destinations of the links on the fly when swapping if the user’s media preferences change. Whichever one you currently see in the browser is the one you’ll go to if you click on it.

I might review the double bang syntax if I can figure out something that could be added to the tag that would get stripped out and ignored by a normal Markdown parser for better compatibility. If only Markdown had comments.

Is this a robust solution? Absolutely not! Will I eventually run into annoying weird cases that make me bang my head against the wall as a result of this? I already have! While writing this very bog post! Because the regular expression cannot tell that the markdown code example I have above is not meant to be parsed and turned it into HTML, making it impossible to show the before part of the before and after. Did this make me go back and implement this in a better way? No!

I added some metadata to this post telling it do disable my custom image parsing, made the parser skip doing anything if it finds that metadata on a page and then hardcoded the example at the top of this page. That’s right: This post isn’t actually using the one thing it’s meant to be demonstrating!

  1. I could have also tried parsing the resulting HTML instead of the Markdown like Luna did but that also seemed like it would take slightly more effort. ↩

  2. One of only three four a sadly increasing number of things Javascript is used for on the site. ↩