summaryrefslogtreecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt
diff options
context:
space:
mode:
Diffstat (limited to '2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt')
-rw-r--r--2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt1723
1 files changed, 1723 insertions, 0 deletions
diff --git a/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt
new file mode 100644
index 00000000..46b7433f
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt
@@ -0,0 +1,1723 @@
+WEBVTT
+
+00:00:04.080 --> 00:00:07.359
+All right, then. Well, hello everyone.
+
+00:00:07.359 --> 00:00:11.519
+I hope you're all enjoying the EmacsConf.
+
+00:00:11.519 --> 00:00:15.040
+My name is Musa Al-hassy, and I hope you're
+
+00:00:15.040 --> 00:00:19.840
+excited to learn about powering up special blocks.
+
+00:00:19.840 --> 00:00:25.574
+Let's first off find out
+what these special blocks are,
+
+00:00:25.574 --> 00:00:27.920
+and see what we can go from.
+
+00:00:27.920 --> 00:00:30.240
+Yesterday, I saw a lot of cool talks
+
+00:00:30.240 --> 00:00:33.200
+and people were chatting about
+
+00:00:33.200 --> 00:00:37.200
+how should you present? Should you
+do it this way or that way?
+
+00:00:37.200 --> 00:00:39.931
+I thought maybe I should try a different way.
+
+00:00:39.931 --> 00:00:42.567
+But I'm talking about special blocks
+
+00:00:42.567 --> 00:00:45.039
+and if I show you an Emacs, then I have to export
+
+00:00:45.039 --> 00:00:47.840
+the HTML so you can see what it looks like
+
+00:00:47.840 --> 00:00:51.920
+or export to a PDF so you can see what it looks like.
+
+00:00:51.920 --> 00:00:54.239
+So I ended up writing in org-reveal,
+
+00:00:54.239 --> 00:00:58.233
+and joyously, this just works.
+
+00:00:58.960 --> 00:01:00.879
+You can just see things here.
+
+00:01:00.879 --> 00:01:03.452
+I was worried that I'd have to take pictures
+
+00:01:03.452 --> 00:01:09.760
+and then insert pings, so that was a delight.
+
+00:01:09.760 --> 00:01:15.704
+Okay. Special blocks are these things like a center small quote.
+
+00:01:15.704 --> 00:01:17.280
+That's what a special block is,
+
+00:01:17.280 --> 00:01:19.733
+and with a bit of Lisp, we can make
+
+00:01:19.733 --> 00:01:22.741
+special blocks and link types.
+
+00:01:22.741 --> 00:01:24.799
+Right. Using a single interface.
+
+00:01:24.799 --> 00:01:27.344
+The interface is going to be similar
+
+00:01:27.344 --> 00:01:29.281
+to one many people are familiar with.
+
+00:01:29.281 --> 00:01:34.712
+In particular, Org Babel's src interface
+
+00:01:34.712 --> 00:01:37.840
+as well as using global header arguments for link types.
+
+00:01:37.840 --> 00:01:39.450
+The idea is to write it once
+
+00:01:39.450 --> 00:01:41.200
+and generate many different kinds.
+
+00:01:41.200 --> 00:01:45.213
+You write in Org markup and you can have HTML,
+
+00:01:45.213 --> 00:01:49.767
+you can have PDF, and joyously, org-reveal.
+
+00:01:49.767 --> 00:01:53.600
+That was an unexpected delight.
+
+00:01:53.600 --> 00:01:57.840
+Here are a few that you'll just see
+
+00:01:57.840 --> 00:02:01.759
+in this presentation.
+
+00:02:01.759 --> 00:02:05.040
+I won't show some of these link-only ones,
+
+00:02:05.040 --> 00:02:06.799
+but we'll see a few of these other ones
+
+00:02:06.799 --> 00:02:09.500
+just to make the presentation look nice
+
+00:02:09.500 --> 00:02:11.520
+So the presentation is really going to
+
+00:02:11.520 --> 00:02:14.000
+present these blocks and the mechanism
+
+00:02:14.000 --> 00:02:15.120
+at the same time.
+
+00:02:15.120 --> 00:02:18.400
+No HTML was written.
+
+00:02:18.400 --> 00:02:21.280
+Look, Ma! No HTML, just pure Org Mode,
+
+00:02:21.280 --> 00:02:25.840
+and you get all these beautiful boxes and things.
+
+00:02:25.840 --> 00:02:27.680
+The motivation for this is...
+
+00:02:29.120 --> 00:02:31.200
+you're online, you run into a blog,
+
+00:02:31.200 --> 00:02:32.120
+and you see something you like,
+
+00:02:32.120 --> 00:02:33.120
+and you're like, man,
+
+00:02:33.120 --> 00:02:36.640
+you know, I wish I could produce that.
+
+00:02:36.640 --> 00:02:41.639
+But you check, and the author wrote raw HTML.
+
+00:02:41.639 --> 00:02:44.239
+You know, #+HTML: everywhere.
+
+00:02:44.239 --> 00:02:49.533
+That's going to obscure your real content.
+
+00:02:49.533 --> 00:02:51.200
+It's going to be surrounded by all this
+
+00:02:51.200 --> 00:02:54.239
+styling information. That's unfortunate.
+
+00:02:54.239 --> 00:02:57.033
+The author decides to use an Org macro.
+
+00:02:57.033 --> 00:02:58.959
+All right, a bit better,
+
+00:02:58.959 --> 00:03:00.333
+but then what if you decide,
+
+00:03:00.333 --> 00:03:04.667
+hey I want to make a PDF? Not great.
+
+00:03:04.667 --> 00:03:06.000
+And then the worst of all,
+
+00:03:06.000 --> 00:03:07.840
+the author doesn't give you the source,
+
+00:03:07.840 --> 00:03:10.159
+and then you have to view page source,
+
+00:03:10.159 --> 00:03:13.760
+and learn cascading style sheets,
+
+00:03:14.239 --> 00:03:15.767
+and sit in a corner and cry,
+
+00:03:15.767 --> 00:03:18.080
+and decide to do other things with your life.
+
+00:03:18.080 --> 00:03:22.640
+We want to give you Org users numerous styles
+
+00:03:22.640 --> 00:03:27.200
+and an extensible mechanism to add more of these
+
+00:03:27.200 --> 00:03:28.799
+aesthetically pleasing styles,
+
+00:03:28.799 --> 00:03:31.200
+to have really nice things
+
+00:03:31.200 --> 00:03:33.933
+look one way in the HTML
+
+00:03:33.933 --> 00:03:36.567
+and look almost the same way in the PDF
+
+00:03:36.567 --> 00:03:38.667
+and other back ends.
+
+00:03:38.667 --> 00:03:41.680
+And if by having these newer ones,
+
+00:03:41.680 --> 00:03:45.519
+people might be encouraged to try making new ones,
+
+00:03:45.519 --> 00:03:49.040
+especially when the interface is not so difficult,
+
+00:03:49.040 --> 00:03:54.159
+that's the aim.
+
+00:03:54.159 --> 00:03:59.120
+So let's have a real story to motivate this even more.
+
+00:03:59.120 --> 00:04:03.533
+Here's three friends. I hope I don't butcher their names,
+
+00:04:03.533 --> 00:04:04.640
+but these friends are called
+
+00:04:04.640 --> 00:04:08.720
+Amin, Sacha, and Corwin. They're organizing a conference,
+
+00:04:08.720 --> 00:04:12.080
+EmacsConf 2020.
+
+00:04:12.080 --> 00:04:14.239
+So Sacha decides to write an Org file
+
+00:04:14.239 --> 00:04:16.479
+and she would like some feedback.
+
+00:04:16.479 --> 00:04:19.840
+Okay. Just to make it clear, there's no...
+
+00:04:19.840 --> 00:04:22.960
+just how easy this looks,
+
+00:04:22.960 --> 00:04:27.280
+let's look at the source for this block.
+
+00:04:27.280 --> 00:04:30.720
+Notice it's just the word "green," then a colon,
+
+00:04:30.720 --> 00:04:37.333
+then Amin. No div style coloring,
+
+00:04:37.333 --> 00:04:38.479
+just green:Amin.
+
+00:04:38.479 --> 00:04:41.520
+A very pleasant Org markup.
+
+00:04:41.520 --> 00:04:44.960
+So that's quite nice. Put some bold around it.
+
+00:04:44.960 --> 00:04:46.433
+Not too difficult.
+
+00:04:46.433 --> 00:04:49.900
+Hopefully, this will be useful to other people as well.
+
+00:04:49.900 --> 00:04:52.240
+So what kind of feedback
+
+00:04:52.240 --> 00:04:55.233
+would Sacha expect to get?
+
+00:04:55.233 --> 00:04:59.120
+Maybe she would expect top-level remarks
+
+00:04:59.120 --> 00:05:00.833
+visible in the export.
+
+00:05:00.833 --> 00:05:04.400
+When she makes an HTML, she can see right there a big block.
+
+00:05:04.400 --> 00:05:09.533
+Right. Maybe Amin will suggest to Sacha,
+
+00:05:09.533 --> 00:05:11.120
+please replace this part
+
+00:05:11.120 --> 00:05:12.267
+with this other part
+
+00:05:12.267 --> 00:05:13.333
+or replace this word
+
+00:05:13.333 --> 00:05:14.639
+with this other word.
+
+00:05:14.639 --> 00:05:16.960
+This is not really possible
+
+00:05:16.960 --> 00:05:21.919
+with raw HTML or with even LaTeX.
+
+00:05:21.919 --> 00:05:24.000
+You'd have to have multiple arguments:
+
+00:05:24.000 --> 00:05:25.360
+the first argument, and then
+
+00:05:25.360 --> 00:05:28.800
+the replacement argument. It's a bit clunky.
+
+00:05:28.800 --> 00:05:32.080
+But with our setup, you just write some text,
+
+00:05:32.080 --> 00:05:34.367
+write #+replace_with
+
+00:05:34.367 --> 00:05:36.240
+and then write more text, and you're good to go.
+
+00:05:36.240 --> 00:05:39.440
+Normal Org markup.
+
+00:05:39.440 --> 00:05:40.720
+Everyone speaks different languages.
+
+00:05:40.720 --> 00:05:43.833
+Maybe they want to use one word,
+
+00:05:43.833 --> 00:05:45.919
+or they're arguing about
+
+00:05:45.919 --> 00:05:48.000
+whether we talk about frames or windows,
+
+00:05:48.000 --> 00:05:50.560
+so maybe they want to have some translations.
+
+00:05:50.560 --> 00:05:53.433
+So there are different kinds of feedback.
+
+00:05:53.433 --> 00:05:55.360
+Let's take an example.
+
+00:05:55.360 --> 00:05:59.360
+Look at what they are.
+
+00:05:59.360 --> 00:06:02.560
+For example, Sacha might write
+
+00:06:02.560 --> 00:06:06.160
+this Org Mode right here,
+
+00:06:06.160 --> 00:06:09.759
+and then in her HTML exports, you might see this,
+
+00:06:09.759 --> 00:06:12.733
+and her feedback might look really nicely
+
+00:06:12.733 --> 00:06:13.840
+from anyone who says
+
+00:06:14.560 --> 00:06:17.400
+let's do some Lisp instead of mathematics.
+
+00:06:17.400 --> 00:06:18.560
+Let's just do some Lisp.
+
+00:06:18.560 --> 00:06:22.479
+Corwin says, let's not be so silly.
+
+00:06:22.479 --> 00:06:25.120
+Let's just say 9 a.m. and move on.
+
+00:06:28.080 --> 00:06:31.360
+Amin likes to export to PDF,
+
+00:06:31.360 --> 00:06:34.333
+and so he writes his top-level remarks using LaTeX.
+
+00:06:34.333 --> 00:06:36.900
+That's how. To get this square
+
+00:06:36.900 --> 00:06:38.960
+Amin: please change whatever,
+
+00:06:38.960 --> 00:06:43.120
+he might write like this: #+latex:.
+
+00:06:43.120 --> 00:06:50.880
+But then Sacha only exports to HTML, for example,
+
+00:06:50.880 --> 00:06:54.880
+so she doesn't look at the PDF,
+
+00:06:54.880 --> 00:06:57.867
+and she may not see his top-level feedback
+
+00:06:57.867 --> 00:07:00.667
+with those nice brackets and and bold.
+
+00:07:00.667 --> 00:07:03.120
+She might think everything's good.
+
+00:07:03.120 --> 00:07:06.160
+That can be a bit disastrous.
+
+00:07:06.160 --> 00:07:08.600
+So maybe Sacha will then
+
+00:07:08.600 --> 00:07:13.199
+make some of her own feedback.
+
+00:07:13.199 --> 00:07:16.160
+To produce it, she might write
+
+00:07:16.560 --> 00:07:21.680
+HTML commands, #+html: to get that.
+
+00:07:21.680 --> 00:07:24.100
+But then Amin will make a PDF,
+
+00:07:24.100 --> 00:07:25.680
+and this won't stick out.
+
+00:07:25.680 --> 00:07:28.367
+So he might think everything's okay,
+
+00:07:28.367 --> 00:07:30.160
+even though it's not.
+
+00:07:30.160 --> 00:07:33.100
+Then Corwin actually decides,
+
+00:07:33.100 --> 00:07:35.900
+"Hey, let me read the exported result
+
+00:07:35.900 --> 00:07:38.867
+and there's all those feedback
+from two people
+
+00:07:38.867 --> 00:07:42.633
+who haven't read anything,
+because maybe they were in a rush,
+
+00:07:42.633 --> 00:07:45.167
+and didn't see the top-level feedback.
+
+00:07:45.167 --> 00:07:50.000
+So they agree. "Hey, let's have a
+uniform Org interface that exports
+
+00:07:50.000 --> 00:07:52.567
+to both HTML and PDF.
+
+00:07:52.567 --> 00:07:54.080
+Make both of us happy."
+
+00:07:54.080 --> 00:07:58.160
+Okay. So they decide to use
+Org special blocks.
+
+00:07:58.160 --> 00:08:01.300
+Right. To set this up,
+
+00:08:01.300 --> 00:08:04.400
+they need to read a little bit of Lisp,
+
+00:08:04.400 --> 00:08:08.879
+hooks, advice, macros to get all of this
+set up,
+
+00:08:08.879 --> 00:08:12.319
+and then they'll use Org as the main
+interface.
+
+00:08:12.319 --> 00:08:16.479
+It's a lot of work, but it's worth it,
+right? maybe?
+
+00:08:16.479 --> 00:08:19.360
+But then Corwin's a bit terse.
+
+00:08:19.759 --> 00:08:24.333
+Corwin maybe doesn't want to
+write using blocks.
+
+00:08:24.333 --> 00:08:26.080
+He thinks they're overkill.
+
+00:08:26.080 --> 00:08:32.560
+Sacha wants HTML, and Amin wants PDF,
+and Corwin wants org-reveal.
+
+00:08:32.560 --> 00:08:35.533
+So now they have to reformat
+all their code.
+
+00:08:35.533 --> 00:08:36.900
+And then they need to use org link types
+
+00:08:36.900 --> 00:08:38.867
+to reduce the overkill,
+
+00:08:38.867 --> 00:08:41.367
+so they can try to avoid duplication
+
+00:08:41.367 --> 00:08:46.800
+by factoring things out into
+self-contained functions.
+
+00:08:46.800 --> 00:08:50.320
+But now, to set up our links,
+
+00:08:50.320 --> 00:08:55.467
+we'll have to learn a new interface, org
+setup link.
+
+00:08:55.467 --> 00:09:02.160
+Learn a little bit about fonts, follow
+links, export handlers...
+
+00:09:02.160 --> 00:09:05.040
+It's so much. That's so much. But then,
+
+00:09:05.040 --> 00:09:06.800
+the friends, they learn a lot.
+
+00:09:06.800 --> 00:09:08.399
+They learn about defun.
+
+00:09:08.399 --> 00:09:11.120
+So these words are red.
+
+00:09:11.120 --> 00:09:12.185
+You get a little explanation.
+
+00:09:12.185 --> 00:09:14.320
+I think it's a bit too small for anyone
+to read.
+
+00:09:14.320 --> 00:09:18.000
+This is Lisp documentation for defun.
+
+00:09:18.000 --> 00:09:21.600
+advice-add. There's some Lisp
+documentation.
+
+00:09:21.600 --> 00:09:23.600
+They learn about destructuring -let.
+
+00:09:23.600 --> 00:09:25.279
+This is from the dash library.
+
+00:09:25.279 --> 00:09:26.959
+Here's all that glorious,
+
+00:09:26.959 --> 00:09:28.800
+glorious documentation with examples.
+
+00:09:28.800 --> 00:09:30.300
+Sorry. I like that.
+
+00:09:30.300 --> 00:09:32.467
+They might make
+an ad-hoc mechanism
+
+00:09:32.467 --> 00:09:35.400
+to simulate arguments for special blocks,
+
+00:09:35.400 --> 00:09:38.500
+so something maybe called
+extract-arguments,
+
+00:09:38.500 --> 00:09:41.533
+and then, of course, to make
+new link types,
+
+00:09:41.533 --> 00:09:42.480
+they have to learn about
+
+00:09:42.480 --> 00:09:47.400
+org-link-set-parameters and
+its numerous bits and pieces.
+
+00:09:49.920 --> 00:09:53.600
+Let's close all these ones down.
+
+00:09:53.600 --> 00:09:55.800
+Of course they also need to be
+comfortable
+
+00:09:55.800 --> 00:09:59.920
+with loops and maps and matching and
+string functions.
+
+00:09:59.920 --> 00:10:02.560
+So it's a bit of a pain.
+
+00:10:03.360 --> 00:10:05.839
+It's probably not worth it.
+
+00:10:05.839 --> 00:10:07.767
+Maybe I'll just rush things quickly,
+
+00:10:07.767 --> 00:10:09.360
+or do it ad-hoc...
+
+00:10:10.320 --> 00:10:13.680
+We have things to do.
+
+00:10:13.680 --> 00:10:19.367
+But maybe the squad wants to have a
+modular and unified interface
+
+00:10:19.367 --> 00:10:23.700
+so everyone's comfortable with defun to
+define a function
+
+00:10:23.700 --> 00:10:29.440
+and they say, "It would be nice if we
+could just define simultaneously
+
+00:10:29.440 --> 00:10:32.959
+both a block and the link type."
+
+00:10:32.959 --> 00:10:36.000
+That way, we have a single interface
+
+00:10:36.000 --> 00:10:37.867
+Org mode, for these things.
+
+00:10:37.867 --> 00:10:39.767
+It would be nice if it was modular.
+
+00:10:39.767 --> 00:10:44.633
+If I defined a one kind of block and
+you defined another,
+
+00:10:44.633 --> 00:10:45.519
+we could compose them,
+
+00:10:45.519 --> 00:10:49.360
+then get a nice bigger block, like LEGO.
+
+00:10:49.360 --> 00:10:52.320
+That would be nice. Building blocks.
+
+00:10:52.320 --> 00:10:56.240
+This is what we have come up with,
+called defblock.
+
+00:10:56.240 --> 00:11:01.760
+It also has a long documentation string
+containing examples and things.
+
+00:11:01.760 --> 00:11:04.800
+So that way, it can try to be useful.
+
+00:11:04.800 --> 00:11:10.880
+Let's look at a solution to these
+friends' trilemma.
+
+00:11:10.880 --> 00:11:14.320
+So here's a way to define a block.
+
+00:11:14.320 --> 00:11:22.320
+It doesn't look that difficult, but this
+is how they can define a block
+
+00:11:22.320 --> 00:11:25.920
+for their top-level feedback.
+
+00:11:25.920 --> 00:11:28.959
+Let's look at the three main parts
+together.
+
+00:11:28.959 --> 00:11:31.233
+It's not that difficult, I hope.
+
+00:11:31.233 --> 00:11:35.300
+Just six lines, and that's including a
+documentation string,
+
+00:11:35.300 --> 00:11:37.633
+newlines and things.
+
+00:11:37.633 --> 00:11:43.300
+So in line 1, we define the block just
+like you define a function.
+
+00:11:43.300 --> 00:11:44.880
+We define a block.
+
+00:11:44.880 --> 00:11:47.433
+The block name is going to be called
+"feedback."
+
+00:11:47.433 --> 00:11:49.680
+It has an author, "who."
+
+00:11:49.680 --> 00:11:54.133
+The author has no default value.
+
+00:11:54.133 --> 00:11:57.760
+It has a color, and the color has a
+default value of red.
+
+00:11:57.760 --> 00:12:01.680
+So just as when you define functions,
+
+00:12:01.680 --> 00:12:06.233
+you start by define or defblock,
+
+00:12:06.233 --> 00:12:13.440
+then the name, some mandatory argument,
+and some optional arguments.
+
+00:12:13.440 --> 00:12:18.480
+Then the next stage is definition.
+Documentation.
+
+00:12:18.480 --> 00:12:20.133
+The people who use this,
+
+00:12:20.133 --> 00:12:22.880
+which are future you or future me,
+
+00:12:22.880 --> 00:12:25.519
+might want to know what this is.
+
+00:12:25.519 --> 00:12:27.839
+So let's get to document this.
+
+00:12:27.839 --> 00:12:32.079
+For Corwin, who might want to use
+tooltips...
+
+00:12:32.079 --> 00:12:37.120
+When Corwin writes feedback in Emacs,
+they'll see a nice little tooltip,
+
+00:12:37.120 --> 00:12:38.639
+and the tooltip will have
+
+00:12:38.639 --> 00:12:41.279
+this documentation string.
+
+00:12:41.279 --> 00:12:43.279
+That'll be nice.
+
+00:12:43.279 --> 00:12:45.980
+And then here's the third part.
+
+00:12:45.980 --> 00:12:48.067
+The last three lines are not so
+difficult.
+
+00:12:48.067 --> 00:12:52.800
+If the backend is HTML,
+
+00:12:52.800 --> 00:12:55.360
+please use this template string.
+
+00:12:55.360 --> 00:12:57.440
+Otherwise, use the other string.
+
+00:12:57.440 --> 00:13:01.279
+For each of these string markers,
+
+00:13:01.279 --> 00:13:04.959
+please put in the color, who wrote it,
+and then the contents
+
+00:13:04.959 --> 00:13:07.279
+of the special block or the link type.
+
+00:13:08.160 --> 00:13:11.600
+So that's pretty neat. Not so difficult.
+
+00:13:11.600 --> 00:13:14.639
+I thought that was kind of cool,
+
+00:13:14.639 --> 00:13:16.600
+then noticed it's anaphoric.
+
+00:13:16.600 --> 00:13:21.033
+This defblock gives you two new names.
+
+00:13:21.033 --> 00:13:23.433
+It gives you a name called contents,
+
+00:13:23.433 --> 00:13:26.480
+and it gives you a name called backend.
+
+00:13:26.480 --> 00:13:29.733
+So even if you're writing a defblock
+
+00:13:29.733 --> 00:13:32.560
+and you intend it to be used
+only for links...
+
+00:13:32.560 --> 00:13:35.440
+Like these colors, for example.
+
+00:13:35.440 --> 00:13:38.399
+These colors were defined using defblock.
+
+00:13:38.399 --> 00:13:41.279
+I used them as links right here.
+
+00:13:41.279 --> 00:13:43.360
+You don't need to worry
+
+00:13:43.360 --> 00:13:45.300
+where does the text come from
+in the link.
+
+00:13:45.300 --> 00:13:48.959
+If I say "red:Bob," is it Bob?
+
+00:13:48.959 --> 00:13:52.000
+Or if I put a description, is it the
+description?
+
+00:13:52.000 --> 00:13:54.000
+So it's whatever is available will
+
+00:13:54.000 --> 00:13:56.720
+become the value of contents.
+
+00:13:56.720 --> 00:13:59.199
+If you're really interested
+
+00:13:59.199 --> 00:14:02.433
+and you want to do some intricate stuff,
+
+00:14:02.433 --> 00:14:06.933
+defblock also gives you something called
+raw-contents,
+
+00:14:06.933 --> 00:14:08.633
+if you really want to touch
+
+00:14:08.633 --> 00:14:12.639
+the raw contents with all of the Org
+markups still there.
+
+00:14:12.639 --> 00:14:19.440
+Let's see how everyone can communicate
+amongst themselves
+
+00:14:19.440 --> 00:14:22.480
+using this new interface.
+
+00:14:22.480 --> 00:14:26.000
+So, Sacha speculates and she... How does
+
+00:14:26.000 --> 00:14:28.399
+she speculate for her Org HTML?
+
+00:14:28.399 --> 00:14:33.733
+She might just write. Hey look at that,
+no HTML, nice.
+
+00:14:34.800 --> 00:14:36.833
+Amin wants to have some green,
+
+00:14:36.833 --> 00:14:39.600
+and so he just says, hey here's some
+color green.
+
+00:14:39.600 --> 00:14:42.959
+There you go. It looks almost the same.
+
+00:14:42.959 --> 00:14:48.267
+Notice that the main argument is right
+here.
+
+00:14:48.267 --> 00:14:49.680
+defblock took an author,
+
+00:14:49.680 --> 00:14:51.333
+and here's the author again.
+
+00:14:51.333 --> 00:14:53.920
+And now the optional argument
+
+00:14:53.920 --> 00:14:57.007
+uses the org babel source interface
+
+00:14:57.007 --> 00:15:02.867
+You just say :, then a key, and then the
+argument. Quite nice.
+
+00:15:02.867 --> 00:15:07.920
+Corwin doesn't want to use blocks.
+It's a bit of an overkill.
+
+00:15:07.920 --> 00:15:12.959
+He can just write a link.
+
+00:15:12.959 --> 00:15:17.440
+So the main argument is now
+the label of the link,
+
+00:15:17.440 --> 00:15:23.667
+and the description of the link is the
+contents of the feedback.
+
+00:15:23.667 --> 00:15:25.680
+So that was quite nice.
+
+00:15:25.680 --> 00:15:29.360
+So it looks like everyone uses the same
+interface on the left
+
+00:15:29.360 --> 00:15:32.800
+and can have varying outputs.
+
+00:15:32.800 --> 00:15:34.480
+I think it looks quite nice,
+
+00:15:34.480 --> 00:15:36.639
+and I hope you do too.
+
+00:15:36.639 --> 00:15:38.800
+There's a few more.
+
+00:15:38.800 --> 00:15:41.800
+Maybe, as you saw in some previous ones,
+
+00:15:41.800 --> 00:15:43.920
+we had text side beside side,
+
+00:15:43.920 --> 00:15:47.440
+or we folded some regions away.
+
+00:15:47.440 --> 00:15:50.959
+We put some things in pretty boxes.
+
+00:15:50.959 --> 00:15:57.120
+We had some spoilers at the very
+beginning that we hid some text.
+
+00:15:57.120 --> 00:16:01.680
+We demoed some texts. Here's some Org
+and here's what it looks like,
+
+00:16:01.680 --> 00:16:05.199
+and most importantly, they compose.
+
+00:16:05.199 --> 00:16:12.639
+There's a a macro called thread-block.
+
+00:16:12.639 --> 00:16:17.000
+thread-block call, and it lets you
+thread the contents
+
+00:16:17.000 --> 00:16:18.000
+through a number of blocks,
+
+00:16:18.000 --> 00:16:20.639
+treating them as if they were functions.
+
+00:16:20.639 --> 00:16:22.480
+So, really, you can think of a block
+
+00:16:23.680 --> 00:16:25.567
+as a string-valued function.
+
+00:16:25.567 --> 00:16:28.533
+That's pretty neat, I think.
+
+00:16:28.533 --> 00:16:30.959
+Thank you for listening.
+
+00:16:31.759 --> 00:16:34.320
+I hope you've enjoyed this little
+
+00:16:34.880 --> 00:16:38.160
+happy fun time with the Emacs and
+friends.
+
+00:16:38.160 --> 00:16:43.730
+I'll happily answer questions right now.
+
+00:16:45.360 --> 00:16:49.467
+Someone says: "Why did you put
+optional arguments
+
+00:16:49.467 --> 00:16:50.480
+in a separate list
+
+00:16:50.480 --> 00:16:54.560
+rather than using cl-style argument
+lists?"
+
+00:16:54.560 --> 00:16:58.399
+So that's a very good question,
+
+00:16:58.399 --> 00:17:00.000
+and I will answer that
+
+00:17:00.000 --> 00:17:05.467
+by showing you a more involved
+definition of feedback.
+
+00:17:05.467 --> 00:17:14.567
+Let's look at a more involved one right
+here.
+
+00:17:14.567 --> 00:17:19.280
+So, for example, this one is
+called rremark.
+
+00:17:19.280 --> 00:17:23.439
+Please let me know if my text is not
+sufficiently big.
+
+00:17:23.439 --> 00:17:28.033
+Here is why we have two arguments.
+
+00:17:28.033 --> 00:17:30.720
+That takes two arguments instead of one
+
+00:17:30.720 --> 00:17:33.360
+for its argument list.
+
+00:17:33.360 --> 00:17:34.799
+You have def block,
+
+00:17:34.799 --> 00:17:36.000
+then you have the name,
+
+00:17:36.000 --> 00:17:40.467
+then you have the first argument list
+
+00:17:40.467 --> 00:17:42.880
+and the second argument list.
+
+00:17:42.880 --> 00:17:46.080
+The first argument list
+
+00:17:46.080 --> 00:17:49.280
+takes the text right after the begin.
+
+00:17:49.280 --> 00:17:53.000
+The text right after the begin is the
+main argument.
+
+00:17:53.000 --> 00:17:59.200
+And then the remaining key-value pairs
+are in the second argument list.
+
+00:18:00.320 --> 00:18:03.280
+Now the reason we have two is because
+
+00:18:03.280 --> 00:18:08.880
+in order to streamline the interface to
+account for both special blocks
+
+00:18:08.880 --> 00:18:13.360
+and Org link types, what we do is we say,
+
+00:18:13.360 --> 00:18:18.000
+in the first argument list, you can give
+a name to the first argument,
+
+00:18:18.000 --> 00:18:19.633
+give it a default value,
+
+00:18:19.633 --> 00:18:28.800
+and anything else you provide will
+become part of the link information.
+
+00:18:28.800 --> 00:18:30.861
+For example, this link,
+
+00:18:30.861 --> 00:18:32.833
+we decided to make its face
+angry red.
+
+00:18:32.833 --> 00:18:36.433
+You might want to give other
+features to links.
+
+00:18:36.433 --> 00:18:39.100
+So we're trying to streamline
+the interface
+
+00:18:39.100 --> 00:18:41.733
+for both special blocks and
+Org link types,
+
+00:18:41.733 --> 00:18:46.240
+and we thought this way was quite nice.
+
+00:18:46.240 --> 00:18:47.500
+That was the main reason.
+
+00:18:47.500 --> 00:18:52.480
+Someone asks--
+
+00:18:52.480 --> 00:18:55.039
+if you have follow-ups, please ask--
+
+00:18:55.039 --> 00:18:57.600
+Someone asks, "Do you intend to try to
+
+00:18:57.600 --> 00:19:00.559
+upstream this amazing work into Org?"
+
+00:19:00.559 --> 00:19:02.300
+Well, I'm glad you like it.
+
+00:19:02.300 --> 00:19:04.559
+I don't know how to upstream,
+
+00:19:04.559 --> 00:19:06.400
+but I will look into it,
+
+00:19:06.400 --> 00:19:09.833
+and any advice or guidance
+would be much appreciated.
+
+00:19:11.840 --> 00:19:15.267
+Lisp is awesome. Just as
+defun is a macro,
+
+00:19:15.267 --> 00:19:17.120
+defblock is a macro, and then
+
+00:19:17.120 --> 00:19:20.240
+source blocks are awesome.
+
+00:19:20.240 --> 00:19:22.467
+Now maybe we can have arguments in
+special blocks,
+
+00:19:22.467 --> 00:19:28.799
+and motivate and encourage more
+people to learn Lisp.
+
+00:19:28.799 --> 00:19:32.559
+So another person asks,
+
+00:19:32.559 --> 00:19:35.280
+"What is used to produce colorful
+
+00:19:35.280 --> 00:19:38.559
+boxes around the cursor?"
+
+00:19:38.559 --> 00:19:40.400
+I'm not quite sure if you're asking...
+
+00:19:40.400 --> 00:19:42.559
+Are you talking about my cursor
+right here,
+
+00:19:42.559 --> 00:19:48.400
+or are you talking about in the slide?
+
+00:19:48.400 --> 00:19:53.767
+So this cursor is some application
+called Streambrush,
+
+00:19:53.767 --> 00:19:55.440
+that I had to purchase.
+
+00:19:55.440 --> 00:19:59.039
+Unfortunately, I could not find a a
+suitable free one.
+
+00:19:59.039 --> 00:20:03.067
+The blocks... I can demonstrate some
+Emacs Lisp.
+
+00:20:03.067 --> 00:20:04.467
+I can open up my Emacs, if people like,
+
+00:20:04.467 --> 00:20:06.320
+and we can try some things out.
+
+00:20:06.320 --> 00:20:09.440
+Happy to do that.
+
+00:20:09.440 --> 00:20:10.133
+You're welcome.
+
+00:20:10.133 --> 00:20:15.520
+Someone asks a side question about
+org-reveal: "How do you get
+
+00:20:15.520 --> 00:20:17.440
+bespoke or multiple-column layouts
+
+00:20:17.440 --> 00:20:19.120
+without using HTML?"
+
+00:20:19.120 --> 00:20:22.559
+Excellent question. That's what we do.
+
+00:20:22.559 --> 00:20:25.533
+That's what this project is about.
+
+00:20:25.533 --> 00:20:27.000
+So it's not org-reveal,
+
+00:20:27.000 --> 00:20:30.267
+it's our fancy parallel block.
+
+00:20:30.267 --> 00:20:33.440
+So we have this thing. You say,
+#+begin_parallel.
+
+00:20:33.440 --> 00:20:35.679
+You say how many columns you would like.
+
+00:20:35.679 --> 00:20:37.967
+Do you want a bar or not?
+
+00:20:37.967 --> 00:20:39.679
+And then you write some text,
+
+00:20:39.679 --> 00:20:44.400
+and then you get some text, and
+according with the bar or not.
+
+00:20:44.400 --> 00:20:47.520
+That's how we achieve that in our slides.
+
+00:20:47.520 --> 00:20:52.880
+I'm not quite sure where this was.
+
+00:20:52.880 --> 00:20:59.520
+Somewhere here, I think.
+
+00:20:59.520 --> 00:21:06.240
+Let me try to find this for you.
+
+00:21:06.240 --> 00:21:10.433
+I can't seem to find where the parallel
+blocks were. Apologies.
+
+00:21:10.433 --> 00:21:15.039
+Let's move on to the next question,
+I suppose.
+
+00:21:15.039 --> 00:21:18.400
+I'm pretty sure they're here. Ah, there
+they are.
+
+00:21:18.400 --> 00:21:22.640
+So these were just instances of using
+
+00:21:22.640 --> 00:21:26.480
+the parallel block, and it makes things
+parallel.
+
+00:21:26.480 --> 00:21:27.633
+So that's quite nice.
+
+00:21:27.633 --> 00:21:33.360
+Another person asks,
+
+00:21:33.360 --> 00:21:37.840
+"How does this relate to pandoc,
+
+00:21:37.840 --> 00:21:40.960
+which is used for converting between
+markup formats?"
+
+00:21:40.960 --> 00:21:43.919
+So all we're doing is we're saying,
+
+00:21:43.919 --> 00:21:47.679
+hey, please write Org because Org is
+just fantastic,
+
+00:21:47.679 --> 00:21:49.267
+and we love it, and it's the dream,
+
+00:21:49.267 --> 00:21:51.760
+and if you would like to view things
+
+00:21:51.760 --> 00:21:55.900
+in HTML, or in org-reveal, or in PDF,
+
+00:21:55.900 --> 00:21:58.559
+that's up to the user.
+
+00:22:02.320 --> 00:22:06.080
+Made it too small now.
+So here is an example.
+
+00:22:06.080 --> 00:22:10.240
+Here's how parallel is implemented,
+
+00:22:10.240 --> 00:22:14.320
+just as a quick example, not too long.
+
+00:22:14.320 --> 00:22:17.800
+About half of the implementation is
+documentation,
+
+00:22:17.800 --> 00:22:22.720
+so, hopefully, that speaks for for how
+useful this feature is.
+
+00:22:22.720 --> 00:22:25.280
+We decide if there's a rule or not.
+
+00:22:25.280 --> 00:22:28.080
+We look for the column break.
+
+00:22:28.080 --> 00:22:30.600
+Here we're looking at the backend.
+
+00:22:30.600 --> 00:22:31.840
+If the backend is LaTeX,
+
+00:22:31.840 --> 00:22:34.133
+please use this incantation
+
+00:22:34.133 --> 00:22:37.679
+with multicolumns, minipages,
+what have you.
+
+00:22:37.679 --> 00:22:41.600
+If the backend is something else, please
+do this:
+
+00:22:41.600 --> 00:22:48.080
+div, style and other gibberish that we
+don't really want to look at.
+
+00:22:48.080 --> 00:22:51.760
+Pandoc works from Org,
+
+00:22:51.760 --> 00:22:53.633
+so it might not work directly,
+
+00:22:53.633 --> 00:22:59.679
+since our interface... The way we set it
+up is: when you try to export,
+
+00:22:59.679 --> 00:23:03.039
+we hook in and we do a bunch of
+pre-processing,
+
+00:23:03.039 --> 00:23:07.440
+so this defblock is a
+string-valued function.
+
+00:23:07.440 --> 00:23:13.919
+Whenever we see these #+begin_parallel
+when you do an export,
+
+00:23:13.919 --> 00:23:17.767
+I tell Emacs, hold up, look for those
+#+begin_parallels, please.
+
+00:23:17.767 --> 00:23:20.320
+Oh, you found them? Grab that text.
+
+00:23:20.320 --> 00:23:21.533
+You grabbed it. Great.
+
+00:23:21.533 --> 00:23:24.080
+Now please apply this person's function
+
+00:23:24.080 --> 00:23:27.120
+onto that text, and splice in the result.
+
+00:23:27.120 --> 00:23:30.400
+So when you export, we're performing
+
+00:23:30.400 --> 00:23:35.120
+arbitrary computations on your text.
+
+00:23:35.120 --> 00:23:39.633
+Some people might not find that
+comforting,
+
+00:23:39.633 --> 00:23:43.039
+to have arbitrary computations happening.
+
+00:23:43.039 --> 00:23:45.039
+In this article, there's a few where
+
+00:23:45.039 --> 00:23:47.167
+we change your text upon export.
+
+00:23:47.167 --> 00:23:51.760
+We translate it, we do other things
+to it.
+
+00:23:51.760 --> 00:23:56.500
+So someone says, "If you export to
+LaTeX, to PDF,
+
+00:23:56.500 --> 00:23:58.640
+does that work well with Beamer as well
+
+00:23:58.640 --> 00:24:00.320
+to create slides with columns?"
+
+00:24:05.200 --> 00:24:08.000
+I made a bunch of these changes
+
+00:24:08.000 --> 00:24:09.200
+earlier this morning,
+
+00:24:09.200 --> 00:24:12.320
+and it just says LaTeX right here.
+
+00:24:12.320 --> 00:24:14.400
+So if you want to go to beamer,
+
+00:24:14.400 --> 00:24:15.360
+I think the back end for me,
+
+00:24:15.360 --> 00:24:17.333
+beamer is called, well, beamer,
+
+00:24:17.333 --> 00:24:22.000
+so instead of a pcase, what we would do
+is, we would say,
+
+00:24:22.000 --> 00:24:27.167
+if it's a 'latex or it's a 'beamer, then
+use this.
+
+00:24:27.167 --> 00:24:30.267
+Otherwise, it's not a LaTeX,
+
+00:24:30.267 --> 00:24:31.867
+it will simply default to this one,
+
+00:24:31.867 --> 00:24:34.433
+which could be dangerous
+for your needs.
+
+00:24:34.433 --> 00:24:39.167
+I think it's a bad practice to put a
+underscore,
+
+00:24:39.167 --> 00:24:40.767
+but I did it really quickly
+
+00:24:40.767 --> 00:24:44.500
+because I just wanted to show you that
+it works fine in org-reveal
+
+00:24:44.500 --> 00:24:47.440
+Contributions are more than welcome.
+
+00:24:47.440 --> 00:24:52.240
+I happily would love any assistance.
+
+00:24:52.240 --> 00:24:58.633
+We have a Lisp reference
+cheat sheet here
+
+00:24:58.633 --> 00:25:01.000
+to learn a little bit about Lisp, if
+you're not comfortable,
+
+00:25:01.000 --> 00:25:03.267
+or to ask some questions.
+
+00:25:03.267 --> 00:25:06.400
+Lots of helpful people.
+
+00:25:06.400 --> 00:25:09.440
+So there's another question that says,
+
+00:25:09.440 --> 00:25:13.120
+"Does typing in a block mess up with
+syntax highlighting?
+
+00:25:13.120 --> 00:25:15.679
+Usually, you use a single color inside an
+
+00:25:15.679 --> 00:25:17.279
+example block, for example.
+
+00:25:17.279 --> 00:25:21.279
+Ah, you found my crutch.
+
+00:25:25.279 --> 00:25:27.333
+Emacs is all encompassing,
+
+00:25:27.333 --> 00:25:29.760
+and I'm not quite sure how fonts work.
+
+00:25:29.760 --> 00:25:32.559
+I learned enough to get by.
+
+00:25:37.440 --> 00:25:38.667
+Here's how links work.
+
+00:25:38.667 --> 00:25:40.799
+They're a bit complicated.
+
+00:25:40.799 --> 00:25:42.567
+This is a bit scary.
+
+00:25:42.567 --> 00:25:47.039
+I don't recommend anyone read it.
+
+00:25:47.039 --> 00:25:49.840
+Actually, let me open up an email
+
+00:25:50.559 --> 00:25:52.100
+and you can see what I see.
+
+00:25:52.100 --> 00:25:54.799
+So here's an Emacs.
+
+00:25:54.799 --> 00:25:56.799
+Let's make that a bit bigger.
+
+00:25:56.799 --> 00:25:59.133
+Let's change this slightly.
+
+00:25:59.133 --> 00:26:01.200
+Nope, that's worse. There you go.
+
+00:26:01.919 --> 00:26:09.360
+Here's some words. Here's red hello.
+
+00:26:09.360 --> 00:26:15.679
+But you're worried about preserving
+fontification.
+
+00:26:15.679 --> 00:26:18.480
+Let's make an emacs-lisp block.
+
+00:26:18.880 --> 00:26:22.840
+Let's say, (+ 1 2).
+
+00:26:22.840 --> 00:26:31.133
+Ah, where's the fun? Hello. Bye.
+
+00:26:31.133 --> 00:26:32.080
+Okay. Where's the coloring?
+
+00:26:32.080 --> 00:26:36.000
+If we zoom in on this #+begin_src block,
+
+00:26:36.000 --> 00:26:39.200
+you can see down here
+
+00:26:39.200 --> 00:26:42.159
+we have our our coloring
+
+00:26:42.159 --> 00:26:43.279
+when we zoom in.
+
+00:26:43.279 --> 00:26:46.960
+If we zoom out, no coloring.
+
+00:26:46.960 --> 00:26:50.880
+Zoom in, coloring.
+Zoom out, aah, no coloring.
+
+00:26:50.880 --> 00:26:55.679
+Let's take off these bad boys,
+and oh, look, my coloring's back.
+
+00:26:55.679 --> 00:27:03.760
+In a previous iteration of the system,
+I was able to maintain coloring.
+
+00:27:03.760 --> 00:27:06.400
+In this new iteration, I am not.
+
+00:27:06.400 --> 00:27:07.400
+I don't know how to do it.
+
+00:27:07.400 --> 00:27:10.333
+I haven't had the time to implement it.
+
+00:27:10.333 --> 00:27:17.279
+I spent a lot of time writing this
+48-page documentation
+
+00:27:17.279 --> 00:27:21.133
+with some fun examples to try to help
+people learn.
+
+00:27:21.133 --> 00:27:23.200
+But I would appreciate any help or
+guidance
+
+00:27:23.200 --> 00:27:26.240
+on how to maintain the fontification.
+
+00:27:26.240 --> 00:27:29.200
+I really would like to keep those
+colors in.
+
+00:27:29.200 --> 00:27:32.640
+[Amin]: Musa, we have time for maybe one
+more question,
+
+00:27:32.640 --> 00:27:34.500
+one or two more questions,
+
+00:27:34.500 --> 00:27:37.039
+and then we have to move on to the
+next talk.
+
+00:27:37.039 --> 00:27:39.120
+You're more than welcome to
+
+00:27:39.120 --> 00:27:42.559
+continue taking the questions via
+IRC or the pad.
+
+00:27:42.559 --> 00:27:45.760
+[Musa]: Okay. Thank you.
+
+00:27:45.760 --> 00:27:48.880
+The final question we'll take is,
+
+00:27:48.880 --> 00:27:52.320
+"Should packages implement
+
+00:27:52.320 --> 00:27:53.967
+interface to one specific format,
+
+00:27:53.967 --> 00:27:55.600
+or attempt to be inclusive
+
+00:27:55.600 --> 00:27:57.279
+to all the potential output targets?"
+
+00:27:57.279 --> 00:27:59.300
+I think you should just make them
+as you go,
+
+00:27:59.300 --> 00:28:01.500
+and add them as you need them.
+
+00:28:01.500 --> 00:28:05.600
+We'll make Github requests for things.
+
+00:28:05.600 --> 00:28:08.533
+We can share recipes in this document,
+
+00:28:08.533 --> 00:28:12.333
+and then try to add other techniques,
+
+00:28:12.333 --> 00:28:19.200
+and then we can use these blocks as a
+common interface
+
+00:28:19.200 --> 00:28:22.240
+for exporting to PDF and other things.
+
+00:28:22.240 --> 00:28:26.000
+Since someone asked,
+
+00:28:26.000 --> 00:28:28.033
+here what a PDF looks like.
+
+00:28:28.033 --> 00:28:31.667
+This is the same PDF rendered.
+
+00:28:31.667 --> 00:28:34.960
+I made no effort to make it look good,
+
+00:28:34.960 --> 00:28:37.840
+but it surprisingly does look good.
+
+00:28:38.559 --> 00:28:40.067
+That was nice.
+
+00:28:40.067 --> 00:28:44.320
+That was a terrible magenta,
+but that is life.
+
+00:28:44.320 --> 00:28:47.100
+Anyhow, I hope you all enjoyed this talk.
+
+00:28:47.100 --> 00:28:51.033
+I hope you will find
+defblock useful to you.
+
+00:28:51.033 --> 00:28:52.799
+It is available on MELPA.
+
+00:28:52.799 --> 00:28:56.367
+In a rush to make it available for
+EmacsConf 2020,
+
+00:28:56.367 --> 00:29:00.159
+some MELPA guidelines may not have been
+adhered to.
+
+00:29:00.159 --> 00:29:01.600
+Please do not hit me.
+
+00:29:01.600 --> 00:29:08.559
+I hope everyone enjoys the rest of the
+EmacsConf 2020. Thank you!