summaryrefslogtreecommitdiffstats
path: root/2020/info
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2020/info/20.md477
1 files changed, 476 insertions, 1 deletions
diff --git a/2020/info/20.md b/2020/info/20.md
index 4e346503..054837cb 100644
--- a/2020/info/20.md
+++ b/2020/info/20.md
@@ -1,8 +1,9 @@
# OMG Macros
Corwin Brust
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]]
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]]
[Download compressed .webm video (24.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Macros are a powerful tool. In the context of Emacs Lisp programming
they can also provide us with a "foot-gun" of immense proportions.
@@ -47,3 +48,477 @@ Macros are powerful and necessary. Consider how you use them?
## Do you mind if I use your macro code as inspiration for an elisp uglifier?
Have At! It's GPLv3 and you are welcome; let me know if you have any
trouble finding fruit to throw.
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template id=subtitle video="mainVideo" start="00:00:00.480" text="Good evening again. I think"]]
+[[!template id=subtitle video="mainVideo" start="00:00:02.796" text="I have a little time here"]]
+[[!template id=subtitle video="mainVideo" start="00:00:04.319" text="to talk about macros."]]
+[[!template id=subtitle video="mainVideo" start="00:00:06.447" text="Is there still room in our schedule for that,"]]
+[[!template id=subtitle video="mainVideo" start="00:00:09.440" text="or should I just jump to some of"]]
+[[!template id=subtitle video="mainVideo" start="00:00:11.440" text="my thoughts on the day?"]]
+[[!template id=subtitle video="mainVideo" start="00:00:12.559" text="(Amin: Pretty sure we"]]
+[[!template id=subtitle video="mainVideo" start="00:00:15.920" text="have some time.)"]]
+[[!template id=subtitle video="mainVideo" start="00:00:17.039" text="Corwin: All right. Great. (Amin: Yeah, go for it.)"]]
+[[!template id=subtitle video="mainVideo" start="00:00:19.039" text="Well, I'll just dive into my"]]
+[[!template id=subtitle video="mainVideo" start="00:00:20.720" text="prepared thing here then."]]
+[[!template id=subtitle video="mainVideo" start="00:00:22.384" text="(Amin: yeah, actually, you're right on time, so...)"]]
+[[!template id=subtitle video="mainVideo" start="00:00:24.720" text="Corwin: oh what an amazing thing."]]
+[[!template id=subtitle video="mainVideo" start="00:00:27.664" text="I just... You know, I have been trying to do what I..."]]
+[[!template id=subtitle video="mainVideo" start="00:00:31.199" text="I've got a big thank you planned"]]
+[[!template id=subtitle video="mainVideo" start="00:00:33.040" text="at the end, but let me just say,"]]
+[[!template id=subtitle video="mainVideo" start="00:00:36.239" text="it's been really cool to watch the"]]
+[[!template id=subtitle video="mainVideo" start="00:00:39.200" text="way that people work together."]]
+[[!template id=subtitle video="mainVideo" start="00:00:42.160" text="(Amin: Absolutely. It's... This whole event today has been"]]
+[[!template id=subtitle video="mainVideo" start="00:00:46.800" text="nothing but awesome, and"]]
+[[!template id=subtitle video="mainVideo" start="00:00:50.879" text="no little part thanks to all of the help"]]
+[[!template id=subtitle video="mainVideo" start="00:00:53.120" text="from all of you guys and everyone."]]
+[[!template id=subtitle video="mainVideo" start="00:00:56.909" text="Yeah, it's awesome."]]
+[[!template id=subtitle video="mainVideo" start="00:00:59.120" text="With that, I'll just shut up for now."]]
+[[!template id=subtitle video="mainVideo" start="00:01:03.065" text="Take it away, Corwin.)"]]
+[[!template id=subtitle video="mainVideo" start="00:01:04.891" text="Corwin: Who knows how to make"]]
+[[!template id=subtitle video="mainVideo" start="00:01:06.479" text="make that the default in good old smex?"]]
+
+[[!template id=subtitle video="mainVideo" start="00:01:09.840" text="All right. So I'm gonna try to continue"]]
+[[!template id=subtitle video="mainVideo" start="00:01:12.799" text="my theme from the previous talk."]]
+[[!template id=subtitle video="mainVideo" start="00:01:14.551" text="I'm a longtime Emacs user,"]]
+[[!template id=subtitle video="mainVideo" start="00:01:16.393" text="but I'm a pretty new person"]]
+[[!template id=subtitle video="mainVideo" start="00:01:20.240" text="to trying to really understand"]]
+[[!template id=subtitle video="mainVideo" start="00:01:22.380" text="what's going on within Emacs and make"]]
+[[!template id=subtitle video="mainVideo" start="00:01:24.960" text="my customizations to it--simple for"]]
+[[!template id=subtitle video="mainVideo" start="00:01:28.240" text="what I tend to just think of will work."]]
+[[!template id=subtitle video="mainVideo" start="00:01:30.960" text="And maybe that's a nice bow"]]
+[[!template id=subtitle video="mainVideo" start="00:01:33.566" text="to put on that earlier talk."]]
+[[!template id=subtitle video="mainVideo" start="00:01:40.479" text="Let's see here now. It's C-x M-i."]]
+[[!template id=subtitle video="mainVideo" start="00:01:44.981" text="That's right."]]
+[[!template id=subtitle video="mainVideo" start="00:01:48.159" text="And let's try that again. Okay, good."]]
+[[!template id=subtitle video="mainVideo" start="00:01:52.960" text="So demoing is fun,"]]
+[[!template id=subtitle video="mainVideo" start="00:01:55.240" text="but I will save most of that"]]
+[[!template id=subtitle video="mainVideo" start="00:01:57.192" text="for tomorrow where my"]]
+[[!template id=subtitle video="mainVideo" start="00:01:59.759" text="dear friend and co-collaborator"]]
+[[!template id=subtitle video="mainVideo" start="00:02:02.750" text="in bringing you the dungeon-mode project,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:04.799" text="which is sort of the exciting thing"]]
+[[!template id=subtitle video="mainVideo" start="00:02:07.261" text="that we hope you'll be interested in,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:10.800" text="gets a little more of a reveal."]]
+
+[[!template id=subtitle video="mainVideo" start="00:02:15.680" text="Tonight, I'll just close saying"]]
+[[!template id=subtitle video="mainVideo" start="00:02:19.360" text="a few things about the process of"]]
+[[!template id=subtitle video="mainVideo" start="00:02:22.640" text="making it and continuing my theme of community."]]
+[[!template id=subtitle video="mainVideo" start="00:02:25.680" text="First of all, a specific and upfront shout out"]]
+[[!template id=subtitle video="mainVideo" start="00:02:29.760" text="to tv's wasamasa who"]]
+[[!template id=subtitle video="mainVideo" start="00:02:33.120" text="absolutely shaped and guided this"]]
+[[!template id=subtitle video="mainVideo" start="00:02:36.239" text="this program. I may have taken out"]]
+[[!template id=subtitle video="mainVideo" start="00:02:38.582" text="a slide with your name on it,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:39.898" text="but thank you."]]
+
+[[!template id=subtitle video="mainVideo" start="00:02:43.599" text="So when we think about Emacs macros"]]
+[[!template id=subtitle video="mainVideo" start="00:02:46.479" text="and the power that they give us,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:53.280" text="I think about them as a really"]]
+[[!template id=subtitle video="mainVideo" start="00:02:54.720" text="deep rabbit hole. They confuse"]]
+[[!template id=subtitle video="mainVideo" start="00:02:56.400" text="people a lot. And so, to try to center"]]
+[[!template id=subtitle video="mainVideo" start="00:03:00.239" text="myself on that, I remember first that"]]
+[[!template id=subtitle video="mainVideo" start="00:03:03.599" text="they're going to be talking to us about code."]]
+[[!template id=subtitle video="mainVideo" start="00:03:09.599" text="Excuse me, I realize I hadn't set my timer."]]
+[[!template id=subtitle video="mainVideo" start="00:03:13.519" text="Here we are."]]
+
+[[!template id=subtitle video="mainVideo" start="00:03:18.000" text="So a simple macro syntax is"]]
+[[!template id=subtitle video="mainVideo" start="00:03:20.543" text="going to generate"]]
+[[!template id=subtitle video="mainVideo" start="00:03:22.239" text="something that is implicitly confusing"]]
+[[!template id=subtitle video="mainVideo" start="00:03:25.920" text="to somebody that knows the syntax"]]
+[[!template id=subtitle video="mainVideo" start="00:03:27.657" text="of Emacs Lisp well."]]
+[[!template id=subtitle video="mainVideo" start="00:03:28.988" text="We see something like this"]]
+[[!template id=subtitle video="mainVideo" start="00:03:30.785" text="and a veteran eye says"]]
+[[!template id=subtitle video="mainVideo" start="00:03:32.784" text="&quot;That x isn't quoted. What's going on?&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:03:36.239" text="but it can be hard to miss."]]
+[[!template id=subtitle video="mainVideo" start="00:03:39.840" text="A lot of the functions (as we'll talk"]]
+[[!template id=subtitle video="mainVideo" start="00:03:43.040" text="about in a moment) that are built into Emacs"]]
+[[!template id=subtitle video="mainVideo" start="00:03:46.640" text="really are macros, so a lot of"]]
+[[!template id=subtitle video="mainVideo" start="00:03:48.572" text="Emacs features work this way."]]
+[[!template id=subtitle video="mainVideo" start="00:03:50.480" text="It might be scary, but we have to look at"]]
+[[!template id=subtitle video="mainVideo" start="00:03:53.040" text="it closely if we really want to get"]]
+[[!template id=subtitle video="mainVideo" start="00:03:54.640" text="friendly with Emacs."]]
+
+[[!template id=subtitle video="mainVideo" start="00:03:58.400" text="Let's just jump right into defmacro,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:01.439" text="which is our key entry point."]]
+[[!template id=subtitle video="mainVideo" start="00:04:04.720" text="The notes from this talk"]]
+[[!template id=subtitle video="mainVideo" start="00:04:05.833" text="include the link to that,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:09.420" text="which... Definitely"]]
+[[!template id=subtitle video="mainVideo" start="00:04:12.000" text="read through a couple of times."]]
+[[!template id=subtitle video="mainVideo" start="00:04:14.640" text="That may take you through"]]
+[[!template id=subtitle video="mainVideo" start="00:04:16.000" text="into the cl-def macro, which adds"]]
+[[!template id=subtitle video="mainVideo" start="00:04:19.440" text="the Common Lisp extensions."]]
+[[!template id=subtitle video="mainVideo" start="00:04:23.440" text="Definitely challenging."]]
+[[!template id=subtitle video="mainVideo" start="00:04:28.080" text="I've struggled there,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:30.560" text="as we'll take a look at"]]
+[[!template id=subtitle video="mainVideo" start="00:04:31.759" text="in a moment."]]
+[[!template id=subtitle video="mainVideo" start="00:04:34.800" text="So I haven't played too much with"]]
+[[!template id=subtitle video="mainVideo" start="00:04:36.266" text="cl-maclet. Perhaps success in"]]
+[[!template id=subtitle video="mainVideo" start="00:04:38.320" text="in that keyword space"]]
+[[!template id=subtitle video="mainVideo" start="00:04:40.804" text="and figuring out what the right balance is there"]]
+[[!template id=subtitle video="mainVideo" start="00:04:44.320" text="will give me the confidence to try"]]
+[[!template id=subtitle video="mainVideo" start="00:04:46.000" text="some more lexical macros."]]
+
+[[!template id=subtitle video="mainVideo" start="00:04:51.680" text="Let me also briefly introduce"]]
+[[!template id=subtitle video="mainVideo" start="00:04:53.402" text="the comma (,) and back quote (`)."]]
+[[!template id=subtitle video="mainVideo" start="00:04:55.134" text="If you have allowed your eyes"]]
+[[!template id=subtitle video="mainVideo" start="00:04:57.389" text="to cross when you see these,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:59.321" text="that's not a shameful, shameful thing."]]
+[[!template id=subtitle video="mainVideo" start="00:05:03.113" text="It's confusing, and we should be"]]
+[[!template id=subtitle video="mainVideo" start="00:05:06.080" text="alerting each other"]]
+[[!template id=subtitle video="mainVideo" start="00:05:07.543" text="when we stick macros in,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:09.520" text="often by putting them in"]]
+[[!template id=subtitle video="mainVideo" start="00:05:11.199" text="different library spaces"]]
+[[!template id=subtitle video="mainVideo" start="00:05:12.255" text="for complicated projects,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:14.160" text="or otherwise warning people"]]
+[[!template id=subtitle video="mainVideo" start="00:05:17.520" text="that this is not an interactive function,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:19.520" text="even if you get away with using it like one."]]
+[[!template id=subtitle video="mainVideo" start="00:05:22.639" text="Watch your back."]]
+
+[[!template id=subtitle video="mainVideo" start="00:05:26.000" text="The manual itself talks about macros"]]
+[[!template id=subtitle video="mainVideo" start="00:05:32.800" text="as being a way of evaluating,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:35.840" text="as being an evaluator that will take"]]
+[[!template id=subtitle video="mainVideo" start="00:05:39.993" text="our Emacs Lisp expression"]]
+[[!template id=subtitle video="mainVideo" start="00:05:42.800" text="and the set of forms that"]]
+[[!template id=subtitle video="mainVideo" start="00:05:44.800" text="will feed to it our code,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:48.960" text="but it also provides us with"]]
+[[!template id=subtitle video="mainVideo" start="00:05:50.792" text="this concept of an environment."]]
+[[!template id=subtitle video="mainVideo" start="00:05:53.467" text="That's really where the power comes in."]]
+[[!template id=subtitle video="mainVideo" start="00:05:57.027" text="Through that, we can have"]]
+[[!template id=subtitle video="mainVideo" start="00:05:58.240" text="lexical variables and"]]
+[[!template id=subtitle video="mainVideo" start="00:06:00.080" text="think about--bring in some of the"]]
+[[!template id=subtitle video="mainVideo" start="00:06:03.199" text="capabilities that"]]
+[[!template id=subtitle video="mainVideo" start="00:06:06.400" text="can be harder to reach with"]]
+[[!template id=subtitle video="mainVideo" start="00:06:09.759" text="a pure declarative statement that"]]
+[[!template id=subtitle video="mainVideo" start="00:06:13.840" text="doesn't allow for top level"]]
+[[!template id=subtitle video="mainVideo" start="00:06:21.440" text="asynchronous... Asynchronicity..."]]
+[[!template id=subtitle video="mainVideo" start="00:06:28.639" text="I'm gonna basically"]]
+[[!template id=subtitle video="mainVideo" start="00:06:33.520" text="ignore the byte-compilation phase"]]
+[[!template id=subtitle video="mainVideo" start="00:06:35.577" text="for this talk"]]
+[[!template id=subtitle video="mainVideo" start="00:06:36.880" text="in order to have any prayer"]]
+[[!template id=subtitle video="mainVideo" start="00:06:38.463" text="of getting through it in the"]]
+[[!template id=subtitle video="mainVideo" start="00:06:39.919" text="remaining 9 or 11 minutes or whatever."]]
+[[!template id=subtitle video="mainVideo" start="00:06:43.600" text="But suffice to say, that's a scary space,"]]
+[[!template id=subtitle video="mainVideo" start="00:06:50.441" text="and that's really"]]
+[[!template id=subtitle video="mainVideo" start="00:06:52.240" text="the thing that you want to"]]
+[[!template id=subtitle video="mainVideo" start="00:06:53.800" text="start learning about"]]
+[[!template id=subtitle video="mainVideo" start="00:06:55.277" text="as you think about"]]
+[[!template id=subtitle video="mainVideo" start="00:06:57.199" text="taking macros on in earnest."]]
+
+[[!template id=subtitle video="mainVideo" start="00:07:02.160" text="Coming back to the comma syntax,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:05.919" text="then, having given ourselves a"]]
+[[!template id=subtitle video="mainVideo" start="00:07:09.759" text="working definition for the Emacs Lisp"]]
+[[!template id=subtitle video="mainVideo" start="00:07:12.479" text="runtime environment, then we can say that"]]
+[[!template id=subtitle video="mainVideo" start="00:07:14.479" text="macros are going to"]]
+[[!template id=subtitle video="mainVideo" start="00:07:15.840" text="inject code back into that stream,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:21.120" text="whereas backquote (`)"]]
+[[!template id=subtitle video="mainVideo" start="00:07:25.280" text="is going to give code back."]]
+[[!template id=subtitle video="mainVideo" start="00:07:28.479" text="to the stream--or interject, sorry,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:31.919" text="it's going to interject"]]
+[[!template id=subtitle video="mainVideo" start="00:07:33.632" text="back into the stream."]]
+[[!template id=subtitle video="mainVideo" start="00:07:35.360" text="Sort of an exclamatory &quot;Excuse me,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:39.840" text="I'd like to have a value here.&quot; We can take that value"]]
+[[!template id=subtitle video="mainVideo" start="00:07:46.966" text="from the environment as it exists"]]
+[[!template id=subtitle video="mainVideo" start="00:07:48.639" text="when our macro is evaluated."]]
+[[!template id=subtitle video="mainVideo" start="00:07:54.160" text="Backquote, on the other hand,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:56.003" text="takes the result from that"]]
+[[!template id=subtitle video="mainVideo" start="00:08:00.560" text="and returns it back to the stream"]]
+[[!template id=subtitle video="mainVideo" start="00:08:02.201" text="for evaluation at the"]]
+[[!template id=subtitle video="mainVideo" start="00:08:03.467" text="processing level that invoked us."]]
+[[!template id=subtitle video="mainVideo" start="00:08:05.680" text="So in other words, perhaps back up to"]]
+[[!template id=subtitle video="mainVideo" start="00:08:08.720" text="a top-level eval expression where our"]]
+[[!template id=subtitle video="mainVideo" start="00:08:10.960" text="macro is invoked."]]
+
+[[!template id=subtitle video="mainVideo" start="00:08:20.080" text="I'm going to briefly bring"]]
+[[!template id=subtitle video="mainVideo" start="00:08:22.560" text="you back to the game"]]
+[[!template id=subtitle video="mainVideo" start="00:08:23.759" text="for just a moment."]]
+[[!template id=subtitle video="mainVideo" start="00:08:30.240" text="I won't linger on this slide,"]]
+[[!template id=subtitle video="mainVideo" start="00:08:32.479" text="but briefly: this is a"]]
+[[!template id=subtitle video="mainVideo" start="00:08:37.039" text="role-playing, pen and pencil,"]]
+[[!template id=subtitle video="mainVideo" start="00:08:41.615" text="physical dice tradition"]]
+[[!template id=subtitle video="mainVideo" start="00:08:43.829" text="that dates back a long time"]]
+[[!template id=subtitle video="mainVideo" start="00:08:46.320" text="from a technology perspective."]]
+[[!template id=subtitle video="mainVideo" start="00:08:48.080" text="It's old in the same way"]]
+[[!template id=subtitle video="mainVideo" start="00:08:50.727" text="that other tools that I like are old."]]
+[[!template id=subtitle video="mainVideo" start="00:08:58.560" text="It's simple to understand."]]
+[[!template id=subtitle video="mainVideo" start="00:09:00.185" text="I can communicate a lot with it"]]
+[[!template id=subtitle video="mainVideo" start="00:09:01.873" text="with a simple amount of typing"]]
+[[!template id=subtitle video="mainVideo" start="00:09:03.952" text="or scribbling something on a piece of paper."]]
+[[!template id=subtitle video="mainVideo" start="00:09:09.120" text="It has a complicated problem space of its own."]]
+[[!template id=subtitle video="mainVideo" start="00:09:13.500" text="Again, I don't want to"]]
+[[!template id=subtitle video="mainVideo" start="00:09:15.519" text="get too much into the game here,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:18.212" text="but in this talk,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:20.177" text="for the last five minutes,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:22.590" text="I'll focus on the process"]]
+[[!template id=subtitle video="mainVideo" start="00:09:24.751" text="that we took to"]]
+[[!template id=subtitle video="mainVideo" start="00:09:26.640" text="automate getting data out of"]]
+[[!template id=subtitle video="mainVideo" start="00:09:29.190" text="the Org Mode tables which eventually"]]
+[[!template id=subtitle video="mainVideo" start="00:09:31.564" text="(as we'll talk about more tomorrow)"]]
+[[!template id=subtitle video="mainVideo" start="00:09:33.855" text="are used to draw"]]
+[[!template id=subtitle video="mainVideo" start="00:09:36.000" text="game maps and other things."]]
+[[!template id=subtitle video="mainVideo" start="00:09:39.440" text="Here I talk about why we did that."]]
+[[!template id=subtitle video="mainVideo" start="00:09:42.543" text="I'm going to skip briefly past that,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:45.279" text="and say instead that at a high level,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:49.360" text="it's symbolic informatics."]]
+[[!template id=subtitle video="mainVideo" start="00:09:51.440" text="We're giving a symbolic name"]]
+[[!template id=subtitle video="mainVideo" start="00:09:53.519" text="to a tile set,"]]
+[[!template id=subtitle video="mainVideo" start="00:10:02.000" text="and then assigning that tile set some"]]
+[[!template id=subtitle video="mainVideo" start="00:10:04.000" text="some characteristics"]]
+[[!template id=subtitle video="mainVideo" start="00:10:04.840" text="like physical speeds, screen space"]]
+[[!template id=subtitle video="mainVideo" start="00:10:06.820" text="(a variable that we might"]]
+[[!template id=subtitle video="mainVideo" start="00:10:08.399" text="want to swap in), and so forth."]]
+[[!template id=subtitle video="mainVideo" start="00:10:12.800" text="You know, our project rests heavily on"]]
+[[!template id=subtitle video="mainVideo" start="00:10:15.200" text="Org Mode and its fundamental capabilities."]]
+[[!template id=subtitle video="mainVideo" start="00:10:21.040" text="The code I'm going to show here"]]
+[[!template id=subtitle video="mainVideo" start="00:10:28.320" text="is focused around a sticky"]]
+[[!template id=subtitle video="mainVideo" start="00:10:31.360" text="problem space in"]]
+[[!template id=subtitle video="mainVideo" start="00:10:32.380" text="information technology."]]
+[[!template id=subtitle video="mainVideo" start="00:10:33.861" text="I'm a professional software engineer"]]
+[[!template id=subtitle video="mainVideo" start="00:10:38.240" text="turned technology architect."]]
+[[!template id=subtitle video="mainVideo" start="00:10:40.362" text="I support the websites for"]]
+[[!template id=subtitle video="mainVideo" start="00:10:43.495" text="a recognizable financial services brand"]]
+[[!template id=subtitle video="mainVideo" start="00:10:46.533" text="that I don't identify"]]
+[[!template id=subtitle video="mainVideo" start="00:10:48.500" text="just so I don't accidentally end up"]]
+[[!template id=subtitle video="mainVideo" start="00:10:50.720" text="inadvertently misrepresenting my firm"]]
+[[!template id=subtitle video="mainVideo" start="00:10:54.399" text="in some financial perspective"]]
+[[!template id=subtitle video="mainVideo" start="00:10:56.456" text="if I let some other"]]
+[[!template id=subtitle video="mainVideo" start="00:10:57.760" text="companies' name slip, or my own."]]
+[[!template id=subtitle video="mainVideo" start="00:11:03.300" text="It's certainly no representation"]]
+[[!template id=subtitle video="mainVideo" start="00:11:07.700" text="of an opinion other than my own."]]
+[[!template id=subtitle video="mainVideo" start="00:11:18.800" text="So ETL has to do with moving data around."]]
+[[!template id=subtitle video="mainVideo" start="00:11:22.720" text="We have the idea of"]]
+[[!template id=subtitle video="mainVideo" start="00:11:26.240" text="a pipeline where we'll be able to verify"]]
+[[!template id=subtitle video="mainVideo" start="00:11:29.200" text="certain assumptions,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:30.560" text="nominally about data quality,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:32.106" text="but it could be about anything."]]
+[[!template id=subtitle video="mainVideo" start="00:11:33.600" text="Before the pipeline starts, okay,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:35.630" text="we've got a state where we think"]]
+[[!template id=subtitle video="mainVideo" start="00:11:36.886" text="it should work if we run it."]]
+[[!template id=subtitle video="mainVideo" start="00:11:38.560" text="We have some extraction where we'll"]]
+[[!template id=subtitle video="mainVideo" start="00:11:41.920" text="get our sources, and we may have"]]
+[[!template id=subtitle video="mainVideo" start="00:11:43.973" text="the opportunity to"]]
+[[!template id=subtitle video="mainVideo" start="00:11:45.040" text="make some assertions there."]]
+[[!template id=subtitle video="mainVideo" start="00:11:47.327" text="In the transform stage, as well as the load,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:50.510" text="things get a little dicer,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:52.720" text="to the point where we come out of the"]]
+[[!template id=subtitle video="mainVideo" start="00:11:54.079" text="load stage and we should have some"]]
+[[!template id=subtitle video="mainVideo" start="00:11:55.360" text="really solid assertions again"]]
+[[!template id=subtitle video="mainVideo" start="00:11:56.676" text="that we can even go back"]]
+[[!template id=subtitle video="mainVideo" start="00:11:57.724" text="and compare to the extract stage."]]
+[[!template id=subtitle video="mainVideo" start="00:11:59.680" text="From this, we have the rudimentaries"]]
+[[!template id=subtitle video="mainVideo" start="00:12:02.639" text="of a data quality practice."]]
+[[!template id=subtitle video="mainVideo" start="00:12:04.959" text="In this case, we have a number of"]]
+[[!template id=subtitle video="mainVideo" start="00:12:08.120" text="Org Mode files that will all"]]
+[[!template id=subtitle video="mainVideo" start="00:12:09.360" text="be distributed across a"]]
+[[!template id=subtitle video="mainVideo" start="00:12:12.639" text="number of players' computers,"]]
+[[!template id=subtitle video="mainVideo" start="00:12:16.720" text="so we might not want to update every"]]
+[[!template id=subtitle video="mainVideo" start="00:12:18.959" text="part of every buffer."]]
+[[!template id=subtitle video="mainVideo" start="00:12:20.320" text="I think it's a complicated problem space."]]
+[[!template id=subtitle video="mainVideo" start="00:12:22.720" text="So we tried to take"]]
+[[!template id=subtitle video="mainVideo" start="00:12:24.560" text="a long-term view of"]]
+[[!template id=subtitle video="mainVideo" start="00:12:27.839" text="the solution that we needed."]]
+[[!template id=subtitle video="mainVideo" start="00:12:30.321" text="So I'll go ahead"]]
+[[!template id=subtitle video="mainVideo" start="00:12:32.160" text="and open up the function that..."]]
+[[!template id=subtitle video="mainVideo" start="00:12:36.279" text="Let's actually start with the one"]]
+[[!template id=subtitle video="mainVideo" start="00:12:39.020" text="that's pretty easy to read."]]
+[[!template id=subtitle video="mainVideo" start="00:12:41.680" text="I'm gonna go ahead and just crank it up huge,"]]
+[[!template id=subtitle video="mainVideo" start="00:12:46.800" text="in case anybody's watching in 480."]]
+[[!template id=subtitle video="mainVideo" start="00:12:51.680" text="This program is not a work of art"]]
+[[!template id=subtitle video="mainVideo" start="00:12:57.733" text="It's a simple implementation of the idea that"]]
+[[!template id=subtitle video="mainVideo" start="00:13:01.120" text="an alist of functions"]]
+[[!template id=subtitle video="mainVideo" start="00:13:04.000" text="that return maybe some data,"]]
+[[!template id=subtitle video="mainVideo" start="00:13:06.633" text="maybe some data and an entry back into that alist,"]]
+[[!template id=subtitle video="mainVideo" start="00:13:10.399" text="can be done quite extensively with"]]
+[[!template id=subtitle video="mainVideo" start="00:13:13.040" text="very few lines of code."]]
+[[!template id=subtitle video="mainVideo" start="00:13:15.680" text="Neither is it an especially tight"]]
+[[!template id=subtitle video="mainVideo" start="00:13:17.586" text="or thrifty implementation."]]
+[[!template id=subtitle video="mainVideo" start="00:13:19.600" text="It's just trying to get the job done"]]
+[[!template id=subtitle video="mainVideo" start="00:13:22.000" text="with a doc statement for everything."]]
+[[!template id=subtitle video="mainVideo" start="00:13:25.056" text="At the heart, we see a call to"]]
+[[!template id=subtitle video="mainVideo" start="00:13:28.595" text="this macro called dm-coalesce-hash,"]]
+[[!template id=subtitle video="mainVideo" start="00:13:32.067" text="and that's what I'd like to focus in on."]]
+[[!template id=subtitle video="mainVideo" start="00:13:33.714" text="You can see... I think"]]
+[[!template id=subtitle video="mainVideo" start="00:13:35.360" text="that something unpleasant is happening here."]]
+[[!template id=subtitle video="mainVideo" start="00:13:38.800" text="I've got an eval in what is..."]]
+[[!template id=subtitle video="mainVideo" start="00:13:43.991" text="I will share a fairly central function"]]
+[[!template id=subtitle video="mainVideo" start="00:13:49.519" text="that those implementing this ETL pattern are"]]
+[[!template id=subtitle video="mainVideo" start="00:13:52.160" text="welcome to derive from."]]
+[[!template id=subtitle video="mainVideo" start="00:13:54.933" text="That is, this is a default transform"]]
+[[!template id=subtitle video="mainVideo" start="00:13:57.680" text="that you can get when loading certain kinds of"]]
+[[!template id=subtitle video="mainVideo" start="00:14:00.959" text="org-mode tables that have been"]]
+[[!template id=subtitle video="mainVideo" start="00:14:04.560" text="properly adorned. Again, we'll get"]]
+[[!template id=subtitle video="mainVideo" start="00:14:06.399" text="into that all tomorrow."]]
+[[!template id=subtitle video="mainVideo" start="00:14:09.120" text="So, keeping an eye on time. Couple minutes left."]]
+[[!template id=subtitle video="mainVideo" start="00:14:11.900" text="Let's look at the macro itself."]]
+[[!template id=subtitle video="mainVideo" start="00:14:13.760" text="I have a slide on this,"]]
+[[!template id=subtitle video="mainVideo" start="00:14:15.000" text="but let's go ahead and risk getting off page."]]
+[[!template id=subtitle video="mainVideo" start="00:14:24.639" text="Oh boy. Here we go. So this is my"]]
+[[!template id=subtitle video="mainVideo" start="00:14:27.199" text="utilities bucket."]]
+[[!template id=subtitle video="mainVideo" start="00:14:28.959" text="It has such basic features as &quot;give me a"]]
+[[!template id=subtitle video="mainVideo" start="00:14:31.920" text="hash table with some defaults, I'll think"]]
+[[!template id=subtitle video="mainVideo" start="00:14:34.000" text="about that later,&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:14:36.000" text="and &quot;add to list,&quot; a special version"]]
+[[!template id=subtitle video="mainVideo" start="00:14:44.720" text="that enables us to be a little cavalier"]]
+[[!template id=subtitle video="mainVideo" start="00:14:47.600" text="in experimenting with alist versus"]]
+[[!template id=subtitle video="mainVideo" start="00:14:49.360" text="hashes versus plists."]]
+[[!template id=subtitle video="mainVideo" start="00:14:50.967" text="We've made a right mess for ourselves"]]
+[[!template id=subtitle video="mainVideo" start="00:14:53.178" text="in the proof of concept area,"]]
+[[!template id=subtitle video="mainVideo" start="00:14:54.399" text="and it's ripe for someone to write a"]]
+[[!template id=subtitle video="mainVideo" start="00:14:57.433" text="whitepaper about"]]
+[[!template id=subtitle video="mainVideo" start="00:14:58.560" text="when to prefer these things."]]
+[[!template id=subtitle video="mainVideo" start="00:15:04.800" text="The merge alist..."]]
+[[!template id=subtitle video="mainVideo" start="00:15:08.000" text="Same work here. Let's get down to business."]]
+[[!template id=subtitle video="mainVideo" start="00:15:12.959" text="This function has quite a..."]]
+[[!template id=subtitle video="mainVideo" start="00:15:14.667" text="This macro has quite a doc string."]]
+[[!template id=subtitle video="mainVideo" start="00:15:17.467" text="I think I mentioned earlier that I got myself into"]]
+[[!template id=subtitle video="mainVideo" start="00:15:20.720" text="trouble with the keyword properties."]]
+[[!template id=subtitle video="mainVideo" start="00:15:22.088" text="You can see that we have"]]
+[[!template id=subtitle video="mainVideo" start="00:15:23.519" text="not only quite a number of them,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:27.359" text="but a lot of default values,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:31.155" text="many of which may be relying on"]]
+[[!template id=subtitle video="mainVideo" start="00:15:35.446" text="the values that are passed in here."]]
+[[!template id=subtitle video="mainVideo" start="00:15:37.264" text="This is complicated. As it turns out,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:40.000" text="I wasn't brave enough in most cases"]]
+[[!template id=subtitle video="mainVideo" start="00:15:44.000" text="to try to write a lambda"]]
+[[!template id=subtitle video="mainVideo" start="00:15:45.485" text="that could understand and"]]
+[[!template id=subtitle video="mainVideo" start="00:15:47.279" text="replace its own local variable."]]
+[[!template id=subtitle video="mainVideo" start="00:15:49.300" text="I just didn't..."]]
+[[!template id=subtitle video="mainVideo" start="00:15:50.399" text="It didn't save me enough time. This was"]]
+[[!template id=subtitle video="mainVideo" start="00:15:53.519" text="really easy to read and write and understand"]]
+[[!template id=subtitle video="mainVideo" start="00:15:56.532" text="as I thought through my problem,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:58.240" text="but now, as I use it,"]]
+[[!template id=subtitle video="mainVideo" start="00:16:00.000" text="I've lost a little ground with this."]]
+[[!template id=subtitle video="mainVideo" start="00:16:02.486" text="I'm not even sure"]]
+[[!template id=subtitle video="mainVideo" start="00:16:04.079" text="I like what I got from"]]
+[[!template id=subtitle video="mainVideo" start="00:16:06.453" text="the many keyword properties when it..."]]
+[[!template id=subtitle video="mainVideo" start="00:16:09.341" text="And we can look, perhaps if we have"]]
+[[!template id=subtitle video="mainVideo" start="00:16:11.920" text="the time, at what that looks like in"]]
+[[!template id=subtitle video="mainVideo" start="00:16:19.920" text="Oh, all right, I have to separately"]]
+[[!template id=subtitle video="mainVideo" start="00:16:22.720" text="dismiss and restart that."]]
+[[!template id=subtitle video="mainVideo" start="00:16:24.480" text="So that's just about my time."]]
+[[!template id=subtitle video="mainVideo" start="00:16:27.519" text="Being respectful of that, I want"]]
+[[!template id=subtitle video="mainVideo" start="00:16:29.600" text="to invite presenters to just jump in at"]]
+[[!template id=subtitle video="mainVideo" start="00:16:31.920" text="any of the many large pauses I leave."]]
+[[!template id=subtitle video="mainVideo" start="00:16:35.519" text="I'll just leave up the doc string"]]
+[[!template id=subtitle video="mainVideo" start="00:16:38.079" text="for a moment and maybe split the screen"]]
+[[!template id=subtitle video="mainVideo" start="00:16:40.160" text="and pull open an item."]]
+[[!template id=subtitle video="mainVideo" start="00:16:45.199" text="(Amin: Thank you very"]]
+[[!template id=subtitle video="mainVideo" start="00:16:48.720" text="much for your talk, Corwin."]]
+[[!template id=subtitle video="mainVideo" start="00:16:50.720" text="I think you still have"]]
+[[!template id=subtitle video="mainVideo" start="00:16:53.839" text="maybe three or four more minutes,"]]
+[[!template id=subtitle video="mainVideo" start="00:16:55.027" text="if you want to quickly wrap up.)"]]
+[[!template id=subtitle video="mainVideo" start="00:16:57.680" text="Corwin: Okay, so three or four more minutes"]]
+[[!template id=subtitle video="mainVideo" start="00:17:00.644" text="I can easily spend on thank yous."]]
+[[!template id=subtitle video="mainVideo" start="00:17:05.439" text="I might switch to that if there aren't"]]
+[[!template id=subtitle video="mainVideo" start="00:17:07.280" text="questions on the pad."]]
+[[!template id=subtitle video="mainVideo" start="00:17:10.160" text="(Amin: Would you like me to pull up the pad,"]]
+[[!template id=subtitle video="mainVideo" start="00:17:12.559" text="or are you looking at it?)"]]
+[[!template id=subtitle video="mainVideo" start="00:17:14.079" text="Corwin: I am. I bookmarked it."]]
+[[!template id=subtitle video="mainVideo" start="00:17:16.777" text="I am pulling the tab and I'll bring it in."]]
+[[!template id=subtitle video="mainVideo" start="00:17:30.840" text="Okay. All right. This is the wrong Etherpad."]]
+[[!template id=subtitle video="mainVideo" start="00:17:38.799" text="Thanks for the link."]]
+[[!template id=subtitle video="mainVideo" start="00:17:44.480" text="All right. So I think I'm looking for macros."]]
+[[!template id=subtitle video="mainVideo" start="00:17:54.880" text="Okay. Key message. Sure."]]
+[[!template id=subtitle video="mainVideo" start="00:17:57.630" text="So, the key message is that it's"]]
+[[!template id=subtitle video="mainVideo" start="00:18:01.679" text="a jungle out there."]]
+[[!template id=subtitle video="mainVideo" start="00:18:02.960" text="Macros, along with any other design,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:05.912" text="can leave you in a position"]]
+[[!template id=subtitle video="mainVideo" start="00:18:08.559" text="where you have a nice API. I can show"]]
+[[!template id=subtitle video="mainVideo" start="00:18:11.919" text="you other examples (you can find them in"]]
+[[!template id=subtitle video="mainVideo" start="00:18:13.600" text="the dungeon-mode source)"]]
+[[!template id=subtitle video="mainVideo" start="00:18:14.960" text="of many, many other places where I use"]]
+[[!template id=subtitle video="mainVideo" start="00:18:18.480" text="this exact same formula,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:20.820" text="quickly sketching out how a character sheet"]]
+[[!template id=subtitle video="mainVideo" start="00:18:23.840" text="or another big data set"]]
+[[!template id=subtitle video="mainVideo" start="00:18:26.180" text="needs to figure out what tables are"]]
+[[!template id=subtitle video="mainVideo" start="00:18:28.480" text="going to be interesting"]]
+[[!template id=subtitle video="mainVideo" start="00:18:29.320" text="from the collection of files,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:30.720" text="and then load up the tile set,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:33.967" text="and the layout file from that."]]
+[[!template id=subtitle video="mainVideo" start="00:18:38.880" text="And I mean, it works."]]
+[[!template id=subtitle video="mainVideo" start="00:18:40.542" text="The project is moving forward with this."]]
+[[!template id=subtitle video="mainVideo" start="00:18:42.677" text="I have the flexibility that I need."]]
+[[!template id=subtitle video="mainVideo" start="00:18:44.799" text="But here I am evaling my own code"]]
+[[!template id=subtitle video="mainVideo" start="00:18:46.559" text="to make darn sure even if I get"]]
+[[!template id=subtitle video="mainVideo" start="00:18:48.640" text="byte-compiled, this macro"]]
+[[!template id=subtitle video="mainVideo" start="00:18:52.400" text="does get evaluated in the user's real"]]
+[[!template id=subtitle video="mainVideo" start="00:18:55.440" text="run time. Clearly a design fail."]]
+[[!template id=subtitle video="mainVideo" start="00:18:57.684" text="So that would be..."]]
+[[!template id=subtitle video="mainVideo" start="00:18:58.890" text="The key point of my talk is to"]]
+[[!template id=subtitle video="mainVideo" start="00:19:00.880" text="present this design fail and"]]
+[[!template id=subtitle video="mainVideo" start="00:19:05.600" text="thank the community, but especially"]]
+[[!template id=subtitle video="mainVideo" start="00:19:08.320" text="wasamasa for some patience."]]
+[[!template id=subtitle video="mainVideo" start="00:19:10.942" text="Let me add at this moment that"]]
+[[!template id=subtitle video="mainVideo" start="00:19:13.280" text="he was so frustrated with me."]]
+[[!template id=subtitle video="mainVideo" start="00:19:13.333" text="They were sort of frustrated with me"]]
+[[!template id=subtitle video="mainVideo" start="00:19:17.115" text="(I think I didn't qualify pronouns)"]]
+[[!template id=subtitle video="mainVideo" start="00:19:24.240" text="with doing this. The first..."]]
+[[!template id=subtitle video="mainVideo" start="00:19:26.287" text="This was one of our first interactions,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:27.985" text="and the feedback was,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:29.919" text="&quot;Why is this a macro. Full stop.&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:19:34.240" text="And that's a great message, actually."]]
+[[!template id=subtitle video="mainVideo" start="00:19:36.640" text="I hope that maybe this can encourage"]]
+[[!template id=subtitle video="mainVideo" start="00:19:39.520" text="further talks across the subject about,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:42.720" text="you know, &quot;Hey, wait a minute,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:43.808" text="macros are really fantastic,&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:19:45.549" text="as I hope I made clear."]]
+[[!template id=subtitle video="mainVideo" start="00:19:47.018" text="You can do a tremendous amount"]]
+[[!template id=subtitle video="mainVideo" start="00:19:48.559" text="with them, and we rely on them"]]
+[[!template id=subtitle video="mainVideo" start="00:19:51.039" text="for almost all the fun goodies,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:55.200" text="from defun, setq..."]]
+[[!template id=subtitle video="mainVideo" start="00:20:02.159" text="I want to get to my thank yous."]]
+[[!template id=subtitle video="mainVideo" start="00:20:04.639" text="Let me just peek back at the pad."]]
+[[!template id=subtitle video="mainVideo" start="00:20:20.000" text="Well, that was actually a scratch buffer,"]]
+[[!template id=subtitle video="mainVideo" start="00:20:22.080" text="so I'll have to read it cold off my notes."]]
+[[!template id=subtitle video="mainVideo" start="00:20:27.919" text="But I'll switch to... I'll also..."]]
+[[!template id=subtitle video="mainVideo" start="00:20:30.320" text="I'll say a couple of thank-yous if you"]]
+[[!template id=subtitle video="mainVideo" start="00:20:31.600" text="don't mind, Amin."]]
+[[!template id=subtitle video="mainVideo" start="00:20:34.320" text="In addition to the big thank you that I"]]
+[[!template id=subtitle video="mainVideo" start="00:20:36.080" text="hope was implied by my shout out to wasamasa,"]]
+[[!template id=subtitle video="mainVideo" start="00:20:39.360" text="I also want to thank you, Amin, for"]]
+[[!template id=subtitle video="mainVideo" start="00:20:42.720" text="your kindness in extending"]]
+[[!template id=subtitle video="mainVideo" start="00:20:46.640" text="to the project as well as to me, the"]]
+[[!template id=subtitle video="mainVideo" start="00:20:51.360" text="the chance to present here."]]
+[[!template id=subtitle video="mainVideo" start="00:20:54.320" text="You've also done a lot of great stuff"]]
+[[!template id=subtitle video="mainVideo" start="00:20:56.358" text="for our project. Thank you very much for that."]]
+[[!template id=subtitle video="mainVideo" start="00:20:59.360" text="Sacha Chua (I'll get there),"]]
+[[!template id=subtitle video="mainVideo" start="00:21:03.400" text="thank you so much for"]]
+[[!template id=subtitle video="mainVideo" start="00:21:15.919" text="the inspiration that you are to our"]]
+[[!template id=subtitle video="mainVideo" start="00:21:17.200" text="whole community."]]
+[[!template id=subtitle video="mainVideo" start="00:21:18.320" text="I also want to thank the presenters"]]
+[[!template id=subtitle video="mainVideo" start="00:21:22.400" text="for just being so flexible and"]]
+[[!template id=subtitle video="mainVideo" start="00:21:25.600" text="nagging back through the whole thing,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:27.600" text="and especially to Leo"]]
+[[!template id=subtitle video="mainVideo" start="00:21:29.120" text="who has done so much to drive the show today."]]
+[[!template id=subtitle video="mainVideo" start="00:21:32.159" text="This is a fractious tent at times,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:37.242" text="and sometimes it is indeed"]]
+[[!template id=subtitle video="mainVideo" start="00:21:39.800" text="a little bit of a circus,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:41.360" text="but I am learning so much so fast."]]
+[[!template id=subtitle video="mainVideo" start="00:21:44.746" text="I'm just inspired by how much"]]
+[[!template id=subtitle video="mainVideo" start="00:21:46.880" text="Emacs can teach us."]]
+[[!template id=subtitle video="mainVideo" start="00:21:49.333" text="(Amin: thank you, Corwin, for your kind words"]]
+[[!template id=subtitle video="mainVideo" start="00:21:52.901" text="about me, of course,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:54.960" text="about all of us"]]
+[[!template id=subtitle video="mainVideo" start="00:21:56.000" text="and the conference..."]]
+[[!template id=subtitle video="mainVideo" start="00:21:58.000" text="Indeed, thanks to everyone who's helped,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:02.400" text="including the speakers, of course,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:04.159" text="without whom EmacsConf really"]]
+[[!template id=subtitle video="mainVideo" start="00:22:05.840" text="wouldn't have been a EmacsConf."]]
+[[!template id=subtitle video="mainVideo" start="00:22:08.960" text="It's been a pleasure"]]
+[[!template id=subtitle video="mainVideo" start="00:22:10.640" text="knowing you and working with you,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:12.366" text="from afar for the most part"]]
+[[!template id=subtitle video="mainVideo" start="00:22:15.743" text="on dungeon-mode,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:17.360" text="helping with small things here and there"]]
+[[!template id=subtitle video="mainVideo" start="00:22:19.937" text="but yeah, it's been my pleasure,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:21.796" text="and it's great to have you and"]]
+[[!template id=subtitle video="mainVideo" start="00:22:23.840" text="everyone else part of the community,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:26.582" text="and for me to be part of the community."]]
+[[!template id=subtitle video="mainVideo" start="00:22:29.180" text="It's been a lot of fun."]]
+[[!template id=subtitle video="mainVideo" start="00:22:30.559" text="Thank you.)"]]
+[[!template id=subtitle video="mainVideo" start="00:22:33.679" text="Corwin: It's an honor."]]
+[[!template id=subtitle video="mainVideo" start="00:22:35.206" text="I don't use that word an awful lot"]]
+[[!template id=subtitle video="mainVideo" start="00:22:37.428" text="because I sort of smirk at it."]]
+[[!template id=subtitle video="mainVideo" start="00:22:39.867" text="It gets us in a lot of trouble, honor does,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:43.941" text="but this will be a sure time to use it."]]
+[[!template id=subtitle video="mainVideo" start="00:22:46.904" text="(Amin: Thank you.)"]]
+[[!template id=subtitle video="mainVideo" start="00:22:48.840" text="Corwin: Likewise."]]