diff options
Diffstat (limited to '')
-rw-r--r-- | 2020/info/20.md | 477 |
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=""That x isn't quoted. What's going on?""]] +[[!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 "Excuse me,"]] +[[!template id=subtitle video="mainVideo" start="00:07:39.840" text="I'd like to have a value here." 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 "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,""]] +[[!template id=subtitle video="mainVideo" start="00:14:36.000" text="and "add to list," 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=""Why is this a macro. Full stop.""]] +[[!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, "Hey, wait a minute,"]] +[[!template id=subtitle video="mainVideo" start="00:19:43.808" text="macros are really fantastic,""]] +[[!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."]] |