Transcript (unedited)

[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""Hi, my name is Eduardo Ochs,""" start="00:00:00.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and this is my video for the EmacsConf 2025.""" start="00:00:02.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""Its title is Some Problems of Modernizing Emacs,""" start="00:00:06.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""and that is the same title as a video""" start="00:00:09.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""that I tried to record in March.""" start="00:00:12.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""But my video from March had a good "beginning" and a bad "rest",""" start="00:00:16.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I thought, I can't release that because the rest is very bad.""" start="00:00:19.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""I need to replace... to re-record the last part of the video.""" start="00:00:23.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""But I never did that.""" start="00:00:27.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""So this video is going to be the first 12 minutes""" start="00:00:29.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""of that other video, with another ending.""" start="00:00:33.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""And in this other ending, I'm going to show some things""" start="00:00:37.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""that are very easy to test. And, if people are interested,""" start="00:00:41.440" video="mainVideo-modern" id="subtitle"]] [[!template text="""then the rest of the old video will make more sense.""" start="00:00:46.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""Anyway, let me start.""" start="00:00:51.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""Hi! My name is Eduardo Ochs. I'm the""" start="00:00:55.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""author of an Emacs package called eev and""" start="00:00:57.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the title of this video is""" start="00:01:00.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Some problems of modernizing Emacs".""" start="00:01:03.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""The main themes of this video""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""Here is a summary of the main themes""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""of this video. I'm going to talk mainly""" start="00:01:08.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""about these four things here. The first""" start="00:01:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""one is that Emacs has changed a lot in its""" start="00:01:12.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""recent versions, and now it has lots of""" start="00:01:15.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""types... so if we want to look under the""" start="00:01:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""hood and to understand what Emacs""" start="00:01:21.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""really does we are going to stumble on""" start="00:01:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""lots of types... and the""" start="00:01:27.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""current tree of classes and types""" start="00:01:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""looks like this... that is,""" start="00:01:34.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is quite big.""" start="00:01:37.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""The second theme is that people used""" start="00:01:46.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to say things like "Anyone can learn Lisp""" start="00:01:49.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""in one day"... I'm going to explain""" start="00:01:53.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this quote, and I'm also going to show""" start="00:01:56.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that now this is gone... anyway. This is a""" start="00:02:01.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""very short summary... details soon.""" start="00:02:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I will also show how to display""" start="00:02:08.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""better "inner views" of Emacs objects...""" start="00:02:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I'm going to define what is an inner view,""" start="00:02:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""of course.""" start="00:02:16.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Inner views of Emacs objects""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""The main trick is that we are going""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to use one of the ways of displaying""" start="00:02:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""internal objects, that is the `cl-print`""" start="00:02:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""family of functions, for example,""" start="00:02:29.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""`cl-prin1-to-string`, and here are some""" start="00:02:32.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""examples of the kind of output that we""" start="00:02:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""are going to see...""" start="00:02:37.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""for example, if we run these two lines""" start="00:02:38.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""here the first line defines a function `foo`""" start="00:02:44.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and the second line sets `o` to the""" start="00:02:47.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""internal view of the definition of `foo`.""" start="00:02:52.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Older Emacses""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""In older Emacses `o` would be just a""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""list that looks... that would look very""" start="00:02:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""similar to this line here... but in newer""" start="00:03:02.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Emacses the result of this - I mean, the""" start="00:03:05.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the contents of `o` is this thing here,""" start="00:03:09.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that looks quite different""" start="00:03:12.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""from this definition.""" start="00:03:15.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, in older Emacses""" start="00:03:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the contents of the""" start="00:03:21.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""function cell of `o`...""" start="00:03:25.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""sorry, of the function cell of `foo`,""" start="00:03:28.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""would be an "old-style lambda",""" start="00:03:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that would be just a list like this...""" start="00:03:32.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Newer Emacses""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""and in newer Emacses uh the contents of O would""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""be a "vector-like lambda"... look for the""" start="00:03:39.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""square brackets here - this is a""" start="00:03:42.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""vector, but it is preceded by a hash sign.""" start="00:03:44.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""So this is what we call""" start="00:03:47.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""a "vector-like lambda",""" start="00:03:49.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and vector-like lambas do not""" start="00:03:51.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""have a canonical printed representation -""" start="00:03:53.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""they have at least two semicanonical""" start="00:03:55.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""printed representations...""" start="00:03:57.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""The first semicanonical""" start="00:03:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""printed representation is this one, that is""" start="00:04:01.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""generated by a family of functions with""" start="00:04:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""names like `prin1`...""" start="00:04:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and the second semicanonical printed""" start="00:04:09.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""representation is like this -""" start="00:04:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""it looks like a list...""" start="00:04:17.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""it looks somewhat like this definition""" start="00:04:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""of `foo` here, but it has this""" start="00:04:23.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""`:dynbind` symbol here...""" start="00:04:27.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and it turns out that when we use""" start="00:04:29.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the `cl-print` family of functions we can""" start="00:04:32.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""reconfigure how things are printed...""" start="00:04:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I'm going to show several interesting""" start="00:04:37.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""ways of reconfiguring how lambdas are printed,""" start="00:04:40.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and one of the ways is going to""" start="00:04:47.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""be like this.""" start="00:04:49.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""We can also use the `cl-print`""" start="00:04:52.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""functions with my indentation tricks to""" start="00:04:56.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to display how types, or classes, are""" start="00:04:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""viewed internally by Emacs, and this is a""" start="00:05:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""big example...""" start="00:05:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""This is what Emacs considers as being""" start="00:05:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the definition of the type""" start="00:05:14.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""`cl-structure-class`,""" start="00:05:16.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""class and it is this big thing here.""" start="00:05:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I edited it very lightly...""" start="00:05:21.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I just deleted some line breaks here.""" start="00:05:24.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Help buttons""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""And another thing that I want to""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""explain is that Emacs""" start="00:05:33.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""has some help functions that""" start="00:05:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I have never liked...""" start="00:05:37.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""for most people they are good enough,""" start="00:05:39.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""but for me they aren't... they...""" start="00:05:41.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""uh, well - I'm going to say""" start="00:05:44.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""more about this later...""" start="00:05:48.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and, for example,""" start="00:05:50.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we want a description of what is""" start="00:05:52.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this type here, that we just saw in""" start="00:05:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""its internal view here...""" start="00:05:58.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""we can run either `describe-type`""" start="00:06:00.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""or my variant of `describe-type`,""" start="00:06:02.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and we get a help buffer""" start="00:06:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that looks like this, in which""" start="00:06:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""these blue things that are underlined""" start="00:06:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""are "buttons", in the classical sense...""" start="00:06:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""you can click on these buttons, or type""" start="00:06:15.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""RET on these buttons, and you will be""" start="00:06:17.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""taken to another help page, that is""" start="00:06:19.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""generated dynamically...""" start="00:06:22.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and you can navigate back and forth...""" start="00:06:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and well, whatever...""" start="00:06:28.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I'm going to explain my""" start="00:06:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""problems with these kinds of help buffers""" start="00:06:33.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and what I'm trying to do to""" start="00:06:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""overcome these problems...""" start="00:06:37.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Anyone can learn Lisp in one day""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""One of my slogans in this video""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is going to be this one:""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Anyone can learn Lisp in one day".""" start="00:06:44.541" video="mainVideo-modern" id="subtitle"]] [[!template text="""this is a part of a bigger quote""" start="00:06:46.675" video="mainVideo-modern" id="subtitle"]] [[!template text="""that I took from a keynote presentation""" start="00:06:50.421" video="mainVideo-modern" id="subtitle"]] [[!template text="""by Abelson and Sussman, who""" start="00:06:53.041" video="mainVideo-modern" id="subtitle"]] [[!template text="""are two dinosaurs of Computer Science...""" start="00:06:54.721" video="mainVideo-modern" id="subtitle"]] [[!template text="""Here is the full quote:""" start="00:06:58.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Anyone can learn Lisp in one day -""" start="00:07:00.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""except that if they already know Fortran""" start="00:07:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""then it would take three days."""" start="00:07:06.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""This is a frame of the video...""" start="00:07:11.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""By the way I am going to to add""" start="00:07:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this... "and if the person is starting""" start="00:07:28.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""with Doom Emacs then it would take 5 years."""" start="00:07:32.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""why? I'm going to explain why.""" start="00:07:34.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""This is how Emacs used to be.""" start="00:07:39.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""If we execute these two expressions here""" start="00:07:43.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the first one... sorry, each symbol can""" start="00:07:46.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""have two "values",""" start="00:07:51.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""one is its "value as a variable"""" start="00:07:53.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and another one is its "value as a function"...""" start="00:07:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and if we run this we store 42""" start="00:07:58.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""in the "value cell" of the symbol `foo`, and""" start="00:08:02.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we run this defun here it stores a""" start="00:08:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""certain anonymous function in the""" start="00:08:11.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""function cell" of the symbol `foo`...""" start="00:08:14.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and in Emacs, until some time ago""" start="00:08:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we did that and and if we ran""" start="00:08:22.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this expression here the result""" start="00:08:27.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""would be 42,""" start="00:08:30.775" video="mainVideo-modern" id="subtitle"]] [[!template text="""because of this line here, and if we""" start="00:08:32.575" video="mainVideo-modern" id="subtitle"]] [[!template text="""ran this line here the result would be""" start="00:08:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the anonymous function corresponding to""" start="00:08:37.841" video="mainVideo-modern" id="subtitle"]] [[!template text="""this defun here...""" start="00:08:40.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""but now this has changed...""" start="00:08:41.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the result of this thing here is this""" start="00:08:45.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""vector-like lambda here - but that doesn't""" start="00:08:48.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""matter much now...""" start="00:08:51.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, until some time ago""" start="00:08:53.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we did that and if we ran""" start="00:08:57.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""this expression here, (foo foo)...""" start="00:09:00.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""Emacs would do this: it would""" start="00:09:02.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""replace the first `foo` by this""" start="00:09:04.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""anonymous function here, it would replace""" start="00:09:06.001" video="mainVideo-modern" id="subtitle"]] [[!template text="""the second `foo` by the value of `foo` as a""" start="00:09:09.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""variable, that is 42,""" start="00:09:12.041" video="mainVideo-modern" id="subtitle"]] [[!template text="""and it would evaluate this, and the""" start="00:09:14.460" video="mainVideo-modern" id="subtitle"]] [[!template text="""result would be 420.""" start="00:09:16.775" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, again, we used to have this slogan""" start="00:09:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""here, "anyone can learn Lisp in one day"...""" start="00:09:23.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""but now this is gone.""" start="00:09:26.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Let me show... let me talk""" start="00:09:28.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""a bit more about why...""" start="00:09:30.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Lambdas for beginners broken""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]]
[[!template text="""the title of this slide is""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Lambdas for beginners broken"...""" start="00:09:36.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we run this, as I've shown""" start="00:09:38.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""in the previous slide...""" start="00:09:41.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""in the old style, in old Emacses,""" start="00:09:43.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the result of (symbol-function 'foo)""" start="00:09:46.475" video="mainVideo-modern" id="subtitle"]] [[!template text="""would be this anonymous function here...""" start="00:09:49.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""and now we get this strange thing here.""" start="00:09:52.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, this is an "old-style lambda",""" start="00:09:56.320" video="mainVideo-modern" id="subtitle"]] [[!template text="""this is a "vector-like lambda",""" start="00:10:00.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""and until the middle of 2024""" start="00:10:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""beginners could learn a lot of Lisp""" start="00:10:07.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""by thinking only in terms of""" start="00:10:09.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""objects like these...""" start="00:10:11.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""this is a function and this""" start="00:10:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is an anonymous function, and""" start="00:10:15.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""they would learn how to draw cons cell""" start="00:10:17.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""diagrams like this thing here and this""" start="00:10:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""thing here...""" start="00:10:23.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""they would think on lists as""" start="00:10:25.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""being these trees here, and they""" start="00:10:26.340" video="mainVideo-modern" id="subtitle"]] [[!template text="""would be able to understand a lot of""" start="00:10:29.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Lisp just by thinking in these terms...""" start="00:10:32.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then vector-like lambdas started""" start="00:10:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to appear in many places... and if we use""" start="00:10:39.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""vector-like lambdas" in a wide sense,""" start="00:10:43.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""to mean all the new objects,""" start="00:10:46.475" video="mainVideo-modern" id="subtitle"]] [[!template text="""these new objects, that are""" start="00:10:50.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""difficult to visualize... they also started""" start="00:10:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to appear in many places.""" start="00:10:56.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""This is a continuation of the""" start="00:10:58.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""previous slide - this part here is a copy""" start="00:11:01.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""of things that were in the previous slide...""" start="00:11:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""before 2024 beginners could""" start="00:11:06.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""open black boxes like this...""" start="00:11:12.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""they could try to see what was in the""" start="00:11:17.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""function cell of the symbol `foo`...""" start="00:11:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and they would see something elegant and""" start="00:11:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""mind-blowing... and they would start to love""" start="00:11:27.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Lisp immediately.""" start="00:11:29.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Now what they get - what they see -""" start="00:11:31.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is a tiny part of a very complex structure""" start="00:11:33.675" video="mainVideo-modern" id="subtitle"]] [[!template text="""that is very powerful but that is""" start="00:11:37.041" video="mainVideo-modern" id="subtitle"]] [[!template text="""very difficult to understand...""" start="00:11:39.641" video="mainVideo-modern" id="subtitle"]] [[!template text="""and now our beginners are overwhelmed""" start="00:11:41.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""instead of mind-blown. Note that I said "black box" here.""" start="00:11:44.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""Let me explain the term.""" start="00:11:51.340" video="mainVideo-modern" id="subtitle"]] [[!template text="""We can open what's inside of `foo`...""" start="00:11:53.401" video="mainVideo-modern" id="subtitle"]] [[!template text="""we can open `foo` to see the contents of""" start="00:11:57.540" video="mainVideo-modern" id="subtitle"]] [[!template text="""the symbol `foo`, and we can try to see""" start="00:12:00.141" video="mainVideo-modern" id="subtitle"]] [[!template text="""what's in the function cell of the""" start="00:12:03.008" video="mainVideo-modern" id="subtitle"]] [[!template text="""symbol `foo`...""" start="00:12:06.621" video="mainVideo-modern" id="subtitle"]] [[!template text="""so we can open the box, but what we get""" start="00:12:08.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is something very difficult to understand,""" start="00:12:10.941" video="mainVideo-modern" id="subtitle"]] [[!template text="""and so I'm going to say that""" start="00:12:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""when this happens that box is black.""" start="00:12:17.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""It is not totally black - we can open open it -""" start="00:12:21.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""but we don't understand what is going on there,""" start="00:12:24.580" video="mainVideo-modern" id="subtitle"]] [[!template text="""so we declare that that is black.""" start="00:12:27.375" video="mainVideo-modern" id="subtitle"]] [[!template text="""And... when these things started to happen""" start="00:12:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""_I_ was overwhelmed -""" start="00:12:36.575" video="mainVideo-modern" id="subtitle"]] [[!template text="""and in this video I'm going to pretend""" start="00:12:38.975" video="mainVideo-modern" id="subtitle"]] [[!template text="""that I was not the only person""" start="00:12:41.975" video="mainVideo-modern" id="subtitle"]] [[!template text="""that was overwhelmed""" start="00:12:44.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""by these new structures""" start="00:12:47.008" video="mainVideo-modern" id="subtitle"]] [[!template text="""that are not so elegant""" start="00:12:51.241" video="mainVideo-modern" id="subtitle"]] [[!template text="""as the ones that we had before.""" start="00:12:52.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Anyway...""" start="00:12:54.000" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Demo""" start="00:12:59.302" video="mainVideo-modern" id="subtitle"]]
[[!template text="""In the beginning of the video,""" start="00:12:59.302" video="mainVideo-modern" id="subtitle"]] [[!template text="""I said that I was going to replace""" start="00:13:00.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""the second part of my video from March""" start="00:13:02.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""by something that was very easy to test.""" start="00:13:06.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""So this is a quick demo for the _very_ impatient.""" start="00:13:08.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""I'm recording this in December for the EmacsConf 2025.""" start="00:13:11.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""This is the demo that I'm going to present.""" start="00:13:16.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""The idea is that people can run the demo a first time""" start="00:13:19.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""just to check that everything works""" start="00:13:21.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""and to have a notion of how things look like,""" start="00:13:24.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then, in a second moment,""" start="00:13:27.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""they can rerun the demo more slowly""" start="00:13:29.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""to understand what each step does.""" start="00:13:32.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""So... we are in a file called "00-try-this"...""" start="00:13:34.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""and the idea is that we can execute most of this file""" start="00:13:38.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""just by typing `f8`​s in the right places.""" start="00:13:42.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""Remember that when we type `f8`""" start="00:13:45.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""on a line that starts with two red stars,""" start="00:13:47.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""eev treats that line as a comment.""" start="00:13:49.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""So I'm going to start here... Note that it says in the bottom""" start="00:13:53.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""of the screen that this is a comment.""" start="00:13:58.008" video="mainVideo-modern" id="subtitle"]] [[!template text="""We are going to run this to download some files...""" start="00:13:59.741" video="mainVideo-modern" id="subtitle"]] [[!template text="""Now the files are there...""" start="00:14:09.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""This `find-2a` here shows a certain file""" start="00:14:12.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""at the window at the right,""" start="00:14:17.320" video="mainVideo-modern" id="subtitle"]] [[!template text="""but we don't need to pay attention to that.""" start="00:14:19.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""And this thing `load`​s that file.""" start="00:14:22.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""So when we load that file, it defines some functions here""" start="00:14:24.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""that are going to be used by the rest of the examples.""" start="00:14:27.520" video="mainVideo-modern" id="subtitle"]] [[!template text="""Now we can run this thing here... Note that""" start="00:14:29.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""we just defined some functions""" start="00:14:34.020" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then we ran these functions here... `find-eoutput-2a`...""" start="00:14:34.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""and they show some things in the window at the right.""" start="00:14:39.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""These things are boring.""" start="00:14:42.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""When we run `adt-insert` with argument 42,""" start="00:14:45.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""it just shows a 42, in this way...""" start="00:14:49.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""The other ones show other numbers... and so on.""" start="00:14:52.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""And... what happens when we modify""" start="00:14:55.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""this function here, `adt-2`,""" start="00:14:59.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""by adding and removing advices to it?""" start="00:15:02.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""The idea is that people can run""" start="00:15:05.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""this thing here several times,""" start="00:15:06.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""watching the window at the right,""" start="00:15:08.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""because the results are going to be shown there.""" start="00:15:10.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, in the first moment, when we run...""" start="00:15:14.720" video="mainVideo-modern" id="subtitle"]] [[!template text="""no, no, sorry, sorry, let me run it again.""" start="00:15:17.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""In the first moment when we run `adt-2`""" start="00:15:21.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""it just shows a 2, and then we modify it in a certain way,""" start="00:15:24.040" video="mainVideo-modern" id="subtitle"]] [[!template text="""and we run it again,""" start="00:15:28.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""and now before showing the 2 it shows a 1, mysteriously,""" start="00:15:29.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then we add something to be run after the 2,""" start="00:15:33.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""And we run it again,""" start="00:15:37.120" video="mainVideo-modern" id="subtitle"]] [[!template text="""and now `adt-2` shows these three things.""" start="00:15:38.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""And then we remove the advices,""" start="00:15:41.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""we remove these other things,""" start="00:15:43.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""and when we run `adt-2` again, it shows only `;; --> 2`.""" start="00:15:45.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""It's impossible to understand that in the first time,""" start="00:15:49.080" video="mainVideo-modern" id="subtitle"]] [[!template text="""so we can run that several times... to see how things work.""" start="00:15:51.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""And now we want to understand""" start="00:15:57.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""what changes in the function `adt-2`...""" start="00:16:02.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""how it is modified internally.""" start="00:16:04.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""I'm calling that the internal view of the function,""" start="00:16:08.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""and we are going to compare""" start="00:16:11.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""several internal views of the function `adt-2`.""" start="00:16:13.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""I'm going to reset the function `adt-2`""" start="00:16:16.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""by removing the advices and placing the advices on it again...""" start="00:16:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and if we just pretty-print this function here,""" start="00:16:25.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""the symbol... the value of this symbol here as a function,""" start="00:16:28.508" video="mainVideo-modern" id="subtitle"]] [[!template text="""it is something very ugly.""" start="00:16:36.320" video="mainVideo-modern" id="subtitle"]] [[!template text="""But if we print it in another way, with `cl-prin1`,""" start="00:16:38.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""then we get something that is much nicer...""" start="00:16:43.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""but that is not indented. And if we use this thing here,""" start="00:16:47.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""`cl-prin2` instead of `cl-prin1`, it becomes indented.""" start="00:16:51.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""So let's try it again.""" start="00:16:55.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""Here is the current view of what is `adt-2`.""" start="00:17:00.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, the original `adt-insert` is here...""" start="00:17:06.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""and here are some modifications""" start="00:17:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that were added by the advices.""" start="00:17:11.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""And we can run these things many times""" start="00:17:13.520" video="mainVideo-modern" id="subtitle"]] [[!template text="""to understand what each step does.""" start="00:17:16.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""But my suggestion is: in the first time""" start="00:17:19.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""just run everything very quickly...""" start="00:17:21.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then you run it again,""" start="00:17:23.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""paying attention to the parts that look more interesting.""" start="00:17:25.200" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Printing something in different ways for lambdas""" start="00:17:29.120" video="mainVideo-modern" id="subtitle"]]
[[!template text="""Now, I'm going to... Remember that here""" start="00:17:29.120" video="mainVideo-modern" id="subtitle"]] [[!template text="""I printed the contents of `adt-2` in several different ways,""" start="00:17:37.374" video="mainVideo-modern" id="subtitle"]] [[!template text="""and now I'm going to show how we can do the same idea""" start="00:17:42.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""of printing something in different ways for lambdas...""" start="00:17:47.120" video="mainVideo-modern" id="subtitle"]] [[!template text="""that is something that I explained""" start="00:17:51.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""in the first part of the video.""" start="00:17:52.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""In this part of the demo we define a function `foo`...""" start="00:17:54.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""this `setq` here defines `o` as""" start="00:18:00.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""the contents of the function cell of `foo`...""" start="00:18:06.361" video="mainVideo-modern" id="subtitle"]] [[!template text="""And now we are going to print""" start="00:18:08.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""that `o` in several different ways.""" start="00:18:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""The default way is this one, it's very ugly,""" start="00:18:15.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""but we can redefine how these things are printed""" start="00:18:19.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""by just running these lines...""" start="00:18:22.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""and if we pay attention at what's happening""" start="00:18:24.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""at the window at the right,""" start="00:18:28.720" video="mainVideo-modern" id="subtitle"]] [[!template text="""we can see that we have several different""" start="00:18:30.520" video="mainVideo-modern" id="subtitle"]] [[!template text="""printed representations for the same thing...""" start="00:18:33.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then at the last step,""" start="00:18:35.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""we reset the printer to the default representation.""" start="00:18:36.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""And the details are here.""" start="00:18:41.080" video="mainVideo-modern" id="subtitle"]] [[!template text="""If we run these lines here,""" start="00:18:43.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""they show the definitions at the window at the right.""" start="00:18:45.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""And this... now comes the difficult part,""" start="00:18:48.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""in which we have to do something""" start="00:18:53.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""besides just running things with F8. We need""" start="00:18:56.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""a help buffer with buttons...""" start="00:19:02.080" video="mainVideo-modern" id="subtitle"]] [[!template text="""buttons in the traditional sense,""" start="00:19:04.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""and we need to choose a certain button there,""" start="00:19:08.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""or any button there,""" start="00:19:11.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""and run `M-x ee-set-button` on that button.""" start="00:19:13.440" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, let me define a `struct` here,""" start="00:19:17.941" video="mainVideo-modern" id="subtitle"]] [[!template text="""and this is some help on what is that structure.""" start="00:19:24.720" video="mainVideo-modern" id="subtitle"]] [[!template text="""I'm going to choose this button here""" start="00:19:29.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I'm going to type `M-x ee-set-button`.""" start="00:19:33.600" video="mainVideo-modern" id="subtitle"]] [[!template text="""The message is a bit obscure.""" start="00:19:40.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""And now we have something that displays""" start="00:19:43.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""a lot of information about that button...""" start="00:19:47.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""And we can also run that with just `F8`s.""" start="00:19:51.080" video="mainVideo-modern" id="subtitle"]] [[!template text="""By the way, if we want to understand""" start="00:19:53.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""the code that's behind these things,""" start="00:20:00.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""we can run this sexp here.""" start="00:20:02.320" video="mainVideo-modern" id="subtitle"]] [[!template text="""It is going to show the code here at the right.""" start="00:20:04.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""But anyway, these first lines here...""" start="00:20:07.220" video="mainVideo-modern" id="subtitle"]] [[!template text="""they display the output in the echo area... Let's try...""" start="00:20:10.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""And each one of them extracts a different part""" start="00:20:15.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""of the information on that button.""" start="00:20:20.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""And these other lines here create a three-window setting""" start="00:20:22.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""in which the help buffer is shown here,""" start="00:20:26.040" video="mainVideo-modern" id="subtitle"]] [[!template text="""and the result of some other thing""" start="00:20:29.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""is shown in the third window. Let's try...""" start="00:20:33.120" video="mainVideo-modern" id="subtitle"]] [[!template text="""So now that we have... well... I said""" start="00:20:39.980" video="mainVideo-modern" id="subtitle"]] [[!template text="""that we needed to choose a certain button""" start="00:20:46.108" video="mainVideo-modern" id="subtitle"]] [[!template text="""and run `M-x ee-set-button` there. We have done that...""" start="00:20:48.408" video="mainVideo-modern" id="subtitle"]] [[!template text="""so now this variable `ee-button`""" start="00:20:53.440" video="mainVideo-modern" id="subtitle"]] [[!template text="""contains information about the button...""" start="00:20:55.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""And now we can run this part here""" start="00:20:58.440" video="mainVideo-modern" id="subtitle"]] [[!template text="""as many times as we want to...""" start="00:21:01.120" video="mainVideo-modern" id="subtitle"]] [[!template text="""try to understand what are the values of these things here...""" start="00:21:03.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""and how some things start with a value that is very complex""" start="00:21:07.480" video="mainVideo-modern" id="subtitle"]] [[!template text="""and very difficult to understand,""" start="00:21:11.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""and then we extract the more interesting parts.""" start="00:21:13.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""And the details, as I said, are here.""" start="00:21:16.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""That was the end of the demo, and my question is,""" start="00:21:22.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""what was your reaction to that?""" start="00:21:26.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""If your reaction was more like "wow" than like "blergh"""" start="00:21:28.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""then you might like the last part of the video that I recorded in March,""" start="00:21:32.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""that was very technical...""" start="00:21:37.040" video="mainVideo-modern" id="subtitle"]] [[!template text="""When I recorded it, I thought, oh my god, this video is very bad...""" start="00:21:38.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""only the hardcore eev users are going to like that,""" start="00:21:42.720" video="mainVideo-modern" id="subtitle"]] [[!template text="""and there are less than five hardcore""" start="00:21:47.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""eev users in the world...""" start="00:21:51.040" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Exploring buttons""" start="00:21:52.840" video="mainVideo-modern" id="subtitle"]]
[[!template text="""But anyway, if you saw that introduction""" start="00:21:52.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""and you think that these things are interesting,""" start="00:21:56.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""you can execute any one of these S-expressions here""" start="00:21:59.080" video="mainVideo-modern" id="subtitle"]] [[!template text="""and take a look at the final part of that video""" start="00:22:03.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that describes how I wrote some functions""" start="00:22:06.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""for exploring buttons. If you execute this sexp here,""" start="00:22:09.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""it plays a part of the video starting from that position.""" start="00:22:14.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""If you execute this one, you go to the subtitles in HTML...""" start="00:22:19.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""and if you run this one, you go""" start="00:22:26.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""to the subtitles in another format. And... that's it!""" start="00:22:30.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""No, no, sorry, I said "that's it",""" start="00:22:36.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""but I forgot a very important part...""" start="00:22:40.120" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Some design decisions behind eev""" start="00:22:42.160" video="mainVideo-modern" id="subtitle"]]
[[!template text="""I had prepared this slide here""" start="00:22:42.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""to explain some design decisions behind eev""" start="00:22:45.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""and why there are so few users of eev... and let me do that.""" start="00:22:48.508" video="mainVideo-modern" id="subtitle"]] [[!template text="""The thing is that my working memory is very small,""" start="00:22:53.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I need examples that are easy to visualize...""" start="00:22:57.920" video="mainVideo-modern" id="subtitle"]] [[!template text="""ideally, examples that are easy to run""" start="00:23:01.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""and that I can compare the outputs""" start="00:23:04.960" video="mainVideo-modern" id="subtitle"]] [[!template text="""of different ways of running them.""" start="00:23:10.308" video="mainVideo-modern" id="subtitle"]] [[!template text="""For me, understanding specifications""" start="00:23:12.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""in an API is not enough... examples work much better for me.""" start="00:23:16.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""Also, I make lots of mistakes when I type...""" start="00:23:20.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""so I need ways to run my executable notes""" start="00:23:24.440" video="mainVideo-modern" id="subtitle"]] [[!template text="""by just typing `f8` and `M-e`...""" start="00:23:28.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""and... most people in the #emacs channel and in other places""" start="00:23:31.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""recommend executing sexps by typing `M-:`, like this...""" start="00:23:37.040" video="mainVideo-modern" id="subtitle"]] [[!template text="""But I hate that... I think that `M-:` and IELM are""" start="00:23:44.520" video="mainVideo-modern" id="subtitle"]] [[!template text="""for people who type well, so not me...""" start="00:23:49.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""And also, 99% of what I do is scratch code.""" start="00:23:54.560" video="mainVideo-modern" id="subtitle"]] [[!template text="""Very few things that I do go""" start="00:23:58.840" video="mainVideo-modern" id="subtitle"]] [[!template text="""into "production" - between quotes.""" start="00:24:01.640" video="mainVideo-modern" id="subtitle"]]
[[!template new="1" text="""Tests""" start="00:24:05.800" video="mainVideo-modern" id="subtitle"]]
[[!template text="""So most of my tests are not automated tests.""" start="00:24:05.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""They are just things that I run with F8,""" start="00:24:10.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""and they don't include the expected result.""" start="00:24:12.440" video="mainVideo-modern" id="subtitle"]] [[!template text="""Many people feel that this is very, very, very wrong.""" start="00:24:15.880" video="mainVideo-modern" id="subtitle"]] [[!template text="""Tests MUST MEAN automated tests.""" start="00:24:19.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""Also, and this is very frustrating,""" start="00:24:23.280" video="mainVideo-modern" id="subtitle"]] [[!template text="""eev has lots of "non-users",""" start="00:24:25.640" video="mainVideo-modern" id="subtitle"]] [[!template text="""I mean, people who have tried to use it,""" start="00:24:28.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""but they said that they couldn't figure out how to use it.""" start="00:24:31.520" video="mainVideo-modern" id="subtitle"]] [[!template text="""They couldn't understand""" start="00:24:34.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""what would be the workflows for eev.""" start="00:24:36.160" video="mainVideo-modern" id="subtitle"]] [[!template text="""And that's the same that happens with me with code blocks in Org...""" start="00:24:38.080" video="mainVideo-modern" id="subtitle"]] [[!template text="""I'm still at the point in which code blocks in Org just feel wrong.""" start="00:24:43.680" video="mainVideo-modern" id="subtitle"]] [[!template text="""I still don't understand how to organize my workflows around code blocks.""" start="00:24:48.760" video="mainVideo-modern" id="subtitle"]] [[!template text="""I said that eev has very few users,""" start="00:24:55.200" video="mainVideo-modern" id="subtitle"]] [[!template text="""and they are all very weird and very busy,""" start="00:24:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I decided that all my blog-ish posts about eev""" start="00:25:02.240" video="mainVideo-modern" id="subtitle"]] [[!template text="""would be things that they can run in a few minutes...""" start="00:25:06.360" video="mainVideo-modern" id="subtitle"]] [[!template text="""just like the demo that I showed a few minutes ago.""" start="00:25:09.720" video="mainVideo-modern" id="subtitle"]] [[!template text="""I said "like the examples in the rest of the video",""" start="00:25:13.040" video="mainVideo-modern" id="subtitle"]] [[!template text="""but I forgot this slide,""" start="00:25:16.120" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I'm recording this after the demo.""" start="00:25:17.400" video="mainVideo-modern" id="subtitle"]] [[!template text="""So... that's it. Thanks!""" start="00:25:19.640" video="mainVideo-modern" id="subtitle"]]
Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20modern%3A%20Some%20problems%20of%20modernizing%20Emacs)