WEBVTT 00:00.000 --> 00:13.000 Next talk is Nikolai himself, so I'm taking off the MC and Lauren talking about next 00:13.000 --> 00:16.000 graph and to encourage us to hear the tape. 00:16.000 --> 00:18.000 Thank you. 00:18.000 --> 00:28.000 So, another round of applause for Linux because we didn't have any program with the display. 00:29.000 --> 00:30.000 Hello, everyone. 00:30.000 --> 00:32.000 I'm Nikolai with Lauren. 00:32.000 --> 00:39.000 We are working on the next graph since three years with the support of NNET and the NGI Fund 00:39.000 --> 00:41.000 of the European Commission. 00:41.000 --> 00:42.000 Let's talk a little bit. 00:42.000 --> 00:44.000 Give you a story about data. 00:44.000 --> 00:45.000 We'll make it very short. 00:45.000 --> 00:47.000 We have a bit late. 00:47.000 --> 00:49.000 Where is my data today? 00:49.000 --> 00:50.000 There. 00:50.000 --> 00:52.000 For most of us, right? 00:52.000 --> 00:54.000 It means me or other accounts. 00:54.000 --> 00:56.000 No access to road data. 00:56.000 --> 00:59.000 It's there, but we can't have access to it. 00:59.000 --> 01:01.000 And plain text in their cloud. 01:01.000 --> 01:06.000 That's not something you want because cyber attacks, leaks, surveillance. 01:06.000 --> 01:08.000 Open social alternatives. 01:08.000 --> 01:09.000 First them. 01:09.000 --> 01:10.000 Great. 01:10.000 --> 01:13.000 But, marry other accounts. 01:13.000 --> 01:18.000 In compatible APIs and data formats, nothing works well together. 01:18.000 --> 01:20.000 And plain text in their servers. 01:20.000 --> 01:21.000 This is a means. 01:21.000 --> 01:23.000 There are friends, but still. 01:23.000 --> 01:25.000 I want my data. 01:25.000 --> 01:26.000 Sorry. 01:26.000 --> 01:27.000 Sound. 01:27.000 --> 01:29.000 I want all my data. 01:29.000 --> 01:32.000 I want all my data in one place. 01:32.000 --> 01:34.000 So I can have control over it. 01:34.000 --> 01:38.000 Ownership, availability, security and privacy. 01:38.000 --> 01:42.000 I can share and collaborate with who I want if I want it. 01:42.000 --> 01:44.000 So I want end-to-end encryption. 01:44.000 --> 01:49.000 And the server is just going to do store and forward of encrypted blocks of data. 01:49.000 --> 01:51.000 It's not going to do much more. 01:51.000 --> 01:53.000 And we call it the broker in the next graph. 01:53.000 --> 01:57.000 And then once I do that, I have local first and I need the strategies. 01:57.000 --> 01:59.000 Because the server doesn't do anything anymore. 01:59.000 --> 02:04.000 It's not helping me with coordination, with total order, with transactions, anything. 02:04.000 --> 02:06.000 How many servers? 02:06.000 --> 02:07.000 You got it. 02:07.000 --> 02:08.000 A federation. 02:08.000 --> 02:09.000 Right? 02:09.000 --> 02:12.000 Because we can't fit all the data of the world in one server. 02:12.000 --> 02:15.000 And it's synchronizes with a pub sub. 02:15.000 --> 02:21.000 There are many ways to do reliable broadcast, but we choose pub sub. 02:21.000 --> 02:25.000 Or go see by example. 02:25.000 --> 02:30.000 It replicates on all your devices, first of all. 02:30.000 --> 02:35.000 Second, it's also stored in the brokers, the servers, but end-to-end encrypted. 02:35.000 --> 02:37.000 So we have full decentralization. 02:37.000 --> 02:41.000 You can have several brokers that are doing backups and emails of your data. 02:41.000 --> 02:43.000 Fail saves. 02:43.000 --> 02:48.000 So I want to completely decentralize the central place for all my data. 02:48.000 --> 02:50.000 This is what I want. 02:50.000 --> 02:52.000 And that's the graph. 02:52.000 --> 02:54.000 Now I'm going to go on the stack. 02:54.000 --> 02:58.000 We started very low on the network and now we go to the protocol. 02:58.000 --> 03:02.000 So the protocol is specialized for end-to-end encryption of CRDTs. 03:02.000 --> 03:06.000 There are a few people doing that, but they are all in the room today. 03:06.000 --> 03:14.000 And so then it can sync any kind of CRDT. 03:14.000 --> 03:18.000 So in the future, we will see more CRDTs. 03:18.000 --> 03:23.000 We have found out some generic CRDTs that you know. 03:23.000 --> 03:31.000 And then we will see specialize CRDTs, because we need to be close to the data model of the application, 03:31.000 --> 03:37.000 like basically 2D, 3D, how do you manage conflicts in that? 03:37.000 --> 03:39.000 So it could do it. 03:40.000 --> 03:44.000 It's the protocol manager's access control with cryptographic capabilities. 03:44.000 --> 03:47.000 So Brooklyn, before I explain what they do, I will not do it. 03:47.000 --> 03:55.000 Because it's too complex and I also give more details of that later on in another talk this afternoon. 03:55.000 --> 03:58.000 We used this, this is a scheme. 03:58.000 --> 04:02.000 It's like you have a HTTP, you have FTP, and you have did. 04:02.000 --> 04:05.000 And then you can put whatever you want in the scheme. 04:05.000 --> 04:08.000 So there are decentralized identifiers. 04:08.000 --> 04:10.000 So it did energy for an aircraft. 04:10.000 --> 04:13.000 And then we put the public keys of the document. 04:13.000 --> 04:18.000 They are stable and durable and portable IDs for your documents. 04:18.000 --> 04:21.000 And for your identity. 04:21.000 --> 04:29.000 We also do with the protocol upload and download the binary files with streaming, content addressing, and chunking, like a bit of rent. 04:29.000 --> 04:31.000 But encrypted. 04:32.000 --> 04:37.000 So we support the services for now of YGS that you heard about just before and auto merge. 04:37.000 --> 04:39.000 That's what just before me and RDS. 04:39.000 --> 04:41.000 Now RDS, you don't know what it is, right? 04:41.000 --> 04:43.000 Who knows about RDS? 04:43.000 --> 04:44.000 Oh. 04:44.000 --> 04:48.000 So I should do a dev room about RDS next year. 04:48.000 --> 04:55.000 So it's a graph, it's a graph data format for those who don't know. 04:55.000 --> 04:58.000 YGS and auto merge are more like JSON like. 04:58.000 --> 05:01.000 They also do rich text, a plain text. 05:01.000 --> 05:06.000 In next graph, I call those discrete compared to the graph, which is like continuous. 05:06.000 --> 05:08.000 You see the image. 05:08.000 --> 05:14.000 And then we have Sparkle, Sparkle, which is the query language for like SQL. 05:14.000 --> 05:16.000 It's similar. 05:16.000 --> 05:18.000 And then it's a standout. 05:18.000 --> 05:21.000 It's a data format that is very simple. 05:21.000 --> 05:24.000 You have, you don't make tables with many rows. 05:24.000 --> 05:25.000 You have only three columns. 05:25.000 --> 05:27.000 It's a subject predicate object. 05:28.000 --> 05:32.000 It brings interoperability by default. 05:32.000 --> 05:35.000 Your apps can use the same format. 05:35.000 --> 05:38.000 It's not like JSON or you can have different, 05:38.000 --> 05:40.000 you need to define the schema here. 05:40.000 --> 05:44.000 It's a flexible format and malleable software. 05:44.000 --> 05:47.000 Means you can replace the software that you keep the data. 05:47.000 --> 05:50.000 And you can compose the software and change it. 05:50.000 --> 05:56.000 And you have a, it's not, it's not bound together, the two. 05:57.000 --> 05:59.000 You can link other documents inside one document. 05:59.000 --> 06:02.000 And it's a database with the query language. 06:02.000 --> 06:04.000 So that's a base across all your documents. 06:04.000 --> 06:07.000 And the documents that have been shared with you. 06:07.000 --> 06:09.000 It has automatic joins. 06:09.000 --> 06:11.000 This is like different from SQL. 06:11.000 --> 06:13.000 When you need to think ahead about your foreign keys. 06:13.000 --> 06:15.000 Here, all the data is joinable. 06:15.000 --> 06:19.000 From the go, when this I said it, it's the global IDs. 06:19.000 --> 06:22.000 This is very important. 06:23.000 --> 06:25.000 Okay, this was key. 06:25.000 --> 06:27.000 So pick up sync protocol. 06:27.000 --> 06:29.000 See the diagnostic graph database. 06:29.000 --> 06:30.000 An encryption address. 06:30.000 --> 06:32.000 Next card brings all the data. 06:32.000 --> 06:35.000 It's not only end to an encrypted, but encryption address. 06:35.000 --> 06:37.000 The database on your disk. 06:37.000 --> 06:39.000 There's the key. 06:39.000 --> 06:42.000 Whenever up in the stack, we have a web SDK. 06:42.000 --> 06:44.000 You can do apps with WSM RAM. 06:44.000 --> 06:48.000 Native apps with storage still web technology. 06:48.000 --> 06:49.000 But it's a web view. 06:49.000 --> 06:54.000 And then you can do also pure rest, Python and TypeScript. 06:54.000 --> 06:57.000 So for the native apps, it's all the platforms. 06:57.000 --> 06:59.000 And for the languages, it's those. 06:59.000 --> 07:04.000 For now, but we are also going to add more as we can as we do. 07:04.000 --> 07:06.000 So the SDK, the APIs are two. 07:06.000 --> 07:07.000 Two levels. 07:07.000 --> 07:08.000 The raw APIs. 07:08.000 --> 07:11.000 You just subscribe to the documents. 07:11.000 --> 07:13.000 It's document-based. 07:13.000 --> 07:15.000 Update the documents. 07:15.000 --> 07:18.000 The CRDT binary blocks of WGS automatically. 07:18.000 --> 07:19.000 The RDS triples. 07:19.000 --> 07:23.000 But you also have a higher API that lowering will present now. 07:23.000 --> 07:26.000 We're compatible with these three frameworks. 07:26.000 --> 07:29.000 And then on top of that, you have a framework. 07:29.000 --> 07:38.000 The framework is, so on top of the SDK, if you want to use common features that all apps need. 07:38.000 --> 07:41.000 So we give you a history of your modification. 07:41.000 --> 07:42.000 That's immutable. 07:42.000 --> 07:47.000 You can audit every commit, every change of the data is signed. 07:47.000 --> 07:50.000 So we have authenticity, it's immutable. 07:50.000 --> 07:52.000 And we can even time travel. 07:52.000 --> 07:55.000 We can come back in the past and see what was there. 07:55.000 --> 07:57.000 Permissions, of course. 07:57.000 --> 08:00.000 Search, local search. 08:00.000 --> 08:02.000 Sparkle, local, sparkle, always. 08:02.000 --> 08:04.000 Everything's local, local first. 08:04.000 --> 08:06.000 And reactive queries, not. 08:06.000 --> 08:08.000 We don't have a chat, but we are working on it. 08:08.000 --> 08:10.000 Which is what everybody does now. 08:10.000 --> 08:14.000 You make a query and the query stays alive. 08:14.000 --> 08:19.000 And if you're underlying data changes, your results are going to change also. 08:19.000 --> 08:20.000 After months. 08:20.000 --> 08:21.000 That's great. 08:21.000 --> 08:23.000 For the reactive programming, it's great. 08:23.000 --> 08:26.000 Comments, chat, notifications, basic. 08:26.000 --> 08:28.000 The store, the drive for all your documents. 08:28.000 --> 08:30.000 The wallet where you have all your keys. 08:30.000 --> 08:32.000 And you need to open this wallet locally. 08:32.000 --> 08:34.000 Not talking to the server. 08:34.000 --> 08:37.000 And the app store, because we want to make apps with next half. 08:37.000 --> 08:40.000 And then we need to install those apps and other access to them. 08:40.000 --> 08:43.000 This is the user who decides which apps. 08:43.000 --> 08:45.000 So it's not ready. 08:45.000 --> 08:47.000 Next up, ecosystem. 08:47.000 --> 08:49.000 It's who's using it today. 08:49.000 --> 08:51.000 We have a few docially. 08:51.000 --> 08:53.000 I mean, he's here in the room. 08:53.000 --> 08:56.000 We're working with hospitals, because the next half is resilient. 08:56.000 --> 09:00.000 So if half of the hospital burns, the other half can see the work. 09:00.000 --> 09:04.000 Miru, Miru is a video editor. 09:04.000 --> 09:05.000 He's also in the room. 09:05.000 --> 09:06.000 He's going to present a little bit later. 09:06.000 --> 09:10.000 We have a personal network manager, which is bringing all your contacts from 09:10.000 --> 09:11.000 LinkedIn, Gmail, blah, blah. 09:11.000 --> 09:14.000 And then some services like activity pods that 09:14.000 --> 09:17.000 is doing compatibility with activity pub. 09:17.000 --> 09:19.000 And soon we have mail. 09:19.000 --> 09:22.000 Now, one big thing, we just got a grant. 09:22.000 --> 09:24.000 And we're going to do all these apps. 09:24.000 --> 09:25.000 We have three years to do it. 09:25.000 --> 09:28.000 This is going to be the workspace that everybody wants. 09:28.000 --> 09:31.000 It's an integrated local first based on next graph. 09:31.000 --> 09:33.000 And there will be sub-granting. 09:33.000 --> 09:35.000 So if you want to apply for grants at NNNAT, 09:35.000 --> 09:38.000 you can be helping us during this framework. 09:39.000 --> 09:41.000 We have a stack. 09:41.000 --> 09:44.000 We have a stack that starts with the network, 09:44.000 --> 09:46.000 which is decentralized. 09:46.000 --> 09:47.000 You can install itself host. 09:47.000 --> 09:50.000 It can go on all kinds of things up to the cloud. 09:50.000 --> 09:51.000 It's AWS. 09:51.000 --> 09:53.000 It's not recommended, but if you need to, 09:53.000 --> 09:55.000 you can it's encrypted. 09:55.000 --> 09:56.000 So it's okay. 09:56.000 --> 09:58.000 The best is to have it at home. 09:58.000 --> 10:00.000 You have a small device at home. 10:00.000 --> 10:01.000 That's the dream, right? 10:01.000 --> 10:03.000 We're super decentralized. 10:03.000 --> 10:05.000 So because we don't use DNS, 10:05.000 --> 10:07.000 it's only on IP. 10:07.000 --> 10:09.000 So don't worry about that. 10:09.000 --> 10:13.000 Second level is a set protocol and engine. 10:13.000 --> 10:17.000 So the SDK then the framework and then this ecosystem of apps. 10:17.000 --> 10:21.000 Now, this is the properties that you get when you're using us. 10:21.000 --> 10:23.000 I will let you read that later in the PDF. 10:23.000 --> 10:25.000 We are in alpha. 10:25.000 --> 10:27.000 You can start using it. 10:27.000 --> 10:29.000 We have a startup using it already. 10:29.000 --> 10:32.000 But performance, this is the next step. 10:32.000 --> 10:36.000 Torrid plugins are going to be cool for those who want to make native apps. 10:36.000 --> 10:39.000 This is what we do this year. 10:39.000 --> 10:44.000 And now, Lauren, we'll take the mic. 10:44.000 --> 10:46.000 Yeah, for the next. 10:46.000 --> 10:47.000 All right. 10:47.000 --> 10:48.000 Okay, come here. 10:48.000 --> 10:52.000 So I developed the TypeScript SDK in ORM. 10:52.000 --> 10:56.000 So an object relational mapping to map the different CRDTs, 10:56.000 --> 10:59.000 bit RDF or automation, YJS, 10:59.000 --> 11:02.000 to play in TypeScript objects. 11:02.000 --> 11:05.000 So it's easier and you don't have the different APIs. 11:05.000 --> 11:09.000 For example, this is my bed. 11:09.000 --> 11:11.000 This is YJS. 11:11.000 --> 11:13.000 And then comparison in the next graph with the ORM, 11:13.000 --> 11:16.000 you just say data.key equals value. 11:16.000 --> 11:18.000 No function calls. 11:18.000 --> 11:20.000 This happens in the background. 11:20.000 --> 11:24.000 And you get reactive life synchronization with your front. 11:24.000 --> 11:27.000 And this is React, spelled, and view. 11:27.000 --> 11:31.000 And I'm going to show you a demo. 11:32.000 --> 11:34.000 So it's easier to read like that. 11:34.000 --> 11:35.000 When you know it works. 11:35.000 --> 11:37.000 Isn't it? 11:37.000 --> 11:39.000 Right? 11:39.000 --> 11:43.000 Yeah. 11:43.000 --> 11:46.000 So you put it in your language. 11:46.000 --> 11:47.000 Yes. 11:47.000 --> 11:48.000 Okay. 11:48.000 --> 11:49.000 Perfect. 11:49.000 --> 11:51.000 So now. 11:51.000 --> 11:57.000 So I have written an expense tracker example app. 11:57.000 --> 12:00.000 You have implementations in the same window with 12:00.000 --> 12:01.000 view. 12:01.000 --> 12:04.000 React and spelled. 12:04.000 --> 12:06.000 Right. 12:06.000 --> 12:12.000 And here you can see two different windows. 12:12.000 --> 12:15.000 Having two different running to different engines. 12:15.000 --> 12:19.000 Or replicas can call them. 12:19.000 --> 12:22.000 And I can add a new category here. 12:22.000 --> 12:23.000 What is your app doing? 12:23.000 --> 12:24.000 Sorry. 12:24.000 --> 12:25.000 What is your app doing? 12:25.000 --> 12:26.000 To the expense tracker. 12:26.000 --> 12:27.000 Right. 12:27.000 --> 12:37.000 And so I can. 12:37.000 --> 12:38.000 Yeah. 12:38.000 --> 12:41.000 I think the connection is not good. 12:41.000 --> 12:42.000 So might have. 12:42.000 --> 12:43.000 Okay. 12:43.000 --> 12:44.000 Found out. 12:44.000 --> 12:45.000 Sorry for that. 12:45.000 --> 12:50.000 Here we go. 12:50.000 --> 12:51.000 So add a new category. 12:51.000 --> 12:53.000 For example, work related things. 12:53.000 --> 12:55.000 You can see it pops up. 12:56.000 --> 12:58.000 Here and in the different. 12:58.000 --> 13:02.000 In the other tab and the other frameworks. 13:02.000 --> 13:05.000 And I can expect add an expense. 13:05.000 --> 13:07.000 Let's call out. 13:07.000 --> 13:09.000 Pause. 13:09.000 --> 13:10.000 Dan. 13:10.000 --> 13:11.000 Take it. 13:11.000 --> 13:12.000 Train. 13:12.000 --> 13:13.000 Take it. 13:13.000 --> 13:15.000 Not like that. 13:15.000 --> 13:18.000 And add it to work. 13:18.000 --> 13:19.000 And here you can see. 13:19.000 --> 13:21.000 It's synchronized. 13:21.000 --> 13:22.000 We see. 13:23.000 --> 13:24.000 Great. 13:30.000 --> 13:32.000 Hello, everyone. 13:32.000 --> 13:34.000 My bad. 13:34.000 --> 13:36.000 Chit, chit, chit. 13:36.000 --> 13:38.000 You can start over with me. 13:38.000 --> 13:39.000 The other one. 13:39.000 --> 13:41.000 Want to be on your slides. 13:41.000 --> 13:42.000 Starts with this slide. 13:42.000 --> 13:43.000 This is the state show. 13:43.000 --> 13:45.000 Start with different slide. 13:45.000 --> 13:47.000 Here we go. 13:47.000 --> 13:48.000 Okay. 13:48.000 --> 13:51.000 So what's happening in the background? 13:52.000 --> 13:54.000 The object changes. 13:54.000 --> 13:55.000 Something like expense. 13:55.000 --> 13:56.000 The title is called. 13:56.000 --> 13:57.000 Within you. 13:57.000 --> 13:58.000 Post them. 13:58.000 --> 13:59.000 Trying to get here. 13:59.000 --> 14:00.000 See it. 14:00.000 --> 14:01.000 The engine. 14:01.000 --> 14:03.000 The changes send to the engine. 14:03.000 --> 14:05.000 From the orm to the. 14:05.000 --> 14:07.000 Engine running in either. 14:07.000 --> 14:08.000 Rust orn. 14:08.000 --> 14:10.000 As binary. 14:10.000 --> 14:11.000 Persist. 14:11.000 --> 14:12.000 The CRDT. 14:12.000 --> 14:14.000 And so you sit to other replicas. 14:14.000 --> 14:16.000 To other devices. 14:16.000 --> 14:17.000 There. 14:17.000 --> 14:20.000 The engine receives the changes. 14:21.000 --> 14:22.000 Decrips it. 14:22.000 --> 14:24.000 Flies it to the local replica. 14:24.000 --> 14:25.000 And up there. 14:25.000 --> 14:27.000 It's the type of object. 14:27.000 --> 14:31.000 And this makes the front end re-render automatically. 14:31.000 --> 14:33.000 Okay. 14:33.000 --> 14:35.000 So what happens. 14:35.000 --> 14:36.000 So. 14:36.000 --> 14:40.000 Here's an example of how this component looks like in a. 14:40.000 --> 14:42.000 I'm compact format here. 14:42.000 --> 14:44.000 The example for react. 14:44.000 --> 14:46.000 You either call use discrete. 14:46.000 --> 14:47.000 If you use. 14:48.000 --> 14:49.000 And you're using json. 14:49.000 --> 14:51.000 Supporting. 14:51.000 --> 14:54.000 Rdf like auto much or y js. 14:54.000 --> 14:55.000 You call it. 14:55.000 --> 14:56.000 You get the duck. 14:56.000 --> 14:58.000 Expenses. 14:58.000 --> 14:59.000 Or if you're in. 14:59.000 --> 15:01.000 Graph mode. 15:01.000 --> 15:04.000 You just defined a schema. 15:04.000 --> 15:06.000 I'm getting to this in the next slide. 15:06.000 --> 15:08.000 You pass the schema and the scope. 15:08.000 --> 15:09.000 This can be. 15:09.000 --> 15:10.000 I have the whole. 15:10.000 --> 15:12.000 All documents or subset of documents. 15:12.000 --> 15:14.000 Or just one document. 15:14.000 --> 15:16.000 And again, I have the expenses here. 15:16.000 --> 15:19.880 And then I render all the expenses in an input. 15:19.880 --> 15:24.080 And if I change, you can see that the component 15:24.080 --> 15:24.800 will re-render. 15:27.920 --> 15:34.120 So the thing is typing and RDF schema is a bit hard for RDF. 15:34.120 --> 15:36.080 So what do we do? 15:36.080 --> 15:39.120 In TypeScript, this expense and expense category looks 15:39.120 --> 15:40.040 like this. 15:40.040 --> 15:42.880 We have a graph and a sub to an ID. 15:42.880 --> 15:44.920 The graph is the document ID. 15:44.920 --> 15:48.080 It's an iri and the subject ID is an iri as well. 15:48.080 --> 15:50.680 You have a type and then properties like title, 15:50.680 --> 15:56.360 total price, payment status, different. 15:56.360 --> 16:02.440 And you have objects with cardinality bigger than one. 16:02.440 --> 16:06.520 So you have a set, an RDF, you don't have ordering. 16:06.520 --> 16:09.800 So everything is usually a set. 16:09.800 --> 16:13.760 And here's the sub object, the expense category, per expense. 16:16.760 --> 16:20.000 Now this is auto-generated. 16:20.000 --> 16:23.360 And this is what you actually define as a schema. 16:23.360 --> 16:29.000 You have, again, type, title, different properties 16:29.000 --> 16:32.360 of different data types, string, float, diger. 16:32.360 --> 16:36.400 And here, again, you can see the sub schema, 16:36.400 --> 16:39.120 which is our sub object, the expense category. 16:41.760 --> 16:48.040 OK, to sum it up, what we do is we modify a series of T's. 16:48.040 --> 16:51.160 In TypeScript, like any other object, you 16:51.160 --> 16:54.280 don't have to deal with the specifics of the certain CRD 16:54.280 --> 16:56.360 T's. 16:56.360 --> 16:59.120 We have the ORM for RDF that's typed. 16:59.120 --> 17:03.080 And we have support for auto-motion, yjs, as well, typing 17:03.080 --> 17:07.480 there and schemas comes soon as well. 17:07.480 --> 17:07.840 Right? 17:07.840 --> 17:10.680 Type, say, 54 GF. 17:10.680 --> 17:15.400 We have the reactivity in ReactView and Svelte currently. 17:15.400 --> 17:19.280 And you have the live syncing with other users and devices. 17:19.280 --> 17:23.520 And you want to show the Neti app, but we want it to show. 17:23.520 --> 17:24.760 Do you have it here? 17:24.760 --> 17:26.040 How much time do we have? 17:26.040 --> 17:26.480 Two minutes. 17:26.480 --> 17:27.440 OK. 17:27.440 --> 17:28.680 Let's do it. 17:28.680 --> 17:31.880 So that wasn't native apps. 17:31.880 --> 17:32.680 All right. 17:33.240 --> 17:34.080 Native. 17:34.080 --> 17:36.480 So where do you see it? 17:36.480 --> 17:41.080 This is what my example app looks like. 17:41.080 --> 17:45.880 You can also find it on git.netxt.org. 17:48.280 --> 17:50.800 Nope, that's a web browser. 17:50.800 --> 17:58.360 So here you see the view from the native app. 17:58.360 --> 18:03.640 I have an expense, plus the entrain ticket, 18:03.640 --> 18:10.560 and two expense categories, groceries, and work, 18:10.560 --> 18:13.040 and the properties that are into as well. 18:13.040 --> 18:14.760 It is the same data. 18:14.760 --> 18:16.720 It's the same data that synchronizes. 18:16.720 --> 18:20.360 It displayed with a different software, 18:20.360 --> 18:21.360 which is the same data. 18:21.360 --> 18:22.360 And here it's native. 18:22.360 --> 18:24.960 It's running in native application. 18:24.960 --> 18:27.760 Maybe you zoom out and we see it. 18:27.760 --> 18:29.720 But yeah, sure. 18:29.720 --> 18:32.640 Right, what happens when you modify it? 18:32.640 --> 18:34.400 It should synchronize. 18:34.400 --> 18:37.200 Maybe it's logged out, like your web app was. 18:37.200 --> 18:38.000 Ah, yeah. 18:38.000 --> 18:39.760 No, no, it's still on. 18:39.760 --> 18:41.760 It's we see it's connected. 18:41.760 --> 18:45.440 OK, this is the demo effect. 18:45.440 --> 18:46.160 What happened? 18:46.160 --> 18:47.160 Where did you change? 18:47.160 --> 18:48.320 Where did you change? 18:48.320 --> 18:50.320 The expense category. 18:50.320 --> 18:52.760 Nope. 18:52.760 --> 18:54.760 Do you want to go to wallet? 18:54.760 --> 18:56.080 In the good wallet. 18:56.080 --> 18:57.160 So find this one. 18:57.160 --> 18:58.280 Maybe the connection. 18:58.280 --> 19:01.080 This is syncing by the entrainet. 19:01.080 --> 19:03.960 And you are in, you change it from here, from there. 19:03.960 --> 19:06.160 You are in live mode. 19:06.160 --> 19:07.560 Yeah. 19:07.560 --> 19:08.160 OK. 19:08.160 --> 19:09.760 You can close it, open it again. 19:12.160 --> 19:12.600 OK. 19:12.600 --> 19:14.040 And this is, oh, yeah. 19:14.040 --> 19:15.040 We still are there. 19:15.040 --> 19:16.560 Maybe you go directly to the queue. 19:16.560 --> 19:17.560 Usually it works. 19:17.560 --> 19:19.160 We have some connectivity issues. 19:19.160 --> 19:19.560 Yeah. 19:19.560 --> 19:21.160 It's well this morning, of course. 19:21.160 --> 19:31.160 All right. 19:31.160 --> 19:32.160 Thank you, Nico. 19:32.160 --> 19:33.160 Lauren. 19:33.160 --> 19:36.160 We have time for a couple of questions. 19:36.160 --> 19:37.160 OK. 19:37.160 --> 19:40.160 I'm going to try to do my questions. 19:40.160 --> 19:41.160 OK. 19:41.160 --> 19:42.160 Thanks a lot for working on this. 19:42.160 --> 19:46.160 I've been reading of having something like this for more about five years now. 19:46.160 --> 19:49.160 Something that I'm usually like working with is like, 19:49.160 --> 19:50.160 versioning and branches. 19:50.160 --> 19:58.160 So can I, if I build an application of this, can I say that I'm like working in a graph now for some time and then later merge that in? 19:58.160 --> 20:00.160 Because it's a, sorry, it's CRDT. 20:00.160 --> 20:03.160 And I can just like work on a branch and monitor that in later. 20:03.160 --> 20:04.160 Yes. 20:04.160 --> 20:05.160 Yes, you can. 20:05.160 --> 20:06.160 We have branches. 20:06.160 --> 20:07.160 Awesome. 20:07.160 --> 20:08.160 Thank you. 20:08.160 --> 20:09.160 Perfect. 20:09.160 --> 20:10.160 You can. 20:13.160 --> 20:17.160 So I want to ask you, where is the marketing happening? 20:17.160 --> 20:18.160 Is this enough? 20:18.160 --> 20:20.160 Where the merge happens? 20:20.160 --> 20:22.160 Is it in a thing server? 20:22.160 --> 20:25.160 Is it a thing server or the server does the, 20:25.160 --> 20:27.160 No, no, it does nothing. 20:27.160 --> 20:30.160 It's done in the client, in every client that you're seeing. 20:30.160 --> 20:32.160 It's done in the client and it's done on every client. 20:32.160 --> 20:34.160 We call them an application the same way. 20:34.160 --> 20:36.160 It's deterministic. 20:36.160 --> 20:38.160 That's, that's the reality thing. 20:38.160 --> 20:40.160 So the server is basically just the pubs have, 20:40.160 --> 20:41.160 Exactly. 20:41.160 --> 20:43.160 It's still on for a while. 20:43.160 --> 20:45.160 And cryptid things. 20:46.160 --> 20:49.160 Thank you. 20:49.160 --> 20:55.160 I was wondering since like RDF seems to be like a first pass citizen of this. 20:55.160 --> 21:01.160 Does it have like a way to federate Sparkle queries across documents? 21:01.160 --> 21:04.160 Like I don't probably want all my documents locally. 21:04.160 --> 21:07.160 If I have all my data within the next graph. 21:07.160 --> 21:11.160 But like how do I reconcile this with running Sparkle queries through those? 21:11.160 --> 21:12.160 Yes. 21:12.160 --> 21:17.160 In the future, you'll be able to decide exactly which document should be in which device 21:17.160 --> 21:21.160 That you don't want to synchronize all of it in all the devices. 21:21.160 --> 21:23.160 That's the first thing. 21:23.160 --> 21:28.160 Once they are synchronized, you can make a query that encompasses all your documents. 21:28.160 --> 21:32.160 You can make a query on all the database if you want to with Sparkle. 21:32.160 --> 21:35.160 That's the scope he was referring to before. 21:35.160 --> 21:41.160 Now the federated queries is that when you want to query or things that are somewhere else. 21:41.160 --> 21:44.160 So it would be another user basically. 21:44.160 --> 21:45.160 And this we will do it just. 21:45.160 --> 21:47.160 It's quite easy to do it. 21:47.160 --> 21:49.160 We'll find a priority for it. 21:49.160 --> 21:51.160 We want it first to give you an SDK. 21:51.160 --> 21:53.160 You could play it with it with reactants. 21:53.160 --> 21:54.160 But it's there. 21:54.160 --> 21:56.160 It's going to be. 21:56.160 --> 21:58.160 Thanks for the great talk. 21:58.160 --> 21:59.160 Can you hear me? 21:59.160 --> 22:00.160 Is it? 22:00.160 --> 22:01.160 Yes. 22:01.160 --> 22:02.160 We are here. 22:02.160 --> 22:03.160 You and this is for the remote speakers. 22:03.160 --> 22:04.160 Good. 22:04.160 --> 22:05.160 Good. 22:05.160 --> 22:08.160 So it's a nice coincidence that you are using RDF. 22:08.160 --> 22:11.160 Because SPDX is also based on RDF. 22:11.160 --> 22:12.160 This is great. 22:12.160 --> 22:14.160 One question. 22:14.160 --> 22:16.160 What about gigabytes of RDF? 22:16.160 --> 22:20.160 So if we have very large files and very large graphs. 22:20.160 --> 22:25.160 How is this supposed to work with like a scale at a very large scale? 22:25.160 --> 22:28.160 The question for everything is like the RDF. 22:28.160 --> 22:30.160 But also the to merge the digest. 22:30.160 --> 22:31.160 It's always a question. 22:31.160 --> 22:35.160 And for the binary files, it's okay. 22:35.160 --> 22:36.160 We have streaming. 22:36.160 --> 22:38.160 For the RDF, I will add streaming. 22:38.160 --> 22:40.160 It means that okay. 22:40.160 --> 22:43.160 It's two gigabytes of RDF. 22:43.160 --> 22:44.160 I will receive it. 22:44.160 --> 22:49.160 And I will ingest it into the local spark engine, which is oxygraph, 22:49.160 --> 22:51.160 by the way, because everything is in rest. 22:51.160 --> 22:53.160 And it will come. 22:53.160 --> 22:55.160 I can't tell you how long it will take for now. 22:55.160 --> 22:56.160 And it will try. 22:56.160 --> 22:58.160 Maybe a follow-up question. 22:58.160 --> 23:03.160 Because in the graph, in this RDF graph, everything can be connected to everything. 23:03.160 --> 23:07.160 That means that you cannot know in advance how much data do you need? 23:07.160 --> 23:11.160 In order to be able to kind of, in a meaningful way, browse your current document. 23:11.160 --> 23:19.160 So in the answer, do you really think that it can be like two gigabytes of data loaded into the local cache? 23:19.160 --> 23:21.160 Because is this going to work actually? 23:21.160 --> 23:24.160 Like in a responsive way for users? 23:24.160 --> 23:26.160 So if the data is present locally, it's very good. 23:26.160 --> 23:29.160 The graph has super good. 23:29.160 --> 23:33.160 But if it needs to be fetched, or federated query. 23:33.160 --> 23:36.160 First, then you have to wait to receive it. 23:36.160 --> 23:37.160 We decrypt it. 23:37.160 --> 23:39.160 We materialize the state. 23:39.160 --> 23:41.160 And then it's available to you. 23:41.160 --> 23:42.160 Thanks for the question. 23:42.160 --> 23:46.160 If you run out of like the remote device, the space. 23:46.160 --> 23:48.160 So you cannot think what is happening in that case. 23:48.160 --> 23:49.160 The remote device? 23:49.160 --> 23:53.160 You have to think all your updates to all the devices and remote device. 23:54.160 --> 23:55.160 Yes, so that's what I said before. 23:55.160 --> 23:59.160 We would have the mechanism to decide on which device to synchronize what? 23:59.160 --> 24:02.160 I think we run out of time for the dictionary. 24:02.160 --> 24:03.160 Right? 24:03.160 --> 24:04.160 Yeah. 24:04.160 --> 24:05.160 30 seconds. 24:05.160 --> 24:06.160 One very short question. 24:06.160 --> 24:07.160 Yes or no? 24:07.160 --> 24:08.160 Question? 24:08.160 --> 24:09.160 Would be great.