raf/On group chat, chan42 and other things

A while ago pgf and I started this endless discussion about how the centralisation of the Internet in some key services seems to be stifling some of the giddiness of the old days (by old I mean the nineties). We don't necessarily agree on all of this, specially since there is usually beer involved in such discussions, but here is my spin over it.

These days the preferred Internet spots for random nonsensical group discussion seem to be Reddit/4chan (or argh Facebook/G+). Back in the day (for me) this was mostly IRC, over several servers (FreeNode, some local servers, etc) and some specialised web boards.

The good (or bad) thing about IRC was that the variety of servers/channels led to all sorts of behaviours, some places were serious while other were explicitly intended for fooling around.

  1. Interaction was real time. Most channels did not keep logs, and even if they did, nobody would show up to comment something said 12 hours ago.
  2. Since everyone could create their own channel, everyone did, and operators were in on the fun. Voice/Ban dynamics made for some pretty amusing episodes (check bash.org).
  3. Most servers supported registered nicknames that only you could use. Some servers enforced their use, others did not. It was common for users to switch nicknames for a prank or just as a joke.

How do current services fill into this view? Well:

So pgf supported that we are missing some kind of service that offers real time group chat. I am going to focus on text chat here, but you can poke pgf directly for ideas on audio.

Among the both of us, we defined the requirements for this mythic system as, more or less the following:

  1. Real time chat, with no server side history.
  2. Easy to create separate chats, as in click and done
  3. Decentralised, because we can :D

You'll notice that there is nothing in those requirements about identification/nicknames/etc that is because we never actually agreed on those.

User identity

From this discussion I created a hacky group chat, called chan42, that works over websockets using JSON messages. Since I could never agree on a solution for user identification I tried to fit them all in:

  1. Server provided session identicons to distinguish between users. These did not work across sessions they were just intended to prevent impersonation.
  2. Client side nicknames. These are non unique, client chosen nicknames, mostly for fun and games.
  3. Server nicknames (I call these handles). These should be unique nicknames enforced by the server. So far I only experimented with this for random nicknames.

This resulted in some fun moments with people playing with nicknames and being assigned hilarious server handles. It sounds awkward to allow users to set any nickname without checking for duplicates, but I actually find it reasonable to have a group discussion in a room where all participants are unidentifiable - TLDR; uniqueness is not important.

So far I only use (3.) for random funny server handles, but the following should also be possible (FYI this is not supported, but can be future work for someone with some free time :D):

All this identity mumbo jumbo brings in some extra complexity, in how do we explain users what is going on, and what everything means. I’ll happily offer praise and beer to any designer/interaction expert that can merge all this into a coherent interface concept. Technically thins could work like this:

  1. If a user is not authenticated through any special means (facebook/twitter/ or even user:password) then he is assigned a unique session id. This id only lasts until the user disconnects and is used to generate the user identicon.
  2. If the user has authenticated to the server (facebook/twitter/etc) then the server identifies the user using handle.
  3. Nicknames are completely independent of the previous points - they are a client side feature - it is important to help the user understand this though.

Being Distributed

By distributed I mean being a disjoint bunch of chatrooms hosted by however wants to host them. Without a common infrastructure or oversight.

While IRC was fully distributed, I feel it fell short on this area because each network was not only one chat room but also one identity (i.e. nickserv). Also support in clients for multiple servers was not exactly stellar.

From the technical standpoint XMPP MUC got the distributed part right. You could connect to a chatroom in any server. But it suffered from other issues. Hosting a XMPP server was a hard job. Also client support for MUC was sometimes poor.

All other services gain no benefit from being truly distributed, since they get profit from steering users to their chat services - to gather revenue.