WEBVTT 00:00.000 --> 00:11.000 Who is Casey, who works on a project or has worked on a project called Post Marks? 00:11.000 --> 00:17.360 I contributed a little bit to Post Marks and it's exciting to have you in Europe for the 00:17.360 --> 00:19.960 first time as well I understand. 00:19.960 --> 00:21.960 So just happy in my cup. 00:50.960 --> 01:18.960 If you're coming in then please do join us and come in and find a seat and make quiet for our speaker. 01:19.960 --> 01:25.960 Thank you very much. 01:25.960 --> 01:31.960 I think you are mute. 01:31.960 --> 01:36.960 No, I should have told you. 01:36.960 --> 01:38.960 All right. 01:38.960 --> 01:39.960 Hello everybody. 01:39.960 --> 01:40.960 My name is Casey Kolderup. 01:40.960 --> 01:42.960 I'm really happy to be here today. 01:42.960 --> 01:47.960 It's my first time in Europe so this has been an exciting trip for me. 01:48.960 --> 01:53.960 It's also just great to see so many cool projects here and so many questions that I'm going to ask in this presentation. 01:53.960 --> 01:55.960 Have been answered by many of you have talked today. 01:55.960 --> 01:58.960 So thank you for giving me so many new ideas already. 01:58.960 --> 02:00.960 I'm here to talk about non-microblogging software. 02:00.960 --> 02:06.960 Design on activity pub and I'll talk about the inherent trade-offs of the interoperability. 02:06.960 --> 02:09.960 But first, I'll talk a little bit about myself. 02:09.960 --> 02:12.960 I'm Casey, like I said, I live in Portland, Oregon in the United States. 02:12.960 --> 02:15.960 I'm a developer of a small Fediverse app called Post Marks. 02:15.960 --> 02:20.960 That you might have heard of, but for the purposes of this talk, I need to go back a little bit further and my time on the internet. 02:20.960 --> 02:24.960 I was introduced to the open web as an adolescent in the early 90s. 02:24.960 --> 02:26.960 GTE was my first ISP. 02:26.960 --> 02:31.960 I watched the birth of blogging and the explosion of opportunity that was web 2.0 as a teenager. 02:31.960 --> 02:33.960 I learned how to code as I can make my own websites. 02:33.960 --> 02:37.960 And then the 2000s I went to Purdue University to get a bachelor's degree in computer science. 02:37.960 --> 02:40.960 I treated it as a trade school even though it was university. 02:40.960 --> 02:44.960 I really wanted to get out there and just learn what I needed to know to build the web because that was what I wanted to do. 02:44.960 --> 02:49.960 Now in the 2020s, I'm an engineer who works on glitch. 02:49.960 --> 02:52.960 It's a website that aims to make it possible for everyone to build the web. 02:52.960 --> 02:57.960 It's a platform where people who want to learn how to make websites and other apps that live on the open web, 02:57.960 --> 03:02.960 whether that means going in and changing a few lines of text on a web page and some colors in a CSS file, 03:02.960 --> 03:06.960 or building your own web socket based web XR and multiplayer game from scratch. 03:06.960 --> 03:11.960 Whatever you make will provide hosting for it and a community where you can share what you've built. 03:12.960 --> 03:15.960 In my free time, I'm on their hobbies. 03:15.960 --> 03:20.960 I've worked with APIs like Twitter, Discord, and Macedon to build generative bots that make art or jokes. 03:20.960 --> 03:24.960 I've built CMS's to host blog posts and create a variety that I've done. 03:24.960 --> 03:27.960 My first ever PHP app built in 2001 was a link blog, 03:27.960 --> 03:31.960 because I was obsessed with those cocky.org and meme pools in my first favorite websites. 03:31.960 --> 03:36.960 As a user, I spent countless hours in IRC, not technically the web, but you know, it's related. 03:36.960 --> 03:39.960 Slack and Discord channels on PHP VV forums. 03:39.960 --> 03:42.960 I'm micro blogging networks like Twitter and Macedon. 03:42.960 --> 03:45.960 On unique platforms like Google reader and co-host, RIP to Eggbug. 03:45.960 --> 03:49.960 Many sites that I hear myself and others used to explain how we spent time on the web. 03:49.960 --> 03:53.960 But one thing I think that goes too often unsaid is how much time I am. 03:53.960 --> 03:57.960 My friends have spent exploring the fullness of what happens off of those platforms. 03:57.960 --> 04:03.960 Following hyperlinks in a web browser and seeing the full potential of the technologies that give us this world online. 04:04.960 --> 04:09.960 So it's been good for me to remember the thing I loved most about the web is the breadth of experiences that are enabled. 04:09.960 --> 04:17.960 This is Archive Stumbler, a project I built last year, which lets you browse Archive.org collections randomly, which Archive.org actually doesn't support. 04:17.960 --> 04:26.960 There's no random feature on it, which is just really fun way to kind of get a little serendipity and see what else is out on the various collections available there. 04:26.960 --> 04:32.960 I've certainly read my fair share of blogs, dating back to meeting someone and reading their entire live journal and chronological order. 04:32.960 --> 04:41.960 The web makes it possible to host multimedia interactive games and weird exploreable websites that unfolded unexpected ways as you search their corners for secrets. 04:41.960 --> 04:47.960 That variety when it's present makes being online feel to me vital, diverse, exciting and engaging. 04:47.960 --> 04:51.960 We're able to find not just a variety of content, but a variety of experiences. 04:51.960 --> 04:56.960 What I'm here to talk about today is the result of reflecting on that breadth of design and experience the web can provide. 04:56.960 --> 05:04.960 In the face of what I've realized I spent so much of my free time recently doing and what the project that brought me here has missed out on taking part. 05:04.960 --> 05:09.960 The end of 2023, I released the first versions of a platform I called Postmarks. 05:09.960 --> 05:12.960 Postmarks is a social bookmarking platform that lives on the open web. 05:12.960 --> 05:19.960 You probably know what a bookmark is, but just for the sake of completeness, we're talking about as a URL has some metadata associated with it. 05:19.960 --> 05:26.960 Let's you attach excerpts of that site or describe the contents and then usually categorize it in relation to other bookmarks that you have. 05:26.960 --> 05:31.960 By default, bookmarks you create or visible to anyone looking at your postmark site on the web. 05:31.960 --> 05:40.960 But those bookmarks are also broadcast to other introduces servers via the activity pub protocol, which makes postmarks not just a social bookmarking app, but a federally enabled bookmarking app. 05:40.960 --> 05:42.960 Social bookmarking is hardly a new idea. 05:42.960 --> 05:47.960 I built it intentionally with many similarities to the first social bookmarking app on the web delicious. 05:50.960 --> 05:52.960 Yeah, it deserves it. 05:52.960 --> 05:54.960 Delicious was a tool that grew out of a group link plug-in site. 05:54.960 --> 05:57.960 I was, as I said, obsessed with called Mean Pool. 05:57.960 --> 06:01.960 It helped its founder Joshua Shactor, organized URLs that he wanted to store and categorize. 06:01.960 --> 06:06.960 Delicious may not have been a platform that became a household name, especially with that weird domain name. 06:06.960 --> 06:12.960 But as an example, if it's influenced the way that we used the word tag to refer to keyword metadata, that actually comes from delicious. 06:12.960 --> 06:14.960 I think a lot of people don't realize. 06:14.960 --> 06:22.960 I was a delicious user. It was really cool as someone who was in college at the time and was using more than one computer for the first time, which like, now we don't even think about. 06:22.960 --> 06:25.960 But back then it was like so exciting and go to the computer lab and have my bookmarks there. 06:25.960 --> 06:28.960 Go back to my door and have them at home. 06:28.960 --> 06:34.960 Knowing other people on the site and browsing their tags and browsing their bookmarks, gave it kind of a social component. 06:34.960 --> 06:38.960 But for me, it was first and foremost a kind of a form of external memory. 06:38.960 --> 06:43.960 I was sinking things to the cloud before we even talked about things that way. 06:43.960 --> 06:48.960 Delicious had a sort of tortured history as it got acquired and resold multiple times in different companies. 06:48.960 --> 06:53.960 In 2009, another developer looked at that and kind of had the classic, I could make that thought. 06:53.960 --> 06:55.960 And did, and the result was called pinboard. 06:55.960 --> 07:02.960 A very similar website, but one that came with slow growth business ideals that seemed to promise it would stay available as a sustainable business for a long time. 07:02.960 --> 07:04.960 And it still available online today. 07:04.960 --> 07:09.960 I moved to pinboard shortly after it's launched and I used it happily for years. 07:10.960 --> 07:15.960 When it comes to the Fediverse, I've used mass and on both publicly and privately since 2017 and a lot of different forms. 07:15.960 --> 07:18.960 I first tried developing the activity pub protocol in 2022. 07:18.960 --> 07:21.960 Thanks to Jerry's, because he needs activity pub service tutorial. 07:21.960 --> 07:25.960 And the great information available at activity pub.rocks, which is a great site if you haven't seen it. 07:25.960 --> 07:30.960 I ended up making a demo of what would eventually become post marks just before Christmas 2022. 07:30.960 --> 07:32.960 I kept hacking on it in my free time throughout the month of the fall. 07:32.960 --> 07:38.960 And eventually shared news that I was released in an initial version just recently in September 2023, which I guess is over year ago now. 07:38.960 --> 07:40.960 The response was bigger than I was expecting. 07:40.960 --> 07:47.960 And then the months that followed I took a number of great contributions from friends and new acquaintances that fixed activity pub related bugs, added full tech search. 07:47.960 --> 07:48.960 All kinds of other cool stuff. 07:48.960 --> 07:50.960 I think a few here in the room right now. 07:50.960 --> 07:51.960 Thank you very much. 07:51.960 --> 07:57.960 And Andy, I know, has helped with a lot of the sort of governance and code of conduct stuff, which I really appreciate. 07:57.960 --> 08:02.960 Unlike many software projects that I've worked on, my goals for post marks are actually really concrete. 08:02.960 --> 08:04.960 I know what I want its end state to look like. 08:04.960 --> 08:10.960 I want to get to that point and kind of end it and then make it available to fork and give it a new life from there. 08:10.960 --> 08:18.960 In 2025, I'm hoping to finish off what I see is that original vision for the project so that we can decide what to do next. 08:18.960 --> 08:25.960 When I sat down to start post marks, I gave myself three core ideas that I decided right away where the most important things to the project. 08:25.960 --> 08:31.960 Things that would define what it kept it useful to the kind of user I had in mind, what would keep me moving forward and developing it. 08:31.960 --> 08:35.960 And we'll get people including me excited about using it over any other bookmarking platform. 08:35.960 --> 08:42.960 After going over the list, I'll explain each one of them in more detail and the impacts that one in particular had on the project as a whole. 08:42.960 --> 08:45.960 The first is actually single user instances. 08:45.960 --> 08:52.960 Unlike most activity pop apps, post marks is a platform where a given instance or server is home to one actor or user. 08:52.960 --> 08:58.960 That is to say if you want to use post marks, you're going to set it up for yourself or find someone who will set it up just for you. 08:58.960 --> 09:00.960 The setup process is actually pretty simple, though. 09:00.960 --> 09:04.960 And using the glitch platform, there are literally four required steps. 09:04.960 --> 09:06.960 You take two random values and generate them. 09:06.960 --> 09:08.960 You put them into a .env file. 09:08.960 --> 09:14.960 You put a user name into a JSON file and then you rename a file to signal to the server that everything is ready to go and you're ready to launch the server. 09:14.960 --> 09:16.960 With Litch, you can remix the base project. 09:16.960 --> 09:19.960 It's available at postmarks.litch.me. 09:19.960 --> 09:25.960 And you can do all that in your web browser using the glitch IDE in less than five minutes. 09:25.960 --> 09:37.960 We'll also talk about how I decided while working on postmarks that, despite the fact that for career reasons I've learned how to make single page web applications with fancy JavaScript features and all kinds of slick auto updating things, 09:37.960 --> 09:40.960 I was going to use what I considered old techniques for postmarks. 09:40.960 --> 09:45.960 This was less of a principal decision than it was a practical one, but either way I'm still convinced it was the right choice. 09:45.960 --> 09:49.960 The third principle is interoperability with the developers. 09:49.960 --> 09:53.960 It occurred to me that since I was using activity pub, I should probably do that. 09:53.960 --> 10:01.960 It would be possible if you know anything about activity pub design to build something on a security pub in a way that mass it on would never even see it. 10:01.960 --> 10:04.960 You could follow an actor from them to their followers, actors available. 10:04.960 --> 10:12.960 But then the activity the actor is performing would never be available to mass it on via the notes that it kind of knows how to understand. 10:13.960 --> 10:15.960 Interop the seem to have a number of advantages. 10:15.960 --> 10:20.960 In a way, and in a way, and in the thing that kept development working the fastest for me. 10:20.960 --> 10:24.960 But it's also led to some of the most difficult challenges I've faced in designing postmarks. 10:24.960 --> 10:28.960 But first, let's go back to single user instances. 10:28.960 --> 10:33.960 If you have any opinions about mass it on, some of them are probably related to its decentralized model and the concept of instances. 10:33.960 --> 10:40.960 On mass it on in software that works activity pub, instances are most easily represented by the domain name that makes up the second half of your username. 10:40.960 --> 10:45.960 But the actual impact goes further than that, which a lot of people don't understand when they're first signing up. 10:45.960 --> 10:53.960 And instances are collection of users who store their data on the same server, who abide some set of rules, and who are subject to administration by the instances leadership. 10:53.960 --> 10:59.960 And who in most cases are seen as belonging to a group of some kind, whether it's a clearly stated entity group, a shared interest, 10:59.960 --> 11:04.960 or just even sort of a reputation or attitude about how they behave on the Fediverse. 11:04.960 --> 11:06.960 Instances are home to communities. 11:06.960 --> 11:11.960 Like most communities, instances experience to growth and decay, they go through good times and bad. 11:11.960 --> 11:16.960 They're also subject to political action from other instances and communities they're in contact with. 11:16.960 --> 11:22.960 Sometimes, these situations where instances shut down or get isolated from parts of the Fediverse, the way most activity pubs apps work right now, 11:22.960 --> 11:27.960 these events could have real impacts on individual people who might never have seen it coming. 11:27.960 --> 11:32.960 On mass it on today, moving your network is accomplishable, but moving your content is not. 11:32.960 --> 11:36.960 Some of this is due to difficulties that are specific to mass it on, but some of it's due activity pub itself. 11:36.960 --> 11:38.960 This isn't for lack of care. 11:38.960 --> 11:40.960 There are efforts to fix this problem. 11:40.960 --> 11:46.960 I look forward to how that's going to evolve over time, but it's still definitely something that's being worked on. 11:46.960 --> 11:50.960 Web-based bookmarking, while having a social component dating back all the way to delicious, 11:50.960 --> 11:53.960 has first and foremost, as I said, been an activity I do for myself. 11:53.960 --> 12:00.960 In my private bookmarking account that I used as an authoritative source, I have about 20,000 bookmarks that I've accumulated in my grade over 20 years, 12:00.960 --> 12:03.960 as I've moved from platform to platform. 12:03.960 --> 12:08.960 I use my recent bookmarks every day to track things I want to read across devices with a mom like desktop, 12:08.960 --> 12:13.960 and I want to read on my phone later, and I search my full archive, not just daily, but pretty close. 12:13.960 --> 12:17.960 If I want to have a place to bookmark, bookmarks, I need to know that's not going anywhere, 12:17.960 --> 12:22.960 and I suspect most people who would install their own self-hosted bookmarking software probably feel the same way. 12:22.960 --> 12:26.960 While mass it on and many other popular activity pub platforms are very reasonably designed to be large, 12:26.960 --> 12:32.960 heavy weight or medium weight platforms with live databases and search indexes and things that help them scale to hundreds and thousands of users, 12:32.960 --> 12:38.960 there have been some projects that go to social that focus on a minimal footprint for a small number of users. 12:38.960 --> 12:42.960 With postmarks, I took that as inspiration, and I took it as step further. 12:42.960 --> 12:44.960 One instance has one user. 12:44.960 --> 12:51.960 So while this decision does have its own complications and political kind of ideals that have to be managed around the Fedivers as a whole, 12:51.960 --> 12:57.960 it has been a job for me in keeping the project simple, manageable, and adding a constraint that says that the software I'm designing 12:57.960 --> 13:03.960 has to balance the utility it provides to its own user with the complication of its install and hosting process, 13:03.960 --> 13:07.960 instead of amortizing that across a large community. 13:07.960 --> 13:12.960 Moving on, we can go to the old web architecture that I referred to earlier. 13:12.960 --> 13:18.960 I don't expect this principle to be too controversial, and I'd event like Phasetem, although elsewhere in the world that I sometimes get more pushback on this. 13:18.960 --> 13:25.960 But when I decided to start this project, I made a web server, it generates HTML on the server side. 13:25.960 --> 13:31.960 I know this is crazy, delivers that to the browser, accepts an HTTP request via HTML forms, 13:31.960 --> 13:35.960 and uses minimal JavaScript on the front end to improve the user experience just a little bit. 13:35.960 --> 13:40.960 The app has predictable readable URLs that are motivated user could build themselves when typing in the browser, 13:40.960 --> 13:46.960 which is something that I still do every day, or when trying to make scripts or tools that would link to query their bookmarks. 13:47.960 --> 13:50.960 I use SQL light databases, persisted to disk, to store everything. 13:50.960 --> 13:54.960 There's no extra services you have to set up for in PASAS provider for. 13:54.960 --> 14:02.960 And yes, I promise I'm old enough to see a certain irony I'm referring to in Node.js app as part of the old web, but it's how time goes. 14:02.960 --> 14:06.960 All of this was impart related to my own tendencies and philosophies of software architecture, 14:06.960 --> 14:10.960 but it was mostly to force myself to stay moving forward on the actual functionality of the project. 14:10.960 --> 14:16.960 I'm not a UX expert, and will I know some modern front end techniques that make use of these heavy client-side JavaScript things? 14:16.960 --> 14:20.960 I knew I risk it and bogged down and learning new patterns and adding new dependencies. 14:20.960 --> 14:24.960 Sticking with things I already knew how to do and minimizing the dependencies of the software, 14:24.960 --> 14:31.960 made sure I had the most time to learn about activity pub and keep the project rolling as I was kind of working on it. 14:31.960 --> 14:36.960 The general philosophy of keeping things simple, also maybe they'll build postmarks on glitch, 14:36.960 --> 14:40.960 which helped avoid a common problem when developing server-side software for activity pub. 14:40.960 --> 14:46.960 To make sure that talks to other activity pub servers, you need to host it somewhere that has a publicly addressable URL, 14:46.960 --> 14:48.960 so that you can do two-way communication. 14:48.960 --> 14:52.960 There are ways to do this while developing locally on your computer, if you have like a full-on reverse proxy, 14:52.960 --> 14:58.960 pointing to a static IP that you've provisioned with your ISP or you're using a tool like DINDNS or NGRAC. 14:58.960 --> 15:05.960 But by developing on glitch, I can spin up any number of copies of my app across any number of subdomain host names essentially instantly. 15:05.960 --> 15:10.960 Glitch doesn't offer the ability to build a network of services like a postgres database and a last-exert cluster out of the box, 15:10.960 --> 15:15.960 so sticking to configuration and static files and a database that's persisted the disk made it easy to host, 15:15.960 --> 15:22.960 and which is remix featurement I could fork the project and pursue other ideas while looking at a live working copy of the previous checkpoint of my work, 15:22.960 --> 15:26.960 and have that all happen at the same time. 15:26.960 --> 15:31.960 The last principle was a sense of desire to interoperate with NASID on and it's micro-blogging peers. 15:32.960 --> 15:37.960 There were a number of motivations for this from the start, to ease development and testing, to improve demonstration and onboarding, 15:37.960 --> 15:44.960 and ultimately to rebuild the feature of delicious and pinboard, but to me was never my most used feature, but seemed like it had some interesting potential for postmarks. 15:44.960 --> 15:50.960 The testing and development benefits came pretty much from the very first demo that I gave to my co-workers in 2022. 15:50.960 --> 15:56.960 With the way I had written the first prototype, an instance was capable of registering that other fetavers actors had followed it, 15:56.960 --> 15:59.960 and broadcasting out activity to them. 15:59.960 --> 16:04.960 But I didn't write any UI or protocol level support for following anyone else within postmarks. 16:04.960 --> 16:08.960 I didn't need to, I could test my instance out by following it from my NASID on account, 16:08.960 --> 16:10.960 seeing the post shop my timeline, 16:10.960 --> 16:14.960 replying to those from NASID on to add comments and so forth. 16:14.960 --> 16:21.960 I didn't add the ability to follow other users on postmarks until the day after I announced the project in 2023, 16:21.960 --> 16:25.960 because I hadn't really hit me yet what I wanted to do with that or why I would even want that. 16:26.960 --> 16:29.960 NASID on, though, proved a very useful smoke testing tool. 16:29.960 --> 16:34.960 I was just constantly refreshing on NASID on timeline and just seeing how posts broke in various ways. 16:34.960 --> 16:43.960 After launching also, in talking to members of the development community, I discovered other tools that would be really super beneficial over time. 16:43.960 --> 16:47.960 FettiDB gave me a lot of good information about other people that were actually running postmarks. 16:47.960 --> 16:51.960 I could see that it was actually happening out there and see who was installing new versions. 16:51.960 --> 17:00.960 And in the months that followed the amazing Fetti test project launched and they were really gracious enough to include postmarks is one of the pieces of software that they tested against. 17:00.960 --> 17:07.960 As a benchmark, that resulted, they have a better idea of how many, how well we comply with the activity postback, which. 17:07.960 --> 17:11.960 I had a lot of fears about, but it turned out that we did, we do it pretty okay with it. 17:11.960 --> 17:17.960 We just still places to go with it for sure, but, you know, we're doing all right. 17:18.960 --> 17:25.960 The first use of actually adding the ability within postmarks to follow people turned out to be bringing back an old feature of delicious. 17:25.960 --> 17:33.960 It's called the network page and it was kind of a photo feed that existed on delicious before Facebook had a news feed or even friend feed existed. 17:33.960 --> 17:35.960 Postmarks network page. 17:35.960 --> 17:45.960 Or sorry, the delicious network page would show you basically a feed of all the bookmarks people that you know were bookmarking chronological order sort of like a social network. 17:45.960 --> 17:50.960 Once postmarks with the network page, it'll show you other postmarks users any bookmarks they're adding. 17:50.960 --> 18:04.960 But also let you follow users on sites like Masadon see URLs that they're sharing within their posts and have quick ways to add those as bookmarks that you can kind of start building up a queue if things you want to read or whatever else that you want to do. 18:04.960 --> 18:10.960 In some ways, that's similar to the Twitter API app in Nuzzle which some of you want to familiar with which was an email newsletter the did a similar thing. 18:10.960 --> 18:14.960 And there's actually I found a really great. 18:14.960 --> 18:29.960 I forgot to add in another slide at the last minute, but there's a great app that's in development for the front of Fediver is called sil SLL that social that doesn't similar thing for Masadon that just gives you that feed for free. 18:29.960 --> 18:32.960 Finally, interoperability provides visibility for your project. 18:32.960 --> 18:35.960 It's an extra avenue for sharing the platform for people who get excited about it. 18:35.960 --> 18:40.960 And an extra way to dip your toe in the water is an observer from established platforms like Masadon. 18:40.960 --> 18:45.960 If one person loves postmarks and starts using it, they may be encouraged to post about that on Masadon. 18:45.960 --> 18:55.960 But other than telling people to go look at a website, elsewhere on the web, they can link to what looks just like a Masadon user by specifying their at user name at postmarksinstance.org. 18:55.960 --> 18:57.960 They're full of the actor name and everything. 18:57.960 --> 19:03.960 If someone who sees their post clicks through, they stay within the context of Masadon or whatever micro blog game platform they're using. 19:03.960 --> 19:06.960 They're invited to follow that feed right there in their Masadon client. 19:06.960 --> 19:13.960 Those sort of see those bookmarks kind of flow into their timeline and maybe once they're following a few of those, they'll notice the similarities and wonder how they can get their own. 19:13.960 --> 19:18.960 They reply to a post that shows up as comments in the postmark seizures instance in doing so. 19:18.960 --> 19:23.960 They've hopefully made the postmark seizure instance more valuable for the person who's using it. 19:23.960 --> 19:34.960 And over time, the result is that postmarks becomes a useful tool for those who already know about it and operate it and it makes this off known organically to people who are realized they want it later. 19:34.960 --> 19:38.960 So that's a great reason to include an operability in your app. 19:38.960 --> 19:45.960 Unfortunately, though, interoperability turned out to be the most challenging of the three principles that I kept in mind when developing postmarks. 19:45.960 --> 19:50.960 Everything I said about it's benefits so far is true, but it's also more complicated. 19:50.960 --> 19:55.960 While using Masadon test the output from postmarks is helpful, it also sometimes added complexity. 19:55.960 --> 19:58.960 And actually, we heard about this during the rightfully, it's freely talk earlier today. 19:58.960 --> 20:02.960 There are things I was doing with activity problems that I'm still convinced we're technically compliant with the spec, 20:02.960 --> 20:06.960 but they resulted in posts that were broken or not doing what I wanted to have Masadon. 20:06.960 --> 20:15.960 As being a example, there were details like having bookmarks tag, the show up as hashtags, and you can click on that in Masadon and have it do what you expect to hashtag to do in Masadon. 20:15.960 --> 20:17.960 It just wasn't quite working right for a while. 20:17.960 --> 20:18.960 Thank you. 20:18.960 --> 20:24.960 And it just, it took some time, and ultimately what I found myself doing was not just reading the activity of how to spec, 20:24.960 --> 20:29.960 but having to go look at the source code for Masadon, look at the source code for third party clients, 20:29.960 --> 20:36.960 look at the source code for other platforms like firefish, and just kind of spirals outward and outward as you keep going. 20:36.960 --> 20:41.960 The biggest difficulty I faced though, with it, handling and interoperability, ends up being a little more philosophical. 20:41.960 --> 20:45.960 It relates to what I said earlier about what's great about the web that captured my attention in the first place, 20:45.960 --> 20:48.960 or rather what's missing from that today. 20:48.960 --> 20:53.960 I've been calling it the flattened web, the more I talk about it with my friends. 20:53.960 --> 20:58.960 Masadon and many of Fediverse and broader social webcam were heavily inspired by Twitter, as I'm sure everybody here knows. 20:58.960 --> 21:02.960 In general, they're designed to reproduce as a very specific core experience. 21:02.960 --> 21:08.960 There's a timeline, as we just heard, the default one of Masadon is a reverse chronological, which is an algorithm, I'll agree with that. 21:09.960 --> 21:13.960 Timeline, the post that, or by selection of users, you've chosen to follow. 21:13.960 --> 21:18.960 A post can have some text, an image maybe, or a couple images. 21:18.960 --> 21:23.960 Some text like a user name or a hashtag can have kind of pre-programmed hyperlink behavior. 21:23.960 --> 21:31.960 A single URL on the post can have a visual card, but there's no other programable content or even significant structure display that you can add. 21:31.960 --> 21:35.960 This is a post from panic by the way, which is a software company from Portland where I live. 21:35.960 --> 21:42.960 What this means, though, is that post-marked activity in order to interoperate has to find some way to fit within that box. 21:42.960 --> 21:45.960 A box is essentially a note, as the activity pub sees it. 21:45.960 --> 21:53.960 As a result, when you see a post-marked bookmark on Masadon, your experience of it is as a Masadon post that follows a certain template that makes sense for a bookmark. 21:53.960 --> 22:01.960 If people reply to your bookmark, it just creates a note that is a reply to that note. 22:01.960 --> 22:08.960 On post marks, though, that's a totally different thing. It's a comment that has a very different visual importance to the bookmark itself. 22:08.960 --> 22:11.960 But from Masadon, you're seeing it in a very different social context. 22:11.960 --> 22:21.960 After seeing how this plays out with post marks in the current Fediverse ecosystem, I come to start thinking about the result of all these posts, having to fit in one place is kind of problematic. 22:21.960 --> 22:28.960 As a cynical flip side of the organic growth opportunity that I was so excited to share with you earlier, it also raises a question from me, what's the point of doing any of this? 22:28.960 --> 22:32.960 I'm not bothered with post marks when you could just write a Masadon client that formats a link blog. 22:32.960 --> 22:40.960 You could search your posts with some kind of combination of operators about it from me and put my hashtags in and have an HTBS to have a link in it. 22:40.960 --> 22:44.960 So why build a whole platform just if you get back into this flattened web? 22:44.960 --> 22:49.960 This isn't Masadon's fault on not blaming it. It's only natural that an ecosystem with one dominant player. 22:49.960 --> 22:57.960 Its product decisions will influence platforms that seek to interoperate, but I do think we should be aware of and have better ways to discuss the influence it has and what we do. 22:57.960 --> 23:09.960 In the same way I started to see good discussion in general about other topics that reveal status quo about as being not just neutral, but a result of cultural conditions that have impacts on how we live and what we do. 23:09.960 --> 23:13.960 It may sound harsh to speak of a flattened web, but I don't say this is an outsider. 23:13.960 --> 23:17.960 I feel confident that I've read more posts on a flat timeline than most of the population of the world at this point. 23:17.960 --> 23:21.960 I haven't been very heavily invested in communities in these platforms for almost as long as they've existed. 23:21.960 --> 23:25.960 And up until recently I wouldn't say I regret it. 23:25.960 --> 23:31.960 It's kind of an escapeable in the social circles that I think most of us are in in 2025 that you have to be on this flattened web. 23:31.960 --> 23:37.960 In the case of a micro-block timeline I appreciate that Masadon has kind of respectful of your attention in some ways. 23:37.960 --> 23:41.960 But short of small innovations in client side apps like FanP or Elk. 23:41.960 --> 23:57.960 It does seem like everything gets condensed in the same rectangle and you end up with things like an amazing announcement, a funny joke, news of a tragedy, a friend looking for help or validation or a postmarked bookmark, all kind of jammed together all at once. 23:57.960 --> 24:07.960 When I was younger I think I might have been better at surfing from vibe divide when this happened, but there's something that's made it harder for me to want to subject myself to contextless chronological information, 24:07.960 --> 24:11.960 that's not recognized and compressed to a dozen seconds worth of attention, repeated hundreds of times in a row. 24:11.960 --> 24:17.960 It's not pure rejections because I certainly log onto these platforms, plenty of days still. 24:17.960 --> 24:25.960 You know, sometimes you want to just know what's going on in the world or connect with your friends or you have things that you need to put out in the world to say. 24:25.960 --> 24:33.960 And I have friends that I've known online for 30 years at this point in my life and I have friends that I've known for six months that I hope I'll have 30 years from now. 24:33.960 --> 24:39.960 But right now, maybe because of the moment that we're in, I keep wishing the way I related to them didn't involve this flattened timeline. 24:39.960 --> 24:47.960 So it took the realization that no matter what I do with postmarks to make it interoperate, I had made an important component of it and that set into other people's flattened experience of the web, 24:47.960 --> 24:51.960 which has made it really difficult for me to be motivated about doing more. 24:51.960 --> 24:56.960 I still haven't really figured out what to do with these feelings to be honest. 24:56.960 --> 25:01.960 Postmarks has been fairly neglected as many open source projects are, but this is kind of a different reason. 25:01.960 --> 25:10.960 I'm trying to find ways to structure my 2025 to talk to, to do what I've said before about reaching the end of the state, hit those last few features that I really want to make and close things out. 25:10.960 --> 25:16.960 But it's not only of excitement, it's just because I need closure. 25:16.960 --> 25:23.960 After 20 years of making things the software, I'm a firm believer that very few choices can provide purely positive effects. 25:23.960 --> 25:29.960 Advancements in software are built on later after later of trade-offs, and in this case, something that is given me a lot of benefit in the course of building this project, 25:29.960 --> 25:32.960 also resulted in some questions that I'm forced to reckon with. 25:32.960 --> 25:38.960 I feel struggling for a while to ignore them, to push through and keep doing what I've been doing, I think instead of trying to find an alternate path. 25:38.960 --> 25:45.960 I'd love to talk to more to anyone that resonates with and try to move forward together to turn the social web and assign the field less flattened. 25:45.960 --> 25:47.960 Thank you. 25:48.960 --> 26:01.960 Thank you so much, Casey. I really enjoyed that. I've enjoyed all the talks in this debris. 26:01.960 --> 26:03.960 That was especially great. 26:03.960 --> 26:07.960 Something that I watched you develop and I've been involved with it. 26:07.960 --> 26:13.960 The edges and I just thought you had some really almost poetic thoughts there, so I appreciate them. Thank you. 26:17.960 --> 26:19.960 Thank you.