1 00:00:00,000 --> 00:00:10,200 Welcome to the NGI Zero podcast where we talk to the people who are building the next 2 00:00:10,200 --> 00:00:11,680 generation internet. 3 00:00:11,680 --> 00:00:14,120 Hi, I'm Ronny Lam. 4 00:00:14,120 --> 00:00:16,000 And I'm Tessel Renzenbrink. 5 00:00:16,000 --> 00:00:21,360 We both work for NLnet, a foundation which financially supports people working on free 6 00:00:21,360 --> 00:00:24,160 and open source technologies. 7 00:00:24,160 --> 00:00:26,520 Today we're joined by Joep Meindertsma. 8 00:00:26,520 --> 00:00:32,280 He is the CEO of Ontola IO, a Dutch software development firm that aims to give people 9 00:00:32,280 --> 00:00:34,620 more control over their data. 10 00:00:34,620 --> 00:00:40,800 He has received NGI Zero funding for three separate projects, Solid Search, Atomic Data 11 00:00:40,800 --> 00:00:42,720 and Atomic Tables. 12 00:00:42,720 --> 00:00:44,800 These are the projects we will talk about today. 13 00:00:44,800 --> 00:00:48,160 Welcome Joep, and thanks for joining. 14 00:00:48,160 --> 00:00:51,720 Awesome, looking forward to it. 15 00:00:51,720 --> 00:00:54,360 Did we miss anything in our introduction? 16 00:00:54,360 --> 00:00:57,960 I think that pretty much sums it up. 17 00:00:57,960 --> 00:01:03,480 Maybe for some extra background, I started off with doing online democracy stuff about 18 00:01:03,480 --> 00:01:09,840 10 years ago, and from there on slowly migrated towards doing more with data ownership and 19 00:01:09,840 --> 00:01:13,480 open data, but we'll probably dive into that soon. 20 00:01:13,480 --> 00:01:16,880 Sure, yeah, indeed. 21 00:01:16,880 --> 00:01:20,200 Your projects are all about modeling and connecting data. 22 00:01:20,200 --> 00:01:25,000 What are the key issues with how data is used on the web today? 23 00:01:25,000 --> 00:01:30,000 I think one of the biggest issues at this point is that a lot of data is siloed, and 24 00:01:30,000 --> 00:01:36,040 this is partly because a lot of big tech companies are designing their systems to have data siloed. 25 00:01:36,040 --> 00:01:40,720 What that basically means is that it's very hard to reuse data. 26 00:01:40,720 --> 00:01:43,880 What that means is that users get locked into an ecosystem. 27 00:01:43,880 --> 00:01:46,160 There's a very concrete example of this. 28 00:01:46,160 --> 00:01:48,600 I'm locked into the Google ecosystem. 29 00:01:48,640 --> 00:01:50,200 I have a Gmail account. 30 00:01:50,200 --> 00:01:51,520 I have a Google calendar. 31 00:01:51,520 --> 00:01:52,520 It integrates everywhere. 32 00:01:52,520 --> 00:01:58,440 I have a Google Drive thing, and that kind of limits how easy it is for me to switch 33 00:01:58,440 --> 00:02:05,520 to some sort of competitor, and this really limits the degree of innovation, and it also 34 00:02:05,520 --> 00:02:08,520 makes me very dependent on what Google does. 35 00:02:08,520 --> 00:02:11,360 Google has a large control over my life. 36 00:02:11,360 --> 00:02:15,080 It can serve me ads and manipulate me. 37 00:02:15,080 --> 00:02:21,240 It can have a large impact on how my software world looks like. 38 00:02:21,240 --> 00:02:24,720 I think that there's a lot of reasons why we should want to have more control over our 39 00:02:24,720 --> 00:02:27,920 data, but it's just difficult. 40 00:02:27,920 --> 00:02:31,520 The main reason that it's difficult is not necessarily only because these big tech companies 41 00:02:31,520 --> 00:02:37,280 are trying to lock us in, but also because it's very difficult to make open tools that 42 00:02:37,280 --> 00:02:38,840 work well with each other. 43 00:02:38,840 --> 00:02:42,360 Of course, there's an open source email tool, and of course, there's an open source calendar 44 00:02:42,360 --> 00:02:45,040 tool, and there's an open source this and this and that. 45 00:02:45,080 --> 00:02:50,160 But every time somebody makes some sort of open source tool, they not only have to make 46 00:02:50,160 --> 00:02:54,120 that tool open and really good, but they also have to make sure it works well with people's 47 00:02:54,120 --> 00:02:55,880 data. 48 00:02:55,880 --> 00:03:00,080 That's basically the fundamental limitation, in my view, of how many of these applications 49 00:03:00,080 --> 00:03:04,200 work nowadays is that they don't really work well together. 50 00:03:04,200 --> 00:03:09,320 So the issue that as a software engineer you have is when you're designing an application, 51 00:03:09,320 --> 00:03:13,080 you also have to design its API, its programming interface. 52 00:03:13,120 --> 00:03:18,320 When you do that, it's very tempting to just design the thing that you need at that point 53 00:03:18,320 --> 00:03:20,200 in time. 54 00:03:20,200 --> 00:03:23,760 But that also means that if somebody wants to use that API, they'll have to read your 55 00:03:23,760 --> 00:03:27,280 specification, they have to understand how you've been thinking about this. 56 00:03:27,280 --> 00:03:29,680 And many APIs are vastly different. 57 00:03:29,680 --> 00:03:34,240 So one of the things that I was trying to solve with first with linked data and later 58 00:03:34,240 --> 00:03:41,280 with Atomic Data is to make one API that's highly standardized, very readable, very browsable, 59 00:03:41,280 --> 00:03:46,480 and very highly interoperable so that at some point in the future, people could make 60 00:03:46,480 --> 00:03:49,320 their own applications that work well together. 61 00:03:49,320 --> 00:03:54,960 And one of the cool things you can do if you have a very well-defined API is that you can 62 00:03:54,960 --> 00:03:56,360 have decentralized data. 63 00:03:56,360 --> 00:04:01,040 So you can have data that's stored in a different server somewhere else in the world, and you 64 00:04:01,040 --> 00:04:04,640 can point to it using a link, and you can reuse that. 65 00:04:04,640 --> 00:04:12,160 So for example, let's say I'm going to plan a wedding event, and I have a lot of lists 66 00:04:12,160 --> 00:04:15,560 of attendees of people who I want to invite to my wedding. 67 00:04:15,560 --> 00:04:21,120 And I have this wedding event concept where I want people to be able to RSVP, but I also 68 00:04:21,120 --> 00:04:25,280 want a lot of information from people like, are you a vegetarian? 69 00:04:25,280 --> 00:04:27,000 What's your profile picture? 70 00:04:27,000 --> 00:04:29,320 What's your phone number maybe or email address? 71 00:04:29,320 --> 00:04:31,960 And are you taking a plus one? 72 00:04:31,960 --> 00:04:33,240 All of these questions. 73 00:04:33,360 --> 00:04:38,920 What would be really nice if I could just point to someone's URL, like I would point 74 00:04:38,920 --> 00:04:43,840 to your URL, and that URL would contain all this information like, what's your profile 75 00:04:43,840 --> 00:04:44,840 picture? 76 00:04:44,840 --> 00:04:45,840 What's your name, et cetera. 77 00:04:45,840 --> 00:04:51,120 And that's basically what linked data promise has been about in the past few decades, but 78 00:04:51,120 --> 00:04:57,820 wasn't really achieved because it was just too much of a hassle for developers. 79 00:04:57,820 --> 00:05:02,320 So that's why I started working about four years ago on Atomic Data, which is a very 80 00:05:02,320 --> 00:05:08,480 strict subset of linked data, which enforces JSON compatibility. 81 00:05:08,480 --> 00:05:11,800 Most developers use JSON as a serialization format. 82 00:05:11,800 --> 00:05:15,840 And it also enforces type safety, which means that if you have like a date field for your 83 00:05:15,840 --> 00:05:20,360 birth date, for example, that's standardized in how it's written, like year, year, year, 84 00:05:20,360 --> 00:05:21,840 month, month, date, date. 85 00:05:21,840 --> 00:05:26,720 So you can't like, you know which data type it is, which is very useful for software engineers. 86 00:05:26,720 --> 00:05:29,720 And the third thing it does is enable this decentralized data approach. 87 00:05:29,720 --> 00:05:30,720 You use URLs. 88 00:05:31,120 --> 00:05:36,800 So it's basically a very long monologue for the main problem that I've been working on 89 00:05:36,800 --> 00:05:39,720 and how I'm trying to solve it with Atomic Data specification. 90 00:05:39,720 --> 00:05:41,920 Yeah, thanks. 91 00:05:41,920 --> 00:05:43,580 That really clarifies things. 92 00:05:43,580 --> 00:05:52,120 But just for people who are not really super into this field, can you maybe go back a little 93 00:05:52,120 --> 00:06:00,160 and explain what the semantic web is and what RDF is and what Atomic Data does to improve 94 00:06:00,160 --> 00:06:01,160 on RDF? 95 00:06:01,160 --> 00:06:04,960 So the inventor of the World Wide Web is Tim Berners-Lee. 96 00:06:04,960 --> 00:06:10,120 And he made the first websites, the first website and the first web browser and the 97 00:06:10,120 --> 00:06:14,700 first web server back in, I think, 88 or 89. 98 00:06:14,700 --> 00:06:20,760 And at some point in time, he realized that websites are nice, they're documents. 99 00:06:20,760 --> 00:06:24,760 But what you want is that a URL, like the link to websites, doesn't just represent a 100 00:06:24,760 --> 00:06:26,660 document, but it can represent a person. 101 00:06:26,660 --> 00:06:27,960 It can represent an event. 102 00:06:27,960 --> 00:06:29,780 It can represent anything. 103 00:06:29,780 --> 00:06:33,380 And that's when he started working on the semantic web, right? 104 00:06:33,380 --> 00:06:36,240 Where the web is linked with semantic meanings. 105 00:06:36,240 --> 00:06:40,100 So you have like a person and they have a friend, right? 106 00:06:40,100 --> 00:06:43,980 And this friend is another link somewhere which has its own data. 107 00:06:43,980 --> 00:06:47,220 So that's basically the goal of the semantic web. 108 00:06:47,220 --> 00:06:52,300 And the semantic web is expressed using this language basically called RDF, which is the 109 00:06:52,300 --> 00:06:54,080 Resource Description Framework. 110 00:06:54,080 --> 00:06:55,980 And it was introduced in the 90s. 111 00:06:55,980 --> 00:07:00,020 It was based on XML and it never really took off. 112 00:07:00,020 --> 00:07:03,020 Like nobody's actually using RDF in production. 113 00:07:03,020 --> 00:07:07,940 But this dream of having a semantic web where all machines are connected to each other and 114 00:07:07,940 --> 00:07:12,180 people can reuse data and this data is extremely machine readable. 115 00:07:12,180 --> 00:07:14,000 I really love that dream. 116 00:07:14,000 --> 00:07:20,060 So my software company, Ontola, had this product called Argue, which is this e-democracy platform 117 00:07:20,060 --> 00:07:22,640 we talked earlier about. 118 00:07:22,640 --> 00:07:24,340 And we went all in on RDF, right? 119 00:07:24,340 --> 00:07:29,000 So we basically made our whole stack linked data RDF stuff. 120 00:07:29,000 --> 00:07:33,040 But at some point, we became really frustrated and we saw some of the fundamental limitations 121 00:07:33,040 --> 00:07:34,640 of RDF. 122 00:07:34,640 --> 00:07:37,460 And that's basically when I was thinking, OK, I need to constrain this. 123 00:07:37,460 --> 00:07:39,140 I need to make it a smaller subset. 124 00:07:39,140 --> 00:07:41,540 I need to make it a little bit tighter. 125 00:07:41,540 --> 00:07:44,540 So it's easy to work with as a software engineer. 126 00:07:44,540 --> 00:07:45,980 And that's what Atomac Data is. 127 00:07:45,980 --> 00:07:51,100 It's like this is making this semantic web useful for software engineers and for developers. 128 00:07:51,700 --> 00:07:55,260 That's like when I'm talking about JSON compatibility and type safety. 129 00:07:55,260 --> 00:07:58,180 I know this is already becoming pretty technical. 130 00:07:58,180 --> 00:08:02,220 So I'm sorry if you're listening to this and you think, what was this guy talking about? 131 00:08:02,220 --> 00:08:04,340 How is it taking off? 132 00:08:04,340 --> 00:08:08,900 Are other people adopting this? 133 00:08:08,900 --> 00:08:14,620 That's an interesting question because when I started out with Atomic Data, I first wrote 134 00:08:14,620 --> 00:08:15,620 the specification, right? 135 00:08:15,820 --> 00:08:22,140 I had like this 70 page document just detailing how the specification would work. 136 00:08:22,140 --> 00:08:24,900 And it's just an idea and nothing happens, right? 137 00:08:24,900 --> 00:08:27,420 Like nobody's going to make something if you just have a specification. 138 00:08:27,420 --> 00:08:31,880 So what you need is a specification plus an implementation. 139 00:08:31,880 --> 00:08:36,140 That's why I started working on what I thought would be the best killer application, which 140 00:08:36,140 --> 00:08:37,600 is Atomic Server. 141 00:08:37,600 --> 00:08:42,380 And Atomic Server is basically, I'm not sure if you're familiar with Notion, but like this 142 00:08:42,380 --> 00:08:46,780 all in one workspace app where you have documents, but you also have tables. 143 00:08:46,780 --> 00:08:51,420 So in a way, it's like Microsoft Excel plus Microsoft Word merged into one user friendly 144 00:08:51,420 --> 00:08:52,420 application. 145 00:08:52,420 --> 00:08:59,580 So I wanted to make that, but using Atomic Data as basically the core and make it fully 146 00:08:59,580 --> 00:09:03,060 open source and free for everyone and make it really, really performant. 147 00:09:03,060 --> 00:09:06,820 So I wrote it in Rust, which is a really nice programming language for making these performance 148 00:09:06,820 --> 00:09:08,780 system applications. 149 00:09:08,940 --> 00:09:13,820 Atomic Server became basically this database with a very easy to use front end, which people 150 00:09:13,820 --> 00:09:16,580 can use to manage their data. 151 00:09:16,580 --> 00:09:21,260 And that's basically the main use for Atomic Data right now is that application implementation. 152 00:09:21,260 --> 00:09:25,420 So what I'm trying to do now is basically build a community around that implementation. 153 00:09:25,420 --> 00:09:28,240 So people start using it for their own projects. 154 00:09:28,240 --> 00:09:32,900 And we have a bunch of front end libraries which people can use to implement it in their 155 00:09:32,900 --> 00:09:33,900 apps. 156 00:09:33,900 --> 00:09:38,580 So there's like a React library, there's a Svelte library, there's a Node.js library. 157 00:09:39,380 --> 00:09:42,420 So like a lot of tools for developers to help them get started. 158 00:09:42,420 --> 00:09:45,220 But because it's all JSON, you don't even need to use these libraries. 159 00:09:45,220 --> 00:09:50,500 You can just use your whatever framework you're already using and just fetch the data straight 160 00:09:50,500 --> 00:09:51,500 from Atomic Server. 161 00:09:51,500 --> 00:09:56,320 And really the goal is to make it really easy for developers to start using this in their 162 00:09:56,320 --> 00:09:58,180 production apps. 163 00:09:58,180 --> 00:10:02,260 I think it's really interesting what you're saying that you cannot just write a specification, 164 00:10:02,260 --> 00:10:04,940 but that you also have to do an implementation. 165 00:10:04,940 --> 00:10:08,300 And you did a lot of implementation already. 166 00:10:09,020 --> 00:10:10,820 Yeah, that's true. 167 00:10:10,820 --> 00:10:13,700 I think I was mainly inspired by Tim Berners-Lee. 168 00:10:13,700 --> 00:10:16,860 So he did the same thing with when he started the World Wide Web. 169 00:10:16,860 --> 00:10:20,900 He's like, okay, I wrote this specification for the World Wide Web with, you know, HTTP 170 00:10:20,900 --> 00:10:22,340 and HTML. 171 00:10:22,340 --> 00:10:26,660 But the only reason it took off is because he also wrote an open source server and an 172 00:10:26,660 --> 00:10:28,220 open source browser. 173 00:10:28,220 --> 00:10:30,100 And so he had the specification server and browser. 174 00:10:30,100 --> 00:10:33,020 I did the same thing for Atomic. 175 00:10:33,020 --> 00:10:35,980 Because I think that's like a recipe that could work. 176 00:10:36,620 --> 00:10:38,580 The specification still has to prove itself, right? 177 00:10:38,580 --> 00:10:42,900 Other people also have to like it to some extent. 178 00:10:42,900 --> 00:10:49,020 And that's kind of the difficult part is convincing developers to also use this. 179 00:10:49,020 --> 00:10:52,540 But that's why I'm focusing so much on the implementation, just to have like a very good 180 00:10:52,540 --> 00:10:54,060 open source database. 181 00:10:54,060 --> 00:10:58,700 Because if you have a good open source database, you can just use it without the benefits of 182 00:10:58,700 --> 00:11:00,220 Atomic Data. 183 00:11:00,220 --> 00:11:04,340 But as more and more projects are using that, at some point, the interoperability between 184 00:11:04,340 --> 00:11:07,380 these projects is going to be a huge selling point. 185 00:11:07,380 --> 00:11:09,700 So I'm hoping that we get like this S curve adoption, right? 186 00:11:09,700 --> 00:11:12,300 So first you have a couple of projects using atomic data. 187 00:11:12,300 --> 00:11:15,500 And at some point, a lot of people are using it and they can point to each other and you 188 00:11:15,500 --> 00:11:19,380 get like this accelerating effect, same as the World Wide Web growth, right? 189 00:11:19,380 --> 00:11:22,820 You get this network effect and then it can really pick up steam. 190 00:11:24,340 --> 00:11:29,060 Yeah, I also want to congratulate you on your on your documentation. 191 00:11:29,060 --> 00:11:33,220 I mean, it's it's super. 192 00:11:33,220 --> 00:11:33,980 It's huge. 193 00:11:34,220 --> 00:11:35,180 It's well written. 194 00:11:35,180 --> 00:11:36,140 It's understandable. 195 00:11:36,940 --> 00:11:42,060 I think not enough people pay so much attention to documentation. 196 00:11:44,300 --> 00:11:47,500 Is this something that is specifically important to you? 197 00:11:47,500 --> 00:11:49,180 Is it something you like to do? 198 00:11:49,180 --> 00:11:51,500 How come you do it so well? 199 00:11:51,500 --> 00:11:52,380 Oh, thanks. 200 00:11:53,660 --> 00:11:56,860 To be honest, I'm not entirely very happy about all the documentation. 201 00:11:56,860 --> 00:12:01,180 I mean, some things of it are good and I'm a bit proud of, but there's also like still 202 00:12:01,180 --> 00:12:01,820 a lot of gaps. 203 00:12:02,620 --> 00:12:06,860 Because I think documentation writing isn't very fun compared to application writing. 204 00:12:06,860 --> 00:12:09,420 I think that's like one of the biggest hurdles. 205 00:12:09,420 --> 00:12:16,060 So what I often tend to do is to structure my thoughts using my writing and that becomes 206 00:12:16,060 --> 00:12:17,180 documentation. 207 00:12:17,180 --> 00:12:22,220 So if I'm thinking about, oh, I need to solve like this problem, then I just start writing 208 00:12:22,220 --> 00:12:26,300 the documentation basically and use it as part of a process. 209 00:12:26,300 --> 00:12:30,140 So that for me makes it a little bit easier to to to make something. 210 00:12:30,700 --> 00:12:33,020 So in a way, that's like documentation driven development. 211 00:12:33,020 --> 00:12:33,180 Right. 212 00:12:33,180 --> 00:12:35,100 So you have like a couple of software development paradigms. 213 00:12:35,100 --> 00:12:39,500 Some people do test driven development and this is documentation driven development. 214 00:12:39,500 --> 00:12:44,940 And the advantage of that is that you end up with an API that's very easy to explain 215 00:12:44,940 --> 00:12:48,140 because you basically start with the explanation of how you can use it. 216 00:12:48,140 --> 00:12:51,580 And then at some point you've built it and then other developers who look at it, 217 00:12:51,580 --> 00:12:55,420 hopefully it feels understandable because otherwise you make something that's 218 00:12:56,060 --> 00:12:58,700 logical to program, but maybe harder to use. 219 00:13:00,620 --> 00:13:08,380 And is or may be one of your goals to to to put this into a standard. 220 00:13:08,380 --> 00:13:15,500 I mean, you you wrote a specification, but I it's your hope to get this into a real 221 00:13:15,500 --> 00:13:15,980 standard. 222 00:13:16,860 --> 00:13:22,380 So I think what's what the specification is, is to some extent, it already is a standard. 223 00:13:23,580 --> 00:13:27,180 So when I started off, I also named it a standard. 224 00:13:27,900 --> 00:13:31,500 And then somebody called me and said, hey, listen, this is not a standard. 225 00:13:31,500 --> 00:13:33,660 I'm like, but but it's a specification, right. 226 00:13:33,660 --> 00:13:35,020 And it standardizes something. 227 00:13:35,020 --> 00:13:37,580 He says, yes, but for it to be a standard, it has to be adopted. 228 00:13:38,140 --> 00:13:40,060 So I think, yes, that's exactly my goal. 229 00:13:40,060 --> 00:13:41,100 I want it to be a standard. 230 00:13:41,100 --> 00:13:43,180 I want it for I want people to use it. 231 00:13:43,180 --> 00:13:45,740 So then it kind of becomes a standard. 232 00:13:45,740 --> 00:13:50,620 And that probably also includes making the specification even stricter and tighter 233 00:13:50,620 --> 00:13:53,820 because like at some point there's going to be some sort of ambiguity that's inside 234 00:13:53,820 --> 00:13:54,860 the documentation already. 235 00:13:54,860 --> 00:13:58,140 It's going to be very obvious if people are going to make their own applications on it 236 00:13:58,140 --> 00:14:01,180 or their own server implementations, for example, that are slightly different. 237 00:14:02,300 --> 00:14:06,860 So this is like one of the challenges is if you build an implementation is that it's very 238 00:14:06,860 --> 00:14:13,180 tempting for the implementation to basically get further than the documentation because 239 00:14:13,180 --> 00:14:16,460 it's very tempting to just add this new feature or this cool thing. 240 00:14:16,460 --> 00:14:21,020 And if you don't document it, well, then it's kind of out there and it becomes a de facto 241 00:14:21,660 --> 00:14:23,580 specification, even though it's not written down. 242 00:14:23,580 --> 00:14:25,260 So that's like, I think, a pitfall. 243 00:14:26,300 --> 00:14:29,900 And is that is that the way you work? 244 00:14:29,900 --> 00:14:36,380 You first write your specification and you then develop your application to it? 245 00:14:37,580 --> 00:14:38,700 For pretty much. 246 00:14:38,700 --> 00:14:41,900 Yeah, for most things, that's how I prefer to work. 247 00:14:41,900 --> 00:14:46,220 That's definitely the case at very early days of Atomic Server development, which is like 248 00:14:46,220 --> 00:14:50,220 I was on vacation in Switzerland and I was just on my laptop all day. 249 00:14:50,220 --> 00:14:54,380 My girlfriend hated it because I wasn't really enjoying the vacation as much, but I was in 250 00:14:54,380 --> 00:14:58,220 this flow where I just writing Atomic Server and writing the documentation. 251 00:14:59,420 --> 00:15:05,420 And nowadays, what I often do is I first write an issue in GitHub, very detailed issue, 252 00:15:05,420 --> 00:15:08,700 explore a couple of approaches and a couple of APIs, and then I build it. 253 00:15:09,500 --> 00:15:14,140 Because now I'm at a point where the specification is not changing a lot 254 00:15:14,140 --> 00:15:17,420 and the implementation is changing mostly because like specific endpoints, 255 00:15:17,420 --> 00:15:23,020 specific plugins, specific added features that the documentation is pretty stable. 256 00:15:23,660 --> 00:15:25,580 Just to follow up on Ronny's question. 257 00:15:25,580 --> 00:15:31,340 So you want it to be adopted, but are you planning on going through like a standards 258 00:15:31,340 --> 00:15:34,540 body to get it adopted as a standard? 259 00:15:35,820 --> 00:15:43,260 So the Atomic Data is a W3C working group, which in a sense means that there is already 260 00:15:43,260 --> 00:15:46,220 some sort of process in there for it to become a standard. 261 00:15:47,500 --> 00:15:53,980 I also reached out to a body that is concerning media type standards. 262 00:15:53,980 --> 00:15:56,140 I forgot like the body doing the MIME types. 263 00:15:57,500 --> 00:16:02,060 But at some point, I also became a little bit frustrated with the bureaucracy of some 264 00:16:02,060 --> 00:16:03,260 of these processes. 265 00:16:03,260 --> 00:16:07,500 And I saw that there are some really, really effective standards or specifications that is 266 00:16:07,500 --> 00:16:11,020 they're widely adopted, but they're not documented in such a group. 267 00:16:11,020 --> 00:16:16,460 So then I became more, I was more like, okay, if I just document it well and I make the process 268 00:16:16,460 --> 00:16:21,900 open and transparent, then I don't necessarily have to adhere to some very bureaucratic 269 00:16:21,900 --> 00:16:23,260 external process at this point. 270 00:16:24,460 --> 00:16:29,100 But maybe later it becomes necessary, like as it grows and more people are using it. 271 00:16:29,100 --> 00:16:31,260 I do think that's the point. 272 00:16:31,260 --> 00:16:37,900 I would like to make a NGI Zero plug here because we don't only give grants to great projects, 273 00:16:37,900 --> 00:16:40,540 but we also support with practical support. 274 00:16:40,540 --> 00:16:47,100 And one of our partners in the NGI Zero coalition is Tolerant Networks. 275 00:16:47,100 --> 00:16:52,140 And they have very much a lot of experience with standardization bodies. 276 00:16:52,140 --> 00:16:56,940 And especially this point that you mentioned, like it's super slow and difficult and you 277 00:16:56,940 --> 00:16:58,780 need to speak to the right people. 278 00:16:58,780 --> 00:17:03,420 And they can, if you are interested, or maybe you can send somebody else to do it if you 279 00:17:03,420 --> 00:17:08,380 don't like it, but they can really help you with taking the steps. 280 00:17:08,380 --> 00:17:12,060 I mean, they can't do it for you, but they can definitely give you advice on it. 281 00:17:12,060 --> 00:17:17,820 And this is also for anybody listening who wants this kind of support than NGI Zero. 282 00:17:18,460 --> 00:17:20,140 Oh, this sounds actually really useful. 283 00:17:20,140 --> 00:17:21,980 So I'm 100% going to do this. 284 00:17:23,420 --> 00:17:23,920 Nice. 285 00:17:25,660 --> 00:17:27,020 I also have another question. 286 00:17:27,020 --> 00:17:30,620 And this is more from the perspective of people who are using the web. 287 00:17:30,620 --> 00:17:34,460 So of course you are directed mostly toward developers. 288 00:17:34,460 --> 00:17:42,220 But what would a person who is using the web, what would Atomic Data be like for them? 289 00:17:42,220 --> 00:17:46,540 Would the web experience change or would it be like under the hood and they would hardly 290 00:17:46,540 --> 00:17:47,260 notice or? 291 00:17:48,300 --> 00:17:53,180 I think if it works well, if it's like widely adopted and many services use it, at some 292 00:17:53,180 --> 00:17:56,380 point, many things are going to start to feel like magic. 293 00:17:56,380 --> 00:18:03,500 Like your calendar is just completely integrated with all these other services and it just 294 00:18:03,500 --> 00:18:03,820 works. 295 00:18:05,340 --> 00:18:09,820 You can have like one list of contacts and they are automatically updated in terms of 296 00:18:09,820 --> 00:18:12,220 their profile picture and new data arises. 297 00:18:12,780 --> 00:18:18,540 And you only get access to people who actually want you to have access and you get the 298 00:18:18,540 --> 00:18:21,100 fields that you should get access to. 299 00:18:21,820 --> 00:18:27,340 I think you can have like completely open source social media platforms that have a timeline 300 00:18:27,340 --> 00:18:32,060 that don't order based on what advertisers want. 301 00:18:32,220 --> 00:18:37,740 So Facebook, they have like an AI trained to maximize engagement and make you click 302 00:18:37,740 --> 00:18:39,020 on as much ads as possible. 303 00:18:39,900 --> 00:18:42,700 You can have like your own algorithm for social media feed. 304 00:18:43,420 --> 00:18:47,500 So for example, I would like to have a social media feed that helps me understand the world 305 00:18:47,500 --> 00:18:52,060 as good as possible and keeps me up to date on important events and have some sort of 306 00:18:52,060 --> 00:18:55,020 neutrality not to be too much biased in a certain direction. 307 00:18:55,740 --> 00:18:59,100 And maybe someone else could pick their own algorithm that they would want for their 308 00:18:59,100 --> 00:19:00,220 social media feed. 309 00:19:00,300 --> 00:19:05,340 I think the open source social media direction is very interesting and I hope it can make 310 00:19:05,340 --> 00:19:08,540 polarization in our society a little less worse. 311 00:19:10,060 --> 00:19:13,020 And I can also imagine that it just removes a bunch of hassle. 312 00:19:13,020 --> 00:19:17,500 So like if you have your Google Photos, right, there's a lot of photos stored there and at 313 00:19:17,500 --> 00:19:19,260 some point you just want a different front end. 314 00:19:19,260 --> 00:19:21,340 You have like this other app and it works really nice. 315 00:19:21,340 --> 00:19:23,100 You want to migrate to it. 316 00:19:23,100 --> 00:19:27,580 Well, with Atomic Data, that should be completely trivial because you can just change the front 317 00:19:27,580 --> 00:19:29,420 end of an app without moving your data. 318 00:19:29,420 --> 00:19:31,020 Your data just is yours. 319 00:19:31,020 --> 00:19:32,860 It's on your server somewhere. 320 00:19:32,860 --> 00:19:37,420 And as an additional benefit to that, that means things are really, really fast. 321 00:19:37,420 --> 00:19:41,660 So if you use Atomic Server, which if you're listening to this and you want to try it, 322 00:19:41,660 --> 00:19:43,420 it's just a one-liner Docker command. 323 00:19:43,420 --> 00:19:45,420 It's a 12 megabytes binary executable. 324 00:19:45,420 --> 00:19:46,780 It's very, very easy to install. 325 00:19:47,740 --> 00:19:50,060 You'll notice that it's ridiculously fast. 326 00:19:50,060 --> 00:19:54,060 Like there's nothing on the web, like pretty much not a single app that you've used that 327 00:19:54,060 --> 00:19:55,340 is this fast. 328 00:19:55,340 --> 00:19:57,260 And I like fast applications. 329 00:19:57,260 --> 00:19:58,940 I like that things open instantly. 330 00:19:58,940 --> 00:20:03,740 And with Atomic Server, like when you're searching through all of your data, like every key press 331 00:20:03,740 --> 00:20:08,940 performs a search and within like seven or 20 milliseconds, you get like a full response 332 00:20:08,940 --> 00:20:09,580 back. 333 00:20:09,580 --> 00:20:11,580 So you'll feel very productive. 334 00:20:11,580 --> 00:20:13,020 And I think that's also a big plus. 335 00:20:14,060 --> 00:20:20,140 That's a nice bridge to our next question, which is, I mean, if people are interested, 336 00:20:22,140 --> 00:20:23,580 how can they get involved? 337 00:20:24,140 --> 00:20:28,300 What do they have to do to work with Atomic Data? 338 00:20:28,940 --> 00:20:33,020 I think the easiest path for people to work with it is to just install Atomic Server 339 00:20:33,020 --> 00:20:33,340 somewhere. 340 00:20:33,340 --> 00:20:35,580 And that's like probably the easiest with the Docker image. 341 00:20:35,580 --> 00:20:39,100 So like I said, like a one-liner, no external dependencies or whatever. 342 00:20:40,460 --> 00:20:44,940 And if then people actually want to make an application, there's a couple of libraries. 343 00:20:44,940 --> 00:20:49,660 So we have like a React library, a Svelte library, an Atomiclib library for other JS 344 00:20:49,660 --> 00:20:50,700 applications. 345 00:20:50,700 --> 00:20:52,540 There's a template for React applications. 346 00:20:53,180 --> 00:20:57,500 There's also a template for Svelte websites, which basically is an entire website, which 347 00:20:57,500 --> 00:20:59,500 is already linked to Atomic Server. 348 00:20:59,500 --> 00:21:01,500 So there's a couple of ways people can get started. 349 00:21:01,500 --> 00:21:05,180 But I think the biggest one is to join the Discord server, because we have like a Discord 350 00:21:05,180 --> 00:21:05,680 server. 351 00:21:07,420 --> 00:21:09,820 You can just ask your question there. 352 00:21:09,820 --> 00:21:10,620 I'd love to help you. 353 00:21:10,620 --> 00:21:12,700 There's other people who help as well. 354 00:21:12,700 --> 00:21:16,940 And it's, I think, a very good place to just share your idea and get some feedback and 355 00:21:16,940 --> 00:21:17,820 start working on this. 356 00:21:18,620 --> 00:21:20,540 What are the next steps for the project? 357 00:21:21,340 --> 00:21:27,500 So at this point, the project lacks some important features for me that I think limited to 358 00:21:27,500 --> 00:21:30,140 becoming a very useful headless CMS. 359 00:21:30,140 --> 00:21:34,060 So a headless CMS is basically the number one proposition I'm trying to achieve with 360 00:21:34,060 --> 00:21:36,940 the Atomic Server application, which is basically... 361 00:21:38,140 --> 00:21:40,140 Can you explain what a headless CMS is? 362 00:21:40,140 --> 00:21:40,700 Yes. 363 00:21:40,700 --> 00:21:46,220 So a headless CMS is basically a thing where you store content for the web. 364 00:21:46,940 --> 00:21:48,620 It's a content management system. 365 00:21:48,620 --> 00:21:52,700 So WordPress, for example, I think many people are familiar with WordPress, which you use 366 00:21:52,700 --> 00:21:53,900 for building websites. 367 00:21:53,900 --> 00:21:58,140 That is a CMS, but it has a head as well, which is the front end. 368 00:21:58,140 --> 00:22:01,420 And the headless CMS is only the backend stuff, but without the front end. 369 00:22:01,420 --> 00:22:04,700 So you can design the web page all the way you want, any way you want. 370 00:22:05,500 --> 00:22:08,700 And the headless CMS basically deals with all the data. 371 00:22:08,700 --> 00:22:11,740 It's a place where you can sign in and edit your web pages. 372 00:22:11,740 --> 00:22:12,780 You can search your things. 373 00:22:13,740 --> 00:22:15,980 And I really want to make that proposition really well. 374 00:22:15,980 --> 00:22:19,980 So we have this proposition mostly aimed at software engineers who want to make websites. 375 00:22:19,980 --> 00:22:23,900 So we have a couple of features that are still missing, which are currently being prioritized. 376 00:22:23,900 --> 00:22:29,820 One of them is an improved document editor, which should feel similar to Obsidian. 377 00:22:29,820 --> 00:22:33,500 Not sure if you're familiar with that, but it's like this markdown, what you see is what you mean. 378 00:22:34,140 --> 00:22:37,500 kind of text editor, which I feel like is very productive. 379 00:22:38,620 --> 00:22:44,060 And we're building things like a form interface where you can create a form web page, 380 00:22:44,700 --> 00:22:48,540 where you can just make submissions without creating a user or whatever, just for guest entries. 381 00:22:48,540 --> 00:22:55,500 For example, for surveys or for a contact form for your website or a reservation for your restaurant. 382 00:22:55,500 --> 00:22:57,740 These types of things is what forms are about. 383 00:22:57,740 --> 00:23:02,300 So better document support, better form support are two top priorities. 384 00:23:02,300 --> 00:23:06,700 And the newest things right now is basically the table editor and the data model editor, 385 00:23:06,700 --> 00:23:10,700 the ontology editor, which was done using the NGI Zero grant. 386 00:23:10,700 --> 00:23:11,900 So thank you a lot for that. 387 00:23:12,780 --> 00:23:16,220 And it seems a lot of stuff is happening. 388 00:23:16,220 --> 00:23:21,420 I looked at your roadmap and it's like every month there's a new thing being built. 389 00:23:21,420 --> 00:23:24,540 Can you tell me something about the team that's behind this? 390 00:23:25,420 --> 00:23:28,060 Who are the people working on this? 391 00:23:28,060 --> 00:23:31,340 At this point, the team working on Atomic Server is pretty small, actually. 392 00:23:31,340 --> 00:23:33,420 It's me and Polle Pas. 393 00:23:33,420 --> 00:23:35,420 So Paul Opass also works at Ontola. 394 00:23:35,980 --> 00:23:38,700 He's mostly working on the front end. 395 00:23:38,700 --> 00:23:42,540 So if you see something in the front end that's good and well designed, 396 00:23:42,540 --> 00:23:45,260 chances are pretty high that he did that. 397 00:23:46,780 --> 00:23:49,020 And I'm mostly doing the backend stuff. 398 00:23:49,820 --> 00:23:52,540 But we're both doing a bit backend and a bit frontend as well. 399 00:23:53,340 --> 00:23:56,860 And there's also now a couple of people who have been contributing to the repository, 400 00:23:56,860 --> 00:23:59,420 which to me, that's like the most magical thing. 401 00:23:59,420 --> 00:24:03,980 If you have an open source project and there's some random person you've never heard of 402 00:24:03,980 --> 00:24:08,460 and they're improving your code base and asking how the testing suite works or something, 403 00:24:09,340 --> 00:24:12,060 when that happens, I just feel all warm and fuzzy inside. 404 00:24:12,060 --> 00:24:12,940 It's really magical. 405 00:24:14,220 --> 00:24:15,660 That's when the adoption starts. 406 00:24:16,780 --> 00:24:18,300 Yeah, yeah, absolutely. 407 00:24:19,740 --> 00:24:23,020 Well, the next question was, what do you like most about working on your project? 408 00:24:23,020 --> 00:24:24,540 But maybe that was the answer. 409 00:24:25,500 --> 00:24:30,060 Yes, I think that a feeling of community when people start using something, 410 00:24:30,060 --> 00:24:32,540 that's one of the most magical and good feelings. 411 00:24:33,340 --> 00:24:36,860 I also really like it when things come together and they are simple. 412 00:24:37,580 --> 00:24:43,820 So I really have a strong distaste for complexity in software projects 413 00:24:43,820 --> 00:24:45,660 or having too many components. 414 00:24:45,660 --> 00:24:49,820 And if you make something that feels very lightweight and easy to understand 415 00:24:49,820 --> 00:24:52,540 and easy to set up and it has a little amount of dependencies, 416 00:24:53,260 --> 00:24:55,180 that also feels very, very good. 417 00:24:55,180 --> 00:24:58,460 But I'm not sure if other people will feel the same about that, 418 00:24:58,460 --> 00:25:01,660 but I feel that's a very strong guiding force in how we write software. 419 00:25:02,300 --> 00:25:07,420 To zoom out again a little to the semantic web more generally, 420 00:25:08,860 --> 00:25:10,300 what do you think is needed? 421 00:25:11,660 --> 00:25:16,060 Because it sounds like there are a lot of positive sides to it. 422 00:25:16,540 --> 00:25:21,980 So what would be needed in the rest of the world to get the semantic web going? 423 00:25:23,340 --> 00:25:29,180 I think that's a good question because if I look at just the semantic web 424 00:25:29,340 --> 00:25:33,660 and the RDF specification, it has a couple of these big limitations, 425 00:25:33,660 --> 00:25:37,420 which I feel will make it impossible to be really big. 426 00:25:37,420 --> 00:25:39,820 So we have RDF and the SOLID project. 427 00:25:40,860 --> 00:25:43,660 I've also been a contributor to SOLID and worked quite closely 428 00:25:43,660 --> 00:25:46,140 even with Tim Berners-Lee a couple of years ago. 429 00:25:46,140 --> 00:25:49,580 But at some point I just felt like this isn't going to be the thing 430 00:25:49,580 --> 00:25:50,460 that I want it to be. 431 00:25:51,020 --> 00:25:52,460 It's too technically complex. 432 00:25:52,460 --> 00:25:54,780 It's too difficult for software engineers to make something. 433 00:25:54,780 --> 00:25:58,220 So I feel like what the semantic web needs is type safety, 434 00:25:58,780 --> 00:26:02,140 JSON support and a clear consistent protocol. 435 00:26:02,140 --> 00:26:07,260 And these are the three things I think that Atomic Data has solved and has now added. 436 00:26:08,700 --> 00:26:13,580 I do think that there's still some things that Atomic Data is probably missing, 437 00:26:13,580 --> 00:26:16,780 like good OAuth support. 438 00:26:17,420 --> 00:26:21,180 So I think that's a big one I also want to work on in the near future. 439 00:26:22,300 --> 00:26:24,780 And what we're also missing is just implementations, 440 00:26:24,780 --> 00:26:28,460 just people toying with it and creating their own apps. 441 00:26:28,460 --> 00:26:32,300 Because the only way it really takes off is if we are seeing the start of this S curve 442 00:26:32,300 --> 00:26:33,660 and you get these network effects. 443 00:26:35,100 --> 00:26:40,460 And I think that there's a couple of domains where that makes more sense than in other domains, 444 00:26:40,460 --> 00:26:47,340 mostly personal data, personal document management, event management, event registration, RSVPs. 445 00:26:47,340 --> 00:26:52,620 I think these specifically would benefit a little bit extra from having open... 446 00:26:53,340 --> 00:26:56,620 Yeah, having an implementation for atomic server. 447 00:26:57,820 --> 00:27:03,820 And the people who are now listening, how can they contribute to making the semantic web 448 00:27:04,700 --> 00:27:05,740 a thing that's going to be? 449 00:27:07,420 --> 00:27:08,460 Oh yeah. 450 00:27:09,500 --> 00:27:17,020 I think one of the biggest things you can do is just make simple apps. 451 00:27:17,020 --> 00:27:19,420 Just make simple, useful apps for yourself. 452 00:27:19,420 --> 00:27:21,900 Just make some sort of short demonstration. 453 00:27:21,900 --> 00:27:25,020 Just make it like a weekend project, toy around with it a bit. 454 00:27:25,820 --> 00:27:30,220 And demonstrate to people that this is something that you can play with 455 00:27:30,220 --> 00:27:32,620 and actually use it for something that you want. 456 00:27:32,620 --> 00:27:36,620 So maybe you want to import your playlist from Spotify 457 00:27:36,620 --> 00:27:39,020 and have a playlist manager for your music. 458 00:27:39,900 --> 00:27:41,820 That's not a very complex application, 459 00:27:41,820 --> 00:27:44,860 but it's a very fun process to make something like that. 460 00:27:45,580 --> 00:27:49,980 Or make a tool for your resume. 461 00:27:50,460 --> 00:27:53,980 Make a resume editor and use that in Atomic Data 462 00:27:53,980 --> 00:27:56,220 and share the data models that you've created. 463 00:27:56,220 --> 00:27:59,420 So one of the big things for Atomic Data is that the data models that you create 464 00:28:00,300 --> 00:28:02,460 are also URLs, which you can reuse. 465 00:28:02,460 --> 00:28:04,460 So other people can reuse your data models. 466 00:28:04,460 --> 00:28:06,780 And as that happens, you get like this standardization effect. 467 00:28:07,740 --> 00:28:10,940 But that does require that people start making some of these data models 468 00:28:10,940 --> 00:28:12,780 and spreading them and using them in applications. 469 00:28:13,340 --> 00:28:16,220 That's like the magic of the network effect that still has to happen. 470 00:28:16,700 --> 00:28:21,660 How did the NGI Zero grant help you reach your goals for your project? 471 00:28:23,580 --> 00:28:27,820 It has a huge effect because I have a very small software company. 472 00:28:28,700 --> 00:28:32,700 And we basically get to choose how we spend our time, 473 00:28:32,700 --> 00:28:34,540 depending on how the money flows. 474 00:28:37,180 --> 00:28:41,500 So we would love to work on an open source tool, 475 00:28:41,500 --> 00:28:49,260 like completely MIT licensed, without having some sort of paid service attached to it, 476 00:28:49,260 --> 00:28:51,180 to just make that available for people. 477 00:28:51,180 --> 00:28:54,940 And that's basically only possible through grants and subsidies 478 00:28:55,500 --> 00:28:57,180 to bootstrap that process. 479 00:28:57,180 --> 00:28:59,740 Because it takes a while, even for an open source tool, 480 00:28:59,740 --> 00:29:02,300 to get it to a point where you get like user adoption. 481 00:29:04,220 --> 00:29:07,980 And you can use the grant to bootstrap adoption. 482 00:29:07,980 --> 00:29:10,620 And from there on, at some point, get an investor 483 00:29:10,620 --> 00:29:13,340 to build towards a revenue model that's sustainable. 484 00:29:13,900 --> 00:29:17,900 So what NGI Zero for me did was enable this first path, basically, 485 00:29:17,900 --> 00:29:21,820 this first place in the process where you can do your fundamental research 486 00:29:21,820 --> 00:29:25,900 and you can build the open source tool and you can get your first amount of users. 487 00:29:25,900 --> 00:29:30,060 And from there on, you can try to basically scale it up and turn it into a service. 488 00:29:30,060 --> 00:29:34,940 But what I really wanted to do is to first focus on having a good specification, 489 00:29:34,940 --> 00:29:36,700 having a good open source implementation. 490 00:29:36,700 --> 00:29:39,900 And that's basically impossible if the first thing that you need to do 491 00:29:39,900 --> 00:29:43,020 is to find customers and get a consistent revenue flow. 492 00:29:43,020 --> 00:29:45,340 Because then you're going to focus on a lot of different things. 493 00:29:45,340 --> 00:29:48,780 And I think that the open source character is going to be left behind if you do that. 494 00:29:49,420 --> 00:29:52,780 So for me, it's essential in developing something with this kind of business model. 495 00:29:53,660 --> 00:29:54,380 Yeah, agreed. 496 00:29:55,740 --> 00:30:00,380 What advice would you give to people considering to apply for funding? 497 00:30:03,100 --> 00:30:05,020 Yeah, focus on community. 498 00:30:05,020 --> 00:30:06,620 I think that is such a big thing. 499 00:30:07,420 --> 00:30:13,500 Just set up a Discord server for your project and invite people to that, link to it everywhere. 500 00:30:15,340 --> 00:30:18,140 And every time somebody joins, just reach out to them 501 00:30:18,140 --> 00:30:22,060 and talk about what makes them enthusiastic about technology. 502 00:30:22,060 --> 00:30:24,780 Because these individual connections that I had with people 503 00:30:24,780 --> 00:30:27,260 have been so incredibly inspiring and rewarding. 504 00:30:27,260 --> 00:30:30,140 Because the first people who are going to join such a community 505 00:30:30,140 --> 00:30:34,460 are probably one of the most innovative, interesting people that you'll ever meet. 506 00:30:35,500 --> 00:30:39,580 So I feel like just set up an infrastructure for your community to grow. 507 00:30:39,580 --> 00:30:40,860 Do everything in public. 508 00:30:41,740 --> 00:30:44,300 Just write your thoughts in GitHub issues. 509 00:30:44,300 --> 00:30:46,940 Because there's a small chance that other people are going to read it. 510 00:30:46,940 --> 00:30:50,300 And if they do, these are the most important people for your project to grow. 511 00:30:51,500 --> 00:30:52,940 So yeah, community, community, community. 512 00:30:55,020 --> 00:30:55,520 True. 513 00:30:56,860 --> 00:31:00,700 I think we're getting to the end of our questions at least. 514 00:31:00,700 --> 00:31:03,020 Is there anything you would still like to say? 515 00:31:03,980 --> 00:31:07,100 Yeah, I want to say thank you so much for making this all possible. 516 00:31:07,100 --> 00:31:13,100 I think that it's pretty rare for software engineers to be able to do something like this, 517 00:31:13,100 --> 00:31:13,340 right? 518 00:31:13,340 --> 00:31:20,220 To basically receive income for working on completely open source tools just for a more open web. 519 00:31:20,220 --> 00:31:23,340 And I think without the role that you play in this ecosystem, 520 00:31:23,900 --> 00:31:27,660 it would be very, very difficult to make meaningful changes. 521 00:31:27,660 --> 00:31:29,900 So yeah, thank you so much for that you're working on this. 522 00:31:29,900 --> 00:31:30,780 I really appreciate it. 523 00:31:31,260 --> 00:31:34,060 Well, and we'd like to return that because we'd like to 524 00:31:34,060 --> 00:31:36,940 thank you for working on improving the internet. 525 00:31:36,940 --> 00:31:37,580 Oh, thank you. 526 00:31:39,580 --> 00:31:43,020 I think that's it for this podcast. 527 00:31:43,020 --> 00:31:44,780 So we'll leave it here. 528 00:31:44,780 --> 00:31:47,740 And Joep, thank you very much for joining us today 529 00:31:47,740 --> 00:31:51,420 and sharing all the interesting things about your project. 530 00:31:51,420 --> 00:31:52,780 Well, thank you so much for having me. 531 00:31:52,780 --> 00:31:53,740 It's been a blast.