WEBVTT 00:00:00.000 --> 00:00:03.760 Okay, hi everyone. Yeah, sorry George, I'm just going to 00:00:03.760 --> 00:00:06.520 introduce you a little bit. 00:00:06.520 --> 00:00:10.500 For context, generally when I arrive on a BBB room, I have 00:00:10.500 --> 00:00:11.880 a little bit of time to chat 00:00:11.880 --> 00:00:14.810 with the speaker, but right now I made it right on time and 00:00:14.810 --> 00:00:16.040 I barely had time to say 00:00:16.040 --> 00:00:19.190 hi to George, but I will do it live. Hi George, how are you 00:00:19.190 --> 00:00:19.720 doing? 00:00:19.720 --> 00:00:26.330 Hello! No, doing well. I do think some of the content in 00:00:26.330 --> 00:00:28.520 the etherpad got overridden. 00:00:28.520 --> 00:00:33.520 Like I was typing out a whole bunch of different stuff with 00:00:33.520 --> 00:00:36.320 other workflows to develop, but 00:00:36.320 --> 00:00:40.330 I will try to find where that went. Yeah, so George, 00:00:40.330 --> 00:00:41.640 nothing is lost. Don't worry 00:00:41.640 --> 00:00:47.260 about this, we will get it back to you. I believe it's my 00:00:47.260 --> 00:00:49.760 fault. I looked at the pad 00:00:49.760 --> 00:00:51.920 and I said, "Oh, this is not a question, this is a pad." 00:00:51.920 --> 00:00:53.800 And I think one of my Helvan 00:00:53.800 --> 00:00:56.060 helps in the background said, "Oh yeah, I'm just going to 00:00:56.060 --> 00:00:57.400 wipe this all out." But don't 00:00:57.400 --> 00:01:00.360 worry, it's still in the history and we'll be able to find 00:01:00.360 --> 00:01:01.600 all the code you had. 00:01:01.600 --> 00:01:07.310 Cool, we'll find it. Yeah, so... So George, I'm just going 00:01:07.310 --> 00:01:08.240 to... Sorry, this 00:01:08.240 --> 00:01:11.940 is my task, to give you some context otherwise. Do you have 00:01:11.940 --> 00:01:13.840 the pad open in front of you? 00:01:13.840 --> 00:01:18.030 I do, yeah. I have the pad open. Would you be able to take 00:01:18.030 --> 00:01:19.000 questions from there? 00:01:19.000 --> 00:01:23.630 Yeah, so we can take questions from here. I think we've 00:01:23.630 --> 00:01:26.240 already answered a bunch. So 00:01:26.240 --> 00:01:30.060 one of the ones that's in there right now is, "Does it 00:01:30.060 --> 00:01:32.720 become unwieldy due to the indirection 00:01:32.720 --> 00:01:36.000 of the edit org source to use org mode and the virtual 00:01:36.000 --> 00:01:37.880 linear programming as the project 00:01:37.880 --> 00:01:44.250 becomes larger?" It can. So I generally use it for... I 00:01:44.250 --> 00:01:47.160 find parts of the project that 00:01:47.160 --> 00:01:53.390 are more useful for it and to be dropping in. So like on a 00:01:53.390 --> 00:01:56.400 large project, when I'm working 00:01:56.400 --> 00:02:01.200 with other people, I do not use it as much because you need 00:02:01.200 --> 00:02:03.680 to actually be able to modify 00:02:03.680 --> 00:02:08.480 the code. However, I just recently found out about a 00:02:08.480 --> 00:02:11.160 feature called detangle, which is 00:02:11.160 --> 00:02:15.060 the inverse of the tangle where as long as there's certain 00:02:15.060 --> 00:02:17.120 tokens emitted into your file, 00:02:17.120 --> 00:02:20.110 you'll be able to take the file and re-update back into the 00:02:20.110 --> 00:02:21.960 linear programming document, 00:02:21.960 --> 00:02:24.840 which is kind of mind-blowing as a feature. I have not had 00:02:24.840 --> 00:02:26.280 a chance to experiment with 00:02:26.280 --> 00:02:34.170 it yet though, and I think that could work really, really 00:02:34.170 --> 00:02:35.920 well. Thanks for restoring 00:02:35.920 --> 00:02:41.090 the stuff I was putting in. "I want to take a look at the 00:02:41.090 --> 00:02:42.880 files used in your demo. Are 00:02:42.880 --> 00:02:47.420 they somewhere online?" So I dropped the stuff I used for 00:02:47.420 --> 00:02:51.720 the Arduino stuff. Now, caveat 00:02:51.720 --> 00:02:55.220 with that, I was figuring out the workflows as I did it. So 00:02:55.220 --> 00:02:57.320 there's like a readme of... 00:02:57.320 --> 00:03:02.110 I was both figuring out Arduino and workflows. So the 00:03:02.110 --> 00:03:05.400 initial readme has a bunch of projects 00:03:05.400 --> 00:03:08.270 as I kind of did them one by one. So the workflow becomes 00:03:08.270 --> 00:03:10.240 more mature the further down the list 00:03:10.240 --> 00:03:16.080 you are. The ones earlier on are just copy-pasting a lot. 00:03:16.080 --> 00:03:21.600 Do we have any other questions? This 00:03:21.600 --> 00:03:25.590 is not the same shirt. You noticed. Also, the room's been 00:03:25.590 --> 00:03:27.440 rearranged because my wife 00:03:27.440 --> 00:03:30.640 made me move everything. 00:03:30.640 --> 00:03:33.350 That's fine. Don't worry about it. It looks fine in the 00:03:33.350 --> 00:03:35.000 background. I was implying that 00:03:35.000 --> 00:03:37.290 you know the seven mistake game, trying to see what changed 00:03:37.290 --> 00:03:38.360 in the background. I was 00:03:38.360 --> 00:03:40.330 very interested though in some of the stuff that I was 00:03:40.330 --> 00:03:41.720 seeing, including this dinner in 00:03:41.720 --> 00:03:42.720 the background. 00:03:42.720 --> 00:03:50.080 Yeah. Yeah, yeah. Yeah. There you go. There. It's my five- 00:03:50.080 --> 00:03:54.560 year-old's birthday party in 00:03:54.560 --> 00:04:00.030 the summer. And it's been far more useful as a video 00:04:00.030 --> 00:04:03.680 background than a bunch of five-year-olds 00:04:03.680 --> 00:04:04.680 were impressed with it. 00:04:04.680 --> 00:04:08.350 Yeah. Sorry. I do have to... It begs a question though, 00:04:08.350 --> 00:04:10.760 which is it's a fairly large structure 00:04:10.760 --> 00:04:14.080 to be made by a five-year-old. Like it is several five- 00:04:14.080 --> 00:04:15.240 years-old tall. 00:04:15.240 --> 00:04:19.950 Yeah. Well, the idea was I wanted them to be able to fit 00:04:19.950 --> 00:04:23.160 them. But it didn't quite work. 00:04:23.160 --> 00:04:25.370 Yeah. It definitely feels like the mouth would be able to 00:04:25.370 --> 00:04:26.680 fit a five-year-old. Yeah. So I 00:04:26.680 --> 00:04:28.730 think we're good. We might want to get back on track. Sorry 00:04:28.730 --> 00:04:29.400 for getting distracted by 00:04:29.400 --> 00:04:32.680 this menacing presence in the background. 00:04:32.680 --> 00:04:36.090 I had not heard of org-transclusion. I should look into 00:04:36.090 --> 00:04:41.400 this. I'm waiting for the next one 00:04:41.400 --> 00:04:47.800 to get typed up. I'll post a couple more things that... 00:04:47.800 --> 00:04:54.960 Here. Into the chat. So a couple... 00:04:54.960 --> 00:05:00.430 I mentioned in the chat that first of all, that org-entry- 00:05:00.430 --> 00:05:03.480 get thing to be able to... 00:05:03.480 --> 00:05:07.660 So you could put properties into... You could put variables 00:05:07.660 --> 00:05:09.480 into properties on your org 00:05:09.480 --> 00:05:13.200 outline and then have them be referenced is really, really, 00:05:13.200 --> 00:05:15.600 really powerful. Because especially 00:05:15.600 --> 00:05:19.470 because you can call into blocks from other parts of the 00:05:19.470 --> 00:05:22.400 outline. You can basically... 00:05:22.400 --> 00:05:25.050 You know how... I don't know if anyone here does React. But 00:05:25.050 --> 00:05:26.360 there's something that's very 00:05:26.360 --> 00:05:29.640 powerful that happens because you could do... You kind of 00:05:29.640 --> 00:05:31.240 have dynamic scoping over the 00:05:31.240 --> 00:05:35.940 DOM tree. And you get a similar type of power that you get 00:05:35.940 --> 00:05:38.760 with React contexts in org mode. 00:05:38.760 --> 00:05:41.540 Because you have variables that you could set depending on 00:05:41.540 --> 00:05:42.800 what's the closest point 00:05:42.800 --> 00:05:48.570 in the outline tree is. And then have defaults cascade 00:05:48.570 --> 00:05:49.640 upwards. 00:05:49.640 --> 00:05:57.160 Let's see. Are workflows as they are in your life closely 00:05:57.160 --> 00:06:01.400 tied to particular projects? 00:06:01.400 --> 00:06:05.600 Or are they general workflows? So I think there's general 00:06:05.600 --> 00:06:09.040 ones. Like repository source 00:06:09.040 --> 00:06:12.820 code analysis that I've gone to and used over and over 00:06:12.820 --> 00:06:16.120 again. So I mentioned down below 00:06:16.120 --> 00:06:24.200 Codemod and JORS. That's a pretty common trick I use to... 00:06:24.200 --> 00:06:25.480 Like just when I sit down with 00:06:25.480 --> 00:06:28.770 a project to analyze its history. Make a movie of how it 00:06:28.770 --> 00:06:30.480 plays out. And a lot of that is 00:06:30.480 --> 00:06:35.820 very... It's easiest to orchestrate in org. So here 00:06:35.820 --> 00:06:39.640 actually I'll drop... I'll drop one 00:06:39.640 --> 00:06:44.560 right at the top of the other cool workflows. Here's an 00:06:44.560 --> 00:06:48.840 example of something I did... I 00:06:48.840 --> 00:06:54.080 don't want that to... We'll figure out how to make that not 00:06:54.080 --> 00:06:57.240 be... There we go. 00:06:57.240 --> 00:07:02.870 So here's an example I did where it was like... I'll clean 00:07:02.870 --> 00:07:05.880 that up a little bit. But where 00:07:05.880 --> 00:07:13.400 you basically are using org. Within org you use Codemod. 00:07:13.400 --> 00:07:14.320 Here's the thing. This stuff 00:07:14.320 --> 00:07:18.050 is hard to do if you can't just write about it and say this 00:07:18.050 --> 00:07:19.960 is what I'm trying to do. 00:07:19.960 --> 00:07:23.000 And talk about it in prose. Because you're doing things 00:07:23.000 --> 00:07:24.600 like analysis and you have to 00:07:24.600 --> 00:07:28.990 have it all ready in front of mind. And if you don't have 00:07:28.990 --> 00:07:31.400 that... And if you have... 00:07:31.400 --> 00:07:33.980 You just have an empty document. You can type into whatever 00:07:33.980 --> 00:07:35.560 . You can type what you're trying 00:07:35.560 --> 00:07:39.690 to do. And then figure out how to do it in terms of these 00:07:39.690 --> 00:07:40.520 blocks. 00:07:40.520 --> 00:07:43.970 So for example, this is pretty generic and something I end 00:07:43.970 --> 00:07:45.600 up going to a lot. Where you 00:07:45.600 --> 00:07:49.520 use something like Codemod to basically run analysis on 00:07:49.520 --> 00:07:52.480 like... Well, what sort of stuff 00:07:52.480 --> 00:07:55.590 does... Or I guess that first one's not even Codemod. That 00:07:55.590 --> 00:07:58.320 first one's just Git log analysis. 00:07:58.320 --> 00:08:02.730 What sort of stuff has a person done? What files have they 00:08:02.730 --> 00:08:04.200 touched? And then like... 00:08:04.200 --> 00:08:06.380 Okay. I don't want to see the full list of the files. I 00:08:06.380 --> 00:08:07.640 just want to get an idea of what 00:08:07.640 --> 00:08:12.750 areas they've worked. So really take the first few director 00:08:12.750 --> 00:08:14.640 ies of there. And just emit that 00:08:14.640 --> 00:08:18.770 out to the screen. And now I can kind of go by each author 00:08:18.770 --> 00:08:20.240 and figure that out. And then 00:08:20.240 --> 00:08:24.220 the next example is me using the Codemod project to do 00:08:24.220 --> 00:08:28.720 something like... Well, what's... Let's 00:08:28.720 --> 00:08:32.070 look at coupling. So whenever one file within this project 00:08:32.070 --> 00:08:33.200 changes, what other files are 00:08:33.200 --> 00:08:36.090 likely to change? Oh, and I don't care about test files. 00:08:36.090 --> 00:08:37.760 And I don't care about doc files. 00:08:37.760 --> 00:08:40.440 And I don't care about package log or whatever. And then 00:08:40.440 --> 00:08:42.680 again, you get that analysis. It's 00:08:42.680 --> 00:08:43.680 very useful. 00:08:43.680 --> 00:08:46.190 - Sorry, George. Interjecting real quickly to say two 00:08:46.190 --> 00:08:47.880 things. First, we have opened the 00:08:47.880 --> 00:08:51.260 Q&A if you want to join and ask questions to George or... 00:08:51.260 --> 00:08:52.560 Just like I'm doing right 00:08:52.560 --> 00:08:55.810 now. And also, George, I am a little lost. You are the 00:08:55.810 --> 00:08:57.880 green collar on the bad, right? 00:08:57.880 --> 00:09:04.240 - I am the what? Oh, I am now the... Yes, I am the green 00:09:04.240 --> 00:09:05.480 collar. 00:09:05.480 --> 00:09:07.200 - Okay. So I've lost... 00:09:07.200 --> 00:09:11.000 - No, you're the green collar. I am now... Goodness. 00:09:11.000 --> 00:09:13.770 - Okay. Can you tell me at which time you were? Because I 00:09:13.770 --> 00:09:15.120 was a little lost in the bad 00:09:15.120 --> 00:09:16.520 on what you were commenting on right now. 00:09:16.520 --> 00:09:19.600 - Okay. Yeah, yeah, yeah. That was... I'm purple collar now 00:09:19.600 --> 00:09:20.920 . So that first block under 00:09:20.920 --> 00:09:24.000 other cool workflows is what I just put in there. 00:09:24.000 --> 00:09:26.280 - Okay. Cool. It is on screen now. 00:09:26.280 --> 00:09:29.480 - Yeah, yeah, yeah. And then there's a question, possibly 00:09:29.480 --> 00:09:31.320 weak understanding here, but why 00:09:31.320 --> 00:09:36.930 direct use of Tangle versus Org Babel? So take something 00:09:36.930 --> 00:09:40.160 like Arduino CLI. That is running 00:09:40.160 --> 00:09:44.810 at the file system level. Well, okay, no. Arduino CLI works 00:09:44.810 --> 00:09:46.360 with the file system. You're 00:09:46.360 --> 00:09:51.010 telling it, "Here are some files. Go do some stuff with 00:09:51.010 --> 00:09:55.480 those files." So in order to do 00:09:55.480 --> 00:09:59.560 that at the... And you have to have a specific type of file 00:09:59.560 --> 00:10:01.640 system. So in order to do that 00:10:01.640 --> 00:10:05.280 directly in Org Babel, I'd have to write an Org Babel 00:10:05.280 --> 00:10:07.840 extension, which are not super easy 00:10:07.840 --> 00:10:11.450 to write, that kind of writes files into a temp directory 00:10:11.450 --> 00:10:13.320 in a certain format, blah, 00:10:13.320 --> 00:10:16.720 blah, blah, which is hard. What's a lot easier is just tell 00:10:16.720 --> 00:10:18.600 Tangle to just dump the file 00:10:18.600 --> 00:10:22.020 and have a file watcher running. And whenever it happens, 00:10:22.020 --> 00:10:24.120 it just deploys to an Arduino, 00:10:24.120 --> 00:10:33.630 for example. Yeah, so it's basically a way of integrating 00:10:33.630 --> 00:10:35.120 with things that require the 00:10:35.120 --> 00:10:36.120 file system. 00:10:36.120 --> 00:10:41.650 - Sorry, George, was there a question for me? I'm not sure 00:10:41.650 --> 00:10:43.160 I was... 00:10:43.160 --> 00:10:46.240 - Oh, no, no, no, no, no. I think that was the answer to 00:10:46.240 --> 00:10:48.120 the question. I'm now looking 00:10:48.120 --> 00:10:49.120 to see if there's... 00:10:49.120 --> 00:10:50.120 - Okay, sorry. 00:10:50.120 --> 00:10:51.120 - Yeah, we have more questions. 00:10:51.120 --> 00:10:55.050 - Also, George, to give you a little bit of a heads up, we 00:10:55.050 --> 00:10:57.240 have opened the Q&A right now, 00:10:57.240 --> 00:11:00.830 and people should be able to join. But we only have about 00:11:00.830 --> 00:11:02.640 three more minutes until we 00:11:02.640 --> 00:11:06.260 need to go on a little bit of a break. So feel free to 00:11:06.260 --> 00:11:08.480 answer as many questions on the 00:11:08.480 --> 00:11:11.500 pad as possible. I don't see anyone in the chat, on BBB 00:11:11.500 --> 00:11:13.240 right now, so questions on the 00:11:13.240 --> 00:11:14.240 pad. 00:11:14.240 --> 00:11:20.400 - Yeah, so I'll just put a couple more things. I'm a big 00:11:20.400 --> 00:11:24.720 fan of plant QML, and I will regularly 00:11:24.720 --> 00:11:30.750 use plant QML to do both architecture diagrams and wire 00:11:30.750 --> 00:11:34.800 frames using their salt language for 00:11:34.800 --> 00:11:37.850 mockups. So I'll write an entire technical document being 00:11:37.850 --> 00:11:39.160 like, "Here's what we should 00:11:39.160 --> 00:11:42.250 do," and be putting stuff directly in it. People see it, 00:11:42.250 --> 00:11:45.040 and they're like, "Oh, mockup's 00:11:45.040 --> 00:11:50.990 great." Not directly about... Oh, TreeSitter integration, 00:11:50.990 --> 00:11:53.600 because you can now use TreeSitter. 00:11:53.600 --> 00:11:57.110 So you can use TreeSitter to analyze other code files. So 00:11:57.110 --> 00:11:59.080 for example, I recently wrote 00:11:59.080 --> 00:12:03.210 a little TreeSitter script that would pop open a TypeScript 00:12:03.210 --> 00:12:05.200 file, analyze all the exports, 00:12:05.200 --> 00:12:08.420 and grab everything that's exported along with its .com and 00:12:08.420 --> 00:12:10.000 just dump it into my document 00:12:10.000 --> 00:12:14.780 so I can review it and update it just by with a keystroke 00:12:14.780 --> 00:12:18.160 as that file evolves. And just 00:12:18.160 --> 00:12:23.820 an honorable mention, I would say I recently found out Org- 00:12:23.820 --> 00:12:25.720 Rome UI. So if you're an Org-Rome 00:12:25.720 --> 00:12:29.050 user, that's an awesome visualization where it starts a 00:12:29.050 --> 00:12:30.720 server and shows you a little 00:12:30.720 --> 00:12:35.370 web page with everything visualized. And just in terms of 00:12:35.370 --> 00:12:38.720 ... It's nice and cool and useful, 00:12:38.720 --> 00:12:42.690 but it's also a great politics hack where you start a new 00:12:42.690 --> 00:12:44.680 job or a team, and then you 00:12:44.680 --> 00:12:47.670 spend a month, a week taking your notes. So you have 80 00:12:47.670 --> 00:12:49.080 notes or something like that, 00:12:49.080 --> 00:12:50.800 because they're a little bit... And then at the end of the 00:12:50.800 --> 00:12:51.760 week, you do your one-on-one 00:12:51.760 --> 00:12:54.560 with your manager. You're like, "Here's the visualization 00:12:54.560 --> 00:12:56.360 and everything," and your jaw 00:12:56.360 --> 00:12:57.360 drops. Yes. 00:12:57.360 --> 00:13:00.750 It is. It is amazing. Org-Rome UI is amazing. I'm a little 00:13:00.750 --> 00:13:02.480 biased, so I won't talk too much 00:13:02.480 --> 00:13:04.500 about it because people in the know will know that I've 00:13:04.500 --> 00:13:06.040 actually helped with the development 00:13:06.040 --> 00:13:08.700 of Org-Rome. But yes, Org-Rome UI is so great. I also 00:13:08.700 --> 00:13:11.000 worked in a team where we were presenting 00:13:11.000 --> 00:13:14.930 Org-Rome and Org-Rome UI to people who had no idea of what 00:13:14.930 --> 00:13:16.840 was Emacs or Org-Mode, but 00:13:16.840 --> 00:13:21.420 they could see atoms and they could see them being linked. 00:13:21.420 --> 00:13:24.160 It was so amazing. It just works. 00:13:24.160 --> 00:13:26.320 It's great when things just work. 00:13:26.320 --> 00:13:27.320 Yeah. 00:13:27.320 --> 00:13:31.120 All right, George. Any last thing you'd like to say to the 00:13:31.120 --> 00:13:32.960 stream before we wrap up? 00:13:32.960 --> 00:13:36.980 Nope. Put more workflows in the document if you have any 00:13:36.980 --> 00:13:38.320 other ideas too. 00:13:38.320 --> 00:13:41.440 Cool. Amazing. We'll be on the lookout for this. So George, 00:13:41.440 --> 00:13:42.440 thank you so much for your 00:13:42.440 --> 00:13:45.640 presentation and for your questions, and we will see you 00:13:45.640 --> 00:13:46.760 later probably. 00:13:46.760 --> 00:13:47.760 Thank you. Bye-bye. 00:13:47.760 --> 00:13:48.760 Bye-bye. 00:13:48.760 --> 00:13:58.820 I'm still there. See you in a bit, folks. Oh, sorry. Sorry. 00:13:58.820 --> 00:14:00.920 I'm panicking. Give me 00:14:00.920 --> 00:14:08.300 a second. Sure. You saw me whisper right now. We will be 00:14:08.300 --> 00:14:09.640 going on a little bit of a break 00:14:09.640 --> 00:14:14.960 right now. The next talk will be due in about 10 minutes. 00:14:14.960 --> 00:14:18.200 So at 35 of the current hour, 00:14:18.200 --> 00:14:21.450 we will be reconvening on Gen for the next talk. So see you 00:14:21.450 --> 00:14:23.560 in a bit and enjoy the break. 00:14:23.560 --> 00:14:29.160 You are currently the only person in this conference. 00:14:29.160 --> 00:14:41.310 Give me just a second. I'll put some music for the break. 00:14:41.310 --> 00:14:45.240 Right now I'm doing too many 00:14:45.240 --> 00:14:47.140 things at the same time. So we will have to wait a little 00:14:47.140 --> 00:14:48.280 bit for everything to work. 00:14:48.280 --> 00:14:50.340 I'll put the music on first so that you have something nice 00:14:50.340 --> 00:14:51.560 to listen to, which is Shoshin 00:14:51.560 --> 00:15:04.440 Music the Lloyd. 00:15:04.440 --> 00:15:20.440 (Music) 00:15:20.440 --> 00:15:40.440 (Music) 00:15:40.440 --> 00:16:00.440 (Music) 00:16:00.440 --> 00:16:20.440 (Music) 00:16:20.440 --> 00:16:40.440 (Music) 00:16:40.440 --> 00:17:00.440 (Music) 00:17:00.440 --> 00:17:20.440 (Music) 00:17:20.440 --> 00:17:40.440 (Music) 00:17:40.440 --> 00:17:54.440 (Music)