Welcome to my Website. Ideally, this spot would have some sort of ‘stats’ about what I've published here recently. But for now, I can only say that iced hibiscius tea with a bit of lemon juice and brown sugar is what I'm probably drinking.
Links
Here lies the things I've liked, bookmarked or interacted with across the Web (and beyond). Some people call them reactions or replies - I consider them my feedback back to the Web from my site.
Why I Retired my Webmention Server
Why I Retired My Webmention Server
After two years of building and running my own fully featured Webmention server, I think it’s time to shut it down. I’ve been thinking about doing so for a few months, and Eli’s comment has finally pushed me to take a closer look whether or not it’s worth it:
I think I’m ready to wholly remove all indieweb functionality from my website. The only Webmentions I receive at this point are spam from a Russian poker website that likes to link to 1 random blogpost of mine that has nothing to do with gambling, or gaming.
Before I get to the why, I want to take a moment to congratulate the IndieWeb community on their efforts to bring back a personal World Wide Web, a place where people come first and own their domains, a place where things are happily shared instead of stolen, a place where cool things inspire others to tinker. I’ve been a fan of the concept ever since I stumbled upon it, although the implementation of their ideas isn’t always ideal (see the IndieWeb mixed bag). My own Webmention implementation is freely available and fully implements the protocol, verified by unit tests, so knock yourself out if you decide to ignore the premise of this post.
Why Webmentions can be a drag
Maintaining anything can be a drag, honestly. But let’s focus on a generic self-hosted Webmention server instead.
1. Spam
As Eli mentioned, and quite self-explanatory. I spent days coding in guard clauses—see fighting Webmention and Pingback spam—but in the end, that doesn’t fix the underlying issue: not everyone on the internetz behaves the way they should, and in the end, whether you like it or not, you’re still either deleting spam in your inbox or spending time sifting through domain (dis)allow lists. It’s a never-ending story. My disallow list was larger than my allow list. AI-generated Wordpress sites pop up everywhere, “mentioning” your stuff to get a piece of your clicks.
I’d rather spend my Sunday doing something else.
2. Maintenance
This includes database maintenance—compression, upgrades, yaddayadda—and server maintenance—
sudo systemctl restart gojamming
yaddayadda.I’d rather spend my Sunday doing something else.
3. Very few mentions are worth mentioning
That’s right; about
75%
of the mentions I do receive are completely useless “like” messages. Microformats supports multiple “types” of mentions, whether it’s a comment on your article, an RSVP, or just a very social media-like “like” with an empty body. I had to write a few lines of code to filter out that stuff. If you don’t believe me, visit a random Webmention-enabled site and scroll down to the “comments” until you see a lot of Twitter-infested avatars or hearts without any text.4. Microformats is far from perfect
A Webmention parses HTML to scan for the author, aforementioned mention type, and contents. The problem is that some people send mentions as type “like” with an empty body, and some as type “mention” with body text “like”. Then your parser fails to detect a
h-author
or someone placed one of those bogus classes on the wrong<div/>
. Every little design mistake someone makes on their site results in a fucked up mention. You did take all those stupid cases into account while building your server, did you?5. Most mentions come from Bridgy
Bridgy is a free service that allows you to connect social media accounts to your Webmention server (probably using another hosted service, Webmention.io), meaning for instance tweets of people mentioning or replying to your link via Twitter suddenly appear as a mention on your site. Great stuff, right? Except those people have no idea their avatar and text is being yanked. I’ve questioned these practices before and it’s clear that they’re built without thinking too hard about privacy.
As a result, I had to anonymize everything coming from Bridgy myself. Yet another unnecessary
if {}
clause, yay. By the way, using a hosted Webmention server kind of defeats the purpose of the whole IndieWeb “own your data” mantra!6. Very few mentions are received at all
In the past month, I think I received exactly two mentions: both originating from
jefklakscodex.com
, my other blog. Me, myself, and I! I did/do receive the occasional mention, but I’m acquainted with most of these authors and we also exchange pleasantries using email, a protocol I deem much more appropriate for the occasional digital message or two.I’ve been on the fence several times, and the
/notes
section was solely there to provide a mention starting point for other sites, but I’d rather just send out emails: contrary to the Webmentioned notes, they usually net interesting conversations.7. My own server is far from perfect
When I published a blogpost and then deleted it in January, I accidentally triggered mentions to be resent for every single post on Brain Baking due to how my server uses the RSS feed and timestamps to determine which article to process. Whoops. Even though that’s fixed now, I’m sure the server is still a potential danger to both others (sorry about the spam!) and my own server (please don’t hack me).
8. It complicates my website
As mentioned, before you can enable Webmentions, you need to be “IndieWeb-complaint” by sprinkling CSS pseudotags to label content and help Microformat parsers correctly identify your data. If your HTML structure isn’t up to snuff it could require reshuffling things back and forth, as a
p-author
tag should be within ah-entry
. After hours of cursing I just ended up pastingh-entry
on the root<html/>
element. For now, I’ll leave the tags as is.I eventually threw out Gemini compatibility precisely because of that: yet another thing that needlessly complicates matters.
To have comments or not to have comment—that’s the question. I’ve seen similar evolutions on other blogs. As for me, I’d rather spend my Sunday doing something else. Wait, I already said that, didn’t I? I’m at a point in life where I need to optimize my time spent with anything, and again, If I have to choose between spending time coding in yet another edge case or just writing and replying to a lovely email from a reader, I’d prefer the latter, even though I highly enjoyed building the Go server, and when things start itching again, I’ll probably build another IndieWeb tool in the future. And no, that problem isn’t fixed by outsourcing your mentions, it just triggers other more questionable problems.
If you’d like to comment and/or reach out, I’d be happy to receive, read, and respond to your email. The “reply via email” button is still there in the RSS feed. Cheers!
(No mentions were sent during the publishing of this post)

So long, Twitter API, and thanks for all the fish
Well, it’s come to this. Twitter is burning, a billionaire owes money, an API will soon get lobotomized, so Bridgy‘s Twitter support
will die within the monthis dead. Granary‘s and twitter-atom too. The Twitter API may now be effectively unmaintained, but they still managed to find an engineer somewhere to change a few numbers in the billing code and update some text on a web page.What a waste. Plenty of ink has been spilled on all this already, I won’t belabor the point, but what an utter waste.
Right now, Bridgy uses a free tier of Twitter’s API, equivalent to what many other major social networks offer. By April 29th, this free tier will disappear. My options will be a $100/mo plan with a quota of 10k tweets/mo, roughly .1% of what Bridgy currently uses, or an enterprise plan with unknown quota that reportedly starts at $42k/mo.
Neither of these options is feasible. Bridgy can’t function with .1% of its current usage, and I won’t pay Twitter $500k/yr for a little side project.
The silver lining is, after all the chaos and destruction and flight to the fediverse, Twitter doesn’t feel nearly as important now as it did half a year ago. It’s always been Bridgy’s biggest user base, it had a great 11-year run, I never quite expected it to end like this, but here we are.
To everyone who used it, thank you for your interest and support over the years! It’s been a great ride. And who knows, Elon’s Twitter 2.0 is awful at comms and changes its plans all the time, so there’s a chance they’ll take this all back tomorrow. But assuming it sticks, Bridgy Twitter
will stop working on April 29, if not before. I plan to leave it up and running until then.got unceremoniously suspended on April 4th. So much for the month’s notice.A billionaire owes money, Twitter is burning, and the future is the IndieWeb and the fediverse. Try out Mastodon with Bridgy, classic or Fed, and join us there!
Microblog
My microblog is where I post quick notes or semi-formed posts. Things that don't quite fit into what I'd consider a blog post but also would need a permalink.
I have! I'm looking for something that'd work as an extension to SQLite itself, so I can include it in client applications.
Okay, so I got this part working pretty easy. I might need a few SQL scripts as test cases, but I can capture the changes made. Now to make it possible to apply those changes. Next could be making it easy to serialize those changes as a stream. Allows for a bunch of other angles of use. Let's keep this going, lol.
Oh, this is interesting. I can see that working for that case. I'm reaching a bit further now, wondering how to communicate schema changes so both databases are working with the correct version.
Subscribe
The most optimal way to follow me would be by using a social reader. Apropos to that, you can drop this site's feed URL into your preferred feed reader.