I apologize for the weighty topic, and skip down if you’d prefer not to deal with it right now, while I insert a relatively benign header image.

A worker conducting an awareness session in Mogadishu

However, today marks the (deep breath) International Day of Zero Tolerance for Female Genital Mutilation, bringing awareness of the need to move societies beyond the urge to harm women as a means of controlling them. If you haven’t had need to learn about the topic, it involves removing or damaging the external female genitals of a young woman, with the intent of making sex less pleasant for her, all in pursuit of the poorly defined concept of virginity. It carries no actual health benefits, but opens the patient up to a variety of medical risks.

Note that we generally think of it as a practice centered in a certain subset of countries—for colonialist and Islamophobic reasons—the practice still exists around the world. And if you’ll pardon my bluntness, the current breed of right-wing thinking doesn’t seem all that far from giving mutilation serious consideration.

If you’d prefer something to celebrate, instead, we have Sámi National Day, celebrating the heritage and culture of the ethnic minority in Scandinavia and parts of Russia. If you enjoyed the sequel to the Disney movie with the Ice Queen, her sister, and the irritating snowman, the writers loosely based the displaced culture on the Sámi.

And since I don’t think it appropriate or prudent to try to find some quip, here—not to mention that this almost certainly already ranks among the longest post introductions, and I have a lot to cover—let’s move on to code.

Social Media

Yes, yes, I promised that the last one of these updates came around the new year. Tough luck, I guess.


In any case, due to the ongoing chaos on Twitter—prior to the announcement of the company charging for API access, which I found impressive—the cross-posting application that I’ve used has shut down. I expected it, due to the new rules for the API, but because I didn’t follow the creator anywhere, didn’t know that he planned this shutdown for a while. Despite the surprise, though, I often considered January transitional, and frequently considered cutting off cross-posting over this past weekend. This only accelerated that schedule by three days.

I’ll still open Twitter on Sunday mornings to reply to people who contact me directly, the same as I do on the other big-corporate sites. But I no longer participate in a way that will help the company sell ads.

As a bonus, I will no longer need to nickel-and-dime the various quotes that I post—from and apart from articles—to cram everything into the Twitter character limit.

Instead of Twitter, therefore, you probably have the best chance of keeping up with my posting by following me on Mastodon. And speaking of the federated systems…

Mastodon Tool Trunk

GitHub - jcolag/tool-trunkTools for (John's) Mastodon workflow. Contribute to jcolag/tool-trunk development by creating an account on GitHub.

My Mastodon scheduler has some bugs that I need to track down, but has the right structure, at least. It does the following, more or less.

  • Takes assorted command-line arguments.
  • Downloads media—a single image, since I rarely include more than that—resizes and converts it to a PNG file. I added the conversion step, due to the proliferation of the WebP and AVIF formats, which browsers can display, but most applications don’t know what to do with.
  • Uploads the media to Mastodon.
  • Uses the media ID—if any—and other assorted command-line arguments to specify the remainder of the toot to schedule.

Currently, it also has the option to delete the toot after scheduling it, for quicker turnaround in testing.

As mentioned, I almost enjoy working with this API, so I may do more sophisticated things in the future.

Entropy Arbitrage

GitHub - jcolag/entropy-arbitrage-codeThe Jekyll blog for https://john.colagioia.net/blog - GitHub - jcolag/entropy-arbitrage-code: The Jekyll blog for https://john.colagioia.net/blog

You won’t see any evidence of this until Friday, but I added the two plugins that I’ll need to schedule toots properly.

The cw plugin adds a content warning for the toot’s content, if it needs or deserves one. For now, I only print the text with a note, in the post, and will decide on the styling later. Really, its primary purpose keeps the content warning with the remainder of the information in the toot, with the signal to blog readers as a secondary convenience.

The embed plugin identifies the header image for the article, if any. Unlike the cw tag, this takes the image URL, my description of the image, whether to mark it as sensitive (Mastodon will blur it, if so), and who the post needs to credit under what license. If the plugin doesn’t get anything for credits, it won’t show the image in the blog at all. Otherwise, at least until I come up with a more reasonable solution, it’ll hotlink the original image. Again, I mostly did this to collect all information about each toot in the same place, though I definitely approve of the secondary effect of allowing me to include that information on the blog, when appropriate.

Unfortunately, this week’s articles don’t have images that I feel willing to post on the blog, so we won’t see how the latter plugin pans out, for a while, unless I add placeholder text for the images not included.


Now that I have all the information that I need listed in my Friday posts, once I debug the remaining pieces of my scheduler script, I’ll need to parse the Friday posts to generate the toots. I don’t imagine that I’ll need any sophisticated parsing, here. It’ll probably look more at the individual lines, because the Friday post has a straightforward format.

  • A second-level header containing the time of day and date to post;
  • A blank line;
  • An optional content warning;
  • An optional header image;
  • Another blank line;
  • The title, URL, and source,
  • Another blank line;
  • A quote pulled from the article; and
  • Alternating blank lines and my commentary on the article.

Each of these also starts with a different few characters, so I should have the ability to reset my data structure when I see the ## symbol, fill in the available subset of eleven elements—time, date, content warning, image URL, image description, image sensitivity, credit/license, article title, article URL, article source, and quote, since my commentary doesn’t generally fit into the toot—then call my scheduler code immediately before the aforementioned reset.

In addition, I see some flaws with the embed plugin, and the output of the plugins needs CSS.

Oh, and for social media, I’ll probably sunset my bot accounts—which never got much attention—during the week, and maybe set up an archive of my tweets with tweetback, time permitting. It apparently has a system to integrate each tweetback-generated archive into a distributed archive that preserves references in conversations.

Credits: The header image is Anti-FGM Campaign at Walala Biyotey by David Mutua for AMISOM Public Information, released into the public domain.