From Feb 2011 to May 2017
Note: We moved the #indiewebcamp channel to #indieweb and #indieweb-dev in July 2016
I consider my Slack/IRC gateway the best one out there, at least in terms of looking the most native to IRC users. We use this to connect the #indieweb IRC channel with our Slack team, so people can join the same rooms from either Slack or IRC. Often times people don't even realize that other users in IRC are actually connected via the Slack bridge! However, one glaring missing feature was that image uploads from Slack did not come through right. Today, I fixed that!
Now when you upload an image in Slack, it is converted to a message in IRC that should look "normal" to IRC users, as if the person had shared the image in IRC directly.
There are a few different ways images can be sent in Slack. When you upload an image, Slack provides fields for setting the image title (defaults to the filename), as well as adding a comment.
Here are the various combinations of ways images appear in Slack compared to how the gateway translates them to IRC.
In this case, only a URL is sent in IRC, since it includes the filename at the end of the URL, which is typically what people in IRC are accustomed to seeing when people link to images. The image URL I actually ended up with from Slack ended with the "pub_secret" parameter, so I tacked on the filename at the end in order to both look better for people reading it, as well as to get IRC clients to recognize the image file extension and inline the image.
In Slack, sometimes people include unique text in the image title which becomes part of the message they are sending.
In this case, the gateway includes the text they typed as the first part of the message in IRC, in order to approximate how it appears in Slack where the image title appears first.
If you include a comment in the image upload screen, it appears below the image in Slack. Note that in this example I did not change the title of the file.
In this case, the message in IRC starts with the URL and includes the comment at the end of the line. (Also notice the emoji shows up properly!)
The last combination is possible when the user both sets a custom title and includes a comment.
Combining both previous examples, this includes the image title first, followed by the image URL, followed by the comment.
Happy image uploading!
For quite some time, we've been running my IRC/Slack gateway so that our main #indieweb IRC channel is also available in Slack. It's great because it allows people to use the nice mobile-friendly Slack client, while also not locking ourselves into a proprietary platform. The bridge is also used to allow people to join the chat from our web interface.
Prior to the previous IndieWeb Summit (now over 6 months ago!), we only had one IRC channel. At the Summit, we decided to start using more channels to help keep technical discussions separate from general and user-centric discussions. (See https://indieweb.org/discuss for more details). However, the bridge was written with only one IRC channel in mind so it only bridged the main channel. Lately, we've had more people joining the Slack instance and it's started to cause fragmented discussions.
Today I updated the Slack gateway to be able to support multiple IRC/Slack channels!
You can define multiple pairs of channels in the config file, so that the gateway knows which Slack channels correspond with which IRC channels. When a message is received in Slack, a new IRC user joins all the defined rooms and the messages are routed appropriately.
This is live today, and is now bridging the following rooms:
We have public logs for all the channels except for #indieweb-chat. We've intentionally always had an un-logged channel available for off-topic chatter. That channel has been called #indiechat. Even though we don't have a paid Slack account so the channel history is limited to 10,000 across all channels, I wasn't comfortable bridging the #indiechat room to Slack since it has traditionally been ephemeral, and sending it to Slack means that visibility would change a little. So instead, I used the under-consideration #indieweb-chat channel to connect with Slack since people weren't using that very much on IRC yet anyway.
People often look at me funny when I say I live in IRC. After reading this post, I hope you will be able to understand why IRC has continued to be a useful platform for me for many years. This is also an attempt to document the functionality it provides since I want to replace the underlying technology later.
I have lived in IRC for about 7 years. What I mean by this is that IRC has been my primary hub for reading information online and interacting with people and systems. I don't use an RSS reader, I visit Twitter and Facebook only occasionally, and I try to limit my email usage to only business. Instead, I have created filters from various sources that send notifications to various IRC channels about things I am interested in.
I typically use the open source WeeChat IRC client. The screenshot below shows a what I normally see when I am connected.
The numbers in the blue bar on the bottom correspond to IRC channels. If the number appears in the bar, it means there is new activity in that channel that I haven't seen yet. The numbers and colors tell me more about the type of activity in the channel.
The numbers in parentheses indicate the type of activity in the window. When someone mentions me, the window number turns pink, and the first number in parens indicates the number of messages that mention me, the second number is the number of other messages. When the channel number is yellow, it means someone has said something, the first number if parens is the number of messages, the second number (if present) is the number of join/part messages. If the channel number is just light grey, it means the only activity in the window is join/parts.
When there are no new messages in any channels the bar looks like this:
WeeChat runs on a server in a tmux session, so that I am always connected to the IRC channels, which means when I come back to my computer I can quickly scroll through recent messages to catch up. Lately, however, I've had an easier time skimming the web logs for the #indiewebcamp channel, since they are formatted much nicer than this terminal window: indiewebcamp.com/irc/today
WeeChat supports approximately a billion keyboard shortcuts. The few I typically use are:
Over time, I've built up a mental mapping of numbers to channels, so I know when I see the number "2" in the list, it means there is activity in the #indiewebcamp channel, but if I see the number "7" in the list, it's probably just logs from my web server. I don't have all of them memorized of course, but the most common ones and the ones I care most about I know.
Currently I have information from several different types of data sources.
There are several communities I am a part of where IRC is the primary means of communication. The #pdxtech and #indiewebcamp channels on Freenode, the W3C Social Web Working Group (on irc.w3.org), several groups on the internal Esri IRC server, and a few others. I also have a private IRC server I use for close friends who are willing to put up with terrible IRC clients to talk to me.
I rarely actually read my Twitter timeline. Instead, I follow several hashtags and search terms, which pipe to various IRC channels.
In the public #indiewebcamp channel, the resident IRC bot reports when people talk about "IndieWeb", "IndieWebCamp", "IndieAuth", and "Webmention" on Twitter. Similarly, in the public #microformats channel, I see tweets about "microformats" and a few other terms.
I have a search for a few Esri keywords that show up in some of the internal Esri IRC channels.
A search running for some of the names of my other projects show up in channels on my private IRC server.
Some of my other web apps also report things to IRC, such as when someone buys credits on vanity-qrcode.com or notifications when disks are nearing full.
I also wrote a Wordpress plugin that sends a notification when new posts are published or new comments are posted.
Rather than needing to check github.com all the time, or turn on email notifications, I have IRC channels for various groupings of projects. Notifications about people opening issues or making commits are sent there, giving me an easy way of seeing activity on various repos grouped by category. I have a channel for #indieweb projects such as webmention.io, Teacup, Monocle, Atlas and many more. Several different private Esri channels give me notifications about the various projects we work on like the ArcGIS for Developers website, the Geotrigger Service, and previously, the Geoloqi repositories.
I've been hacking on various home automation projects for many years. It always ends up seeming that the easiest way to get notifications of things is through IRC. Over the years, I've used IRC to get notifications for many things such as
For every channel I use for notifications, I run an IRC bot that has an HTTP server and listens to a few UDP ports. The UDP ports allow me to "fire and forget" messages into IRC that might otherwise bog down the server that's sending them. This is actually how the original MediaWiki RecentChanges bot works, which is what this entire system is based on. I added the HTTP interface to give myself a more flexible and secure mechanism for sending messages to IRC as well.
At the core, the connection to IRC is really just this bot that listens for external messages. Everything that generates messages for IRC actually lives on many different servers depending on what it is.
Weechat has several plugins for sending notifications to a mobile phone. I use the Prowl iOS app on my phone to receive push notifications. The Prowl service exposes an HTTP endpoint that Weechat uses to send me a push notification.
By default, it will send notifications whenever your IRC nickname is mentioned. This is handy for knowing if someone is trying to get a hold of me on IRC, but is also a quick way to have notifications from various server scripts sent to my phone. I will often add on "aaronpk" to the log message because I know that will cause it to send a notification to my phone.
If I am connected to the Weechat session, it knows not to send push notifications to my phone.
A single line in IRC has several pieces of information. Some of these are built in to the IRC network, but I have also developed a few conventions for what goes into a line of IRC as well.
[runkeeper:bikeride] 3.5km 15 minutes http://aaronparecki.com/metrics/2015/08/28/161857/
[github.com/aaronpk/Quill] kylewm opened issue #28: support identity URLs with non-trivial paths https://github.com/aaronpk/Quill/issues/28
[AirBnB] Michigan door code was set to 6932
[door] incoming call
[@patrickgrimard] Great article explaining #Oauth2 https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified (http://twtr.io/12zRXPmw37j)
Another major benefit of having Weechat be my primary interface and having it always signed in, is it stores logs of all channels as plain text files. It turns out text files are relatively easy to keep around in the long term, much more so than migrating databases between versions or different servers over the years. Text files are also very easy to search, you can use grep to find things very quickly!
Logs are grouped by IRC network, and in folders for each year, with one file per day.
irclogs/ /2014/ ... /2015/ /... /esri/ /... /#portland.08-25.log /#portland.08-26.log /freenode/ /... /#indiewebcamp.08-25.log /#indiewebcamp.08-26.log
There are clearly much nicer interfaces than what I am currently using. Weechat is a terminal client, so I don't get things like inline images, and URLs that wrap multiple lines are cumbersome to open. There isn't a mobile interface, aside from mobile SSH. And yet, despite these shortcomings, it continues to be more useful than any alternative I've found yet.
Here is a summary of the key components of why I believe this setup has stuck around for so many years.
There are, however, several shortcomings of this setup.
At this point I am finding myself wanting some of the nicer features of a graphical interface, and I'm planning on finding or building a system that can replace my use of IRC. However, regardless of what this envisioned system could do, regardless of the grand vision, my current setup does this subset of things right now, which is enough for me to have kept using it for 7+ years.
That said, there are a few things I would like my new interface to do that would be challenging or impossible with my current interface.