Obviously, we follow up World Oceans Day with Global Wind Day, right? We also had Earth Day a few weeks ago. There does not, however, appear to be a Transnational Fire Day to round out the four classical elements. Somebody get to work on that, please.

Wind blowing

As for this week, I jumped around a bit more than last week.

Entropy Arbitrage 🔗

Last Sunday, I published a post updating three previous posts, splitting the difference between silently editing old posts—intellectually honest, since the changes would be under version control, but not immediately visible—and writing a series of posts too short to really bother with.

However, publishing the single update post doesn’t solve the discoverability problem, by itself. I needed to add an optional section to each post noting that another post refers to it.

I resolved the problem by adding an update section to my post headers (you can see this in version control, like in Sunday’s file). Then, I needed code in my template to check the page for companions and list them if available. It looks something like this, with the most obnoxious part being that Liquid templates have no interest in creating arrays.

{ % assign pagename = page.path | split: '/' | last %}
{ % assign related = "" %}
{ % for post in site.posts %}
  { % for update in post.update %}
    { % assign name = update | split: '/' | last %}
    { % if name == pagename %}
      { % assign dest = post.title %}
      { % assign dest = dest | append: "," %}
      { % assign dest = dest | append: post.url %}
      { % assign dest = dest | append: "," %}
      { % assign dest = dest | append: post.date %}
      { % assign dest = dest | append: ";" %}
      { % assign related = related | append: dest %}
    { % endif %}
  { % endfor %}
{ % endfor %}
{ % assign related = related | split: ";" %}
{ % if related.size > 0 %}
  <div class="post-content">
    It looks like this post has since been rethought in various
    ways, so you may want to look at
    { % if related.size == 1 %}
    { % else %}
    { % endif %}
    after you're done reading here.
      { % for r in related %}
        { % assign rel = r | split: "," %}
        { % if rel.size > 1 %}
            <a href="">
              { { rel[0] }}
            { { rel[2] | date: date_format }}
        { % endif %}
      { % endfor %}
{ % endif %}

(As usual, I had to add spaces to get the Liquid template code to display, because otherwise, the blog software tries to interpret it. You’ll need to remove those spaces, if you copy and paste the code.)

This takes the internal name of the blog post and tries to match it to the update lists of all the other posts, creating a delimited list of titles, file names, and dates. Then, it breaks that string up into an array and, if the array has anything in it, shows them as hyperlinks to the referencing pages. Note that I may need to swing back and change those delimiters, since the odds of finding a comma seem unpleasantly high.

I don’t know if I’m interested in doing so, yet, but a similar process could probably be used to suggest a few related posts to readers. Too much?

Mailing List 🔗

This may not come to anything, but I’m looking at launching a mailing list. I don’t know if it’s useful, nor do I know if it’s possible to do (without making it my full-time job) while maintaining any level of commitment to Free Software and Free Culture.

That said, I feel like there are people who would prefer something like:

  • A monthly round-up of blog posts,
  • Any announcements I might have, possibly with previews,
  • Links to and comments on any public domain stories I’ve been reading (though that’s been a lot less since I started writing thousands of words every week, for some reason…),
  • Quick mention of any (non-Free Culture) media I would recommend (maybe), and
  • Whatever pointless comments I feel like making that won’t fit anywhere else.

The contents will be released under the same license and archived somewhere safe, but I might not be as careful about what I cite…not that I’ve been able to always find acceptable news sources for everything I want to talk about.

If you’re thinking “that’s only what I’ve been begging for my entire life,” please seek therapy, and also be on the lookout for it near the end of June (this month) or early July. The mid-point of the year seems like a good time for that sort of launch.

And I apologize in advance if either I change my mind and kill the project or it ends up on Tiny Letter. I realize that “Email for people with something to say” does not inspire confidence, but as much as I would love to run it myself, the idea of comparing software, installing and maintaining the server, getting DKIM set up right, and making sure that I’m in compliance with everybody’s anti-spam laws sounds like a nightmare.

I also feel like a mailing list service can only abuse its users so much. But if anybody knows differently and there’s a reason not to do this, please speak up.

Uxuyu 🔗

After aggressively changing Uxuyu last week, I gave it a bit of a break, this week, but still moved forward.

Cosmetically, when displaying posts mentioning you, Uxuyu inverts the display colors, to make it obvious which message is relevant. And speaking of colors, we now also read an (optional) JSON-based configuration file on startup that will override the default colors and font size.

As mentioned I mentioned previously, the latter configuration system is the same code that I use for Miniboost. I also added a configuration option for the application to call with the post_tweet_hook. Previously, I have the program hard-coded for bash, which is what I need based on my laptop’s configuration, but not every machine is going to have the same needs.

URL Rat 🔗

I have a project idea that might benefit from a browser extension that can notify it of viewed web pages, so the URL Rat exists to test the browser extension waters, so to speak. I didn’t have time to flesh it out, but the eventual version should be an extension that monitors for a new page and sends the new address to a pre-configured URL, “ratting the user out” to some server.

For anybody interested in possible uses later on, imagine a time-tracking system where the browser history, files accessed in an IDE, and possibly geofencing can be combined with notes and version history to make it easier for someone to follow work if a member of the team isn’t available. So, instead of asking “what did I work on,” there’s history that can be annotated, an example being a list that shows visiting three Stack Overflow questions of which one was useful and visited (hypothetical colleague) Navya’s office before committing code.

I want to start with making sure the browser extension works, first. I’ll probably create a Visual Studio Code extension after that. None of this does the hard part of the job, but I want to make sure all the pieces fit together before trying to build a working server.

Bicker 🔗

As I mentioned last Monday, gems have been falling behind, so I spent some time updating Bicker. Nothing eventful, there.

Stack Overflow Antics 🔗

This probably won’t be a big deal to most people, but if it’s your sort of material, I gave a condensed overview on the major classes of parsers, including (in the comments) getting to introduce people to the Pratt parser, which allows for languages that can change during parsing.

Next 🔗

This week, I want to get back to Uxuyu and polish off some of the remaining features that I want. There’s bug in dealing with the non-followed accounts that needs to be resolved, and I suspect that it’s going to be easy after that to add a “fire hose” mode that no longer filters for only the users you follow, looking more like social media.

URL Rat also has some more work needed. Expect a post this or next Wednesday with an overview of how to develop an extension, too, since I don’t want to lose track of that knowledge.

If a slide-out tray starts showing up on posts (like the recommended posts on the index page), that will be for the mailing list. I’ll try not to let that slip out before the list is ready to go and apologize if it sneaks out.

Credits: The header image is Cherry tree moving in the wind by W.carter, released under the terms of the Creative Commons CC0 1.0 Universal Public Domain Dedication.