WEBVTT 00:00.000 --> 00:10.000 I was definitely not expecting this. 00:10.000 --> 00:15.000 You got both, man. 00:15.000 --> 00:17.000 Yeah, thank you for being here. 00:17.000 --> 00:22.000 So we're going to talk about IRC in 2025. 00:22.000 --> 00:28.000 Maybe you've heard about IRC, like 20 years ago or something. 00:29.000 --> 00:32.000 Not heard about it since. 00:32.000 --> 00:36.000 So we're going to show that we're still working on it. 00:36.000 --> 00:39.000 We want to modernize it. 00:39.000 --> 00:43.000 Yeah, we're going to explain how. 00:43.000 --> 00:50.000 So yeah, let's start with some people, some young people might not know what IRC is up for. 00:50.000 --> 00:53.000 Maybe you've seen this XKCD before. 00:53.000 --> 00:57.000 So basically this guy on the right, it's me 80 years old. 00:57.000 --> 00:59.000 In the future, maybe. 00:59.000 --> 01:02.000 So why IST using IRC? 01:02.000 --> 01:07.000 I guess it's a question of personal preference of communities. 01:07.000 --> 01:11.000 Like it's a community as some professors. 01:11.000 --> 01:13.000 Which community is some vibe. 01:13.000 --> 01:15.000 So diversity is a good thing. 01:15.000 --> 01:20.000 And yeah, let's use what we like. 01:20.000 --> 01:25.000 So what was IRC like in 2023? 01:26.000 --> 01:30.000 Well, back in my day, IRC used to look like this. 01:30.000 --> 01:33.000 No fuss. 01:33.000 --> 01:35.000 Not so many features either. 01:35.000 --> 01:42.000 So IRC in the back in the day is 20 years ago was mostly on desktop. 01:42.000 --> 01:46.000 There were no easily, well, 20 years ago smartphones were not widespread. 01:46.000 --> 01:49.000 But I mean, it was mostly desktop clients. 01:49.000 --> 01:53.000 Terminal clients, not quite easy to use. 01:53.000 --> 01:56.000 Have to learn a lot of commands, configuration. 01:56.000 --> 01:59.000 If you're using a second desktop, you have to configure it again. 01:59.000 --> 02:01.000 So it was quite hot to use back in the time. 02:01.000 --> 02:05.000 And this is maybe what you remember from IRC. 02:05.000 --> 02:11.000 It has a lot of the lot since which is the purpose of the presentation. 02:11.000 --> 02:13.000 Okay, so what are we talking about here? 02:13.000 --> 02:17.000 So this is a client server, instant messaging protocol. 02:17.000 --> 02:19.000 That is implemented by several pieces of stuff. 02:19.000 --> 02:21.000 So we have a client. 02:21.000 --> 02:24.000 And we have a server on the right side. 02:24.000 --> 02:26.000 So we have several clients today. 02:26.000 --> 02:28.000 This is like the picture today. 02:28.000 --> 02:31.000 So we have clients on Android and IRC. 02:31.000 --> 02:34.000 As well as the desktop and on the web. 02:34.000 --> 02:36.000 So you might recognize some of the icons. 02:36.000 --> 02:38.000 And some of these might be new to use. 02:38.000 --> 02:41.000 So the pink cat is called a sentite. 02:41.000 --> 02:45.000 And on the right, you have networks of servers, 02:45.000 --> 02:48.000 which represent different communities. 02:48.000 --> 02:51.000 So you have liberal I, which is web node, which replaced free node. 02:51.000 --> 02:53.000 That you may have heard about. 02:53.000 --> 02:57.000 And basically, you configure your clients connect to all these networks. 02:57.000 --> 03:01.000 And you would also configure your other client to do the same. 03:01.000 --> 03:08.000 And this is, this is nice, but this requires us to configure each client separately. 03:08.000 --> 03:13.000 And copy the configuration over, which was a really pain point in IRC before. 03:13.000 --> 03:17.000 So we introduced a new piece about 10 or 15 years ago. 03:17.000 --> 03:18.000 Which is a bouncer. 03:18.000 --> 03:23.000 It's an intermediate server that sits between your clients and the network that you connect to. 03:23.000 --> 03:28.000 And basically, these bouncer stores your account, meaning, which networks are connected to. 03:28.000 --> 03:33.000 And your chat messages, some message history. 03:33.000 --> 03:36.000 And we'll see some of these features later. 03:36.000 --> 03:39.000 But this is a key piece that makes IRC modern today. 03:39.000 --> 03:42.000 And there are several implementations of bouncer's. 03:42.000 --> 03:44.000 As I can see, it might be the one that you know. 03:44.000 --> 03:47.000 But now there is so joy that is developed by Simon and I. 03:47.000 --> 03:50.000 And this blue icon is IRC today. 03:50.000 --> 03:54.000 This is a service that I'm running commercial, so as a service. 03:54.000 --> 03:57.000 Just a quick note is Gamja. 03:57.000 --> 04:00.000 And the little blue icon was also developed by Simon and I. 04:00.000 --> 04:04.000 So we have apps about everyone ecosystem. 04:04.000 --> 04:09.000 So now I'm going to show you what the user experience looks like. 04:09.000 --> 04:13.000 Just so you have a quick understanding of what you will expect from IRC today if you are to use it. 04:13.000 --> 04:17.000 It's quite different from 20 years ago. 04:17.000 --> 04:18.000 OK. 04:18.000 --> 04:20.000 So it's a very quick demo. 04:20.000 --> 04:22.000 I'm going to basically spit right in IRC. 04:22.000 --> 04:23.000 We have three apps. 04:23.000 --> 04:25.000 I'm starting with the mobile app. 04:25.000 --> 04:28.000 So let's say I already have an account on my bouncer already connected to several channels. 04:28.000 --> 04:30.000 And I already have messages, et cetera. 04:30.000 --> 04:32.000 And I'm setting up a new phone. 04:32.000 --> 04:33.000 I just installed Googlema. 04:33.000 --> 04:34.000 I can start it. 04:38.000 --> 04:39.000 Yeah. 04:39.000 --> 04:40.000 OK. 04:40.000 --> 04:46.000 I can start the app and enter the URL of my bouncer as well as my credentials. 04:46.000 --> 04:50.000 And as you can see, it immediately synchronizes all the channels that it downloads from the bouncer. 04:50.000 --> 04:52.000 There is no prior state in this demo. 04:52.000 --> 04:58.000 So I didn't have to do slash network connect, et cetera, that you would expect in 2003. 04:58.000 --> 05:00.000 I can open a channel. 05:00.000 --> 05:03.000 The messages are immediately downloaded from the bouncer. 05:03.000 --> 05:04.000 No prior state as well. 05:04.000 --> 05:06.000 I can fetch the history, infinite loading. 05:06.000 --> 05:08.000 Just as you would expect from a modern app. 05:08.000 --> 05:15.000 And I can now let's say a friend of mine wants to talk to me but on a different network that I haven't added yet. 05:15.000 --> 05:17.000 So I can add that from my clients. 05:17.000 --> 05:20.000 So as you can see here, I have a list of networks that I'm connected to. 05:20.000 --> 05:22.000 Libra, I have to see a reason that you might know. 05:22.000 --> 05:24.000 Let's add a new network. 05:24.000 --> 05:29.000 Agle, which is a new basically standard network for a new server. 05:29.000 --> 05:32.000 OK, it's added now and we're connected to it. 05:32.000 --> 05:37.000 So immediately, so now we can ask our bouncer to connect to a new channel on that new network. 05:37.000 --> 05:40.000 Hashtimo. 05:40.000 --> 05:42.000 OK, it's in a message. 05:42.000 --> 05:43.000 Hi there. 05:43.000 --> 05:46.000 And we have a friend there that we'll reply to us in this demo. 05:46.000 --> 05:50.000 Oh, hi, Mark. 05:50.000 --> 05:53.000 And as you can see on the top, we have a typing notification. 05:53.000 --> 05:56.000 We know he's typing another message right now, which is quite nice. 05:56.000 --> 05:58.000 Could it send me a picture? 05:58.000 --> 06:02.000 So we can actually send pictures from our client now, in a standard way. 06:02.000 --> 06:04.000 OK, we can share a file. 06:04.000 --> 06:07.000 And as you can see right now, it swapped my file for a URL. 06:07.000 --> 06:09.000 Because the file just got uploaded to my bouncer. 06:09.000 --> 06:14.000 This is much easier than it used to be 20 years ago when we had two upload files separately on like 06:14.000 --> 06:17.000 Inger and then get the URL on back. 06:17.000 --> 06:19.000 So much better. 06:19.000 --> 06:28.000 And then when I send it, my client friend does the preview and the same on my friend's device as well. 06:28.000 --> 06:31.000 OK, he doesn't seem convinced. 06:31.000 --> 06:33.000 Let's reply to him and ask why. 06:33.000 --> 06:38.000 And reply to the message by swiping and type an answer and then reply me. 06:38.000 --> 06:41.000 And then as you can see, it refers to the message that we've sent earlier. 06:41.000 --> 06:44.000 And I can click on it and the message is highlighted. 06:44.000 --> 06:46.000 So again, reply to any of you. 06:46.000 --> 06:49.000 You wouldn't have that 20 years ago. 06:49.000 --> 06:51.000 OK, so that was a good one. 06:51.000 --> 06:56.000 And let's say I just closed my phone for a few hours now and the app. 06:56.000 --> 06:59.000 I just closed the app and the app was completely shut off. 06:59.000 --> 07:01.000 No connection to the server. 07:01.000 --> 07:04.000 The battery being easy on the battery. 07:04.000 --> 07:06.000 So we just received a message. 07:06.000 --> 07:07.000 How is this possible? 07:07.000 --> 07:10.000 Well, we just received a push notification. 07:10.000 --> 07:12.000 This is new in our C as well. 07:12.000 --> 07:18.000 For messages as well, which enables us not to have to download all the logs from months back. 07:18.000 --> 07:21.000 And just basically, I just connect to it with that prior state here. 07:21.000 --> 07:23.000 So quick search as well. 07:23.000 --> 07:30.000 And also have typing notification as well in Sendai. 07:30.000 --> 07:31.000 Last client. 07:31.000 --> 07:34.000 And this will be the end of the quick demo back to payment afterwards. 07:34.000 --> 07:37.000 This is our web client called Gamja. 07:37.000 --> 07:40.000 Seeing a part on with Google Man Gamja. 07:40.000 --> 07:44.000 Both names of Korean for Tito's two different kinds. 07:44.000 --> 07:45.000 Okay. 07:45.000 --> 07:46.000 Gamja is a web client. 07:46.000 --> 07:47.000 So this is running in the web browser. 07:47.000 --> 07:49.000 But you don't see the web browser frame. 07:49.000 --> 07:50.000 Just the way I captured it. 07:50.000 --> 07:53.000 So again, using the credentials to connect to my server. 07:53.000 --> 07:54.000 And you can see as well. 07:54.000 --> 07:55.000 So it's a bit small. 07:56.000 --> 07:57.000 But so no worries. 07:57.000 --> 07:59.000 No need to actually see the text. 07:59.000 --> 08:02.000 But you can see that in synchronizes the network as well. 08:02.000 --> 08:05.000 And as you can see. 08:05.000 --> 08:08.000 Well, you can see that something turned green on the left side. 08:08.000 --> 08:11.000 The bottom of the list of the buffers on the left side. 08:11.000 --> 08:13.000 This is because I received a message. 08:13.000 --> 08:16.000 So this client is telling me, oh, you've served a new message there. 08:16.000 --> 08:17.000 Okay. 08:17.000 --> 08:20.000 But instead of applying on my web client, I will apply on my desktop client. 08:20.000 --> 08:22.000 Because I also have it open. 08:22.000 --> 08:24.000 And as you can see now that I've applied on my desktop client. 08:24.000 --> 08:27.000 The color is now right where I point my cursor. 08:27.000 --> 08:32.000 That because this client knows that another client has read the messages. 08:32.000 --> 08:35.000 So now I can synchronize where the messages were read. 08:35.000 --> 08:38.000 And I don't have duplicate notifications on it's client, 08:38.000 --> 08:41.000 which used to be the case as well. 08:41.000 --> 08:42.000 Right. 08:45.000 --> 08:48.000 Well, I believe that's it for the demo back to you Simon. 08:48.000 --> 08:51.000 No, yeah, go ahead for watching this slide. 08:51.000 --> 08:55.000 I'm just, so what did we see, basically? 08:55.000 --> 09:01.000 We saw a lot of features that might appear of just to you. 09:01.000 --> 09:05.000 Due to the way, I mean, this is just a modern instant messaging app right. 09:05.000 --> 09:09.000 But it took a lot of effort to bring it from the 2003 screenshot. 09:09.000 --> 09:10.000 I'll show you. 09:10.000 --> 09:12.000 Show you to what it is today. 09:12.000 --> 09:13.000 So how does this work? 09:13.000 --> 09:17.000 So basically, every feature and we have like 10s of them. 09:17.000 --> 09:20.000 Since 2003, tens of them were implemented. 09:20.000 --> 09:25.000 You have, for example, a feature for a chat history, a message history, I mean, etc. 09:25.000 --> 09:30.000 So each feature, we still have a lot to implemented and standardize independently. 09:30.000 --> 09:34.000 So just quick notes. 09:34.000 --> 09:38.000 So we have features in four different categories typically that we so just now. 09:38.000 --> 09:41.000 So for example, planning features that, for example, 09:41.000 --> 09:46.000 ink increase have made the connection time and load time overall better. 09:46.000 --> 09:51.000 We, for example, and then we have manual processes that were previously quite annoying to do that 09:51.000 --> 09:57.000 on our automatic, for example, operating files is now instant and standard, rather than going for an external 09:57.000 --> 09:58.000 website. 09:58.000 --> 10:04.000 And we have new user interactions, replying to messages, reacting to messages in the future, etc. 10:04.000 --> 10:06.000 Dipping notifications, informative device mobile. 10:06.000 --> 10:09.000 I think this is the most important set of features that we've added. 10:09.000 --> 10:13.000 We have history of messages with no prior state downloaded dynamically from the 10:13.000 --> 10:14.000 bouncer. 10:14.000 --> 10:17.000 We have searching messages server sites. 10:17.000 --> 10:20.000 We have synchronizes the state of our metrics that we're connected to. 10:20.000 --> 10:22.000 And I think those are really powerful features that we've added to IRC. 10:22.000 --> 10:26.000 We also have personal notifications that Simon will expand on just afterwards. 10:26.000 --> 10:27.000 That's it for me. 10:27.000 --> 10:28.000 You're new Simon. 10:28.000 --> 10:29.000 Yep. 10:29.000 --> 10:32.000 Another of what is standard IRC. 10:32.000 --> 10:38.000 So, how do you, how do you, how do you, how do we, 10:38.000 --> 10:41.000 what we expect in practice? 10:41.000 --> 10:50.000 So, instead of designing my community, which is done sometimes, we start by experimenting. 10:50.000 --> 10:55.000 So, we implement Vembal extension extensions in our clients and servers. 10:55.000 --> 10:57.000 Then we see how it works. 10:57.000 --> 11:04.000 We discuss with other people and ask if I would implement something like this in the on clients 11:04.000 --> 11:07.000 servers and iterate like this. 11:07.000 --> 11:10.000 Then we submitted to IRC before. 11:10.000 --> 11:15.000 And if we get enough acknowledgments, we can publish it. 11:15.000 --> 11:22.000 So, this is really interesting because we have specs that are interesting to many people 11:22.000 --> 11:25.000 and really work in practice. 11:25.000 --> 11:30.000 And we think consensus and all the parties. 11:30.000 --> 11:34.000 So, let's take for example, let push as an example. 11:34.000 --> 11:39.000 So, what push is extension used for push notifications. 11:39.000 --> 11:44.000 We had the bunch of constraints in mind when we designed this extension. 11:44.000 --> 11:47.000 That's one is it's fully decentralized. 11:47.000 --> 11:55.000 But I mean that that is each IRC server is to send push notifications to a particular client. 11:55.000 --> 11:58.000 There's no one server, but send it to the push notification. 11:58.000 --> 12:00.000 So, we need to work with that. 12:00.000 --> 12:10.000 Second constraint is that we need to interrupt interoperability with Google and Maple and also Unified Push. 12:10.000 --> 12:18.000 Because, under it, for instance, if you didn't go through Google, then your app will just not wake up. 12:18.000 --> 12:23.000 So, that's really something that is mandatory. 12:23.000 --> 12:30.000 So, because we go through Google and Maple, we wanted to use an encryption for notification payloads. 12:30.000 --> 12:36.000 We didn't from Google and I thought to be able to see your chat messages as it basically. 12:36.000 --> 12:43.000 So, the good news is that the web, although we already solved all of these problems for us, 12:43.000 --> 12:51.000 they have a specification for web push, which is basically send a HTTP request 12:51.000 --> 12:55.000 and then a encrypted payload to server. 12:55.000 --> 13:00.000 And then there's a responsible for the thing to see up. 13:00.000 --> 13:07.000 So, only kind of missing piece was interoperability with Google and Apple. 13:07.000 --> 13:20.000 So, we designed also a small bridge push government to translate some of my push into proprietary Google and Maple API calls. 13:20.000 --> 13:32.000 So, the way it works is that it's a client-sense subscription command to the ISE server with the URL of the web push server. 13:32.000 --> 13:38.000 And when the server receives a message, why does the ISE client is disconnected? 13:38.000 --> 13:44.000 Is there a HTTP request with the push notification all of that encrypted to the web push server? 13:44.000 --> 13:50.000 And the web push server is responsible for delivering the push notification to the ISE client, 13:50.000 --> 13:55.000 which is working up by this mechanism. 13:55.000 --> 13:59.000 So, at the protocol level, it's quite simple. 13:59.000 --> 14:03.000 So, so, what is a private key, a public key. 14:03.000 --> 14:09.000 So, I client-ense and the web push register command with the URL and a bunch of keys. 14:09.000 --> 14:12.000 And then the server would like success. 14:12.000 --> 14:25.000 And the push notification contents are basically just a standard ISE message as well with text message text. 14:25.000 --> 14:31.000 So, if we have Google, I call it in the picture, then it's a bit more complicated, 14:31.000 --> 14:37.000 because the push server is a web push relay here and the bottom right. 14:37.000 --> 14:44.000 And the web push relay is a message to, for instance, file-based messaging for Google. 14:44.000 --> 14:50.000 And file-based messaging is responsible for working up the Android client. 14:50.000 --> 14:52.000 That piece was that one by Simon as well. 14:52.000 --> 14:53.000 Yeah. 14:53.000 --> 14:58.000 So, yeah. 14:59.000 --> 15:04.000 Our virtual plans are experimenting with end-to-end encryption, 15:04.000 --> 15:11.000 and maybe experiments also with avatars for users and such. 15:11.000 --> 15:12.000 That's about it. 15:12.000 --> 15:13.000 Thanks a lot. 15:13.000 --> 15:32.000 So, kind of sounds like you have this trying to meet the new key ecosystem between your clients and your clients, 15:32.000 --> 15:37.000 or do any other clients and clients that actually support all of these extensions. 15:37.000 --> 15:38.000 Yeah. 15:38.000 --> 15:43.000 For instance, our goal server is also implementing a lot of the modern stuff. 15:43.000 --> 15:47.000 So, web push and red markers and combination. 15:47.000 --> 15:53.000 So, if you use all the servers, maybe you don't get all these night features, 15:53.000 --> 15:57.000 but if you use a no-don server, then you can get it. 15:57.000 --> 16:02.000 It depends what you use. 16:02.000 --> 16:03.000 Yeah. 16:04.000 --> 16:07.000 So, why is it standard? 16:07.000 --> 16:09.000 Not just a property. 16:09.000 --> 16:13.000 It's very protocol that we're building between our bonsar and our clients. 16:13.000 --> 16:18.000 Well, standard is only as good as the implementation bar. 16:18.000 --> 16:20.000 Nobody influenced it. 16:20.000 --> 16:21.000 Yeah. 16:21.000 --> 16:22.000 So, yeah. 16:22.000 --> 16:26.000 I mean, hence the process to first experiment with actual clients, 16:26.000 --> 16:30.000 and then come back to those extended program organization, 16:30.000 --> 16:34.000 and then go back and implement it in all the clients, as well as the system. 16:34.000 --> 16:38.000 Also, the thing we've suggested is that even if you use all the servers, 16:38.000 --> 16:40.000 you get all the night features, too. 16:40.000 --> 16:44.000 And you're free to use all the client, which doesn't support the new features, 16:44.000 --> 16:48.000 and use it with the bonsar. 16:48.000 --> 16:49.000 Good morning. 16:49.000 --> 16:52.000 How does the migration story look like? 16:52.000 --> 16:53.000 Good morning. 16:53.000 --> 16:56.000 Right now, I'm running the Excel server. 16:57.000 --> 17:01.000 And all the stuff that they use, they're all provided by the clients. 17:01.000 --> 17:05.000 If I want to move to the soils, please, there's some weight. 17:05.000 --> 17:08.000 I can bring over my own chat history and everything. 17:08.000 --> 17:13.000 Unfortunately, we only have a migration script for the DNC, 17:13.000 --> 17:19.000 but I would recommend the contributions to develop a migration script for Tocacela, as well. 17:20.000 --> 17:22.000 Yeah. 17:22.000 --> 17:36.000 Just one observation is that much of the benefits are focused on the hosted bonsar setup. 17:36.000 --> 17:43.000 But the next two value, a lot of value, on the client's talking directly to the server, 17:43.000 --> 17:49.000 because as a client, I don't have to post anything or take for anything, 17:49.000 --> 17:52.000 and just get whatever the server can get. 17:52.000 --> 17:55.000 So maybe they store two weeks of passage. 17:55.000 --> 17:58.000 And that's why I'll get it. 17:58.000 --> 18:01.000 And I can get it stored then locally. 18:01.000 --> 18:04.000 But there's no bonsar involved. 18:04.000 --> 18:07.000 I don't have to set up one or people one. 18:07.000 --> 18:11.000 I agree that it's still an important use case to support. 18:11.000 --> 18:15.000 And if you can use any of these clients, directly connecting to a server, 18:15.000 --> 18:20.000 and it will work, and the error supports a lot of the modern features as well. 18:20.000 --> 18:26.000 I guess the key reason for using a bonsar is not just for introducing new features 18:26.000 --> 18:30.000 to server that don't support it, but also so that you couldn't connect to multiple networks, 18:30.000 --> 18:34.000 as well, at once, without copying your configuration again. 18:34.000 --> 18:38.000 If you connect directly to a server and you have a mobile device and 18:38.000 --> 18:42.000 another device is in your desktop as well, and you have to connect multiple servers. 18:42.000 --> 18:46.000 That's a lot of configuration to write and replicate to all your clients. 18:46.000 --> 18:51.000 So it helps to have some kind of centralized place for all configuration on your networks, 18:51.000 --> 18:56.000 which enables I have to be decentralized and not always use one particular server. 18:56.000 --> 18:59.000 Thank you very much. 18:59.000 --> 19:04.000 Thank you. 19:04.000 --> 19:06.000 Thank you very much.