diff options
36 files changed, 2156 insertions, 262 deletions
diff --git a/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt new file mode 100644 index 00000000..16c3fb37 --- /dev/null +++ b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt @@ -0,0 +1,34 @@ +WEBVTT + +00:00:01.360 --> 00:02:06.006 +Introduction + +00:02:06.007 --> 00:05:27.537 +What is BinDat? + +00:05:27.538 --> 00:08:30.748 +Conversion to lexical scoping + +00:08:30.749 --> 00:15:35.890 +The BinDat specification + +00:15:35.891 --> 00:17:47.579 +New design + +00:17:47.580 --> 00:19:30.225 +Documentation + +00:19:30.226 --> 00:21:51.272 +Advantages + +00:21:51.273 --> 00:23:08.077 +New features + +00:23:08.078 --> 00:27:56.093 +Examples + +00:27:56.094 --> 00:28:28.335 +Conclusion + +00:28:28.336 --> 00:28:29.336 +Negatives diff --git a/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt new file mode 100644 index 00000000..2fed8d95 --- /dev/null +++ b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt @@ -0,0 +1,1855 @@ +WEBVTT + +00:01.360 --> 00:04.080 +Hi. So I'm going to talk today + +00:04.180 --> 00:10.000 +about a fun rewrite I did of the BinDat package. + +00:10.000 --> 00:00:12.400 +I call this Turbo BinDat. + +00:00:12.400 --> 00:00:14.001 +Actually, the package hasn't changed name, + +00:14.101 --> 00:16.801 +it's just that the result happens to be faster. + +00:16.901 --> 00:19.521 +The point was not to make it faster though, + +00:19.621 --> 00:22.241 +and the point was not to make you understand + +00:22.341 --> 00:23.440 +that data is not code. + +00:23.540 --> 00:27.120 +It's just one more experience I've had + +00:27.120 --> 00:31.280 +where I've seen that treating data as code + +00:31.381 --> 00:33.522 +is not always a good idea. + +00:33.622 --> 00:36.162 +It's important to keep the difference. + +00:36.162 --> 00:38.881 +So let's get started. + +00:38.881 --> 00:40.642 +So what is BinDat anyway? + +00:40.742 --> 00:43.602 +Here's just the overview of basically + +00:43.602 --> 00:44.962 +what I'm going to present. + +00:45.062 --> 00:47.842 +So I'm first going to present BinDat itself + +00:47.843 --> 00:00:49.039 +for those who don't know it, + +00:00:49.039 --> 00:00:51.923 +which is probably the majority of you. + +00:51.923 --> 00:55.363 +Then I'm going to talk about the actual problems + +00:55.363 --> 00:58.882 +that I encountered with this package + +00:58.882 --> 01:01.843 +that motivated me to rewrite it. + +01:01.843 --> 01:05.043 +Most of them were lack of flexibility, + +01:05.044 --> 01:09.924 +and some of it was just poor behavior + +01:09.924 --> 01:13.364 +with respect to scoping and variables, + +01:13.364 --> 01:16.324 +which of course, you know, is bad -- + +01:16.424 --> 01:20.724 +basically uses of eval or, "eval is evil." + +01:20.724 --> 01:24.884 +Then I'm going to talk about the new design -- + +01:24.985 --> 01:28.005 +how I redesigned it + +01:28.105 --> 01:31.365 +to make it both simpler and more flexible, + +01:31.365 --> 01:32.965 +and where the key idea was + +01:33.065 --> 01:35.205 +to expose code as code + +01:35.305 --> 01:37.525 +instead of having it as data, + +01:37.625 --> 01:39.605 +and so here the distinction between the two + +01:39.706 --> 01:44.085 +is important and made things simpler. + +01:44.085 --> 01:46.405 +I tried to keep efficiency in mind, + +01:46.405 --> 01:52.405 +which resulted in some of the aspects of the design + +01:52.505 --> 01:54.886 +which are not completely satisfactory, + +01:54.886 --> 01:57.046 +but the result is actually fairly efficient. + +01:57.146 --> 01:59.286 +Even though it was not the main motivation, + +01:59.287 --> 02:02.967 +it was one of the nice outcomes. + +02:02.967 --> 00:02:06.006 +And then I'm going to present some examples. + +02:06.007 --> 02:08.167 +So first: what is BinDat? + +02:08.267 --> 02:10.567 +Oh actually, rather than present THIS, + +02:10.667 --> 02:12.407 +I'm going to go straight to the code, + +02:12.507 --> 02:14.246 +because BinDat actually had + +02:14.346 --> 02:16.647 +an introduction which was fairly legible. + +02:16.748 --> 02:21.128 +So here we go: this is the old BinDat from Emacs 27 + +02:21.128 --> 02:23.448 +and the commentary starts by explaining + +02:23.448 --> 02:25.848 +what is BinDat? Basically BinDat is a package + +02:25.948 --> 02:30.247 +that lets you parse and unparse + +02:30.247 --> 02:31.527 +basically binary data. + +02:31.627 --> 02:34.648 +The intent is to have typically network data + +02:34.749 --> 02:35.849 +or something like this. + +02:35.949 --> 02:38.328 +So assuming you have network data, + +02:38.328 --> 02:41.528 +presented or defined + +02:41.628 --> 02:44.569 +with some kind of C-style structs, typically, + +02:44.669 --> 02:46.009 +or something along these lines. + +02:46.109 --> 02:49.120 +So you [?] type with documentation + +02:49.120 --> 02:52.809 +that presents something like those structs here, + +02:52.810 --> 02:57.130 +and you want to be able to generate such packets + +02:57.230 --> 03:00.249 +and read such packets, + +03:00.349 --> 03:02.090 +so the way you do it is + +03:02.190 --> 03:04.570 +you rewrite those specifications + +03:04.670 --> 03:06.010 +into the BinDat syntax. + +03:06.110 --> 03:07.529 +So here's the BinDat syntax + +03:07.529 --> 03:10.490 +for the the previous specification. + +03:10.491 --> 03:11.610 +So here, for example, + +03:11.610 --> 03:16.970 +you see the case for a data packet + +03:16.970 --> 03:20.411 +which will have a 'type' field which is a byte + +03:20.411 --> 03:24.091 +(an unsigned 8-bit entity), + +03:24.091 --> 03:26.411 +then an 'opcode' which is also a byte, + +03:26.411 --> 03:30.731 +then a 'length' which is a 16-bit unsigned integer + +03:30.732 --> 03:34.092 +in little endian order, + +03:34.092 --> 03:38.732 +and then some 'id' for this entry, which is + +03:38.732 --> 03:43.531 +8 bytes containing a zero-terminated string, + +03:43.531 --> 03:47.531 +and then the actual data, basically the payload, + +03:47.532 --> 03:51.453 +which is in this case a vector of bytes, + +03:51.453 --> 03:54.812 +('bytes' here doesn't doesn't need to be specified) + +03:54.812 --> 03:58.172 +and here we specify the length of this vector. + +03:58.172 --> 03:59.773 +This 'length' here + +03:59.773 --> 04:02.252 +happens to be actually the name of THIS field, + +04:02.252 --> 04:03.853 +so the length of the data + +04:03.854 --> 04:06.574 +is specified by the 'length' field here, + +04:06.574 --> 04:08.574 +and BinDat will understand this part, + +04:08.574 --> 04:12.333 +which is the the nice part of BinDat. + +04:12.333 --> 04:15.774 +And then you have an alignment field at the end, + +04:15.774 --> 04:18.253 +which is basically padding. + +04:18.253 --> 04:20.574 +It says that it is padded + +04:20.575 --> 04:23.295 +until the next multiple of four. + +04:23.295 --> 04:25.855 +Okay. So this works reasonably well. + +04:25.855 --> 04:27.455 +This is actually very nice. + +04:27.455 --> 04:30.335 +With this, you can then call + +04:30.335 --> 04:32.975 +bindat-pack or bindat-unpack, + +04:32.975 --> 04:37.774 +passing it a string, or passing it an alist, + +04:37.774 --> 04:40.415 +to do the packing and unpacking. + +04:40.416 --> 04:43.296 +So, for example, if you take this string-- + +04:43.296 --> 04:45.856 +actually, in this case, it's a vector of bytes + +04:45.856 --> 04:49.456 +but it works the same; it works in both ways-- + +04:49.456 --> 04:53.536 +if you pass this to bindat-unpack, + +04:53.536 --> 04:57.456 +it will presumably return you this structure + +04:57.457 --> 05:00.017 +if you've given it the corresponding type. + +05:00.017 --> 05:01.776 +So it will extract-- + +05:01.776 --> 05:05.617 +you will see that there is an IP address, + +05:05.617 --> 05:08.017 +which is a destination IP, a source IP, + +05:08.017 --> 05:09.857 +and some port number, + +05:09.857 --> 05:12.977 +and some actual data here and there, etc. + +05:12.977 --> 05:18.017 +So this is quite convenient if you need to do this, + +05:18.018 --> 05:20.898 +and that's what it was designed for. + +05:20.898 --> 00:05:27.537 +So here we are. Let's go back to the actual talk. + +05:27.538 --> 05:34.338 +I converted BinDat to lexical scoping at some point + +05:34.339 --> 05:37.299 +and things seemed to work fine, + +05:37.299 --> 05:42.819 +except, at some point, probably weeks later, + +05:42.819 --> 05:47.139 +I saw a bug report + +05:47.139 --> 05:53.058 +about the new version using lexical scoping + +05:53.059 --> 05:56.339 +not working correctly with WeeChat. + +05:56.339 --> 06:00.580 +So here's the actual chunk of code + +06:00.580 --> 06:02.820 +that appears in WeeChat. + +06:02.820 --> 06:08.420 +Here you see that they also define a BinDat spec. + +06:08.421 --> 06:14.741 +It's a packet that has a 32-bit unsigned length, + +06:14.741 --> 06:18.500 +then some compression byte/compression information, + +06:18.500 --> 06:23.780 +then an id which contains basically another struct + +06:23.780 --> 06:26.901 +(which is specified elsewhere; doesn't matter here), + +06:26.902 --> 06:28.661 +and after that, a vector + +06:28.661 --> 06:33.382 +whose size is not just specified by 'length', + +06:33.382 --> 06:35.142 +but is computed from 'length'. + +06:35.142 --> 06:39.142 +So here's how they used to compute it in WeeChat. + +06:39.142 --> 06:42.822 +So the length here can be specified in BinDat. + +06:42.822 --> 06:43.941 +Instead of having + +06:43.942 --> 06:45.863 +just a reference to one of the fields, + +06:45.863 --> 06:48.903 +or having a constant, you can actually compute it, + +06:48.903 --> 06:52.502 +where you have to use this '(eval', + +06:52.502 --> 06:54.743 +and then followed by the actual expression + +06:54.743 --> 06:58.103 +where you say how you compute it. + +06:58.103 --> 07:01.463 +And here you see that it actually computes it + +07:01.464 --> 07:04.904 +based on the 'length of the structure -- + +07:04.904 --> 07:07.783 +that's supposed to be this 'length' field here -- + +07:07.783 --> 07:11.223 +and it's referred to using the bindat-get-field + +07:11.223 --> 07:14.503 +to extract the field from the variable 'struct'. + +07:14.503 --> 07:17.943 +And then it subtracts four, it subtracts one, + +07:17.943 --> 07:19.467 +and adds some other things + +07:19.468 --> 07:22.185 +which depend on some field + +07:22.185 --> 07:26.905 +that's found in this 'id' field here. + +07:26.905 --> 07:28.425 +And the problem with this code + +07:28.425 --> 07:30.425 +was that it broke + +07:30.425 --> 07:32.745 +because of this 'struct' variable here, + +07:32.745 --> 07:35.145 +because this 'struct' variable is not defined + +07:35.145 --> 07:38.105 +anywhere in the specification of BinDat. + +07:38.106 --> 07:41.866 +It was used internally as a local variable, + +07:41.866 --> 07:45.306 +and because it was using dynamic scoping, + +07:45.306 --> 07:47.386 +it actually happened to be available here, + +07:47.386 --> 07:50.826 +but the documentation nowhere specifies it. + +07:50.826 --> 07:52.506 +So it was not exactly + +07:52.506 --> 07:55.546 +a bug of the conversion to lexical scoping, + +07:55.547 --> 07:58.906 +but it ended up breaking this code. + +07:58.906 --> 08:01.226 +And there was no way to actually + +08:01.226 --> 08:05.066 +fix the code within the specification of BinDat. + +08:05.066 --> 08:08.287 +You had to go outside the specification of BinDat + +08:08.287 --> 08:10.427 +to fix this problem. + +08:10.427 --> 08:14.346 +This is basically how I started looking at BinDat. + +08:14.347 --> 08:17.808 +Then I went to actually investigate a bit more + +08:17.808 --> 08:19.627 +what was going on, + +08:19.627 --> 08:22.108 +and the thing I noticed along the way + +08:22.108 --> 08:25.787 +was basically that the specification of BinDat + +08:25.787 --> 08:29.528 +is fairly complex and has a lot of eval + +08:29.528 --> 08:30.748 +and things like this. + +08:30.749 --> 08:32.288 +So let's take a look + +08:32.288 --> 08:35.068 +at what the BinDat specification looks like. + +08:35.068 --> 08:36.589 +So here it's actually documented + +08:36.589 --> 08:40.269 +as a kind of grammar rules. + +08:40.269 --> 08:45.308 +A specification is basically a sequence of items, + +08:45.308 --> 08:47.389 +and then each of the items is basically + +08:47.389 --> 08:51.248 +a FIELD of a struct, so it has a FIELD name, + +08:51.249 --> 08:53.249 +and then a TYPE. + +08:53.249 --> 08:54.510 +Instead of a TYPE, + +08:54.510 --> 08:56.590 +it could have some other FORM for eval, + +08:56.590 --> 08:58.989 +which was basically never used as far as I know, + +08:58.989 --> 09:00.190 +or it can be some filler, + +09:00.190 --> 09:02.750 +or you can have some 'align' specification, + +09:02.750 --> 09:05.150 +or you can refer to another struct. + +09:05.150 --> 09:07.390 +It could also be some kind of union, + +09:07.391 --> 09:10.430 +or it can be some kind of repetition of something. + +09:10.430 --> 09:12.430 +And then you have the TYPE specified here, + +09:12.430 --> 09:18.271 +which can be some integers, strings, or a vector, + +09:18.271 --> 09:21.631 +and there are a few other special cases. + +09:21.631 --> 09:25.310 +And then the actual field itself + +09:25.311 --> 09:28.192 +can be either a NAME, or something that's computed, + +09:28.192 --> 09:30.752 +and then everywhere here, you have LEN, + +09:30.752 --> 00:09:32.480 +which specifies the length of vectors, + +00:09:32.480 --> 00:09:34.672 +for example, or length of strings. + +09:34.672 --> 09:37.632 +This is actually either nil to mean one, + +09:37.632 --> 09:39.072 +or it can be an ARG, + +09:39.072 --> 09:40.952 +where ARG is defined to be + +09:40.952 --> 09:42.672 +either an integer or DEREF, + +09:42.673 --> 09:46.673 +where DEREF is basically a specification + +09:46.673 --> 09:48.833 +that can refer, for example, to the 'length' field + +09:48.833 --> 09:51.956 +-- that's what we saw between parentheses: (length) + +09:51.956 --> 09:56.273 +was this way to refer to the 'length' field. + +09:56.273 --> 09:59.793 +Or it can be an expression, which is what we saw + +09:59.794 --> 10:02.834 +in the computation of the length for WeeChat, + +10:02.834 --> 10:04.914 +where you just had a '(eval' + +10:04.914 --> 10:06.334 +and then some computation + +10:06.334 --> 10:10.274 +of the length of the payload. + +10:10.274 --> 10:12.354 +And so if you look here, you see that + +10:12.354 --> 10:14.674 +it is fairly large and complex, + +10:14.674 --> 10:18.514 +and it uses eval everywhere. And actually, + +10:18.515 --> 10:20.675 +it's not just that it has eval in its syntax, + +10:20.675 --> 10:23.395 +but the implementation has to use eval everywhere, + +10:23.395 --> 10:25.314 +because, if you go back + +10:25.314 --> 10:27.475 +to see the kind of code we see, + +10:27.475 --> 10:29.538 +we see here we just define + +10:29.538 --> 10:34.195 +weechat--relay-message-spec as a constant! + +10:34.195 --> 10:37.314 +It's nothing than just data, right? + +10:37.315 --> 10:38.836 +So within this data + +10:38.836 --> 10:41.076 +there are things we need to evaluate, + +10:41.076 --> 10:42.356 +but it's pure data, + +10:42.356 --> 10:44.356 +so it will have to be evaluated + +10:44.356 --> 10:46.596 +by passing it to eval. It can't be compiled, + +10:46.596 --> 10:50.196 +because it's within a quote, right? + +10:50.196 --> 10:52.836 +And so for that reason, kittens really + +10:52.837 --> 10:55.956 +suffer terribly with uses of BinDat. + +10:55.956 --> 10:59.957 +You really have to be very careful with that. + +10:59.957 --> 11:02.037 +More seriously, + +11:02.037 --> 11:05.157 +the 'struct' variable was not documented, + +11:05.157 --> 11:07.797 +and yet it's indispensable + +11:07.797 --> 11:08.996 +for important applications, + +11:08.996 --> 11:11.157 +such as using in WeeChat. + +11:11.158 --> 11:13.078 +So clearly this needs to be fixed. + +11:13.078 --> 11:15.481 +Of course, we can just document 'struct' + +11:15.481 --> 11:18.038 +as some variable that's used there, + +11:18.038 --> 11:19.798 +but of course we don't want to do that, + +11:19.798 --> 11:23.398 +because 'struct' is not obviously + +11:23.398 --> 11:25.398 +a dynamically scoped variable, + +11:25.398 --> 11:29.317 +so it's not very clean. + +11:29.318 --> 11:31.939 +Also other problems I noticed was that the grammar + +11:31.939 --> 11:35.239 +is significantly more complex than necessary. + +11:35.239 --> 11:38.199 +We have nine distinct non-terminals. + +11:38.199 --> 11:39.639 +There is ambiguity. + +11:39.639 --> 11:44.919 +If you try to use a field whose name is 'align', + +11:44.919 --> 11:48.679 +or 'fill', or something like this, + +11:48.680 --> 11:50.920 +then it's going to be misinterpreted, + +11:50.920 --> 11:54.920 +or it can be misinterpreted. + +11:54.920 --> 11:58.760 +The vector length can be either an expression, + +11:58.760 --> 12:02.280 +or an integer, or a reference to a label, + +12:02.280 --> 12:03.720 +but the expression + +12:03.720 --> 12:06.360 +should already be the general case, + +12:06.361 --> 12:08.041 +and this expression can itself be + +12:08.041 --> 12:09.401 +just a constant integer, + +12:09.401 --> 12:13.961 +so this complexity is probably not indispensable, + +12:13.961 --> 12:15.641 +or it could be replaced with something simpler. + +12:15.641 --> 12:17.401 +That's what I felt like. + +12:17.401 --> 12:19.161 +And basically lots of places + +12:19.161 --> 12:21.721 +allow an (eval EXP) form somewhere + +12:21.721 --> 12:25.081 +to open up the door for more flexibility, + +12:25.082 --> 12:26.922 +but not all of them do, + +12:26.922 --> 12:29.482 +and we don't really want + +12:29.482 --> 12:31.001 +to have this eval there, right? + +12:31.001 --> 12:33.802 +It's not very convenient syntactically either. + +12:33.802 --> 12:36.042 +So it makes the uses of eval + +12:36.042 --> 12:38.362 +a bit heavier than they need to be, + +12:38.362 --> 12:41.722 +and so I didn't really like this part. + +12:41.723 --> 12:42.603 +Another part is that + +12:42.603 --> 12:45.183 +when I tried to figure out what was going on, + +12:45.183 --> 12:46.666 +[dog barks and distracts Stefan] + +12:46.666 --> 12:50.043 +I had trouble... [Winnie] as well, as you can hear. + +12:50.043 --> 12:50.923 +She had trouble as well. + +12:50.923 --> 12:53.083 +But one of the troubles was that + +12:53.083 --> 12:55.002 +there was no way to debug the code + +12:55.002 --> 12:57.562 +via Edebug, because it's just data, + +12:57.562 --> 13:00.523 +so Edebug doesn't know that it has to look at it + +13:00.524 --> 13:02.683 +and instrument it. + +13:02.683 --> 13:05.644 +And of course it was not conveniently extensible. + +13:05.644 --> 13:07.164 +That's also one of the things + +13:07.164 --> 13:08.487 +I noticed along the way. + +13:09.084 --> 13:12.844 +Okay, so here's an example of + +13:12.844 --> 13:15.484 +problems not that I didn't just see there, + +13:15.485 --> 13:18.684 +but that were actually present in code. + +13:18.684 --> 13:22.124 +I went to look at code that was using BinDat + +13:22.124 --> 13:24.285 +to see what uses looked like, + +13:24.285 --> 13:28.765 +and I saw that BinDat was not used very heavily, + +13:28.765 --> 13:30.365 +but some of the main uses + +13:30.365 --> 13:33.884 +were just to read and write integers. + +13:33.885 --> 13:37.565 +And here you can see a very typical case. + +13:37.565 --> 13:41.726 +This is also coming from WeeChat. + +13:41.726 --> 13:43.565 +We do a bindat-get-field + +13:43.565 --> 13:48.445 +of the length of some struct we read. + +13:48.445 --> 13:50.685 +Actually, the struct we read is here. + +13:50.685 --> 13:51.646 +It has a single field, + +13:51.647 --> 13:53.006 +because the only thing we want to do + +13:53.006 --> 13:56.287 +is actually to unpack a 32-bit integer, + +13:56.287 --> 13:58.287 +but the only way we can do that + +13:58.287 --> 14:01.647 +is by specifying a struct with one field. + +14:01.647 --> 14:04.847 +And so we have to extract this struct of one field, + +14:04.847 --> 14:07.246 +which constructs an alist + +14:07.246 --> 14:09.647 +containing the actual integer, + +14:09.648 --> 14:11.887 +and then we just use get-field to extract it. + +14:11.887 --> 14:15.007 +So this doesn't seem very elegant + +14:15.007 --> 14:16.528 +to have to construct an alist + +14:16.528 --> 14:20.368 +just to then extract the integer from it. + +14:20.368 --> 14:21.648 +Same thing if you try to pack it: + +14:21.648 --> 14:25.007 +you first have to construct the alist + +14:25.007 --> 14:31.247 +to pass it to bindat-pack unnecessarily. + +14:31.248 --> 14:33.248 +Another problem that I saw in this case + +14:33.248 --> 14:35.729 +(it was in the websocket package) + +14:35.729 --> 14:39.568 +was here, where they actually have a function + +14:39.568 --> 14:41.169 +where they need to write + +14:41.169 --> 14:43.888 +an integer of a size that will vary + +14:43.888 --> 14:45.888 +depending on the circumstances. + +14:45.889 --> 14:49.650 +And so they have to test the value of this integer, + +14:49.650 --> 14:52.210 +and depending on which one it is, + +14:52.210 --> 14:54.449 +they're going to use different types. + +14:54.449 --> 14:56.290 +So here it's a case + +14:56.290 --> 14:59.490 +where we want to have some kind of way to eval -- + +14:59.490 --> 15:02.530 +to compute the length of the integer -- + +15:02.531 --> 15:08.130 +instead of it being predefined or fixed. + +15:08.130 --> 15:10.211 +So this is one of the cases + +15:10.211 --> 15:16.531 +where the lack of eval was a problem. + +15:16.531 --> 15:20.051 +And actually in all of websocket, + +15:20.051 --> 15:22.611 +BinDat is only used to pack and unpack integers, + +15:22.612 --> 15:24.612 +even though there are many more opportunities + +15:24.612 --> 15:26.772 +to use BinDat in there. + +15:26.772 --> 15:29.331 +But it's not very convenient to use BinDat, + +15:29.331 --> 00:15:35.890 +as it stands, for those other cases. + +15:35.891 --> 15:39.732 +So what does the new design look like? + +15:39.733 --> 15:44.132 +Well in the new design, here's the problematic code + +15:44.132 --> 15:46.373 +for WeeChat. + +15:46.373 --> 15:49.012 +So we basically have the same fields as before, + +15:49.012 --> 15:50.853 +you just see that instead of u32, + +15:50.853 --> 15:53.733 +we now have 'uint 32' separately. + +15:53.733 --> 15:55.332 +The idea is that now this 32 + +15:55.332 --> 15:59.093 +can be an expression you can evaluate, + +15:59.094 --> 16:04.054 +and so the u8 is also replaced by 'uint 8', + +16:04.054 --> 16:07.253 +and the id type is basically the same as before, + +16:07.253 --> 16:08.854 +and here another difference we see, + +16:08.854 --> 16:11.654 +and the main difference... + +16:11.654 --> 16:13.494 +Actually, it's the second main difference. + +16:13.494 --> 16:15.174 +The first main difference is that + +16:15.175 --> 16:18.694 +we don't actually quote this whole thing. + +16:18.694 --> 16:23.095 +Instead, we pass it to the bindat-type macro. + +16:23.095 --> 16:25.095 +So this is a macro + +16:25.095 --> 16:27.574 +that's going to actually build the type. + +16:27.574 --> 16:29.254 +This is a big difference + +16:29.254 --> 16:30.535 +in terms of performance also, + +16:30.535 --> 16:32.694 +because by making it a macro, + +16:32.695 --> 16:34.296 +we can pre-compute the code + +16:34.296 --> 16:37.255 +that's going to pack and unpack this thing, + +16:37.255 --> 16:38.936 +instead of having to interpret it + +16:38.936 --> 16:41.096 +every time we pack and unpack. + +16:41.096 --> 16:43.815 +So this macro will generate more efficient code + +16:43.815 --> 16:45.815 +along the way. + +16:45.815 --> 16:48.695 +Also it makes the code that appears in here + +16:48.695 --> 16:50.296 +visible to the compiler + +16:50.297 --> 16:54.617 +because we can give an Edebug spec for it. + +16:54.617 --> 16:57.497 +And so here as an argument to vec, + +16:57.497 --> 16:59.016 +instead of having to specify + +16:59.016 --> 17:00.937 +that this is an evaluated expression, + +17:00.937 --> 17:02.777 +we just write the expression directly, + +17:02.777 --> 17:05.096 +because all the expressions that appear there + +17:05.096 --> 17:07.417 +will just be evaluated, + +17:07.418 --> 17:11.418 +and we don't need to use the 'struct' variable + +17:11.418 --> 17:14.137 +and then extract the length field from it. + +17:14.137 --> 17:16.938 +We can just use length as a variable. + +17:16.938 --> 17:18.698 +So this variable 'length' here + +17:18.698 --> 17:20.778 +will refer to this field here, + +17:20.778 --> 17:23.578 +and then this variable 'id' here + +17:23.578 --> 17:25.897 +will refer to this field here, + +17:25.898 --> 17:27.738 +and so we can just use the field values + +17:27.738 --> 17:30.459 +as local variables, which is very natural + +17:30.459 --> 00:17:31.679 +and very efficient also, + +00:17:31.679 --> 00:17:34.618 +because the code would actually directly do that, + +17:34.618 --> 17:37.899 +and the code that unpacks those data + +17:37.899 --> 17:40.299 +will just extract an integer + +17:40.299 --> 17:42.219 +and bind it to the length variable, + +17:42.219 --> 17:47.579 +and so that makes it immediately available there. + +17:47.580 --> 17:51.340 +Okay, let's see also + +17:51.340 --> 17:54.220 +what the actual documentation looks like. + +17:54.220 --> 17:57.739 +And so if we look at the doc of BinDat, + +17:57.739 --> 18:01.180 +we see the actual specification of the grammar. + +18:01.181 --> 18:03.181 +And so here we see instead of having + +18:03.181 --> 18:06.461 +these nine different non-terminals, + +18:06.461 --> 18:08.061 +we basically have two: + +18:08.061 --> 18:10.781 +we have the non-terminal for TYPE, + +18:10.781 --> 18:15.021 +which can be either a uint, a uintr, or a string, + +18:15.021 --> 18:17.421 +or bits, or fill, or align, or vec, + +18:17.421 --> 18:19.901 +or those various other forms; + +18:19.902 --> 18:22.621 +or it can be a struct, in which case, + +18:22.621 --> 18:23.981 +in the case of struct, + +18:23.981 --> 18:27.502 +then it will be followed by a sequence -- + +18:27.502 --> 18:30.142 +a list of FIELDs, where each of the FIELDs + +18:30.142 --> 18:33.902 +is basically a LABEL followed by another TYPE. + +18:33.902 --> 18:37.342 +And so this makes the whole specification + +18:37.343 --> 18:39.823 +much simpler. We don't have any distinction now + +18:39.823 --> 18:42.862 +between struct being a special case, + +18:42.862 --> 18:46.383 +as opposed to just the normal types. + +18:46.383 --> 18:49.263 +struct is just now one of the possible types + +18:49.263 --> 18:52.543 +that can appear here. + +18:52.543 --> 18:53.263 +The other thing is that + +18:53.263 --> 18:55.742 +the LABEL is always present in the structure, + +18:55.743 --> 18:58.384 +so there's no ambiguity. + +18:58.384 --> 19:00.304 +Also all the above things, + +19:00.304 --> 19:03.103 +like the BITLEN we have here, + +19:03.103 --> 19:04.384 +the LEN we have here, + +19:04.384 --> 19:07.504 +the COUNT for vector we have here, + +19:07.504 --> 19:10.224 +these are all plain Elisp expressions, + +19:10.224 --> 19:13.024 +so they are implicitly evaluated if necessary. + +19:13.025 --> 19:14.705 +If you want them to be constant, + +19:14.705 --> 19:16.705 +and really constant, you can just use quotes, + +19:16.705 --> 19:20.145 +for those [rare cases] where it's necessary. + +19:20.145 --> 19:21.905 +Another thing is that you can extend it + +19:21.905 --> 19:25.505 +with with bindat-defmacro. + +19:25.505 --> 19:30.225 +Okay, let's go back here. + +19:30.226 --> 19:32.706 +So what are the advantages of this approach? + +19:32.706 --> 19:34.625 +As I said, one of the main advantages + +19:34.625 --> 19:39.346 +is that we now have support for Edebug. + +19:39.346 --> 19:41.426 +We don't have 'struct', 'repeat', and 'align' + +19:41.426 --> 19:42.946 +as special cases anymore. + +19:42.946 --> 19:44.625 +These are just normal types. + +19:44.625 --> 19:48.066 +Before, there was uint as type, int as type, + +19:48.067 --> 19:49.267 +and those kinds of things. + +19:49.267 --> 19:51.110 +'struct' and 'repeat' and 'align' + +19:51.110 --> 19:53.267 +were in a different case. + +19:53.267 --> 19:54.387 +So there were + +19:54.387 --> 19:56.787 +some subtle differences between those + +19:56.787 --> 19:59.027 +that completely disappeared. + +19:59.027 --> 20:02.626 +Also in the special cases, there was 'union', + +20:02.626 --> 20:05.027 +and union now has completely disappeared. + +20:05.027 --> 20:07.827 +We don't need it anymore, because instead, + +20:07.828 --> 20:09.588 +we can actually use code anywhere. + +20:09.588 --> 20:11.908 +That's one of the things I didn't mention here, + +20:11.908 --> 20:17.268 +but in this note here, + +20:17.268 --> 20:19.747 +that's one of the important notes. + +20:19.747 --> 20:21.987 +Not only are BITLEN, LEN, COUNT etc. + +20:21.987 --> 20:23.028 +Elisp expressions, + +20:23.028 --> 20:26.788 +but the type itself -- any type itself -- + +20:26.789 --> 20:29.029 +is basically an expression. + +20:29.029 --> 20:32.709 +And so you can, instead of having 'uint BITLEN', + +20:32.709 --> 20:36.628 +you can have '(if blah-blah-blah uint string)', + +20:36.628 --> 20:38.149 +and so you can have a field + +20:38.149 --> 20:40.549 +that can be either string or an int, + +20:40.549 --> 20:44.789 +depending on some condition. + +20:44.790 --> 20:46.869 +And for that reason we don't need a union. + +20:46.869 --> 20:47.910 +Instead of having a union, + +20:47.910 --> 20:50.710 +we can just have a 'cond' or a 'pcase' + +20:50.710 --> 20:53.590 +that will return the type we want to use, + +20:53.590 --> 20:55.109 +depending on the context, + +20:55.109 --> 21:00.950 +which will generally depend on some previous field. + +21:00.951 --> 21:03.750 +Also we don't need to use single-field structs + +21:03.750 --> 21:05.351 +for simple types anymore, + +21:05.351 --> 21:09.271 +because there's no distinction between struct + +21:09.271 --> 21:11.271 +and other types. + +21:11.271 --> 21:17.191 +So we can pass to bindat-pack and bindat-unpack + +21:17.191 --> 21:20.951 +a specification which just says "here's an integer" + +21:20.952 --> 21:24.392 +and we'll just pack and unpack the integer. + +21:24.392 --> 21:26.472 +And of course now all the code is exposed, + +21:26.472 --> 21:29.192 +so not only Edebug works, but also Flymake, + +21:29.192 --> 21:30.392 +and the compiler, etc. -- + +21:30.392 --> 21:33.111 +they can complain about it, + +21:33.111 --> 21:38.871 +and give you warnings and errors as we like them. + +21:38.872 --> 21:44.553 +And of course the kittens are much happier. + +21:44.553 --> 21:48.153 +Okay. This is going a bit over time, + +21:48.153 --> 00:21:51.272 +so let's try to go faster. + +21:51.273 --> 21:53.752 +Here are some of the new features + +21:53.753 --> 21:54.794 +that are introduced. + +21:54.794 --> 21:56.314 +I already mentioned briefly + +21:56.314 --> 22:00.633 +that you can define new types with bindat-defmacro. + +22:00.633 --> 22:04.474 +that's one of the important novelties, + +22:04.474 --> 22:08.794 +and you can extend BinDat with new types this way. + +22:08.794 --> 22:10.714 +The other thing you can do is + +22:10.714 --> 22:16.233 +you can control how values, or packets[, rather,] + +22:16.234 --> 22:20.315 +are unpacked, and how they are represented. + +22:20.315 --> 22:22.555 +In the old BinDat, + +22:22.555 --> 22:24.315 +the packet is necessarily represented, + +22:24.315 --> 22:28.634 +when you unpack it, as an alist, basically, + +22:28.635 --> 22:30.396 +or a struct becomes an alist, + +22:30.396 --> 22:31.676 +and that's all there is. + +22:31.676 --> 22:34.076 +You don't have any choice about it. + +22:34.076 --> 22:35.596 +With the new system, + +22:35.596 --> 22:38.076 +by default, it also returns just an alist, + +22:38.076 --> 22:41.916 +but you can actually control what it's unpacked as, + +22:41.916 --> 22:46.396 +or what it's packed from, using these keywords. + +22:46.396 --> 22:49.596 +With :unpack-val, you can give an expression + +22:49.597 --> 22:53.357 +that will construct the unpacked value + +22:53.357 --> 22:56.957 +from the various fields. + +22:56.957 --> 22:59.197 +And with :pack-val and :pack-var, + +22:59.197 --> 23:02.557 +you can specify how to extract the information + +23:02.557 --> 23:05.116 +from the unpacked value + +23:05.117 --> 00:23:08.077 +to generate the pack value. + +23:08.078 --> 23:12.637 +So here are some examples. + +23:12.637 --> 23:15.358 +Here's an example taken from osc. + +23:15.358 --> 23:17.438 +osc actually doesn't use BinDat currently, + +23:17.438 --> 23:22.478 +but I have played with it + +23:22.479 --> 23:23.758 +to see what it would look like + +23:23.758 --> 23:26.159 +if we were to use BinDat. + +23:26.159 --> 23:28.638 +So here's the definition + +23:28.638 --> 23:30.638 +of the timetag representation, + +23:30.638 --> 23:35.279 +which represents timestamps in osc. + +23:35.279 --> 23:37.998 +So you would use bindat-type + +23:37.998 --> 23:40.559 +and then you have here :pack-var + +23:40.559 --> 23:42.080 +basically gives a name + +23:42.080 --> 23:48.559 +when we try to pack a timestamp. + +23:48.559 --> 23:51.520 +'time' will be the variable whose name contains + +23:51.520 --> 23:54.159 +the actual timestamp we will receive. + +23:54.159 --> 23:57.520 +So we want to represent the unpacked value + +23:57.520 --> 24:00.240 +as a normal Emacs timestamp, + +24:00.240 --> 24:02.480 +and then basically convert from this timestamp + +24:02.480 --> 24:06.401 +to a string, or from a string to this timestamp. + +24:06.401 --> 24:10.080 +When we receive it, it will be called time, + +24:10.080 --> 24:12.240 +so we can refer to it, + +24:12.240 --> 24:15.360 +and so in order to actually encode it, + +24:15.360 --> 24:18.320 +we basically turn this timestamp into an integer -- + +24:18.320 --> 24:20.799 +that's what this :pack-val does. + +24:20.799 --> 24:23.442 +It says when we try to pack it, + +24:23.442 --> 24:26.082 +here's the the value that we should use. + +24:26.082 --> 24:27.760 +We turn it into an integer, + +24:27.760 --> 24:30.320 +and then this integer is going to be encoded + +24:30.320 --> 24:36.162 +as a uint 64-bit. So a 64-bit unsigned integer. + +24:36.163 --> 24:38.960 +When we try to unpack the value, + +24:38.960 --> 24:40.720 +this 'ticks' field + +24:40.720 --> 24:45.679 +will contain an unsigned int of 64 bits. + +24:45.679 --> 24:50.559 +We want to return instead a timestamp -- + +24:50.559 --> 24:53.924 +a time value -- from Emacs. + +24:53.924 --> 24:59.363 +Here we use the representation of time + +24:59.363 --> 25:02.799 +as a pair of number of ticks + +25:02.799 --> 25:06.720 +and the corresponding frequency of those ticks. + +25:06.720 --> 25:09.120 +So that's what we do here with :unpack-val, + +25:09.120 --> 25:12.004 +which is construct the cons corresponding to it. + +25:12.004 --> 25:16.400 +With this definition, bindat-pack/unpack + +25:16.400 --> 00:25:19.039 +are going to convert to and from + +00:25:19.039 --> 00:25:21.760 +proper time values on one side, + +25:21.760 --> 25:26.159 +and binary strings on the other. + +25:26.159 --> 25:27.520 +Note, of course, + +25:27.520 --> 25:30.320 +that I complained that the old BinDat + +25:30.320 --> 25:36.080 +had to use single-field structs for simple types, + +25:36.080 --> 25:37.039 +and here, basically, + +25:37.039 --> 25:39.840 +I'm back using single-field structs as well + +25:39.840 --> 25:41.120 +for this particular case -- + +25:41.120 --> 25:44.640 +actually a reasonably frequent case, to be honest. + +25:44.640 --> 25:49.279 +But at least this is not so problematic, + +25:49.279 --> 25:51.840 +because we actually control what is returned, + +25:51.840 --> 25:54.159 +so even though it's a single-field struct, + +25:54.159 --> 25:56.640 +it's not going to construct an alist + +25:56.640 --> 25:58.320 +or force you to construct an alist. + +25:58.320 --> 26:02.720 +Instead, it really receives and takes a value + +26:02.720 --> 26:07.367 +in the ideal representation that we chose. + +26:07.367 --> 26:10.007 +Here we have a more complex example, + +26:10.007 --> 26:12.488 +where the actual type is recursive, + +26:12.488 --> 26:18.640 +because it's representing those "LEB"... + +26:18.640 --> 26:20.400 +I can't remember what "LEB" stands for, + +26:20.400 --> 26:22.559 +but it's a representation + +26:22.559 --> 26:25.600 +for arbitrary length integers, + +26:25.600 --> 26:27.520 +where basically + +26:27.520 --> 26:33.360 +every byte is either smaller than 128, + +26:33.360 --> 26:36.799 +in which case it's the end of the of the value, + +26:36.799 --> 26:39.760 +or it's a value bigger than 128, + +26:39.760 --> 26:42.159 +in which case there's an extra byte on the end + +26:42.159 --> 26:44.490 +that's going to continue. + +26:44.490 --> 26:46.640 +Here we see the representation + +26:46.640 --> 26:52.240 +is basically a structure that starts with a byte, + +26:52.240 --> 26:53.679 +which contains this value, + +26:53.679 --> 26:56.000 +which can be either the last value or not, + +26:56.000 --> 26:59.770 +and the tail, which will either be empty, + +26:59.770 --> 27:01.279 +or contain something else. + +27:01.279 --> 27:04.000 +The empty [case] is here; + +27:04.000 --> 27:07.039 +if the head value is smaller than 128, + +27:07.039 --> 27:11.840 +then the type of this tail is going to be (unit 0), + +27:11.840 --> 27:16.492 +so basically 'unit' is the empty type, + +27:16.492 --> 27:20.880 +and 0 is the value we will receive when we read it. + +27:20.880 --> 27:25.520 +And if not, then it has as type 'loop', + +27:25.520 --> 27:28.240 +which is the type we're defining, + +27:28.240 --> 27:30.491 +so it's the recursive case, + +27:30.491 --> 27:35.132 +where then the rest of the type is the type itself. + +27:35.132 --> 27:37.120 +And so this lets us pack and unpack. + +27:37.120 --> 27:39.600 +We pass it an arbitrary size integer, + +27:39.600 --> 27:42.240 +and it's going to turn it into + +27:42.240 --> 27:48.492 +this LEB128 binary representation, and vice versa. + +27:48.492 --> 27:52.480 +I have other examples if you're interested, + +27:52.480 --> 00:27:56.093 +but anyway, here's the conclusion. + +27:56.094 --> 27:58.320 +We have a simpler, more flexible, + +27:58.320 --> 28:01.039 +and more powerful BinDat now, + +28:01.039 --> 28:03.454 +which is also significantly faster. + +28:03.454 --> 28:06.799 +And I can't remember the exact speed-up, + +28:06.799 --> 28:08.720 +but it's definitely not a few percents. + +28:08.720 --> 28:12.640 +I vaguely remember about 4x faster in my tests, + +28:12.640 --> 28:16.815 +but it's probably very different in different cases + +28:16.815 --> 28:20.159 +so it might be just 4x, 2x -- who knows? + +28:20.159 --> 28:23.374 +Try it for yourself, but I was pretty pleased, + +28:23.374 --> 00:28:28.335 +because it wasn't the main motivation, so anyway... + +28:28.336 --> 28:31.135 +The negatives are here. + +28:31.135 --> 28:34.480 +In the new system, there's this bindat-defmacro + +28:34.480 --> 28:36.720 +which lets us define, kind of, new types, + +28:36.720 --> 28:40.895 +and bindat-type also lets us define new types, + +28:40.895 --> 28:45.360 +and the distinction between them is a bit subtle; + +28:45.360 --> 28:48.080 +it kind of depends on... + +28:48.080 --> 28:50.880 +well it has an impact on efficiency + +28:50.880 --> 28:53.520 +more than anything, so it's not very satisfactory. + +28:53.520 --> 28:56.737 +There's a bit of redundancy between the two. + +28:56.737 --> 28:59.039 +There is no bit-level control, just as before. + +28:59.039 --> 29:02.097 +We can only manipulate basically bytes. + +29:02.098 --> 29:03.360 +So this is definitely not usable + +29:03.360 --> 29:09.058 +for a Huffman encoding kind of thing. + +29:09.058 --> 29:10.880 +Also, it's not nearly as flexible + +29:10.880 --> 29:12.240 +as some of the alternatives. + +29:12.240 --> 29:13.760 +So you know GNU Poke + +29:13.760 --> 29:20.017 +has been a [vague] inspiration for this work, + +29:20.018 --> 29:22.480 +and GNU Poke gives you a lot more power + +29:22.480 --> 29:25.059 +in how to specify the types, etc. + +29:25.059 --> 29:26.579 +And of course one of the main downsides + +29:26.579 --> 29:28.018 +is that it's still not used very much. + +29:28.018 --> 29:29.283 +[Actually] the new BinDat + +29:29.283 --> 29:31.039 +is not used by any package + +29:31.039 --> 29:33.059 +as far as I know right now, + +29:33.059 --> 29:35.279 +but even the old one is not used very often, + +29:35.279 --> 29:36.799 +so who knows + +29:36.799 --> 29:38.799 +whether it's actually going to + +29:38.799 --> 29:41.520 +work very much better or not? + +29:41.520 --> 29:44.399 +Anyway, this is it for this talk. + +29:44.399 --> 29:46.683 +Thank you very much. Have a nice day. + +29:46.683 --> 29:47.883 +[captions by John Cummings] diff --git a/2021/info/bindat-schedule.md b/2021/info/bindat-schedule.md index 70aca76d..26fd1559 100644 --- a/2021/info/bindat-schedule.md +++ b/2021/info/bindat-schedule.md @@ -1,18 +1,25 @@ <!-- Automatically generated by conf-create-info-pages --> Q&A: live -Status: Finished Duration: 29:48 [[!inline pages="internal(2021/inline-alternate)" raw="yes"]] If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker. -<div class="mainVideo"><div class="video-card vid" data-id="mainVideo"><figure><video controls preload="metadata" id="mainVideo"> -<source src="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm"> -</video></figure> -<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm">Download .webm video (29:48, 28.7MB)</a></li><li><a href="https://toobnix.org/w/qQeuipEkbSJgZbDm6xRg9q">View on Toobnix</a></li></ul></div></div> -</div> +<div class="video-card"><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm" /><track label="English" kind="captions" srclang="en" src="../../captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt" default /><track kind="chapters" label="Chapters" src="../../captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm">Download .webm video (29:48, 28.7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/qQeuipEkbSJgZbDm6xRg9q">View on Toobnix</a></li></ul></div><ol class="chapters"> +<li data-start="1.360" data-stop="126.006">00:01 Introduction</li> +<li data-start="126.007" data-stop="327.537">02:06 What is BinDat?</li> +<li data-start="327.538" data-stop="510.748">05:27 Conversion to lexical scoping</li> +<li data-start="510.749" data-stop="935.890">08:30 The BinDat specification</li> +<li data-start="935.891" data-stop="1067.579">15:35 New design</li> +<li data-start="1067.580" data-stop="1170.225">17:47 Documentation</li> +<li data-start="1170.226" data-stop="1311.272">19:30 Advantages</li> +<li data-start="1311.273" data-stop="1388.077">21:51 New features</li> +<li data-start="1388.078" data-stop="1676.093">23:08 Examples</li> +<li data-start="1676.094" data-stop="1708.335">27:56 Conclusion</li> +<li data-start="1708.336" data-stop="1709.336">28:28 Negatives</li> +</ol></div></div> # Description diff --git a/2021/info/forever-schedule.md b/2021/info/forever-schedule.md index 96ebe201..22f7d41a 100644 --- a/2021/info/forever-schedule.md +++ b/2021/info/forever-schedule.md @@ -17,7 +17,7 @@ If you have questions and the speaker has not indicated public contact informati # Questions and answers -<div class="qanda"><div class="video-card vid" data-id="mainVideo"><figure><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.png" id="qanda"> +<div class="qanda"><div class="video-card vid" data-id="mainVideo"><figure><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.png" id="qanda" data-setup="{}"> <source src="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.webm"><track kind="chapters" label="Chapters" srclang="en" src="/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt" default onload="displayChapters(this)"> </video><ol class="chapters"></ol></figure></div></div> diff --git a/2021/info/form-schedule.md b/2021/info/form-schedule.md index 11d04054..a3269509 100644 --- a/2021/info/form-schedule.md +++ b/2021/info/form-schedule.md @@ -1,17 +1,12 @@ <!-- Automatically generated by conf-create-info-pages --> Q&A: IRC -Status: Finished Duration: 12:44 If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker. -<div class="mainVideo"><div class="video-card vid" data-id="mainVideo"><figure><video controls preload="metadata" id="mainVideo"> -<source src="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm"><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt" default> -</video></figure> -<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm">Download .webm video (12:44, 13.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/mcyaNMBE1QpjvQa2qDayvi">View on Toobnix</a></li></ul></div></div> -</div> +<div class="video-card"><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm" /><track label="English" kind="captions" srclang="en" src="../../captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm">Download .webm video (12:44, 13.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/mcyaNMBE1QpjvQa2qDayvi">View on Toobnix</a></li></ul></div></div></div> # Description diff --git a/2021/schedule-details.md b/2021/schedule-details.md index 08cd5589..352d9da4 100644 --- a/2021/schedule-details.md +++ b/2021/schedule-details.md @@ -1,41 +1,41 @@ -<div>45 talks total: 42 captioned (564 min), 3 waiting for captions (66 min)</div> +<div>45 talks total: 43 captioned (594 min), 2 waiting for captions (36 min)</div> <table width="100%"><tr><th>Title</th><th>Speaker(s)</th><th>Resources</th></tr><tr><td colspan="3"><strong>Saturday morning<strong></td></tr> <tr><td><a href="/2021/talks/day1-open">Opening remarks</a></td><td></td><td><ul></ul></td></tr> -<tr><td><a href="/2021/talks/news">Emacs News Highlights</a></td><td>Sacha Chua</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/frownies">The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</a></td><td>Case Duckworth</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/news">Emacs News Highlights</a></td><td>Sacha Chua</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/frownies">The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</a></td><td>Case Duckworth</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/omegat">Emacs manuals translation and OmegaT</a></td><td>Jean-Christophe Helary</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/unix">GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</a></td><td>Daniel Rose</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/montessori">Emacs and Montessori Philosophy</a></td><td>Grant Shangreaux</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/pattern">Emacs as Design Pattern Learning</a></td><td>Greta Goetz</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/freedom">How Emacs made me appreciate software freedom</a></td><td>Protesilaos Stavrou</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/unix">GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</a></td><td>Daniel Rose</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/montessori">Emacs and Montessori Philosophy</a></td><td>Grant Shangreaux</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/pattern">Emacs as Design Pattern Learning</a></td><td>Greta Goetz</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/freedom">How Emacs made me appreciate software freedom</a></td><td>Protesilaos Stavrou</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/nongnu">NonGNU ELPA Update</a></td><td>Philip Kaludercic</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/borg">Manual Package Management in The Era of Repositories - Why and How</a></td><td>Dhavan (codingquark)</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/nangulator">Introducing N-Angulator</a></td><td>Kevin Haddock</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/gregorian">Typesetting Gregorian Chant with Emacs</a></td><td>Spencer King</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/gregorian">Typesetting Gregorian Chant with Emacs</a></td><td>Spencer King</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td colspan="3"><strong>Saturday afternoon<strong></td></tr> <tr><td><a href="/2021/talks/telega">telega.el and the Emacs community on Telegram</a></td><td>Gabriele Bozzola</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/janitor">A day in the life of a janitor</a></td><td>Stefan Monnier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/erg">Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</a></td><td>Noorah Alhasan, Joe Corneli, Raymond Puzio, Leo Vivier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/cs">One effective CS grad student workflow</a></td><td>Greg Coladonato</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/erg">Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</a></td><td>Noorah Alhasan, Joe Corneli, Raymond Puzio, Leo Vivier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/cs">One effective CS grad student workflow</a></td><td>Greg Coladonato</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/professional">Using Org-Mode For Recording Continuous Professional Development</a></td><td>Philip Beadling</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/tech">Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide</a></td><td>Jan Ypma</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/exec">Org as an executable format</a></td><td>Tom Gillespie</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/org-outside">The use of Org mode syntax outside of GNU/Emacs</a></td><td>Karl Voit</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/teach">Using Org-mode to teach programming</a></td><td>Daniel German</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/babel">Babel for academics</a></td><td>Asilata Bapat</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/research">Managing a research workflow (bibliographies, note-taking, and arXiv)</a></td><td>Ahmed Khaled</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/research">Managing a research workflow (bibliographies, note-taking, and arXiv)</a></td><td>Ahmed Khaled</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/molecular">Reproducible molecular graphics with Org-mode</a></td><td>Blaine Mooers</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/invoice">Finding Your (In)voice: Emacs for Invoicing</a></td><td>Bala Ramadurai</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/project">Budgeting, Project Monitoring and Invoicing with Org Mode</a></td><td>Adolfo Villafiorita</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/project">Budgeting, Project Monitoring and Invoicing with Org Mode</a></td><td>Adolfo Villafiorita</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/dashboard">Productivity Dashboards with Emacs and Kindle</a></td><td>Mehmet Tekman</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/nyxt">Emacs with Nyxt: extend your editor with the power of a Lisp browser</a></td><td>Andrea</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/dev-update">Emacs development updates</a></td><td>John Wiegley</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/dev-update">Emacs development updates</a></td><td>John Wiegley</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/design">On the design of text editors</a></td><td>Nicolas P. Rougier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/day1-close">Closing remarks day 1</a></td><td></td><td><ul></ul></td></tr> <tr><td colspan="3"><strong>Sunday, Nov 28, 2021: Development talks<strong></td></tr> <tr><td colspan="3"><strong>Sunday morning<strong></td></tr> <tr><td><a href="/2021/talks/day2-open">Opening remarks day 2</a></td><td></td><td><ul></ul></td></tr> -<tr><td><a href="/2021/talks/faster">Optimizing Emacs Lisp Code</a></td><td>Dmitry Gutov</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/faster">Optimizing Emacs Lisp Code</a></td><td>Dmitry Gutov</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/structural">Tree-edit: Structural editing for Java, Python, C, and beyond!</a></td><td>Ethan Leba</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/ui">Yak-shaving to a UI framework</a></td><td>Erik Anderson</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/mold">Moldable Emacs, a step towards sustainable software</a></td><td>Andrea</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.webm">Download --main.webm</a></li></ul></td></tr> @@ -43,15 +43,15 @@ <tr><td><a href="/2021/talks/native">Emacs Lisp native compiler, current status and future developments</a></td><td>Andrea Corallo</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td colspan="3"><strong>Sunday afternoon<strong></td></tr> <tr><td><a href="/2021/talks/form">Old McCarthy Had a Form</a></td><td>Ian Eure</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/bindat">Turbo Bindat</a></td><td>Stefan Monnier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/bindat">Turbo Bindat</a></td><td>Stefan Monnier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/test">Test blocks</a></td><td>Eduardo Ochs</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/bidi">Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</a></td><td>Mohsen BANAN</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/eaf">Emacs Application Framework: A 2021 Update</a></td><td>Matthew Zeng</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/bidi">Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</a></td><td>Mohsen BANAN</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/eaf">Emacs Application Framework: A 2021 Update</a></td><td>Matthew Zeng</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/imaginary">Imaginary Programming</a></td><td>Shane Mulligan</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/clede">CLEDE: the Common Lisp Emacs Development Environment</a></td><td>Fermin MF</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/maintainers">How to help Emacs maintainers?</a></td><td>Bastien Guerry</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/maintainers">How to help Emacs maintainers?</a></td><td>Bastien Guerry</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/build">How to build an Emacs</a></td><td>Fermin MF</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.webm">Download --main.webm</a></li></ul></td></tr> -<tr><td><a href="/2021/talks/forever">M-x Forever: Why Emacs will outlast text editor trends</a></td><td>David Wilson (System Crafters)</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.webm">Download --main.webm</a></li></ul></td></tr> +<tr><td><a href="/2021/talks/forever">M-x Forever: Why Emacs will outlast text editor trends</a></td><td>David Wilson (System Crafters)</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.webm">Download --main.webm</a></li></ul></td></tr> <tr><td><a href="/2021/talks/day2-close">Closing remarks day 2</a></td><td></td><td><ul></ul></td></tr></table><div class="cancelled">Cancelled:<ul><li><a href="/2021/talks/dsl">Self-Describing Smart DSL's: The Next Magits</a> - Psionic</li> <li><a href="/2021/talks/devel">Don't write that package! or: How I learned to stop worrying and love emacs-devel</a> - Stefan Kangas</li> <li><a href="/2021/talks/rust">Extending Emacs in Rust with Dynamic Modules</a> - Tuấn-Anh Nguyễn</li> diff --git a/2021/talks/bidi.md b/2021/talks/bidi.md index 75c3b1f0..5669a817 100644 --- a/2021/talks/bidi.md +++ b/2021/talks/bidi.md @@ -131,10 +131,10 @@ Pad: - Q1: is there any additions that you have to add to emacs for using non-English/latin characters or does it work mostly out of the box? - - A: \[Prot\] : I only set the default-input-method to \"greek\". - Then switch to it with C-\\ (toggle-input-method) + - A: [Prot] : I only set the default-input-method to "greek". + Then switch to it with C- (toggle-input-method) - Q2: One stuggle I have with this input method option is, why not use - an IME that\'s installed on the host OS? + an IME that's installed on the host OS? - A:I live inside Emacs, and that the host OS typically provides an unintelligent keyboard, and Farsi and transliterate BANAN provides multi-character input, which is a lot more powerful. @@ -142,13 +142,13 @@ Pad: (Sorry if I missed you mentioning this.) - A:No, everything is in pure Elisp. - Q4: What alternatives have you looked into for solving the problem - related to your markup language idea? What isn\'t achieved by them? + related to your markup language idea? What isn't achieved by them? - A:The way that Emacs has evovled about properties about string - and text. And I suggest we adopt the \"web\" model for Emacs + and text. And I suggest we adopt the "web" model for Emacs application development. If you step back and look at where we - are, there\'s no such thing as no \'emacs native markup language - mode\' similar to HTML for web. Emacs\'s display engine is - capable of doing everything, but we\'re not exposing \.... + are, there's no such thing as no 'emacs native markup language + mode' similar to HTML for web. Emacs's display engine is + capable of doing everything, but we're not exposing .... (sorry, missed this part) - Makes sense to me, thanks! - Q5: bandali: genenrally curious about the state of writing/reading diff --git a/2021/talks/bindat.md b/2021/talks/bindat.md index e39603a5..c55e3e8f 100644 --- a/2021/talks/bindat.md +++ b/2021/talks/bindat.md @@ -26,33 +26,33 @@ show how we saved those. Not recommended for birds. # Discussion - Q1: bindat seems very similar to GNU Poke (except that GNU Poke is a - superset, and then some, with a different syntax). I\'m wondering if + superset, and then some, with a different syntax). I'm wondering if it might be good to add a bindat variant that translates to/from Poke if need be (using libpoke), for sheer insane blazing native-code JITted speed. (And, later, maybe letting bindat gain some of the insanely expressive capabilities GNU Poke has got). Its - use of eval blocked this in times past. but now\... + use of eval blocked this in times past. but now... - A:GNU Poke is indeed the natural evolution, and is much more - powerful. Given the fairly little use of BinDat so far, I\'m + powerful. Given the fairly little use of BinDat so far, I'm not sure there will be enough motivation to give access to GNU Poke from Emacs, tho. One of the main benefits of using GNU Poke would probably be that lots of formats are already available for GNU Poke, so you could directly re-use them. -- Q2: Is your dog\'s name something Lisp or PL related\...? :) - - A:Winnie? I don\'t think so, no (we didn\'t choose the name, in +- Q2: Is your dog's name something Lisp or PL related...? :) + - A:Winnie? I don't think so, no (we didn't choose the name, in any case) - Q3: This looks amazing! Is it merged into mainline Emacs, a patch, an external library? - - A: It\'s in Emacs-28 + - A: It's in Emacs-28 - Q4: Are there benchmarks of this vs. the older bindat? - - A:There is a benchmark for it in the \`elisp-benchmarks\` + - A:There is a benchmark for it in the `elisp-benchmarks` - Q5: Do you know of any CL or Scheme libs similar to bindat.el? - - A: No, but I\'d be interested to hear about it if someone else + - A: No, but I'd be interested to hear about it if someone else does. - Q7: You are a hero of kittens everywhere. Do you have any feline pets as well? :) - - A: Not yet. If you\'re near Montreal and you have a kitten for - me, I\'m interested + - A: Not yet. If you're near Montreal and you have a kitten for + me, I'm interested - I *hope* cl-loop is more efficient than building a bunch of intermediate lists when you chain map/filter/reduce operations. diff --git a/2021/talks/cs.md b/2021/talks/cs.md index 3ff1653f..905c9426 100644 --- a/2021/talks/cs.md +++ b/2021/talks/cs.md @@ -26,7 +26,7 @@ Pad: - Q1: Can org-roam also be used with EPUB files? It would be nice to make notes for books as well. - - A: Interesting question \-- I\'ve never considered doing it that + - A: Interesting question -- I've never considered doing it that way. When there is a textbook I want to take notes on, I find the PDF for the textbook and split it into one PDF file per section or chapter, and then use those PDFs just like any other @@ -36,7 +36,7 @@ Pad: dependent on it how are you going to transition your work flow? - A: Hmm I have not considered this at all. Is there some time in the near future at which pdf-tools will stop working on the - current version of Emacs? I was not aware of that if that\'s the + current version of Emacs? I was not aware of that if that's the case. Thanks for bringing that to my attention! - Q3: Your workflow is very impressive. Would it be possible that you share your emacs configuration files? (via email) diff --git a/2021/talks/dashboard.md b/2021/talks/dashboard.md index 8cf95514..53572fff 100644 --- a/2021/talks/dashboard.md +++ b/2021/talks/dashboard.md @@ -60,7 +60,7 @@ easily managed from Emacs within a single Org-Mode file. capable community on mobilereads, as you mentioned; I was living cheaply at the time, and having KUAL and KO and kterm around improved my QOL considerably.) As for your talk, I enjoyed it very - much. I was wondering if you\'d given any thought to possible + much. I was wondering if you'd given any thought to possible real-world applications for your dashboards. Just spitballing a bit, a few possibilities came to mind, like perhaps disseminating information on a work floor or lab setting where cable runs or @@ -69,7 +69,7 @@ easily managed from Emacs within a single Org-Mode file. detention camp where power might be limited and where mounting TVs behind protective glass or restraining them with cables might be bad for morale. Also, have you thought about putting together - and/or selling \"kits\" so folks with limited time could acquire a + and/or selling "kits" so folks with limited time could acquire a basic setup as a turnkey solution (perhaps with some assembly required)? Thanks. - Hi. Lovely idea to use an ebook reader as dashboard. Are all kindle devices supported or only older ones? diff --git a/2021/talks/design.md b/2021/talks/design.md index da09177b..84a89de9 100644 --- a/2021/talks/design.md +++ b/2021/talks/design.md @@ -41,26 +41,26 @@ alternatives using GNU Emacs. - Q1: Do you have any plans for somewhat scientific testing of colors, layout, etc? - A: There are already some studies on the usefulness of - colorization but they\'re not consistent. I would love to make a - study with some students but it\'s a bit beyond my expertise. + colorization but they're not consistent. I would love to make a + study with some students but it's a bit beyond my expertise. - Q2: I have really enjoyed looking at the development of NANO emacs. The only thing I slightly disagree with are the colours: on my system some of them are extremely low-contrast and faded. Otherwise the design is fantastic! Do you have any comments on the colour scheme? - - A: I think you\'re right and I might need to revise the color + - A: I think you're right and I might need to revise the color scheme, taking inspiration (or copying) some of the colors from modus themes since Prot designed proper colors backed by scientific theory. - Q3: Are your examples hand-selected from design-perspective or does - \"everything\" look good automatically with your setup? - - A: Screenshots I\'ve shown are available on GitHub and you + "everything" look good automatically with your setup? + - A: Screenshots I've shown are available on GitHub and you should obtain the same if you install them. Some parts come from my personal configuration (org-agenda and mu4e mostly) but I can - post the code if you\'re interested. + post the code if you're interested. - Q4: Should we use monocromatic colour schemes over full-coloured ones? - - A: I\'m not sure I can answer this question, I would need to + - A: I'm not sure I can answer this question, I would need to search if there are any recommendation on that matter. - Q5: Are there ways that emacs could be improved to make these kinds of usability experiments easier and more accessible to users? For @@ -69,7 +69,7 @@ alternatives using GNU Emacs. allows you to switch from one configuration to another without messing up your own. - Q6: Would it be possible to integrate nano emacs design to default - emacs design? What would the pushback be for integrating \"better\" + emacs design? What would the pushback be for integrating "better" UI changes? - A: I think Emacs would benefit from better defaults and I would vote for modus themes to be the new default theme. Next would be diff --git a/2021/talks/eaf.md b/2021/talks/eaf.md index cc3e4758..3c8f9bf3 100644 --- a/2021/talks/eaf.md +++ b/2021/talks/eaf.md @@ -21,8 +21,8 @@ Pad: - Q1: is there any additions that you have to add to emacs for using non-English/latin characters or does it work mostly out of the box? - - A: \[Prot\] : I only set the default-input-method to \"greek\". - Then switch to it with C-\\ (toggle-input-method) + - A: [Prot] : I only set the default-input-method to "greek". + Then switch to it with C- (toggle-input-method) - Q1: Any plans for supporting other languages? It'd be great to use EAF to offload processing to Common Lisp, for example. - A: You're able to use Python & JavaScrpt/Vue to extend on top of Elisp, it is so far enough (Python for Qt apps and JS for web apps). Currently I don't see a clear advantage of using Common Lisp as well, but there could definitely be a support in theory. - Q2: is there an eaf-app that's not a bootstrapping nightmare? (having Vue as a dependency, eg) @@ -40,36 +40,36 @@ Pad: IRC nick: matthewzmd -- Q1: Any plans for supporting other languages? It\'d be great to use +- Q1: Any plans for supporting other languages? It'd be great to use EAF to offload processing to Common Lisp, for example. - - A: You\'re able to use Python & JavaScrpt/Vue to extend on top + - A: You're able to use Python & JavaScrpt/Vue to extend on top of Elisp, it is so far enough (Python for Qt apps and JS for web - apps). Currently I don\'t see a clear advantage of using Common + apps). Currently I don't see a clear advantage of using Common Lisp as well, but there could definitely be a support in theory. -- Q2: is there an eaf-app that\'s not a bootstrapping nightmare? +- Q2: is there an eaf-app that's not a bootstrapping nightmare? (having Vue as a dependency, eg) - - A: I don\'t fully understand what you mean by \"bootstrapping - nightmare\", all these dependencies are system dependencies that - you install like any other system dependency, it doesn\'t slow - the Emacs startup nor the system startup. But if you\'re asking + - A: I don't fully understand what you mean by "bootstrapping + nightmare", all these dependencies are system dependencies that + you install like any other system dependency, it doesn't slow + the Emacs startup nor the system startup. But if you're asking for an app suggestion with lightweight dependencies without JS or Vue dependencies, the popular EAF Browser and EAF PDF Viewer are cool app options. - Q3: Are there security implications to having a browser in emacs? - - A \[opalvaults\]: With how Emacs deals with things like - GPG/pass/etc. I feel like it\'s probably as secure as you make + - A [opalvaults]: With how Emacs deals with things like + GPG/pass/etc. I feel like it's probably as secure as you make it? - - A: \[matthewzmd\] the browser application is independent from - emacs itself, you\'re using a browser in emacs, but the browser - is not actually \*in\* emacs. The browser is QtWebEngine, a + - A: [matthewzmd] the browser application is independent from + emacs itself, you're using a browser in emacs, but the browser + is not actually *in* emacs. The browser is QtWebEngine, a modified Chromium without Google stuff, it is as safe as a Chromium can be. - Q4: maybe i misunderstood, but is every eaf app essentially embedded QT? - - A: yes, it\'s built upon qt-webengine - - A: Yes, it uses PyQt5 and it\'s essentially painting the Qt + - A: yes, it's built upon qt-webengine + - A: Yes, it uses PyQt5 and it's essentially painting the Qt frame on top of emacs, simulating a buffer. EPC is used for - Elisp \<-\> Python \<-\> JS communication so that you can extend + Elisp <-> Python <-> JS communication so that you can extend Emacs in various langauges - Q: I guess/hope this is using qtwebengine, not qtwebkit? - A: right, qtwebengine. If you wanna dig more into the @@ -80,7 +80,7 @@ IRC nick: matthewzmd (<https://emacsconf.org/2020/talks/34/)> - Q5: Can the EAF dependencies be made into dynamically loadable modules for Emacs, so there will be no need to rebuilt Emacs? - - A: There is no need to rebuilt Emacs, they\'re simply + - A: There is no need to rebuilt Emacs, they're simply dependencies that you can install using the system package managers (pacman, apt, etc), npm install and pip install diff --git a/2021/talks/faster.md b/2021/talks/faster.md index 220a715d..0434db61 100644 --- a/2021/talks/faster.md +++ b/2021/talks/faster.md @@ -33,18 +33,18 @@ IRC nick: dgutov Pad: - Q1: Why are overlays slow compared to text-properties? I (believe - to) understand that it is (in part only?) due to \"get element n in - vector vs list\". If so, then why don\'t we change that? There could - be a text-property called \"overlays\", so that lookup would also be + to) understand that it is (in part only?) due to "get element n in + vector vs list". If so, then why don't we change that? There could + be a text-property called "overlays", so that lookup would also be like in a vector. What benefits does the datastructure currently used for overlays have that make that undesirable? Would a mixed approach make sense; i.e. allow non-modifiyng lookups to use the - \"cached\" overlays that are stored in the \"overlay\" text-property + "cached" overlays that are stored in the "overlay" text-property and make text-inserting and overlay-moving actions store in the currently used datastructure as well as in the indirect - text-property=\>overlay cache? - - A: \"There is a pending patch to represent the set of a - buffer\'s overlays as an AAtree or somesuch..\" + text-property=>overlay cache? + - A: "There is a pending patch to represent the set of a + buffer's overlays as an AAtree or somesuch.." - Sounds promising :) - For more details, check out these threads: - <https://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00616.html> @@ -55,7 +55,7 @@ Pad: helpful to do on a personal init.el file? - A: Probably not - Though too much mode-line customisation may slow things down. -- Q3: What\'s a good approach for benchmarking destructive +- Q3: What's a good approach for benchmarking destructive operations? If you delete elements from a list in-place, all subsequent runs will be artificially fast. - A: There is an example of a comparison between operations from @@ -65,7 +65,7 @@ Pad: - Q4:Cl-lib constructors, getters, and setters usually expand into multiple levels of let-bindings. AFAIU, every let-binding is an extra memory allocation. Do you recommend avoiding cl-defstruct in - favour of \"pure\" lists/vectors? + favour of "pure" lists/vectors? - A: basically no. if defstruct allows you to organise better, go ahead. - Q5: Is it possible to optimize some emacs packages by making use of @@ -73,14 +73,14 @@ Pad: the same way python is able to import C code))? - A: yes emacs modules allow you to run C or Rust, transitioning between emacs proper and module (passing the data) might slow - things down? Because of copying that\'s necessary to avoid + things down? Because of copying that's necessary to avoid issues with gc. - Q6:You mentioned that overlays are much slower compared to text properties. What about text properties vs. buffer-local variables to store position cache? - - A: I haven\'t measured it but offhand I\'m going to guess that + - A: I haven't measured it but offhand I'm going to guess that buffer-local variables will be faster. - - Also depends on the structure you\'re going to use for the + - Also depends on the structure you're going to use for the cache - is it a single cons, or a list, or a tree, etc. BBB: @@ -114,17 +114,17 @@ Links: <https://github.com/alphapapa/emacs-package-dev-handbook#bench-multi-lexical> - <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/elp.el> - <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/benchmark.el> -- \"Use hash tables kids!\" +- "Use hash tables kids!" - PSA: buffer-local-value is generally much faster than with-current-buffer if all you need to do is get the value of a variable in a buffer -- EIEIO\'s object construction is slow because it goes through - \`make-instance\` which is a generic function and it itself calls - various other generic functions, so there\'s a lot of cl-generic - dispatch overhead; and then there\'s the fact that the (keyword) +- EIEIO's object construction is slow because it goes through + `make-instance` which is a generic function and it itself calls + various other generic functions, so there's a lot of cl-generic + dispatch overhead; and then there's the fact that the (keyword) arguments are laboriously parsed at run-time so it itself is slow as well. -- There is a pending patch to represent the set of a buffer\'s +- There is a pending patch to represent the set of a buffer's overlays as an AAtree or somesuch. - <https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.el> diff --git a/2021/talks/form.md b/2021/talks/form.md index 291cf3cc..9128c8b3 100644 --- a/2021/talks/form.md +++ b/2021/talks/form.md @@ -31,20 +31,20 @@ IRC nick: ieure - Q2: AFAIK, EIEIO is generally slower than, e.g. cl-defstructs. When do you think EIEIO is not suitable for performance reasons? - A: I agree with Dmitry: first make it work, then make it fast. - I don\'t think there\'s a blanket reason not to use EIEIO, but - definitely profile if you\'re using it in a performance-critical + I don't think there's a blanket reason not to use EIEIO, but + definitely profile if you're using it in a performance-critical context. EXWM is one project that uses EIEIO extensively and - seems to perform well, so I don\'t think it\'s off-limits for + seems to perform well, so I don't think it's off-limits for performance-critical code. -- Q3: Do you have any tips about introspection? e.g. IIRC there\'s an +- Q3: Do you have any tips about introspection? e.g. IIRC there's an EIEIO introspection facility, though it may be somewhat primitive. - A: It is somewhat primitive, but seems to work okay (<https://www.gnu.org/software/emacs/manual/html_node/eieio/Introspection.html)>. - I haven\'t found a need for anything fancier (yet). + I haven't found a need for anything fancier (yet). - Q4: Have you used any of the EIEIO-related serialization tools? IIRC there are some limitations with regard to printable/readable values. - - A: I haven\'t had call for this, but + - A: I haven't had call for this, but <https://www.gnu.org/software/emacs/manual/html_mono/eieio.html#eieio_002dpersistent> is the mechanism (for anyone wondering) - Q5: I did not get how generic functions can work with non class @@ -53,12 +53,12 @@ IRC nick: ieure - Q6:So with that Emacs is on pair with Smalltalk development environments now (?) - A: Not very familiar -- Q7: Most of what you presented can be done without \`defclass\`. - AFAICT, the only exception is \*multiple\* inheritance (since - \`cl-defstruct\` also supports single inheritance via \`:include\`). +- Q7: Most of what you presented can be done without `defclass`. + AFAICT, the only exception is *multiple* inheritance (since + `cl-defstruct` also supports single inheritance via `:include`). - A: Yes, you can mix and match structs/objects or any other type. You need classes if you want the EIEIO customization - editing facility or MI. I think also \`initialize-instance\` is + editing facility or MI. I think also `initialize-instance` is class-only, so you need classes if you have to do some kinds of complex (cross-slot) initializtaion. diff --git a/2021/talks/freedom.md b/2021/talks/freedom.md index b1cc2abe..6d843ab8 100644 --- a/2021/talks/freedom.md +++ b/2021/talks/freedom.md @@ -41,14 +41,14 @@ by it and thus reserve the right to modify it ahead of the main event. Questions: - Q1: (Unrelated, feel free not to answer): Is there an Emacs or - GNU/FSF group in Cyprus? I know it\'s a politically motivated - country, with a strong student-base, so I\'m interested whether the + GNU/FSF group in Cyprus? I know it's a politically motivated + country, with a strong student-base, so I'm interested whether the Emacs circles and political circles have any overlap. - Q2: What do you think is the most effecitve way to demonstrate the value of software freedom to non-techincal people? For a person who - can\'t program (or doesn\'t want to learn) the freedom seems less + can't program (or doesn't want to learn) the freedom seems less immediate. -- Q3: your quote \"emacs makes emergent workflow\'s possible\" reminds +- Q3: your quote "emacs makes emergent workflow's possible" reminds me very much of the previous talk (Emacs as Design Pattern Learning). Can you share/reflect how you go about making/designing your personal workflows? diff --git a/2021/talks/frownies.md b/2021/talks/frownies.md index 8a69963e..87320134 100644 --- a/2021/talks/frownies.md +++ b/2021/talks/frownies.md @@ -15,7 +15,7 @@ extensible; in fact, that's probably the biggest reason it's still being used after 40+ years of existence, and even has enough clout to generate an entire conference in its name. In this medium-length presentation, I will add another point to the data set proving Emacs's -abilities, by narrating the latest package I made, \`frowny.el\`, from +abilities, by narrating the latest package I made, `frowny.el`, from its conception to its current, nearly-completed state. I wrote frowny.el to scratch someone else's itch as a joke on IRC, but @@ -44,14 +44,14 @@ teeth into. - A: Please check <https://github.com/duckwork/frowny.el> - What was the funniest time a frown emerged from unintended code? Or any similar occurrence. - - A: I frown a lot when I\'m problem solving ;) + - A: I frown a lot when I'm problem solving ;) - What packages you used for writing? - A: I just use org-mode for its markup. If you mean the - presentation, I think\... org-present? + presentation, I think... org-present? - You wrote the package quite fast. Would you say you knew what you were going to program before you did it? Or was it iterative process? - - A: pretty iterative, but very fast b/c it\'s a small project + - A: pretty iterative, but very fast b/c it's a small project space! - from chat (Cairn): do you have a personal site? - A: <https://www.acdw.net> diff --git a/2021/talks/imaginary.md b/2021/talks/imaginary.md index 0ae7d9d7..01f1e7a7 100644 --- a/2021/talks/imaginary.md +++ b/2021/talks/imaginary.md @@ -132,7 +132,7 @@ BBB: - libertyprime: Yeah, so the best way to interact with these types of chatbots is to imagine the situation you are in before hand. the initial phrases can be anything you can think of really. Why are you in the bath tub?, for example. But I tend to open with something like, may I interrupt? What were you just working on? so by choosing the prompt very carefully, you can tease out the information you require. - libertyprime: <https://semiosis.github.io/nlsh/> and this, which is a natural language shell - libertyprime: I also have a way to filter results semantically, with my semantic search prompt <http://github.com/semiosis/prompts/blob/master/prompts/textual-semantic-search-filter-2.prompt> -- libertyprime: YOu can run all these prompts also from bash like so: pl "[\"It's cool. I used to dance zouk.\",\"I don't know.\",\"I'm not sure.\",\"I can't stop dancing to it.\",\"I think it's ok.\",\"It's cool but I prefer rock and roll.\",\"I don't know. It sounds good.\",\"Nice but a bit too fast,\"Oh, I know zouk, you can teach it to me.\",\"Zouk is nice.\"]" | "penf" "-u" "pf-textual-semantic-search-filter/2" "positive response". That will pipe json results into Pen.el, and have it filtered. all prompting functions are also available as shell commands. +- libertyprime: YOu can run all these prompts also from bash like so: pl "["It's cool. I used to dance zouk.","I don't know.","I'm not sure.","I can't stop dancing to it.","I think it's ok.","It's cool but I prefer rock and roll.","I don't know. It sounds good.","Nice but a bit too fast,"Oh, I know zouk, you can teach it to me.","Zouk is nice."]" | "penf" "-u" "pf-textual-semantic-search-filter/2" "positive response". That will pipe json results into Pen.el, and have it filtered. all prompting functions are also available as shell commands. - well I think this is the coolest thing I've seen in a long time. how do we follow up with you and get involved? run it etc? - libertyprime: hehe thanks aindilis: i'm on #emacs as libertyprime. Feel free to hit me up any time. Otherwise, the setup for pen.el is fairly straight forward. If you have any issues demoing, I'd be very interested, so I can make Pen.el more reliable. I have a discord server. I'll copy the link. One sec - Do you think you could run an IRC channel too? diff --git a/2021/talks/janitor.md b/2021/talks/janitor.md index aa63e903..ab903616 100644 --- a/2021/talks/janitor.md +++ b/2021/talks/janitor.md @@ -26,48 +26,48 @@ Pad: - Q1: How did you narrow to two specific areas in a single buffer when compering the two functions. I can be handy - A:In this case I just split the window into 2. In other cases I - use \`M-x smerge-make-conflict\`. Oh wait, did you really mean - \"narrow\"? I don\'t use narrowing, I only use + use `M-x smerge-make-conflict`. Oh wait, did you really mean + "narrow"? I don't use narrowing, I only use outline-minor-mode (with reveal-mode to un-hide as I move) - I will look into both work flows they look very handy. Thanks. -- Q2: Could you further elaborate on quoting functions with \#\'fun - (aka (function fun)) instead of \'fun (aka (quote fun))? - - A:Not sure what further elaboration you want (e.g. \"why?\" or - \"when?\") +- Q2: Could you further elaborate on quoting functions with #'fun + (aka (function fun)) instead of 'fun (aka (quote fun))? + - A:Not sure what further elaboration you want (e.g. "why?" or + "when?") - I would like why? Is it just style since Emacs understand both, or not? - The why is to be more explicit (i.e. a form of documentation, so as a reader I can see that this refers to the function rather than being just a use of a symbol for other purposes)). The compiler knows about it and will hence give you a warning if you - refer this way to a function it\'s not aware of. There are also + refer this way to a function it's not aware of. There are also corner cases where the two behave differently, mostly when - referring to a function defined via \`cl-flet\` or \`cl-labels\` - (or \`named-let\`, \...) + referring to a function defined via `cl-flet` or `cl-labels` + (or `named-let`, ...) - Thanks! - Q3: Stefan, you mentioned a lot of conventions, I really like to read more about them: Where can I find a list of these conventions - (like \#\'function for functions )? Is there a page or info about + (like #'function for functions )? Is there a page or info about ELisp conventions used nowadays? - A:Good question. We have several of them documented in the - ELisp reference manual (searching for \"convention\" should get + ELisp reference manual (searching for "convention" should get you there), but that only covers those conventions with which Emacs maintainers agree. Others are much less clearly formalized. I seem to remember someone collecting such - information and making a webpage out of it, but I can\'t + information and making a webpage out of it, but I can't remember where nor who it was. - Probably, <https://github.com/alphapapa/emacs-package-dev-handbook> - - Thanks! I\'ll take a look at the reference manual and search for + - Thanks! I'll take a look at the reference manual and search for this information. 👍 - Q4: Stefan, that was really amazing to watch. After the changes you made, how confident are you that the package still works as intended? It seems as though there might be some room for errors - that the byte compiler wouldn\'t necessarily catch. - - A: I think for those three packages I\'m quite confident that + that the byte compiler wouldn't necessarily catch. + - A: I think for those three packages I'm quite confident that they should work as well as before. Not because the compiler did not complain but because the changes were sufficiently - simple. Sadly in ELisp, I can\'t rely on the compiler to catch + simple. Sadly in ELisp, I can't rely on the compiler to catch errors. I can only use it ask it to point me to suspicious code, and I know that it will miss some. diff --git a/2021/talks/model.md b/2021/talks/model.md index a73d69b8..ad33ff8f 100644 --- a/2021/talks/model.md +++ b/2021/talks/model.md @@ -59,7 +59,7 @@ productivity, computer literacy and the ideas of free software. is currently not available (see links below). - A: The URL written is correct, but unfortunately the website is down due to some misconfiguration and will be back soon. You can - contact me at laszlo.lk\@protonmail.com until it is resolved + contact me at laszlo.lk@protonmail.com until it is resolved - Q2: It is important to note that for EAF to extend to the web apps you mentioned (Asana, Jira) in a deeper way than just displaying the web app using EAF Browser, the APIs of these web apps need to be diff --git a/2021/talks/mold.md b/2021/talks/mold.md index d01e3a3f..7c5eb707 100644 --- a/2021/talks/mold.md +++ b/2021/talks/mold.md @@ -45,7 +45,7 @@ Pad: provide specific enough info vs writing a new mold for every new query/question? - A: You can write molds that are private for your special - problem. I created molds for my work that I don\'t share: like + problem. I created molds for my work that I don't share: like find the stories I am working on and how long time I spent on tasks lately. Also, moldable-emacs is to make these tools easy to write, so you should free to throw away tools when you need @@ -63,7 +63,7 @@ Pad: moldable-emacs gives me the infrastructure to answer my question about security, and I now started asking myself about architecture coherence, so I have scaled up tree-sitter over - projects to check that modules don\'t use packages from other + projects to check that modules don't use packages from other modules. By that I mean that as long as your code semantic analyzers output data, you can mold that (context) data to tell your story (answer the question you have). Does this answer your @@ -73,21 +73,21 @@ Pad: in an understaffed security team. So your usecase example got my usecase spot on. - Cool! For now you can define insecure patterns using tree-sitter - expressions (for example, I find a variable called \"password\" + expressions (for example, I find a variable called "password" in the code set to a string. For the package.json I linked to OWASP API and looped through the packages using tree-sitter - tokens. I didn\'t get there, but I wanted to see an Org Mode + tokens. I didn't get there, but I wanted to see an Org Mode buffer with the list of the most vulnerable deps highlighted by color + how to solve them: so I could pass them to developers to - resolve them (I am a dev, but sometimes others don\'t know about + resolve them (I am a dev, but sometimes others don't know about security risks). - Often molds are to tell stories to others. - This is probably the most important thing for my personal - usecase. Thank you very much. Now it\'s my turn to learn it and + usecase. Thank you very much. Now it's my turn to learn it and use it well. - Please open issues or email me, and I will try to help if you like how it works :) - - I\'ll do so. + - I'll do so. IRC: diff --git a/2021/talks/molecular.md b/2021/talks/molecular.md index 9e5490c9..46905bcb 100644 --- a/2021/talks/molecular.md +++ b/2021/talks/molecular.md @@ -58,7 +58,7 @@ Pad: lower the barrier to entry. I made library for crystallographic computing with CCTBX for use in Jupyter. I should make it available for org-mode. -- Q2: We\'ve seen a few talks regarding managing academic papers and +- Q2: We've seen a few talks regarding managing academic papers and citations in emacs/org, what does your workflow look like? - A: I switched to Emacs as my primary editor 3 months ago. I have yet to write a paper in Org. I am very comfortable with LaTeX @@ -70,7 +70,7 @@ Pad: file executes in? - A: Good question. The PyMOL code is good for years so the images should be reproducible regardless of the version of org. - PyMOL\'s domain specific language is very stable. The Python + PyMOL's domain specific language is very stable. The Python code largely just wraps around the DSL code. - Q4: Have you used Org Mode and pyMOL for publications? Could you share a link to any of them? diff --git a/2021/talks/montessori.md b/2021/talks/montessori.md index e20888fe..6e32b8a9 100644 --- a/2021/talks/montessori.md +++ b/2021/talks/montessori.md @@ -19,36 +19,36 @@ drives present in everybody that allow us to explore and make sense of our world # Discussion -- Q1: Would you say that the Montessori philosophy follows a \"verb\" +- Q1: Would you say that the Montessori philosophy follows a "verb" based methodology, where an abstract action is performed on an item, without locking the action to what the item can support, like an Object-oriented language would do? - - e.g. \`throw(rock)\` instead of \`rock.throw()\`, i.e. a + - e.g. `throw(rock)` instead of `rock.throw()`, i.e. a function in a global namespace, instead of a function belonging to an object? - - A: i\'d like to think about this some more, but honestly i think - its a bit of both? there\'s certainly some things I can think of - that are more like \`rock.throw()\`\... Here are the things you + - A: i'd like to think about this some more, but honestly i think + its a bit of both? there's certainly some things I can think of + that are more like `rock.throw()`... Here are the things you can do with these materials, and that is it. On the other hand, - I\'ve certainly seen inventive uses of educational materials - that follow more of a \`throw(pencil)\` type of thing. - - The philosophy is highly observation based, so I\'m thinking - about the difference of something like \`Child::new.learn()\` vs - \`learn(some-child)\`. In this case I do feel like the \"verb\" + I've certainly seen inventive uses of educational materials + that follow more of a `throw(pencil)` type of thing. + - The philosophy is highly observation based, so I'm thinking + about the difference of something like `Child::new.learn()` vs + `learn(some-child)`. In this case I do feel like the "verb" based methodology is more appropriate. We need to stop and - observe a child, to notice what is driving them, what they\'re + observe a child, to notice what is driving them, what they're responding to, and where they are in their abilities. Depending on our observations, we may offer different kinds of input. Its - certainly much less like \"oh i have another Child object and I - need to have them do x, y, z\" in order to get to point B. - - I hope this somewhat answers the question. I\'ll keep pondering + certainly much less like "oh i have another Child object and I + need to have them do x, y, z" in order to get to point B. + - I hope this somewhat answers the question. I'll keep pondering :) - Thank you, I guess some children favour one method over - another, but it\'s not as black and white as I initially + another, but it's not as black and white as I initially thought. Thanks! - Q2: How old do you think childen need to be to start exploring with Emacs? - - A: Children 0-6 are in a phase called the \"absorbent mind\". It + - A: Children 0-6 are in a phase called the "absorbent mind". It is this miraculous superpower that children have to absorb everything around them. The ability to learn language is probably the most obvious example. So, if children can interact @@ -57,23 +57,23 @@ drives present in everybody that allow us to explore and make sense of our world not tried teaching young children Emacs, but I believe with the right kinds of interfaces, it could be possible. - Q3: How to let my kids exploring Emacs?(No need to answer this. - It\'s simillar to Q2) + It's simillar to Q2) - A: Great question! Much of the early childhood Montessori work is highly tactile. Abstract concepts are embodied in physical - objects. One example is the \"binomial cube\" which is a set of - blocks that demonstrates (a + b)\^3. Children know nothing about + objects. One example is the "binomial cube" which is a set of + blocks that demonstrates (a + b)^3. Children know nothing about the math behind it, but by interacting with it as a tactile puzzle, something about the math concept behind it, the abstraction, is available to the child and their absorbent mind. - - That is to say\... perhaps there are ways to bring Emacs into - the physical world for the very young. I\'ve been fantasizing - about some kind of \"physical lisp\" where young children can - interact with a sort of physical programming language. I don\'t + - That is to say... perhaps there are ways to bring Emacs into + the physical world for the very young. I've been fantasizing + about some kind of "physical lisp" where young children can + interact with a sort of physical programming language. I don't have a lot of concrete ideas on how to get young children exploring Emacs, but I do believe it is possible. - For older, literate children, I believe simple things that give instant feedback are a great way to encourage interaction. Being - able to do something like (set-cursor-color \"orange\") and see + able to do something like (set-cursor-color "orange") and see it work at your finger tips is amazing. I believe that a well prepared set up where M-x is easy to access and you get some kind of completion to show you what you can do would go far. @@ -97,7 +97,7 @@ drives present in everybody that allow us to explore and make sense of our world time to get everyone down for lunch before we had major melt downs. This would not be possible in a normal grown-up environment. - - I\'m not sure i said this in the talk, but the environment is an + - I'm not sure i said this in the talk, but the environment is an active process on all of us, not just children. the 0-6 year olds (and beyond) are absorbing so much from the environment that we simply filter out. i think this is important to consider @@ -106,22 +106,22 @@ drives present in everybody that allow us to explore and make sense of our world - To re-emphasize: the elements of education are The Learner, The Guide(s), and The Environment. Montessori focuses on the Prepared Environment, in order that it can be the most effective - for the child\'s ability to become an independent, self-realized + for the child's ability to become an independent, self-realized person. - Q5:Do you have a good reference for the Montessori principles (actually any nice book ref)? - - A: I\'d like to find a more modern resource, I\'m sure they are + - A: I'd like to find a more modern resource, I'm sure they are out there. Much of my experience was direct hands-on classroom - time. I\'ve read much of \"The Absorbent Mind\" which really + time. I've read much of "The Absorbent Mind" which really lays out a lot of the observations Maria Montessori made of the - young child, 0-6 years old. The other book I\'ve studied is - \"The Secret of Childhood\". I would like to stress though, a + young child, 0-6 years old. The other book I've studied is + "The Secret of Childhood". I would like to stress though, a lot of the knowledge in Montessori is very very similar to traditional knowledge. When I was learning more about Lakota culture and parenting, I was finding that Montessori was expressing much of the same thing. Any resource (book, human, whatever) that respects children as whole human beings is worth - paying attention to. Another author I\'ve enjoyed is Aletha + paying attention to. Another author I've enjoyed is Aletha Solter, who writes about parenting. - Q6:How do you think Emacs could improve re: Montessori Principles (if at all)? @@ -139,27 +139,27 @@ drives present in everybody that allow us to explore and make sense of our world feature helps me out. Interactive tutorials teaching one how to learn how to learn Emacs would be tricky, but I think some interesting work could happen there! - - Another principle is \"control of error\", meaning, when you + - Another principle is "control of error", meaning, when you fail at something or make a mistake, it should be obvious, and hopefully the correction of the error should be obvious as well. This is hard to do in a huge software environment like Emacs, - but I think there could be some work done in this regard. I\'m - reminded of Racket\'s beginning student languages, which make + but I think there could be some work done in this regard. I'm + reminded of Racket's beginning student languages, which make error messages more human focused and less computery is a good example. - I think the community could also improve as Guides. I have certainly had many pleasant interactions with Emacs users, but - sometimes you run into things like \"RTFM\" or \"read the - source\". While I don\'t disagree, it can come off as elitist + sometimes you run into things like "RTFM" or "read the + source". While I don't disagree, it can come off as elitist sometimes. Many new users are afraid to read source, or have - found a manual but still don\'t understand. We certainly want to - encourage independence, so offering techniques like \"have you - tried M-x describe-function?\" is better than just answering + found a manual but still don't understand. We certainly want to + encourage independence, so offering techniques like "have you + tried M-x describe-function?" is better than just answering outright. Sometimes we need to take a moment and understand the - Learner we\'re working with. Maybe they aren\'t ready for \"read - the source\". I could keep writing, but I think I need to wrap + Learner we're working with. Maybe they aren't ready for "read + the source". I could keep writing, but I think I need to wrap up. Anyone should feel free to email me to talk more! perhaps - i\'ll try doing some writing about it. + i'll try doing some writing about it. - Q8: What was the presentation mode you used? - A: org-tree-slide - <https://github.com/takaxp/org-tree-slide> - i love using this package because i can practice and edit my @@ -180,8 +180,8 @@ Links and other notes: - <https://github.com/takaxp/org-tree-slide> - <grant@churls.world> -- \@kheya\@mastodon.social -- <http://blog.shoshin.digital/> (there\'s not really anything there +- @kheya@mastodon.social +- <http://blog.shoshin.digital/> (there's not really anything there xD) # Outline diff --git a/2021/talks/nangulator.md b/2021/talks/nangulator.md index c6dc42b5..bbf7bfed 100644 --- a/2021/talks/nangulator.md +++ b/2021/talks/nangulator.md @@ -35,8 +35,8 @@ IRC nick: N-Angulator - A: yes, I just started checking it out. I was not aware of any of those when I wrote it. I just had a need for a much more comprehensive filing/retrieval system to support my various - activities (law, programming, time management, etc\...). It - worked amazingly well at the time but \"life happened\" and I + activities (law, programming, time management, etc...). It + worked amazingly well at the time but "life happened" and I was never really able to keep it up with the times like porting it from the orphaned XEmacs into FSF and promote it at all. - <https://github.com/vigilancetech-com/N-Angulator> diff --git a/2021/talks/native.md b/2021/talks/native.md index b35b6e7c..2916c9f5 100644 --- a/2021/talks/native.md +++ b/2021/talks/native.md @@ -34,11 +34,11 @@ Format: 40 minutes Pad: -- Q1: Why do you say that Elisp is \*nearly\* a general purpose - programming lang? What\'s missing? (and btw, huge thanks for your +- Q1: Why do you say that Elisp is *nearly* a general purpose + programming lang? What's missing? (and btw, huge thanks for your work!) - A: -- Q2: Is this the \"rudiments\" that the garbage collector talk was +- Q2: Is this the "rudiments" that the garbage collector talk was discussing yesterday? Feel free to ignore this n00b question. - A: - Q3:Is the idea to enventually develop Emacs itself in ELisp (c.f. @@ -60,7 +60,7 @@ Pad: written in C? Could/should some of the existing C code be converted without significant performance loss? - A: -- Q7: What\'s the risk of (setq native-comp-speed 3)? +- Q7: What's the risk of (setq native-comp-speed 3)? - A: Not sigificant risks. Some side effects might include: needing to recompile a whole file or compilation unit when redefining a function, otherwise the old function definition @@ -69,7 +69,7 @@ Pad: runtime introspectability, changeability/redefinability, etc? - A: - Q9: Is there a benefit in setting native-comp-compiler-options to - \"-mtune=native -march=\<cpu\>\"? + "-mtune=native -march=<cpu>"? - A: Not at the moment. Maybe in the future if, e.g. libgccjit is enhanced further. - Q10: You mentioned native-comp coming in emacs 28, will this be the @@ -79,7 +79,7 @@ Pad: - Q11: Could we avoid libgccjit.so? Or consider using another jit lib (e.g. dynasm used by luajit) et al to gain better optimization - A: libgccjit is more for AoT compilation, more in-depth - optimization, which JITters don\'t typically do, so they aren\'t + optimization, which JITters don't typically do, so they aren't really equivalent. - Q12: How much of emacs C code base could be translated to emacs-lisp? What is the minimum C code base necessary? (seems @@ -104,13 +104,13 @@ Pad: interesting, though. There may be some possibilities, e.g. with regard to some similarities between Rust and some CL implementations. -- Q16: Why not implement Emacs Lisp in Guile and use Guile\'s +- Q16: Why not implement Emacs Lisp in Guile and use Guile's compiler? - A: (not Andrea answering) This has already been tried and done, lookup Guilemacs, e.g. on EmacsWiki. - A: I think they meant to implement Elisp in Guile, and not to replace Elisp with Scheme - - Yes, that\'s already been done. Guile can already run + - Yes, that's already been done. Guile can already run some subset of Elisp. Look it up. :) BBB: diff --git a/2021/talks/news.md b/2021/talks/news.md index c01353c1..79cc9bb0 100644 --- a/2021/talks/news.md +++ b/2021/talks/news.md @@ -23,7 +23,7 @@ You can find the links and images at - Yeah, switch to "smaller" turned out to be quite nice - but noticed projectile greps faster than consult/counsel in a lot of cases - Oh wow, the color picker!!! - - a huge thank you for such an understandable yet detailed summary of what\'s happening in the Emacs world! + - a huge thank you for such an understandable yet detailed summary of what's happening in the Emacs world! - From [YouTube](www.youtube.com/watch?v=270ljvW6UrA&feature=em-comments): Excellent summary!! Thanks for the timestamps as well. diff --git a/2021/talks/omegat.md b/2021/talks/omegat.md index be00d1ff..f1bb4a3b 100644 --- a/2021/talks/omegat.md +++ b/2021/talks/omegat.md @@ -30,7 +30,7 @@ The sources are regularly updated with a po4a based shell script. IRC nick: brandelune - Q: Does this project encompass Emacs packages? Is there anything we can do, as package authors, to make translation easier? -- Q: Could this package be used to generate translated and well-formatted MOBI or EPUB ebooks? Or better yet, an interactive multi-language Emacs Manual \"Bible\" App for Android? +- Q: Could this package be used to generate translated and well-formatted MOBI or EPUB ebooks? Or better yet, an interactive multi-language Emacs Manual "Bible" App for Android? - Q: I love OmegaT and use it always. But I would have liked to hear about the experience of working both with Emacs and OmegaT. Can you tell us something about it? - translation is nice but typing anything non latin or cyrillic is hard with keyboard diff --git a/2021/talks/org-outside.md b/2021/talks/org-outside.md index 95884e06..f6f26e19 100644 --- a/2021/talks/org-outside.md +++ b/2021/talks/org-outside.md @@ -119,8 +119,8 @@ From [YouTube](www.youtube.com/watch?v=JLuTYkhFDQY&feature=em-comments): Links and other notes: -- The article from 2017 that started the whole discussion: \"Org Mode - Is One of the Most Reasonable Markup Languages to Use for Text\" +- The article from 2017 that started the whole discussion: "Org Mode + Is One of the Most Reasonable Markup Languages to Use for Text" <https://karl-voit.at/2017/09/23/orgmode-as-markup-only/> - Orgdown homepage: <https://gitlab.com/publicvoit/orgdown> - Orgdown motivation article: diff --git a/2021/talks/pattern.md b/2021/talks/pattern.md index ec037af2..e29acbfb 100644 --- a/2021/talks/pattern.md +++ b/2021/talks/pattern.md @@ -86,70 +86,70 @@ Pad: This is a good thing, but such extensibility and possiblility can sometimes inhibit creativity (for me at least). How could we incorporate constraints in to how we use Emacs, in order to deal - with the possibilities that might make it\'s use more complex? A + with the possibilities that might make it's use more complex? A great answer, thank you! - A: I love this question. What about thinking about Emacs as - one\'s own path of desire? What do we want to do most with it? + one's own path of desire? What do we want to do most with it? But also, because Emacs is the ultimate blank canvas, in this - context I would recommend reading Cameron\'s \"Blasting through - blocks\" chapter in The Artist\'s Way to get through any related - anxiety and find one\'s \'creative purpose\' with Emacs. And + context I would recommend reading Cameron's "Blasting through + blocks" chapter in The Artist's Way to get through any related + anxiety and find one's 'creative purpose' with Emacs. And building on an answer from above, taking things one project/activity/outcome at a time. Trusting that over time skills and proficiency grow. - - I like the idea about \"Emacs as one\'s own path of - desire\". It\'s all in my init.el. + - I like the idea about "Emacs as one's own path of + desire". It's all in my init.el. - Emacs is seriously the best in this respect! :) And it is so great to be part of this conference to be among like minds!:) - Q5:In your opinion, what approaches might be tried to introduce - individuals to these aspects of emacs\'s user experience? In my + individuals to these aspects of emacs's user experience? In my experience, many of my co-workers are often impressed with what I am able to do with emacs, but they remain reticent to attempt it because I find it difficult to produce a suitably encapsulating - \"elevator pitch\" for it. + "elevator pitch" for it. - A: Not everyone wants to think about the tools that they use. Haha, that is why I am trying to get one convert at a time, and let them convert others in their midst :) - Q6: Are there ways to reach out to you after the conference to dig deeper here? - A: gretzuni.com -- Q7:On the mention of emacs being \'frontierless\': Doesn\'t this - result in a kind of \'characterless\' or \'non-definied\' space? For +- Q7:On the mention of emacs being 'frontierless': Doesn't this + result in a kind of 'characterless' or 'non-definied' space? For example, if I learn a musical instrument, I am bound by various frontiers/horizons (12 tone system, the tamber of the particular instrument, etc). Surely there are similar limits on the - extensibility of emacs and the possibilities it offers for \'human - expansion\'. If so, which limits/boundaries of emacs do you see as + extensibility of emacs and the possibilities it offers for 'human + expansion'. If so, which limits/boundaries of emacs do you see as most meaningful/impactful on growth and transformation? - - A: That is a really interesting question. Aren\'t the limits + - A: That is a really interesting question. Aren't the limits here our knowledge? I am really stuck on the idea of Lisp and its dialects as being particularly philosophical. Any time I look at what people do with Lisp it seems to be profoundly related to design on a deeper level. I will leave it here for now - but thank you for the question, I will be sure to mull it - over and possibly blog about it at some point\... + over and possibly blog about it at some point... - Hi! Thank you for the answer, that was exactly what I was thinking about (elisp being something particular/defining to the - emacs experienc/environment). I don\'t know lisp/programming + emacs experienc/environment). I don't know lisp/programming myself, so I was just interested in your perpsective! Really loved the talk a lot! But the way, the question came from a hermeneutic perspective, where boundaries/horizons are essential for defining/demarcating the self (of course, within a boundary - there can be endless play, but the limits set the \'rules\' for + there can be endless play, but the limits set the 'rules' for play, and therefore create meaning).Thanks again! - Wow - a fellow hermeneuticist?! - Haha, yes. In my past life I studied it ;) also studied a lot of Stiegler too, so was interested to find him in the talk! - That is quite uncanny! The combination of the three (plus Emacs) have given me a whole new perspective on life - and I wonder why - Stiegler didn\'t pursue Free Software more, though he does nod + Stiegler didn't pursue Free Software more, though he does nod to it here and there. Do you have any work to share, would you like to keep in touch? - sure! would be great! :) My main area was Ricoeur, so I have written some things on Ricoeur and technology (there was a recent volume on his work, and I wrote something on - postphenomenology and ricoeur) I\'ve since left academia though, + postphenomenology and ricoeur) I've since left academia though, because it was quite difficult to find full-time work (especially since hermeneutics is so underappreciated/underreppresented! so, I always get excited to @@ -160,26 +160,26 @@ Pad: knowledge age so we need tools to help with this. Ricoeur has a great essay on ideology and science critique, which is so limber (as opposed to so much calcified academic thinking) and I am so - interested in exploring approaches to academe that \'continue - the ongoing work of the hermeneuticist\' (I am paraphrasing him + interested in exploring approaches to academe that 'continue + the ongoing work of the hermeneuticist' (I am paraphrasing him here) that make use of technology, possibly through something like Ted Nelson had in mind, where we literally trace the traces - among ideas\... wow, that\'s a mouthful of a comment. Ha! I am + among ideas... wow, that's a mouthful of a comment. Ha! I am overjoyed at the opportunity for this conversation, thank you so much! :) - really interesting that you are referencing Ted Nelson in this context. I think org-roam, in many ways, resembles what he had in mind with Xandadu; well, with the limitation that org-roam only serves Personal Information Management, not - our civilisations\' as he intended with Xanadu. - - Yes! the feeling is mutual :) I really love Ricoeur\'s general - style and approach to questions. Unfortunately he didn\'t write + our civilisations' as he intended with Xanadu. + - Yes! the feeling is mutual :) I really love Ricoeur's general + style and approach to questions. Unfortunately he didn't write much about technology itself, which made my job quite difficult! But I did meet a friend of his once that told me that, in the - 70s, Ricouer had asked him \"are we still writing when we use - computers?\". So, he was thinking about the question at least. I + 70s, Ricouer had asked him "are we still writing when we use + computers?". So, he was thinking about the question at least. I only discovered emacs after I finished all that word, but since - then I can finally say that \'yes!\' we can \'write\' using + then I can finally say that 'yes!' we can 'write' using computers (with writing being a core activity of the self for Ricoeur). Also, I just wish I had emacs instead of just writing so many academic papers in microsoft word! @@ -187,24 +187,24 @@ Pad: having all the LaTeX options in Emacs (here, I list my fave) is like stepping into technicolor out of black and white - to this day, I still feel that way! So much you wrote is interesting. - Stiegler\'s concern of whether technology - like the writing pad + Stiegler's concern of whether technology - like the writing pad in Plato earlier - would strip us of our intellectual capacity (I can see that possibly happening with automaticizing tools like - maybe Excel is a good example, because one does not really have to think about what one is doing). But Emacs use - prompts us to ask questions and design \*exactly\* what we are + prompts us to ask questions and design *exactly* what we are looking for. - wow, yes, that is so interesting. I never considered the question of desire and emacs until your talk, and it was definitely one of the most interesting parts! - In my work I was also mostly interested in Freud (the role of - \'technique\' in psychoanalysis) and also Foucault\'s later + 'technique' in psychoanalysis) and also Foucault's later lectures on hermeneutics of the self/technologies of the self. - The angle of \'desire\' in relation to personal + The angle of 'desire' in relation to personal configuration/design was so interesting to me and like an - \'aha\' moment. I\'ll definitely be thinking about it more! + 'aha' moment. I'll definitely be thinking about it more! Thank you so much again for the talk and all the responses! - - Thank you too, and hope we\'ll be in touch! + - Thank you too, and hope we'll be in touch! - Yes :) enjoy the rest of the conference! - Likewise :) - Q8: What was that Crichton quote? That was neat! (From the @@ -220,14 +220,14 @@ Pad: - DOI 10.1007/s42438-020-00188-3 The Odyssey of Pedagogies of Technoscientific Literacies -**Links and other notes:**\ +**Links and other notes:** - Design Pattern: macro solution; human-centered - Emacs is a design pattern for learning. - Why we care about design patterns? - Emacs as a mental map. -- Everyone\'s Emacs is their own. -- The development of the Emacs communitiy is similar to the \[free\] +- Everyone's Emacs is their own. +- The development of the Emacs communitiy is similar to the [free] core of Emacs devlopment. IRC: diff --git a/2021/talks/structural.md b/2021/talks/structural.md index 8cedef37..03089a2d 100644 --- a/2021/talks/structural.md +++ b/2021/talks/structural.md @@ -51,7 +51,7 @@ IRC nick: ethan - Q1: so tree-edit is orthogonal to the LSP features? - A: only uses tree-sitter yeah - Q2:any chance you tried this with Clojure as well? - - A: haven\'t tried it yet, i don\'t think tree-sitter-langs has a + - A: haven't tried it yet, i don't think tree-sitter-langs has a clojure grammar AFAIK - Q3: Would we be able to do things like extract statement to a variable? For example, extract a a math operation happening in a @@ -68,11 +68,11 @@ IRC nick: ethan to Tree-edit will be? - A: Trying to add python, not super simple, C-like should be drop in replacements -- Q7: \@ethan Could tree-edit be made to work with Org (orgdown!) +- Q7: @ethan Could tree-edit be made to work with Org (orgdown!) itself, or maybe rather what would be needed to get such a unified tree-editing framework to work also for complex Org trees? - Q8: Any plans for an Evil mode integration? evil-textobj-tree-sitter - seems like it has a long way to go if it\'s to catch up to + seems like it has a long way to go if it's to catch up to tree-edit. - any chance you tried this with Clojure as well? @@ -97,7 +97,7 @@ Links and other notes: - inspired by paredit and lispy - Another similar project is <https://github.com/mickeynp/combobulate> by Mickey Petersen, the writer of Mastering Emacs. -- It\'s an open source project so contributers are welcome +- It's an open source project so contributers are welcome - Future implication for this kind of work could be voice controlled code writing/editing diff --git a/2021/talks/tech.md b/2021/talks/tech.md index 8347c50d..18b84a75 100644 --- a/2021/talks/tech.md +++ b/2021/talks/tech.md @@ -30,13 +30,13 @@ Pad: - Q1: Sorry if you already answered this somewhere (but if not, can someone with a reddit account copy this over? thx). Hi, I would love - to move my team over to using something org-based, but that\'ll - never happen because, well\... (wait for it) Emacs! By the way, I\'m + to move my team over to using something org-based, but that'll + never happen because, well... (wait for it) Emacs! By the way, I'm currently using heavily customized Sphinx setup, mostly internal, sometimes shared with data partners; lots of schema-gen from message protocols defined in code, etc. Anyhow: questions. Do you work with non-Emacs users? If so, how did you get them to accept this - workflow? And if it\'s just you DJ\'ing, how do they weigh in when + workflow? And if it's just you DJ'ing, how do they weigh in when they want an update, open a formal ticket? - <https://github.com/jypma/emacsconf2021/blob/master/presentation.org> diff --git a/2021/talks/telega.md b/2021/talks/telega.md index 72bedd69..54a151f4 100644 --- a/2021/talks/telega.md +++ b/2021/talks/telega.md @@ -23,12 +23,12 @@ highlight some of the most important features. # Discussion - Q1: Do any of these main emacs telegram groups bridge to matrix? - - A: \[Speaker\] We discussed adding a bridge to matrix for the - main channel \@emacs\_en. We never got around to doing it, but I + - A: [Speaker] We discussed adding a bridge to matrix for the + main channel @emacs_en. We never got around to doing it, but I can bring this up again. - Q2: Could telega.el auto install TDLib like lsp-mode auto installs servers? -- A: \[Speaker\] Possibly. The difference is that TDLib requires a +- A: [Speaker] Possibly. The difference is that TDLib requires a number of dependencies that might not be available. Evgeny chose another route to simplify setting up telega.el: the package can now be installed with a Dockerfile that also ships with also the diff --git a/2021/talks/test.md b/2021/talks/test.md index b858bd4e..9165e7b6 100644 --- a/2021/talks/test.md +++ b/2021/talks/test.md @@ -25,7 +25,7 @@ running 'dofile "foo.lua"'), and then has several tests for that class and its methods; and we can put another block with tests like that after the class Bletch, and other blocks after some functions. Eepitch allows sending these tests line by line to the Lua interpreter by -typing <f8\> on each line that we want to send, and this lets us create +typing <f8> on each line that we want to send, and this lets us create tests that are very easy to understand even without writing comments; this gives us a very quick way to document code by executable tests, that is super-great for experimental code that is still going to @@ -33,10 +33,10 @@ change a lot before running the risk of being read by other people. These multi-line comments with eepitch blocks that run an interpreter and make it load the current file are called "test blocks". The -command \`M-x eeit' inserts a test block at point, using the major mode +command `M-x eeit' inserts a test block at point, using the major mode to decide the right syntax to use for the multi-line comments and for the "dofile". We can configure the syntax of the test blocks for the -current major mode by running \`M-x find-eeit-links'; this can also be +current major mode by running `M-x find-eeit-links'; this can also be used to add support for test blocks to more languages (or, more precisely: to more major modes). diff --git a/2021/talks/ui.md b/2021/talks/ui.md index ee269f58..0fbf9322 100644 --- a/2021/talks/ui.md +++ b/2021/talks/ui.md @@ -38,19 +38,19 @@ Pad: get lost easily when staging hunks since scroll gets lost during re-render (Magit attempts at recovering). Are we getting magit-tui? - A: It is certainly possible and compatible. - - I am interested in tui.el but haven\'t looked at it too closely + - I am interested in tui.el but haven't looked at it too closely yet. Have been entertaining the idea of something like this for - a long time now. \-- jonas (magit maintainer) + a long time now. -- jonas (magit maintainer) - Q2:We can update images as well?! Like SVG, or the comics you shown. This is awesome! - - A: Yes, that\'s possible. + - A: Yes, that's possible. - Q3:Have you tried to display any diagram? Like UML sequence diagrams - Q4: So does tui implement some sort of DOM model? - A: Yes. - Q5: How does performance compare with some other libraries, like EWOC, magit-section, tabulated-list? e.g. to render a view with - thousands of elements (and thank you for your work on this, it\'s - very exciting for Emacs\'s future) + thousands of elements (and thank you for your work on this, it's + very exciting for Emacs's future) - A: In general EWOC and tabulated-list should perform better, and tui still needs some optimization. TUI has the potential to be better, but it needs some work. @@ -58,7 +58,7 @@ Pad: - A: Eventually, once its polished and more robust. - Q7: What is the memory overhead like, e.g. I guess values are hashed to detect whether items need to be re-rendered? - - A: Haven\'t done any memory profiling, but memory overhead could + - A: Haven't done any memory profiling, but memory overhead could probably be an issue. - Q8: Awesome. Would lack of concurrency/multi-threading in Emacs be an issue? diff --git a/2021/talks/unix.md b/2021/talks/unix.md index 33d87029..462e35c4 100644 --- a/2021/talks/unix.md +++ b/2021/talks/unix.md @@ -25,9 +25,9 @@ to be more performant than without. IRC nick: thecatster -- Q: So, how do you decide when it\'s not \"worth it\" to use Emacs +- Q: So, how do you decide when it's not "worth it" to use Emacs for a certain thing? -- Q: What\'s your opinion on EAF? +- Q: What's your opinion on EAF? - Q: What is your opinion on starter-kits and making emacs accessible, practical for people who want to keep things simple? - Q: Do you integrate tools via Emacs or you just jump between those? @@ -103,3 +103,4 @@ summary h1 { display: inline-block } width: 180px; position: absolute; left: 10px; } + .vid .chapters .current { background-color: rgba(0, 255, 0, 0.2); } diff --git a/templates/page.tmpl b/templates/page.tmpl index 235d3aa9..65d12e3b 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -321,7 +321,8 @@ transcriptDiv.appendChild(transcriptLink) if (textTrack.kind === "chapters"){ textTrack.mode = 'hidden'; var video = trackElement.closest('video'); - var chapterList = trackElement.closest('.video-card').querySelector('ol'); + var chapterList = trackElement.closest('.vid').querySelector('ol'); + chapterList.innerHTML = ''; for (var i = 0; i < textTrack.cues.length; ++i) { cue = textTrack.cues[i], chapterName = cue.text, @@ -341,6 +342,7 @@ transcriptDiv.appendChild(transcriptLink) } textTrack.addEventListener("cuechange", function() { + if (!this.activeCues[0]) return; var currentLocation = this.activeCues[0].startTime; if (chapter = chapterList.querySelector('li[data-start="' + currentLocation + '"]')) { var locations = [].slice.call(chapterList.querySelectorAll("li")); @@ -354,7 +356,7 @@ transcriptDiv.appendChild(transcriptLink) } } - document.querySelectorAll('track[kind=chapters]').forEach(function(e) { e.addEventListener('load', function() { displayChapters(e); });}); + document.querySelectorAll('track[kind=chapters]').forEach(function(e) { displayChapters(e); e.addEventListener('load', function() { displayChapters(e); });}); // @license-end </script> |