[00:37.650 --> 00:38.090] Hi. [00:38.270 --> 00:38.810] Welcome, everyone. [00:40.010 --> 00:44.650] For our 1 o'clock session on ActivityPub, just a couple of reminders. [00:44.910 --> 00:47.930] Put your phones on vibrate, stun, whatever you want to call it. [00:49.170 --> 00:50.670] Make sure you stay hydrated. [00:51.310 --> 00:52.990] Just so you know, there's fire exits. [00:53.090 --> 00:55.650] If in the case of an emergency, please exit calmly. [00:56.370 --> 01:01.070] If you have any questions or comments, you'll see people with radios walking around. [01:01.190 --> 01:06.730] Also, folks in blue shirts, blue volunteer shirts, feel free to ask them any questions. [01:07.430 --> 01:14.910] Right now, again, I'd like to introduce Roll Time, who's going to give a synopsis of ActivityPub four years later. [01:15.330 --> 01:15.690] Welcome. [01:16.610 --> 01:17.030] Hi, everyone. [01:17.170 --> 01:18.790] That second coffee was a mistake. [01:21.630 --> 01:22.090] All right. [01:22.210 --> 01:23.630] So first of all, hello, everyone. [01:23.830 --> 01:24.730] My name is Roll Time. [01:24.930 --> 01:26.870] I want to thank you all so much for being here. [01:27.430 --> 01:32.030] And I want to say thank you to the organizers of the 2600 conference for allowing me to be here. [01:32.130 --> 01:35.150] Also, for sorting the talks alphabetically, because this one is right at the top. [01:35.290 --> 01:35.890] It's great. [01:37.130 --> 01:39.830] Yeah, this is ActivityPub four years later. [01:40.110 --> 01:42.290] The good, the bad, and the Fediverse. [01:43.210 --> 01:44.350] Let's get right into it. [01:45.270 --> 01:47.230] First of all, I want to introduce myself. [01:48.010 --> 01:49.310] I am not an expert. [01:49.350 --> 01:51.910] I am not an author of the ActivityPub spec. [01:52.250 --> 01:54.570] I am just a user of ActivityPub. [01:54.710 --> 01:58.690] I've been on ActivityPub and Mastodon for a couple years now. [01:58.690 --> 01:59.990] I'm here to proselytize. [02:00.210 --> 02:07.690] I'm here to tell you about what ActivityPub is like and about how you can help by joining us and help by, you know, working on improving the spec. [02:07.910 --> 02:08.770] It's still evolving. [02:09.010 --> 02:11.550] There's still an opportunity for innovation here. [02:11.550 --> 02:22.710] So, I hope you come away from this talk with a greater understanding of what ActivityPub is, the ways that you can use it, and, you know, I hope you come away enthusiastic about this protocol and the future. [02:23.990 --> 02:28.830] The first question that's really important to the ActivityPub question is, what is federation? [02:29.090 --> 02:32.450] The best way to answer that question is by saying, federation is a network protocol. [02:33.310 --> 02:33.790] Okay. [02:34.470 --> 02:39.710] The first network protocol that you may be aware of or familiar with is the client-to-server model. [02:39.910 --> 02:46.270] This is what we see on social media servers today, wherein all six of our clients are speaking to this server. [02:46.430 --> 02:50.130] If a client wants to post anything or receive any data, they talk to the server. [02:50.130 --> 02:53.390] The server will then fetch data from other clients as appropriate. [02:53.950 --> 03:03.150] Again, this is the model used by Facebook, Instagram, Google Plus, no, wait, Facebook, Facebook, Instagram, all the mainstream social networks today. [03:03.150 --> 03:04.390] And it has some vulnerabilities. [03:04.390 --> 03:05.410] It has some problems. [03:05.610 --> 03:07.810] We see vulnerability to corporate censorship. [03:08.150 --> 03:13.110] We see a little vulnerability to downtime when people misconfigure their DNS stuff. [03:13.310 --> 03:18.870] We see vulnerability to if the single server is down, everybody is down. [03:18.870 --> 03:20.550] The single server has control of everything. [03:20.770 --> 03:26.590] So it's safe to say this is not a desirable protocol or architecture for social media networking. [03:27.470 --> 03:29.970] Another one you might be familiar with is a peer-to-peer model. [03:30.170 --> 03:38.690] We dispense with our centralized server entirely, and we see all six of our clients simply exchange messages amongst one another in an open space with no control. [03:38.930 --> 03:40.610] This isn't vulnerable to censorship. [03:40.930 --> 03:43.430] No one can control which clients are connected and what they say. [03:43.430 --> 03:48.410] But it's also inefficient because every client has to send a message to every other client. [03:48.770 --> 03:52.470] If clients aren't online at the time a message is sent, then they can't receive any data. [03:53.050 --> 03:54.210] I'm still wearing a mask. [03:54.930 --> 03:56.130] And they can't receive any data. [03:56.710 --> 03:58.750] And this is a big problem. [03:59.110 --> 04:04.710] You know, it's not really viable to have your phone or your laptop on all the time, connected to stuff all the time. [04:05.550 --> 04:14.870] So while this would be sort of an idealized great way to implement social media that's resistant to censorship, it's, again, it's inviolable for an actual network architecture. [04:15.150 --> 04:18.250] The solution or the compromise is federation. [04:18.550 --> 04:21.410] We call it client-to-server-to-server-to-client networking. [04:21.570 --> 04:24.610] What we see is that our three clients here are talking to server A. [04:25.050 --> 04:29.530] Server A then talks to server B, which then talks to its respective clients. [04:29.530 --> 04:35.230] What this gives us is a best-case scenario between centralized networking and decentralized networking. [04:35.450 --> 04:36.390] It's semi-centralized. [04:36.610 --> 04:40.970] Server A can implement its own rules, its own guidelines, and have its own downtime. [04:41.490 --> 04:46.750] Meanwhile, server B can fetch data from server A whenever it needs to with its own set of rules and guidelines. [04:47.030 --> 04:49.710] If server A is down, server B will still be accessible. [04:49.910 --> 04:51.650] You can tell because it's still on the screen there. [04:53.130 --> 04:57.170] I want to go back to this architecture and I want to give everything some labels just so it's clearer. [04:57.170 --> 05:02.150] I'm going to walk you through how a federated network, social network, might actually function. [05:02.570 --> 05:06.390] So we have on FreeRadical.Zone, Tech, Pepin, and Dade. [05:06.590 --> 05:08.430] I heard some claps for FreeRadical.Zone. [05:08.750 --> 05:09.410] Thank you. [05:09.870 --> 05:15.090] And on post.lurk.org, we have Kate, Pixel, and Henry, who is slightly behind the times. [05:15.670 --> 05:19.570] Let's say Dade wants to post a message and then all of his followers will get it. [05:19.730 --> 05:24.210] So if Dade wants to post something on his status, he notifies his home server, FreeRadical.Zone. [05:25.090 --> 05:29.550] And so then everyone on his home server, as in a centralized network, can simply fetch his message. [05:29.890 --> 05:43.570] But FreeRadical.Zone will then post his update to post.lurk.org, where anyone following Dade on post.lurk.org can also get a copy of this message and read it for themselves, even if FreeRadical is down. [05:43.790 --> 05:47.010] So Dade says to FreeRadical.Zone, I want to send a message. [05:47.130 --> 05:48.170] FreeRadical says, great. [05:48.630 --> 05:49.590] It's now in the database. [05:49.590 --> 05:55.610] And FreeRadical knows that somebody on post.lurk.org, let's say Kate, is following Dade. [05:55.790 --> 06:00.570] That message gets pushed to post.lurk.org, and then anybody on that server can read that message. [06:01.690 --> 06:03.150] That's the essence of federation. [06:03.430 --> 06:08.270] That's how you build a censorship-resistant, open, democratized social network. [06:09.070 --> 06:11.250] I think at this point I'm a little ahead in time. [06:11.410 --> 06:12.650] Anybody have any questions at this point? [06:12.730 --> 06:13.910] It's pretty important to the rest of the talk. [06:13.910 --> 06:16.670] So if anything isn't clear, anything I'm missing... [06:18.330 --> 06:18.810] Yeah? [06:18.950 --> 06:23.510] If one of the servers goes down, do the clients fail over to the other server? [06:23.610 --> 06:24.310] Great question. [06:24.570 --> 06:25.490] Not at this time. [06:26.450 --> 06:28.510] That's unfortunately something we don't have implemented. [06:28.770 --> 06:34.310] But if your server is down, other users on different servers can still access copies of your data that their server may have. [06:35.890 --> 06:37.690] But your server is your server. [06:38.670 --> 06:39.150] Yes? [06:39.150 --> 06:47.220] How do you make some free radicals as well on post.lurk.org? [06:47.260 --> 06:48.060] Post.lurk.org? [06:48.280 --> 06:50.680] Sorry, I cut off the bottom of the G, but that is a G. [06:51.780 --> 06:52.620] That's a great question. [06:52.720 --> 06:53.520] Thank you for asking it. [06:54.400 --> 06:54.760] Standardization. [06:55.840 --> 06:57.180] So what we have is called the Fediverse. [06:57.600 --> 06:59.020] This talk does have emojis in it. [06:59.360 --> 07:00.160] We have this called the Fediverse. [07:00.300 --> 07:08.560] It's this wider network of standardized, ideally, ideally standardized, servers and clients that all know how to talk to each other using this one single language. [07:08.600 --> 07:10.860] But we didn't always have a single language. [07:10.860 --> 07:13.980] In 2008, we saw the first kind of federated system come out. [07:14.120 --> 07:15.000] It was called Identica. [07:15.400 --> 07:16.000] Identi.ca. [07:16.600 --> 07:19.780] And it ran GNU Social, which implemented the Ostatus protocol. [07:20.440 --> 07:22.560] But not everyone was using the Ostatus protocol. [07:22.940 --> 07:24.660] Ostatus wasn't a GNU project. [07:24.840 --> 07:28.080] GNU Social was about as featureful and useful as GNU Heard, right? [07:28.220 --> 07:31.020] So, Diaspora was a competing protocol. [07:31.060 --> 07:34.540] If you were on Ostatus, you couldn't talk to somebody who was on Diaspora. [07:34.540 --> 07:40.800] It was this messy situation of competing standards and people not being able to have a cohesive experience. [07:41.180 --> 07:48.440] So, out of this comes the W3C Social Working Group, headed up by Christine Lemmer-Weber, who's the primary author of ActivityPub. [07:48.540 --> 07:49.580] She'll come up a little bit later. [07:50.300 --> 07:58.340] The mission of which was to create a single standard, which would unify everyone's experiences and be the be-all and end-all for a federated social networking experience. [07:58.580 --> 07:59.560] And I know what you're thinking. [07:59.740 --> 08:03.360] You've seen this XKCD about standards. [08:04.080 --> 08:06.740] And you're thinking, surely this couldn't have worked. [08:07.780 --> 08:08.940] Unfortunately, I have bad news for you. [08:09.000 --> 08:09.220] It did. [08:10.440 --> 08:18.100] ActivityPub was born in 2018 as this unified standard, which created a way for anybody to talk to anybody else using federated networking. [08:18.100 --> 08:18.780] It was beautiful. [08:18.960 --> 08:19.540] It was open. [08:19.660 --> 08:20.300] It was accessible. [08:20.560 --> 08:21.900] And it was a W3C standard. [08:22.340 --> 08:27.420] So, now what you see is everybody doing federated networking these days is using ActivityPub. [08:29.460 --> 08:33.920] I want to give a brief technical rundown of ActivityPub in about three words. [08:34.160 --> 08:35.320] JSON over email. [08:36.420 --> 08:40.480] In more detail, I'll tell you that ActivityPub uses email-like addressing. [08:40.740 --> 08:44.000] You can send messages to address at instance. [08:44.740 --> 08:46.580] And you send JSON posts. [08:46.760 --> 08:47.780] So, that'll be something like a post. [08:47.880 --> 08:50.940] You'll have the author, the content, the date, things like that. [08:51.140 --> 08:55.240] It's essentially a spec for pushing data using email-like addressing to various servers. [08:55.900 --> 09:00.420] A moment for some technical terminology, I want to say. [09:00.500 --> 09:04.220] An instance is a specific server which hosts a protocol. [09:04.480 --> 09:06.080] A specific server which hosts a platform. [09:06.400 --> 09:09.760] A platform being ActivityPub-enabled software. [09:09.760 --> 09:13.260] So, if you are on an instance, you're hosting some kind of software. [09:13.400 --> 09:14.880] That might be like Mastadon or something like that. [09:14.960 --> 09:16.220] That's an instance specific server. [09:16.700 --> 09:17.680] Platform is software. [09:17.940 --> 09:19.800] And of course, the protocol is ActivityPub. [09:20.620 --> 09:21.900] Again, the technical rundown. [09:22.300 --> 09:23.900] I'm not going to go into too much detail on that. [09:23.980 --> 09:26.460] Because this is not the first talk at ActivityPub. [09:26.640 --> 09:28.340] First ActivityPub talk at HOPE. [09:29.040 --> 09:29.900] Certainly not the best. [09:30.160 --> 09:31.040] Normal would be the last. [09:31.240 --> 09:34.160] I encourage you to go and do your own research and look into this more. [09:35.540 --> 09:39.380] But what this led to was a case of what I call ActivityPub evangelism. [09:39.380 --> 09:43.080] Suddenly, in 2018, we had this gigantic open standard. [09:43.260 --> 09:44.100] Everybody could use it. [09:44.280 --> 09:45.260] And everybody would be, right? [09:45.600 --> 09:50.320] Now that anybody could host their own social media server, what was stopping anybody from doing that? [09:50.580 --> 09:52.320] Surely, this will be the end of Facebook. [09:52.540 --> 09:53.640] This will be the end of Twitter. [09:53.880 --> 09:55.180] This will be the end of Google... [09:55.180 --> 09:55.300] No. [09:55.680 --> 09:57.720] This will be the end of Facebook, Twitter, Instagram. [09:58.340 --> 09:58.680] Right? [09:59.340 --> 10:03.660] And so we saw at HOPE 2020, these wonderful five people, one of whom is in the audience. [10:03.900 --> 10:08.500] Can I get a quick round of applause for Tech, the admin of my home server who pays money to host... [10:08.500 --> 10:08.960] Yeah. [10:10.020 --> 10:13.280] He pays money to host the things that I say, which is crazy to me. [10:14.460 --> 10:21.180] Anyway, these five people, hopefully some of whom are watching, one of whom is here, came out at HOPE 2020 and said, this is your moment. [10:21.460 --> 10:22.800] Start your own ActivityPub server. [10:23.140 --> 10:23.980] Take your data back. [10:24.200 --> 10:25.240] Take your experience back. [10:27.420 --> 10:28.500] It didn't work, right? [10:28.740 --> 10:33.940] Four years later, the ActivityPub spec has received zero updates since its release. [10:33.940 --> 10:41.140] One of the links on the ActivityPub homepage, now 502s, that's on the W3C website. [10:41.920 --> 10:54.800] There are about six to seven million users throughout the total Fediverse, some of whom are active, which is a large number in an absolute sense, but it's safe to say ActivityPub has not taken down social media giants. [10:55.060 --> 11:00.020] We have failed in our goal of bringing a constructive social media experience to everybody. [11:00.020 --> 11:06.240] We have, however, brought a constructive social media experience to people who are using the Fediverse right now. [11:06.580 --> 11:08.780] So we're going to address four topics today. [11:09.020 --> 11:14.900] We're going to address architectural benefits of ActivityPub, the ways in which ActivityPub is really good. [11:15.120 --> 11:21.300] We're going to address architectural limitations, problems with the spec that have prevented it from proliferating and becoming really useful. [11:21.600 --> 11:23.440] We're going to address instance benefits. [11:23.620 --> 11:26.300] What's it like to actually use the Fediverse today? [11:26.500 --> 11:28.460] And we're going to address instance limitations. [11:28.460 --> 11:33.600] So the benefits, limitations, and problems with both the standard and the way that we're using it. [11:34.720 --> 11:36.460] First of all, architectural benefits. [11:36.960 --> 11:39.680] The big thing about a standard is, it's a standard. [11:39.940 --> 11:41.380] We have cross-platform federation. [11:41.860 --> 11:47.220] Anybody who speaks the ActivityPub language can talk to anybody else who speaks the ActivityPub language. [11:47.420 --> 11:51.600] Here I am on Frendica, specifically venera.social. [11:51.700 --> 11:53.680] Frendica is a Facebook-like platform. [11:55.500 --> 11:59.720] And I'm actually looking at my own profile on Mastodon, which is Twitter-esque. [12:00.460 --> 12:03.220] So you can see this is SpaceFillingCurvy, that's my username. [12:03.420 --> 12:04.660] I can see my profile. [12:04.900 --> 12:08.680] I can see MastodonAP, means I'm following myself via ActivityPub. [12:09.800 --> 12:11.660] We can see some of my own posts on here. [12:11.840 --> 12:13.000] I don't know if you can read those. [12:13.180 --> 12:15.680] Unfortunately, I don't think ActivityPub made me any funnier. [12:16.400 --> 12:19.760] But I can, in fact, see the things that I've posted, even if they're not that good. [12:20.660 --> 12:25.780] There is a problem here, in that this is not actually the four most recent posts on my profile. [12:26.560 --> 12:33.140] There are discrepancies here between the Mastodon version of my feed and the Frendica version of my feed, which shouldn't be there. [12:33.520 --> 12:35.260] We're going to talk about problems in a moment. [12:36.560 --> 12:46.020] The really other great thing about democratized social media, this isn't specific to ActivityPub, but the Fediverse as a whole, is we can have instance-specific rules and guidelines, right? [12:46.260 --> 12:55.180] So FreeRadical.Zone, my home server, has focuses on leftward politics, infosec, cat pictures, generally interesting people doing interesting things. [12:55.200 --> 13:02.500] And what I see in my home timeline, posts on my instance, is people who have done cool projects, or found cool things. [13:02.640 --> 13:06.120] It's very in-depth, technical discussion, and that's what I like to see. [13:06.120 --> 13:11.340] I don't like to see as much of those kind of slice of life, hey, I went to the bank today posts, that I might see on other instances. [13:11.600 --> 13:16.860] But I can still follow people on other instances, and I can get information from them on other instances. [13:16.860 --> 13:18.260] I just get to choose where from. [13:18.420 --> 13:22.220] And the central focus of my experience revolves around my instance and its guidelines. [13:22.820 --> 13:24.640] FreeRadical.Zone also has some rules. [13:25.200 --> 13:28.840] It has, for instance, some very strict rules against hate speech and misinformation. [13:31.140 --> 13:34.780] One of the great things about ActivityPub, we get freedom of speech, freedom of filter, right? [13:34.780 --> 13:41.560] If you're on Twitter, Twitter gets to decide what is okay for anybody to say, which you may agree with or not, but take it or leave it, right? [13:41.640 --> 13:42.680] If you're on Twitter, you're on Twitter. [13:43.800 --> 13:44.560] Hopefully you're not. [13:46.300 --> 13:53.720] ActivityPub lets you host your own server and do your own thing, up to and including the actual user interface and user experience. [13:54.980 --> 13:56.660] So, I'll give you an example of this. [13:56.780 --> 14:05.680] There's a platform you may be aware of called Gab, which is a right-wing, fascistic social network purporting itself as a free speech zone, whatever the hell that means. [14:06.200 --> 14:08.900] And they are running on ActivityPub. [14:09.100 --> 14:14.200] They have an ActivityPub network and various servers within the Gabverse thing. [14:14.360 --> 14:22.680] But I've never heard from anyone on Gab, and I certainly don't intend to, because my server and all the servers that my server talks to have defederated from Gab. [14:23.100 --> 14:25.060] We've strictly blocked communications from them. [14:25.260 --> 14:27.060] They have a space to say whatever they want. [14:27.220 --> 14:28.120] They have their freedom of speech. [14:28.360 --> 14:29.300] We're going to filter them out. [14:29.440 --> 14:30.180] We're not going to listen. [14:31.200 --> 14:33.580] But again, nobody gets to decide what's okay to say. [14:33.760 --> 14:35.080] You just get to decide what you want to hear. [14:36.500 --> 14:38.920] There are some architectural issues with ActivityPub. [14:39.180 --> 14:42.900] When it was released, it came without any kind of authentication or consent spec. [14:43.220 --> 14:50.620] What that means is that in an ideal Fediverse, we'd see a user's identity as wholly separate from their instance, right? [14:50.620 --> 14:55.140] I shouldn't be beholden to the admin of Free Radical, even though I trust you. [14:55.540 --> 14:59.180] I shouldn't be beholden to the admin of Free Radical to define what I'm saying. [14:59.740 --> 15:02.120] I should be cryptographically guaranteed to be myself. [15:02.320 --> 15:09.040] And if I don't like the terms that Free Radical is providing me, I can pack up my stuff and leave and go to another instance or start my own. [15:09.480 --> 15:12.600] But ActivityPub didn't release with any kind of consent mechanism. [15:12.780 --> 15:23.680] Meaning that if an admin wants to, they can simply say that one of their users said something, and there's no way for anybody to verify that outside of a manual PGP key. [15:24.560 --> 15:27.440] Going back to Christine Lumber Weber, she's aware of this issue. [15:27.640 --> 15:29.200] It's mentioned in the ActivityPubSpec. [15:29.320 --> 15:30.600] Hey, we know this is a problem. [15:30.780 --> 15:31.600] We're working on it. [15:31.680 --> 15:32.260] We'll get back to you. [15:32.320 --> 15:33.040] It's been four years. [15:34.000 --> 15:41.580] But Christine Lumber Weber founded the Spritely Institute, and they've been working on some really cool stuff, including OCAP status. [15:42.180 --> 15:43.820] I think that's what it's called, OCAP status. [15:44.100 --> 15:50.260] And that lets you define a wholly cryptographically guaranteed identity, independent of anything that's hosting you. [15:50.420 --> 15:57.580] And so if we see that reach maturity and integration into a later version of ActivityPub or a later open protocol, we'll see this problem solved. [15:58.400 --> 16:07.500] The other problem that ActivityPub has and that federated networks have in general is instance tribalism, which is to say that communities don't live at the instance level. [16:07.780 --> 16:12.280] Communities live at the level of tags, at the level of topics, at the level of common interests. [16:12.520 --> 16:16.200] And it's really impossible for an instance to address that with granularity. [16:16.420 --> 16:22.000] Instances can be groups of people with a lot of interest in common, but you can still see things you don't want to. [16:22.940 --> 16:32.700] And so we have to find the balance between granularity, accessibility, and creating communities around what we want them to be created around. [16:32.860 --> 16:34.080] So that is an architectural issue. [16:35.000 --> 16:35.640] Implementation benefits. [16:36.180 --> 16:42.640] I'm going to stop right here and say, if you are not on ActivityPub, which basically means if you're not on Mastodon, it's like the biggest platform we'll talk about that. [16:42.720 --> 16:43.940] If you're not on ActivityPub, join. [16:44.180 --> 16:45.080] Please, dear God, join. [16:45.240 --> 16:46.700] It is so much better than Twitter. [16:48.160 --> 16:49.660] I know that's not a low bar. [16:50.180 --> 16:51.320] Or that is a low bar, rather. [16:51.320 --> 16:53.260] But ActivityPub, Mastodon, is incredible. [16:53.660 --> 16:55.600] It's full of great people, and you should join. [16:55.720 --> 16:58.300] And I want to make that clear, even though we're going to talk about some of the problems. [16:58.640 --> 17:02.580] There is nothing better for you to do than joining and helping us fix those problems. [17:03.480 --> 17:05.420] So, our case study is Mastodon. [17:05.520 --> 17:13.940] As I've said, it's far and away the largest Fediverse platform, to the degree that if you visit the website Fedi.guide, you'll see a page called What is Mastodon? [17:14.300 --> 17:20.880] Even though Fediverseguide is an accessible guide to federated, decentralized services, Mastodon is the Fediverse experience. [17:20.880 --> 17:25.900] And so, when we're talking about the day-to-day experience, we need to be talking about Mastodon. [17:27.460 --> 17:28.540] Here's the user interface. [17:28.860 --> 17:31.180] Mastodon, as I said, is Twitter-like. [17:31.700 --> 17:33.480] So, we have a home timeline. [17:33.740 --> 17:36.360] And this is what I'd see similar to a Twitter timeline. [17:36.940 --> 17:42.200] It's posts from people that I follow and posts that they have boosted or retweeted, as you may be familiar with. [17:42.920 --> 17:46.680] I've got somebody in here who's posting about seals and the word boo. [17:48.860 --> 17:50.480] This is the only people I've followed. [17:50.720 --> 17:51.700] It's not algorithmic. [17:51.840 --> 17:54.900] It's entirely based on the order in which things are posted. [17:55.080 --> 17:59.540] So, Mastodon doesn't attempt to hijack your attention or radicalize you in various ways. [18:00.080 --> 18:04.920] Mastodon is just trying to bring you the posts from the people you've agreed to see. [18:04.920 --> 18:06.820] There are two other timelines. [18:07.180 --> 18:10.640] And this is what really separates Mastodon experientially from Twitter. [18:10.880 --> 18:12.840] The local and the federated timeline. [18:13.140 --> 18:14.280] And they're both really interesting. [18:14.740 --> 18:17.840] The local timeline is posts from people on your instance. [18:18.020 --> 18:20.360] That is, freeradical.zone, in my case. [18:20.500 --> 18:21.680] Or whatever instance you may be following. [18:21.920 --> 18:30.700] And if you've picked the right instance that has guidelines and rules specific to you, you'll probably see posts from people you find interesting and on topics you find interesting. [18:30.720 --> 18:35.140] That can give you an idea of who you want to follow or teach you about something new you might want to engage in. [18:35.560 --> 18:37.420] So, a local timeline is like a little community. [18:37.640 --> 18:40.220] It's who's close to you and it's people you may want to reach out to. [18:40.300 --> 18:45.320] It's a great way of discovering things, but doesn't rely on an algorithm like you'd see on other services. [18:46.540 --> 18:48.680] Our third option here is the federated timeline. [18:48.960 --> 18:53.980] This is every post from every server that someone on your server follows. [18:54.640 --> 18:55.500] It is a lot. [18:56.780 --> 18:59.100] And it's basically all the data that your instance is getting. [18:59.420 --> 19:02.100] And it's, again, it scrolls by quickly. [19:02.100 --> 19:07.180] I don't know why someone wanted to follow Arch Linux package updates, but somebody did. [19:07.620 --> 19:10.900] And now they can see everything happening with the one true operating system. [19:11.900 --> 19:13.700] In any case, that's not something I want to see. [19:13.820 --> 19:23.780] But the federated timeline is a useful kind of way of graphing what people on your instance are interested in and what's the zeitgeist of the entire network at that time, your corner of the verse. [19:23.780 --> 19:24.920] So it's useful. [19:25.180 --> 19:26.340] I wouldn't browse it all the time. [19:29.280 --> 19:35.820] Mastodon has some really interesting cultural mores that make it really good to use for anybody. [19:36.620 --> 19:37.280] And let's talk about it. [19:38.560 --> 19:41.040] Content warnings are a big thing on Mastodon. [19:41.040 --> 19:47.660] So you'll see a user here, demimom at elec.xyz, her name is June, posted something with this content warning. [19:47.820 --> 19:49.560] Physical health, pH minus. [19:49.860 --> 19:52.300] This is a negative statement about a user's physical health. [19:52.400 --> 19:57.920] And she's using this shorthand, which is kind of common on Mastodon, so that people are clear on what she's talking about. [19:58.680 --> 19:59.780] I want to see this post. [19:59.920 --> 20:00.560] I click show more. [20:00.860 --> 20:01.520] Here it is. [20:01.700 --> 20:04.940] It's her talking about how she woke up, felt worse today, and went to the doctor. [20:05.160 --> 20:09.280] But if I didn't want to see a post that was negative about physical health, I wasn't interested. [20:09.540 --> 20:11.740] I could simply scroll right past it. [20:11.860 --> 20:12.840] It wouldn't have bothered me, right? [20:13.220 --> 20:18.780] So Mastodon lets you kind of define your experience and decide what you want to see at any given moment. [20:19.000 --> 20:23.780] You see content warnings for gore, for different types of NSFW posts, porn. [20:23.780 --> 20:28.220] You see stuff for physical health, mental health, politics. [20:28.640 --> 20:33.640] So if you're not feeling something, if you have triggers related to something, you don't have to look at anything you don't want to. [20:33.840 --> 20:39.500] And there's a really strong culture of making sure that we are filtering and creating a positive, wholesome experience here. [20:40.960 --> 20:45.040] One of the ways you'll see these content warnings used is with... [20:46.860 --> 20:49.420] One of the ways you'll see these used is with jokes. [20:49.420 --> 20:50.520] We have this person. [20:50.740 --> 20:52.000] What do you get if you insult a Bowman? [20:53.540 --> 20:54.580] I didn't post this. [20:54.740 --> 20:55.340] It's across Bowman. [20:57.160 --> 20:57.880] Anyway, I... [20:57.880 --> 21:00.240] But so you've used it as a joke setup here, right? [21:00.340 --> 21:01.380] So what do you get if you insult a Bowman? [21:01.460 --> 21:02.060] You click show more. [21:02.180 --> 21:03.040] There's a little bit of a setup. [21:03.240 --> 21:03.840] Pay off. [21:04.320 --> 21:08.200] By the way, I did ask both of these users if I could, like, post their content. [21:09.240 --> 21:10.460] And one of them said, yes. [21:10.900 --> 21:13.520] But I hope to see a 5200 follower increase after that talk. [21:14.080 --> 21:15.040] That's their username. [21:15.320 --> 21:16.460] You all know what to do. [21:17.480 --> 21:20.420] So they should be the second person you follow after you join Mastodon. [21:20.480 --> 21:21.360] After, of course, me. [21:22.560 --> 21:24.980] The other thing we see a lot of is alt text. [21:25.180 --> 21:25.740] And this is great. [21:25.880 --> 21:29.100] Let's say I found this wonderful comic from Saturday Morning Breakfast Cereal. [21:29.320 --> 21:31.300] It's my daily dose of existential crisis. [21:31.980 --> 21:36.780] Talking about how these people are not even dead, but never existed. [21:37.060 --> 21:38.360] I hope you're all having a great day. [21:39.560 --> 21:40.700] We see this comic here. [21:41.120 --> 21:42.120] I decided this is great. [21:42.240 --> 21:43.280] I have to share this with my followers. [21:43.280 --> 21:44.020] They have to see it. [21:44.620 --> 21:47.700] So I put it in my compose box in Mastodon. [21:47.820 --> 21:50.180] And I'll actually get a warning that says no description added. [21:51.320 --> 21:54.460] Mastodon is giving me a warning that this content might not be accessible. [21:54.780 --> 22:00.500] So if I go ahead and click on no description added, I can actually see on the left described for the visually impaired. [22:01.000 --> 22:13.340] And it gives me 1500 characters to transcribe the text in this image so that anybody who can't see images, whether that's because they have vision impairment, or they're using a text-only browser, or they don't have a fast data connection. [22:13.520 --> 22:18.400] Anybody who can't see images for any reason can still get the alt text and can still see what this image says. [22:19.360 --> 22:28.380] I can also define, by moving that circle around, I can also define where this preview will be in our 16x9 preview before someone actually opens the image. [22:28.800 --> 22:34.980] So Mastodon has a really robust toolkit to allow me to edit, markup, and apply alt text to images. [22:35.220 --> 22:39.100] So that, again, they're more accessible and useful for people actually browsing this experience. [22:39.660 --> 22:51.760] All of this comes together to say that Mastodon is probably the best place to be for any given person who wants to customize their social media experience, who doesn't like interacting with Twitter for some reason, who may have triggers they don't want to see. [22:52.220 --> 22:55.360] Mastodon gives you tools, and people use those tools. [22:55.520 --> 23:00.180] Importantly, we have a culture of using those tools to create a better social media experience for everyone. [23:00.680 --> 23:06.440] Mastodon is also the most, probably the friendliest place on the Internet when it comes to queer people. [23:07.200 --> 23:12.640] I do want to say that it leans left and tech heavy, and so is friendly to white queer people. [23:12.960 --> 23:17.820] There are still issues with integration of people of color, and Fediverse struggles with that. [23:18.080 --> 23:18.740] We're working on it. [23:19.240 --> 23:21.040] Again, the best way to fix it is for people to join. [23:22.720 --> 23:26.980] There are implementation issues, and the big one I'm going to talk about is platform feature diversity. [23:27.480 --> 23:39.700] So when I followed myself from Frendica, like half an hour ago, when I followed myself from Frendica, I sent a follow request, and Frendica informed me I'm now following RollTime at FreeRadical.zone. [23:39.980 --> 23:44.240] What FreeRadical.zone told me was that I had a follow request from Frendica. [23:44.760 --> 23:49.120] Frendica doesn't get updates from Mastodon on whether the follow request was successful. [23:49.380 --> 23:51.040] That's a feature diversity issue. [23:51.820 --> 23:57.960] Because these platforms don't have the same implementation for follow requests, and they can't talk to each other. [23:57.960 --> 24:08.840] So we have this theoretically interoperable system, everything built on ActivityPub, but the actual experience day-to-day is that it's really hard to follow somebody else and actually interact with them. [24:08.940 --> 24:09.060] Yeah? [24:09.320 --> 24:12.020] Does ActivityPub follow request? [24:12.220 --> 24:12.680] Yes. [24:13.640 --> 24:15.380] I don't... this just doesn't work. [24:15.520 --> 24:16.680] And I don't know why not. [24:17.340 --> 24:22.100] And I don't know if anybody knows why not, and that's kind of the problem, is that it's really hard to standardize things. [24:22.720 --> 24:26.560] Another thing ActivityPub has support for is language specification. [24:26.560 --> 24:29.580] You can say this toot is in... oh, we called them toots. [24:29.820 --> 24:30.580] I guess it's quirky. [24:32.000 --> 24:36.000] This toot is in English, or German, or whatever, like Dutch, as it were. [24:36.700 --> 24:40.760] You have language support, but Mastodon didn't implement that until two months ago. [24:40.880 --> 24:44.660] And so I was seeing lots of posts in German, which wasn't that helpful to me. [24:46.200 --> 24:51.500] Instance-only posts are a thing on some platforms, like Hometown, which is a fork of Mastodon. [24:52.420 --> 24:56.780] On Hometown, you can create a post that is only shown to people on your instance. [24:57.060 --> 24:57.680] It won't federate. [24:58.240 --> 25:05.140] And that's really useful if you're creating a community for your friends, and you want only them to be able to see this thing about you, right? [25:06.480 --> 25:07.820] ActivityPub is for creating communities. [25:07.940 --> 25:11.160] Instance-only posts are really useful for that, but Mastodon as a whole doesn't have it. [25:11.160 --> 25:19.940] So there are various platforms, all of which have thought, oh, it'd be cool to have this, because this is in an activity pub, or we want to do it slightly differently. [25:20.760 --> 25:21.600] But it doesn't work. [25:21.740 --> 25:24.560] There's no interoperability there when these platforms diverge. [25:26.880 --> 25:27.280] Okay. [25:27.620 --> 25:31.760] The big thing, the big recommendation at the end of this talk starts with a question. [25:32.320 --> 25:33.720] Why is social media? [25:34.860 --> 25:36.300] And we know why Facebook. [25:36.540 --> 25:37.380] We know why Instagram. [25:37.580 --> 25:38.200] We know why Twitter. [25:38.380 --> 25:39.200] The answer is money. [25:39.900 --> 25:48.240] The answer to why is Facebook is to sell you things, to harvest your data, and to manipulate you with abusive algorithms. [25:49.440 --> 25:50.700] Why is ActivityPub? [25:50.980 --> 25:55.080] Is the answer to why is ActivityPub just to take users away from Facebook? [25:55.320 --> 26:00.680] Is the answer to why is Mastodon to make a Twitter clone that just doesn't show you ads or have an algorithm? [26:01.240 --> 26:03.100] Right now, that's what the Fediverse is. [26:03.260 --> 26:09.420] An alternative, at best, to social media platforms, and an alternative that your friends aren't on, so why would you be on it? [26:10.380 --> 26:12.760] But ActivityPub can be a lot more. [26:14.220 --> 26:20.060] I'm going to scroll through the instances, some various instances, some various user interfaces for some platforms. [26:20.300 --> 26:23.740] I want you to take a look and see if there's something you see in all of these. [26:24.060 --> 26:25.540] A kind of common factor, right? [26:26.520 --> 26:31.100] Here's Mastodon again with our three home local federated. [26:31.100 --> 26:32.560] Here's Lemmy. [26:32.740 --> 26:34.720] Lemmy's kind of a Reddit-style clone. [26:35.460 --> 26:36.560] Here's PixelFed. [26:36.640 --> 26:37.660] PixelFed is like Instagram. [26:39.240 --> 26:40.000] Friendica again. [26:40.280 --> 26:41.320] Let's go through it, right? [26:41.820 --> 26:42.480] Mastodon. [26:43.160 --> 26:43.820] Lemmy. [26:44.820 --> 26:45.480] PixelFed. [26:46.140 --> 26:46.720] Friendica. [26:47.160 --> 26:49.340] What's the common uniting factor here? [26:49.440 --> 26:53.940] What's the thing that all of these supposedly disparate, unique, interesting platforms have in common? [26:53.940 --> 26:54.840] Dark mode. [26:55.120 --> 26:55.520] Dark mode. [26:57.900 --> 26:58.700] As they should. [26:59.880 --> 27:00.840] Timelines, right? [27:01.040 --> 27:01.880] The answer is timelines. [27:02.780 --> 27:03.660] Why are timelines? [27:04.160 --> 27:06.780] A timeline is a corporate thing, right? [27:07.060 --> 27:12.400] Facebook shows you a timeline because they have an algorithm that is supposed to pick for you what they think you'll find interesting. [27:12.640 --> 27:21.080] Twitter wants to show you ads in your timeline and they want to show you things you'll find interesting interspersed with things you won't so they can skinners box you into staying on their platform for six hours a day. [27:21.080 --> 27:23.960] No one should be on social media for six hours a day. [27:24.120 --> 27:26.980] And I know that because I'm on social media for more than six hours a day. [27:27.960 --> 27:30.220] Timelines are not an interaction mechanism. [27:30.420 --> 27:31.780] They're a consumption mechanism. [27:32.080 --> 27:38.020] They're designed to lull you into this endless doom scroll and I think we can all relate to how unhappy that makes us. [27:39.240 --> 27:39.940] Timelines suck. [27:42.900 --> 27:43.780] Here's Mastodon. [27:43.960 --> 27:47.240] They have it on their homepage, joinmastodon.com.org. [27:47.420 --> 27:48.200] Join Mastodon. [27:49.040 --> 27:51.360] This says, I want you to know, be careful. [27:51.520 --> 27:53.180] They're very, they're very careful about their language here. [27:53.600 --> 27:56.780] Your feed is chronological, ad-free and non-algorithmic. [27:57.100 --> 27:58.640] You decide who you want to see. [27:58.800 --> 28:00.120] You can only follow people. [28:00.580 --> 28:01.980] You can't follow content. [28:02.460 --> 28:08.660] So Cory Doctorow, who is at this conference, and I think he was inspired by me, recently made a blog post about this. [28:09.180 --> 28:10.920] He talked about the title of it. [28:11.020 --> 28:12.660] And if I'm going to link it, you'll see it in a second. [28:12.660 --> 28:15.660] The title of it is, so you've unfollowed me. [28:15.840 --> 28:16.200] We're good. [28:16.360 --> 28:24.320] And it's talking about how he has issues with people who message him saying, Cory, I love your blog posts, or I love your long-range Twitter threads, but I hate these pictures of your dog. [28:24.600 --> 28:26.100] I hate these are the things you're posting. [28:26.400 --> 28:28.240] Why are we following people? [28:28.800 --> 28:35.120] A timeline only works if you have an algorithm designed to pick the most interesting posts from the crud of the Internet, right? [28:35.180 --> 28:40.080] A timeline is made by an algorithm which dredges all this and then we'll sieve it for you. [28:40.920 --> 28:43.280] The Mastodon timeline is frankly pretty boring. [28:44.020 --> 28:46.000] And it's because you can't decide what you want to see. [28:46.520 --> 28:49.340] You can only decide in aggregate who you want to hear from. [28:51.040 --> 28:52.140] Power to the user. [28:52.900 --> 28:53.980] That's the theme of this talk. [28:54.140 --> 28:54.960] That's what we're going to talk about. [28:55.060 --> 28:55.860] And I'm actually going to change it. [28:56.080 --> 28:57.300] I don't want it to be power to the user. [28:57.560 --> 28:58.740] Power to the participant. [28:59.220 --> 29:00.740] When I want someone to log on... [29:00.740 --> 29:05.800] When I want to log on to a social media site, my goal should not be to sit there and scroll and hear from people. [29:05.880 --> 29:06.780] It should be to participate. [29:07.260 --> 29:12.460] I want to go and see what my friends and the people whose opinions I respect are saying about this. [29:12.620 --> 29:14.300] And then I want to contribute to the conversation. [29:14.520 --> 29:21.160] I want to be able to collate topics, bring them together, curate an experience that I can then modify and send out to other people. [29:21.460 --> 29:22.900] That's the power of social networking. [29:23.040 --> 29:24.260] That's the power of the Internet. [29:24.520 --> 29:26.060] That's what we're not doing. [29:26.720 --> 29:33.280] I should be able to browse a topic, a really robust topic, like a hashtag, and then say, okay, people are also looking at this thing. [29:33.380 --> 29:34.400] There's a lot of interoperability. [29:34.400 --> 29:36.720] And I can make connections between these two topics. [29:37.020 --> 29:37.340] Right? [29:37.440 --> 29:38.480] I need to be able to follow the zeitgeist. [29:39.440 --> 29:43.900] And I need to be able to do it in an active sense, creating the things as I'm consuming them. [29:44.080 --> 29:47.220] Because, again, no one should be able to do this for six hours a day. [29:47.620 --> 29:53.940] It should be interesting and engaging and take mental effort because that's what gets people to wake up and stop just listening. [29:55.260 --> 29:56.920] Who here has ever hosted a Minecraft server? [29:58.620 --> 30:00.980] Okay, who knows a child who's hosted a Minecraft server? [30:01.600 --> 30:02.740] Yeah, yeah, yeah, right, right? [30:02.960 --> 30:04.800] So, you can host a Minecraft server. [30:04.880 --> 30:06.560] You can spin one up in five minutes. [30:06.880 --> 30:09.520] And then you can create a world, a universe. [30:09.780 --> 30:10.880] And your friends can join. [30:11.060 --> 30:12.600] And they can create a world, a universe. [30:12.900 --> 30:15.320] You can sculpt the thing that you're interacting with. [30:15.320 --> 30:18.320] And that will also sculpt your future interactions. [30:18.680 --> 30:24.480] In Minecraft, there's unity between what you make and what you see. [30:25.080 --> 30:29.300] And that's the experience that we need to bring to social networking. [30:29.520 --> 30:32.300] There's a word here that may be in your minds that I'm creeping up on. [30:32.500 --> 30:33.060] It's metaverse. [30:33.540 --> 30:35.820] Nobody likes the metaverse because nobody likes meta. [30:36.240 --> 30:36.760] Facebook. [30:37.220 --> 30:38.060] They're stupid, right? [30:38.140 --> 30:40.680] I hope at this point we're all clear on the fact that they suck. [30:41.540 --> 30:43.400] But the metaverse already exists. [30:43.720 --> 30:44.560] It's called Gary's Mod. [30:44.560 --> 30:46.000] I don't know if any of you have ever played. [30:46.200 --> 30:55.520] But the metaverse is really what it needs to be, what it isn't, but what it should be, is just an experience that you can create and have other people help you create it. [30:55.740 --> 31:08.960] We need to take these paradigms, these ideas that have existed in Gary's Mod, in Minecraft, in multi-user dungeons, in online text adventure games, take these paradigms of interaction and creation and bring them to the social media networking experience. [31:09.240 --> 31:12.460] Our goal should not be to make a better version of Twitter. [31:12.460 --> 31:16.820] Our goal should be to create something that makes Twitter feel really, really lame. [31:17.040 --> 31:18.500] Because it is really, really lame. [31:19.220 --> 31:20.620] I've hit it on Twitter all at this talk. [31:21.060 --> 31:23.600] In any case, that is about all that I have for you. [31:24.780 --> 31:28.800] Here are my socials on Theoretical and then also Twitter. [31:29.080 --> 31:30.680] That link will post you to some resources. [31:31.540 --> 31:33.380] Thank you all very much for coming and listening. [31:33.380 --> 31:34.300] I really appreciate it. [31:40.470 --> 31:42.490] And so I assume I'm pretty short here. [31:42.510 --> 31:44.050] So we have some questions, I hope. [31:44.150 --> 31:45.510] Yeah, any questions? [31:46.490 --> 31:47.830] Do you want us to have a seat? [31:47.830 --> 31:48.090] Yeah. [31:48.930 --> 31:50.750] You mentioned that microphone. [31:52.370 --> 31:52.930] What? [31:54.270 --> 31:54.830] Microphone. [31:55.430 --> 31:55.990] Microphone. [31:56.150 --> 31:56.730] Does anybody... [31:56.730 --> 31:57.030] Aha! [31:58.650 --> 32:00.390] This is a professional conference. [32:03.090 --> 32:03.650] Hi. [32:04.310 --> 32:11.170] So you mentioned that, you know, a lot of your friends might not be on these social media platforms. [32:11.170 --> 32:17.010] And, you know, you've spent this talk talking about how awesome some of these features are and how much I want to use this. [32:18.150 --> 32:18.670] What... [32:18.670 --> 32:23.970] How do we get people who aren't, like, as tech savvy... [32:23.970 --> 32:26.430] Like, how do I get my mom to use this, you know? [32:27.830 --> 32:31.830] Because I feel like with social media, the more people on, the better. [32:32.110 --> 32:38.190] And the more people that use social medias like Mastodon or whatnot, the better it is for everyone. [32:38.210 --> 32:40.290] Because it's just, you have more control over everything. [32:40.390 --> 32:42.810] We're not feeding our data to Twitter or blah. [32:43.050 --> 32:49.810] So I guess my question is, how do you make this appeal to people who aren't, like, as tech savvy or interested in that sort of stuff? [32:49.910 --> 32:51.630] Like, what's the driving factor? [32:51.750 --> 32:52.710] I mean, great question. [32:52.730 --> 32:58.910] And I think if there's one good thing about the platforms we have right now, is that they're really easy to approach for someone familiar with Facebook or Twitter. [32:59.430 --> 33:04.170] They're easy to join and you'll get an experience that's similar, but with a better culture that's driving it. [33:04.550 --> 33:07.070] And so what I'm hoping is, with adoption comes adoption. [33:07.350 --> 33:13.970] If you're on there and you endlessly tell your mom to get on there until she gets fed up and joins, hopefully she will join, maybe her friends will join. [33:14.070 --> 33:15.470] We have to kick it off. [33:15.910 --> 33:18.770] The thing is that ActivityPub is four years old, it hasn't kicked off yet. [33:18.770 --> 33:24.830] But I hope that as we see standards evolve, as we see the situation improve, more people will join and more people will join. [33:24.830 --> 33:29.370] But there is a thing here, which is to say, right now most people using it are very techy. [33:30.910 --> 33:34.450] And I don't have a good answer for you on bringing it outside of the tech universe. [33:34.470 --> 33:37.590] It's gonna come with people hating social media in aggregate as well. [33:38.650 --> 33:41.950] It'll come with time and adoption and improvement of protocols and hopefully your help. [33:42.130 --> 33:43.750] And there are other people standing at the microphone. [33:43.930 --> 33:44.090] Hello. [33:44.090 --> 33:44.690] Hi. [33:45.950 --> 33:49.990] I'm sorry, maybe you covered this already and I didn't quite follow it. [33:50.090 --> 33:53.130] But I'm just trying to follow the concept of pushing and pulling. [33:53.450 --> 34:03.070] So if there's an instance and somebody I know who's active on that instance, a friend of mine set up a different one that I'm active on and I want to follow that person. [34:03.630 --> 34:15.090] Does my instance go and pull data from the other instance or does when that friend accepts my request to follow them, do they push their stuff to my instance? [34:15.310 --> 34:16.250] Yeah, that's a great question. [34:16.390 --> 34:16.970] Thank you for asking. [34:17.250 --> 34:19.410] And I'm sorry if I rush past this a little bit. [34:19.550 --> 34:21.730] I've been trying to talk slower since I started talking. [34:22.490 --> 34:27.010] So what we have here with these two servers, once you've posted something to your server... [34:27.010 --> 34:29.690] ActivityPub works on an inbox-outbox system, right? [34:29.930 --> 34:31.750] So clients have inboxes and outboxes. [34:31.850 --> 34:34.310] You'll push something from your outbox to your home server. [34:34.610 --> 34:41.930] Your home server then gets it in its inbox and then will push it to the inbox of any server that has one of your followers on it. [34:42.690 --> 34:46.950] And then that's then on the inboxes of all the clients who follow you. [34:47.650 --> 34:49.590] So yes, to answer your quick question, yes. [34:50.430 --> 34:51.730] That's how the model works. [34:51.890 --> 34:54.530] It's inbox, outbox, email, JSON over email. [34:55.350 --> 34:55.810] Yes. [34:56.370 --> 34:56.990] Hey there. [34:57.210 --> 34:58.990] Thanks again for the amazing talk. [34:59.210 --> 35:00.760] This ActivityPub seems awesome. [35:01.490 --> 35:14.290] But I had one thing that was running through my mind when you were presenting everything, is that with all the different examples of the implementations that you showed, they all seem to have text, pictures, and videos. [35:14.590 --> 35:17.830] And I'm sure they can implement instance-specific features. [35:17.830 --> 35:23.590] But the protocol itself seems like it only handles the lowest common denominator. [35:23.710 --> 35:24.670] Kind of like email, you know? [35:24.790 --> 35:26.590] It handles text and maybe pictures. [35:26.810 --> 35:44.610] But I feel like that could be hindering adoption because all the platforms that you're trying to compete with, like Twitter, Instagram, Facebook, they all have specific functionality that sort of drives people to the platform, like Instagram stories or like retweets. [35:44.890 --> 35:47.650] So how does ActivityPub sort of handle this? [35:47.730 --> 35:49.490] I don't know if I got a clear answer to that. [35:50.130 --> 35:50.510] Mm-hmm. [35:51.250 --> 35:59.550] So ActivityPub has mechanisms for all of the common social media paradigms, like boosting, liking, following people with follow requests. [35:59.710 --> 36:01.490] ActivityPub has mechanisms for all of this. [36:01.490 --> 36:02.630] But you're exactly right. [36:02.750 --> 36:03.750] It doesn't have anything unique. [36:04.430 --> 36:06.110] And that's really the problem. [36:06.330 --> 36:13.230] Because any given platform or version of ActivityPub's software is mostly a clone of another one at this point. [36:13.970 --> 36:15.190] Which is what I'm talking about. [36:15.470 --> 36:20.570] Which is why I think that as a spec, ActivityPub needs to change or be replaced by something which has unique features. [36:20.570 --> 36:27.250] And I'm hoping that those unique features which don't yet exist, those ideas which haven't yet been had, will be had by people like you who have come to this talk. [36:27.590 --> 36:32.470] And who can start to work on building a better social media experience. [36:32.590 --> 36:33.550] I don't know, does that answer your question? [36:33.750 --> 36:35.070] It's like, you're exactly right. [36:35.310 --> 36:36.430] It's not that featureful. [36:36.710 --> 36:38.530] It only has the features that everybody else has. [36:38.710 --> 36:39.030] Mm-hmm. [36:39.310 --> 36:41.070] We don't have anything unique yet except for a culture. [36:41.450 --> 36:43.410] But I'm hoping our culture will translate to new features. [36:43.410 --> 36:45.510] Because we have a lot of awesome people on this platform. [36:46.230 --> 36:48.410] And if you don't mind a follow-up question. [36:48.410 --> 36:55.810] I saw a copy of all the different social media types like Reddit and Twitter in your examples. [36:56.030 --> 36:58.930] Have you heard of anything that mimics something like Twitch? [37:00.290 --> 37:00.630] We have PeerTube. [37:00.630 --> 37:02.450] Video streaming seems to be one thing that I didn't... [37:02.910 --> 37:04.290] PeerTube is actually really cool. [37:04.470 --> 37:06.130] And it is something with a pretty unique feature set. [37:06.590 --> 37:08.090] I'm thinking now I should have talked about it. [37:08.370 --> 37:09.330] But I got the chance. [37:09.590 --> 37:11.650] PeerTube can do two things. [37:11.790 --> 37:14.030] It can do hosted videos or peer-to-peer videos. [37:14.330 --> 37:16.910] So anybody with a PeerTube instance hosts videos. [37:16.910 --> 37:18.930] And they can be accessed in a federated manner. [37:19.470 --> 37:24.310] But you can also get these videos directly from other users who have opened the same video. [37:24.690 --> 37:28.430] So it's like a little in-browser torrenting client basically. [37:28.870 --> 37:31.430] And I believe PeerTube has support for live stuff. [37:32.070 --> 37:35.210] Again, I don't know how complete or usable it is as a platform. [37:35.230 --> 37:35.990] I haven't really tried. [37:36.230 --> 37:37.170] But it is out there. [37:37.310 --> 37:37.870] We have that. [37:38.150 --> 37:39.970] The problem is that nobody's using it. [37:40.390 --> 37:41.690] And that's the big problem. [37:42.710 --> 37:43.330] Thank you. [37:43.330 --> 37:43.390] Thank you. [37:43.590 --> 37:43.750] Thank you. [37:45.770 --> 37:46.090] Hi. [37:46.670 --> 37:48.690] First, I wanted to say thank you for this talk. [37:48.870 --> 37:51.890] Because before this, I didn't know anything about any of this stuff. [37:52.030 --> 37:54.710] Aside from the fact that the existing options suck. [37:55.250 --> 37:56.110] But that doesn't... [37:56.110 --> 37:57.070] Where do you go from that? [37:57.190 --> 37:57.590] So thank you. [37:58.250 --> 37:59.250] But I'm wondering... [37:59.250 --> 38:02.170] That said, what if I want to set up my own instance? [38:02.410 --> 38:03.690] How can I do that? [38:03.690 --> 38:05.230] Yeah, this is a really great question. [38:05.610 --> 38:08.410] Right now, as I said, you'd probably want to run a Mastodon instance. [38:08.590 --> 38:10.450] It's just the place where everyone else is. [38:10.750 --> 38:12.850] There's a really great service called mastodothost. [38:13.110 --> 38:16.550] They will create for you a managed Mastodon instance, which you can administrate. [38:16.730 --> 38:18.810] And then they will do the sys admin part of everything. [38:19.190 --> 38:22.750] And you can scale that as your instance grows, depending on how you want to do things. [38:22.910 --> 38:24.750] If you want to self-host too, it's really easy. [38:24.850 --> 38:26.110] If you have a spare VPS somewhere. [38:27.110 --> 38:31.030] Mastodon is a Ruby on Rails app with a PostgreSQL database, PostgreSQL. [38:31.030 --> 38:32.970] I don't know, there's a big old warp here. [38:33.290 --> 38:33.670] But yeah. [38:33.990 --> 38:35.270] Mastodon is a Rails app with a database. [38:35.290 --> 38:37.850] You can implement it on a server in an afternoon. [38:38.010 --> 38:38.690] It's not that hard. [38:39.490 --> 38:43.330] But if you want a really easy experience, mastodothost is the place to go. [38:43.650 --> 38:44.150] Thank you. [38:44.570 --> 38:44.790] Yeah. [38:47.330 --> 38:47.810] Hi. [38:48.350 --> 39:00.930] It seemed like from the existing implementations that you showed that most of the time people who are using this protocol are mostly trying to imitate other existing social media platforms. [39:01.030 --> 39:08.090] And my question is, is anybody trying to do anything a little outside the box? [39:08.490 --> 39:14.430] Like, a social activity that always comes to mind to me is gaming. [39:14.610 --> 39:15.650] And you mentioned Minecraft. [39:16.090 --> 39:21.530] Is there anybody working on, say, video game matchmaking or something like that? [39:21.530 --> 39:21.670] Yeah. [39:22.030 --> 39:22.870] Spritely is. [39:23.070 --> 39:23.930] Which is really cool. [39:23.930 --> 39:27.330] There's a wonderful talk, which I think I linked to on that QR code. [39:27.850 --> 39:30.330] And if not, I'll add it. [39:30.450 --> 39:32.010] And I'll add it to that page in a minute. [39:32.250 --> 39:42.230] Spritely is attempting to create a cohesive experience where you can join a game on somebody with somebody else that's federated and with common items and things like that stored on respective servers. [39:42.230 --> 39:46.930] All of this sort of cryptographically insured but without the blockchain. [39:47.190 --> 39:48.810] I don't know exactly how it's supposed to work out. [39:51.270 --> 39:51.630] Yes. [39:51.890 --> 39:53.090] There are people doing cool things. [39:53.390 --> 39:56.010] None of them are usable or used yet. [39:56.470 --> 39:59.430] But I encourage you to go and take a look at them and see what you can do to help. [39:59.710 --> 39:59.990] All right. [40:00.110 --> 40:00.670] Thank you very much. [40:00.670 --> 40:01.010] Yeah. [40:03.150 --> 40:03.630] Hi. [40:05.470 --> 40:13.470] On mobile apps, if somebody replies to one of your posts, is there any way for Activity Pub to do push notifications? [40:13.870 --> 40:17.170] Because typically that would have to be associated with the app, right? [40:17.270 --> 40:19.610] But then they're not the same as the servers. [40:19.790 --> 40:21.190] The app wouldn't necessarily know. [40:21.410 --> 40:22.370] That's a great question. [40:23.130 --> 40:24.530] It does depend on the platform. [40:24.990 --> 40:29.710] So Mastodon and most of the Mastodon clients and mobile apps do have push notifications. [40:30.190 --> 40:33.350] But the platform does have to implement that separately from the spec. [40:34.870 --> 40:37.150] So they get the notification from... [40:37.150 --> 40:41.490] So your home server is like, oh, I just got a reply. [40:41.590 --> 40:44.370] I'll send that to the Mastodon app server. [40:44.770 --> 40:47.170] And then that sends it through the iOS and Android. [40:47.730 --> 40:47.830] Yeah. [40:47.830 --> 40:47.890] Okay. [40:48.270 --> 40:48.630] Cool. [40:51.660 --> 40:52.700] Thanks so much for all time. [40:52.760 --> 40:53.400] That was a really good... [40:53.400 --> 40:54.620] I'm glad I came to this talk. [40:54.880 --> 40:55.160] Thanks. [40:56.560 --> 41:02.180] You were talking about how Activity Pub is an unmaintained standard, and it's just kind of bad. [41:03.480 --> 41:04.080] It's not... [41:04.080 --> 41:04.480] Yeah, okay. [41:04.740 --> 41:05.640] Well, it's good. [41:05.780 --> 41:07.160] But, you know, missing some features. [41:07.880 --> 41:14.120] Are there any up and coming new standards that aim to replace Activity Pub? [41:14.420 --> 41:19.660] And do you think it's even worth it to try considering already we're having adoption issues? [41:20.420 --> 41:20.820] Yeah. [41:21.060 --> 41:21.320] Yes. [41:21.460 --> 41:22.580] First of all, yes, it is worth it. [41:22.660 --> 41:24.140] And I think we should be working on this stuff. [41:24.140 --> 41:25.120] And there are people who are. [41:25.540 --> 41:30.420] I refer you back again to Spritely, who are doing some really cool stuff. [41:30.800 --> 41:32.520] And they have links to other organizations. [41:32.780 --> 41:36.220] I think GNU Social is actually still maintained, even if no one is using it. [41:36.460 --> 41:37.940] So there are other platforms. [41:38.180 --> 41:38.840] There is stuff happening. [41:39.060 --> 41:46.360] The problem is that if nobody is using Activity Pub, which is the wider standard right now, very few people are going to want to implement something entirely different from that. [41:47.780 --> 41:52.780] So, again, trying to call attention to all of this and hope that people start working on it. [41:53.020 --> 41:54.320] Because some people are, but not enough. [41:55.420 --> 41:55.560] Thank you. [41:57.940 --> 41:59.840] So, fantastic talk, by the way. [42:00.040 --> 42:00.300] Thanks. [42:00.520 --> 42:01.600] Before I take a swing at you. [42:03.740 --> 42:08.520] So, you're saying that, you know, Activity Pub is a failure because there are only 6 million people on it. [42:08.700 --> 42:14.580] Was your expectation that within the last four years that they would displace all of Facebook and Twitter? [42:14.580 --> 42:22.200] I mean, what's the number that would make this even a reasonable success in your eyes if where they are now is so bad? [42:22.440 --> 42:23.280] Great question. [42:24.120 --> 42:27.440] And I think it comes back to what I was talking about with why is social media. [42:27.900 --> 42:36.900] I mean, if you see Activity Pub as a way to replace and from taking power away from centralized corporate social media platforms, then it's failed. [42:36.900 --> 42:44.400] And I think you'll call that success when the average person who wants to sign up for a social media account doesn't go to Facebook, they go to Frendica. [42:44.620 --> 42:47.900] That would be a success if you're trying to replace existing social media platforms. [42:47.900 --> 42:52.360] Because, as it is right now, big tech can't exactly co-exist. [42:53.800 --> 43:00.820] I think when you're talking about evolving what social media looks like from a passive to an active experience, that's a difficult question. [43:00.940 --> 43:04.380] And I think it comes again to that point when all your friends are on it. [43:04.660 --> 43:06.340] And you can see interesting things. [43:06.540 --> 43:10.360] And maybe that can co-exist with existing platforms that people don't want to leave. [43:12.460 --> 43:17.180] But there's not a number so much as like a question of when is this the better experience. [43:17.480 --> 43:19.100] And that relies on standards. [43:19.100 --> 43:20.060] It relies on features. [43:20.100 --> 43:23.120] And it relies on people to actually come and join the platforms and make them better. [43:23.800 --> 43:26.100] Yeah, better experience is a little tough to define though. [43:26.200 --> 43:26.580] It is, yeah. [43:26.800 --> 43:30.180] That's a very nebulous because I think the experience is better. [43:30.600 --> 43:30.960] Yeah. [43:31.080 --> 43:34.380] But that's because the nerds that I like tend to be there. [43:34.380 --> 43:34.540] No, exactly. [43:34.660 --> 43:35.120] I love Activity Pub. [43:35.120 --> 43:35.620] So it makes it easy. [43:35.760 --> 43:36.680] I get on every day. [43:36.760 --> 43:37.480] I get on Twitter, never. [43:37.480 --> 43:38.180] It's great. [43:38.700 --> 43:42.760] And I think if you're looking for a good social media experience right now, Mastodon is the place to go. [43:43.420 --> 43:48.720] But a better experience is also not just for the people sitting in this room, all of whom are very smart and technical. [43:48.900 --> 43:50.000] It needs to apply to everybody. [43:50.180 --> 43:50.960] And again, it's nebulous. [43:51.260 --> 43:54.080] I don't have a good definition for you off the top of my head. [43:54.900 --> 43:58.600] But I think that will come with time and hopefully with participation. [43:58.940 --> 44:01.740] That was my point is it may take more time. [44:01.900 --> 44:02.180] It does. [44:02.200 --> 44:02.860] It's going to take... [44:02.860 --> 44:10.120] You can't have VC backed billion dollar company meteoric growth with no money and grassroots. [44:10.540 --> 44:14.400] I think if it's going to be grassroots and it's going to be successful, it's going to take time. [44:14.540 --> 44:15.420] You raise a great point. [44:15.620 --> 44:16.320] It is. [44:17.360 --> 44:18.000] Thank you. [44:18.360 --> 44:18.460] Yeah. [44:18.660 --> 44:18.880] Thank you. [44:20.080 --> 44:20.740] All right. [44:20.840 --> 44:25.860] So we have a question from online from The Matrix. [44:26.140 --> 44:33.320] Anyone know of any Mastodon instances focusing on cyberstalking related to fighting it, prevention, and how to take action? [44:33.540 --> 44:34.120] Cyberstalking? [44:34.540 --> 44:35.120] No. [44:36.280 --> 44:37.440] That's a really good question. [44:37.640 --> 44:37.960] Tech? [44:38.140 --> 44:38.580] Any ideas? [44:38.940 --> 44:39.340] No. [44:40.300 --> 44:40.880] Yeah. [44:40.880 --> 44:46.380] There is, again, on that page, an instance finder called Fediverse.2 and you may be able to look there. [44:46.720 --> 44:51.100] You can search for instances of various platforms, which is, I think, a really helpful thing. [44:51.260 --> 44:52.080] And you can migrate from there. [44:52.400 --> 44:56.440] But, you know, ask around and see if you get any helpful stuff. [44:56.660 --> 44:57.840] I don't know of one off the top of my head. [44:59.700 --> 45:00.140] Yeah. [45:00.820 --> 45:02.020] A question, I guess. [45:02.660 --> 45:14.960] Is there any functionality planned or thought about, if you're on a federated platform, to pull from other platforms and then to post out to those platforms, compatibility, you know, that kind of stuff? [45:15.240 --> 45:15.680] Great. [45:15.680 --> 45:16.220] Great question. [45:16.380 --> 45:16.660] Thank you. [45:16.880 --> 45:21.380] There are, at this moment, Fediverse mirrors between Twitter and, I believe, also Reddit. [45:21.580 --> 45:31.700] So you can get posts from Twitter feeds in your Fediverse timeline, and you can mirror posts from what you say on the Fediverse to Twitter and vice versa, which really does ease the transition for people. [45:31.940 --> 45:34.920] So those are out there and they're pretty widely used. [45:36.720 --> 45:37.240] Hi. [45:37.420 --> 45:37.680] Hi. [45:37.840 --> 45:38.600] Thank you for the talk. [45:38.820 --> 45:39.220] Thanks. [45:39.460 --> 45:44.460] Do you know of any Fediverse things that are similar or alternative possibly to LinkedIn? [45:45.180 --> 45:45.760] To LinkedIn? [45:45.760 --> 45:46.220] No. [45:48.620 --> 45:49.140] Yeah. [45:49.400 --> 45:49.960] Any ideas? [45:56.920 --> 45:57.440] Yeah. [45:57.620 --> 45:58.800] Mastodon did get me a job. [45:59.720 --> 46:00.080] Nice. [46:00.080 --> 46:06.880] For the most part, it's nothing explicit so far than it is, but it's pretty quite a community that I know people have gotten involved on. [46:07.120 --> 46:07.660] Mm-hmm. [46:09.200 --> 46:11.840] Which is really, really cool, because at this point, this is enough. [46:12.080 --> 46:13.560] It's small enough community that that's possible. [46:13.880 --> 46:16.940] Eventually, maybe we will have to identify a place to do it. [46:17.500 --> 46:17.880] Yeah. [46:18.700 --> 46:19.100] Cool. [46:19.200 --> 46:19.460] Thank you. [46:19.700 --> 46:19.920] Yeah. [46:20.840 --> 46:25.500] And I think that is the last question, and also near the end of my time. [46:25.760 --> 46:27.900] Thank you again, everybody, for coming in here for me. [46:27.900 --> 46:28.820] I really appreciate it. [46:33.150 --> 46:33.750] Thank you.