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.