WEBVTT 00:00:00.000 --> 00:00:02.839 So as we wait for people to drop 00:00:02.840 --> 00:00:04.279 in their questions and so on, 00:00:04.280 --> 00:00:08.719 I'll just kind of add a couple of thoughts. 00:00:08.720 --> 00:00:12.039 I'm not personally much of a Python developer, 00:00:12.040 --> 00:00:17.759 so I'm just curious as to your thoughts on using Emacs 00:00:17.760 --> 00:00:24.319 and kind of the development methodology you showed 00:00:24.320 --> 00:00:26.519 as a way to learn Python. 00:00:26.520 --> 00:00:29.239 Yeah, I think Emacs is perfect for it. 00:00:29.240 --> 00:00:31.759 If you're already an Emacs user 00:00:31.760 --> 00:00:35.599 and you have the keyboard commands 00:00:35.600 --> 00:00:38.719 and everything uploaded in your brain, 00:00:38.720 --> 00:00:42.599 then learning Python shouldn't be too difficult, 00:00:42.600 --> 00:00:44.839 because there's a lot of good packages. 00:00:44.840 --> 00:00:51.319 For Python, I'm using a thing called elpy, 00:00:51.320 --> 00:00:55.679 which is really good. for Python development. 00:00:55.680 --> 00:01:00.039 So you have this connection to a running backend, 00:01:00.040 --> 00:01:06.039 the Jedi Python backend that will give you autocomplete 00:01:06.040 --> 00:01:09.039 and some refactoring and things like that. 00:01:09.040 --> 00:01:14.439 So I think Emacs is really good for Python development. 00:01:14.440 --> 00:01:16.679 So what are some other... 00:01:16.680 --> 00:01:18.319 How long have you been using Emacs? 00:01:18.320 --> 00:01:19.599 Kind of a general question. 00:01:19.600 --> 00:01:23.599 Sorry if you covered this and I missed it. 00:01:23.600 --> 00:01:26.599 It's not that long actually. 00:01:26.600 --> 00:01:31.599 I think it was in 2019 or 2020. 00:01:31.600 --> 00:01:34.799 It's when I started to, I was really fortunate enough 00:01:34.800 --> 00:01:38.039 to join a team that had chosen to 00:01:38.040 --> 00:01:42.919 develop an app in Lisp, in Clojure. 00:01:42.920 --> 00:01:45.039 yeah and i didn't know anything about it 00:01:45.040 --> 00:01:47.359 i didn't know lisp at all so it was like brand new 00:01:47.360 --> 00:01:50.639 so i really had struggling to to learn it 00:01:50.640 --> 00:01:53.559 but at the same time i was looking for okay 00:01:53.560 --> 00:01:55.279 which editor should i pick to to do this 00:01:55.280 --> 00:02:00.239 and i was before that and like an ide person 00:02:00.240 --> 00:02:02.919 so i do use this big ideas 00:02:02.920 --> 00:02:07.839 and this time i figured maybe i should try something different. 00:02:07.840 --> 00:02:10.239 And I read this book about Clojure development 00:02:10.240 --> 00:02:13.239 and the author was really into Emacs 00:02:13.240 --> 00:02:17.159 and he was like, Clojure is really good for, 00:02:17.160 --> 00:02:19.159 Emacs is really good for Clojure development. 00:02:19.160 --> 00:02:20.759 So that's how I started. 00:02:20.760 --> 00:02:24.479 So I like to learn, rewired my brain 00:02:24.480 --> 00:02:27.639 to learn all how Emacs works 00:02:27.640 --> 00:02:30.959 as opposed to like the mainstream editors out there. 00:02:30.960 --> 00:02:33.519 So that's how it started. So like five years ago, maybe. 00:02:33.520 --> 00:02:39.519 Cool. Um, so did you, what were some other, 00:02:39.520 --> 00:02:43.999 what, what, what editor were you primarily using before you? 00:02:44.000 --> 00:02:49.399 Um, um, back, back then it was like, 00:02:49.400 --> 00:02:52.719 I think it was like Sublime Text. 00:02:52.720 --> 00:02:57.719 And also some IntelliJ, sorry, JetBrains, their tools. 00:02:57.720 --> 00:03:04.599 And before that, I was in the Microsoft world, 00:03:04.600 --> 00:03:08.199 so it's like Microsoft toolings basically. 00:03:08.200 --> 00:03:10.879 So I moved towards open source tooling 00:03:10.880 --> 00:03:16.679 and also open source development. Very cool. 00:03:16.680 --> 00:03:19.119 So I see we've got a couple people 00:03:19.120 --> 00:03:23.479 that have joined on the BBB here with us 00:03:23.480 --> 00:03:24.959 for the live question. 00:03:24.960 --> 00:03:29.199 You're welcome to just throw your question in this chat, 00:03:29.200 --> 00:03:32.039 or if you've got a microphone connected, 00:03:32.040 --> 00:03:34.599 you're welcome to come off mute 00:03:34.600 --> 00:03:36.759 and throw a question in that way as well. 00:03:36.760 --> 00:03:40.359 You can join on liberachat IRC. 00:03:40.360 --> 00:03:44.119 You can join pound emacs comp hyphen dev, 00:03:44.120 --> 00:03:47.279 and we would happily take your questions there. 00:03:47.280 --> 00:03:49.479 Meanwhile, I've got a question 00:03:49.480 --> 00:03:52.719 coming in on the pad right now, so take that next. 00:03:52.720 --> 00:03:55.239 I'll just read it out. 00:03:55.240 --> 00:03:58.239 I don't quite see how your setup works with IPython. 00:03:58.240 --> 00:04:00.279 Sorry if you already answered this. 00:04:00.280 --> 00:04:03.519 Do you have your Emacs connect to the IPython kernel 00:04:03.520 --> 00:04:11.919 over XMPP socket that IPython sets up? Oh, good question. 00:04:11.920 --> 00:04:18.039 So what I've done is I have two different connections. 00:04:18.040 --> 00:04:21.359 Like if I'm going to do this regular day-to-day Python work 00:04:21.360 --> 00:04:24.399 when I want to evaluate code 00:04:24.400 --> 00:04:29.959 without thinking about the external connection, 00:04:29.960 --> 00:04:31.559 then I just use IPython 00:04:31.560 --> 00:04:36.799 and I have my I'm using the LP Python package 00:04:36.800 --> 00:04:39.839 so that you can set up which of the REPLs 00:04:39.840 --> 00:04:42.799 you want to start when you evaluate code. 00:04:42.800 --> 00:04:46.759 So that's IPython. But in the second part of the talk 00:04:46.760 --> 00:04:50.919 where I connect to an externally running app, 00:04:50.920 --> 00:04:55.839 then I have set up the same configuration 00:04:55.840 --> 00:05:00.959 but to start Jupyter, the Jupyter console instead. 00:05:00.960 --> 00:05:04.959 And when I start it up, it's going to, it's like a dialogue 00:05:04.960 --> 00:05:09.599 that will ask for the ID of a running kernel. 00:05:09.600 --> 00:05:10.839 Because if you start a kernel, 00:05:10.840 --> 00:05:12.919 if you start something in a kernel, 00:05:12.920 --> 00:05:17.079 you will get this unique ID so you can connect to it. 00:05:17.080 --> 00:05:19.679 So that's kind of the difference. 00:05:19.680 --> 00:05:21.639 So I have two different ways 00:05:21.640 --> 00:05:26.599 of starting up the Python kernel. REPLs, either PyPython, 00:05:26.600 --> 00:05:29.559 which I do for most of my daily work, 00:05:29.560 --> 00:05:32.239 or if I want this connection to a running app, 00:05:32.240 --> 00:05:38.479 I'm using the Jupyter console, basically. 00:05:38.480 --> 00:05:45.199 Have you explored Org Babel at all? 00:05:45.200 --> 00:05:48.199 Can you talk about your approach 00:05:48.200 --> 00:05:52.279 compared to the Babel workflow? Oh, interesting. 00:05:52.280 --> 00:05:54.879 No, I haven't actually, I haven't done that, 00:05:54.880 --> 00:05:59.119 but I think it's similar to Jupyter notebooks, 00:05:59.120 --> 00:06:02.359 so you can do some interactive, you can run Python there, 00:06:02.360 --> 00:06:03.279 but I haven't, 00:06:03.280 --> 00:06:08.119 I have too little knowledge about it to elaborate on that. 00:06:08.120 --> 00:06:24.159 Sorry. Very good. All right. 00:06:24.160 --> 00:06:26.999 I'm just going to peek over to the other chats 00:06:27.000 --> 00:06:28.839 and make sure I'm not missing questions. 00:06:28.840 --> 00:06:35.519 Sorry, I got a lot of screens. A little dance here. 00:06:35.520 --> 00:06:41.239 All right, and I do see a few people in the chat. 00:06:41.240 --> 00:06:44.559 I'll just say again, if you've joined us on the BBB, 00:06:44.560 --> 00:06:46.999 you're more than welcome to jump in with your questions 00:06:47.000 --> 00:06:50.119 or put questions into the chat here. 00:06:50.120 --> 00:06:52.879 I'm not a big Python person, 00:06:52.880 --> 00:06:57.599 so I can't get into the really interesting questions 00:06:57.600 --> 00:07:01.639 that are probably more relevant, 00:07:01.640 --> 00:07:05.799 just because a lot of it's kind of over my head. 00:07:05.800 --> 00:07:12.879 Have you seen the miramo.io notebooks? 00:07:12.880 --> 00:07:15.279 These use standard Python? 00:07:15.280 --> 00:07:18.119 Oh, yes, I've seen, I haven't tried it myself, 00:07:18.120 --> 00:07:19.359 but I've seen it. 00:07:19.360 --> 00:07:22.639 It's very, I think it's a very interesting approach 00:07:22.640 --> 00:07:26.279 that probably will solve a lot of these things 00:07:26.280 --> 00:07:28.839 with interactive development in general, 00:07:28.840 --> 00:07:31.839 but because I think it's basically Python files 00:07:31.840 --> 00:07:36.439 and not the, not this other file format that you have 00:07:36.440 --> 00:07:40.799 for the regular notebook setup. 00:07:40.800 --> 00:07:45.559 So I have that in my list of things to try out in future, 00:07:45.560 --> 00:08:00.719 but it looks really, really cool. Awesome. 00:08:00.720 --> 00:08:06.719 Yeah, I'm hesitant to just ask you really boilerplate questions. 00:08:06.720 --> 00:08:11.239 You get an expert, a souffle chef, 00:08:11.240 --> 00:08:16.599 and you ask about making pasta or some other sort of thing. 00:08:16.600 --> 00:08:20.559 No, go ahead. Go ahead. I'm glad to ask any questions. 00:08:20.560 --> 00:08:25.679 So just generally about Emacs as a coding developer, 00:08:25.680 --> 00:08:26.999 what are the features 00:08:27.000 --> 00:08:28.479 that you tend to lean on more heavily? 00:08:28.480 --> 00:08:34.319 you know completion or you know what what have you 00:08:34.320 --> 00:08:36.199 maybe I could put it better 00:08:36.200 --> 00:08:40.079 as what have you spent more time configuring for Emacs 00:08:40.080 --> 00:08:45.439 to facilitate development? 00:08:45.440 --> 00:08:49.639 Yes initially it was basically taking away 00:08:49.640 --> 00:08:51.319 some of the UI features 00:08:51.320 --> 00:08:56.599 basically disabling it and and but fairly quickly 00:08:56.600 --> 00:08:58.919 for for both closure development 00:08:58.920 --> 00:09:04.599 where i was using cider which is like a really good uh good tool um 00:09:04.600 --> 00:09:08.159 and for python when i quickly found lp elp 00:09:08.160 --> 00:09:10.599 i'm not sure how to pronounce it 00:09:10.600 --> 00:09:16.039 but you you get so much uh good things from these tools 00:09:16.040 --> 00:09:21.719 so what i've done additionally is like theme 00:09:21.720 --> 00:09:27.159 and maybe having this environment 00:09:27.160 --> 00:09:31.479 that is without disturbance. 00:09:31.480 --> 00:09:34.839 So I really like the code to have my full attention. 00:09:34.840 --> 00:09:41.239 So I rarely have, maybe I have like a preview sometimes, 00:09:41.240 --> 00:09:45.359 but mostly it's the window or the buffer where I have my code 00:09:45.360 --> 00:09:49.879 and I've minimized the running REPL buffer. 00:09:49.880 --> 00:09:53.439 So sometimes it's, I'm hiding it, but it's still active. 00:09:53.440 --> 00:09:57.679 So basically that's how I configured, 00:09:57.680 --> 00:10:00.279 spent my configuration doing that. 00:10:00.280 --> 00:10:04.799 And also lately, trying out some LLM tools. 00:10:04.800 --> 00:10:09.279 So I think I have two packages 00:10:09.280 --> 00:10:12.239 that I'm using actively today. 00:10:12.240 --> 00:10:15.799 And my favorite is a tool called ECA, 00:10:15.800 --> 00:10:20.199 which is a LLM chat assistant, which is really good. 00:10:20.200 --> 00:10:24.399 The developer is also an Emacs enthusiast. 00:10:24.400 --> 00:10:33.639 So are you the type of person that tends to work with 00:10:33.640 --> 00:10:37.039 like a master builder, build your own Emacs? 00:10:37.040 --> 00:10:40.799 Are you using the system packages? 00:10:40.800 --> 00:10:43.615 What's your approach to just get Emacs 00:10:43.616 --> 00:10:45.368 up and off the ground for yourself? 00:10:45.369 --> 00:10:52.519 I'm not there yet with doing my own builds. 00:10:52.520 --> 00:10:55.599 Currently, I'm on macOS, 00:10:55.600 --> 00:11:00.039 so I'm installing Emacs through broom basically, homebrew. 00:11:00.040 --> 00:11:04.919 I've yet so much Emacs things to learn 00:11:04.920 --> 00:11:07.739 because I'm not even using org yet. 00:11:07.740 --> 00:11:11.559 I'm exploring the this editor. 00:11:11.560 --> 00:11:14.799 So I feel like I'm very much a beginner. 00:11:14.800 --> 00:11:17.919 I'm not using Emacs to its full potential yet. 00:11:17.920 --> 00:11:23.279 So I'm counting on that I will be more and more using Emacs 00:11:23.280 --> 00:11:29.119 for more and more different tasks basically. 00:11:29.120 --> 00:11:32.559 And I'm just seeing a comment. 00:11:32.560 --> 00:11:35.799 Ed Stallthroat says, thank you 00:11:35.800 --> 00:11:40.839 for publishing your configuration and offers a link. 00:11:40.840 --> 00:11:41.879 Oh, great. Great. 00:11:41.880 --> 00:11:46.359 Yes, those things that I showed in my talk, 00:11:46.360 --> 00:11:49.319 I haven't made any, I haven't packaged it yet, 00:11:49.320 --> 00:11:51.199 but everything is on my GitHub, 00:11:51.200 --> 00:11:57.079 and I've tried to separate each feature 00:11:57.080 --> 00:11:59.639 in separate LSP files. 00:11:59.640 --> 00:12:04.319 So it should be, I hope that it's fairly straightforward 00:12:04.320 --> 00:12:08.959 to understand how it's set up. Very good. 00:12:08.960 --> 00:12:11.119 Let me just scroll down, 00:12:11.120 --> 00:12:12.999 make sure I'm not missing questions here. 00:12:13.000 --> 00:12:16.959 Okay, I think those are the questions that we have. 00:12:16.960 --> 00:12:20.879 We can take a couple more minutes if you're open to that, 00:12:20.880 --> 00:12:24.039 just for people to consider. 00:12:24.040 --> 00:12:26.119 I know we're coming up on the lunch hour, 00:12:26.120 --> 00:12:31.679 so it may be that people are jogging off to get some food. 00:12:31.680 --> 00:12:36.599 Yeah, in Sweden, it's dinner time. 00:12:36.600 --> 00:12:40.079 It's like 6 p.m. soon. That fits. 00:12:40.080 --> 00:12:46.439 So are you involved with local Emacs meetups? 00:12:46.440 --> 00:12:49.079 I know that your part of the world 00:12:49.080 --> 00:12:51.799 has a really brisk community, 00:12:51.800 --> 00:12:55.279 you know, a lot of, just a lot going on. 00:12:55.280 --> 00:12:58.799 I'm always seeing in Sacha's Emacs News, 00:12:58.800 --> 00:13:02.319 all of the different meetups and so on. 00:13:02.320 --> 00:13:03.519 I'm curious if you're plugged 00:13:03.520 --> 00:13:08.719 into a local community there at all, No, I haven't. 00:13:08.720 --> 00:13:10.759 Not in any community. I haven't done that yet, 00:13:10.760 --> 00:13:15.679 but we are like friends that I've gotten to know 00:13:15.680 --> 00:13:23.439 through work and through like open source work that also use Emacs. 00:13:23.440 --> 00:13:28.959 We talk and share our conflicts 00:13:28.960 --> 00:13:30.799 basically on a regular basis, 00:13:30.800 --> 00:13:35.999 because we are, at least in the Python community, 00:13:36.000 --> 00:13:37.399 we're like a minority, 00:13:37.400 --> 00:13:39.799 like other editors are like the standards. 00:13:39.800 --> 00:13:45.879 And at work, I'm sharing what I'm doing, 00:13:45.880 --> 00:13:48.679 just like my talk here to my fellow co-workers 00:13:48.680 --> 00:13:53.999 that are not on Emacs, but I hope to get their interest up. 00:13:54.000 --> 00:13:58.999 So many of us Emacs users are Emacs evangelists. 00:13:59.000 --> 00:14:06.201 Yeah. It's the Venn diagram of Emacs user 00:14:06.202 --> 00:14:08.868 and Emacs evangelist is a circle, I think. 00:14:08.869 --> 00:14:11.035 Yeah, I think so too. 00:14:11.036 --> 00:14:16.559 Well, David, I super appreciate your talk 00:14:16.560 --> 00:14:18.759 and thank you so much also for... 00:14:18.760 --> 00:14:24.639 I'm sorry, I saw another question here. Let me cover that. 00:14:24.640 --> 00:14:27.959 Can you repeat the name of the LLM 00:14:27.960 --> 00:14:30.319 that you specifically mentioned there? 00:14:30.320 --> 00:14:36.784 Oh, it's a tool called ECA, E-C-A. 00:14:36.785 --> 00:14:44.076 It's basically a server and clients, 00:14:44.077 --> 00:14:49.160 and it's not only Emacs. It has support for other editors, 00:14:49.161 --> 00:14:53.119 but I think the primary support is for, 00:14:53.120 --> 00:14:57.599 at least the developer who does it is an Emacs user, 00:14:57.600 --> 00:15:01.039 and so it's like Emacs first, basically. 00:15:01.040 --> 00:15:04.959 And his name is Eric Dallo. 00:15:04.960 --> 00:15:09.679 He's a great developer in the Clojure community. 00:15:09.680 --> 00:15:13.159 He has done some LSP work in the Clojure world, too. 00:15:13.160 --> 00:15:17.159 What was the last name? What was Eric's last name? 00:15:17.160 --> 00:15:23.919 Eric Dallo, D-A-L-L-O. Yeah. 00:15:23.920 --> 00:15:31.879 So I think that's a great tool, but I also use another tool 00:15:31.880 --> 00:15:38.919 that for some reason I forgot to have this interactive way of, 00:15:38.920 --> 00:15:43.599 because I think they are developing that feature too, 00:15:43.600 --> 00:15:46.439 but I have another LLM that has support 00:15:46.440 --> 00:15:50.599 for requests and callbacks basically. 00:15:50.600 --> 00:15:53.799 So you can do something programmatically. 00:15:53.800 --> 00:15:55.919 So that's how I've solved my LLM thing 00:15:55.920 --> 00:16:00.759 where I select some Python variables 00:16:00.760 --> 00:16:05.599 and tell the LLM to populate it with some fake data 00:16:05.600 --> 00:16:08.879 so I can send that to the REPL. 00:16:08.880 --> 00:16:11.479 But for some reason, I forgot the name of it. 00:16:11.480 --> 00:16:25.159 I can look it up. Just give me one minute, sorry. 00:16:25.160 --> 00:16:35.559 oh yeah gptel gptel that's that's the name of the other tool 00:16:35.560 --> 00:16:37.879 which is uh also a good tool yeah 00:16:37.880 --> 00:16:41.279 but ECA is more like a more chat companion 00:16:41.280 --> 00:16:46.679 and this you can also you can tell it to write code and things like that 00:16:46.680 --> 00:16:51.679 but i mostly use it for reviews and research 00:16:51.680 --> 00:16:54.599 and like asking questions 00:16:54.600 --> 00:17:00.279 because i want to my I don't have a problem with typing code. 00:17:00.280 --> 00:17:01.919 I don't think that slows me down, 00:17:01.920 --> 00:17:05.639 but maybe getting some quick feedback 00:17:05.640 --> 00:17:07.479 on the actual work that I'm doing, 00:17:07.480 --> 00:17:08.999 that's what I'm using LLM for, 00:17:09.000 --> 00:17:13.519 on LLM for two, mostly today. That really hits for me. 00:17:13.520 --> 00:17:15.199 I don't mind typing either. 00:17:15.200 --> 00:17:18.479 I think somehow having things be so simple 00:17:18.480 --> 00:17:20.879 and in many cases just automated, 00:17:20.880 --> 00:17:22.719 Emacs just does the right thing. 00:17:22.720 --> 00:17:26.519 It makes me hungry to type. I want to type more. 00:17:26.520 --> 00:17:28.559 It feels like every keystroke does a little more. 00:17:28.560 --> 00:17:33.519 Speaking of evangelism, thank you. Thank you 00:17:33.520 --> 00:17:35.599 pop up for the for the question. 00:17:35.600 --> 00:17:39.439 I'm just going to peek one more time through 00:17:39.440 --> 00:17:41.159 and I don't see a backlog. 00:17:41.160 --> 00:17:44.519 There are a couple more comments here 00:17:44.520 --> 00:17:49.319 linking linking to the ECA Emacs and gptel. 00:17:49.320 --> 00:17:52.239 Comment also saying very cool setup. 00:17:52.240 --> 00:17:56.959 So I suppose I'll I'll hand it over to you 00:17:56.960 --> 00:17:59.319 if you have kind of final thoughts or. 00:17:59.320 --> 00:18:02.079 additional wisdoms you want to share 00:18:02.080 --> 00:18:05.399 I really appreciate your taking the time to prepare this presentation 00:18:05.400 --> 00:18:11.079 especially to do the live Q&A with us. Thank you 00:18:11.080 --> 00:18:13.919 and I haven't anything more than that I will 00:18:13.920 --> 00:18:19.479 of course I will continue like have evolving my setup 00:18:19.480 --> 00:18:21.359 because there's like new tools 00:18:21.360 --> 00:18:24.759 and maybe new ideas also coming up 00:18:24.760 --> 00:18:28.719 and my What I'm aiming for in Python development 00:18:28.720 --> 00:18:30.479 is the great developer experience 00:18:30.480 --> 00:18:34.519 of what's called Lisp programming, basically. 00:18:34.520 --> 00:18:41.699 So that's what I'm aiming at for Python 2. 00:18:41.700 --> 00:18:44.359 Thank you. Thank you so much.