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.

