everybody loves to chat, right? let's take a look at the oldest still-in-use chat protocol out there: the venerable IRC.
welcome to lodef! this is a show about simple technologies, right? human-scale programs and protocols that you can actually fit in your head. simple technologies can still bring people together, and what better example than that of IRC. $ cd ~/src/taverner over here I've got an IRC server I wrote. I put this codebase together in a couple weekends. it's under 400 lines of code. but it works; I've used it to have real conversations with my friends. $ make count $ make run let's start it up. it's listening on port 6667, the standard port for IRC. now we could connect a real client, or we could use netcat! $ nc localhost 6667 if you've never used netcat before, it's great. it connects to a socket and lets you just send data and receive directly and see the results you get back in the terminal. IRC wants to know who we are so: > NICK technomancy > USER technomancy 0 * technomancy so the first command sets the nick, which is like ... the actual name you use on the server. for historical reasons, you also provide a username and supposed "real name", both of which are more or less ignored and required for historical reasons. get used to that, by the way. there's a lot less nonsense here by volume than a typical modern stack, but there's still plenty of things we do just because it's always been that way. anyway now <hacker-voice>I'm in</hacker-voice> the server is running on the bottom window and it says I've identified as technomancy; it's accepted my nick and username, and it's introducing itself in its own weird way. so zero channels exist yet, so let's create one by JOINing it. back to our netcat session, we're gonna join a channel called lodef. > JOIN #lodef here we go, so no topic set; we're the only inhabitant in the channel. at this point it doesn't really work to talk with just ourself, so let's try connecting with a real client. going to use one that's built in to emacs here, since I'm already in emacs. $ C-u M-x rcirc localhost RET 6667 RET me2 RET $ /join #lodef > say hi so we're connected using a real client now, and we want to join the same channel we were in previously, so we can see technomancy is in here. if we go back to netcat, we can see that the server has notified us that me2 has joined and me2 has sent a message to the server; the PRIVMSG is how every message gets sent. this is the command, #lodef tells you what was the target of the message, and then everything after the colon is the content of the message. so we can send a message back here: > PRIVMSG #lodef :hello me2 and it just shows up for our other clients! that's all we got time for now, but this covers the basics of connecting, sending, and receiving messages. next time we'll write some code to make an actual bot instead of doing this all by hand. thanks for watching.
copyright © 2023 Phil Hagelberg released under CC-BY-SA 4.0