You have just read a blog post written by Jason McIntosh.
Thank you kindly for your time and attention today.
Last week, after a period of introspection, I began work on the next revision of Bayamo, the “braided chat-stream viewer” that I first prototyped in 2017. A conceptual breakthrough last night directed me to work in aspects from one of my favorite recent IndieWeb-adjacent applications, and the results bring me such immediate delight that I thought I’d indulge in a “developer’s notebook” post, even while this project remains on my workbench, some distance from any public release.
I have lately felt shipwrecked, separated from my many excellent friends and peers via the terrible pandemic and the way that isolation, if left unchecked, can become self-reinforcing. I first toyed with Bayamo years ago because my friends have long been scattered across a hundred chat channels, and I once again longed for some way to keep tabs on their activity without — well, wihout tabs.
Then as now, I hate the typical chat-app interaction of having several windows, each dedicated to one chat network, and each filled with tabs with their “unread messages here!” lights on. What could the messages be? Won’t know until you click them! Each and every lit-up tab asking for my attention, and by extension asking me to spend much of my day just clicking around my windows, always wondering if any of the conversation will be interesting, or anyway more interesting than the current tab’s content.
Because if I don’t, then why do I bother at all, right? And so, tired of walking in tab-chasing circles through my chat-window stack, I end up reading nothing at all and feeling lonely and miserable — despite being literally surrounded by all my friends having brilliant conversations about every topic, hidden away in their own alcoves.
As I wrote in 2017:
I wanted a flow, letting me monitor the tone and tenor as much as the content of online conversations, and from various trusted sources, whenever I felt like dipping in with just a little background attention. I would otherwise feel free to it let drift on by, with no sense of missing something. This is what Bayamo angles at. For a prototype, I think I works okay, especially when allowed to babble away on a secondary display.
At the time, I based Bayamo on the ancient, much-maligned, but open and flexible chat protocol of IRC. While I continue feel the same atavistic pull to using IRC, I have switched my favored vehicle from a Mac app — which Bayamo required — to IRCCloud. For fifty bucks a year, you get a handsome and stable web-based IRC client with the “always-online” presence expected in our Slack-spoiled world. (It features its own Slack bridge, too, long after that chat company finally cut away its own threadbare IRC support.)
And, most relevant to my eternal grouse against clicking lit tabs, it lets every paying customer use its full API. Aha.
So, last Wednesday, my mind clear after an especially intense (if topically unrelated) therapy session, I tucked in. By evening I had remade a better Bayamo, using new skills I’d picked up earlier in the year, and running much more efficiently than my last CPU-chomping prototype. I boasted about the achievement to my friends on ifMUD, who had not seen me in a long time, but whose conversations I once again felt I had a chance to follow.
An aside about ifMUD: Even though I did invoke the MUD’s name in my 2017 article, I did not clearly see that Bayamo’s original mission could have been expressed as “Make all of IRC work like ifMUD”. The MUD’s own multi-channel chat pushes everything into a single stream, with every utterance prefaced by the name of the channel as well as the speaker. It gives you a bevy of special commands and keystrokes to deftly switch between which channel you yourself are speaking to, as well as fine-tuned controls for temporarily muting chatty channels, recapping past conversation, or quietly slipping in and out of their membership rosters.
Like any purely text-based system, ifMUD’s learning curve poses a challenge to new users. I had reason, many years ago, to put the work into learning its unique channels system — and once I understood it, I loved it. I quickly got comfortable with letting a single MUD client window stay open while dozens of conversations among dozens of people flow by without any input needed from me. And so, when subsequently facing the more typical Slack/Discord/IRC/what-have-you setup of endless clicky-clicky tabs, I felt blocked and frustrated. I want that ifMUD-style stream everywhere! And with everything in it!!
And as my friends on ifMUD gently told me yesterday, this idea is utter nonsense. It cannot possibly scale beyond membership in more than a handful of moderately active channels; anything more and the comfortable flow would turn into a Matrix-style blur of tumbling text, pouring down one’s screen far too fast to offer any meaning. Giving the problem some thought in the subsequent days, I made the natural next steps of re-implementing even more of ifMUD in my silly invention, porting over its smart channel-muting features. But, of course, the real solution involved thinking in new directions entirely.
Yesterday the idea struck me to try infusing Fraidycat’s DNA into the prototype. I have already sung Fraidycat’s praises on Fogknife, and my love for this application has not dimmed in the months since. This feed reader continuously collects news from sources across the web and quietly updates its own list of the more recent items, grouped by source and ordered by recency. It holds all items with a feather-light grip, quick to let outdated items — whether read or not — scroll out of view and out of mind.
Well, that sounded applicable. So now, the Bayamo-followup prototype looks like this (with names and other sensitive text blurred out for propriety’s sake):
This screenshot from an iPad (running Panic’s Prompt terminal emulator) shows the prototype displaying the most recent five messages from the most recent four channels of the many that IRCCloud keeps me connected to. From the top, there is one of Freenode’s IRC channels about the IndieWeb, a Slack channel for sharing silly images, some chatter from ifMUD, and a political discussion from a different Slack.
These four channels appear in the order of recent activity. In this case,
#indieweb-dev has seen the most recent new conversation. Each time a new message comes in over the API, the screen redraws itself, reordering the channels as appropriate. And as with the original Bayamo, nothing displays timestamps, because I do not care. If the program displays a channel at all, I know that I must be looking at fairly fresh conversation; no need pinpoint anything with to-the-second granularity.
So, like Fraidycat, it doesn’t grow and grow a backlog whose tip drifts every more unattainably into the past. Everything that the program wants to show you, at any given time, fits on a single screen. Channels that haven’t seen any activity for a while drift “below the fold” and out of sight, until they happen to pick up again. More active channels stay in-view, but display only the most current conversation — as if you’ve just rounded the corner and came across your friends discussing something. Enough to give you the gist, goes the theory.
And to this theory I have added another twist: next to each channel label is collection of five “keywords”, the output of a third-party text-summarizing code library whose input is the last several dozen utterances seen within that channel. Does this actually work? Sorta! The words do gradually change over time as the conversation shifts; you can tell, for example, that my friends on the MUD had been discussing home renovation for some time. And coincidentally, my separate friends in that Slack “dumb-pix” channel had shared photos of some deck repairs, explaining the presence of “frame” and “floor” there.
At any rate, the program — like the original Bayamo — remains a strictly read-only affair. To actually participate in a conversation, you need to pull up your “real” chat-client of choice and join the channel that piqued your interest — which will have the side-effect of filling you in on all the chatter that preceded the five lines that this program shows.
I feel like there’s something here. This project appeals to me in ways that it didn’t quite hit in 2017, and much of that comes from my explorations since then of IndieWeb’s philosophy: mixing a stubborn insistence to use the web on one’s own terms with the acceptance that everyone else will use it however they wish as well, and reconciling the two through both an open heart, open standards, and clever tooling that draws the two together.
All I can do for now is run this foolish program for a while and see where it wants to go. I can say it felt pretty good to very literally dust off and charge up my shelved circa-2013 iPad (which I otherwise keep around, running an outdated OS, to prove to my disbelieving self that I used to make games) for the sake of this project. The prototype now treats the old iPad as a dedicated device, and they get along swimmingly so far, propped up in the corner of my desk and running continuously. Let them both be beautifully ridiculous together for a while, and let’s see what happens.
To share a response that links to this page from somewhere else on the web, paste its URL here.