IRC History by Jarkko Oikarinen
irc.org
irc.org
ISO 646[0] was a 7-bit character encoding, of which ASCII is a superset. It defined a common subset of characters that would always be available, leaving a few codepoints for local supersets to fill in. ASCII used some of those for punctuation, but Scandinavian character sets[1] filled them with extra lowercase and uppercase letters with diacritics.
IRC came from Finland, so it was designed for those charsets.
But the standard for the Internet is supposed to be ASCII, so what happens when you use those codes from ASCII that correspond to extra letters in the Scandinavian character sets? Take a look at RFC 1459:[2]
Because of IRC's scandanavian origin, the characters {}| are
considered to be the lower case equivalents of the characters []\,
respectively. This is a critical issue when determining the
equivalence of two nicknames.
Cute, right? Try it, it actually works (at least on Freenode!).[0] https://en.wikipedia.org/wiki/ISO/IEC_646
[1] https://en.wikipedia.org/wiki/ISO/IEC_646#National_variants
[2] http://tools.ietf.org/html/rfc1459 § 2.3
<nick> ::= <letter> { <letter> | <number> | <special> }
<letter> ::= 'a' ... 'z' | 'A' ... 'Z'
<number> ::= '0' ... '9'
<special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' foo[1] = "\r\n";
fooÄ1Å = "ÖrÖn";
Perhaps it's something you just get used to after a while. The standard QWERTY keyboard has a reversed form of this "caseness" , with lowercase being []\ and their "uppercase" shifted versions {}|.So when you wanted to do word processing, you would first switch to the code page that has the Nordic characters. For programming, you'd switch to the US code page.
I don't know how real operating systems handled it :)
It still exists in Windows, for the same purpose.
The sorting wasn't flawless though, because in ASCII these are ordered {, | and } but the proper (Swedish and Finnish) collation of the end of alphabet is ...xyzåäö. So unless you specifically programmed around it, you'd get slightly incorrect sorting.
Yes, you would get used to having ÄÅ and äå as brackets and braces in programming. If this thing came back I'd be in an hour happily saying things like:
while(<¤fh>) ä
Él=split ' ';
print "¤lÄ0Å, ¤lÄ3ÅÖn";
åAll this makes it incredibly hard when considering what could come after IRC, if anything. XMPP's MUCs just don't seem to have the same sticking power, and meanwhile things like Slack and HipChat come along and risk hijacking all our comms into closed silos rather than the relative openness of IRC and XMPP.
Regardless, after 15 years of addiction to IRC we're having a go at coming up with something better that still has some of the same appeal. The project is called Matrix.org, and the main differences to IRC are:
* Open federation; anyone can spin up a server and join in. * Conversation history (i.e. scrollback) is the main building block - a room's history is stored (partially or completely) over all the servers who are participating in a room. So there's no single point of control or failure. * Compulsory cryptographically signed message history (necessary due to the open federation) * Simple HTTP/JSON client-server API. (Server-server API is also HTTPS/JSON) * Store arbitrary structured data in the room - not just text messages. So you can use it for setting up VoIP calls; whiteboarding info; random device telemetry, or whatever. * Built-in distributed file storage (no more DCC, for better or worse) * Strong identity and end-to-end encryption (via a variant of Axolotl; currently in dev) * Support for 3rd party IDs - contact people based on their mail address, phone number, or whatever details folks chose to identify themselves by.
So if you like IRC and are interested in a fairly radical alternative, please drop by http://matrix.org/beta and say hi. It's in early beta, but it's fairly usable - we have Android and iOS clients and SDKs for python, perl, iOS, Android and an increasingly active dev community. Also, it's not frozen yet, so now is a great chance to get involved and make sure we get it right :)
IRC is largely a broadcast tool in the same sense that many social networks are. With IRC, you generally chat in open channels where anybody can join. While encryption protects against MITM, the privacy arguments are moot given the broadcast nature of public chat rooms. So to combine that with server-held scrollbacks, and I'm left really curious about your intended usage / benefits of end-to-end encryption.
So if you would you mind discussing a little more detail about that aspect of your chat protocol, I'd certainly be very interested in reading it :)
End-to-end crypto is another matter. It can make sense both for private and public chat rooms (if you define public rooms as ones which any member of the public can be invited into by an existing member), as if you use perfectly forward secrecy even a public room ends up being a secure distribution channel for the members - each message has a unique key which can be discarded by the clients after that message is downloaded and decrypted, meaning that the history cannot be replayed by an attacker. However, there's obviously a compromise between deliberately replayable history (after all, Matrix is all about synchronised conversation history) and PFS. So we've tried to be pragmatic and give the user a choice per-room to decide how secure the history should be.
At one end of the spectrum, you can pick a single key for the room which never changes - killing any PFS but meaning that any new client or device can read infinite scrollback for the room. At the other end of the spectrum you have pure PFS. In the middle, you have the ability to re-key the room for different criteria - e.g. changing the key whenever the membership state of a room changes, or applying different keys for different types of messages. This allows clients to cache as many keys as they need in order to replay the different classes of data (and for PFS, a client could chose to cache keys too to allow limited re-synchronisation from the server). The actual ratchet we're using to evolve the keys is a axolotl. All of the end-to-end crypto is currently in development, but we're just finishing the C++ axolotl implementation currently which will then be the reference implementation for all the various Matrix clients out there. And all of end-to-end crypto is optional: you can't join an encrypted room if your client doesn't do encryption, but we don't force clients or rooms to be encrypted if their users don't want them to be. There's a longer (high level) explanation of all this on http://lwn.net/Articles/634144/.
Matrix's social tools might parallel well together.
In terms of anti-spam proof-of-work stuff, identity, sybil attacks and all the good stuff mentioned at http://blog.getaether.net/post/101566226287/a-few-updates-ab... it sounds like Aether & Matrix are at a fairly similar point. It would be super-cool to chat to Burak and get the two federated together (after all, Matrix is all about being glue between other communication media) - will ping him :)
By the way, #startups on freenode seems to have the most HN users on it.
In my use of it - primarily social, less technical - this is actually a huge benefit. Whereas things I say on Facebook, on Twitter, even on Skype groups float around forever, this doesn't happen on IRC.
Only the other people in the channel log things, and if someone else turns up, they don't see what I've been talking about - the exact contents of my discussions aren't floating about forever so long as people don't intentionally distribute them.
However, these days there are IRC loggers and 4chan archivers.
I miss when more of the web was like that. It's nice.
I use bip[1], which is an IRC bouncer. I basically connect to networks from a remote machine, and when I hop into IRC, I connect to that machine - which gives me some playback of what's been said beforehand, so I know at least some of the context.
This doesn't solve the 'problem' for joining new channels, but it's nice if you have regular channels you hang out in.
1: https://bip.milkypond.org/ (their cert is broken :/)
erlang vs python .. connected clients vs historical search.. apples and oranges i guess...
How it actually accomplishes that within the framework of the "protocol," I don't know.
The Quassel protocol supports this, unfortunately it looks like the quassel team doesn't care about taking it further than where it is.
Senders – there's absolutely no reason to fake senders, since it was always valid for messages to come from people not in the channel.
In a future release InspIRCd will adopt support for the server-time extension which will allow us to get rid of the timestamp duplication if a user's client supports it.
/me also was the developer of XDCC http://xa.bi/files/irc/xdcc.3.3.0b.irc
Good old times!
I was a little late to the irc game... Only started at 12.... 18 years ago.
Loved mirc... Made tones of custom scripts
I loved serving and getting files using xdcc from my fansubbing days. I dabbled in some warez, stayed strong when irc.cjb.net came under fire of massive ddos, and jumped many nodes... Always with trusty xdcc to serve our releases before bittorent (was hosting server since initial python torrent server release too)
I can't imagine the Internet without IRC.
https://github.com/ircv3/ircv3-specifications/issues/55 https://github.com/ircv3/ircv3-specifications/issues/57
The eventual end game is to have a flag day and deprecate the legacy format, but this will probably take a few years to do.
/me bows
(For those of you who didn't have shell accounts in 1994, this is like being the inventor of the AK-47 and the skateboard at the same time.)
http://adam.ierymenko.name/ye_olde_source_code.html
That page has TextBox and also my first nontrivial c program, a nick collider.
As a tip, on Freenode, you can message the Alis bot to list channels:
/msg alis list *linux*
The reply from Alis will include how many users are in channels whose names match linux. If it has >500 users, it probably isn't going anywhere any time soon. (You can do this for other topics that interest you, of course.)It probably helps to find channels that have a purpose behind them.
https://news.ycombinator.com/item?id=8432703
Sadly, I was slightly too late to join the original, but there are now a number of similar clubs with available space. Tilde Town is where I spend my time, and it seems to be a nice, friendly place.
irc2 script was what really got me into programming all those years ago. At one point I had VT100 codes spammed to the status line in order to draw blocks on the screen for an in chat tetris game drawn in ascii. I also managed to hack out of the sandbox the client was running in by setting the ENCRYPT_PROGRAM feature to /bin/sh. Good times.
I believe that should be mentioned in the title of this post. Because the following text from the page felt misleading.
"The first IRC server (and still running) was tolsun.oulu.fi .."- Databases -
mysql http://dev.mysql.com/doc/refman/5.0/en/irc.html
postgres http://www.postgresql.org/community/irc/
firebird http://www.firebirdsql.org/en/news-portals/
oracle http://www.orafaq.com/wiki/IRC * not oficial *
- Virtualization -
virtualbox https://www.virtualbox.org/wiki/IRC
vagrant https://www.vagrantup.com/support.html
- Languages -
ruby https://www.ruby-lang.org/en/community/
python https://www.python.org/community/irc/
- Editors -
vim http://www.vim.org/community.php
emacs http://www.emacswiki.org/emacs/InternetRelayChat
- webservers -
nginx http://wiki.nginx.org/Community
apache http://httpd.apache.org/support.html
- Linux distros -
arch https://wiki.archlinux.org/index.php/IRC_channel
ubuntu https://wiki.ubuntu.com/IRC/ChannelList
freebsd https://wiki.freebsd.org/IrcChannels
- Java -
hibernate http://hibernate.org/community/
tomcat http://tomcat.apache.org/irc.html
- Window managers -
gnome https://wiki.gnome.org/Community/GettingInTouch/IRC
kde https://userbase.kde.org/IRC_Channels
fluxbox http://fluxbox.org/help/
- Broswers -
opera http://irc.opera.com/
chromium http://www.chromium.org/contact
firefox https://wiki.mozilla.org/IRC
- Image Software -