From a02885944e69a3f714814a2811ec02ffa8a11e74 Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sat, 19 Dec 2020 01:08:04 -0500 Subject: Add subtitles for 13, 14, 15 --- ...--14-readme-driven-design--adam-ard-autogen.vtt | 1426 -------------------- 1 file changed, 1426 deletions(-) delete mode 100644 2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt (limited to '2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt') diff --git a/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt b/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt deleted file mode 100644 index 3179635f..00000000 --- a/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt +++ /dev/null @@ -1,1426 +0,0 @@ -WEBVTT - -00:00:03.600 --> 00:00:04.400 -hello - -00:00:04.400 --> 00:00:06.560 -welcome to readme driven design in Emacs - -00:00:06.560 --> 00:00:08.400 -by adam aard - -00:00:08.400 --> 00:00:10.800 -if you're a programmer you're accustomed - -00:00:10.800 --> 00:00:12.559 -to putting a readme file at the root of - -00:00:12.559 --> 00:00:13.759 -your project - -00:00:13.759 --> 00:00:16.400 -and it's usually a markdown file but if - -00:00:16.400 --> 00:00:17.600 -you use an org - -00:00:17.600 --> 00:00:20.720 -more an org mode file instead you can - -00:00:20.720 --> 00:00:22.560 -take advantage of the great features - -00:00:22.560 --> 00:00:24.400 -that org mode provides including - -00:00:24.400 --> 00:00:25.920 -literate programming - -00:00:25.920 --> 00:00:28.000 -which lets you generate your source code - -00:00:28.000 --> 00:00:31.840 -and markdown documentation dynamically - -00:00:31.840 --> 00:00:34.719 -I want to walk you through a little bit - -00:00:34.719 --> 00:00:37.120 -of what this looks like - -00:00:37.120 --> 00:00:39.440 -when you start a project especially if - -00:00:39.440 --> 00:00:41.280 -if you use something like github you - -00:00:41.280 --> 00:00:43.320 -begin with an automatically generated - -00:00:43.320 --> 00:00:47.039 -readme.md file so just delete that - -00:00:47.039 --> 00:00:50.239 -and instead create a readme.org file - -00:00:50.239 --> 00:00:51.920 -starting with an empty org file like you - -00:00:51.920 --> 00:00:54.800 -see here you can begin - -00:00:54.800 --> 00:00:56.559 -by recording important information about - -00:00:56.559 --> 00:00:59.440 -your project goals you can add diagrams - -00:00:59.440 --> 00:01:01.920 -code snippets to-do lists time tracking - -00:01:01.920 --> 00:01:03.520 -and much more - -00:01:03.520 --> 00:01:05.360 -I'm going to drop in some documentation - -00:01:05.360 --> 00:01:07.760 -that I r that I've written about - -00:01:07.760 --> 00:01:10.840 -about my project here so you can kind of - -00:01:10.840 --> 00:01:12.240 -see - -00:01:12.240 --> 00:01:15.280 -what this would look like - -00:01:15.280 --> 00:01:17.119 -so as you can see I have a title and a - -00:01:17.119 --> 00:01:20.320 -description and then a sub section - -00:01:20.320 --> 00:01:23.840 -as well as some code snippets - -00:01:23.840 --> 00:01:25.520 -and you can see that orgmo does a great - -00:01:25.520 --> 00:01:28.240 -job of formatting lists and - -00:01:28.240 --> 00:01:31.280 -code sections diagrams and so forth - -00:01:31.280 --> 00:01:33.920 -it's good or it's as good or better than - -00:01:33.920 --> 00:01:35.040 -markdown - -00:01:35.040 --> 00:01:37.520 -but when you use it in the Emacs you can - -00:01:37.520 --> 00:01:38.880 -do a lot more - -00:01:38.880 --> 00:01:40.479 -for example you can dynamically create - -00:01:40.479 --> 00:01:43.360 -diagrams using graphviz - -00:01:43.360 --> 00:01:45.200 -from a text description so if you go to - -00:01:45.200 --> 00:01:46.560 -this source block here - -00:01:46.560 --> 00:01:49.439 -and hit control c control c you'll see - -00:01:49.439 --> 00:01:51.439 -that we generate a - -00:01:51.439 --> 00:01:55.439 -diagram dynamically you can run - -00:01:55.439 --> 00:01:59.200 -so you can run these code snippets in - -00:01:59.200 --> 00:02:00.799 -place and get the results - -00:02:00.799 --> 00:02:03.040 -to show up inside of your your file - -00:02:03.040 --> 00:02:08.000 -which is a really powerful paradigm - -00:02:08.000 --> 00:02:10.640 -but most important most importantly for - -00:02:10.640 --> 00:02:11.520 -the - -00:02:11.520 --> 00:02:14.800 -purposes my purpose is here - -00:02:14.800 --> 00:02:17.200 -orgmo provides you the ability to do - -00:02:17.200 --> 00:02:19.520 -literate programming - -00:02:19.520 --> 00:02:21.440 -so take a quick look at this diagram - -00:02:21.440 --> 00:02:23.200 -that I generated here - -00:02:23.200 --> 00:02:25.360 -and gives you a quick overview of what I - -00:02:25.360 --> 00:02:27.520 -mean by literate programming - -00:02:27.520 --> 00:02:31.200 -and how I'm using it you can see - -00:02:31.200 --> 00:02:33.920 -that we start with a readme.org file on - -00:02:33.920 --> 00:02:34.720 -top - -00:02:34.720 --> 00:02:36.879 -at this point we can do one of two - -00:02:36.879 --> 00:02:37.920 -things - -00:02:37.920 --> 00:02:41.280 -tangle or weave tangle is used to - -00:02:41.280 --> 00:02:42.720 -describe the process of - -00:02:42.720 --> 00:02:46.319 -generating source code while weave - -00:02:46.319 --> 00:02:47.599 -is the process of generating - -00:02:47.599 --> 00:02:49.840 -documentation these are terms that - -00:02:49.840 --> 00:02:51.920 -donald knuth used - -00:02:51.920 --> 00:02:53.840 -and he's the one that came up with the - -00:02:53.840 --> 00:02:55.519 -idea of literate programming - -00:02:55.519 --> 00:02:59.920 -in the early 1980s - -00:02:59.920 --> 00:03:01.519 -but this is really all that there is to - -00:03:01.519 --> 00:03:04.480 -it you just - -00:03:04.480 --> 00:03:06.400 -who are simply using literate illiterate - -00:03:06.400 --> 00:03:07.840 -source file - -00:03:07.840 --> 00:03:10.319 -in this case the readme.org to generate - -00:03:10.319 --> 00:03:11.680 -the rest of the project - -00:03:11.680 --> 00:03:17.120 -the rest of the project files basically - -00:03:17.120 --> 00:03:20.959 -so let's dig in to the details of how - -00:03:20.959 --> 00:03:22.640 -this works - -00:03:22.640 --> 00:03:24.560 -and I hope you hopefully you'll see how - -00:03:24.560 --> 00:03:26.159 -cool this is - -00:03:26.159 --> 00:03:28.959 -so returning to the file here let's - -00:03:28.959 --> 00:03:31.120 -assume we have enough documentation now - -00:03:31.120 --> 00:03:32.080 -that we want to get started - -00:03:32.080 --> 00:03:34.159 -coding so maybe we'll just start with - -00:03:34.159 --> 00:03:35.519 -like a hello world - -00:03:35.519 --> 00:03:38.159 -app just so we can make sure that our - -00:03:38.159 --> 00:03:41.519 -environment is set up correctly - -00:03:41.519 --> 00:03:47.120 -so let's get started with a code block - -00:03:47.120 --> 00:03:49.519 -so I created a little snippet to help me - -00:03:49.519 --> 00:03:50.319 -add - -00:03:50.319 --> 00:03:52.239 -a source block for literate programming - -00:03:52.239 --> 00:03:53.599 -quickly - -00:03:53.599 --> 00:03:56.959 -and there's not much to it - -00:03:56.959 --> 00:03:58.799 -but there is some important annotations - -00:03:58.799 --> 00:04:01.599 -here so there's - -00:04:01.599 --> 00:04:04.080 -excuse me there's a there's a property - -00:04:04.080 --> 00:04:05.200 -called tangle - -00:04:05.200 --> 00:04:09.360 -and that takes a value of a file name - -00:04:09.360 --> 00:04:13.280 -and then there's also a no web property - -00:04:13.280 --> 00:04:18.880 -called no export - -00:04:18.880 --> 00:04:23.759 -and basically - -00:04:23.759 --> 00:04:26.800 -basically the no export will explain - -00:04:26.800 --> 00:04:28.639 -that a little bit - -00:04:28.639 --> 00:04:32.080 -more later um it has has to do with how - -00:04:32.080 --> 00:04:33.919 -the tangling - -00:04:33.919 --> 00:04:37.600 -is uh done in the tangle step versus the - -00:04:37.600 --> 00:04:39.280 -weave step and I'll explain that a - -00:04:39.280 --> 00:04:41.199 -little bit more but the tangle - -00:04:41.199 --> 00:04:45.199 -field just simply tells tells uh - -00:04:45.199 --> 00:04:48.320 -Emacs where it needs to generate the - -00:04:48.320 --> 00:04:50.320 -main.go file and where it needs to put - -00:04:50.320 --> 00:04:55.360 -it on the file system - -00:04:55.360 --> 00:04:57.680 -uh you'll you'll notice that we we're - -00:04:57.680 --> 00:04:59.040 -going to use go - -00:04:59.040 --> 00:05:01.440 -that's just the language that I've been - -00:05:01.440 --> 00:05:02.160 -using - -00:05:02.160 --> 00:05:05.360 -the most lately uh but - -00:05:05.360 --> 00:05:07.360 -this programming strategy is language - -00:05:07.360 --> 00:05:08.400 -agnostic - -00:05:08.400 --> 00:05:12.080 -you could use any language or any mix - -00:05:12.080 --> 00:05:14.720 -of languages you could create some files - -00:05:14.720 --> 00:05:16.560 -in python some files and go - -00:05:16.560 --> 00:05:19.520 -some files in in lisp or whatever you - -00:05:19.520 --> 00:05:21.520 -want - -00:05:21.520 --> 00:05:24.720 -and so but let's - -00:05:24.720 --> 00:05:28.000 -uh let's create just a little hello - -00:05:28.000 --> 00:05:29.440 -world - -00:05:29.440 --> 00:05:32.320 -let's use another snippet here to - -00:05:32.320 --> 00:05:33.520 -generate - -00:05:33.520 --> 00:05:36.560 -the basics of a go program - -00:05:36.560 --> 00:05:40.240 -so I'm just going to print - -00:05:40.240 --> 00:05:44.960 -hello world - -00:05:44.960 --> 00:05:48.560 -so that's and then - -00:05:48.560 --> 00:05:52.320 -let's make it a section in our - -00:05:52.320 --> 00:05:55.280 -file so now you can see we've got this - -00:05:55.280 --> 00:05:56.400 -snippet - -00:05:56.400 --> 00:05:59.600 -um when you have a source block in - -00:05:59.600 --> 00:06:01.600 -inside of org mode you can easily pop - -00:06:01.600 --> 00:06:02.880 -into a - -00:06:02.880 --> 00:06:04.960 -language specific buffer by typing - -00:06:04.960 --> 00:06:07.680 -control c single quote - -00:06:07.680 --> 00:06:10.240 -so you can see now I have a a go a - -00:06:10.240 --> 00:06:12.160 -buffer that's in go mode - -00:06:12.160 --> 00:06:14.240 -and gives you all the ability to edit - -00:06:14.240 --> 00:06:15.520 -like you would - -00:06:15.520 --> 00:06:18.800 -normally if you hit ctrl c - -00:06:18.800 --> 00:06:20.800 -single quote again then it goes back and - -00:06:20.800 --> 00:06:22.639 -any changes you - -00:06:22.639 --> 00:06:25.280 -make would will be updated there but you - -00:06:25.280 --> 00:06:26.160 -can do quite a bit - -00:06:26.160 --> 00:06:28.000 -just inside of here too there's quite a - -00:06:28.000 --> 00:06:29.199 -bit of - -00:06:29.199 --> 00:06:33.360 -language specific - -00:06:33.360 --> 00:06:35.440 -functionality just in place and so you - -00:06:35.440 --> 00:06:36.880 -don't always have to go over to a - -00:06:36.880 --> 00:06:38.080 -separate buffer - -00:06:38.080 --> 00:06:42.319 -but it's a it's a nice option sometimes - -00:06:42.319 --> 00:06:44.319 -but now that you have the code in here - -00:06:44.319 --> 00:06:46.720 -you're going to want to run it - -00:06:46.720 --> 00:06:48.560 -but right now it just lives here in this - -00:06:48.560 --> 00:06:50.240 -documentation - -00:06:50.240 --> 00:06:52.160 -so you need to get a copy of it into a - -00:06:52.160 --> 00:06:53.840 -separate file - -00:06:53.840 --> 00:06:57.440 -and that's the tangle process that you - -00:06:57.440 --> 00:07:01.360 -you need to follow there so I'm gonna - -00:07:01.360 --> 00:07:03.360 -drop in a little bit more doc a little - -00:07:03.360 --> 00:07:05.280 -bit more - -00:07:05.280 --> 00:07:12.240 -documentation really quick here - -00:07:12.240 --> 00:07:17.360 -okay all right so just kind of as a - -00:07:17.360 --> 00:07:21.520 -kind of as a side note I like to follow - -00:07:21.520 --> 00:07:24.800 -this process uh whenever having whenever - -00:07:24.800 --> 00:07:26.639 -I have an operation to perform I - -00:07:26.639 --> 00:07:28.880 -I'd like to document it here with a - -00:07:28.880 --> 00:07:31.680 -snippet that can be executed in line - -00:07:31.680 --> 00:07:33.280 -then I don't have to leave org mode and - -00:07:33.280 --> 00:07:34.639 -I don't have to try to remember what I - -00:07:34.639 --> 00:07:36.800 -did later so instead of just - -00:07:36.800 --> 00:07:38.960 -trying to do an operation the first time - -00:07:38.960 --> 00:07:40.319 -I do something I take the - -00:07:40.319 --> 00:07:41.680 -take the time to figure out what it is - -00:07:41.680 --> 00:07:43.440 -and document it and so then it's - -00:07:43.440 --> 00:07:44.879 -recorded - -00:07:44.879 --> 00:07:48.400 -and so here we find that to do a tangle - -00:07:48.400 --> 00:07:49.120 -operation - -00:07:49.120 --> 00:07:51.680 -you run the command or babel tangled - -00:07:51.680 --> 00:07:52.560 -which is a - -00:07:52.560 --> 00:07:55.840 -e-list command so if you hit ctrl c - -00:07:55.840 --> 00:07:59.199 -ctrl c to run it in place you get the - -00:07:59.199 --> 00:08:00.080 -result - -00:08:00.080 --> 00:08:02.720 -of main dot go which basically is - -00:08:02.720 --> 00:08:03.759 -telling us that - -00:08:03.759 --> 00:08:07.680 -we've tangled one file called main.go - -00:08:07.680 --> 00:08:11.039 -and you can see that that's true - -00:08:11.039 --> 00:08:14.000 -if you go to the file system and you - -00:08:14.000 --> 00:08:14.400 -look - -00:08:14.400 --> 00:08:17.840 -so now in uh in our demo directory - -00:08:17.840 --> 00:08:20.960 -we have a readme.org we have that png - -00:08:20.960 --> 00:08:22.479 -that we generated but we also have a - -00:08:22.479 --> 00:08:23.440 -main.go - -00:08:23.440 --> 00:08:26.080 -and if you if you visit that file you'll - -00:08:26.080 --> 00:08:27.759 -see that it's just the source code that - -00:08:27.759 --> 00:08:29.280 -was in our documentation which is - -00:08:29.280 --> 00:08:31.039 -exactly what we expected and what we - -00:08:31.039 --> 00:08:32.880 -wanted so that's good - -00:08:32.880 --> 00:08:36.560 -so if we return to - -00:08:36.560 --> 00:08:41.120 -to where we are at - -00:08:41.120 --> 00:08:42.959 -now we're we're at the point where we - -00:08:42.959 --> 00:08:44.640 -have a file on the file system so now we - -00:08:44.640 --> 00:08:45.760 -need - -00:08:45.760 --> 00:08:48.959 -um now we need to build it and to - -00:08:48.959 --> 00:08:53.600 -run it so let's follow the same - -00:08:53.600 --> 00:08:57.040 -philosophy where let's document - -00:08:57.040 --> 00:08:58.720 -these operations that we're going to - -00:08:58.720 --> 00:09:00.160 -perform - -00:09:00.160 --> 00:09:04.560 -so I'm dropping in a - -00:09:04.560 --> 00:09:07.839 -a build instruction section and a run - -00:09:07.839 --> 00:09:13.360 -instruction section - -00:09:13.360 --> 00:09:15.279 -so as you can see here we have a little - -00:09:15.279 --> 00:09:17.839 -a bash source block - -00:09:17.839 --> 00:09:20.000 -and another batch source block this one - -00:09:20.000 --> 00:09:22.000 -compiles the go build command is what - -00:09:22.000 --> 00:09:25.440 -compiles a file and then - -00:09:25.440 --> 00:09:26.880 -the file that gets generated should be - -00:09:26.880 --> 00:09:30.080 -called demo - -00:09:30.080 --> 00:09:32.959 -and uh so we just run it here so if if I - -00:09:32.959 --> 00:09:34.000 -type control c - -00:09:34.000 --> 00:09:37.839 -control c we get an empty results block - -00:09:37.839 --> 00:09:40.640 -when you compile things no news is good - -00:09:40.640 --> 00:09:41.360 -news - -00:09:41.360 --> 00:09:44.399 -so it means there's no errors so - -00:09:44.399 --> 00:09:46.560 -presumably we've created an executable - -00:09:46.560 --> 00:09:48.000 -that's called demo - -00:09:48.000 --> 00:09:51.440 -so let's uh - -00:09:51.440 --> 00:09:54.560 -let's look again at the file system and - -00:09:54.560 --> 00:10:02.480 -regenerate - -00:10:02.480 --> 00:10:05.760 -yep and what we have here is a demo - -00:10:05.760 --> 00:10:07.200 -executable which is exactly what we - -00:10:07.200 --> 00:10:07.760 -wanted - -00:10:07.760 --> 00:10:12.079 -so let's go back - -00:10:12.079 --> 00:10:14.160 -so now we should be able to run it so - -00:10:14.160 --> 00:10:16.079 -ctrl c ctrl c - -00:10:16.079 --> 00:10:20.399 -and we get hello world as a result - -00:10:20.399 --> 00:10:23.440 -which was exactly what we were expecting - -00:10:23.440 --> 00:10:26.560 -so that's already pretty cool - -00:10:26.560 --> 00:10:30.839 -you can you can do that much - -00:10:30.839 --> 00:10:33.040 -um but - -00:10:33.040 --> 00:10:34.560 -that's really just kind of the tip of - -00:10:34.560 --> 00:10:37.839 -the iceberg to uh to really - -00:10:37.839 --> 00:10:41.040 -kind of um - -00:10:41.040 --> 00:10:43.440 -use the more impressive features of - -00:10:43.440 --> 00:10:46.160 -literate programming we need to uh - -00:10:46.160 --> 00:10:49.920 -we need to do a little bit more - -00:10:49.920 --> 00:10:53.200 -so or at least - -00:10:53.200 --> 00:10:55.519 -at least really to get the full benefit - -00:10:55.519 --> 00:10:56.480 -of it then - -00:10:56.480 --> 00:10:59.600 -we need to do - -00:10:59.600 --> 00:11:02.959 -add some sections that will cause uh - -00:11:02.959 --> 00:11:06.320 -Emacs to have to to tangle or assemble - -00:11:06.320 --> 00:11:06.720 -this - -00:11:06.720 --> 00:11:09.760 -this file from different pieces so - -00:11:09.760 --> 00:11:13.120 -imagine that we wanted to take this file - -00:11:13.120 --> 00:11:16.720 -and maybe kind of templatize it - -00:11:16.720 --> 00:11:19.120 -so using literature programming syntax - -00:11:19.120 --> 00:11:21.279 -this angle bracket syntax - -00:11:21.279 --> 00:11:24.399 -let's say that we want to create an in - -00:11:24.399 --> 00:11:29.360 -imports section - -00:11:29.360 --> 00:11:32.399 -in a functions section - -00:11:32.399 --> 00:11:35.040 -and then maybe just a main section and - -00:11:35.040 --> 00:11:36.240 -we'll get rid of this - -00:11:36.240 --> 00:11:37.920 -so now you see we've created something - -00:11:37.920 --> 00:11:39.760 -that looks a little bit like a - -00:11:39.760 --> 00:11:42.000 -like a template or a scaffolding or - -00:11:42.000 --> 00:11:42.880 -outline - -00:11:42.880 --> 00:11:46.000 -for what what our file is going to be it - -00:11:46.000 --> 00:11:48.399 -looks a little bit like pseudocode - -00:11:48.399 --> 00:11:50.800 -and what we're going to have literate - -00:11:50.800 --> 00:11:52.399 -programming do - -00:11:52.399 --> 00:11:54.800 -is dynamically insert those things into - -00:11:54.800 --> 00:11:56.639 -those slots - -00:11:56.639 --> 00:12:00.079 -so the first thing we need to do - -00:12:00.079 --> 00:12:03.200 -is so let's create a section - -00:12:03.200 --> 00:12:08.079 -maybe called say hello so we want - -00:12:08.079 --> 00:12:09.519 -we want to add some functionality that - -00:12:09.519 --> 00:12:12.720 -makes our program say hello - -00:12:12.720 --> 00:12:15.680 -so using a different snippet that I have - -00:12:15.680 --> 00:12:17.600 -for creating something - -00:12:17.600 --> 00:12:20.800 -that I call like a literate section - -00:12:20.800 --> 00:12:24.079 -um basically we create a - -00:12:24.079 --> 00:12:26.000 -another source block that's almost the - -00:12:26.000 --> 00:12:27.839 -same as the one for the file but it's - -00:12:27.839 --> 00:12:31.040 -it just has a few differences so say we - -00:12:31.040 --> 00:12:31.680 -want to - -00:12:31.680 --> 00:12:34.160 -drop code into the import section and we - -00:12:34.160 --> 00:12:36.639 -want it to be in go - -00:12:36.639 --> 00:12:39.120 -here we use the same noed no web no - -00:12:39.120 --> 00:12:40.720 -export syntax - -00:12:40.720 --> 00:12:43.200 -but then we've added this no web refs - -00:12:43.200 --> 00:12:44.560 -imports - -00:12:44.560 --> 00:12:48.240 -and this ties that slot - -00:12:48.240 --> 00:12:51.120 -basically to this reference it tells - -00:12:51.120 --> 00:12:53.760 -Emacs that when you tangle - -00:12:53.760 --> 00:12:56.880 -we want to stick whatever's in here in - -00:12:56.880 --> 00:12:58.240 -that spot - -00:12:58.240 --> 00:13:02.079 -so you skip the tangle file name section - -00:13:02.079 --> 00:13:03.279 -because you're not actually creating a - -00:13:03.279 --> 00:13:04.240 -file name you're - -00:13:04.240 --> 00:13:06.160 -you're putting information into an - -00:13:06.160 --> 00:13:07.680 -existing file - -00:13:07.680 --> 00:13:10.720 -so here we would just add the fmt - -00:13:10.720 --> 00:13:14.399 -for the imports - -00:13:14.399 --> 00:13:18.839 -so let's add another section for uh - -00:13:18.839 --> 00:13:22.240 -functions and let's create a - -00:13:22.240 --> 00:13:25.519 -let's just create a function called - -00:13:25.519 --> 00:13:30.240 -say hello that - -00:13:30.240 --> 00:13:32.839 -doesn't have any arguments no return - -00:13:32.839 --> 00:13:34.000 -types - -00:13:34.000 --> 00:13:35.760 -all it does is kind of pretty much the - -00:13:35.760 --> 00:13:37.440 -same thing as we did before - -00:13:37.440 --> 00:13:39.199 -just print something but let's just say - -00:13:39.199 --> 00:13:41.360 -hello - -00:13:41.360 --> 00:13:45.760 -Emacs comp this time - -00:13:45.760 --> 00:13:49.519 -okay so now we have a function and now - -00:13:49.519 --> 00:13:51.040 -the function won't do anything unless we - -00:13:51.040 --> 00:13:52.720 -invoke it so let's do - -00:13:52.720 --> 00:13:56.000 -one last literate section - -00:13:56.000 --> 00:13:59.920 -called main make that go - -00:13:59.920 --> 00:14:03.519 -source block and then let's - -00:14:03.519 --> 00:14:06.560 -just invoke - -00:14:06.560 --> 00:14:10.320 -that that function - -00:14:10.320 --> 00:14:13.360 -so now you can see that we've got - -00:14:13.360 --> 00:14:15.600 -our scaffolding scaffolding kind of - -00:14:15.600 --> 00:14:17.199 -outline and then we have - -00:14:17.199 --> 00:14:20.079 -the sections that we want to get tangled - -00:14:20.079 --> 00:14:21.360 -or inserted - -00:14:21.360 --> 00:14:25.440 -so I I've kind of used this syntax - -00:14:25.440 --> 00:14:27.199 -it's it's kind of borrowed from - -00:14:27.199 --> 00:14:28.560 -literature programming a little bit with - -00:14:28.560 --> 00:14:30.320 -a plus equals so really it's just saying - -00:14:30.320 --> 00:14:32.480 -that I want to append - -00:14:32.480 --> 00:14:35.760 -this item into the import section so - -00:14:35.760 --> 00:14:37.600 -it's really just to make a little bit - -00:14:37.600 --> 00:14:39.839 -more clear what's going on - -00:14:39.839 --> 00:14:41.519 -when you generate documentation you - -00:14:41.519 --> 00:14:43.519 -won't see these - -00:14:43.519 --> 00:14:46.160 -these these particular property - -00:14:46.160 --> 00:14:49.360 -annotations and so you won't know - -00:14:49.360 --> 00:14:51.440 -immediately that this section goes in - -00:14:51.440 --> 00:14:53.839 -the imports area and so I usually put - -00:14:53.839 --> 00:14:55.440 -a little bit of documentation on top - -00:14:55.440 --> 00:14:57.760 -there so that it's easy to see - -00:14:57.760 --> 00:15:01.120 -and you would probably if this was very - -00:15:01.120 --> 00:15:03.040 -complicated you'd put some - -00:15:03.040 --> 00:15:06.399 -documentation above to explain what you - -00:15:06.399 --> 00:15:07.360 -were doing - -00:15:07.360 --> 00:15:11.519 -maybe right here - -00:15:11.519 --> 00:15:13.279 -you could you could picture yourself - -00:15:13.279 --> 00:15:15.040 -maybe explaining - -00:15:15.040 --> 00:15:17.440 -a complicated algorithm or something up - -00:15:17.440 --> 00:15:18.079 -here - -00:15:18.079 --> 00:15:21.120 -and having a nice way to document it - -00:15:21.120 --> 00:15:22.959 -so now that we've got that here in the - -00:15:22.959 --> 00:15:25.600 -documentation we need to figure out - -00:15:25.600 --> 00:15:27.040 -we need to make sure that it's going to - -00:15:27.040 --> 00:15:29.920 -tangle properly so your best friend - -00:15:29.920 --> 00:15:33.519 -at this point is is uh - -00:15:33.519 --> 00:15:35.680 -is a keyboard shortcut that lets you - -00:15:35.680 --> 00:15:38.240 -preview the tangled operation so if you - -00:15:38.240 --> 00:15:38.959 -say control - -00:15:38.959 --> 00:15:42.560 -c control v control v - -00:15:42.560 --> 00:15:45.120 -it will create a new buffer with the - -00:15:45.120 --> 00:15:46.480 -tangled - -00:15:46.480 --> 00:15:49.360 -contents and so you can see here that - -00:15:49.360 --> 00:15:50.639 -the fmt - -00:15:50.639 --> 00:15:53.199 -import went to the right place that - -00:15:53.199 --> 00:15:54.720 -function went to the right place the - -00:15:54.720 --> 00:15:56.160 -function invocation went to the right - -00:15:56.160 --> 00:15:58.480 -place and so we're feeling good - -00:15:58.480 --> 00:16:01.279 -you can nest these things many layers - -00:16:01.279 --> 00:16:02.800 -deep - -00:16:02.800 --> 00:16:04.800 -actually so like if you came into the - -00:16:04.800 --> 00:16:07.199 -say hello function you could add - -00:16:07.199 --> 00:16:10.560 -more sections - -00:16:10.560 --> 00:16:12.160 -you know and it gets and it'll go - -00:16:12.160 --> 00:16:13.759 -through and it'll - -00:16:13.759 --> 00:16:15.680 -keep track of all that and tangle it for - -00:16:15.680 --> 00:16:16.959 -you so you really get a lot of freedom - -00:16:16.959 --> 00:16:18.320 -and flexibility for how you want to - -00:16:18.320 --> 00:16:19.600 -document things - -00:16:19.600 --> 00:16:22.320 -by doing this so now that we've - -00:16:22.320 --> 00:16:25.839 -previewed it and we feel good about it - -00:16:25.839 --> 00:16:28.639 -we need to uh we need to tangle so we - -00:16:28.639 --> 00:16:31.440 -get the file on the file system - -00:16:31.440 --> 00:16:34.480 -so ctrl c ctrl c and - -00:16:34.480 --> 00:16:37.199 -get just main.go comes back again - -00:16:37.199 --> 00:16:37.920 -control c - -00:16:37.920 --> 00:16:40.959 -control c and no errors come back - -00:16:40.959 --> 00:16:43.839 -and then if we did this right when we - -00:16:43.839 --> 00:16:45.600 -when we run this we should get hello - -00:16:45.600 --> 00:16:47.199 -Emacs comp so ctrl c - -00:16:47.199 --> 00:16:51.199 -ctrl c hello Emacs comp - -00:16:51.199 --> 00:16:54.800 -so I uh - -00:16:54.800 --> 00:16:57.120 -I think that's pretty pretty cool - -00:16:57.120 --> 00:16:58.240 -actually so we've got - -00:16:58.240 --> 00:17:00.160 -kind of the breadcrumbs of the process - -00:17:00.160 --> 00:17:02.399 -we've gone through to get to this point - -00:17:02.399 --> 00:17:05.520 -this initial this initial - -00:17:05.520 --> 00:17:08.000 -document that has some tangling in it we - -00:17:08.000 --> 00:17:09.919 -have documentation for how to tangle - -00:17:09.919 --> 00:17:12.799 -how to build how to run it's we've - -00:17:12.799 --> 00:17:14.079 -really built a nice - -00:17:14.079 --> 00:17:17.760 -foundation for - -00:17:17.760 --> 00:17:20.160 -moving forward on our project and a nice - -00:17:20.160 --> 00:17:21.439 -way of breaking things out and - -00:17:21.439 --> 00:17:23.280 -documenting further - -00:17:23.280 --> 00:17:27.120 -the last piece that we need to - -00:17:27.120 --> 00:17:30.559 -take care of is the weave that I - -00:17:30.559 --> 00:17:34.799 -that's I showed you in the diagram above - -00:17:34.799 --> 00:17:38.640 -so one more time we'll drop in - -00:17:38.640 --> 00:17:41.760 -some documentation so this time on how - -00:17:41.760 --> 00:17:42.400 -to weave - -00:17:42.400 --> 00:17:44.400 -so it's really just an export function - -00:17:44.400 --> 00:17:47.520 -it's not there's not a separate weave - -00:17:47.520 --> 00:17:49.280 -command going on here we're just going - -00:17:49.280 --> 00:17:50.640 -to export - -00:17:50.640 --> 00:17:52.799 -what we've got here into a markdown - -00:17:52.799 --> 00:17:55.200 -format so we're using org - -00:17:55.200 --> 00:17:57.440 -gfm export to markdown which is the - -00:17:57.440 --> 00:17:58.880 -github style - -00:17:58.880 --> 00:18:02.160 -markdown you can use the other just - -00:18:02.160 --> 00:18:05.440 -more standard type as well so hit ctrl c - -00:18:05.440 --> 00:18:10.320 -ctrl c now you see we've got a readme - -00:18:10.320 --> 00:18:15.280 -file and if you look - -00:18:15.280 --> 00:18:17.440 -in the file system we've got that right - -00:18:17.440 --> 00:18:19.120 -there and so - -00:18:19.120 --> 00:18:23.120 -if you go to something like ghostwriter - -00:18:23.120 --> 00:18:31.679 -and open that file - -00:18:31.679 --> 00:18:34.559 -now you can see that it's generated some - -00:18:34.559 --> 00:18:35.520 -documentation - -00:18:35.520 --> 00:18:38.320 -it puts a index at top at the top I - -00:18:38.320 --> 00:18:39.679 -usually just - -00:18:39.679 --> 00:18:42.000 -I usually turn that off it's easy to do - -00:18:42.000 --> 00:18:43.679 -that by putting a property at the top of - -00:18:43.679 --> 00:18:44.559 -your - -00:18:44.559 --> 00:18:46.880 -your org file but some people like to - -00:18:46.880 --> 00:18:48.559 -have an index - -00:18:48.559 --> 00:18:50.799 -but here you can see that it's generated - -00:18:50.799 --> 00:18:52.160 -pretty nicely and - -00:18:52.160 --> 00:18:55.200 -formatted snippets well - -00:18:55.200 --> 00:18:56.880 -put the diagram in there and then it's - -00:18:56.880 --> 00:18:58.240 -preserved - -00:18:58.240 --> 00:19:01.039 -it's preserved this literate programming - -00:19:01.039 --> 00:19:02.799 -syntax - -00:19:02.799 --> 00:19:04.960 -which is important because that's how we - -00:19:04.960 --> 00:19:06.480 -want to view the documentation that's - -00:19:06.480 --> 00:19:07.200 -what the no - -00:19:07.200 --> 00:19:10.559 -exports um - -00:19:10.559 --> 00:19:13.360 -property was was trying to maintain so - -00:19:13.360 --> 00:19:14.000 -that - -00:19:14.000 --> 00:19:16.080 -no exports means when you export do not - -00:19:16.080 --> 00:19:18.400 -try to tangle so that's - -00:19:18.400 --> 00:19:20.559 -hopefully that makes more sense now but - -00:19:20.559 --> 00:19:22.240 -now you can see all the documentation - -00:19:22.240 --> 00:19:26.080 -and I think it demonstrates a - -00:19:26.080 --> 00:19:29.919 -pretty useful feature that's inside of - -00:19:29.919 --> 00:19:33.520 -Emacs and and hopefully - -00:19:33.520 --> 00:19:35.039 -hopefully you'll have as much fun using - -00:19:35.039 --> 00:19:39.919 -that as I have - -00:19:39.919 --> 00:19:43.600 -so thanks -- cgit v1.2.3