summaryrefslogtreecommitdiffstats
path: root/2024/info
diff options
context:
space:
mode:
Diffstat (limited to '2024/info')
-rw-r--r--2024/info/theme-after.md2
-rw-r--r--2024/info/transducers-after.md376
-rw-r--r--2024/info/transducers-before.md15
3 files changed, 391 insertions, 2 deletions
diff --git a/2024/info/theme-after.md b/2024/info/theme-after.md
index c6546061..83d57fb7 100644
--- a/2024/info/theme-after.md
+++ b/2024/info/theme-after.md
@@ -2,6 +2,7 @@
<div class="transcript transcript-mainVideo"><a name="theme-mainVideo-transcript"></a>
+
# Transcript
@@ -233,6 +234,7 @@
[[!template text="""Thanks!""" start="00:11:22.400" video="mainVideo-theme" id="subtitle"]]
</div><div class="transcript transcript-qanda"><a name="theme-qanda-transcript"></a>
+
# Q&A transcript (unedited)
[[!template text="""So just to be clear, right now we are currently streaming. So""" start="00:00:00.000" video="qanda-theme" id="subtitle"]]
diff --git a/2024/info/transducers-after.md b/2024/info/transducers-after.md
index 77e4a155..47a78c63 100644
--- a/2024/info/transducers-after.md
+++ b/2024/info/transducers-after.md
@@ -2,6 +2,7 @@
<div class="transcript transcript-mainVideo"><a name="transducers-mainVideo-transcript"></a>
+
# Transcript
@@ -417,7 +418,380 @@
Captioner: sachac
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20transducers%3A%20Transducers%3A%20finally%2C%20ergonomic%20data%20processing%20for%20Emacs%21)
+<div class="transcript transcript-qanda"><a name="transducers-qanda-transcript"></a>
+
+# Q&A transcript (unedited)
+
+[[!template text="""Hopefully the internet goes well. It's a nice Monday""" start="00:00:00.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""morning here in Tokyo.""" start="00:00:07.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Are we connected all right?""" start="00:00:32.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Okay, I seem to be struggling still with my audio. 1 2nd""" start="00:00:37.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""calling. Yeah, you were muted for a moment there. Okay,""" start="00:00:40.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there we are. Okay. All right. Sorry about that. I got a mute""" start="00:00:44.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""out my, my back office chatter. That's kind of distracting""" start="00:00:49.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""me a little bit. All right. Sorry. I may have lost the plot a""" start="00:00:55.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""little bit. I think I did. However, find the 1st question.""" start="00:00:58.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I got pretty distracted by conversation backstage. Yeah,""" start="00:01:04.920" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results""" start="00:01:09.920" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""no problem. So the first question here, someone's asking,""" start="00:01:09.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""when they first tried comparing transducers.el, the cl-lib""" start="00:01:15.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""and Dash bookmark compiled, and they give some detailed""" start="00:01:22.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""results we're sharing on the stream. Um, they expected""" start="00:01:27.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""transducers to be slower than CL loop, but faster than CL lib""" start="00:01:32.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""or dash. However, this isn't the case, any idea why. And so""" start="00:01:36.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'll, I'll come back into their data to show there's they're""" start="00:01:41.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""showing, um, you know, there's not a lot of detail on the, on""" start="00:01:43.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the, on the use case here. We could certainly click through""" start="00:01:48.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it, do it.""" start="00:01:52.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Oh, I should've waited to zoom until I find my spot here.""" start="00:02:02.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""There we are.""" start="00:02:07.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""All right, so there's our example.""" start="00:02:13.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Looks like we are doing a simple map and a sum.""" start="00:02:18.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Mm-hmm. Yeah, that's right. Yeah, question about""" start="00:02:23.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""performance. So a case like this, a simple, I just want to rip""" start="00:02:29.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""through a collection of numbers and sum them all. That's a""" start="00:02:36.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""case where basically loop is always going to win because""" start="00:02:40.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""loop is optimized. This is true in both Emacs Lisp and in""" start="00:02:44.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Common Lisp. For a case like this where you're not really""" start="00:02:51.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""doing two nested of chained calls, like you don't have many""" start="00:02:56.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""sort of what I was compositional steps. If you're just""" start="00:03:02.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""ripping through a collection of numbers, loop is always""" start="00:03:05.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""going to win. Transducers kind of shines when you have to do""" start="00:03:10.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""things that loop can't in terms of expressing yourself. So""" start="00:03:15.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there are lots of different transducers that you can chain""" start="00:03:19.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""together. And in that case, you're kind of prioritizing""" start="00:03:22.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""developer time and developer happiness because you're""" start="00:03:27.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""able to yourself more clearly, whereas sometimes those""" start="00:03:33.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""kind of algorithms can get very hairy if you're just using""" start="00:03:36.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""loop. Now that sounds like I'm moving the goalposts, and""" start="00:03:40.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there's really no excuse for these things not being as""" start="00:03:45.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""performant as possible. In this specific case, my guess is""" start="00:03:48.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that the transducers is slower because it has to do a whole""" start="00:03:54.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""bunch of like inner function calls in order to actually do""" start="00:03:57.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the adding and the collecting. So there's a lot of stuff that""" start="00:04:03.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""just the raw loop doesn't have to do, which transducers""" start="00:04:09.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""does. And so in this case, that's why it would be slower.""" start="00:04:12.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""All right, makes sense.""" start="00:04:20.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Um... I cannot comment against Dash. And also a reminder""" start="00:04:29.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that transducers both in CL and in Emacs Lisp here doesn't""" start="00:04:36.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""attempt to do any, you know, fun, you know, inner rewriting""" start="00:04:40.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""or, you know, what's called an Haskell fusion. Like if you""" start="00:04:44.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""have two different map steps, like in a row, it's not gonna""" start="00:04:48.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""see that and somehow fuse them internally. It's a fairly, in""" start="00:04:51.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that sense, the implementation is just as is.""" start="00:04:55.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""to make it you know as raw fast as possible. The idea being""" start="00:04:59.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that ergonomics is more important up front. Yeah, that's""" start="00:05:04.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""kind of a whole fascinating sub-panel, right? My theme this""" start="00:05:12.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""conference has been, oh, all these different things we""" start="00:05:17.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""should try to get sub-panels going for and use that. Maybe""" start="00:05:19.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""fill in the dev track or even have a third track or whatever.""" start="00:05:24.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'm not that concerned about the logistics of squeezing""" start="00:05:29.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""into the schedule so much. But anyway, interesting, I mean,""" start="00:05:31.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""to say.""" start="00:05:38.520" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Do you know of any theoretical texts on transducers?""" start="00:05:40.840" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""Did we already speak to theoretical texts? No, right? No,""" start="00:05:40.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""let's continue. Okay, so another question from the group.""" start="00:05:47.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Do you know of any theoretical texts on transducers? My""" start="00:05:53.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""readme, particularly of the Common Lisp implementation,""" start="00:05:58.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""is the theoretical text on transducers. Rich Hickey has""" start="00:06:01.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""some YouTube videos which also come close. I mean, he""" start="00:06:06.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""invented the things. But in terms of having a full""" start="00:06:10.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""explanation of everything, it's my readme and it's also""" start="00:06:14.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the...""" start="00:06:21.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""The info manual of Guile Scheme, their documentation on""" start="00:06:23.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Surfy 171 is what I used to learn transducers and to""" start="00:06:28.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""re-implement them in other LISPs. So if you just want like a""" start="00:06:34.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""document explaining them, MyReadMe is actually the""" start="00:06:38.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""clearest that I've found. Awesome. Okay, next question.""" start="00:06:41.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""And I'm sorry, you gave a name, you referred to somebody's""" start="00:06:46.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""videos. Rich Hickey, the inventor of Clojure. Rich Hickey,""" start="00:06:50.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""thank you. Hope I got the spelling right, and maybe somebody""" start="00:06:55.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""can catch that and fix it. If not, I'll reach on. Thank you.""" start="00:07:00.400" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers?""" start="00:07:04.720" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""Reach on to the next question. Waters (Lazy Series in""" start="00:07:04.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Lisp, late 70s) said this should have been done as an""" start="00:07:08.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""additional compiler feature in compilers, but if not, must""" start="00:07:12.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""be a macro package. Do you think about that vis your CL,""" start="00:07:16.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Fennel, Elisp, porting of transducers? I think that""" start="00:07:21.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there's definitely""" start="00:07:27.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""some Galaxy Brain Lisp author out there is probably smart""" start="00:07:28.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""enough to turn a bunch of this stuff into macros. I believe""" start="00:07:36.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that's how the common Lisp library series works. It sees""" start="00:07:40.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that you were calling map or whatever, and it actually knows""" start="00:07:47.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that that's a special macro key. in order to be fast. I did not""" start="00:07:52.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""do that. The implementation as I have it is very simple and""" start="00:07:56.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""simplicity shouldn't be underestimated.""" start="00:08:01.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I love it. What a nice succinct answer. Even I can manage to""" start="00:08:05.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""type that out as I scroll us to the next question.""" start="00:08:13.560" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Does t-buffer-read provide a lazy stream that\'s linewise, or charwise, or do something else entirely?""" start="00:08:16.579" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""So, does t-buffer-read provide a lazy stream""" start="00:08:16.579" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that's line-wise or character-wise or do something else""" start="00:08:24.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""entirely?""" start="00:08:28.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Okay, there are two functions. I showed""" start="00:08:29.019" video="qanda-transducers" id="subtitle"]]
+[[!template text="""t-buffer-read. There's also one called t-file-read,""" start="00:08:31.588" video="qanda-transducers" id="subtitle"]]
+[[!template text="""which does that. You actually have the buffer open,""" start="00:08:35.074" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it's much more clever.""" start="00:08:38.683" video="qanda-transducers" id="subtitle"]]
+[[!template text="""t-buffer-read, I believe, is simpler. As long as you have an""" start="00:08:40.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Emacs list, what is called the current buffer active. I'm""" start="00:08:46.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""fairly sure you're able to just call next-line on it. I don't""" start="00:08:52.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""believe that I'm doing anything fancy there, looking for""" start="00:08:56.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""line ends. I believe I'm just grabbing the next line and then""" start="00:08:59.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""processing that line-wise. Very good.""" start="00:09:04.000" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Can the Elisp library be combined with the stream.el API or seq in general?""" start="00:09:09.424" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""Can the Elisp library be combined with the stream.el API""" start="00:09:09.424" video="qanda-transducers" id="subtitle"]]
+[[!template text="""or seq in general? I would say that these libraries""" start="00:09:17.304" video="qanda-transducers" id="subtitle"]]
+[[!template text="""are completely orthogonal. You saw that everything""" start="00:09:22.831" video="qanda-transducers" id="subtitle"]]
+[[!template text="""was prefixed by t-.""" start="00:09:27.597" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Basically, transducer is its own zone. However, one thing""" start="00:09:29.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that I do in the common lisp, which is theoretically""" start="00:09:36.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""possible for the Emacs Lisp as well, is kind of like little""" start="00:09:40.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""shim libraries. So I provide, at least for Common Lisp, for a""" start="00:09:44.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""number of, you know, popular sort of third-party""" start="00:09:48.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""collection types, I provide an ability to use them as""" start="00:09:51.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""sources. Maybe that's what you mean. Like""" start="00:09:55.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the built-in containers for Emacs Lisp are already""" start="00:09:59.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""supported. So, you know, a vector hash table and so on.""" start="00:10:04.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""make sense so i think what i heard there is yeah go ahead""" start="00:10:06.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""please sorry in terms of mixing like you know like for""" start="00:10:13.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""instance you know like seek dash map used in transducers""" start="00:10:17.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""we'll put it that way""" start="00:10:22.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""i was just gonna say i think it um it it sounds like you're""" start="00:10:28.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""saying Yeah, probably they are actually. We don't know yet""" start="00:10:31.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""about any places where they don't play nicely together. So""" start="00:10:37.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""quite possibly so. We can use sequence and transducers""" start="00:10:41.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""together, for example. As a source potentially, yeah. It's""" start="00:10:45.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""very easy because that just uses def generic. As long as you""" start="00:10:49.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""have a new, like if you have a new collection type, as long as""" start="00:10:54.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you implement a def method for it somewhere, it'll just""" start="00:10:57.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""magically work with this library. That's the magic of...""" start="00:11:01.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yeah, as an Emacs user enjoying, you know, sort of the""" start="00:11:12.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""renaissance of new features it's had, or sorry, Emacs ERC""" start="00:11:18.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""user for chat. I've seen a lot of awesome stuff get done in the""" start="00:11:21.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""last couple of years with generic set. JP never was working""" start="00:11:27.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""on that. And like, that's just making me my eyes pop and go,""" start="00:11:32.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""wow, that does make a whole lot of things simpler, doesn't""" start="00:11:36.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it? I think we're a lot of us running into generics and how""" start="00:11:39.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that solves problems in Emacs.""" start="00:11:44.280" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare?""" start="00:11:47.543" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""How does one debug a t-comp""" start="00:11:47.543" video="qanda-transducers" id="subtitle"]]
+[[!template text="""expression? Can you talk in terms of single step,""" start="00:11:50.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""step-by-step, intermediate results of the different""" start="00:11:55.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""statements you declare? Yes. So in Common Lisp, this is""" start="00:11:58.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""and sly stickers and things like that. In Emacs Lisp, it's a""" start="00:12:08.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""little bit, shall we say, more difficult. For step""" start="00:12:12.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""debugging,""" start="00:12:19.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""so what comp does is comp internally, it should be a macro,""" start="00:12:20.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""but currently it's not, although there's work to improve""" start="00:12:25.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that. It's doing an internal reduce and it's turning into""" start="00:12:28.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""one giant kind of composed lambda inside. So I don't know if""" start="00:12:33.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""step debugging would work there. However, we do have one""" start="00:12:37.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function called log, which lets you inspect intermediate""" start="00:12:43.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""results. So you could technically use that to inject""" start="00:12:47.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""yourself somewhere into the transduction chain and, you""" start="00:12:50.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""know, halt or, you know, inspect the current value, et""" start="00:12:54.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""cetera. So you get a bunch of questions lined up. I think""" start="00:12:57.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""we're coming up, uh, within our last five minutes, uh,""" start="00:13:01.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""before some declared, uh, reset time that we have""" start="00:13:04.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""internally to just roll our closing credits, so to speak.""" start="00:13:07.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Um, not that I would want to cut the question and answer""" start="00:13:11.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""short, but I might have to step away personally. But, um, as""" start="00:13:14.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""we discussed before, you can just kind of run the QA, however""" start="00:13:18.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you want here. Um, or, or take questions offline if you'd""" start="00:13:21.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""like to answer them off the pad. And I just want to say one more""" start="00:13:24.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""time. Kitt said it managed later. Thanks again for your talk""" start="00:13:28.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""for dedicating the time to this live QA. And I think we can see""" start="00:13:30.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""by the many questions that are here. So I'll try to kind of""" start="00:13:35.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""flip us through as many of them as I can with our last couple of""" start="00:13:40.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""minutes, if that sounds good. Alternately, this might be a""" start="00:13:42.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""good time if you have kind of wrap it up, final thoughts, as""" start="00:13:48.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Leo Sopanda saying. By all means, have at. Sure, thanks a""" start="00:13:52.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""lot. I'd say that if you are still curious, check out the""" start="00:13:58.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""read-me's because those have a lot of information,""" start="00:14:01.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""including a full description of the API and everything""" start="00:14:05.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that's available.""" start="00:14:09.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Otherwise, just give them a shot. Using these things is the""" start="00:14:10.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""best way to learn them, of course. I use them everywhere,""" start="00:14:16.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""basically, all across my Emacs list and all across my common""" start="00:14:21.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""list now. They get a lot of mileage. All right. You're""" start="00:14:24.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""speaking our language now. As Emacs users, all our ears poke""" start="00:14:29.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""up when you say, I'm getting a lot of mileage. I'm using it""" start="00:14:33.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""across everything. Every Emacs user has a story that""" start="00:14:36.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""harmonizes with that, I think.""" start="00:14:39.880" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Is there a path for transducers to enable elisp processing of otherwise overly large datasets as if just normal Emacs \"buffers\" (i.e. just pulling one thing at a time so essentially stream-like under the hood but buffer-like in interface), with none of the usual perf issues with a traditional buffer structure?""" start="00:14:42.495" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""So our next question, is""" start="00:14:42.495" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there a path for transducers to enable Elisp processing or""" start="00:14:44.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""otherwise overly large data sets as if just normal Emacs""" start="00:14:48.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""buffers, i.e. just pulling one thing at a time. So""" start="00:14:54.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""essentially stream like under the hood, but buffer like an""" start="00:14:56.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""interface. I think that makes sense to me. with none of the""" start="00:15:00.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""usual performance issues, like as if, you know, the history""" start="00:15:03.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""with long files is what that brings to mind, I guess. Yes, so""" start="00:15:07.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""as you saw before, the withBufferRead sort of stream""" start="00:15:11.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function does have to have the actual buffer in memory, and""" start="00:15:15.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""then you can go really fast. But there's another one with""" start="00:15:19.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""file read. Now, again, I haven't tried to optimize that yet.""" start="00:15:22.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""But in theory, it is able to read right from the underlying""" start="00:15:26.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""file without having to open it as a buffer first.""" start="00:15:30.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Awesome. Ari, the performance issues mentioned, and that""" start="00:15:32.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""popped up recently in the list and forums, to what extent""" start="00:15:39.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""does tail call optimization and other mechanisms like""" start="00:15:43.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""inlining, garbage collection friendliness, and so on,""" start="00:15:46.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""could these alleviate issues, enable their use at little to""" start="00:15:50.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""no extra costs? I feel like we're leading the witness here,""" start="00:15:55.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""but I'm sure you see where we're going. Yeah, no problem. So""" start="00:15:58.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in terms of tail optimization, that's already happening""" start="00:16:01.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""because the internal loop mechanism is using CL labels. And""" start="00:16:03.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in Emacs Lisp, CL labels is just a macro that is like""" start="00:16:09.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""extremely tail recursive. So that's very, very fast. It's""" start="00:16:12.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""not tail recursive, but it's using like goto. So it's""" start="00:16:16.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""extremely, extremely fast, like the raw looping of it. So,""" start="00:16:19.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""okay, well then where does the slowness come from? It's""" start="00:16:22.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""probably coming from those lambdas and it's probably""" start="00:16:24.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""coming from, uh, like extra consing, extra allocation""" start="00:16:26.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""somewhere, which is, um, sort of what you were, what you're""" start="00:16:32.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""referring to with the GC friendliness. So perhaps there's""" start="00:16:36.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""some, um, um, yeah, some, like some fusion that I can do to""" start="00:16:38.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""speed it up. Yeah, that just sounds fascinating endlessly.""" start="00:16:45.200" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry?""" start="00:16:51.200" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""Are there options to like read from a CSV, JSON, produce an""" start="00:16:51.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""alist or plist instead of hash table? Absolutely.""" start="00:16:55.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yes, I need to double check that, but we can read both CSV and""" start="00:17:01.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""JSON, and you should be able to just turn on the plist option.""" start="00:17:06.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I will double check, but there's fairly free conversion""" start="00:17:10.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""between those three types because hash table is not always""" start="00:17:14.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""what you want. And actually, I suspect that slowness that we""" start="00:17:18.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""saw in the demo before was because it was allocating hash""" start="00:17:22.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""tables for every, like, all of the 50,000 lines. And had it""" start="00:17:24.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""been a plist, it would have been faster. Interesting, so""" start="00:17:29.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""maybe there's opportunities even if you end up with hash""" start="00:17:32.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""lists, but then they're shared strategically and you pay""" start="00:17:35.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the cost of a little extra layer in there that buckets them""" start="00:17:38.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""together the way that we might group files by the first four""" start="00:17:42.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""characters in the file name once we've got a million files.""" start="00:17:46.440" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough?""" start="00:17:50.520" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""Anyway, is the Common Lisp version ready for production""" start="00:17:50.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""use? Do you want to comment on API stability? I use it all the""" start="00:17:54.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""time. I'm writing a game in Common Lisp right now, and I'm""" start="00:17:59.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""using transducers everywhere in there, and it doesn't even""" start="00:18:04.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""make a dent in the frame rate, and I'm using them""" start="00:18:08.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""extensively. Okay, well, I'll just read from chat. Thanks""" start="00:18:11.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""so much for the answers.""" start="00:18:15.360" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Do we need a pre-written \"t-\" version for every already existing reducing function like + or is there a function to construct them from already defined reducer 2-arg functions?""" start="00:18:17.477" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""Do we need a pre-written or t-minus""" start="00:18:17.477" video="qanda-transducers" id="subtitle"]]
+[[!template text="""version for every already existing reducing function,""" start="00:18:20.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""plus, as an example? Or is there a function that constructs,""" start="00:18:24.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in my, I'm going to add the word, auto-visualifies them""" start="00:18:30.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""already, auto-defines or something, or just generically""" start="00:18:33.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""wraps function calls some way? already defined. This is""" start="00:18:37.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""basically fold. Some built-in functions like plus already""" start="00:18:42.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function like reducers. It's a coincidence that they do""" start="00:18:49.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""that. But there's an example in the README. Max is one that""" start="00:18:52.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""does not act like that. For instance, maybe I could screen""" start="00:18:56.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""share later, but if you just type in plus one, If you call plus""" start="00:19:00.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""one in Emacs or Common Lisp, you get back one. It actually""" start="00:19:06.480" video="qanda-transducers" id="subtitle"]]
+[[!template text="""only needs one argument. If you only type plus, it actually""" start="00:19:10.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""gives you zero. Plus and multiple satisfy the API of""" start="00:19:15.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""reducers. But if you have one that doesn't, like the max""" start="00:19:20.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function, and similarly, just type in plus as a function""" start="00:19:24.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""call, just plus with nothing else, and you'll see. No, as a""" start="00:19:28.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""function. zero will come out. This basically means it""" start="00:19:32.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""satisfies the reducer API. But a function like max does not.""" start="00:19:37.200" video="qanda-transducers" id="subtitle"]]
+[[!template text="""If you just type in max and then one, it won't work. Pardon me,""" start="00:19:43.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""it did. But if you type in max with nothing else, it wouldn't""" start="00:19:48.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""work.""" start="00:19:54.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Hence, we have to wrap it in something like fold. I would say""" start="00:19:55.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""go look at the fold function. Right, which that I won't do.""" start="00:19:58.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'm not that well enough prepped. Darn it. Leo would have""" start="00:20:01.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""been here, but oh, well, you got me. Yeah, no problem. But""" start="00:20:04.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""fold is sort of the ultimate reducer function. Great. So is""" start="00:20:08.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there, where was I? Here we go. We're way past this, right? So""" start="00:20:16.880" video="qanda-transducers" id="subtitle"]]
+
+[[!template new="1" text="""Q: Is the compelling argument for transducers is that it's a better abstraction?""" start="00:20:26.320" video="qanda-transducers" id="subtitle"]]
+
+[[!template text="""is the compiling argument for transducers that it's a""" start="00:20:26.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""better abstraction? It seems like there are concerns,""" start="00:20:34.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""objections, while problematically valid focused on""" start="00:20:38.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""implementation. Can this abstraction allow for advances""" start="00:20:42.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""in implementation? Yes, what I've basically done is mostly""" start="00:20:45.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""followed the pattern of usage that exists in Clojure and in""" start="00:20:50.560" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Schemes SERP 171. In theory, the service level API is the""" start="00:20:56.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""same no matter where you're using this, and that's the idea.""" start="00:21:01.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""If you learn them in one list, you should be able to use them""" start="00:21:05.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""everywhere. Then what it's actually doing under the hood is""" start="00:21:08.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""free for us to change around. My implementations are mostly""" start="00:21:12.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""based on the scheme with a few alterations here and there.""" start="00:21:18.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""And in the Common Lisp case, like adding some Common Lisp""" start="00:21:23.680" video="qanda-transducers" id="subtitle"]]
+[[!template text="""isms""" start="00:21:27.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""to improve usage like UX a little bit. But overall, we are""" start="00:21:27.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""free to do whatever we want internally to speed up""" start="00:21:34.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""performance. I just haven't done that work. Awesome.""" start="00:21:38.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Awesome. So here's where I have to, where we're getting the""" start="00:21:42.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""hook. We've just been pulled off the stream. The viewers""" start="00:21:47.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""just saw the crawl by as it sent us over to the other pad where I""" start="00:21:50.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""get to jump on and get involved with that now. But I can't""" start="00:21:54.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""thank you enough, Colin. Would you like me to stop the""" start="00:21:57.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""recording here? Any other comments you'd like to make? Uh,""" start="00:22:00.360" video="qanda-transducers" id="subtitle"]]
+[[!template text="""yeah, sure. Like, I mean, I'll stick around for any more live""" start="00:22:03.800" video="qanda-transducers" id="subtitle"]]
+[[!template text="""questions. I'm looking at both IRC and, and, um, uh, big blue""" start="00:22:06.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""button here. So if people have more questions, I'll hang""" start="00:22:10.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""around for a bit. I'm going to leave the channel open. I see""" start="00:22:13.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you do have a few people in here, so I'm just going to go ahead""" start="00:22:15.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""and leave the recording. We can always trim it. Um, trim it""" start="00:22:17.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""up. If you, uh, let us know, Hey, the last 10 minutes weren't""" start="00:22:20.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""anything, you know, or whatever. No, no pressure, no""" start="00:22:24.280" video="qanda-transducers" id="subtitle"]]
+[[!template text="""worries, no mistakes. Thank you. Really appreciate you.""" start="00:22:27.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yep. Thanks a lot.""" start="00:22:29.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""OK, does anyone else have some questions? I see Mohsen in the""" start="00:22:31.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""BigBlueButton chat is asking how I made the video. So the""" start="00:22:48.400" video="qanda-transducers" id="subtitle"]]
+[[!template text="""presentation itself was done with RevealJS from Org Mode.""" start="00:22:52.840" video="qanda-transducers" id="subtitle"]]
+[[!template text="""So as you saw, I had a raw Org Mode buffer, which was""" start="00:22:59.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""which was the presentation itself, which I then just""" start="00:23:03.640" video="qanda-transducers" id="subtitle"]]
+[[!template text="""exported with a few certain settings, a few""" start="00:23:09.320" video="qanda-transducers" id="subtitle"]]
+[[!template text="""customizations. And then for screen recording, I used OBS,""" start="00:23:11.760" video="qanda-transducers" id="subtitle"]]
+[[!template text="""which worked flawlessly on Arch Linux. I used Sway,""" start="00:23:15.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Wayland, and all of that. So all of that just worked, which""" start="00:23:19.720" video="qanda-transducers" id="subtitle"]]
+[[!template text="""was very impressive. Where do the HTML host the""" start="00:23:23.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""presentation? I don't have that presentation hosted""" start="00:23:28.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""anywhere.""" start="00:23:51.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I'll look at the.""" start="00:23:52.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""I don't see that.""" start="00:23:59.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Here it is. So we've got the file here as well.""" start="00:24:00.080" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Looks like that's it for questions, basically.""" start="00:24:08.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yep, and it looks like everyone's moved on for now. Let's""" start="00:24:11.000" video="qanda-transducers" id="subtitle"]]
+[[!template text="""see. I mean, it would be so this is answering lounge 81 on IRC.""" start="00:24:14.920" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Yeah, like, if we really wanted to go that hardcore, maybe""" start="00:24:20.160" video="qanda-transducers" id="subtitle"]]
+[[!template text="""there's some like C level stuff that we could""" start="00:24:24.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""you know, significant demand for such a thing. You know, so""" start="00:24:29.440" video="qanda-transducers" id="subtitle"]]
+[[!template text="""far there hasn't been such demand, but maybe there will be in""" start="00:24:36.120" video="qanda-transducers" id="subtitle"]]
+[[!template text="""the future. Yeah, perhaps there's some custom stuff we""" start="00:24:39.240" video="qanda-transducers" id="subtitle"]]
+[[!template text="""could do.""" start="00:24:42.520" video="qanda-transducers" id="subtitle"]]
+[[!template text="""And otherwise, magic one.""" start="00:24:43.040" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Well, it looks like some people are quite happy with this.""" start="00:24:48.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""All right. That's about what I've seen. So why don't we end it""" start="00:25:00.600" video="qanda-transducers" id="subtitle"]]
+[[!template text="""here? I think I can control the recording from my end. If I""" start="00:25:14.960" video="qanda-transducers" id="subtitle"]]
+[[!template text="""pause it, will that work? All right. Thank you, everyone.""" start="00:25:19.840" video="qanda-transducers" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20transducers%3A%20Transducers%3A%20finally%2C%20ergonomic%20data%20processing%20for%20Emacs%21)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2024/info/transducers-before.md b/2024/info/transducers-before.md
index 20da441c..4da3ef9d 100644
--- a/2024/info/transducers-before.md
+++ b/2024/info/transducers-before.md
@@ -28,6 +28,19 @@ Status: TO_CAPTION_QA
# Q&A
-<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-transducers">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main.vtt">Download --answers--main.vtt</a> (unedited)</li></ul></div></div>
+<div class="vid"><video controls preload="none" id="transducers-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="transducers-qanda" data="""
+01:09.920 Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results
+05:40.840 Q: Do you know of any theoretical texts on transducers?
+07:04.720 Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers?
+08:16.579 Q: Does t-buffer-read provide a lazy stream that\'s linewise, or charwise, or do something else entirely?
+09:09.424 Q: Can the Elisp library be combined with the stream.el API or seq in general?
+11:47.543 Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare?
+14:42.495 Q: Is there a path for transducers to enable elisp processing of otherwise overly large datasets as if just normal Emacs \"buffers\" (i.e. just pulling one thing at a time so essentially stream-like under the hood but buffer-like in interface), with none of the usual perf issues with a traditional buffer structure?
+16:51.200 Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry?
+17:50.520 Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough?
+18:17.477 Q: Do we need a pre-written \"t-\" version for every already existing reducing function like + or is there a function to construct them from already defined reducer 2-arg functions?
+20:26.320 Q: Is the compelling argument for transducers is that it's a better abstraction?
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-transducers">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main--chapters.vtt">Download --answers--main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main.vtt">Download --answers--main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.webm">Download --answers.webm (57MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file