From b98df6fbe2a5c48013cfca81a95a5af41e202d07 Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sun, 13 Dec 2020 00:06:32 -0500 Subject: Actually post subtitles, I think --- ...f-2020--20-omg-macros--corwin-brust-autogen.vtt | 1606 ++++++++++++++++++++ 1 file changed, 1606 insertions(+) create mode 100644 2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt (limited to '2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt') diff --git a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt new file mode 100644 index 00000000..0455366c --- /dev/null +++ b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt @@ -0,0 +1,1606 @@ +WEBVTT + +00:00:00.480 --> 00:00:02.879 +uh well good evening again uh I think I + +00:00:02.879 --> 00:00:04.319 +have a little time here + +00:00:04.319 --> 00:00:07.359 +uh to talk about macros uh is there + +00:00:07.359 --> 00:00:09.120 +still room in our in our schedule for + +00:00:09.120 --> 00:00:09.440 +that + +00:00:09.440 --> 00:00:11.440 +or should I just kind of jump to some of + +00:00:11.440 --> 00:00:12.559 +my thoughts on the day + +00:00:12.559 --> 00:00:15.920 +you are now unmuted um pretty sure we + +00:00:15.920 --> 00:00:17.039 +have some time + +00:00:17.039 --> 00:00:19.439 +all right great yeah go for it well I'll + +00:00:19.439 --> 00:00:20.720 +just drive into my pre + +00:00:20.720 --> 00:00:22.640 +prepared thing to hear that yeah + +00:00:22.640 --> 00:00:24.720 +actually you're right on time so + +00:00:24.720 --> 00:00:28.400 +oh what an amazing thing I I just uh + +00:00:28.400 --> 00:00:31.199 +you know I have been trying to do what I + +00:00:31.199 --> 00:00:33.040 +I've got a big thank you planet to get + +00:00:33.040 --> 00:00:36.239 +at the end but let me just say I uh + +00:00:36.239 --> 00:00:39.200 +it's it's been really cool to watch the + +00:00:39.200 --> 00:00:42.160 +way that people work together + +00:00:42.160 --> 00:00:46.000 +absolutely it's this whole event today + +00:00:46.000 --> 00:00:46.800 +has been + +00:00:46.800 --> 00:00:50.879 +nothing but awesome and uh no less like + +00:00:50.879 --> 00:00:53.120 +no little part thanks to all of the help + +00:00:53.120 --> 00:00:54.719 +from all of you guys + +00:00:54.719 --> 00:00:59.120 +and um everyone oh yeah it's awesome + +00:00:59.120 --> 00:01:02.399 +um yeah with that all just um shut up + +00:01:02.399 --> 00:01:03.520 +for now and uh + +00:01:03.520 --> 00:01:06.479 +take it away corwin you know how to make + +00:01:06.479 --> 00:01:09.840 +make that the default and good old cemex + +00:01:09.840 --> 00:01:12.799 +all right so I'm gonna try to continue + +00:01:12.799 --> 00:01:14.880 +my theme from the previous talk I'm a + +00:01:14.880 --> 00:01:16.960 +longtime Emacs user but I'm + +00:01:16.960 --> 00:01:20.240 +a pretty new person + +00:01:20.240 --> 00:01:22.880 +to trying to really understand what's + +00:01:22.880 --> 00:01:24.960 +going on within Emacs and make + +00:01:24.960 --> 00:01:28.240 +my customizations to it uh simple for + +00:01:28.240 --> 00:01:30.960 +what I tend to just think of will work + +00:01:30.960 --> 00:01:33.280 +and maybe that's that's that's a nice + +00:01:33.280 --> 00:01:36.240 +bow to put on that earlier talk + +00:01:36.240 --> 00:01:40.479 +so uh whoops + +00:01:40.479 --> 00:01:43.759 +uh let's see here now it's ctrl x + +00:01:43.759 --> 00:01:48.159 +alt I that's right + +00:01:48.159 --> 00:01:52.960 +and let's try that again okay good + +00:01:52.960 --> 00:01:56.000 +so demoing is fun uh but I + +00:01:56.000 --> 00:01:58.000 +will save most of that for tomorrow + +00:01:58.000 --> 00:01:59.759 +where my + +00:01:59.759 --> 00:02:03.040 +dear friend and co-collaborator in + +00:02:03.040 --> 00:02:04.799 +bringing you the dungeon mode project + +00:02:04.799 --> 00:02:07.119 +which is uh sort of + +00:02:07.119 --> 00:02:08.720 +the exciting thing that we we hope + +00:02:08.720 --> 00:02:10.800 +you'll be interested in + +00:02:10.800 --> 00:02:14.480 +um I think gets a little more of a + +00:02:14.480 --> 00:02:15.680 +reveal + +00:02:15.680 --> 00:02:19.360 +uh tonight I'll just uh close saying + +00:02:19.360 --> 00:02:22.640 +um a few things about the process of + +00:02:22.640 --> 00:02:24.319 +making it and continuing my theme of + +00:02:24.319 --> 00:02:25.680 +community + +00:02:25.680 --> 00:02:28.720 +uh first of all a specific and upfront + +00:02:28.720 --> 00:02:29.760 +shout out + +00:02:29.760 --> 00:02:33.120 +to tv's wasa masa who + +00:02:33.120 --> 00:02:36.239 +um absolutely shaped and guided this + +00:02:36.239 --> 00:02:38.720 +this program I I may have taken out a + +00:02:38.720 --> 00:02:40.080 +slide with your name on it but + +00:02:40.080 --> 00:02:43.599 +thank you um + +00:02:43.599 --> 00:02:46.720 +so when we think about Emacs macros and + +00:02:46.720 --> 00:02:47.120 +the + +00:02:47.120 --> 00:02:50.239 +power that they give us + +00:02:50.239 --> 00:02:53.280 +I think about them the the + +00:02:53.280 --> 00:02:54.720 +you know I think about them as a really + +00:02:54.720 --> 00:02:56.400 +deep rabbit hole they confuse + +00:02:56.400 --> 00:03:00.239 +people a lot and so to try to center + +00:03:00.239 --> 00:03:02.480 +myself on that I remember first that + +00:03:02.480 --> 00:03:03.599 +they're + +00:03:03.599 --> 00:03:05.840 +they're going to be talking to us about + +00:03:05.840 --> 00:03:09.599 +code + +00:03:09.599 --> 00:03:12.080 +uh excuse me I realize I hadn't set my + +00:03:12.080 --> 00:03:13.519 +timer + +00:03:13.519 --> 00:03:18.000 +here we are + +00:03:18.000 --> 00:03:21.680 +um so a simple macro syntax is going to + +00:03:21.680 --> 00:03:22.239 +generate + +00:03:22.239 --> 00:03:25.920 +something that is implicitly confusing + +00:03:25.920 --> 00:03:27.760 +to somebody that knows the syntax of + +00:03:27.760 --> 00:03:28.720 +emax lisp + +00:03:28.720 --> 00:03:31.200 +well we see something like this and a + +00:03:31.200 --> 00:03:32.000 +veteran I + +00:03:32.000 --> 00:03:36.239 +says that x isn't quoted what's going on + +00:03:36.239 --> 00:03:39.840 +but it can be hard to miss + +00:03:39.840 --> 00:03:43.040 +um a lot of the functions as we'll talk + +00:03:43.040 --> 00:03:44.640 +about in a moment that are built into + +00:03:44.640 --> 00:03:46.640 +Emacs + +00:03:46.640 --> 00:03:48.959 +really are macros so a lot of Emacs + +00:03:48.959 --> 00:03:50.480 +features work this way + +00:03:50.480 --> 00:03:53.040 +it might be scary but we have to look at + +00:03:53.040 --> 00:03:54.640 +it closely if we really want to get + +00:03:54.640 --> 00:03:58.400 +friendly with Emacs + +00:03:58.400 --> 00:04:01.439 +um let's just jump right into deaf macro + +00:04:01.439 --> 00:04:03.920 +which is which is our key entry point + +00:04:03.920 --> 00:04:04.720 +and the + +00:04:04.720 --> 00:04:08.560 +notes from this talk include the link um + +00:04:08.560 --> 00:04:12.000 +to that uh which which definitely + +00:04:12.000 --> 00:04:14.640 +uh read through a couple of times and + +00:04:14.640 --> 00:04:16.000 +that may take you through + +00:04:16.000 --> 00:04:19.440 +into the cldf macro which adds + +00:04:19.440 --> 00:04:23.440 +the common list lisp extensions + +00:04:23.440 --> 00:04:26.840 +and uh definitely + +00:04:26.840 --> 00:04:30.560 +uh challenging uh I've struggled there + +00:04:30.560 --> 00:04:31.759 +as we'll take a look at in + +00:04:31.759 --> 00:04:34.800 +in a moment um + +00:04:34.800 --> 00:04:36.400 +so I haven't played too much with cl + +00:04:36.400 --> 00:04:38.320 +maclet perhaps success in + +00:04:38.320 --> 00:04:42.160 +in that uh keyword space and figuring + +00:04:42.160 --> 00:04:44.320 +out what the right balance is there + +00:04:44.320 --> 00:04:46.000 +what will give me the confidence to try + +00:04:46.000 --> 00:04:47.680 +some more lexical + +00:04:47.680 --> 00:04:51.680 +uh macros + +00:04:51.680 --> 00:04:53.919 +let me also briefly introduce the comma + +00:04:53.919 --> 00:04:55.440 +and back quote if you + +00:04:55.440 --> 00:04:58.479 +have uh allowed your eyes to cross when + +00:04:58.479 --> 00:05:00.080 +you see these and that's not + +00:05:00.080 --> 00:05:03.600 +uh a shameful shameful thing it's + +00:05:03.600 --> 00:05:06.080 +confusing and we should be + +00:05:06.080 --> 00:05:08.160 +alerting each other when we when we + +00:05:08.160 --> 00:05:09.520 +stick macros in + +00:05:09.520 --> 00:05:11.199 +often by putting them in different + +00:05:11.199 --> 00:05:12.960 +different library spaces for complicated + +00:05:12.960 --> 00:05:14.160 +projects + +00:05:14.160 --> 00:05:17.520 +or um otherwise sort of warning people + +00:05:17.520 --> 00:05:19.520 +that this is not an interactive function + +00:05:19.520 --> 00:05:21.919 +if you get away with using it like one + +00:05:21.919 --> 00:05:22.639 +um + +00:05:22.639 --> 00:05:26.000 +to watch your back + +00:05:26.000 --> 00:05:29.440 +the uh + +00:05:29.440 --> 00:05:32.800 +the manual itself talks about macros + +00:05:32.800 --> 00:05:35.840 +as being a way of evaluating + +00:05:35.840 --> 00:05:39.039 +you know as as being um + +00:05:39.039 --> 00:05:41.520 +an evaluator that will take our amex + +00:05:41.520 --> 00:05:42.800 +lisp expression + +00:05:42.800 --> 00:05:44.800 +and the set of forms that kind of that + +00:05:44.800 --> 00:05:47.590 +will feed to it our code + +00:05:47.590 --> 00:05:48.960 +[Music] + +00:05:48.960 --> 00:05:51.120 +but it also provides us with this + +00:05:51.120 --> 00:05:52.000 +concept of an + +00:05:52.000 --> 00:05:55.039 +environment and and and that's really + +00:05:55.039 --> 00:05:56.639 +where the power + +00:05:56.639 --> 00:05:58.240 +comes in through that we can have + +00:05:58.240 --> 00:06:00.080 +lexical variables and + +00:06:00.080 --> 00:06:03.199 +um think about uh bring in some of the + +00:06:03.199 --> 00:06:06.400 +capabilities that + +00:06:06.400 --> 00:06:09.759 +um can be harder to reach with + +00:06:09.759 --> 00:06:13.840 +a a a pure declarative statement that + +00:06:13.840 --> 00:06:14.800 +doesn't allow + +00:06:14.800 --> 00:06:18.000 +for uh + +00:06:18.000 --> 00:06:21.440 +top level + +00:06:21.440 --> 00:06:28.639 +um asynchronous asynchronicity + +00:06:28.639 --> 00:06:31.950 +uh I'm gonna basically + +00:06:31.950 --> 00:06:33.520 +[Music] + +00:06:33.520 --> 00:06:35.759 +ignore the bike compilation phase for + +00:06:35.759 --> 00:06:36.880 +this talk + +00:06:36.880 --> 00:06:38.639 +uh in order to have any prayer of + +00:06:38.639 --> 00:06:39.919 +getting through it in the + +00:06:39.919 --> 00:06:43.600 +remaining nine or 11 minutes or whatever + +00:06:43.600 --> 00:06:48.319 +uh but + +00:06:48.319 --> 00:06:50.160 +suffice it to say it that's a scary + +00:06:50.160 --> 00:06:52.240 +space and that's that's that's really + +00:06:52.240 --> 00:06:54.160 +the thing that you want to start + +00:06:54.160 --> 00:06:57.199 +learning about as you think about taking + +00:06:57.199 --> 00:07:02.160 +taking macros on uh in earnest + +00:07:02.160 --> 00:07:05.919 +the um coming back to the comma syntax + +00:07:05.919 --> 00:07:07.440 +then + +00:07:07.440 --> 00:07:09.759 +having having given ourselves sort of a + +00:07:09.759 --> 00:07:12.479 +working definition for the Emacs lisp + +00:07:12.479 --> 00:07:14.479 +runtime environment then we can say that + +00:07:14.479 --> 00:07:15.840 +macros are going to + +00:07:15.840 --> 00:07:21.120 +inject code back into that stream + +00:07:21.120 --> 00:07:25.280 +whereas back quote is going to + +00:07:25.280 --> 00:07:28.479 +uh going to give code back + +00:07:28.479 --> 00:07:31.919 +to the to the stream or interject sorry + +00:07:31.919 --> 00:07:34.560 +it's going to interject uh back into the + +00:07:34.560 --> 00:07:35.360 +stream + +00:07:35.360 --> 00:07:39.840 +uh sort of uh an exclamatory excuse me + +00:07:39.840 --> 00:07:43.280 +I'd like to uh + +00:07:43.280 --> 00:07:46.720 +have a value here and we can take that + +00:07:46.720 --> 00:07:48.639 +value from the environment as it exists + +00:07:48.639 --> 00:07:54.160 +when our macro is evaluated + +00:07:54.160 --> 00:07:56.639 +back quote on the other hand takes the + +00:07:56.639 --> 00:07:57.280 +result + +00:07:57.280 --> 00:08:00.560 +from that and uh + +00:08:00.560 --> 00:08:02.400 +and returns it back to the stream for + +00:08:02.400 --> 00:08:04.319 +evaluation at the processing level that + +00:08:04.319 --> 00:08:05.680 +invoked us + +00:08:05.680 --> 00:08:08.720 +so in other words perhaps back up to + +00:08:08.720 --> 00:08:10.960 +a top level eval expression where our + +00:08:10.960 --> 00:08:16.720 +macro is invoked + +00:08:16.720 --> 00:08:20.080 +uh wrong way so um + +00:08:20.080 --> 00:08:22.560 +with what's I'm going to briefly bring + +00:08:22.560 --> 00:08:23.759 +you back to the game + +00:08:23.759 --> 00:08:27.120 +for just a moment + +00:08:27.120 --> 00:08:30.240 +um I won't + +00:08:30.240 --> 00:08:32.479 +I won't has I won't linger on this slide + +00:08:32.479 --> 00:08:33.599 +but but + +00:08:33.599 --> 00:08:37.039 +briefly uh this is a + +00:08:37.039 --> 00:08:40.080 +roll paper role-playing pen + +00:08:40.080 --> 00:08:43.599 +and pencil uh physical dice + +00:08:43.599 --> 00:08:46.320 +tradition that dates back a long time + +00:08:46.320 --> 00:08:48.080 +from a technology perspective + +00:08:48.080 --> 00:08:51.279 +it's it's old in the same way that uh + +00:08:51.279 --> 00:08:54.640 +other tools uh that I like are + +00:08:54.640 --> 00:08:58.560 +old + +00:08:58.560 --> 00:09:00.560 +uh it's simple to understand and I can + +00:09:00.560 --> 00:09:02.560 +communicate a lot with it with a simple + +00:09:02.560 --> 00:09:04.160 +amount of you know typing or + +00:09:04.160 --> 00:09:09.120 +scribbling something on a piece of paper + +00:09:09.120 --> 00:09:12.399 +it has a complicated problem space um + +00:09:12.399 --> 00:09:15.519 +of its own again I don't want to + +00:09:15.519 --> 00:09:18.560 +get too much into the game here but + +00:09:18.560 --> 00:09:21.680 +uh in this in this talk for the last + +00:09:21.680 --> 00:09:23.360 +five minutes I'll focus + +00:09:23.360 --> 00:09:26.640 +on the process that we took to to + +00:09:26.640 --> 00:09:29.920 +automate uh getting data out of the org + +00:09:29.920 --> 00:09:31.120 +mode tables which + +00:09:31.120 --> 00:09:32.720 +eventually as we'll talk about more + +00:09:32.720 --> 00:09:36.000 +tomorrow are used to draw + +00:09:36.000 --> 00:09:39.440 +game maps and other things + +00:09:39.440 --> 00:09:42.240 +um here I talk about kind of why we did + +00:09:42.240 --> 00:09:45.279 +that I'm going to skip briefly past that + +00:09:45.279 --> 00:09:49.360 +and say instead that at a high level + +00:09:49.360 --> 00:09:51.920 +it's it's symbolic informatics we're + +00:09:51.920 --> 00:09:53.519 +giving a symbolic name + +00:09:53.519 --> 00:09:58.080 +to a tile set and then + +00:09:58.080 --> 00:10:02.000 +uh + +00:10:02.000 --> 00:10:04.000 +and then assigning that tile set some + +00:10:04.000 --> 00:10:05.360 +some characteristics like physical + +00:10:05.360 --> 00:10:06.000 +speeds + +00:10:06.000 --> 00:10:08.399 +screen space a variable that we might + +00:10:08.399 --> 00:10:09.279 +want to swap in + +00:10:09.279 --> 00:10:12.800 +and so forth uh and + +00:10:12.800 --> 00:10:15.200 +you know our project rests heavily on on + +00:10:15.200 --> 00:10:16.160 +org mode and + +00:10:16.160 --> 00:10:21.040 +it's it's fundamental capabilities + +00:10:21.040 --> 00:10:24.000 +so the the code I'm going to show here + +00:10:24.000 --> 00:10:24.959 +is + +00:10:24.959 --> 00:10:28.320 +uh is + +00:10:28.320 --> 00:10:31.360 +is focused around sort of a a sticky + +00:10:31.360 --> 00:10:33.040 +problem space in in the information + +00:10:33.040 --> 00:10:35.600 +technology and I'm I'm a professional + +00:10:35.600 --> 00:10:39.120 +uh uh software engineer turned uh + +00:10:39.120 --> 00:10:41.120 +technology architect I support + +00:10:41.120 --> 00:10:45.120 +the websites for a recognizable + +00:10:45.120 --> 00:10:47.600 +financial services brand that I don't + +00:10:47.600 --> 00:10:49.680 +identify just so I don't accidentally + +00:10:49.680 --> 00:10:50.720 +end up + +00:10:50.720 --> 00:10:54.399 +uh inadvertently misrepresenting my firm + +00:10:54.399 --> 00:10:55.600 +in some financial + +00:10:55.600 --> 00:10:57.760 +uh perspective if I let some other + +00:10:57.760 --> 00:11:00.480 +companies slip at certain let some other + +00:11:00.480 --> 00:11:01.760 +companies slip + +00:11:01.760 --> 00:11:06.560 +name slip or my own it's certainly no + +00:11:06.560 --> 00:11:08.160 +representation of an opinion other than + +00:11:08.160 --> 00:11:11.279 +my own + +00:11:11.279 --> 00:11:13.980 +the um + +00:11:13.980 --> 00:11:18.800 +[Music] + +00:11:18.800 --> 00:11:22.720 +so etl has to do with moving data around + +00:11:22.720 --> 00:11:26.240 +we we have the idea of of + +00:11:26.240 --> 00:11:29.200 +a pipeline where we'll be able to verify + +00:11:29.200 --> 00:11:30.560 +certain assumptions not + +00:11:30.560 --> 00:11:32.480 +nominally about data quality but it + +00:11:32.480 --> 00:11:33.600 +could be about anything + +00:11:33.600 --> 00:11:36.000 +before the pipeline starts okay we've + +00:11:36.000 --> 00:11:37.279 +got a state where we think it should + +00:11:37.279 --> 00:11:38.560 +work if we run it + +00:11:38.560 --> 00:11:41.920 +we have uh some extraction where we'll + +00:11:41.920 --> 00:11:44.160 +get our sources and we may have the the + +00:11:44.160 --> 00:11:45.040 +opportunity to + +00:11:45.040 --> 00:11:47.920 +uh make some assertions there and in the + +00:11:47.920 --> 00:11:48.720 +transform + +00:11:48.720 --> 00:11:51.360 +stage as well as the load things get a + +00:11:51.360 --> 00:11:52.720 +little dicer + +00:11:52.720 --> 00:11:54.079 +to the point where we come out of the + +00:11:54.079 --> 00:11:55.360 +load stage and we should have some + +00:11:55.360 --> 00:11:57.040 +really solid assertions again that we + +00:11:57.040 --> 00:11:58.480 +can even go back and compare to the + +00:11:58.480 --> 00:11:59.680 +extract stage + +00:11:59.680 --> 00:12:02.639 +and from this we have the rudimentaries + +00:12:02.639 --> 00:12:04.959 +of a data quality practice + +00:12:04.959 --> 00:12:08.399 +uh in this case we have a number of org + +00:12:08.399 --> 00:12:09.360 +mode files that will all + +00:12:09.360 --> 00:12:12.639 +be distributed across a + +00:12:12.639 --> 00:12:16.720 +number of players uh computers + +00:12:16.720 --> 00:12:18.959 +so we might not want to update every + +00:12:18.959 --> 00:12:20.320 +part of every buffer + +00:12:20.320 --> 00:12:22.720 +I think it's a complicated problem space + +00:12:22.720 --> 00:12:24.560 +and so we tried to take + +00:12:24.560 --> 00:12:27.839 +a long-term view of + +00:12:27.839 --> 00:12:31.120 +the solution that we needed um so I'll + +00:12:31.120 --> 00:12:32.160 +go ahead + +00:12:32.160 --> 00:12:35.760 +and open up the fun function + +00:12:35.760 --> 00:12:37.839 +that well let's let's actually start + +00:12:37.839 --> 00:12:41.680 +with the one that's pretty easy to read + +00:12:41.680 --> 00:12:45.040 +and uh I'm gonna go ahead and just crank + +00:12:45.040 --> 00:12:46.800 +it up huge + +00:12:46.800 --> 00:12:51.680 +in case anybody's watching in 480. + +00:12:51.680 --> 00:12:56.480 +um so this this program is not + +00:12:56.480 --> 00:12:58.560 +a work of art it's a simple + +00:12:58.560 --> 00:13:01.120 +implementation of the idea that a list + +00:13:01.120 --> 00:13:05.440 +an a list of functions that return + +00:13:05.440 --> 00:13:08.160 +maybe some data maybe some data and an + +00:13:08.160 --> 00:13:10.399 +entry back into that a list + +00:13:10.399 --> 00:13:13.040 +um can be done quite extensively with + +00:13:13.040 --> 00:13:15.680 +very few lines of code + +00:13:15.680 --> 00:13:17.760 +neither is it an especially tight or + +00:13:17.760 --> 00:13:19.600 +thrifty implementation + +00:13:19.600 --> 00:13:22.000 +it's just trying to get the job done + +00:13:22.000 --> 00:13:22.800 +with a doc + +00:13:22.800 --> 00:13:26.160 +statement for everything at the heart + +00:13:26.160 --> 00:13:30.880 +um we see a call to this macro called dm + +00:13:30.880 --> 00:13:32.480 +coalesce hash and that's what I'd like + +00:13:32.480 --> 00:13:35.360 +to focus in on you can see I think + +00:13:35.360 --> 00:13:37.680 +that something on unpleasant is + +00:13:37.680 --> 00:13:38.800 +happening here + +00:13:38.800 --> 00:13:42.480 +I've got an eval in um + +00:13:42.480 --> 00:13:46.560 +what is I will share a a + +00:13:46.560 --> 00:13:49.519 +fairly central function that that that + +00:13:49.519 --> 00:13:49.920 +that + +00:13:49.920 --> 00:13:52.160 +those implementing this etl pattern are + +00:13:52.160 --> 00:13:53.920 +welcome to + +00:13:53.920 --> 00:13:56.639 +derive from that is this is a default + +00:13:56.639 --> 00:13:57.680 +transform + +00:13:57.680 --> 00:13:59.680 +that you can get when loading certain + +00:13:59.680 --> 00:14:00.959 +kinds of + +00:14:00.959 --> 00:14:04.560 +uh orgmo tables that have been uh + +00:14:04.560 --> 00:14:06.399 +properly adorned and again we'll get + +00:14:06.399 --> 00:14:09.120 +into that all tomorrow + +00:14:09.120 --> 00:14:11.440 +so keep an eye on time couple minutes + +00:14:11.440 --> 00:14:13.760 +left let's look at the macro itself and + +00:14:13.760 --> 00:14:15.360 +I have a slide on this but let's go + +00:14:15.360 --> 00:14:24.639 +ahead and risk getting off page + +00:14:24.639 --> 00:14:27.199 +oh boy here we go so this is my + +00:14:27.199 --> 00:14:28.959 +utilities bucket + +00:14:28.959 --> 00:14:31.920 +it has such basic features as give me a + +00:14:31.920 --> 00:14:34.000 +hash table with some defaults I'll think + +00:14:34.000 --> 00:14:36.000 +about that later + +00:14:36.000 --> 00:14:39.680 +and + +00:14:39.680 --> 00:14:44.720 +and add to list um a special version + +00:14:44.720 --> 00:14:47.600 +that enables us to be a little cavalier + +00:14:47.600 --> 00:14:49.360 +in experimenting with a-list versus + +00:14:49.360 --> 00:14:50.480 +hashes versus p + +00:14:50.480 --> 00:14:52.800 +lists we've made a right mess for + +00:14:52.800 --> 00:14:54.399 +ourselves in the proof of concept area + +00:14:54.399 --> 00:14:55.279 +and it's ripe + +00:14:55.279 --> 00:14:58.560 +for someone to write a white paper about + +00:14:58.560 --> 00:15:00.240 +when to prefer these things + +00:15:00.240 --> 00:15:04.800 +and fix + +00:15:04.800 --> 00:15:08.000 +the merge a list uh + +00:15:08.000 --> 00:15:10.720 +same work here let's get let's get down + +00:15:10.720 --> 00:15:12.959 +to business + +00:15:12.959 --> 00:15:16.000 +this function has quite a this a macro + +00:15:16.000 --> 00:15:18.560 +has quite a doc string and I think I + +00:15:18.560 --> 00:15:20.720 +mentioned earlier that I got myself into + +00:15:20.720 --> 00:15:22.240 +trouble with the keyword properties you + +00:15:22.240 --> 00:15:23.519 +can see that we have + +00:15:23.519 --> 00:15:27.839 +not only quite a number of them but + +00:15:27.839 --> 00:15:32.240 +a lot of a lot of default values many of + +00:15:32.240 --> 00:15:32.880 +which + +00:15:32.880 --> 00:15:36.000 +may be relying on the + +00:15:36.000 --> 00:15:37.680 +values that are passed in here this is + +00:15:37.680 --> 00:15:40.000 +complicated and as it turns out + +00:15:40.000 --> 00:15:44.000 +um I wasn't brave enough in most cases + +00:15:44.000 --> 00:15:46.079 +to try to write a lambda that could + +00:15:46.079 --> 00:15:47.279 +understand and + +00:15:47.279 --> 00:15:49.680 +replace uh its own local variable I just + +00:15:49.680 --> 00:15:50.399 +didn't + +00:15:50.399 --> 00:15:53.519 +it didn't save me enough time this was + +00:15:53.519 --> 00:15:54.800 +really easy + +00:15:54.800 --> 00:15:56.800 +to read and write and understand as I + +00:15:56.800 --> 00:15:58.240 +thought through my problem + +00:15:58.240 --> 00:16:01.440 +but now as I use it I I've lost a little + +00:16:01.440 --> 00:16:03.360 +ground maybe with this and I'm not even + +00:16:03.360 --> 00:16:04.079 +sure + +00:16:04.079 --> 00:16:07.279 +I like what I got from uh the many + +00:16:07.279 --> 00:16:08.079 +keyword + +00:16:08.079 --> 00:16:10.560 +properties when it and we can look + +00:16:10.560 --> 00:16:11.920 +perhaps if we have + +00:16:11.920 --> 00:16:17.340 +the time at what that looks like in uh + +00:16:17.340 --> 00:16:19.920 +[Music] + +00:16:19.920 --> 00:16:22.720 +oh all right I have to separately + +00:16:22.720 --> 00:16:24.480 +dismiss and restart that + +00:16:24.480 --> 00:16:27.519 +um so that so that's just about my time + +00:16:27.519 --> 00:16:29.600 +uh and being respectful of that I want + +00:16:29.600 --> 00:16:31.920 +to invite presenters to just jump in at + +00:16:31.920 --> 00:16:35.519 +any of the many large pauses I leave + +00:16:35.519 --> 00:16:38.079 +uh as I'll just leave up the doc string + +00:16:38.079 --> 00:16:40.160 +for a moment and maybe split the screen + +00:16:40.160 --> 00:16:45.199 +and pull open an item + +00:16:45.199 --> 00:16:48.720 +you are now unmuted uh thank you very + +00:16:48.720 --> 00:16:50.720 +much for your talk corwin + +00:16:50.720 --> 00:16:53.839 +um I think you still have like uh + +00:16:53.839 --> 00:16:55.279 +maybe three or four more minutes if you + +00:16:55.279 --> 00:16:57.680 +want to quickly wrap up + +00:16:57.680 --> 00:17:01.040 +okay so three or four more minutes I can + +00:17:01.040 --> 00:17:02.160 +easily spend + +00:17:02.160 --> 00:17:05.439 +on thank yous + +00:17:05.439 --> 00:17:07.280 +I might switch to that if there aren't + +00:17:07.280 --> 00:17:08.270 +questions on the path + +00:17:08.270 --> 00:17:10.160 +[Music] + +00:17:10.160 --> 00:17:12.559 +um would you like me to pull up the pad + +00:17:12.559 --> 00:17:14.079 +or are you looking at it + +00:17:14.079 --> 00:17:17.199 +I am I bookmarked it I am + +00:17:17.199 --> 00:17:30.840 +pulling the tab and I'll bring it in + +00:17:30.840 --> 00:17:34.960 +okay + +00:17:34.960 --> 00:17:38.799 +all right this is the wrong ether pad + +00:17:38.799 --> 00:17:44.480 +thanks for the link + +00:17:44.480 --> 00:17:48.000 +all right um so I think I'm looking for + +00:17:48.000 --> 00:17:54.880 +macros + +00:17:54.880 --> 00:17:58.400 +uh okay key message sure so the + +00:17:58.400 --> 00:18:01.679 +the key message is that it's um it's a + +00:18:01.679 --> 00:18:02.960 +jungle out there + +00:18:02.960 --> 00:18:06.240 +macros along with any other design can + +00:18:06.240 --> 00:18:08.559 +leave you in a position + +00:18:08.559 --> 00:18:11.919 +where you have a nice api and I can show + +00:18:11.919 --> 00:18:13.600 +you other examples you can find them in + +00:18:13.600 --> 00:18:14.960 +the dungeon mode source + +00:18:14.960 --> 00:18:18.480 +of many many other places where I use + +00:18:18.480 --> 00:18:21.600 +this exact same formula quickly + +00:18:21.600 --> 00:18:23.840 +sketching out how a character sheet + +00:18:23.840 --> 00:18:26.960 +or another big data set needs to + +00:18:26.960 --> 00:18:28.480 +needs to figure out what tables are + +00:18:28.480 --> 00:18:29.600 +going to be interesting from the + +00:18:29.600 --> 00:18:30.720 +collection of files + +00:18:30.720 --> 00:18:34.400 +and then load up the tile set and + +00:18:34.400 --> 00:18:38.880 +the uh layout file from that + +00:18:38.880 --> 00:18:41.600 +and I mean it works this the project is + +00:18:41.600 --> 00:18:43.280 +moving forward with this I have the + +00:18:43.280 --> 00:18:44.799 +flexibility that I need + +00:18:44.799 --> 00:18:46.720 +but here I am evaling my own code to + +00:18:46.720 --> 00:18:48.640 +make darn sure even if I get by + +00:18:48.640 --> 00:18:52.400 +by compiled uh this macro doesn't uh + +00:18:52.400 --> 00:18:55.440 +does get evaluated in the user's real + +00:18:55.440 --> 00:18:58.160 +run time clearly a design fail so that + +00:18:58.160 --> 00:18:58.880 +would be + +00:18:58.880 --> 00:19:00.880 +the key point of my talk is is to + +00:19:00.880 --> 00:19:02.400 +present this design + +00:19:02.400 --> 00:19:05.600 +fail and uh thank + +00:19:05.600 --> 00:19:08.320 +um thank the community but especially + +00:19:08.320 --> 00:19:09.520 +wasa masa + +00:19:09.520 --> 00:19:12.160 +for for some patience and let me add at + +00:19:12.160 --> 00:19:13.280 +this moment that + +00:19:13.280 --> 00:19:15.200 +uh he was so frustrated with me they + +00:19:15.200 --> 00:19:16.799 +were sort of frustrated with me I think + +00:19:16.799 --> 00:19:17.360 +I + +00:19:17.360 --> 00:19:20.400 +didn't qualify pronouns um + +00:19:20.400 --> 00:19:24.240 +with um + +00:19:24.240 --> 00:19:26.640 +with doing this the the first the this + +00:19:26.640 --> 00:19:28.160 +was one of our first interactions and + +00:19:28.160 --> 00:19:29.919 +the feedback was + +00:19:29.919 --> 00:19:34.240 +why is this a macro full stop + +00:19:34.240 --> 00:19:36.640 +and uh that's a great message actually + +00:19:36.640 --> 00:19:38.320 +and I and I hope that + +00:19:38.320 --> 00:19:40.160 +uh maybe this can encourage further + +00:19:40.160 --> 00:19:42.720 +talks across the subject about + +00:19:42.720 --> 00:19:44.160 +you know hey wait a minute macros are + +00:19:44.160 --> 00:19:46.720 +really fantastic as I hope I made + +00:19:46.720 --> 00:19:48.559 +clear you can do a tremendous amount + +00:19:48.559 --> 00:19:51.039 +about uh with them and we rely on them + +00:19:51.039 --> 00:19:52.320 +for + +00:19:52.320 --> 00:19:55.200 +almost all the fun goodies um from you + +00:19:55.200 --> 00:19:56.480 +know defund + +00:19:56.480 --> 00:20:02.159 +secu + +00:20:02.159 --> 00:20:04.960 +um I want to get to my my thank yous let + +00:20:04.960 --> 00:20:05.440 +me just + +00:20:05.440 --> 00:20:18.840 +peek back at the pad + +00:20:18.840 --> 00:20:20.000 +oh + +00:20:20.000 --> 00:20:22.080 +well that was actually a scratch buffer + +00:20:22.080 --> 00:20:23.760 +so I'll have to sort of read it cold off + +00:20:23.760 --> 00:20:24.720 +my notes + +00:20:24.720 --> 00:20:27.919 +um + +00:20:27.919 --> 00:20:30.320 +but also but I'll switch to I'll also + +00:20:30.320 --> 00:20:31.600 +I'll say a couple of thank yous if you + +00:20:31.600 --> 00:20:34.320 +don't mind + +00:20:34.320 --> 00:20:36.080 +in addition to the big thank you that I + +00:20:36.080 --> 00:20:38.400 +hope was implied by my shout out to wasa + +00:20:38.400 --> 00:20:39.360 +masa + +00:20:39.360 --> 00:20:42.720 +um I also want to thank you amen for + +00:20:42.720 --> 00:20:46.640 +um your kindness in extending + +00:20:46.640 --> 00:20:51.360 +to the project as well as to me the + +00:20:51.360 --> 00:20:54.320 +the chance to present here and and and + +00:20:54.320 --> 00:20:55.440 +you've you've also + +00:20:55.440 --> 00:20:56.799 +just done a lot of great stuff for our + +00:20:56.799 --> 00:20:59.360 +project thank you very much for that and + +00:20:59.360 --> 00:21:13.120 +sasha + +00:21:13.120 --> 00:21:15.919 +I'll get there um thank you so much for + +00:21:15.919 --> 00:21:17.200 +the inspiration that you are to our + +00:21:17.200 --> 00:21:18.320 +whole community + +00:21:18.320 --> 00:21:22.400 +I also want to thank the presenters + +00:21:22.400 --> 00:21:25.600 +um for just being so flexible and + +00:21:25.600 --> 00:21:27.600 +uh nagging back through the whole thing + +00:21:27.600 --> 00:21:29.120 +and especially to leo + +00:21:29.120 --> 00:21:30.960 +who has done so much to drive the show + +00:21:30.960 --> 00:21:32.159 +today + +00:21:32.159 --> 00:21:35.520 +um I + +00:21:35.520 --> 00:21:37.840 +this is a fractious tent at times and + +00:21:37.840 --> 00:21:38.960 +sometimes + +00:21:38.960 --> 00:21:41.360 +it is indeed a little bit of a circus + +00:21:41.360 --> 00:21:43.039 +but I + +00:21:43.039 --> 00:21:45.520 +am learning so much so fast I'm just + +00:21:45.520 --> 00:21:46.880 +inspired by how much + +00:21:46.880 --> 00:21:50.320 +Emacs can teach us thank you + +00:21:50.320 --> 00:21:53.120 +uh corbin for your kind words and you + +00:21:53.120 --> 00:21:54.960 +know about me of course but all about + +00:21:54.960 --> 00:21:56.000 +you know all of us + +00:21:56.000 --> 00:21:59.760 +and the conference and you know indeed + +00:21:59.760 --> 00:22:02.400 +thanks to everyone who's helped uh + +00:22:02.400 --> 00:22:04.159 +including the speakers of course + +00:22:04.159 --> 00:22:05.840 +without whom you know a maxcom really + +00:22:05.840 --> 00:22:08.960 +wouldn't have been a EmacsConf + +00:22:08.960 --> 00:22:10.640 +and you know it's been a pleasure + +00:22:10.640 --> 00:22:12.080 +knowing you and working with + +00:22:12.080 --> 00:22:15.520 +you um I guess um from afar for the most + +00:22:15.520 --> 00:22:17.360 +part on dungeon mode like helping + +00:22:17.360 --> 00:22:18.960 +helping with like small things here and + +00:22:18.960 --> 00:22:20.720 +there but um + +00:22:20.720 --> 00:22:22.320 +yeah it's been my pleasure and it's + +00:22:22.320 --> 00:22:23.840 +great to have you and + +00:22:23.840 --> 00:22:25.840 +um everyone else you know part of the + +00:22:25.840 --> 00:22:26.880 +community and + +00:22:26.880 --> 00:22:29.440 +for me to be part of the community it's + +00:22:29.440 --> 00:22:30.559 +been a lot of fun + +00:22:30.559 --> 00:22:33.679 +thank you + +00:22:33.679 --> 00:22:36.080 +it's it's it's it's an honor and I don't + +00:22:36.080 --> 00:22:38.000 +use that word an awful lot because I + +00:22:38.000 --> 00:22:38.720 +sort of + +00:22:38.720 --> 00:22:41.760 +sort of smirk at it but um gets us in a + +00:22:41.760 --> 00:22:44.320 +lot of trouble honor does but + +00:22:44.320 --> 00:22:47.360 +this will be a sure time to use it thank + +00:22:47.360 --> 00:22:48.840 +you + +00:22:48.840 --> 00:22:51.840 +likewise -- cgit v1.2.3