WEBVTT 00:00:00.000 --> 00:00:02.399 Leo Vivier: [About the previous presentation:] At the end... We are right on time, so I'm 00:00:02.399 --> 00:00:04.319 sorry if you have a lot of questions before. 00:00:04.319 --> 00:00:06.960 You had so many questions and I 00:00:06.960 --> 00:00:08.375 couldn't answer all of them 00:00:08.375 --> 00:00:10.080 I'm really happy about it but I'm also 00:00:10.080 --> 00:00:12.719 really sad that I don't have enough time to do so. 00:00:12.719 --> 00:00:15.040 I'm going to try to do a better job this 00:00:15.040 --> 00:00:17.119 time of leaving you a little more time 00:00:17.119 --> 00:00:20.240 for the questions. So, just before, 00:00:20.240 --> 00:00:22.960 a little addendum because I did screw up 00:00:22.960 --> 00:00:24.400 in the previous presentation... 00:00:24.400 --> 00:00:27.439 You remember I tried to rename the file 00:00:27.439 --> 00:00:28.800 and it didn't work? 00:00:28.800 --> 00:00:32.559 well it turns out I had two files named "baz," so 00:00:32.559 --> 00:00:36.000 my software works great, thank you very much. 00:00:36.000 --> 00:00:38.800 [Org Roam Technical Presentation]: All right. So now what I'm going to do 00:00:38.800 --> 00:00:40.239 during this presentation 00:00:40.239 --> 00:00:43.040 is that I'm going to... Oops, I didn't start 00:00:43.040 --> 00:00:44.399 my timer. Just give me 00:00:44.399 --> 00:00:47.520 a little second, and let's subtract 00:00:47.520 --> 00:00:50.141 one minute. Okay. Good. 00:00:50.141 --> 00:00:52.239 So, what I'm going to do right now... It's a 00:00:52.239 --> 00:00:54.079 little different from the previous 00:00:54.079 --> 00:00:56.879 talk I gave you, and different even 00:00:56.879 --> 00:00:58.239 from what Noorah gave you. 00:00:58.239 --> 00:01:00.480 There's scaling the mountain as 00:01:00.480 --> 00:01:01.941 far as difficulty is concerned. 00:01:01.941 --> 00:01:04.879 On this one, I will be telling you about the 00:01:04.879 --> 00:01:06.799 technical aspects of org-roam, 00:01:06.799 --> 00:01:09.360 because I've been telling you 00:01:09.360 --> 00:01:11.119 about the general philosophy 00:01:11.119 --> 00:01:13.119 of the notes and the general philosophy 00:01:13.119 --> 00:01:14.560 of organization, 00:01:14.560 --> 00:01:16.159 but right now, I really want to get into 00:01:16.159 --> 00:01:18.479 the nitty gritty about org-roam. 00:01:18.479 --> 00:01:22.640 So if we go in the git repository, 00:01:22.640 --> 00:01:25.759 this at the very core is org-roam. 00:01:25.759 --> 00:01:28.960 For some of you who have no experience whatsoever 00:01:28.960 --> 00:01:31.280 developing stuff or programming or 00:01:31.280 --> 00:01:32.880 anything along those lines, 00:01:32.880 --> 00:01:36.720 this is how all the development around the world 00:01:36.720 --> 00:01:40.000 is working. You have a repository, a 00:01:40.000 --> 00:01:42.159 git repository, where you have all the 00:01:42.159 --> 00:01:44.399 files, all the libraries you're using, 00:01:44.399 --> 00:01:46.399 all the programs, all the commands. 00:01:46.399 --> 00:01:48.720 Everything is inside your files. 00:01:48.720 --> 00:01:52.240 And in a way, this is the org-roam project. 00:01:52.240 --> 00:01:53.741 You can see that we have many files. 00:01:53.741 --> 00:01:55.600 We have org-roam-buffer, -capture, -compat, 00:01:55.600 --> 00:01:58.441 -completion, -dailies, etc. etc. 00:01:58.441 --> 00:02:02.000 So, before we dive a little deeper, I just 00:02:02.000 --> 00:02:04.640 want to give you a lay of the land, so to speak, 00:02:04.640 --> 00:02:08.160 to know where we're heading. 00:02:08.160 --> 00:02:11.680 Org-roam is built on top of Org Mode, 00:02:11.680 --> 00:02:15.599 and Org Mode gives us plenty of tools 00:02:15.599 --> 00:02:17.408 to play around with the files. 00:02:17.408 --> 00:02:18.308 I'm moving the glass. 00:02:18.308 --> 00:02:20.080 I'm starting to move my hands a little 00:02:20.080 --> 00:02:21.360 bit. You know, when I get excited about 00:02:21.360 --> 00:02:22.959 something, I move my hand, 00:02:22.959 --> 00:02:26.640 and then that stuff happens. So 00:02:26.640 --> 00:02:29.360 in org-roam, we have Org Mode and 00:02:29.360 --> 00:02:31.360 Org Roam gives us plenty of tools which 00:02:31.360 --> 00:02:33.360 are incredibly useful 00:02:33.360 --> 00:02:36.560 for writing stuff. So you know we already 00:02:36.560 --> 00:02:37.440 have the links, 00:02:37.440 --> 00:02:39.440 we already have the hierarchy which is 00:02:39.440 --> 00:02:43.360 given by having trees within trees within trees. We have 00:02:43.760 --> 00:02:45.741 quote blocks. We have babel blocks. 00:02:45.741 --> 00:02:48.000 We have so much stuff. We have an arsenal of 00:02:48.000 --> 00:02:49.680 tools that have been developed 00:02:49.680 --> 00:02:53.519 for the last 15 years. 00:02:53.519 --> 00:02:56.640 When you think about it, org-roam just 00:02:56.640 --> 00:02:59.760 wants to create backlinks. It sounds 00:02:59.760 --> 00:03:01.360 something very simple, but the problem is 00:03:01.360 --> 00:03:05.519 that we need to play nicely with all of those 00:03:05.519 --> 00:03:09.360 intricate pieces. The fact is, it takes quite a 00:03:09.360 --> 00:03:10.879 lot of expertise to be able to do so 00:03:10.879 --> 00:03:14.400 because if... Right now we are in the brain of org-roam, 00:03:15.200 --> 00:03:18.959 but if I show you the brain of Org Mode... 00:03:18.959 --> 00:03:20.608 So this is the brain of Org Mode. 00:03:20.608 --> 00:03:23.280 It looks very simple like this because I 00:03:23.280 --> 00:03:25.519 haven't entered the lisp/ folder. 00:03:25.519 --> 00:03:28.000 I'm just going to enter it. I'm going 00:03:28.000 --> 00:03:32.000 to zoom out a little bit. Don't worry if you 00:03:32.000 --> 00:03:32.959 don't see everything. 00:03:32.959 --> 00:03:35.519 but I just want you to get the 00:03:35.519 --> 00:03:37.519 sheer feel of magnitude 00:03:37.519 --> 00:03:41.280 that is Org Mode. So right now, we are 00:03:41.280 --> 00:03:42.640 in a very small size... What I'm going to do, 00:03:42.640 --> 00:03:43.760 I'm going to skip 00:03:43.760 --> 00:03:47.519 one page, one, two, 00:03:47.519 --> 00:03:51.040 three, we have... Let's just check how many 00:03:51.040 --> 00:03:52.319 lines we have. 00:03:52.319 --> 00:03:54.640 Okay. Let me just revert to a fairly 00:03:54.640 --> 00:03:56.480 readable sight. 00:03:56.480 --> 00:03:58.560 At the bottom, you can see that we have... 00:03:58.560 --> 00:03:59.599 Oh it's not showing because it's a 00:03:59.599 --> 00:04:00.959 little small. Okay, I'm just going to 00:04:00.959 --> 00:04:03.840 resize the window a little bit. 00:04:03.840 --> 00:04:06.959 It's not showing up. Give me a second. I 00:04:06.959 --> 00:04:08.720 can't see how many lines I have. Okay. So 00:04:08.720 --> 00:04:10.159 let's do it the better way. 00:04:10.159 --> 00:04:11.840 I'm going to go back at the beginning of 00:04:11.840 --> 00:04:14.000 the buffer and we're going to count 00:04:14.000 --> 00:04:16.160 how many lines we have. So the bottom, in 00:04:16.160 --> 00:04:18.880 the mini buffer (and the mini buffer is this area), 00:04:18.880 --> 00:04:22.320 we have 377 lines, 00:04:22.320 --> 00:04:25.919 which means 377 00:04:25.919 --> 00:04:29.759 libraries within Org Mode. And mind you, 00:04:29.759 --> 00:04:31.520 that's not counting all the modules that 00:04:31.520 --> 00:04:32.960 we have on the side, which 00:04:32.960 --> 00:04:36.240 come on top of Org Mode. Now when you 00:04:36.240 --> 00:04:37.360 try to think 00:04:37.360 --> 00:04:41.408 about something so elemental as links, 00:04:41.408 --> 00:04:45.520 you have to think about how to play well 00:04:45.520 --> 00:04:48.560 with every single one of these modules. 00:04:48.560 --> 00:04:48.875 Now, obviously not the 370. 00:04:48.875 --> 00:04:56.080 Sometimes, you know one module it's not going to do anything. 00:04:56.080 --> 00:04:57.680 I'm not sure ob-calc could be doing 00:04:57.680 --> 00:04:58.639 anything with it. 00:04:58.639 --> 00:05:00.080 But it's something that we have to keep 00:05:00.080 --> 00:05:03.039 in mind. 00:05:03.039 --> 00:05:04.720 So, really early on, when we started 00:05:04.720 --> 00:05:07.520 developing org-roam with Jethro Kuan, my 00:05:07.520 --> 00:05:10.639 co-maintainer, you know we had this idea that 00:05:10.639 --> 00:05:14.639 we wanted to develop something that was optimized, 00:05:14.639 --> 00:05:18.240 something that would scale very 00:05:18.240 --> 00:05:20.160 nicely, whether or not you had... 00:05:20.160 --> 00:05:21.600 Something that would work as 00:05:21.600 --> 00:05:24.560 fast if you had 10 files, 00:05:24.560 --> 00:05:27.680 or if you had 100 files, or if you had 00:05:27.680 --> 00:05:30.880 10,000 files and maybe more. So the 00:05:30.880 --> 00:05:32.080 problem when you do this-- 00:05:32.080 --> 00:05:34.400 and I'm doing some callbacks to the talk 00:05:34.400 --> 00:05:36.320 I gave you earlier today about 00:05:36.320 --> 00:05:41.280 a few big files versus many-- 00:05:41.280 --> 00:05:44.800 I got confused--few big files versus many 00:05:44.800 --> 00:05:45.919 small files, 00:05:45.919 --> 00:05:49.280 the problem with this is that we need to 00:05:49.280 --> 00:05:51.600 think about optimization from the get go. 00:05:51.600 --> 00:05:53.680 So one of the decisions we took when 00:05:53.680 --> 00:05:54.800 we got started 00:05:54.800 --> 00:05:59.199 with org-roam is that if I go in my 00:05:59.199 --> 00:06:02.479 test repository--so that's the one in 00:06:02.479 --> 00:06:04.240 which we were right before-- 00:06:04.240 --> 00:06:08.000 we have a file which is called org-roam.db. 00:06:08.000 --> 00:06:11.600 Now if I open it, it's not... It's a 00:06:11.600 --> 00:06:14.160 little garbage because it's a binary. 00:06:14.160 --> 00:06:15.120 But what we have 00:06:15.120 --> 00:06:18.560 is a database with which we communicate 00:06:18.560 --> 00:06:21.919 via... Sorry, it's an SQL database. 00:06:21.919 --> 00:06:25.120 And what this allows us to do 00:06:25.120 --> 00:06:28.479 is we store all the information we need 00:06:28.479 --> 00:06:31.919 inside this SQL database which allows us 00:06:31.919 --> 00:06:34.720 to speed up a lot of the operations that 00:06:34.720 --> 00:06:38.479 are necessary for the functioning of org-roam. 00:06:38.479 --> 00:06:40.240 So, for instance, if I go back to the 00:06:40.240 --> 00:06:41.759 index file that I had before... 00:06:41.759 --> 00:06:43.341 Let's just go back to "foo," actually. 00:06:43.341 --> 00:06:45.680 This way you'll see a little more on the side. 00:06:45.680 --> 00:06:47.919 So you see that on the side we have 00:06:47.919 --> 00:06:50.319 two links. I'm not going to click on them; 00:06:50.319 --> 00:06:51.508 otherwise, I'm going to open them. 00:06:51.508 --> 00:06:53.199 But we have two links. 00:06:53.199 --> 00:06:56.319 Now there are many implementations of 00:06:56.319 --> 00:06:58.975 the Zettelkasten method inside Emacs 00:06:58.975 --> 00:07:00.541 and with Org Mode. 00:07:00.541 --> 00:07:02.400 But what we've decided to do 00:07:02.400 --> 00:07:04.639 is that every time you have a link--so if 00:07:04.639 --> 00:07:08.479 we go to the index again here at point we have 00:07:08.479 --> 00:07:09.908 the link "foo." Every time we create a link, 00:07:09.908 --> 00:07:14.160 we update our database 00:07:14.160 --> 00:07:17.919 to say, okay, so we have a link in the file 00:07:17.919 --> 00:07:21.080 "index" which is leading to the file 00:07:21.080 --> 00:07:24.319 "foo.org" and it is situated 00:07:24.319 --> 00:07:27.840 under the heading "A heading." 00:07:27.840 --> 00:07:29.840 If you check the side buffer, you see 00:07:29.840 --> 00:07:31.440 that all this information 00:07:31.440 --> 00:07:33.120 which I just highlighted to you 00:07:33.120 --> 00:07:42.639 is present right here. 00:07:42.639 --> 00:07:45.599 Oh, sorry I forgot this. Thank you. 00:07:46.400 --> 00:07:50.879 So let's see. Log. Okay. 00:07:50.879 --> 00:07:53.039 I'm going to split like this. 00:07:53.039 --> 00:07:54.960 I'm going to go back there. 00:07:54.960 --> 00:07:56.960 The problem is that I can't show my 00:07:56.960 --> 00:07:58.720 keystrokes at the same time as 00:07:58.720 --> 00:08:02.080 I'm showing the side buffer, so I'll 00:08:02.080 --> 00:08:03.599 keep it right now for your own 00:08:03.599 --> 00:08:07.039 discretion. Anyway, getting back to the talk. 00:08:07.039 --> 00:08:10.160 So the thing is we have this 00:08:10.160 --> 00:08:13.520 SQL database. The goal is to keep it optimized. 00:08:13.520 --> 00:08:16.400 Now, why is it better optimized than just 00:08:16.400 --> 00:08:20.960 using default Org Mode? 00:08:20.960 --> 00:08:23.520 So in my talk about many big files 00:08:23.520 --> 00:08:26.879 versus a few--I keep getting.-- you got 00:08:26.879 --> 00:08:28.080 what I was saying; I'm not going to 00:08:28.080 --> 00:08:29.120 repeat it-- 00:08:29.120 --> 00:08:32.240 By the way, it is 10 to 10:00. 00:08:32.240 --> 00:08:35.200 I'm starting really to be tired now. 00:08:35.200 --> 00:08:36.399 Moving on to... 00:08:36.399 --> 00:08:39.279 What did I want to show you? So it was 00:08:39.279 --> 00:08:40.800 almost... Yes, org-elements. 00:08:40.800 --> 00:08:44.959 So what I'm going to do... I'm going to... 00:08:44.959 --> 00:08:48.399 I believe it's org-element-parse-buffer. 00:08:48.399 --> 00:08:51.920 So I was telling you about org-elements before. 00:08:51.920 --> 00:08:53.600 And the main command--sorry, the main 00:08:53.600 --> 00:08:55.760 function that is used by org-element 00:08:55.760 --> 00:08:58.560 is -parse-buffer. What it does (and you can 00:08:58.560 --> 00:08:59.760 see the docstring) is that it 00:08:59.760 --> 00:09:01.040 recursively parsed 00:09:01.040 --> 00:09:03.279 the buffer and returned structure, 00:09:03.279 --> 00:09:04.959 structure being all the information that 00:09:04.959 --> 00:09:06.320 we have in this buffer. 00:09:06.320 --> 00:09:07.680 So just to show you a little more, we're 00:09:07.680 --> 00:09:09.600 going to move into a scratch buffer, 00:09:09.600 --> 00:09:10.880 and what we're going to do is that we're 00:09:10.880 --> 00:09:12.800 going to write this command 00:09:12.800 --> 00:09:16.320 org-element-parse-buffer, and we're going to check the 00:09:16.320 --> 00:09:17.760 output of this command. 00:09:17.760 --> 00:09:19.600 Sorry, not this one. We're going to go 00:09:19.600 --> 00:09:22.000 in the index. So in the index file, you have 00:09:22.000 --> 00:09:23.680 a title, you have a heading, you have a 00:09:23.680 --> 00:09:25.120 link, etc. etc. 00:09:25.120 --> 00:09:26.880 So what I'm going to do, I'm going to 00:09:26.880 --> 00:09:28.560 evaluate this text. 00:09:28.560 --> 00:09:30.800 Now at the bottom in the mini buffer, 00:09:32.560 --> 00:09:36.160 you see an AST, an abstract-- 00:09:36.160 --> 00:09:37.600 obviously don't remember what the S 00:09:37.600 --> 00:09:39.839 stands for... Semantic?-- 00:09:39.839 --> 00:09:42.720 Huh. Interesting. Anyway. A representation 00:09:42.720 --> 00:09:43.519 of the data 00:09:43.519 --> 00:09:45.279 in a way that is exploitable by a 00:09:45.279 --> 00:09:47.600 machine. Now what I'm going to do-- 00:09:47.600 --> 00:09:49.839 syntax, thank you--so what I'm going to do, 00:09:49.839 --> 00:09:52.000 I'm going to paste it inside the buffer 00:09:52.000 --> 00:09:54.480 in a way that is humanly readable. 00:09:54.480 --> 00:09:56.399 You can see that we have plenty of 00:09:56.399 --> 00:09:58.800 information. We have a section which 00:09:58.800 --> 00:10:05.040 starts at the char 1, which ends at the character 45. 00:10:05.040 --> 00:10:07.040 We have the content... so "Emacs Scratch"-- 00:10:07.040 --> 00:10:10.240 oh actually, no, never mind, I did something wrong, I ran 00:10:10.240 --> 00:10:11.279 it in the wrong buffer. 00:10:11.279 --> 00:10:13.040 So actually what I'm going to do, we're 00:10:13.040 --> 00:10:14.399 going to run this command 00:10:14.399 --> 00:10:16.241 with the selected window. 00:10:16.241 --> 00:10:21.120 Next window. Okay. That's a bit of live 00:10:21.120 --> 00:10:23.760 Elisp writing for you right now. 00:10:23.760 --> 00:10:25.541 Now if I evaluate this 00:10:25.541 --> 00:10:28.480 and paste the content of the buffer, 00:10:28.480 --> 00:10:30.208 it is doing its bidding. 00:10:30.208 --> 00:10:32.399 So now what we have... 00:10:32.399 --> 00:10:34.959 We have a section. We have the keyword 00:10:34.959 --> 00:10:38.160 TITLE which you see right here. You have the :value. 00:10:38.160 --> 00:10:39.920 If we scroll down a little bit, we have a 00:10:39.920 --> 00:10:42.480 heading which is right here. We have the contents, 00:10:42.480 --> 00:10:44.800 which should be... Yes, the content is not 00:10:44.800 --> 00:10:46.320 listed exactly here, but you have a 00:10:46.320 --> 00:10:48.079 paragraph, which is this, 00:10:48.079 --> 00:10:50.308 and then you have a link, etc. etc. 00:10:50.308 --> 00:10:54.640 It is all parentheses if you're not used to Elisp. 00:10:54.640 --> 00:10:56.320 Like, right now, I've selected only the 00:10:56.320 --> 00:10:58.640 content of the parenthesis link. 00:10:58.640 --> 00:11:00.399 I can move like this etc. etc. 00:11:00.399 --> 00:11:01.680 I'm not... It's not an Elisp 00:11:01.680 --> 00:11:05.279 lesson that I'm doing right now, but basically, 00:11:05.279 --> 00:11:08.399 if we were to use the default tooling of 00:11:08.399 --> 00:11:12.480 org-roam--Org Mode, sorry, I keep getting too confused, sorry for that-- 00:11:12.480 --> 00:11:14.240 would be extremely slow to do what 00:11:14.240 --> 00:11:16.399 we're doing. Some people 00:11:16.399 --> 00:11:19.760 who are doing some implementations of the 00:11:19.760 --> 00:11:22.240 Zettelkasten method inside Emacs have 00:11:22.240 --> 00:11:26.480 opted for this method, but the problem is that 00:11:26.480 --> 00:11:28.975 we think that it scales poorly. 00:11:28.975 --> 00:11:33.920 Now some other people have decided to not do with a database, 00:11:33.920 --> 00:11:35.600 and what they do is that they use a tool 00:11:35.600 --> 00:11:37.200 which is called ripgrep. 00:11:37.200 --> 00:11:38.800 You might know grep, which is a tool that 00:11:38.800 --> 00:11:41.279 allows you to search 00:11:41.279 --> 00:11:43.440 a file, the content of a file, for a line. 00:11:43.440 --> 00:11:46.560 So for instance, if we open vterm here, 00:11:46.560 --> 00:11:48.041 let's see... I've opened the term. 00:11:48.041 --> 00:11:51.308 I am in this repository. 00:11:51.308 --> 00:11:54.399 What I'm going to do is that I'm going to 00:11:54.399 --> 00:11:58.000 load the content of the file. 00:11:58.000 --> 00:12:02.480 How am I going to do this? I need to move to bash. 00:12:02.480 --> 00:12:06.160 Let's do grep 00:12:06.160 --> 00:12:08.000 for the line... Which links did we 00:12:08.000 --> 00:12:09.519 have... grep foo 00:12:09.519 --> 00:12:11.600 inside the file. Is it three? I can't 00:12:11.600 --> 00:12:13.760 remember. Okay. Let's do this. 00:12:13.760 --> 00:12:18.079 Am I working? No. 00:12:18.079 --> 00:12:21.279 Let's go for four? Why, is it eight? 00:12:21.279 --> 00:12:22.800 Oh, you know what, I'm just 00:12:22.800 --> 00:12:24.320 going to copy the name. 00:12:24.320 --> 00:12:28.240 There we go. 00:12:28.240 --> 00:12:33.680 Problem with live presentation, always. 00:12:33.680 --> 00:12:34.800 You know what, I'm struggling, so I'm 00:12:34.800 --> 00:12:36.720 going to drop this point. Anyway, 00:12:36.720 --> 00:12:38.560 so grep is a simple tool that allows you 00:12:38.560 --> 00:12:40.000 to search the content of a file, but 00:12:40.000 --> 00:12:42.480 ripgrep is a solution that is written 00:12:42.480 --> 00:12:44.160 in Rust and which is supposed to be-- 00:12:44.160 --> 00:12:48.880 well, not supposed--which is far more capable. 00:12:48.880 --> 00:12:50.639 Now I'd like to talk to you about the future 00:12:50.639 --> 00:12:52.320 of org-roam. Right now, I've told you about 00:12:52.320 --> 00:12:54.720 the general concept, which is about using 00:12:54.720 --> 00:12:58.399 this SQL database, and about 00:12:58.399 --> 00:13:01.519 playing nicely with Org Mode. 00:13:01.519 --> 00:13:03.279 We think that there's something great 00:13:03.279 --> 00:13:05.200 that we can do about org-roam. 00:13:05.200 --> 00:13:08.320 Now I've been talking with a lot of 00:13:08.320 --> 00:13:10.880 people who are behind Org Mode and you know, 00:13:10.880 --> 00:13:14.000 they've told us, "Do you think that 00:13:14.000 --> 00:13:16.880 org-roam could have something to bring to 00:13:16.880 --> 00:13:18.320 Org Mode? Let's say, 00:13:18.320 --> 00:13:20.160 backlinks? Is there something that we 00:13:20.160 --> 00:13:21.600 could be doing to 00:13:21.600 --> 00:13:25.600 import backlinks into Org Mode?" 00:13:25.600 --> 00:13:29.200 We thought about it with Jethro and the problem is 00:13:29.200 --> 00:13:30.800 we've always tried to have an 00:13:30.800 --> 00:13:32.720 experimental ground, 00:13:32.720 --> 00:13:36.320 a very isolated portion of your system 00:13:36.320 --> 00:13:37.920 where we could track backlinks and 00:13:37.920 --> 00:13:40.320 that's why we use 00:13:40.320 --> 00:13:42.320 a slipbox directory, so that we only 00:13:42.320 --> 00:13:44.880 track backlinks in one specific place. 00:13:44.880 --> 00:13:47.040 But now, because there seems to be so 00:13:47.040 --> 00:13:48.639 much interest about the method and we 00:13:48.639 --> 00:13:50.079 have so much backing 00:13:50.079 --> 00:13:52.480 on Github--we have like 00:13:53.120 --> 00:13:56.399 2,600 stars, which is mind-boggling to us--- 00:13:56.399 --> 00:13:59.760 because we have so much success... 00:13:59.760 --> 00:14:02.399 We have plenty of ideas about the future. 00:14:02.399 --> 00:14:06.000 One of the key parts of development being the writing 00:14:06.000 --> 00:14:08.480 of an external parser for org-roam. 00:14:08.480 --> 00:14:11.839 So I've been telling you about org-element. org-element runs 00:14:11.839 --> 00:14:15.279 inside Emacs. But what if 00:14:15.279 --> 00:14:19.519 we wrote a background process 00:14:19.519 --> 00:14:23.600 that could read a file, an Org Mode file, 00:14:23.600 --> 00:14:25.760 extract the same type of data that you 00:14:25.760 --> 00:14:27.440 see on your screen right now, 00:14:27.440 --> 00:14:30.959 so that we could use to update a database 00:14:30.959 --> 00:14:33.279 that we could use to compute the 00:14:33.279 --> 00:14:34.959 links, so that we could use it 00:14:34.959 --> 00:14:37.360 to show org-roam server all the 00:14:37.360 --> 00:14:39.519 connections between your nodes? 00:14:39.519 --> 00:14:41.360 Now there is a path of improvement here 00:14:41.360 --> 00:14:44.320 that is extremely important to us. 00:14:44.320 --> 00:14:47.360 But you know, that's the technical aspect. 00:14:47.360 --> 00:14:48.639 I'm out of time. I'm just going to 00:14:48.639 --> 00:14:51.360 take one more minute to finish on this point. 00:14:51.360 --> 00:14:57.680 We believe that org-roam has the potential to be a 00:14:57.680 --> 00:14:58.399 think tank, 00:14:58.399 --> 00:15:00.639 in a way, for Org Mode and the way we 00:15:00.639 --> 00:15:01.920 think about 00:15:01.920 --> 00:15:04.079 note-taking in general. I've stressed a 00:15:04.079 --> 00:15:06.079 great deal in my first presentation-- 00:15:06.079 --> 00:15:10.240 sorry, the one I did before Noorah--that 00:15:10.240 --> 00:15:12.480 org-roam is really great as a way to 00:15:12.480 --> 00:15:14.639 think organically about knowledge. 00:15:14.639 --> 00:15:17.600 Honestly, we want to put the 00:15:17.600 --> 00:15:19.279 theory into practice with org-roam. 00:15:19.279 --> 00:15:22.079 We are holding something which has the 00:15:22.079 --> 00:15:23.440 potential to be 00:15:23.440 --> 00:15:25.120 a great factor of innovation for the 00:15:25.120 --> 00:15:27.279 future, whether it be Org Mode 00:15:27.279 --> 00:15:29.600 or even for software in general. You know, 00:15:29.600 --> 00:15:31.440 the way to think about... 00:15:31.440 --> 00:15:34.880 build nodes of knowledge in a way, 00:15:34.880 --> 00:15:37.440 and the way to represent all those ids 00:15:37.440 --> 00:15:38.240 with the graph... 00:15:38.240 --> 00:15:41.600 the way to basically have a note-taking system that 00:15:41.600 --> 00:15:43.360 corresponds to the research that 00:15:43.360 --> 00:15:45.839 corresponds to the way you think. 00:15:45.839 --> 00:15:51.839 I believe we are really excited about this and if you 00:15:51.839 --> 00:15:55.360 want to keep track of the development of org-roam 00:15:55.360 --> 00:15:57.600 on my YouTube channel (which is already 00:15:57.600 --> 00:15:59.279 linked a little earlier 00:15:59.279 --> 00:16:02.639 inside the pad), 00:16:02.639 --> 00:16:04.240 I do have a Youtube channel where I try 00:16:04.240 --> 00:16:06.079 to present novelties 00:16:06.079 --> 00:16:09.519 or the new stuff inside org-roam. 00:16:09.519 --> 00:16:11.519 I'll also be recording videos about the 00:16:11.519 --> 00:16:13.360 technical aspects, about the direction 00:16:13.360 --> 00:16:15.519 that we're taking with org-roam. 00:16:15.519 --> 00:16:18.000 If you want to talk with us we are 00:16:18.000 --> 00:16:22.160 always available either on IRC channel #org-roam 00:16:22.160 --> 00:16:25.279 (I believe there's a dash between org and roam) but also 00:16:25.279 --> 00:16:27.279 on the Discourse. I'll be putting all 00:16:27.279 --> 00:16:29.440 the links inside the conversation. 00:16:29.440 --> 00:16:31.199 And that's me done. So, thank you for 00:16:31.199 --> 00:16:32.880 listening. Now I'll be taking 00:16:32.880 --> 00:16:34.560 three minutes of questions so as to be 00:16:34.560 --> 00:16:37.360 right on time. 00:16:37.360 --> 00:16:39.920 (Amin: Many thanks for your awesome talk, Leo.) 00:16:39.920 --> 00:16:41.120 Leo: Thank you. 00:16:41.120 --> 00:16:43.040 I'm just refreshing the page, and I'm 00:16:43.040 --> 00:16:44.959 going to scroll down to my 00:16:44.959 --> 00:16:49.600 talk if I can find the right section. 00:16:49.600 --> 00:16:53.120 Let me just scroll a little bit. 00:16:53.120 --> 00:16:55.600 Reproducible Emacs. No, I think it's 00:16:55.600 --> 00:16:57.120 slower... 00:16:57.120 --> 00:16:59.279 We have so many questions, so at the 00:16:59.279 --> 00:17:00.639 same time I'm pissed because I can't 00:17:00.639 --> 00:17:01.120 find it, 00:17:01.120 --> 00:17:02.639 but I'm really, really impressed by the 00:17:02.639 --> 00:17:05.360 number of questions that we had. (Amin: Oh yeah. 00:17:05.360 --> 00:17:07.760 Yours is about I think about line 600 00:17:07.760 --> 00:17:08.260 or so.) 00:17:09.919 --> 00:17:13.199 Leo: Yes, got it splendid. 00:17:13.199 --> 00:17:16.400 So, the questions. "So why not run a 00:17:16.400 --> 00:17:18.160 background Emacs for parsing instead of 00:17:18.160 --> 00:17:19.919 implementing a new parser?" 00:17:19.919 --> 00:17:22.559 I believe we've had this question. 00:17:22.559 --> 00:17:24.480 I was giving a similar talk 00:17:24.480 --> 00:17:27.600 earlier this week--and this week, 00:17:27.600 --> 00:17:31.679 I'm not French, this week, sorry--and 00:17:31.679 --> 00:17:33.008 someone asked me this question. 00:17:33.008 --> 00:17:35.679 The thing is running a background Emacs 00:17:35.679 --> 00:17:38.320 process... You know, it sounds great, 00:17:38.320 --> 00:17:40.400 but it's also very limited because all 00:17:40.400 --> 00:17:41.760 the problems we have 00:17:41.760 --> 00:17:45.520 about concurrency, about threads in Emacs... 00:17:45.520 --> 00:17:48.160 Well, yes, we can forward all our calls to 00:17:48.160 --> 00:17:49.200 background Emacs 00:17:49.200 --> 00:17:52.240 just like when you export a file 00:17:52.240 --> 00:17:56.400 with... Sorry, 00:17:56.400 --> 00:17:57.840 Amin, could you mute microphone when 00:17:57.840 --> 00:17:58.799 you're not speaking, it's a little hard for 00:17:58.799 --> 00:18:01.520 me to concentrate? 00:18:01.520 --> 00:18:03.600 That's fine. Don't worry. 00:18:04.640 --> 00:18:06.960 Where was I? I'm sorry. The 00:18:06.960 --> 00:18:07.679 question. Yes. 00:18:07.679 --> 00:18:09.280 So, basically, forwarding all the 00:18:09.280 --> 00:18:11.840 questions--sorry, all our queries to a 00:18:11.840 --> 00:18:13.039 background Emacs. 00:18:13.039 --> 00:18:16.000 That is what org export is doing. Like, 00:18:16.000 --> 00:18:17.960 you have the ability to 00:18:17.960 --> 00:18:20.799 asynchronously export LaTeX documents, 00:18:20.799 --> 00:18:22.080 ODT documents from 00:18:22.080 --> 00:18:24.480 Org Mode. It uses a very minimal 00:18:24.480 --> 00:18:26.000 version of Emacs to do that. But the 00:18:26.000 --> 00:18:28.240 problem is that we think that it's not 00:18:28.240 --> 00:18:30.320 going to scale as well as a true 00:18:30.320 --> 00:18:33.039 genuine background process. Since we 00:18:33.039 --> 00:18:34.480 have been talking a lot 00:18:34.480 --> 00:18:36.000 as far as the Org Mode development is 00:18:36.000 --> 00:18:38.160 concerned about, 00:18:38.160 --> 00:18:40.640 writing a proper parser, writing a proper 00:18:40.640 --> 00:18:43.440 documentation for the parsing of Org Mode files and 00:18:43.440 --> 00:18:46.000 writing a proper document standard 00:18:46.000 --> 00:18:48.400 that says, okay, this is how the Org Mode 00:18:48.400 --> 00:18:50.000 format works, you know, to 00:18:50.000 --> 00:18:52.000 basically have a way to not fall into 00:18:52.000 --> 00:18:55.120 the traps of Markdown which has many 00:18:55.120 --> 00:18:56.559 many standards... 00:18:56.559 --> 00:18:58.480 We need to think about this and we 00:18:58.480 --> 00:19:00.000 believe that org-roam has 00:19:00.000 --> 00:19:03.120 the ability to think about these questions. 00:19:03.120 --> 00:19:04.640 As a person, I'm also really interested 00:19:04.640 --> 00:19:06.400 about this. 00:19:06.400 --> 00:19:07.840 I can take the questions, Amin, so don't 00:19:07.840 --> 00:19:10.160 worry about feeding them to me. So how 00:19:10.160 --> 00:19:11.760 often does the 00:19:11.760 --> 00:19:13.679 DB index get updated in order to contain 00:19:13.679 --> 00:19:15.175 changes within the Org files? 00:19:15.175 --> 00:19:17.360 So we have two ways: either we 00:19:17.360 --> 00:19:19.440 update as soon as you save a file, 00:19:19.440 --> 00:19:22.160 or we have a timer which is an idle 00:19:22.160 --> 00:19:23.600 timer, which waits... Okay 00:19:23.600 --> 00:19:25.600 the user has not inputted 00:19:25.600 --> 00:19:26.960 anything in the last 00:19:26.960 --> 00:19:29.360 five seconds, so it's time to queue a 00:19:29.360 --> 00:19:30.080 database--parsing-- 00:19:30.080 --> 00:19:33.039 a rebuild of the data, not an 00:19:33.039 --> 00:19:33.919 incrementation 00:19:33.919 --> 00:19:37.120 of the database, I should say. 00:19:37.120 --> 00:19:38.799 "Did you ever think of..." I believe I 00:19:38.799 --> 00:19:40.320 have one more minute and then 00:19:40.320 --> 00:19:42.240 I'll hand it to the other folks. 00:19:42.240 --> 00:19:43.440 "Do you ever think of opening up or 00:19:43.440 --> 00:19:45.440 designing the SQL DB as a general Org 00:19:45.440 --> 00:19:47.200 speed up tool outside of org-roam so that 00:19:47.200 --> 00:19:49.141 other libraries that do execute 00:19:49.141 --> 00:19:50.208 complex queries are able to use it?" 00:19:50.208 --> 00:19:53.341 Well, a lot of people have been working on this 00:19:53.341 --> 00:19:54.640 I believe alphapapa has been 00:19:54.640 --> 00:19:56.480 thinking quite a lot about this. 00:19:56.480 --> 00:20:01.120 org-ql is... The ql stands for query language. 00:20:01.120 --> 00:20:04.720 I can't remember now what the backend is 00:20:04.720 --> 00:20:08.080 for org-ql, but the idea is 00:20:08.080 --> 00:20:10.080 relatively the same, you know. It's about 00:20:10.080 --> 00:20:13.039 finding ways to optimize the way we 00:20:13.039 --> 00:20:14.880 store the data about an Org Mode file 00:20:14.880 --> 00:20:16.640 and how we retrieve it, 00:20:16.640 --> 00:20:20.400 and SQL for us seems to seem to be a 00:20:20.400 --> 00:20:22.159 good idea. Now, obviously, 00:20:22.159 --> 00:20:24.240 maybe we could do something about 00:20:24.240 --> 00:20:26.080 Org Mode, but the problem is, I think, a 00:20:26.080 --> 00:20:27.360 background process 00:20:27.360 --> 00:20:30.799 is not necessarily in 00:20:30.799 --> 00:20:32.960 the core mentality of Org Mode. But it's 00:20:32.960 --> 00:20:36.080 definitely something that we could suggest 00:20:36.080 --> 00:20:37.679 when we are a little more mature, because, well, 00:20:37.679 --> 00:20:40.960 org-roam was started last February and so 00:20:40.960 --> 00:20:43.008 it's a fairly young project in a way. 00:20:43.008 --> 00:20:45.840 I see plenty more questions, but 00:20:45.840 --> 00:20:48.400 I'm out of time, folks, so I'm not sure. 00:20:48.400 --> 00:20:50.559 The other speaker is probably ready. 00:20:50.559 --> 00:20:52.559 So what I'll do is I'll probably try to 00:20:52.559 --> 00:20:54.000 answer your questions when I get the 00:20:54.000 --> 00:20:55.360 time inside the pad, 00:20:55.360 --> 00:20:58.960 but feel free to ping me on IRC 00:20:58.960 --> 00:21:01.039 or on the different channels we have 00:21:01.039 --> 00:21:02.320 for org-roam, and 00:21:02.320 --> 00:21:04.000 I'll answer them with as much 00:21:04.000 --> 00:21:05.520 energy as I can gather. 00:21:05.520 --> 00:21:07.600 All right, thank you so much. 00:21:08.880 --> 00:21:10.808 (Amin: Thank you again very much, Leo.) 00:21:10.808 --> 00:21:14.000 Leo: And that was me done for today. So you'll see me at the end, but I'm 00:21:14.000 --> 00:21:15.840 officially done and I am free of 00:21:15.840 --> 00:21:17.840 thoughts. I can focus on 00:21:17.840 --> 00:21:22.640 sleeping, probably. (Amin: Awesome) 00:21:22.640 --> 00:21:27.760 Leo: See you guys later. Bye.