[Sacha]: I forgot to ask you how your last
name is pronounced.
[Ben]: Oh, Zanin.
[Sacha]: This is Emacs chat number 25 and here I am with
Ben Zanin.
You have a math background and now you're in IT.
Where did you encounter Emacs in the journey?
[Ben]: So the reason I have a math
background is that I wanted to get into
programming language design and at the time so
that led me over to lambda calculus and that kind
of thing and at the time it was at the time I was
getting into university in like 2005-2006
It was impossible to get into the computer programs,
but I could get into math.
I figured that would move me in the direction that I wanted
to go in, so I did.
Got to third year, and then every professor
who taught any of the courses I cared about
all left the faculty at the same time.
[Sacha]: Oh no!
[Ben]: Yeah. Anyhow, that's a different story.
But yeah, I got into Emacs because in the process
of learning about Lambda Calculus, the Lisp
weenies found me.
And yeah, I spent a bunch of time learning about
that.
And it wasn't until like 10 years after I got
into Common Lisp and Scheme that I actually got
into Emacs at all.
[Sacha]: That's interesting.
Usually people, like, if they're doing Lispy
things, they get into Emacs right away because
Lisp.
But okay, so 10 years after.
[Sacha]: Okay, so this lambda stuff, not too scary,
You're already well-used to parentheses at that point.
[Ben]: Yes.
But I guess it wasn't until about ten years ago,
like around 2015 or so,
that I started really getting into Emacs.
I would still consider myself to be a beginner on that front.
[Sacha]: Oh yeah? So what got you to get into it more?
[Ben]: I found that I was looking for more structured
data management processes.
Basically, I was looking for personal information
management.
And I kept bouncing off Emacs because I wanted to
get into those tasks, but Emacs was such a rich
learning process that I kept getting sidetracked,
so I kept bouncing off of it.
But I have to admit that one of the things that
originally actually got me into Emacs was
twittering mode.
Oh yeah?
Because I was looking for a tool that would let
me, we'll probably get into this later in the
chat, but I was looking for a tool that would let
me keep a larger window of context about the
conversations that I've been in.
The Twitter apps and the Twitter website
implemented a really narrow window.
I wanted to be able to search back a couple
of weeks for stuff that I had seen or talked
about previously.
Twittering-mode gave me the ability to keep
days or weeks of context in a single buffer
that I could then immediately search.
So I didn't actually get into Emacs as a text editor,
I got into it as an application platform,
and then gradually learned the rest of it.
This is actually fantastic. So I kind of stuck around after that.
[Sacha]: That is the first time I've heard of someone
coming to Emacs because of Twitter.
[Ben]: No, it's deeply embarrassing.
[Sacha]: No, it's wonderful.
I love that there's just so many
reasons why people come and the fact that you
could find something that would let you take
those notes and see that context and reply to it,
and even, as I see in your config, work around
slow keyboard response issues.
[Ben]: And also the fact that that's still
in the config despite Twitter itself...
I think I abandoned it in 2017, but it takes me a
little while to rip things out of my config.
[Sacha]: Yeah, I see you're a lot more
active in Mastodon these days. I see your
Monsterdon posts scrolled by my feed every so often.
Yeah, so we dove right into that because a lot
of the stuff in your config is interesting and
your workflows too.
My idea for these Emacs chats is to
show people the kind of stuff that isn't
immediately obvious to newbies when they're
looking at someone's config.
Because a lot of the stuff is new workflows and
how the keyboard shortcuts work together and how
this stuff fits into your life.
That's not immediately obvious from the code.
I've taken a look at your config, but before
we jump into the gazillion things I wanted to ask
you about, are there things that you particularly
love about your Emacs workflow?
[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.
Now, is that Emacs on your laptop and you just
take it around and you say, okay, I'm going to
sit in the living room for a little bit or
whatever and play there.
Or do you... Ah, there you go.
That's what I was going to ask.
All right.
So Emacs on your phone.
The Android port or Termux?
[Ben]: I have both installed.
I think you actually saw this a few months
ago when I was running performance comparisons
between the Termux version of Emacs and the
native port, and found that the native port
generally ran anything CPU-intensive
roughly twice as fast.
But I still use the Termux version because it's...
I'm not sure if you played around with the
Android terminal virtualization layer at all, but
it's not great.
I really appreciate the integration that
Termux gives me with Android features.
For example, being able to query the sensors,
such as GPS or temperature sensors, and I can
actually pull those in from the Emacs side.
And that's something I kind of want to get into.
[Sacha]: What do you think of using the
temperature sensors for?
What can Emacs do with that?
[Ben]: It's not so much the fact that I
use the temperature sensors as that when I pull
the sensors, that's the most remarkable value
that I get out of it.
But one of the interesting things is the
barometric pressure sensor, which gives me
height, which matters because when I'm out and
about and if I stop to record an entry in my
journal, for example, I'll just pull the sensors
and dump them into the header in the entry that I'm writing.
The barometric sensor, I'll get the GPS, so
that'll tell me what the actual height is at that
location on the earth. The barometric sensor
also gives me a little bit of insight into the weather.
So it's not so much the temperature sensor
is what my temperature is, but just like if
it's a hot day or not.
[Sacha]: I am very curious about that setup.
So if you happen to share your, I don't know, Org
capture for Termux that includes all these things...
You don't have to show me the actual stuff, but
you know, at some point I think other people will
be curious about what kind of benefits they can
get from running Emacs on their phones.
[Ben]: So, I mean, I guess I'll...
One of the benefits that I get is the ability to
keep shopping.
So I'm a little bit of a militant cyclist.
One of the things that I often do is leave
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.
When I was reading through your toots, I noticed
you like to play around with other keyboards and
other devices like the 8BitDo.
Do you have any of that talking to Emacs too?
[Ben]: [Keychron B11 Pro is] the keyboard I'm currently using.
I got this so I could keep it in my purse and
just like walk around with it, but it turns out
it's super comfortable and I'm accidentally using
it as a daily driver.
[Sacha]: All right.
Name-drop the keyboard for all the people who
like the device recommendations.
[Ben]: It's a Keychron B11 Pro.
It runs ZMK.
ZMK, I suppose.
And if you've seen me interacting with
Pete Johanson on Mastodon, he's the lead developer of
that firmware package.
It's a little bit like QMK, except that
fundamentally QMK is a polling architecture, and
it works really well for very restricted
microcontrollers.
ZMK is interrupt-based, which means it is
tremendously more efficient in terms of power draw.
So if you want a Bluetooth keyboard, you should
probably run ZMK on it.
Anyhow, yeah, it's fantastic.
And I do have a bit of a keyboard problem where I
tend to...
[Sacha]: Many Emacs people have keyboard problems.
[Ben]: Right? I feel like I'm in good company right now.
[Sacha]: Yeah, yeah, yeah.
So, devices, yep, gotcha.
And this has become your main keyboard even for
regular computing?
[Ben]: In the last couple of weeks, yeah.
It's super comfortable.
Because it's so flat, I can get away without
having to use palm rests to actually keep in a
decent posture,
because of the curvature of it..
Like, it's an Alice layout.
The key travel isn't too bad.
It's actually quite comfortable.
I found that I needed a little bit of
acclimatization to get used to split keyboards.
This one has roughly the spread of a split,
but it seems to be easier for my muscle memory.
So yeah, I didn't intend to leave it on my desk,
but it stuck and has kind of stayed there for now.
[Sacha]: Does it have any special ergonomics
for all the modifiers that we like to do?
Or do you just use Caps as Control or whatever else?
[Ben]: Actually, I don't use Caps as
Control and I actually really need to get into
remapping that.
ZMK has a very rich remapping story, as I expect
you to imagine, from a custom firmware.
The macros are intense, and you can get
really deep in customization.
I have done none of that on this keyboard
yet, because it's only, I think, a couple of
months old at this point.
[Sacha]: You've been settling in.
As you said, this has been your
main keyboard for a little while.
Charlie Baker says, "yeah, I love the split keyboard.
Recently bought one myself.
I was getting so much neck pain, you know,
shoulder and neck pain from so many hours keeping
hands close together."
But the split lets his shoulders relax.
So probably you're getting the same, like, ha, my arms.
[Ben]: The two things that I first noticed
when I moved to a split keyboard was one, my
wrists started feeling a lot nicer and two, I was
immediately able to bench press like 20 pounds
more the next week.
It was amazing how much of a difference it made
and it showed up in the data.
[Sacha]: Wow.
There was a weightlifting talk at EmacsConf last year, I think.
So there's a surprising overlap between the
people who are checking their weightlifting stats
and the people who are into Emacs.
Naturally, with Org Mode.
There you go.
[Ben]: Let's not look at those numbers too closely.
I'm not too proud of a bunch of them.
But yes, I find that Org capture templates let me
keep on top of that and not really think about
it, which is great because you don't want to
think about it.
You want to gather the data and think about it
separately so that you can
stay emotionally divested from what the numbers mean.
[Sacha]: I know.
I'm totally happy to dig into the Org capture,
especially if you do any graphing.
People always love graphing their progress, right?
But if you're like, I don't really want to show
my numbers at the moment, that is also
understandable and okay.
[Ben]: I don't, I'm afraid. Sorry.
[Sacha]: That's okay.
[Ben]: It took me a couple years to get
used to being on camera at all.
I don't really like my appearance very much.
I'm working on that, as you can see.
I've had to work on that to be able to work remotely.
It's a work in progress.
I'm getting through it.
[Sacha]: You know us. We're very much focused on text.
In fact, you even use Emacs in the terminal.
That's very text-y.
One of the interesting things actually that I
wanted to ask you about since you mentioned
meetings is you probably also have the role of
designated note-taker.
You mentioned in one of your toots that you take
notes and people are like, what are you doing that in?
How are you taking your notes?
And it's Emacs.
[Ben]: Yes, so actually that's one of the
things I should lead off with as an apology.
I probably won't be able to share
many of my capture templates because I don't use
them in my personal life very much.
They're mostly on my work machine. I've
got capture templates for impromptu meetings
where it's just like an exploratory, we have a
problem we need to solve, we're kind of talking
through a discussion,
a separate capture template for meetings with
agendas to make sure that we stay on them and
that we log decisions,
and a separate set of templates for... So I have
a team of direct reports and they each have
different cares and different topics that we're
working to develop in their professional careers.
I find that it's really useful to be able to
keep some continuity between our conversations.
It also makes it very easy to export that
entire dataset, share it with them to make sure
that they can consult it at the same time.
If I got anything wrong, I can fold their
corrections in.
But all of those templates, unfortunately, are on
my work machine.
[Sacha]: We'll just sketch out the general
idea in abstract details and then people who want
to implement it for themselves can fill in the blanks.
For example, when you're having a meeting with
your direct reports, are the tasks related to
them in an Org agenda?
Are you using dynamic blocks?
Is it tracked somewhere else or is it in Org?
[Ben]: It's straight in Org mode.
So most of the touch points that we have are more
about professional development and their cares
and concerns, rather than specific deliverables.
Usually deliverables we manage at a team level.
But if there are specific things that individuals
are working on, they will be in to-dos under
their subheadings in a way that show up on the
agenda if we have assigned deadlines for them.
But generally, if there's a deadline on a task,
it's because
I'm doing something and they need to track it, or
they're doing something and I need to track it.
If I'm the only guy using Emacs, then Org
Mode won't work for that,
so there aren't a lot of those.
But if it's just something that I need to check
up on to make sure that
something that... Like they've got planned leave for
example, or they have a cousin's wedding that
they need to go off to, or something that I just
need to keep in my brain that's not necessarily
deliverable, then it would be
appropriate to keep that in a place where it'll
only show up on my agenda.
So that's the kind of decision making that I
apply there.
[Sacha]: And you mentioned you have a
subheading, I guess a subheading per person or
sort of... Or do you use tags to keep track
of something that might touch several people?
[Ben]: Usually a section per person, and
that's more of a convenience than anything else.
That lets me narrow to just that subheading and
share my screen during the meetings.
Then I don't have to worry about accidentally
leaking anybody else's information into the
screen share or anything like that.
Obviously we let off with conversations about
them being all right with that.
But the ability to very clearly and simply
delineate
"This domain of my notes pertains to this person"
and being able to be confident and share that
confidence that there will be no leakage means
that we can explore topics and talk about them in
a way that might otherwise be a little bit more
restrictive.
So being able to do that simply, and being able to
establish a very clear delineation around whose
information belongs where and where it should be
shared turns out to be pretty valuable.
[Sacha]: Yeah, and that's a technique I
think that especially people who are new to Emacs
and who aren't used to narrowing and widening
might not know how to use effectively.
I think narrow is even one of the commands that's
disabled by default.
You've got to say, yeah, you know, I'm not scared.
I know what to do.
[Ben]: Yeah, it's kind of bizarre to me
that it is, but yeah.
[Sacha]: I can imagine people accidentally
triggering it and they're like, oh no, the rest
of my file is missing.
But if you know how to narrow to a region, and
Org even has those commands to easily narrow to a subtree...
I think it's even part of the default speed
command so you can trigger it right from a heading.
But it's great for that kind of restriction.
Okay, so the reason why I was asking about that
is because some people are working with people
who are not using Emacs, so it's very interesting
to see what the kinds of... It's very rare for
people to work with other people who actually
use... Are there any other Emacs people in your
company, for example?
[Ben]: There's an entire Emacs Slack topic
about that, yeah.
It's kind of great.
[Sacha]: What is that like to have co-workers who do Emacs?
Because this is a rare experience.
[Ben]: It's super cool.
It's also neat to see the very, very different
ways that people use it.
But yeah, oftentimes people will talk about
problems that they have with particular internal
tools, and somebody's like, oh yeah, go check out
this repo on GitLab that I published last week
where I got sick of it and decided to solve that
problem categorically.
It's actually super cool.
And some of the folks at...
Generally, I tried not to mention my current
employer at any point.
Obviously, it's not secret.
It's in the init file.
But yeah, I don't tend to get into that deeply.
But some of the other people who work at my
company, they maintain venerable Emacs packages.
So it's awesome to be able to go and talk with
some of the folks who
I've been working on the code that I've been
using for a decade and we are now coworkers.
It's lovely.
[Sacha]: Oh, that's so nice.
I'm glad you have that kind of little community
in there.
[Ben]: Yeah. Bunch of nerds.
[Sacha]: So I suspect some people will be looking up your
company after this.
I think it's also mentioned in LinkedIn and sort
of like, okay, let's see if there's any job
openings.
[Ben]: If it's mentioned on LinkedIn, that
is somebody else.
I haven't logged into LinkedIn in 15 years and I
never will.
[Sacha]: We do have a question from Shae.
Shae is asking, how do you make a capture
template to stay on agenda and record decisions?
You got any tips for that?
I'm guessing this is more of a human thing rather
than an Org thing, but maybe you have some ideas
on how you keep something on track.
[Ben]: So I'll actually push back on the
"It's a human thing rather than an Org thing".
I strongly believe that one of the real values
of Org Mode is that it's a very plastic system.
Fundamentally, I think that it is a human system
because it allows you to express exactly those
kinds of trade-offs in a really, really fluid way.
I love the personal information management that
Palm Pilots provided, for example,
but it was pretty restrictive.
One of the things that I love about Org Mode
is that if you find that a particular person has
a particular conversation style, it's really easy
to modify your Org Mode capture templates to be
able to capture that particular flow that you
have with that person.
Or with a particular group of a recurring
meeting, for example, that tends to flow in a
particular way.
Super easy to update the templates that I use to
capture those particular meetings to make it
easier to match the general conversation flow
with the notes that I will be taking about it.
[Sacha]: Wow, that sounds pretty
sophisticated.
[Ben]: Well, I mean, that's the thing.
It's not sophisticated.
It tracks the human process very easily.
So it's really lightweight.
So you don't have to have a lot of sophistication
to make it very, very useful.
You just have to have a feedback loop that you
can tune every time with one or two minutes of effort.
And that's one of the reasons why I depend on
Magit mode so much is that it lets me track
those things.
But yeah, to answer Shae's question about how do
I track those particular things.
So if it's a meeting where one of my direct reports
has a particular set of topics that we
tend to investigate, like somebody who's
concentrated on career growth.
So we're talking about the areas in which we want
to see development.
I'll absolutely update the capture templates for
that particular person to say, all right, here's
what we talked about last time.
Here are the things that were done between our
last two conversations about how we move in that direction.
Were they successful or not?
Did it require a lot of effort?
So was it something that more effort should be
put into to be able to drive down the work over time,
to be able to produce those results?
But yeah, that goes into the templates
and that goes into the cadence of conversations that we
talked about in Capture.
[Sacha]: So that's really interesting.
You modify the capture templates with the
notes that you want to have easily available the
next time you chat with them.
[Ben]: Exactly, yeah.
[Sacha]: The capture templates are still defined as a
setq somewhere in your thing, or are you
going into the customized interface?
[Ben]: So I actually keep the capture mode
templates as raw files that are referred to, and
that makes it easier to version them in a way
that like, I mean, sure, like my Emacs init file,
if you look at the Git history of it, it has a
whole bunch of different...
[Sacha]: I had not considered having capture
templates as files files.
It worked out really well.
[Ben]: So you can see that... It's a little
bit hard to see with the font this small, but you
can see that I've got a lot of changes to, for
example, my init file, but keeping them in
individual capture mode template files makes it a
little bit easier to just look at the history of
that particular file and see why particular
changes were made.
[Sacha]: I'm going to try that.
I think that's a great idea because it allows you
to be a lot more granular about the notes.
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 the 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.
And like the commit logs for a program are like
just this, it's like a map through that territory.
It's wonderful to read, but it's also like...
It gives you a lot of insight into the person
doing the navigation.
When you see 16 commits on December 24th of 2023,
like, oh, okay, that person probably had a little
bit of time to work on it.
And then when you see a bunch of commits that are
like 5 p.m.
Monday to Friday, like, oh, okay, this is
probably done in a particular way.
But yeah, it's this deeply personal process of
seeing how problems are learned about.
And I just really appreciate that.
[Sacha]: I think what you're saying about
personal scale software and kind of 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.
So one of the neat things about software is that
it's a document and a device at the same time.
So 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.
And 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.
And that usually means that I'll start with its
own documentation.
So if it has a man page, I'll read that.
If it has user docs, I'll read those.
And 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.
And 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.
So leaving myself hints that let me dredge things
back out of long-term.
Reloaded 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 like 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.
[Sacha]: Tell me about this dredging up
process.
Are you a lots of little files person?
Are you a couple of large files?
Are you a project file?
There's an Org file in each project that you look
up.
How do you find things, especially if you don't
remember the exact words?
[Ben]: So it's usually like an Org Mode
per category and they get consolidated.
Let me shrink this down a little bit.
So usually it's an Org Mode category per file.
If there's something super specific, then usually
it'll kind of live out in its own place until I
get around to... I love that you have an Org File
specifically for Mud Cake.
But that's the thing.
It'll live off in its own thing until it gets
integrated into the list where the long-term
stuff lives.
So, for example, I promise this is pertinent to
your actual question.
[Sacha]: No, no, this is very pertinent.
[Ben]: But so like usually lots of little
files while I'm still working on something and
then as that something becomes part of my larger
life and has links to other things then it'll
kind of get centralized into one of the Org Mode
files that has a broader topic purpose basically.
[Sacha]: Okay and then if you if it's like
very long term and you can't remember the exact
rates to find something how do you generally find
find your notes?
[Ben]: That way.
[Sacha]: All right.
You start graphing various keywords and try to
find it.
[Ben]: Yeah.
So one of the things that I don't yet have turned
on, and actually you inspired me to look into
this, was so... Actually, do we have enough time?
Yeah, okay.
So I'm just looking at the clock.
One of the things that I wanted to get into was
long-term searching and searchability.
Yeah.
So I use SQLite's indexing for a lot of things,
and I really appreciate its Porter stemming
because it lets you search for stemmed words,
which are kind of approximate matches, which is
useful, but less useful than vector databases.
And you actually put a little bit of work into
indexing topics based on vector similarity.
[Sacha]: Which I haven't gotten back to, so
I'm glad to see, you know, you managed to
experiment with it.
See what you come up with.
[Ben]: So I don't have anything to show
yet, except that it's an interesting topic
because...
Because I'm word-oriented, I will often remember
individual keywords or I'll have enough patience
that I can sift through a list of potential
keywords as I'm grepping for stuff.
And if I find that my first three or four
attempts at searching for a keyword don't find
the topic that I'm looking for, once I do
eventually dig up the topic, I will add those
keywords that I was searching for just so I can
find it next time, expecting that future me will
probably behave more or less like current me.
But yeah, like being able to use a vector
database to search for headings that include
related topics instead of related words.
I'd really like to get there.
I'm not there yet.
And I think that's going to be interesting and
useful.
I also think it's going to be challenging to kind
of represent Org modes.
hierarchical structure to restrict the training
of particular vector sets to be able to find like
an increasingly or cast an increasingly wide net
for where I want the searches to run.
So I don't know how that's going to be solved
yet, but I'm going to be looking into it.
[Sacha]: Percopop has a question regarding
terminal Emacs.
Do you need to change any of the keybindings to
avoid clashes with the terminal?
You know, some keybindings don't work on
terminals, or some terminals already have these
keybindings set.
[Ben]: Yeah, so I have good news and bad
news there.
The good news is that, so one of the terminals
that I'm using right now on most of my systems is
Westerm.
It's really good.
I started off with Alacrity and I kind of bounced
off that project because of some of the behavior
of the lead developers.
I won't get too deep into it, but what I found is
that Westerm
It gives me very little friction that way.
It doesn't have a lot of its own key bindings on
its own, and that's a relief.
It means that I really don't have to... I don't
think I've had to put any time into customizing
Western to get out of the way of Emacs or Screen.
And I should mention, I am running Emacs within
Screen.
So that introduces another layer.
Control-A-A, for example, is beginning of line
for me, even though Control-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.
[Sacha]: Okay, I had a couple of things I
wanted to ask about in your config.
You have two types of timers.
You have tea-timer and you have Prot's TMR.
Do you use them for different purposes?
What's going on here?
[Ben]: So I'm trying them out.
I tried TTimer first because it was the first one
that I found, and it was useful.
I was actually using it in meetings because I
would, when I was trying to keep us on topic, I
would use that to remind us that, oh, we've got
four other topics we need to get through.
We're trying to give this one five minutes.
We're running up on four.
And it was just because it was super low overhead.
It was easy to pick up.
It was easy to have it displayed on my screen.
And it didn't feel like I was...
Running a chess timer on everyone.
It's very subtle in the mode line.
It was useful.
But what I found was that when I was...
Running multiple timers simultaneously.
TMR, just the fact that you can list all the
timers and manage them in a separate buffer.
It's richer and I appreciated some of its
documentation more.
I haven't fully switched over to it yet.
I'm still in exploratory mode.
In fact, this is probably like... So I actually
have a bunch more packages installed than I'm
currently using.
So I'm going to shrink this down a little bit
just so that it doesn't line wrap.
But yeah, so I've got, I think about 140 packages
locally cloned.
I've got, as you can see in my init,
about half of that actually installed.
There are various phases. I've got a clone, but I don't
have it in my init. Or I have it in my init, but
there's another package that offers
similar functionality. Or I'm all-in on this particular
choice and I'm removing the other ones.
It's a gradual kind of progression.
[Sacha]: Yeah, we're all auditioning
packages to see if they fit in our workflow and
all that stuff.
I was curious also about your elfeed things.
You have a few things related to elfeed.
Actually, do you want to talk about the thing you
just highlighted first?
[Ben]: No, we'll get back to it in a sec.
I'm keeping an eye on the clock.
[Sacha]: But yeah, elfeed.
Yeah, you've got a couple of interesting things
in your elfeed setup, including picking a search
from a bookmark or other shortcuts like that.
[Ben]: So I have discovered in my
conversations with the new maintainers for elfeed
that my elfeed habits are very deviant.
So let me actually start off by going through...
You can see that like the top of my elfeed list is
kind of in one format and down at the bottom, the
ones that are closer to present day are organized
in a different way.
[Sacha]: You've got tags now.
[Ben]: So my feed list is, I mean, it
started in Google Reader.
It's kind of been forward ported since then.
It's long.
[Sacha]: I love the comments.
[Ben]: But one of the consequences of
having a long feed list is that I have an
enormous elfeed database.
And I use it for completely different purposes.
So for example, I'm going to show off that little
default search.
I keep an eye on projects that have releases
that aren't packaged by Debian, for example.
So I've got this little ATS Mini.
basically a small AM FM radio that happens to run
on ESP32 and the firmware for this community
developed and it's kind of interesting but like
that's not packaged by Debian so I pay attention
to or I subscribe to the release feed for that
particular project.
I do keep in keep an eye on the Linux kernel
especially these days because
The gallop of security vulnerabilities coming out
of mythos analyses right now means that I have to
pay more attention than usual to fresh updates.
So generally I run Debian stable, but I do run
kernels from backports and I want to know when
those are available.
MeshTastic.
I was paying more attention to this a couple of
weeks ago.
I'm not going to reach that right now.
But yeah, the local MeshTastic community in
Toronto is plagued by a couple of griefers that
make it a lot less fun.
So I'm paying a bit less attention to that right
now.
But yeah, so like one of the bookmarks that I
have is software currency.
Another one is, for example, the YouTube channels
that I subscribe to.
Thank goodness for Elf YouTube.
It is so nice to be able to get the transcripts
for things directly in there.
[Sacha]: There's even a sponsor block
integration so you can skip all the promotions
and stuff.
[Ben]: Yeah, I mean, so again, my use of
YouTube is also deviant in that I pretty much
strictly subscribe to RSS feeds and they're
downloaded onto the file server.
So when a new recording comes out, it gets
dropped there.
I'll watch it.
And then I've got a little widget that scans
through my Kodi database for watched files.
Once YouTube files show up in the watch list,
they're automatically purged.
And it means I just never see an ad.
It's not just satisfying.
I don't think that I would be able to pay
attention if I was being constantly interrupted
because of the way that my brain works.
But yeah, so being able to quickly search for
YouTube is one thing.
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.
But 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.
And 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?
The 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.
And I really appreciated having a list of Elfie
keywords that I could automatically apply those
tags to.
So I wouldn't even see the headlines because it
was problematic enough.
I've become less... Nice.
Yeah, 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.
One of the things that I don't have set up right
now is a quick search for the municipal topics
that I cover.
So I tend to subscribe to a lot of news because I
found that, for example, it's interesting to see
how the Toronto Star covers stuff differently
from other local newspapers.
And it's useful to be able to quickly pull up
You know, the five or six publications that cover
news in the same way and then look through the
annotations for them or add the annotations
myself so I can see that this particular story
was covered by this journalist in this
publication in this way and then it lets me
cross-reference so that I can pay attention to
Topics that are under-covered or publications
that habitually leave out particular aspects of
news stories.
It lets me pay more attention to
The trends of publications as well as to the
stories that they're covering.
But the consequence of that is that my LFE
database is like four and a half gigs.
And it's common for me, actually, I don't know if
that actually shows.
It's common for me to have like 65,000 articles
in like the six month horizon for the default LFE
searches.
And that means that searches and redraws are
expensive, even on a relatively performant
machine.
So you've probably seen some of the workarounds
that I've got.
And this little bookmark selector is one of those
workarounds.
So L feeds interactive search, super, super
useful.
But if you're trying to do it like this,
actually, it's not so bad.
[Sacha]: I love this.
This is like, yeah.
When you see someone using elfeed for like 65,000
items, you get a sense of what you can be used
for when you're really stressing it.
[Ben]: Yeah.
Well, and the organization of the bookmarks that
I have means that I do have like one just river
of news of all of the things that I want to pay
attention to.
But like it's seven or eight like pretty
divergent topics with not a lot of overlap.
So it's neat to be able to
Think of elfeed as the thing where news
information comes in, but the individual
bookmarks are the topics that are grouped
together that I actually care about and want to
read about in concert with each other.
If I specifically narrow it down to just Emacs
stuff, one of the things that I can easily do is
I had a bookmark for that search and if I name it.
So now that I've got that bookmark saved.
[Sacha]: And then it's like bookmark
annotation.
right and like this is also it ends up in my dot
file so as a git config as a as a git commit but
now that that bookmark exists simply because of
the naming uh lfe search now it shows up in
completion precisely this sort of stuff I I am
under utilizing bookmarks I think but I like that
I love this idea of using bookmarks with a naming
convention and then writing Emacs list but take
advantage of that naming convention to make that
easy to jump to easy to use in other things
[Ben]: Yeah, it means I don't really have,
like, when I notice that there's a thing, I don't
have, it diminishes the activation energy for
building a new workflow.
It means that I don't have to put a lot of
thought into it.
I can quickly do it.
And if it turns out to not be useful, I can
quickly get rid of it.
[Sacha]: Very cool.
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.
So it's just for myself sometimes.
So 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 an.
[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, you need to kill the stream
and have a 10-second video.
[Ben]: No, it's all good.
I'm not worried about sharing this, but it's not
something I've posted.
But 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 master.mode.
[Sacha]: Yeah, yeah.
Huh.
Very cool.
[Ben]: Yeah, so that's one of the ways
that I use it.
And because the annotations are just Org Mode
files, you can add links to other things and it
becomes just as useful as anything else.
[Sacha]: And you're saying this can flow
into Mastodon and from there, once you toot it,
I think you're using, like, this is mytoots thing
that you mentioned in your config also for
archiving it?
Or searching, yeah, okay.
Oh, except it's currently not working.
[Ben]: Yeah, I don't have it loaded right
now.
But yeah, so mytoots, it just loads the backup of
your export archive.
So it loads the...
What's the most recent one?
So yeah, it was your Outbox JSON file, which is
the most recent one here.
So I've got an Org Mode reminder to download it
roughly quarterly.
My Outbox is about 100 megs right now.
And compared to, well, I mean, it's compared to
4.5 gigs for elfeed.
It's not so big.
I think...
Oh yeah, that's not going to redraw properly.
I was just going to show it like my resident
Emacs memory size right now is about like five or
six gigs.
It's a little bit embarrassing.
By comparison, 100 megs of JSON and RAM is not so
bad, but like having an instant search for
everything that you posted and being able to
bounce back from your local archive to the
conversation thread that's live and see anything
new that comes in.
Again, it lets me exercise that outboard brain
kind of idea.
So yeah, my toot's super useful.
[Sacha]: I like it a lot.
And then the last thing that I want to ask
before, again, kiddo, because I have like two
minutes, is that you have a mentoring offer
pinned in your Mastodon, too.
Have people taken you up on it, especially if
they've taken you up on Emacs?
Is that ongoing or forgotten about or whatever?
[Ben]: Not forgotten about.
Very much real.
Still open.
I haven't refreshed that offer recently, but it's
still pinned for a reason.
Yeah, I think maybe a dozen or so folks have
asked for that.
9 or 10 success stories, I think.
Nobody's asked for Emacs tutorialship yet.
That's fine.
Again, I love Emacs.
I use it.
I don't often recommend it.
But if anybody was curious about that, I would be
very open to the idea.
[Sacha]: All right, so if people want to
also develop a very interesting elfeed setup,
they know who to talk to.
[Ben]: Please, I would love that
conversation.
[Sacha]: Thank you so much.
Yes, go ahead.
[Ben]: Oh yeah, there's just one last
thing I want to mention, and I realize we're
right up against time.
I use GNU for email, but I use GNU for reading
mailing lists.
I just wanted to just strongly recommend to
anybody who is thinking about it, this is amazing.
You gotta do this.
Public inbox lets you keep a complete local
archive of the entire mailing list.
Searches are instant.
Tracking threads is instant.
Check it out.
It's fantastic.
[Sacha]: That's great because like Emacs
develops like gazillion threads and how do you
even keep track of all this stuff but if you've
got news and you and if you've got this set up
then you're no longer dependent on the good
graces of Gmail being around as a kind of NNTP to
mailing list gateway so uh so yeah uh John wants
to know if you have YouTube like if you have a
YouTube channel I'm guessing you don't yet but uh
again I don't really like my face very much
Ping Ben on Mastodon and ask about this mentoring
thing and then share your notes so we can all
learn from it.
Thank you so much for today.
I look forward to chatting with you more through
toots.
What is the verb, you know, in the 30-verse?
All right.
Thank you so much.
All right.
Bye.
Okay, folks.
I'll end the stream too.
Bye.
Thanks for hanging out.