summaryrefslogtreecommitdiffstats
path: root/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt
diff options
context:
space:
mode:
Diffstat (limited to '2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt')
-rw-r--r--2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt1663
1 files changed, 1663 insertions, 0 deletions
diff --git a/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt b/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt
new file mode 100644
index 00000000..aee8f7ba
--- /dev/null
+++ b/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt
@@ -0,0 +1,1663 @@
+WEBVTT
+
+00:01.040 --> 00:03.520
+Hello, everybody. My name is Daniel German.
+
+00:03.520 --> 00:00:04.799
+I'm a professor of computer science
+
+00:00:04.799 --> 00:00:06.080
+at the University of Victoria,
+
+00:00:06.080 --> 00:00:07.680
+and I have been teaching programming
+
+00:00:07.680 --> 00:00:12.080
+for more than 10 years.
+
+00:12.080 --> 00:00:14.639
+I want to tell you today
+
+00:00:14.639 --> 00:00:15.759
+about how I have been
+
+00:00:15.759 --> 00:00:17.680
+using Emacs effectively
+
+00:00:17.680 --> 00:00:20.000
+during the last 10 years,
+
+00:00:20.000 --> 00:00:22.880
+and to try to improve how I not only
+
+00:00:22.880 --> 00:00:24.720
+create content for my students,
+
+00:24.720 --> 00:00:26.480
+but also how I deliver it,
+
+00:00:26.480 --> 00:00:27.680
+and particularly how,
+
+00:00:27.680 --> 00:00:29.119
+within the last five years,
+
+00:00:29.119 --> 00:00:31.599
+I have been using Org mode
+
+00:00:31.599 --> 00:00:33.200
+in a very effective way
+
+00:33.200 --> 00:00:35.600
+that benefits both
+
+00:00:35.600 --> 00:00:38.239
+my students and myself
+
+00:38.239 --> 00:00:40.480
+in the creation and the delivery
+
+00:00:40.480 --> 00:00:42.399
+of content.
+
+00:42.399 --> 00:00:45.200
+Let me switch to my computer.
+
+00:00:45.200 --> 00:00:46.480
+I'm going to remove myself
+
+00:00:46.480 --> 00:00:47.840
+because I can use
+
+00:00:47.840 --> 00:00:50.800
+all the real-estate screen.
+
+00:51.840 --> 00:54.079
+The goal of my presentation today
+
+00:54.079 --> 00:00:55.600
+is really to give you
+
+00:00:55.600 --> 00:00:59.280
+a little bit of an overview
+
+00:00:59.280 --> 00:01:03.440
+of how I have been able to
+
+01:03.440 --> 00:01:06.240
+combine the use of Org mode
+
+00:01:06.240 --> 00:01:08.560
+and with some other tools.
+
+00:01:08.560 --> 00:01:10.880
+I'll talk about specifically about them
+
+00:01:10.880 --> 00:01:13.680
+and then also offer some suggestions
+
+00:01:13.680 --> 00:01:14.640
+and recommendations
+
+00:01:14.640 --> 00:01:16.240
+in how to get it started.
+
+01:16.240 --> 00:01:18.799
+I have created a configuration,
+
+00:01:18.799 --> 00:01:20.080
+a set of configuration files
+
+00:01:20.080 --> 00:01:20.799
+that you can use.
+
+00:01:20.799 --> 00:01:22.880
+I will describe them towards the end.
+
+01:22.880 --> 00:01:28.240
+Hopefully, it will make it easy
+
+00:01:28.240 --> 00:01:31.439
+for all of you to get started on using it.
+
+01:31.439 --> 01:33.200
+So we start talking a little bit
+
+01:33.200 --> 00:01:34.079
+about the challenges
+
+00:01:34.079 --> 00:01:35.119
+of teaching programming.
+
+00:01:35.119 --> 00:01:37.200
+I think that the fundamental one
+
+00:01:37.200 --> 00:01:41.680
+is that keeping the content
+
+00:01:41.680 --> 00:01:45.280
+and the slides up to date is hard,
+
+00:01:45.280 --> 00:01:46.960
+because the content is programs.
+
+00:01:46.960 --> 00:01:47.840
+There are programs
+
+00:01:47.840 --> 00:01:50.399
+that sometimes have errors,
+
+00:01:50.399 --> 00:01:53.759
+and sometimes the slides are
+
+00:01:53.759 --> 00:01:58.079
+incomplete snippets of code, and that
+
+00:01:58.079 --> 00:02:00.240
+once they go into the slides software,
+
+00:02:00.240 --> 00:02:01.840
+like Google Slides or PowerPoint,
+
+00:02:01.840 --> 00:02:04.159
+they're essentially static objects.
+
+02:05.520 --> 00:02:07.439
+If we need to update them,
+
+00:02:07.439 --> 00:02:09.920
+we basically don't know
+
+00:02:09.920 --> 00:02:12.160
+whether the update code actually works,
+
+00:02:12.160 --> 00:02:13.440
+or does it work?
+
+00:02:13.440 --> 00:02:16.000
+Also, we cannot insert automatically
+
+00:02:16.000 --> 00:02:16.400
+the output.
+
+00:02:16.400 --> 00:02:18.480
+We'll have to run the snippet outside,
+
+00:02:18.480 --> 00:02:20.560
+and run it, and then insert that code.
+
+00:02:20.560 --> 00:02:22.080
+So that's very cumbersome.
+
+00:02:22.080 --> 00:02:23.200
+It's really, really one of the
+
+00:02:23.200 --> 00:02:26.080
+major challenges of using a slide software
+
+00:02:26.080 --> 00:02:29.360
+to teach programming.
+
+02:29.360 --> 00:02:30.879
+The other thing is that
+
+00:02:30.879 --> 00:02:32.000
+during the presentation,
+
+00:02:32.000 --> 00:02:33.440
+there's nothing you can do with the code.
+
+00:02:33.440 --> 00:02:34.480
+You might be able to edit it,
+
+00:02:34.480 --> 00:02:35.440
+but you cannot run it.
+
+00:02:35.440 --> 00:02:37.360
+You have to move outside of the
+
+00:02:37.360 --> 00:02:38.640
+presentation software
+
+00:02:38.640 --> 00:02:41.200
+to be able to execute the code.
+
+02:42.800 --> 00:02:44.640
+The last one is kind of related to
+
+00:02:44.640 --> 00:02:46.959
+the previous two.
+
+02:46.959 --> 00:02:48.800
+You don't have a single file
+
+00:02:48.800 --> 00:02:51.121
+and your information is spread across
+
+00:02:51.121 --> 00:02:52.879
+many, many different files,
+
+00:02:52.879 --> 00:02:54.080
+especially if you have lots of
+
+00:02:54.080 --> 00:02:55.760
+different snippets in your slides.
+
+00:02:55.760 --> 00:02:56.959
+You probably have a lot of
+
+00:02:56.959 --> 00:02:59.440
+different small files, each of them
+
+02:59.440 --> 03:01.599
+contributing something to your slides,
+
+03:01.599 --> 03:06.239
+and so it becomes a pain to manage.
+
+03:07.280 --> 00:03:10.080
+All of this is where Org mode
+
+00:03:10.080 --> 00:03:12.640
+really excels. Org mode is capable of
+
+00:03:12.640 --> 00:03:15.840
+doing everything, and it needs
+
+00:03:15.840 --> 00:03:18.400
+a little bit of help from some friends.
+
+00:03:18.400 --> 00:03:22.159
+I will describe what I mean by that.
+
+00:03:22.159 --> 00:03:23.040
+But the other thing
+
+00:03:23.040 --> 00:03:24.480
+that is also very valuable
+
+03:24.480 --> 00:03:27.440
+is that it's within the magic of Emacs.
+
+00:03:27.440 --> 00:03:30.480
+I absolutely love to be able to
+
+03:30.480 --> 00:03:32.879
+work with text within Emacs.
+
+00:03:32.879 --> 00:03:34.799
+I enjoy actually creating my notes
+
+00:03:34.799 --> 00:03:36.640
+in Org mode way more than if I was
+
+00:03:36.640 --> 00:03:39.360
+making them in Google Slides.
+
+03:39.360 --> 00:03:42.400
+Let me start by giving you a short demo.
+
+00:03:42.400 --> 00:03:46.400
+I have been teaching programming in C++
+
+00:03:46.400 --> 00:03:47.519
+for around five years,
+
+00:03:47.519 --> 00:03:50.159
+and this was really the trigger towards
+
+03:50.159 --> 00:03:53.280
+trying to do everything within Org mode.
+
+00:03:53.280 --> 00:03:58.159
+So I have a repository in GitHub,
+
+00:03:58.159 --> 00:03:59.439
+and I think that GitHub
+
+00:03:59.439 --> 00:04:00.560
+is an excellent tool
+
+00:04:00.560 --> 00:04:04.480
+that works collaboration with Org mode.
+
+04:04.480 --> 00:04:05.439
+I'll describe actually
+
+00:04:05.439 --> 00:04:07.680
+what I mean by that.
+
+00:04:07.680 --> 00:04:09.680
+My lectures are essentially Org files.
+
+00:04:09.680 --> 00:04:12.480
+So, for example, let's go into
+
+00:04:12.480 --> 00:04:15.040
+one of these files.
+
+04:15.040 --> 00:04:16.799
+This is a an Org file.
+
+00:04:16.799 --> 00:04:21.199
+You can actually see it in the extension.
+
+04:21.199 --> 04:26.160
+I get a table of contents.
+
+04:26.160 --> 00:04:28.000
+GitHub creates or give us actually
+
+00:04:28.000 --> 00:04:31.280
+the ability to quickly jump, and it creates
+
+00:04:31.280 --> 00:04:32.880
+a dynamic table of contents,
+
+00:04:32.880 --> 00:04:33.759
+but I also can actually
+
+00:04:33.759 --> 00:04:35.280
+create it automatically,
+
+00:04:35.280 --> 00:04:36.800
+and then here it goes.
+
+00:04:36.800 --> 00:04:38.479
+This is the code that i have.
+
+00:04:38.479 --> 00:04:41.440
+This is a snippet
+
+00:04:41.440 --> 00:04:44.240
+that I present in the class.
+
+04:44.240 --> 00:04:45.680
+Let me actually show you
+
+00:04:45.680 --> 00:04:48.400
+how I do it within Emacs.
+
+04:48.400 --> 00:04:52.160
+So what I will do is the following.
+
+00:04:52.160 --> 00:04:55.440
+Let me try to open that file.
+
+04:57.919 --> 04:59.440
+Here's the file,
+
+04:59.440 --> 00:05:00.880
+and it's exactly the same
+
+00:05:00.880 --> 00:05:03.759
+that we were browsing in GitHub.
+
+00:05:03.759 --> 00:05:08.720
+What I do is I simply just scroll through
+
+05:08.720 --> 00:05:10.160
+the document. It's almost like
+
+00:05:10.160 --> 00:05:13.440
+movie credits at the end of the movie.
+
+00:05:13.440 --> 00:05:15.360
+I don't break them into chunks
+
+00:05:15.360 --> 00:05:16.639
+that I show in the screen.
+
+00:05:16.639 --> 00:05:18.320
+I see no point in doing that.
+
+00:05:18.320 --> 00:05:20.880
+What I do is I simply scroll through
+
+00:05:20.880 --> 00:05:24.160
+the text. The students are able to see
+
+00:05:24.160 --> 00:05:26.560
+the same information in GitHub
+
+00:05:26.560 --> 00:05:27.759
+on their computer,
+
+05:27.759 --> 00:05:29.680
+or they can print it if they want,
+
+00:05:29.680 --> 00:05:31.039
+and they are able to actually
+
+00:05:31.039 --> 00:05:32.560
+follow with me, and then having
+
+00:05:32.560 --> 00:05:33.759
+a much bigger picture
+
+05:33.759 --> 05:36.320
+than if i just show a very small snippet.
+
+05:36.320 --> 00:05:38.800
+In the case that the snippet is too big,
+
+00:05:38.800 --> 00:05:40.800
+for example, let's say this one
+
+00:05:40.800 --> 00:05:42.240
+actually doesn't cover the...
+
+00:05:42.240 --> 00:05:43.759
+covers more than full screen,
+
+00:05:43.759 --> 00:05:45.360
+I actually reduce the size
+
+00:05:45.360 --> 00:05:48.000
+and then give a little bit of
+
+00:05:48.000 --> 00:05:49.759
+an explanation of the whole thing,
+
+00:05:49.759 --> 00:05:51.600
+and then focus and say this is the line
+
+00:05:51.600 --> 00:05:53.600
+where we have to pay attention.
+
+05:53.600 --> 00:05:55.600
+Notice actually how I use color for that.
+
+00:05:55.600 --> 00:05:57.759
+I think that the ability to use color
+
+00:05:57.759 --> 00:05:59.759
+and typesetting is fundamental
+
+00:05:59.759 --> 00:06:01.520
+to be able to do this effectively,
+
+00:06:01.520 --> 00:06:02.720
+and the nice thing is that
+
+00:06:02.720 --> 00:06:04.160
+we can configure Org mode
+
+00:06:04.160 --> 00:06:05.840
+to be able to do most of this
+
+06:05.840 --> 06:08.160
+automatically.
+
+06:08.160 --> 00:06:09.360
+As I said before,
+
+00:06:09.360 --> 00:06:10.960
+one of the great advantages is that
+
+00:06:10.960 --> 00:06:13.600
+I can actually run the code dynamically.
+
+00:06:13.600 --> 00:06:15.360
+So let's say that the student says,
+
+00:06:15.360 --> 00:06:17.360
+"But what if I change that value to 10?"
+
+00:06:17.360 --> 00:06:18.560
+Well, let's try it.
+
+00:06:18.560 --> 00:06:20.560
+Let's change it, run it,
+
+06:20.560 --> 00:06:21.840
+and then you can see here
+
+00:06:21.840 --> 00:06:24.720
+that it has a 10.
+
+00:06:24.720 --> 00:06:26.960
+That's really powerful because
+
+00:06:26.960 --> 00:06:29.280
+you're not tied to
+
+00:06:29.280 --> 00:06:30.560
+what is the content you have
+
+00:06:30.560 --> 00:06:33.120
+on the slides. If you find an error
+
+00:06:33.120 --> 00:06:34.880
+or an omission, or you want to talk about
+
+06:34.880 --> 00:06:36.880
+something else, you can very quickly
+
+00:06:36.880 --> 00:06:40.720
+do it. You can add comments
+
+00:06:40.720 --> 00:06:42.080
+and then make some suggestions
+
+00:06:42.080 --> 00:06:43.840
+specifically to that,
+
+06:43.840 --> 00:06:45.680
+or worst-case scenario,
+
+00:06:45.680 --> 00:06:48.880
+if you really, really, need it,
+
+06:48.880 --> 00:06:55.440
+you can say, "Let's load it into..."
+
+00:06:55.440 --> 00:06:58.400
+Let's actually do some hand annotation.
+
+00:06:58.400 --> 00:07:00.319
+Let's actually say, "look at this thing,
+
+00:07:00.319 --> 00:07:01.840
+this is the value that I want you to
+
+07:01.840 --> 00:07:02.800
+concentrate on."
+
+00:07:02.800 --> 00:07:03.599
+It's not perfect.
+
+00:07:03.599 --> 00:07:04.960
+I'm not doing it with an Emacs.
+
+00:07:04.960 --> 00:07:06.960
+I wish there was a way to do it,
+
+00:07:06.960 --> 00:07:09.120
+but it is absolutely effective
+
+00:07:09.120 --> 00:07:10.720
+because I'm actually able to
+
+00:07:10.720 --> 00:07:12.800
+use the power. Notice that all that is
+
+07:12.800 --> 07:15.520
+exported is just the block, and also
+
+07:15.520 --> 07:22.400
+the color and typesetting,
+
+07:22.400 --> 00:07:24.560
+the typesetting of the content.
+
+00:07:24.560 --> 00:07:25.759
+So this is actually great.
+
+00:07:25.759 --> 00:07:30.639
+I have the colors red, purple, etc. etc.
+
+00:07:30.639 --> 00:07:34.160
+I love being able to do that.
+
+07:34.160 --> 00:07:35.919
+This is just a temporary file.
+
+00:07:35.919 --> 00:07:36.880
+I can actually discard it,
+
+00:07:36.880 --> 00:07:39.680
+and it doesn't really matter.
+
+07:39.680 --> 07:41.919
+Let me go back to the presentation.
+
+07:41.919 --> 00:07:43.360
+So that's the delivery.
+
+00:07:43.360 --> 00:07:44.639
+So the delivery is great,
+
+00:07:44.639 --> 00:07:46.400
+and I can tell the students
+
+00:07:46.400 --> 00:07:48.080
+now you're actually in GitHub,
+
+00:07:48.080 --> 00:07:50.160
+if you want to test the code,
+
+07:50.160 --> 00:07:51.360
+just cut and paste.
+
+00:07:51.360 --> 00:07:54.240
+Notice that I clicked on the little icon.
+
+00:07:54.240 --> 00:07:56.639
+Now it's copied. It's now part of
+
+00:07:56.639 --> 00:07:57.440
+the kill buffer ([kill-ring]),
+
+00:07:57.440 --> 00:07:59.520
+so if I want to actually create a file
+
+00:07:59.520 --> 00:08:00.560
+that has that content,
+
+00:08:00.560 --> 00:08:02.560
+I can very quickly do it.
+
+08:02.560 --> 00:08:05.840
+Try that with PowerPoint.
+
+00:08:05.840 --> 00:08:08.160
+You will have to have the text
+
+00:08:08.160 --> 00:08:10.000
+without any nice typesetting,
+
+00:08:10.000 --> 00:08:11.280
+or you will have to have a picture
+
+00:08:11.280 --> 00:08:13.120
+that is impossible to cut and paste.
+
+00:08:13.120 --> 00:08:14.400
+So that's something that the students
+
+00:08:14.400 --> 00:08:17.440
+really, really appreciate of this.
+
+00:08:17.440 --> 00:08:18.879
+They can try it on the computer.
+
+00:08:18.879 --> 00:08:19.919
+They can load it into
+
+00:08:19.919 --> 00:08:22.319
+their favorite editor.
+
+00:08:22.319 --> 00:08:24.720
+I don't force them to use Emacs,
+
+00:08:24.720 --> 00:08:26.879
+but I have to say that some of them
+
+00:08:26.879 --> 00:08:28.479
+really get intrigued by this power
+
+00:08:28.479 --> 00:08:30.000
+that they want to try Emacs
+
+08:30.000 --> 08:31.440
+because they see that they can do things,
+
+08:31.440 --> 08:33.760
+that I can do things that they cannot do
+
+08:33.760 --> 08:35.919
+with other tools.
+
+08:35.919 --> 08:39.039
+Okay, so let's go back to presentation.
+
+08:39.039 --> 00:08:40.080
+The other half of it is
+
+00:08:40.080 --> 00:08:41.039
+preparing the notes.
+
+00:08:41.039 --> 00:08:44.640
+I think the preparatory notes
+
+08:44.640 --> 00:08:46.320
+is something that I want to do
+
+00:08:46.320 --> 00:08:48.240
+as easy as possible.
+
+00:08:48.240 --> 00:08:52.560
+I want to be able to reduce the time
+
+00:08:52.560 --> 00:08:53.760
+that I waste on things,
+
+00:08:53.760 --> 00:08:55.120
+that they are done.
+
+08:55.120 --> 08:57.519
+They're not part of the actual thinking
+
+08:57.519 --> 00:09:01.760
+or the delivery of the presentation.
+
+00:09:01.760 --> 00:09:03.440
+So let me create a file.
+
+09:03.440 --> 00:09:05.720
+Let's call it rip2.org.
+
+00:09:05.720 --> 00:09:07.839
+Well, I have this one,
+
+00:09:07.839 --> 00:09:09.519
+so let's call it rip.org.
+
+00:09:09.519 --> 00:09:10.480
+Oh, I have this one too,
+
+00:09:10.480 --> 00:09:12.800
+so let's call it rip4.org.
+
+09:12.800 --> 09:15.040
+So it's empty.
+
+09:15.040 --> 00:09:17.200
+I use yasnippets. I think yasnippets
+
+00:09:17.200 --> 00:09:17.920
+are very important,
+
+00:09:17.920 --> 00:09:19.040
+and I'll go through this
+
+00:09:19.040 --> 00:09:19.760
+in a little bit later.
+
+00:09:19.760 --> 00:09:21.200
+It's important to set up
+
+00:09:21.200 --> 00:09:23.440
+the properties for each language
+
+00:09:23.440 --> 00:09:24.399
+that I use properly.
+
+09:24.399 --> 09:26.320
+I'll describe this a little bit later.
+
+09:26.320 --> 00:09:28.000
+Unfortunately, the properties
+
+00:09:28.000 --> 00:09:30.080
+have to be evaluated one at a time,
+
+00:09:30.080 --> 00:09:33.839
+and so I'm just going to
+
+00:09:33.839 --> 00:09:35.040
+kill the buffer and open it again.
+
+00:09:35.040 --> 00:09:36.480
+So now all of these properties
+
+00:09:36.480 --> 00:09:38.000
+are properly set.
+
+09:40.560 --> 00:09:43.760
+As I said before, I have some yasnippets,
+
+00:09:43.760 --> 00:09:46.560
+so I can actually do very quickly...
+
+00:09:46.560 --> 00:09:55.200
+This is C++, cout << "hello world",
+
+09:55.200 --> 09:58.080
+std::endl.
+
+09:58.080 --> 00:10:00.080
+And then I run it,
+
+00:10:00.080 --> 00:10:02.720
+and then it's inserted down here,
+
+00:10:02.720 --> 00:10:04.000
+so nothing special.
+
+10:04.000 --> 10:06.160
+Let's assume that I make a mistake
+
+10:06.160 --> 00:10:08.480
+and I type a double l here.
+
+00:10:08.480 --> 00:10:10.720
+I will get an error.
+
+10:10.720 --> 00:10:12.399
+These line numbers unfortunately
+
+00:10:12.399 --> 00:10:13.600
+don't perfectly match
+
+00:10:13.600 --> 00:10:15.040
+with the line numbers
+
+10:15.040 --> 10:17.839
+in the little snippet
+
+10:17.839 --> 00:10:18.959
+because there's some code
+
+00:10:18.959 --> 00:10:22.160
+that org-babel inserts,
+
+00:10:22.160 --> 00:10:23.040
+so that shifts them.
+
+00:10:23.040 --> 00:10:25.440
+So that's something to be aware of.
+
+10:25.440 --> 00:10:27.680
+I can correct it, run it,
+
+00:10:27.680 --> 00:10:30.160
+and then it inserts the result.
+
+10:30.160 --> 00:10:36.079
+Let's do one in C.
+
+10:36.079 --> 00:10:37.680
+I'll explain the exports both
+
+00:10:37.680 --> 00:10:38.640
+a little bit.
+
+00:10:38.640 --> 00:10:40.079
+So let's assume that I don't want to
+
+10:40.079 --> 00:10:41.519
+have a full main program.
+
+00:10:41.519 --> 00:10:42.560
+Let's assume that i just want to
+
+00:10:42.560 --> 00:10:45.200
+demonstrate how to use a printf
+
+00:10:45.200 --> 00:10:54.959
+"hello world %s\n", "my friend".
+
+10:54.959 --> 10:56.800
+Let's run it.
+
+10:56.800 --> 00:10:58.800
+I get a bunch of errors. Why?
+
+00:10:58.800 --> 00:11:00.480
+Because I don't have a main program,
+
+00:11:00.480 --> 00:11:03.279
+so I have to actually tell org-babel
+
+00:11:03.279 --> 00:11:05.200
+that I want a main product,
+
+00:11:05.200 --> 00:11:07.360
+so yes put a main around it.
+
+00:11:07.360 --> 00:11:09.040
+So now I run it and it says, oh,
+
+11:09.040 --> 00:11:09.760
+in the function main,
+
+00:11:09.760 --> 00:11:10.959
+we have an implicit declaration
+
+00:11:10.959 --> 00:11:12.640
+for function printf.
+
+00:11:12.640 --> 00:11:14.000
+I'm very, very stringent
+
+00:11:14.000 --> 00:11:16.959
+on my compilation options,
+
+00:11:16.959 --> 00:11:18.959
+so I want to have every single
+
+11:18.959 --> 00:11:21.279
+potential error displayed ,
+
+00:11:21.279 --> 00:11:22.959
+so that's actually why.
+
+00:11:22.959 --> 00:11:24.640
+In this case, I actually need include,
+
+00:11:24.640 --> 00:11:29.040
+so I can say :includes <stdio.h>,
+
+11:29.040 --> 00:11:31.040
+and I'll run it and it runs perfectly.
+
+00:11:31.040 --> 00:11:32.480
+So why is this important?
+
+00:11:32.480 --> 00:11:35.440
+Well, it allows me to just have
+
+00:11:35.440 --> 00:11:37.600
+the snippet that I'm concerned about.
+
+00:11:37.600 --> 00:11:39.920
+I don't have to have all the overhead
+
+00:11:39.920 --> 00:11:43.279
+of having to have the include, main, etc.,
+
+00:11:43.279 --> 00:11:44.000
+if I want to show
+
+00:11:44.000 --> 00:11:45.440
+just one specific concept
+
+00:11:45.440 --> 00:11:46.560
+and I can do it
+
+00:11:46.560 --> 00:11:48.079
+in very few lines of code.
+
+00:11:48.079 --> 00:11:50.240
+I can do that immediately, of course.
+
+00:11:50.240 --> 00:11:51.279
+The students will not be able to
+
+00:11:51.279 --> 00:11:53.600
+cut and paste it without the main file,
+
+00:11:53.600 --> 00:11:54.320
+but that's something
+
+00:11:54.320 --> 00:11:56.800
+that we can explain to them.
+
+11:57.600 --> 00:11:59.440
+We can do all the languages.
+
+00:11:59.440 --> 00:12:02.079
+So I can say print,
+
+12:02.079 --> 12:07.680
+let's print just a list,
+
+12:07.680 --> 12:10.000
+or let's actually keep updating it,
+
+12:10.000 --> 00:12:16.000
+and let's do a map of a lambda x,
+
+00:12:16.000 --> 00:12:19.279
+x multiplied by x,
+
+12:19.279 --> 00:12:22.079
+and then we run it. Okay.
+
+00:12:22.079 --> 00:12:23.200
+The thing that is important
+
+00:12:23.200 --> 00:12:25.120
+is that if we also have
+
+00:12:25.120 --> 00:12:26.720
+the full power of the environment,
+
+00:12:26.720 --> 00:12:28.320
+right, so we can actually edit it
+
+00:12:28.320 --> 00:12:31.519
+in the native mode of the language,
+
+00:12:31.519 --> 00:12:34.560
+and wherever we actually want to use
+
+00:12:34.560 --> 00:12:36.720
+specific features, that they are available
+
+00:12:36.720 --> 00:12:38.800
+in the particular mode.
+
+12:38.800 --> 00:12:40.720
+But for most of the cases,
+
+00:12:40.720 --> 00:12:41.519
+I don't need that,
+
+00:12:41.519 --> 00:12:44.160
+because my examples are relatively simple.
+
+12:44.160 --> 12:46.720
+Let's do one more.
+
+12:46.720 --> 00:12:48.399
+This is a little bit different: SQLite.
+
+00:12:48.399 --> 00:12:49.760
+In the previous examples,
+
+00:12:49.760 --> 00:12:51.200
+the output that is inserted
+
+00:12:51.200 --> 00:12:52.720
+is a standard output.
+
+00:12:52.720 --> 00:12:54.320
+In SQLite, I want to actually see
+
+00:12:54.320 --> 00:12:55.279
+the tables. I want to see
+
+00:12:55.279 --> 00:12:56.720
+how the tables are,
+
+00:12:56.720 --> 00:12:58.880
+what the results are.
+
+00:12:58.880 --> 00:13:04.000
+So let's create table s.
+
+13:04.000 --> 00:13:08.399
+Let's call it r, a int, b int,
+
+13:08.399 --> 00:13:09.200
+and let's run it.
+
+00:13:09.200 --> 00:13:10.639
+This is-- oh, the table already exists.
+
+00:13:10.639 --> 00:13:16.240
+Okay. So drop table if exists r,
+
+13:16.240 --> 00:13:17.440
+and then we run it. Okay.
+
+00:13:17.440 --> 00:13:21.120
+So now it's created. sqlite...
+
+00:13:21.120 --> 00:13:25.920
+So we can say create a table,
+
+00:13:25.920 --> 00:13:27.760
+and let's actually add SQL,
+
+00:13:27.760 --> 00:13:32.079
+and here we're actually going to add...
+
+13:32.079 --> 00:13:34.240
+This is an example in C,
+
+00:13:34.240 --> 00:13:38.240
+and here we're going to have C++.
+
+00:13:38.240 --> 00:13:42.160
+Okay. So, SQL,
+
+00:13:42.160 --> 00:13:43.920
+and then we create a table,
+
+00:13:43.920 --> 00:13:47.839
+and then we populate
+
+00:13:47.839 --> 00:13:51.360
+and then insert into R
+
+00:13:51.360 --> 00:13:57.839
+values 1,2 2,3 3,4.
+
+13:57.839 --> 00:13:59.519
+Okay. So now I have a table,
+
+00:13:59.519 --> 00:14:01.600
+I have values,
+
+00:14:01.600 --> 00:14:04.560
+and I can do "select * from here,"
+
+14:04.560 --> 14:07.040
+and then I get the result. Okay.
+
+14:07.040 --> 00:14:07.920
+It's almost magic
+
+00:14:07.920 --> 00:14:10.399
+because I can actually get, formatted,
+
+00:14:10.399 --> 00:14:13.040
+the output in the way that I expected.
+
+14:13.040 --> 14:15.279
+Obviously, if my result is too big,
+
+14:15.279 --> 00:14:18.399
+then it will basically just create
+
+00:14:18.399 --> 00:14:20.880
+a huge, huge buffer, or Org will say
+
+00:14:20.880 --> 00:14:21.920
+the output is too big.
+
+00:14:21.920 --> 00:14:24.079
+So often with databases,
+
+00:14:24.079 --> 00:14:26.480
+I actually narrow my output, right,
+
+00:14:26.480 --> 00:14:28.639
+or I might do it with a clause,
+
+00:14:28.639 --> 00:14:32.800
+"where a > 1".
+
+14:34.959 --> 00:14:36.959
+If the language is supported by Org Babel,
+
+00:14:36.959 --> 00:14:39.920
+then you can do all of this.
+
+14:39.920 --> 00:14:42.079
+Let me go back to the presentation.
+
+00:14:42.079 --> 00:14:43.760
+I'm running out of time.
+
+00:14:43.760 --> 00:14:45.680
+Let me give you a short tour
+
+00:14:45.680 --> 00:14:47.279
+of how this is done.
+
+14:47.279 --> 00:14:53.279
+I have created a repository that has
+
+00:14:53.279 --> 00:14:54.800
+all the configuration that I have.
+
+00:14:54.800 --> 00:14:56.639
+Everything is self-contained.
+
+14:56.639 --> 14:59.600
+You can just download it and run it.
+
+14:59.600 --> 00:15:01.360
+You will have to replace
+
+00:15:01.360 --> 00:15:03.760
+your ~/.emacs.d directory,
+
+00:15:03.760 --> 00:15:07.440
+and then you can explore it, test it,
+
+00:15:07.440 --> 00:15:11.039
+and then pick things out of it,
+
+00:15:11.039 --> 00:15:14.639
+choose, etc.
+
+15:14.639 --> 00:15:16.800
+Let me go through the README.
+
+00:15:16.800 --> 00:15:17.920
+I think that the README
+
+00:15:17.920 --> 00:15:19.600
+is actually useful.
+
+00:15:19.600 --> 00:15:21.760
+I have a function called actually start.
+
+00:15:21.760 --> 00:15:22.480
+That is the one
+
+00:15:22.480 --> 00:15:24.000
+that creates indentation
+
+00:15:24.000 --> 00:15:28.399
+and sets up the mode, etc.
+
+15:28.399 --> 00:15:29.440
+Let me talk about GitHub.
+
+00:15:29.440 --> 00:15:31.839
+So GitHub is a great resource. Why?
+
+00:15:31.839 --> 00:15:32.880
+Well its publishing,
+
+00:15:32.880 --> 00:15:34.240
+as i mentioned before,
+
+00:15:34.240 --> 00:15:35.519
+is very simple.
+
+00:15:35.519 --> 00:15:37.120
+To publish, you basically just
+
+00:15:37.120 --> 00:15:37.920
+push your changes
+
+00:15:37.920 --> 00:15:43.199
+and it automatically renders the code.
+
+15:43.199 --> 00:15:46.800
+It's something that is quite useful.
+
+15:46.800 --> 00:15:48.720
+But it is not perfect,
+
+00:15:48.720 --> 00:15:50.399
+and it's not able to understand
+
+00:15:50.399 --> 00:15:52.880
+the full Org. But for most of the things
+
+00:15:52.880 --> 00:15:53.680
+that I use for teaching,
+
+00:15:53.680 --> 00:15:55.600
+it's sufficiently good.
+
+00:15:55.600 --> 00:15:57.360
+It would be better if it was full
+
+00:15:57.360 --> 00:16:00.720
+at compliance, but it's not bad as it is.
+
+16:00.720 --> 00:16:02.463
+Version control. I think
+
+00:16:02.463 --> 00:16:03.839
+it's extremely valuable
+
+00:16:03.839 --> 00:16:05.199
+to have version control.
+
+00:16:05.199 --> 00:16:08.079
+It allows to actually use
+
+00:16:08.079 --> 00:16:08.959
+different computers
+
+00:16:08.959 --> 00:16:10.560
+or keep track of my changes,
+
+00:16:10.560 --> 00:16:11.920
+collaborate with authors,
+
+00:16:11.920 --> 00:16:13.040
+even have pull requests
+
+00:16:13.040 --> 00:16:13.759
+from the students.
+
+16:13.759 --> 16:16.320
+Actually it's very empowering
+
+16:16.320 --> 16:18.800
+for the students.
+
+16:18.800 --> 00:16:20.480
+Navigation, links, cut and paste
+
+00:16:20.480 --> 00:16:21.920
+between code blocks,
+
+00:16:21.920 --> 00:16:23.199
+you can even edit in place
+
+16:23.199 --> 16:26.160
+if you want to.
+
+16:26.160 --> 16:27.920
+In a pinch, you can actually use GitHub
+
+16:27.920 --> 00:16:30.000
+to do the editing of your file.
+
+00:16:30.000 --> 00:16:33.199
+Of course, it will not update your buffers.
+
+16:33.199 --> 00:16:35.199
+:exports both. This is very important.
+
+00:16:35.199 --> 00:16:40.160
+If we have a block, by default,
+
+16:40.160 --> 16:43.199
+GitHub will not typeset
+
+16:43.199 --> 00:16:44.399
+the output of that block.
+
+00:16:44.399 --> 00:16:45.839
+It will only put the source code,
+
+00:16:45.839 --> 00:16:47.199
+but not its output.
+
+16:47.199 --> 00:16:50.079
+In this case, if I actually showed this
+
+00:16:50.079 --> 00:16:52.720
+in GitHub, "hello world" will not appear.
+
+00:16:52.720 --> 00:16:55.120
+So what we need to do is for every block,
+
+00:16:55.120 --> 00:16:57.040
+we have to do :exports both.
+
+16:57.040 --> 00:16:58.720
+okay that's unfortunate,
+
+00:16:58.720 --> 00:17:01.120
+but we can deal with that.
+
+17:01.120 --> 00:17:03.920
+Once it's done, then the output
+
+00:17:03.920 --> 00:17:06.079
+is actually typeset.
+
+17:06.079 --> 00:17:07.520
+I mentioned that header args
+
+00:17:07.520 --> 00:17:09.039
+are very important,
+
+00:17:09.039 --> 00:17:10.079
+because those are the ones
+
+00:17:10.079 --> 00:17:12.799
+that set the parameters
+
+00:17:12.799 --> 00:17:14.640
+for each one of the blocks that you have.
+
+17:14.640 --> 17:16.000
+You don't want to have to type every
+
+17:16.000 --> 00:17:19.120
+single one of them at once.
+
+00:17:19.120 --> 00:17:20.880
+For example, let me go back to
+
+00:17:20.880 --> 00:17:22.880
+my presentation.
+
+17:23.839 --> 17:26.160
+Here's actually the parameters for C.
+
+17:26.160 --> 00:17:28.880
+C, I say, I don't want you to
+
+00:17:28.880 --> 00:17:30.000
+automatically add a main.
+
+00:17:30.000 --> 00:17:31.120
+I want to provide my main,
+
+00:17:31.120 --> 00:17:34.160
+and these are the flags to the compiler.
+
+17:34.160 --> 00:17:37.280
+With C++, similar. With SQLite,
+
+00:17:37.280 --> 00:17:38.720
+I said this is my database,
+
+17:38.720 --> 00:17:39.600
+this is the data,
+
+00:17:39.600 --> 00:17:41.360
+the file where the database lives,
+
+00:17:41.360 --> 00:17:44.559
+and for the results, I want you to insert
+
+17:44.559 --> 00:17:46.160
+the column names. I want to see
+
+00:17:46.160 --> 00:17:48.400
+the names of the columns in the result.
+
+17:48.400 --> 17:50.960
+So those are actually why
+
+17:50.960 --> 17:53.840
+the headers are important.
+
+17:53.840 --> 00:17:55.520
+There's one in general.
+
+00:17:55.520 --> 00:17:56.880
+That's :results output.
+
+00:17:56.880 --> 00:17:59.039
+If you're interested on showing
+
+00:17:59.039 --> 00:18:01.760
+the standard output of your snippet,
+
+00:18:01.760 --> 00:18:03.600
+then you have to use :results output.
+
+00:18:03.600 --> 00:18:04.799
+Otherwise, it will insert
+
+00:18:04.799 --> 00:18:06.720
+the result of the last expression.
+
+00:18:06.720 --> 00:18:08.000
+It just depends on what you want to show,
+
+18:08.000 --> 00:18:08.720
+but it's important
+
+00:18:08.720 --> 00:18:11.200
+that you are aware of that.
+
+18:11.200 --> 18:13.440
+I'm almost running out of time.
+
+18:13.440 --> 00:18:15.919
+There are some things that are C-specific
+
+00:18:15.919 --> 00:18:18.400
+and that I sort of covered
+
+00:18:18.400 --> 00:18:23.919
+during the demo.
+
+18:23.919 --> 00:18:26.000
+You can use advanced Org features,
+
+00:18:26.000 --> 00:18:29.039
+and you can actually use noweb.
+
+00:18:29.039 --> 00:18:30.640
+Now that's confusing for students,
+
+00:18:30.640 --> 00:18:33.600
+so i will suggest that you actually do it
+
+18:33.600 --> 00:18:34.880
+but then inform the students
+
+00:18:34.880 --> 00:18:37.760
+very clearly of that.
+
+18:37.760 --> 00:18:39.280
+Some potential issues:
+
+00:18:39.280 --> 00:18:42.400
+_ (underscore). _ is used everywhere.
+
+00:18:42.400 --> 00:18:44.640
+By default, it will try to export it--
+
+00:18:44.640 --> 00:18:46.960
+Org will try to export it as circumflex,
+
+00:18:46.960 --> 00:18:48.400
+the same as with GitHub.
+
+00:18:48.400 --> 00:18:52.480
+So we want to inform Org and GitHub
+
+00:18:52.480 --> 00:18:53.840
+not to do anything with them,
+
+00:18:53.840 --> 00:18:55.520
+and this is via the circumflex.
+
+00:18:55.520 --> 00:18:57.440
+So we said in #+OPTIONS: ^:nil ,
+
+00:18:57.440 --> 00:18:58.720
+and that actually takes care
+
+00:18:58.720 --> 00:19:01.679
+of the circumflex and also the underscore.
+
+00:19:01.679 --> 00:19:02.720
+It's kind of confusing
+
+00:19:02.720 --> 00:19:04.080
+because it's both,
+
+00:19:04.080 --> 00:19:05.120
+but it's actually named
+
+00:19:05.120 --> 00:19:06.720
+after the circumflex.
+
+19:06.720 --> 00:19:07.840
+The pipe character
+
+00:19:07.840 --> 00:19:08.880
+is one of those characters
+
+00:19:08.880 --> 00:19:10.640
+that is actually very, very common
+
+00:19:10.640 --> 00:19:12.799
+in programming, but if you put in a table,
+
+00:19:12.799 --> 00:19:14.480
+there's no way to do it. Like, okay,
+
+00:19:14.480 --> 00:19:16.559
+I wish I had this table nicely
+
+19:16.559 --> 00:19:19.520
+where I can say || here,
+
+00:19:19.520 --> 00:19:21.280
+but if I put this ||,
+
+00:19:21.280 --> 00:19:22.799
+it will actually interpret it
+
+00:19:22.799 --> 00:19:23.919
+as the separator.
+
+00:19:23.919 --> 00:19:25.760
+So that's one of the few things
+
+00:19:25.760 --> 00:19:27.679
+that's kind of annoying.
+
+19:27.679 --> 00:19:31.679
+Final words. See my configuration file,
+
+19:31.679 --> 00:19:35.520
+and try to typeset the code,
+
+00:19:35.520 --> 00:19:37.520
+the buffer as close as possible
+
+00:19:37.520 --> 00:19:38.720
+to what you want to present.
+
+00:19:38.720 --> 00:19:40.000
+As you can see here,
+
+00:19:40.000 --> 00:19:42.240
+I'm actually using colors to highlight
+
+00:19:42.240 --> 00:19:44.320
+by using the current line.
+
+19:44.320 --> 19:46.960
+Use yasnippets.
+
+19:46.960 --> 19:48.480
+They're amazing, and they will actually
+
+19:48.480 --> 19:51.440
+make your life much more useful.
+
+19:51.440 --> 19:53.280
+Experiment.
+
+19:53.280 --> 19:56.720
+Just a conclusion.
+
+19:56.720 --> 00:19:58.400
+Org mode and Emacs really make
+
+00:19:58.400 --> 00:20:01.039
+a wonderful, amazing environment
+
+00:20:01.039 --> 00:20:03.360
+for teaching programming.
+
+20:03.360 --> 20:06.640
+I just want to end by saying that
+
+20:06.640 --> 00:20:10.320
+I'm very grateful to all the Emacs community
+
+20:10.320 --> 00:20:14.159
+because I have benefited tremendously
+
+00:20:14.159 --> 00:20:16.080
+over the years. I have been using Emacs
+
+00:20:16.080 --> 00:20:18.960
+since 1991, so this is essentially
+
+00:20:18.960 --> 00:20:22.240
+my 30th year that have been using Emacs.
+
+00:20:22.240 --> 00:20:24.640
+I think that is the most important,
+
+00:20:24.640 --> 00:20:26.980
+most fundamental tool that I use
+
+00:20:26.980 --> 00:20:29.760
+day-to-day, from reading email,
+
+00:20:29.760 --> 00:20:32.480
+to doing my teaching, doing my papers,
+
+00:20:32.480 --> 00:20:34.960
+my research... it's everything.
+
+00:20:34.960 --> 00:20:37.039
+So thank you all
+
+20:37.039 --> 20:40.799
+and I hope that you find this useful.
+
+20:40.799 --> 00:20:42.799
+Bye.
+
+00:20:42.799 --> 00:20:43.799
+[captions by sachac]