Today, we observe Earth Day, demonstrating support for environmental protection. This year has a theme of Planet vs. Plastics, which…I don’t know, seems out of step with the modern environmental movement, but whatever. Interestingly, the first Earth Day in 1970, particularly the protest-and-demonstration side, largely comes to us through the United Auto Workers. Related, we also have International Mother Earth Day, recognizing Earth’s ecosystems as our home, and promoting harmony with nature.

The unofficial Earth Day flag, a blue rectangle with a satellite picture of the Earth centered, focused on Southern Africa

And on we go to the projects. Funny thing, one of the shortest holiday discussions will actually go right into one of the longer developer diary posts…

Social Media

Around a month ago, on the anniversary of the Paris Commune, I wrote the following.

While I haven’t seen any evidence either way, I suspect that I may not get any use out of my Post.News or Spoutible accounts for much longer. Both sites have stopped sending out behind-the-scenes newsletters, and both seem to have absurd technical problems. Post takes forever to…well, post, these days.

Well, we now have “evidence either way” for one of the two sites: Noam Bardin has announced the impending closure of Post.News . And I want to call out the key point in his statement…actually, let me copy in and lightly edit my reply to that message on Post, because I decided to make the point there in hopes that maybe it’ll change something.

While it’ll make me sad to see another decent service fall, I’d like to call something out, here: “A consumer business, at its core, needs to show rapid consumer adoption…” No, it absolutely does not “need” to do any such thing. A consumer business can, in fact, only do what it needs to do and turn enough of a profit to pay its staff. Many do.

That doesn’t describe “a consumer business.” That describes a venture-funded business that seeks to take so many users and their data hostage, that it eventually has no or owns its competition. And—exactly like with Pebble, not too long ago—I feel like not seeing a difference between the two would always cause a massive problem, either now, or in a few years when preventing toxicity would become less important than “driving engagement” to goose ad revenue.

In that sense, I wish that you’d rethink the closure, and maybe pass on duties to someone who maybe isn’t interested in living the clichés.

This feels like the central problem, here, or maybe one central problem of several. We mostly only have two varieties of dingbats doing this important work of building infrastructure for people to communicate and organize. The first variety does this out of the goodness of their heart, starts up a Mastodon-or-similar server somewhere, and then slowly (or quickly) burns out as they need to deal with an endless flood of moderation demands, with no support or safe way to take a break. The other variety wants social media to turn them into a billionaire, like it did Zuckerberg and Dorsey, twenty years ago, which means that they need an exponentially growing number of eyeballs locked to their page, and that will probably never happen again, especially not without the “Outrage Treadmills”—allowing and rewarding abusive content, to frighten and anger users1, to wear down their willpower and maybe provoke them into posting abusive content of their own—to keep people, in a state of shock, on the site as long as possible and gullible enough to pay attention to the ads.

Regardless, when the closure comes, as I did with Twitter and Pebble, I’ll sanitize and upload my archive, for anybody who wants to read through what I posted in my time over there.

Like I said last month and hinted in my response to Bardin, though, it saddens me to see the “alternative social media” space collapse so quickly, with everything consolidating right back under exactly the two aforementioned billionaires who controlled the overwhelming majority of social media traffic before Twitter’s change in ownership. Even if we did get a much stronger and more diverse Fediverse out of the deal, that annoys me greatly.

You know, someday, I should probably write a post about how I casually laid out how social media would work, back in the mid-1990s2, and immediately dismissed it as not worth pursuing…

The Light’s Edge

Codeberg — thelightsedgejcolag/thelightsedge The Light's Edge is an ongoing, multimedia space opera story. This repository will contain material needed to generate the main website at https://thelightsedge.com

It took me long enough to get to this—I don’t know why; maybe I imagined that it’d change too rapidly and too blandly to warrant tracking—but the website for the project now has a repository. Right now, it only hosts the raw HTML itself, since…well, I created the initial three pages that way.

You might also notice—but probably wouldn’t, unless you know significantly more about the project than I have released—that the story’s first character has appeared off in the distance, opening Gullivar Jones Tyson’s Funkwhale account, and has posted “his” first song. And yes, if it rings a bell, his name has some (minor) relevance. In addition to the utility in having the project’s Mastodon account follow him, the Open Audio “pod” has a commitment to Free Culture music, which should make them a pretty nice match for the project. However, I can’t figure out how to view or share Funkwhale posts through Mastodon, so that may take some additional effort.

Also in the eventual music category, the fictional universe has a nightclub, the Last Frontier Nitery, and the LFN has a Mastodon account, too. The LFN, by the way, holds something of a central place in my plan to treat The Light’s Edge like a corporate media franchise. In particular, the premise—as I wrote for the Entropy Arbitrage newsletter a couple of months back in February—borrows from late-1990s/early-2000s genre television’s trope (does it appear anywhere else?) of carving time out of episodes where the main cast would watch a famous or up-and-coming band play a song.

These two fictional entities provide me with venues to share Free Culture music that doesn’t fit the requirements of the Free Culture Book Club or the aesthetic of the actual storytelling in The Light’s Edge. Gullivar shares whatever he listens to as a suggestion of his mood or situation, while the LFN will try to spotlight more current acts. And if the project goes well enough, maybe the LFN can even find a way to stream concerts with bands (or other acts) who currently produce Free Culture music, instead of linking to old album pages on music websites.

Those future hopes expressed, though, for a while, expect the Nitery to only showcase fictional bands, because I probably won’t want to imply that real humans have appeared somewhere and actively lent their talents to the project without their consent. Likewise, I’ll eventually write a more complete post about this, somewhere, but if you read this and create Free Culture music—as always, I mean compatible with a CC BY-SA project—and would like to “play” at the fictional nightclub in the overall project, with cross-promotion on the Fediverse, please get in touch.

Of the three accounts, only Gullivar’s has posted so far—no need to wonder why you can’t see any posts—but the others will start as we get closer to the first parts of the story.

Earburn

GitHub - jcolag/earburnBrowser extension to identify sites that accept Webmentions - jcolag/earburn

Publishing a browser extension—not even a complicated browser extension—has come closer to driving me to move off the grid into a cave somewhere than anything else that I’ve worked with. And you know that I’ve worked with a lot of goofy systems that I wouldn’t wish on anybody else. But…I have finally (well, mostly) managed to update Earburn for Manifest version 33.

Content Warning: This gets a bit rant-y, so a lot of you will want to start skimming...

The frustration started, appropriately enough, on April Fool’s Day, after I published the first version of the extension to Mozilla. As mentioned in early April’s Indie Web post, the Google Web Store puts developers through a Kafkaesque ordeal of charging money, asking the same questions multiple times in slightly different ways, requiring promotional images, making the user feel like a criminal-in-waiting, providing directions for obsolete user interfaces, and much more frustration than that. Sometimes, you get a combination of these problems, like how they make a big deal about how extensions can no longer access remote code, then ask on the submission form whether the extension uses remote code and, if so, can they audit it? 🤯

In that process, Google also revealed that it no longer accepts extensions built with old manifest versions, and so I therefore needed to update the manifest. And that seems fine, except that “update the manifest version” entails a bit more than updating the manifest. It took me forever to filter out all the pages that wanted to tell me about the timeline that different browsers and extension websites will require different versions—which helps absolutely nobody, especially now that most of the deadlines have elapsed—and even then, you “update the manifest” as follows.

  • Make changes to manifest.json. 👍 So far, so good, right?
  • Replace background pages with service workers. 🤔
  • Update API calls to use newer equivalents. 🫤
  • Replace blocking request listeners. 🙋
  • Change the security model. 🙀

Seriously, it uses more words, but right on Google’s migration summary page, it gives this list. And this felt like a problem, because “update the manifest” shows up on the list, but then you have a bunch of other tasks that amount to “oh, and you’ll probably need to rewrite everything, no big deal.”

At this point, I tried reading through the documentation, trying to figure out what applied to the seventy-or-so lines of JavaScript code in my actual project, versus some theoretical ideal. Eventually, after too much reading and asking people for advice, I mostly concluded that—because I don’t do any complex work—for the most part, the browser API needs to become the chrome API, mostly the same, but now 🙄 branded by Google…

Yeah, all those hoops to jump through, and I could ignore the majority of it. But they apparently can’t say that, or provide a readable guide to making changes for different kinds of functionality.

And that works, except that Firefox hasn’t quite fully migrated to the new form, for some reason, so every piece of documentation says that the manifest file—yes, we actually do still care about the manifest—needs to have something that looks like the following.

"background": {
  "service_worker": "earburn-bg.js"
},

Mozilla, though, can’t make any sense out of that, so it needs the older equivalent.

"background": {
  "scripts": [
    "earburn-bg.js"
  ]
},

This means that the extension needs two manifests, swapping between them for each build, and my head hurts.

Anyway, after all that, Google’s page finally accepted the extension without whining. And some further research—why do I need to research this nonsense? The page tells me to update things on my profile tab, but it doesn’t have a tabbed interface, you see—showed me where to input and verify my e-mail address for them.

Meanwhile, Mozilla now warns me that only Firefox v109 and later will support Manifest v3. Do people still run old versions of Firefox? I have v124 installed. Firefox v109 dropped in mid-January 2023, or one-and-a-quarter years ago, and I thought that Firefox auto-updated everywhere, these days. 🤷 At this point, I think that I need to stop caring, because maintaining backward compatibility feels less useful to me than maintaining a single version of the code does.

Regardless, I now have a version of the code that should work on current version of both major browser types, and as I said, I kind of want to move into a cave to put all this computer stuff behind me, after dealing with all this nonsense…

Red Potassium Alert 🚨

Wait, though, I have news…

My first attempt at submitting to Google didn’t go so well, and also reinforces the idea that Google thinks of all this as a scam. They tell me that I have committed a Red Potassium infraction, maybe because I provided some irrelevant(?) metadata.

Allegedly, this comes from a manual review, so the reviewer could have described and specified the actual problem. But no, it must make far more sense to them if I guess at what they want. Do they mean the metadata from the manifest or the inexplicably unrelated metadata that I typed into their form? Does this really have anything to do with potassium dichromate or did they pick it because the molecule has chromium ions in it? Did I specify something incorrectly? Should I worry more or less than if I had received an Amber Rubidium response? Did they test it and not understand what to do, and if so, why do they provide no space on the form to explain such things to reviewers? Why would they bother to tell me any of that, right…? They do have plenty of time to add a warning to the e-mail, though.

If any of your Product’s content, title, icon, description or screenshots contains false or misleading information, we may remove it.

Oh, yeah, that explains everything. 🙄 I have no idea if this relates to my Red Potassium crisis, effectively an accusation that I lied to them, or if it serves more as a boilerplate warning. But also, yes, if people lie about their software, definitely remove it, and don’t waste time telling me about it. They really do seem to think that browser extensions only exist to perpetrate a scam. Keep that in mind when you install extensions on Chrome, or use Chrome and its derivatives in general, I guess.

The Upshot for Earburn

Once Google finally approves the extension, I’ll post the link to Earburn-for-Chrome. I have also pushed out Earburn-for-Firefox v1.1, which yes, only works for v109 or later—sorry, that one person who unplugged his computer from the Internet over a year ago but still finds Webmentions extremely important for some reason—but includes the pop-up window to show an h-card included on the page.

Thorough (JSON Resume Theme)

GitHub - jcolag/jsonresume-theme-thoroughPlaceholder experiment with Handlebars.js. Contribute to jcolag/jsonresume-theme-thorough development by creating an account on GitHub.

With Earburn on one distribution site and on the verge of making it to another, as described above, and so building up my confidence for publishing software for other people, I decided to push my luck with my JSON Resume theme. After all, I didn’t particularly enjoy working with Handlebars, but if anybody else actually uses the format for their résumés, I’d like to support the ecosystem, because it seems decent overall, certainly less prone to breakages than using a word processor or (worse) dedicated application.

Glancing through some tutorials, I needed to add the main entry-point to the package.json manifest file. And then I jumped through the hoops.

npm link

As far as I can tell, link makes the project appear globally installed, for final testing. It seems to exist specifically to test to make sure that the project doesn’t rely on anything that the developer has installed on their computer, rather than as part of the project. I could have that wrong, though.

npm login

The login command links the npm command-line executable with an account on NPM, and will open a page in the browser to have you log in. I created an account a few weeks ago when I started thinking about publishing this package, so I didn’t have much to do other than literally logging in at the link that it supplied.

npm publish

The publish command corrected some minor errors in the manifest, asking me to do the same for the repository version. It then bundled everything up and made me log in again, and…success. I now have Thorough on NPM, where other people can use it.

Oh, right, and I still needed to fix the manifest file.

npm pkg fix

It made the repository link more general, instead of the URL to the repository page on GitHub. You can now find that version of the manifest on GitHub, too. In comparison to getting an extension into the Chrome Web Store, this almost seemed suspiciously smooth, ironic, considering how many NPM packages seem to exist primarily to scam people4

Entropy Arbitrage

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

I also made a handful of minor changes to the blog. The h-card now uses a fully qualified URL—that is, the URL includes the domain—to prevent confusion in software (like Earburn, as it turns out) that might want to pick the image out of the HTML. Post titles will now always display on the post’s page on one line. And the build-and-publish script now sends out Webmentions while not deleting the cache, so that I can take advantage of optimizations; I’ve had this last item working for a week or so, and now that I feel secure that it works, the time has come to share it.

More importantly…well, this last item will require a bit of explanation to make sense to most readers.

A long while back, I added the idea that a blog post could “update” a previous post in some way. For example, when I have posts about Star Trek, Free Culture, or other projects that take multiple weeks, I want the readers who walk in on the first part to know that I continued the work later. In other cases, I rethink my opinions or analysis of a topic, and want readers of the earlier post to at least know that a later post might address their concerns about something that I wrote, or introduce entirely new concerns.

Therefore, if you check the front-matter (headings) for many posts in the source code on GitHub, you’ll see a line that says update: followed by a list of older posts. Similarly, when you visit the posts listed, you’ll see a big warning at the top of the post, to explain that I have continued or revised my thoughts in the later post(s). You’ve probably seen the latter, before, especially if you read the Free Culture Book Club posts. I try to remember to build them into any multi-week project, now, before I start writing the posts.

However, for some reason, it never occurred to me to link in the other direction. The system—which I deliberately designed and set up, so that you don’t think that I inherited it and have somebody else to blame—only pushes people forward, never back. If I talk about a Free Culture novel for a few weeks, then, each post will point readers to all the future posts, but unless I explicitly say something like “remember that something like this happened in the first chapter,” new readers had no way of finding those earlier posts, even though I list them in the Markdown file.

That changed, this week. When posts identify themselves as updating earlier posts, the old posts get the blurb pointing forward, and the new posts get a blurb pointing back. And posts between the first and last of a series will get both blurbs. For a good example, I probably have my longest run of posts for a novel that consumed too much of my life for the first two months of 2023, so I can point you to Life Blood, part 5, and you’ll see four earlier posts and four later posts listed…assuming that I didn’t break anything. For a linear series of posts like that, I could probably get by with a tag, but that hides the connections behind an extra click, and I also primarily designed the format for when I write about something and then, maybe weeks or months later, want to rethink or add to my original comments, where those two posts may not cover the same abstract topic.

It took significantly less work to make it happen than it took to describe it, but I still hope that it improves the reading experience.

Next

Well, if Google gets back to me with a shopping list of additional grievances against Earburn, I’ll try to get to them first. Otherwise, everything seems stable, for the moment, so I’ll probably finally try to get back to Notoboto and clean out some of the library updates that have built up while I obsessed over Webmentions.

And at some point, I need to decide what to do next, in terms of the Indie Web work. Specifically, I need to work through whether and how I want to publish and subscribe posts, eventually.


Credits: The header image is Earth flag by John McConnell (sort of), in the public domain for its utilitarian design, per Earth Flag Ltd. v. Alamo Flag Co. No, really, we have a court case to say that you don’t get a copyright for slapping NASA images onto a background, because the people who think of themselves as owning Earth Day tried to sue a company for making flags.

  1. An adaptation of the old commercials for the nightly news, imploring you to worry about whether household goods might kill you, film at eleven, or the cliffhangers in TV shows immediately before going to commercial. 

  2. It sounds like a joke, but I really do have a story that ends in my asking a venture capital fund to stop bothering me in 1994 or so. And by the way, I hate guessing right on so many of these issues. 

  3. Still not really a manifest version, if you need to change the manifest and then everything else, but I’ll get to that… 

  4. Sensibly so, by the way. I could dig out the many articles listing a new batch of malware posing as JavaScript packages, over the years, but we get them so frequently because JavaScript runs in every organization, and often does something important.