Emacs Chat 25: Ben Zanin (@gnomon@mastodon.social)
Posted: - Modified: | emacs, emacs-chat, emacs-chat-podcast: Updated the transcript
I chatted with Ben Zanin about music, Org Mode, Emacs in terminals and on an Android, keyboards, elfeed, and more.
View in the Internet Archive, watch or comment on YouTube, read the transcript online, download the transcript, or e-mail me.
Chapters
- 0:00 How Ben got started with Emacs
- 2:19 Ben got into Emacs because of twittering-mode
- 4:30 Emacs as a media playback platform with Versuri and Mpdel
- 9:13 Emacs on Android with Termux
- 13:44 Keyboards and other devices
- 16:44 Benefits of a split keyboard
- 18:22 Meeting workflow
- 21:11 Narrowing
- 22:58 There's even an internal Slack channel about Emacs at Ben's company
- 24:50 Ben keeps Org capture templates as individual files and adapts them to different meeting flows
- 28:45 Personal-scale software and the journey
- 34:07 vc-git-grep for finding notes again
- 36:55 Add keywords to make things easier to find again
- 37:47 Keybindings and terminals; wezterm
- 42:38 Timers: tea-timer, tmr
- 43:57 Different stages of package use
- 44:47 Elfeed
- 48:36 Spoilers
- 49:53 Comparing different news sources
- 53:13 Bookmark naming conventions
- 53:24 Naming conventions simplify building new workflows
- 53:50 elfeed-curate for annotations
- 55:46 mytoots archives Mastodon toots
- 57:06 Mentoring offer
- 58:02 A local instance of public-inbox can let you use Gnus to read mailing lists quickly
Transcript
Expand this to read the transcript
Ben: I'm probably going to get a little bit of deserved flak for this, but I use Emacs a lot as a media playback platform. I spend a lot of time using Emacs to listen to music through MPV. And I've got some integration with Versuri, which lets me... I think you've seen those customizations where what I've done is I've kind of duct-taped the two together. Versuri is an Emacs package for being able to quickly search through lyrics for songs. What I've done is I've bound Versuri to the point where I've pulled up a page of lyrics, I now have a hotkey that bounces me over to a search of my MPD library for where that song is, and vice versa. I've got MPD rigged up so that when I've got a song currently playing, I can bounce into Verisuri to display the lyrics for that particular song. Something you probably have not seen in my config yet because I haven't finished it yet... What I'm working on is actually integrating Org Mode with MPD, because I'd really like to be able to streamline my process where occasionally when I'm listening to something, I'll take notes either about the lyrics or about the song. I'd like to be able to link from Org Mode directly to either that song, that album, or that particular timecode. I don't have that yet, but I'm working on it. I think I'll probably lean on it quite a bit once I have it. Sacha: Yeah, yeah. I saw your tweet from May, I think, where you're talking about coming up with this way of taking notes. think if you come up with maybe a custom Org Mode link type that can store the annotation and then let you go to it, I think that would be really interesting. Especially if you figure out, okay, like, are you taking notes in the album? Are you taking notes on the song? Are you taking notes on this moment in the song? That could all be very cool. Ben: Actually, do you mind if I share my screen? Sacha: Please. Ben: So one of the things I wanted to kind of note was... Let me... Oh yeah, this is actually going to be further embarrassing. I'm a terminal Emacs user. Sacha: I saw. Can you increase the font size, though? Ben: Absolutely, yeah. Sacha: Resizing your terminal so it's smaller makes everything look bigger... Ben: Is that better? Sacha: More. Some of us are older. Thank you. Ben: One of the things that's kind of unusual about my MPD configuration is I've got a satellite config. Sorry, the line wrap is a little bit off here. What this means is that I have... the household file server maintains the MPD library, but I've got multiple playback nodes around the house. What that lets me do is... Sacha: You can play stuff on this... Ben: So what this means is that I'm controlling the... well, in this case, that's a little MeLE Quieter3C that I've got in the living room that's kind of like the the home media server, the home playback machine. Fundamentally, I'm an ops guy, I'm a sys admin, and I've got, unfortunately, a fleet of machines around the house. What this lets me do is easily control each one of them. Instead of each one maintaining its own library of music files, the file server itself indexes them, which means that library updates are almost instantaneous, instead of having to read over the network to pull metadata out of each individual file. So having a satellite setup lets me... The real benefit is that MPD tracks albums, directories, and files as URLs. That means that I have a single global namespace of URLs for all of the media that's currently in the library, which means that I can annotate from any machine, but have it mean one thing. It makes it convenient for navigation, but it also makes it convenient for keeping notes, which I'm currently doing manually and working on those Org link types to be able to make it a little bit more smooth than it currently is. Sacha: So you've got your central store of music files. You've got URLs for them so you can talk about them. That's just one identifier per song. You've got multiple speakers that you can use your completing interface to say, okay, I want to play this over there. You have Emacs controlling all of that.
Ben: notes about things that I need to take care of in particular areas of the city. The nice thing is that I can just drop them directly in commits right as I'm going. So I often have a long list of updates that are from Emacs on my phone, just because it's convenient. All right. There we go for Monsterdon, in fact. Sacha: Nice, nice. Then that's Syncthing or whatever else to just get it copied back to your laptop or just on your phone? Ben: Straight Magit mode. Sacha: Oh, yeah? Ben: That's one of the things that I found was a little bit clunkier when I was running virtualized Emacs under the Android emulator and also the native Android port of Emacs. They are a little bit more troublesome to get Magit to work. Because I rely on that for syncing back and forth from my phone, that's one of the reasons why I stuck with Termux. Sacha: Very cool, very cool. I like Termux's little bar of extra keyboard keys that you can have, so you can have a regular keyboard and then you can just have your Controls and your Alts and whatever on that little extra bar. Termux is quite interesting. Ben: I think I'm probably pushing it harder than it is meant to be pushed. Sacha: That's the fun of it. I don't exactly know how everything will shake out, but probably with Google trying to lock down the developer ecosystem in a few months, right? They're saying, oh, you know, it's got to be ADB in order to get these unsigned apps on. We'll have to see how it all shakes out. But I'm hoping Termux can survive because I like that one too. Ben: Yeah, me too. Sacha: Okay, so you've got interesting music, an interesting music setup with lyrics and playback and all that stuff. You've got your phone, which also runs Emacs and from which you can, you've also set it up so you can control your music from your phone? Ben: Yes. Sacha: Okay.
Sacha: I saw in that very brief flash of your change log message that you like to write fairly detailed commit messages that talk about why a change was made instead of just "a new function, new command," very terse updates that I sometimes just try to get away with. Tell us more about that, because I think you've had a couple of toots about reading source code and reading commits. Ben: Yeah. So I guess one of the things that I most appreciate about software in general, and specifically personal software, like personal-scale software that's been written by an amount of people that you could fit into a room to have a conversation about it... One of the things that I most appreciate about that is that almost all software written that way is fundamentally a diary about the way that a person learned how to solve a set of problems that they might not have known about when they decided to at the beginning. It's this fascinating process of tracking somebody's voyage through the problem landscape as they discover other people who have touched on topics that are tangential to the problem being solved by that software package. It's such a personal and fascinating experience to see somebody go from "I know just enough about a problem to be able to decide that I want to build a machine that works on it" to "I have this deeper understanding of how the problem actually exists in the broader set of things that people care about, oriented along the axis of what machinery can do to help solve parts of that problem." The commit logs for a program are like a map through that territory. It's wonderful to read. It gives you a lot of insight into the person doing the navigation. When you see 16 commits on December 24th of 2023, like, that person probably had a little bit of time to work on it. Then, when you see a bunch of commits that are 5 p.m. Monday to Friday, like, okay, this is probably done in a particular way. It's this deeply personal process of seeing how problems are learned about. I just really appreciate that. Sacha: I think what you're saying about personal-scale software and getting a sense of people's journey as they learn to understand a problem and as they start to prototype a solution... Because you never quite come across the right solution the first time around. You're figuring things out, You're borrowing things from other people. I think that will resonate a lot with lots of people in the Emacs community, because Emacs use is so personal, as you mentioned when you were looking at the Slack channel. I was wondering, in your personal practice, as you figure things out, what kinds of things help you? Is it mostly a matter of actually sitting down and taking the time to write the literate programming stuff around the code blocks or the commit messages, or are there other tools or techniques that help you do that? Are there tools or techniques that help me write down your journey along the way as you think about the code? What's your practice? For example, when you come across something that you want to figure out, how do you go about doing it? Ben: So it depends on how I'm approaching the project. One of the neat things about software is that it's a document and a device at the same time. You can care about it because of the thing that it does, or you can care about it because of the information that it captures. If I'm digging into a program because it does a thing that I want to learn, then I'll pay attention to the device aspect of it. That usually means that I'll start with its own documentation. If it has a man page, I'll read that. If it has user docs, I'll read those. Usually, I'll start keeping notes in an Org Mode file, because it's easy to hyperlink back to it and add my own annotations in parallel to the actual authoritative source. If I'm reading software primarily as a document, then I'll start by reading the source code and the commit logs, usually the most recent ones, and then I'll jump back to the beginning of the project and read upwards at the beginning, and then fill in the blanks iteratively, if it's a project that's small enough or has little enough history that I can do that. Again, I'll usually start an Org Mode file specific to that particular exploration that will let me organize my notes as I go. I really do rely on the external brain that I can keep in an Org Mode file. I tend to have a pretty decent long-term memory, but being able to bridge the gap between short-term memory and long-term memory is super, super useful. Leaving myself hints that let me dredge things back out of long-term and reload it into the hot cache of short-term really, really helps out, because that lets me maintain that flow state or get back into that flow state. When you've got like the whole program, all the context that you've absorbed up until now and the ideas of the areas that you want to investigate, being able to hot-reload all of that and then pick up where I left off is super useful. But the meat brain can't do it. I need the machine brain too. C-a a, for example, is
beginning-of-line for me, even though C-a itself is the default Emacs keybinding. But yeah, I think that I ended up choosing terminal software specifically on that merit, so that it doesn't get in the way. That's actually one of the things that Termux is... The default Google keyboard keeps stealing key bindings. It'll update, and all of a sudden, I can't use a particular Alt key combination anymore, because now it invokes a Google keyboard shortcut for pulling things out of the Android clipboard, for example, which is really kind of annoying. But yeah, in terms of terminals on full-fledged machines, I generally don't have that particular problem. Except for... What was the name of it? It was... It was a zap-to on-the-screen package that alphapapa wrote, I believe, that I... Actually, let me just look it up. Yeah, Avy. Sacha: Oh yeah? Ben: So I wanted to start picking this up in 2021, and yeah, control colon doesn't work in terminals. So the mode itself is fantastic, and when I'm using it in a GUI Emacs, it's very useful, and I rarely use it now specifically because of that particular terminal problem. That is self-inflicted. That is not a problem with the package. That is a me problem. But yeah, I think this is the notable one that I bounced off of. Sacha: Yeah, just trying to find the right, you know, a key binding that will pass. Because you can't get used to key binding in one system and then not have it available in other systems. It's just going to mess with your brain. So yeah, Ray points out, yeah, Google steals Control Shift K, which he uses to kill tabs to the right. So it's like, oh. Ben: Infuriating. Sacha: Yeah, yeah. And of course, none of the standard keyboards have a super key on the thing, so you can't just tack on another modifier that'll get through. Ben: That's actually one of the reasons that I picked up this particular keyboard is Brian Carlson. Another Torontonian. He works on Git LFS and some other stuff. He was specifically looking for a keyboard that had a super key that he could remap. So four keys to the right of space, which this one has. And because it's ZMK, it's remappable. I think this might be suitable for his purpose, except that he wants a QMK keyboard, specifically because the development tools for QMK are packaged in W, and that's a plus for him. Anyhow, yes, I agree. Like, not having a super and a hyper key on a keyboard Sacha: feels like like one of your fingers that are cramped up we need more modifiers well I mean you know pipe organ Tell us about that. Ben: What is this? Oh yeah, foot pedals. Yeah, and I actually do have these wired into a little Atmel microcontroller running QMK. I honestly tried the foot pedal thing for a little while. It was hilarious. I did not find it useful. Sacha: I don't have the hand-eye-foot coordination to do that thing at the same time. Ben: Maybe if I had learned piano as a kid, it would have been good. But yeah, I don't seem to be able to do it. But I gave it the old college try and it was fun.
Ben: I do have articles that I've marked as spoilers for media that I haven't watched or read yet. Maybe I go to an extreme degree, but I'll try to avoid previews for new movies, for example. I do want to actually go back to them later on. Marking articles as having spoilers that I want to revisit later on is an easy way of not having to worry about it anymore. For a while, back in the days when I was paying more attention to... Enter the Dragon was the sequel to... What was that TV show? George R.R. Martin... Seven seasons and it went badly off the rails in season six. Sacha: Game of Thrones. Ben: Thank you. So when I was watching that for a while, several of the sites that I was reading would have individual episode updates. I really appreciated having a list of Elfeed keywords that I could automatically apply those tags to. I wouldn't even see the headlines because it was problematic enough. I've become less... Sacha: Nice. Ben: I've been putting less effort into maintaining that now, but the infrastructure is still there, and I can lean on it if I need to.
Sacha: I had one more thing that I wanted to ask you about elfeed that I want to squeeze in, in the five minutes that I have before the kiddo comes out for lunch break. This elfeed-curate that you're using, this is the first time I've come across it in the config. Are you sharing your notes or your selections with other people, or just for yourself? Ben: No. It's just for myself. What I'm trying to replicate is, back in Google Reader days, I really appreciated how when you added an annotation to an article that you were reading, by default, that annotation would be viewable by other people in your social graph. That was super interesting. Sometimes you could also add personal-only annotations. Actually, I don't think that's the keyword that it uses. I think it’s just +ann. Sacha: Also, because you have an Emacs keyword on it, so I don't know whether you have any annotated Emacs ones. Ben: Yeah. Well, I mean, generally, if I've added an annotation, it will be. So, for example, here. Right? Super useful. Well, super useful for me, anyhow. If I find that there's an annotation that is more... This is inflammatory. It doesn't need to go out on the web. Sacha: Sorry, did you need me to kill the stream? I have a 10-second window. Ben: No, it's all good. I'm not worried about sharing this, but it's not something I've posted. What the nice thing is, is that if it is something that I want to share, it's really, really easy to just drop this into Mastodon mode. Sacha: Very cool. Ben: That's one of the ways that I use it. Because the annotations are just Org Mode files, you can add links to other things and it becomes just as useful as anything else.