diff options
Diffstat (limited to '')
-rw-r--r-- | 2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt | 767 |
1 files changed, 767 insertions, 0 deletions
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt new file mode 100644 index 00000000..0fc2d8ef --- /dev/null +++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt @@ -0,0 +1,767 @@ +WEBVTT + + +00:00:08.620 --> 00:00:09.120 +[Speaker 0]: And I think we are live. + +00:00:09.620 --> 00:00:09.960 +Hello again, everyone. + +00:00:10.940 --> 00:00:11.440 +And hi, Lovro. How are you doing? + +00:00:15.339 --> 00:00:15.839 +[Speaker 1]: Just a second. Should I join the other room? + +00:00:18.460 --> 00:00:18.740 +[Speaker 0]: Oh, no, no, you can stay here. + +00:00:20.860 --> 00:00:21.360 +[Speaker 1]: I can stay in the backstage. + +00:00:24.140 --> 00:00:24.320 +[Speaker 0]: Everything is fine. I don't think you are + +00:00:25.520 --> 00:00:25.760 +technically in the backstage right now you're + +00:00:26.750 --> 00:00:26.820 +just in Big Blue Button with us. + +00:00:30.040 --> 00:00:30.160 +[Speaker 1]: Oh thanks. Oh because I have 2 of them open I + +00:00:30.920 --> 00:00:31.280 +thought there were 2 different rooms. + +00:00:32.720 --> 00:00:33.220 +1 is the backstage and the other, + +00:00:38.239 --> 00:00:38.360 +[Speaker 0]: whichever, I can hear you and so can the + +00:00:39.840 --> 00:00:40.080 +stream, so don't worry too much about which + +00:00:41.140 --> 00:00:41.220 +is the backstage and which is the front page. + +00:00:41.540 --> 00:00:41.760 +[Speaker 1]: I have no idea. Well, great, + +00:00:43.660 --> 00:00:43.940 +great. Okay, yeah. Yeah, + +00:00:45.280 --> 00:00:45.480 +I'm doing great, just to answer your + +00:00:45.480 --> 00:00:45.980 +question. + +00:00:47.379 --> 00:00:47.640 +[Speaker 0]: Okay, great, great, Okay, + +00:00:49.900 --> 00:00:50.280 +well splendid. So, I've pasted a link again + +00:00:51.520 --> 00:00:51.760 +on IRC if you want to ask your questions, + +00:00:53.000 --> 00:00:53.200 +and I'd invite you to do so, + +00:00:54.620 --> 00:00:55.040 +because we have about 9 minutes of laborious + +00:00:56.580 --> 00:00:57.080 +time to answer as many of them as possible. + +00:00:58.360 --> 00:00:58.860 +And I'm going to start with the first 1. + +00:01:01.100 --> 00:01:01.600 +This looks great and was very well-presented. + +00:01:03.240 --> 00:01:03.420 +Do you have plans to upstream this + +00:01:04.239 --> 00:01:04.739 +functionality into Emacs? + +00:01:08.000 --> 00:01:08.200 +[Speaker 1]: That's a good idea. That's something we + +00:01:08.860 --> 00:01:09.360 +thought about as well. + +00:01:11.640 --> 00:01:12.140 +Currently, we haven't really contacted anyone + +00:01:16.160 --> 00:01:16.660 +to do this. Also, the current implementation, + +00:01:19.760 --> 00:01:20.080 +so as I mentioned in the presentation towards + +00:01:22.120 --> 00:01:22.300 +the end, so we use a little bit of advice to + +00:01:24.240 --> 00:01:24.520 +sort of patch some functionality of query + +00:01:26.479 --> 00:01:26.600 +replace because not everything was easy to + +00:01:28.680 --> 00:01:29.180 +implement. The core functionality luckily + +00:01:32.220 --> 00:01:32.340 +was, But there's a couple of fixes we need to + +00:01:34.200 --> 00:01:34.340 +apply to the message function in order to + +00:01:36.380 --> 00:01:36.820 +display a nice message in the echo buffer + +00:01:39.140 --> 00:01:39.320 +because this doesn't happen on its own when + +00:01:41.100 --> 00:01:41.580 +we're using this trick with this big regex + +00:01:45.360 --> 00:01:45.720 +and whatnot. So I don't think that the code + +00:01:47.080 --> 00:01:47.580 +as it is would be upstreamable. + +00:01:50.600 --> 00:01:51.100 +I think probably if we wanted to upstream it, + +00:01:54.140 --> 00:01:54.280 +we would have to do some proper work on + +00:01:57.180 --> 00:01:57.340 +refactoring query place itself in order to + +00:01:58.780 --> 00:01:58.979 +integrate all of this functionality just + +00:02:01.880 --> 00:02:02.380 +directly without any patching left and right. + +00:02:05.680 --> 00:02:06.120 +But yeah, definitely something I've given + +00:02:10.080 --> 00:02:10.259 +some thought, but so far no progress on it. + +00:02:11.640 --> 00:02:11.980 +I haven't actually started doing anything + +00:02:12.240 --> 00:02:12.740 +about it. + +00:02:17.440 --> 00:02:17.780 +[Speaker 0]: Right, So I'm curious now, + +00:02:19.640 --> 00:02:19.900 +you developed the feature and then you moved + +00:02:21.600 --> 00:02:21.740 +on to the presentation or did you want to do + +00:02:23.080 --> 00:02:23.200 +a presentation for EmacsConf and then you + +00:02:24.140 --> 00:02:24.640 +worked on something like this? + +00:02:26.360 --> 00:02:26.860 +Which was it first, the chicken or the egg? + +00:02:28.220 --> 00:02:28.720 +[Speaker 1]: Yeah, it was the former. + +00:02:31.320 --> 00:02:31.820 +So this is a problem I've been aware of for, + +00:02:33.340 --> 00:02:33.840 +I mean, probably a couple of years. + +00:02:35.280 --> 00:02:35.640 +And, you know, I talked to my friend + +00:02:37.600 --> 00:02:37.840 +Valentino about it and we had like a little + +00:02:39.240 --> 00:02:39.740 +discussion, you know, how would we do this? + +00:02:41.880 --> 00:02:42.380 +And then I remember back when I was + +00:02:44.140 --> 00:02:44.260 +researching about this problem and the + +00:02:45.100 --> 00:02:45.600 +various Emacs Lisp solutions, + +00:02:47.780 --> 00:02:47.960 +all I could find were these solutions that + +00:02:49.400 --> 00:02:49.600 +would, you know, just shy away from + +00:02:50.640 --> 00:02:50.920 +implementing the RegEx case, + +00:02:52.340 --> 00:02:52.840 +which is a really complicated 1. + +00:02:54.720 --> 00:02:55.220 +And, after some discussion, + +00:02:56.140 --> 00:02:56.580 +my friend and I decided, + +00:02:58.080 --> 00:02:58.320 +okay, what the hell? Let's, + +00:02:59.280 --> 00:02:59.480 +let's try and implement this. + +00:03:01.800 --> 00:03:02.300 +How hard can it be? And yeah, + +00:03:03.280 --> 00:03:03.780 +basically in 1 afternoon, + +00:03:06.300 --> 00:03:06.500 +the idea, our little trick and the whole + +00:03:07.440 --> 00:03:07.940 +implementation was born. + +00:03:11.480 --> 00:03:11.680 +And then I think that was maybe around a year + +00:03:12.540 --> 00:03:13.040 +ago, maybe a bit less. + +00:03:14.480 --> 00:03:14.680 +And then through the months, + +00:03:15.920 --> 00:03:16.420 +we just thought, oh yeah, + +00:03:17.420 --> 00:03:17.640 +maybe we could present this, + +00:03:18.960 --> 00:03:19.200 +maybe it would be interesting for people to + +00:03:20.660 --> 00:03:20.920 +see and that's how we came up with the idea + +00:03:22.440 --> 00:03:22.940 +to present at EmacsConf. + +00:03:27.900 --> 00:03:28.180 +[Speaker 0]: Okay, great. I don't see other people asking + +00:03:30.240 --> 00:03:30.540 +questions. So people, it's nice if I ask + +00:03:31.100 --> 00:03:31.600 +questions but you know, + +00:03:33.160 --> 00:03:33.340 +the point is kind of for you to ask the + +00:03:35.140 --> 00:03:35.280 +questions. I see someone who's joined us on + +00:03:36.780 --> 00:03:37.120 +BBB. Peter, would you like to ask a question + +00:03:41.720 --> 00:03:41.980 +maybe? Otherwise I see another person writing + +00:03:43.040 --> 00:03:43.260 +a question on the pad, + +00:03:44.540 --> 00:03:44.700 +so we can either move for this 1. + +00:03:46.640 --> 00:03:46.800 +So I'll leave Peter to figure out if they + +00:03:47.680 --> 00:03:47.960 +want to ask a question. + +00:03:49.160 --> 00:03:49.660 +So I'm moving on to the next question. + +00:03:57.900 --> 00:03:58.180 +[Speaker 2]: I can jump in. That's a really well done talk + +00:04:01.780 --> 00:04:02.120 +and you really clearly laid out the problem + +00:04:03.000 --> 00:04:03.500 +and the solution there. + +00:04:05.600 --> 00:04:05.740 +While I was watching it, + +00:04:10.740 --> 00:04:11.040 +I was thinking maybe the nice way to name it + +00:04:13.140 --> 00:04:13.440 +is just to name it query replace and query + +00:04:15.700 --> 00:04:16.019 +replace regext, you know, + +00:04:18.480 --> 00:04:18.980 +overloading the original functions and then + +00:04:23.000 --> 00:04:23.460 +using a prefix number, + +00:04:26.880 --> 00:04:27.380 +like control number to indicate how many + +00:04:29.280 --> 00:04:29.780 +replacements you're going to do. + +00:04:31.640 --> 00:04:32.140 +But maybe that doesn't work with the + +00:04:36.680 --> 00:04:37.120 +recursive editing stuff, + +00:04:37.960 --> 00:04:38.180 +which I don't use much. + +00:04:40.440 --> 00:04:40.940 +So I don't have a good method. + +00:04:43.260 --> 00:04:43.760 +[Speaker 1]: I think it would definitely work. + +00:04:46.260 --> 00:04:46.440 +Well, the question is, + +00:04:47.880 --> 00:04:48.380 +if we just overwrite the definitions, + +00:04:51.700 --> 00:04:52.200 +then, oh, well, I guess we could do that. + +00:04:53.410 --> 00:04:53.560 +Nothing stops us. I mean, + +00:04:54.800 --> 00:04:54.880 +we're in Emacs. We could definitely do that. + +00:04:55.680 --> 00:04:55.920 +And then if you give, like, + +00:04:57.540 --> 00:04:57.720 +a prefix argument, maybe it just drops you + +00:04:59.060 --> 00:04:59.560 +back to the original query replace. + +00:05:01.000 --> 00:05:01.160 +Yeah, that's an idea. For now, + +00:05:02.440 --> 00:05:02.920 +we decided, OK, let's just keep everything + +00:05:05.000 --> 00:05:05.240 +explicitly separate just to avoid any + +00:05:05.240 --> 00:05:05.740 +confusion. + +00:05:09.220 --> 00:05:09.400 +[Speaker 2]: Yeah, I think that's the right thing to do + +00:05:11.820 --> 00:05:12.320 +for now. What I'm actually thinking is that + +00:05:13.620 --> 00:05:13.940 +when you do query replace, + +00:05:15.600 --> 00:05:16.100 +it just does the regular query replace. + +00:05:17.220 --> 00:05:17.440 +And if you're going to do, + +00:05:20.140 --> 00:05:20.640 +say, 3 parallel replacements, + +00:05:21.340 --> 00:05:21.840 +then you do Control-U, + +00:05:25.580 --> 00:05:26.080 +query replace. Sorry. Control-3, + +00:05:28.580 --> 00:05:28.860 +query replace. And then that way you don't + +00:05:33.400 --> 00:05:33.760 +have The final prompt that you give nothing + +00:05:33.760 --> 00:05:34.260 +to. + +00:05:36.880 --> 00:05:37.380 +[Speaker 1]: Exactly, that's actually not a bad idea. + +00:05:39.720 --> 00:05:40.080 +I think I like that. Yeah, + +00:05:40.800 --> 00:05:41.300 +that's not a bad idea. + +00:05:44.760 --> 00:05:44.920 +[Speaker 0]: It's always a quagmire whether to ask for an + +00:05:47.080 --> 00:05:47.580 +argument or to use the universal argument. + +00:05:51.060 --> 00:05:51.380 +When you're working with Emacs and especially + +00:05:52.640 --> 00:05:52.960 +the UX side of things in the package, + +00:05:54.900 --> 00:05:55.020 +it's so complicated to figure out which 1 you + +00:05:56.880 --> 00:05:57.380 +want to do. In this particular case, + +00:06:00.340 --> 00:06:00.840 +I think it's the better option to use the + +00:06:02.800 --> 00:06:03.120 +universal argument or any kind of argument + +00:06:04.040 --> 00:06:04.540 +with a control number before. + +00:06:10.240 --> 00:06:10.440 +All right, we have about 3 more minutes of + +00:06:12.440 --> 00:06:12.720 +questions. Peter, if you don't mind, + +00:06:14.440 --> 00:06:14.940 +I'll keep reading the questions in the chat. + +00:06:19.440 --> 00:06:19.940 +Did you use pair programming while developing + +00:06:21.100 --> 00:06:21.600 +it, it being a package, + +00:06:22.440 --> 00:06:22.940 +or did you work independently, + +00:06:24.840 --> 00:06:25.340 +alternating and reviewing with Valentino? + +00:06:28.320 --> 00:06:28.440 +[Speaker 1]: It was definitely a pair programming kind of + +00:06:29.440 --> 00:06:29.940 +thing. So if I remember correctly, + +00:06:32.760 --> 00:06:33.260 +I was sitting at the computer and Valentino + +00:06:36.020 --> 00:06:36.520 +was in front of a whiteboard and we were just + +00:06:38.400 --> 00:06:38.900 +dissecting this regex and a bunch of examples + +00:06:41.680 --> 00:06:41.820 +and trying to get these capture groups and + +00:06:44.240 --> 00:06:44.440 +stuff that we have to remap internally to get + +00:06:46.560 --> 00:06:46.880 +these offsets right and avoid off by 1 error + +00:06:48.160 --> 00:06:48.420 +and stuff like that. So yeah, + +00:06:49.280 --> 00:06:49.780 +definitely a team effort. + +00:06:53.660 --> 00:06:54.160 +[Speaker 0]: Okay, great. Moving on to the next question. + +00:06:55.240 --> 00:06:55.740 +What is your background in programming? + +00:06:57.440 --> 00:06:57.620 +Was it difficult to implement following the + +00:06:59.700 --> 00:07:00.040 +same API and architecture as what is already + +00:07:00.200 --> 00:07:00.700 +in Emacs? + +00:07:05.400 --> 00:07:05.680 +[Speaker 1]: So maybe just a quick back story. + +00:07:06.960 --> 00:07:07.440 +Both Valentino and I are actually PhD + +00:07:08.300 --> 00:07:08.680 +students in computer science, + +00:07:09.960 --> 00:07:10.460 +and we literally share an office. + +00:07:12.960 --> 00:07:13.180 +So that's how we even started talking about + +00:07:14.480 --> 00:07:14.900 +this whole thing. And we both use Emacs, + +00:07:18.380 --> 00:07:18.640 +of course. But I don't think this was too + +00:07:20.740 --> 00:07:20.880 +hard to implement because luckily all of the + +00:07:22.300 --> 00:07:22.540 +interactive functionality like this + +00:07:23.600 --> 00:07:24.100 +complicated undo, skipping, + +00:07:25.680 --> 00:07:26.180 +execute until the end and so on, + +00:07:27.980 --> 00:07:28.380 +all of this is really just already provided + +00:07:29.860 --> 00:07:30.360 +by the Emacs queer replace implementation. + +00:07:34.160 --> 00:07:34.360 +So sort of what we do is we just invoke it as + +00:07:36.080 --> 00:07:36.220 +a function and delegate to it. + +00:07:37.800 --> 00:07:38.000 +And we came up with this clever trick to + +00:07:42.380 --> 00:07:42.560 +basically delegate this multi-replacement to + +00:07:45.160 --> 00:07:45.660 +this 1 single function that's already there. + +00:07:47.980 --> 00:07:48.480 +So it wasn't too complicated. + +00:07:54.780 --> 00:07:54.960 +[Speaker 0]: Alright. And we have about 2 minutes of time + +00:07:55.560 --> 00:07:56.040 +for the last question. + +00:07:58.040 --> 00:07:58.260 +What did you learn about Emacs programming or + +00:08:00.020 --> 00:08:00.100 +programming in general while working on this + +00:08:02.320 --> 00:08:02.820 +project? A very wide question for me. + +00:08:05.840 --> 00:08:06.340 +[Speaker 1]: Maybe 1 thing I would like to add to the + +00:08:09.220 --> 00:08:09.440 +previous just answer is I don't want to say + +00:08:10.160 --> 00:08:10.660 +like you know we're PhDs, + +00:08:12.780 --> 00:08:13.260 +a PhD is required for this or anything, + +00:08:15.800 --> 00:08:15.920 +not at all. It's mostly just for a little bit + +00:08:19.220 --> 00:08:19.720 +of context, but I think obviously, + +00:08:20.640 --> 00:08:21.020 +even if you're not a PhD, + +00:08:22.360 --> 00:08:22.540 +I mean, you don't even require like + +00:08:24.960 --> 00:08:25.460 +university, you know, education or anything. + +00:08:27.540 --> 00:08:28.040 +It wasn't overly difficult to implement, + +00:08:30.680 --> 00:08:31.080 +sort of just read some code that's already + +00:08:33.539 --> 00:08:34.039 +there and you know follow what you see and + +00:08:35.860 --> 00:08:36.020 +poke Emacs a little bit and do a little bit + +00:08:38.140 --> 00:08:38.320 +of debugging on the internals and you can + +00:08:40.280 --> 00:08:40.440 +definitely get it. So definitely not a + +00:08:42.240 --> 00:08:42.400 +prerequisite to have a degree or anything to + +00:08:45.480 --> 00:08:45.600 +do any of this stuff. Okay so Coming back to + +00:08:48.420 --> 00:08:48.560 +[Speaker 0]: Yeah, I'm going to amend a little bit the + +00:08:49.680 --> 00:08:49.960 +question because we only have 1 minute. + +00:08:51.600 --> 00:08:52.100 +So just 1 thing in 10 seconds, + +00:08:52.490 --> 00:08:52.540 +[Speaker 2]: what did you + +00:08:53.040 --> 00:08:53.540 +[Speaker 0]: learn about this? + +00:08:54.240 --> 00:08:54.380 +[Speaker 1]: your last question. What did I learn about + +00:08:56.420 --> 00:08:56.920 +Emacs programming? That Emacs is so flexible + +00:08:59.160 --> 00:08:59.360 +that I can go and I can patch literally its + +00:09:01.480 --> 00:09:01.880 +message function. And that is how we achieve + +00:09:03.680 --> 00:09:04.180 +the nice message function in the echo buffer. + +00:09:06.720 --> 00:09:06.980 +So I can literally go and patch something as + +00:09:07.560 --> 00:09:08.060 +crucial as message. + +00:09:09.920 --> 00:09:10.420 +[Speaker 0]: It's great. That's a lovely 1. + +00:09:12.260 --> 00:09:12.380 +And I think, again, we're going back to the + +00:09:13.660 --> 00:09:13.780 +philosophy of Emacs. Everything is + +00:09:15.200 --> 00:09:15.520 +programmable and even changing the message + +00:09:16.640 --> 00:09:16.800 +function is great. All right, + +00:09:17.440 --> 00:09:17.640 +well, thank you so much, + +00:09:19.540 --> 00:09:19.660 +Lovro, and thanks to Valentino as well, + +00:09:21.820 --> 00:09:21.960 +who's not here, but who's contributed to this + +00:09:23.900 --> 00:09:24.400 +talk. Any last word? + +00:09:29.540 --> 00:09:29.800 +[Speaker 1]: Well, just if you're gonna build any + +00:09:31.980 --> 00:09:32.160 +solutions, try to make them as foolproof and + +00:09:34.360 --> 00:09:34.540 +as 100% as possible so we get more of these + +00:09:36.280 --> 00:09:36.420 +goodies that are nice and robust for + +00:09:37.000 --> 00:09:37.500 +everybody to use. + +00:09:39.400 --> 00:09:39.620 +[Speaker 0]: All right, lovely. Well, + +00:09:40.240 --> 00:09:40.580 +thank you so much, Lover, + +00:09:41.940 --> 00:09:42.380 +for your presentation and your answer. + +00:09:44.340 --> 00:09:44.640 +We'll be moving on to the next talk in just + +00:09:47.260 --> 00:09:47.720 +about 5 seconds, and I'll see you after. + +00:09:47.900 --> 00:09:48.400 +Bye, Lovro! + +00:09:49.760 --> 00:09:50.260 +[Speaker 1]: Yep, bye bye! + +00:10:01.440 --> 00:10:01.560 +[Speaker 0]: So I'm just waiting to make sure my VNC is a + +00:10:02.840 --> 00:10:03.000 +little slow. Okay, we switch to the next + +00:10:03.480 --> 00:10:03.740 +talk. All right, Lover, + +00:10:04.960 --> 00:10:05.460 +I'm gonna need to go get ready now. + +00:10:09.060 --> 00:10:09.560 +Yep. Bye-bye, and thanks for your talk. + +00:10:11.160 --> 00:10:11.660 +[Speaker 1]: Bye, thank you, see you. + +00:10:15.060 --> 00:10:15.560 +[Speaker 2]: You |