summaryrefslogtreecommitdiffstats
path: root/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt767
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