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