blob: 3179635f57e650e84fb60ef0e60aa0026349870c (
plain) (
tree)
|
|
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
|