summaryrefslogtreecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt
diff options
context:
space:
mode:
Diffstat (limited to '2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt')
-rw-r--r--2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt1606
1 files changed, 1606 insertions, 0 deletions
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