Antoine Beaupr : 20+ years of Emacs
I enjoyed reading this article named "22 years of Emacs"
recently. It's kind of fascinating, because I realised I don't exactly
know for how long I've been using Emacs. It's lost in the mists of
history. If I would
have to venture a guess, it was back in the "early days", which in
that history is mapped around 1996-1997, when I installed my very own
"PC" with FreeBSD 2.2.x and painstakingly managed to make
XFree86 run on it.
Modelines. Those were the days... But I digress.
I am old...
The only formal timestamp I can put is that my rebuilt .emacs.d git
repository has its first commit in 2002. Some people reading this
may be born after that time. This means I'm at least significantly
older than those people, to put things gently.
Clever history nerds will notice that the commit is obviously fake:
Git itself did not exist until 2005. But ah-ah! I was
already managing my home directory with CVS in 2001! I converted
that repository into git some time in 2009, and therefore you can see
all my embarrassing history, including changes from two decades ago.
That includes my first known .emacs file which is just bizarre to
read right now: 200 lines, most of which are "customize" stuff.
Compare with the current, 1000+ lines init.el which is also still
kind of a mess, but actually shares very little with the original,
thankfully.
All this to say that in those years (decades, really) of using
Emacs, I have had a very different experience than
I am old...
The only formal timestamp I can put is that my rebuilt .emacs.d git
repository has its first commit in 2002. Some people reading this
may be born after that time. This means I'm at least significantly
older than those people, to put things gently.
Clever history nerds will notice that the commit is obviously fake:
Git itself did not exist until 2005. But ah-ah! I was
already managing my home directory with CVS in 2001! I converted
that repository into git some time in 2009, and therefore you can see
all my embarrassing history, including changes from two decades ago.
That includes my first known .emacs file which is just bizarre to
read right now: 200 lines, most of which are "customize" stuff.
Compare with the current, 1000+ lines init.el which is also still
kind of a mess, but actually shares very little with the original,
thankfully.
All this to say that in those years (decades, really) of using
Emacs, I have had a very different experience than credmp who wrote
packages, sent patches, and got name dropping from other
developers. My experience is just struggling to keep up with
everything, in general, but also in Emacs.
... and Emacs is too fast for me
It might sound odd to say, but Emacs is actually moving pretty fast
right now. A lot of new packages are coming out, and I can hardly keep
up.
- I am not using org mode, but did use it for time (and task)
tracking for a while (and for invoicing too, funky stuff).
- I am not using mu4e, but maybe I'm using something better
(notmuch) and yes, I am reading my mail in Emacs, which I find
questionable from a security perspective. (Sandboxing untrusted
inputs? Anyone?)
- I am using magit, but only when coding, so I do end up using
git on the command line quite a bit anyways.
- I do have which-key enabled, and reading about it reminded
me I wanted to turn it off because it's kind of noisy and I never
remember I can actually use it for anything. Or, in other words, I
don't even remember the prefix key or, when I do, there's too many
possible commands after for it to be useful.
- I haven't setup lsp-mode, let alone Eglot, which I just
learned about reading the article. I thought I would be super shiny
and cool by setting up LSP instead of the (dying?) elpy
package, but I never got around to it. And now it seems
lsp-mode is uncool and I should really do eglot instead, and that
doesn't help.
UPDATE: I finally got tired and switched to
lsp-mode. The
main reason for choosing it over eglot is that it's in Debian (and
eglot is not). (Apparently, eglot has more chance of being
upstreamed, "when it's done", but I guess I'll cross that bridge
when I get there.) lsp-mode feels slower than elpy but I
haven't done any of the performance tuning and this will
improve even more with native compilation (see below).
I already had lsp-mode partially setup in Emacs so I only had to
do this small tweak to switch and change the prefix key
(because s-l or mod is used by my window
manager). I also had to pin LSP packages to bookworm here and
here.
- I am not using projectile. It's on some of my numerous todo
lists somewhere, surely. I suspect it's important to getting my
projects organised, but I still live halfway between the terminal
and Emacs, so it's not quite clear what I would gain.
- I had to ask what native compilation was or why it mattered
the first time I heard of it. And when I saw it again in the
article, I had to click through to remember.
Overall, I feel there's a lot of cool stuff in Emacs out there. But I
can't quite tell what's the best of which. I can barely remember which
completion mechanism I use (company, maybe?) or what makes my
mini-buffer completion work the way it does. Everything is lost in
piles of customize and .emacs hacks that is constantly
changing. Because a lot is in third-party packages, there are often
many different options and it's hard to tell which one we should be
using.
... or at least fast enough
And really, Emacs feels fast enough for me. When I started, I was
running Emacs on a Pentium I, 166MHz, with 8MB of RAM (eventually
upgraded to 32MB, whoohoo!). Back in those days, the joke was that
EMACS was an acronym for "Eight Megs, Always Scratching" and now that
I write this down, I realize it's actually "Eight Megs, and
Constantly Swapping", which doesn't sound as nice because you
could actually hear Emacs running on those old hard drives back in
the days. It would make a "scratching" noise as the hard drive heads
would scramble maniacally to swap pages in and out of swap to make
room for the memory-hungry editor.
Now Emacs is pretty far down the list of processes in top(1)
regardless of how you look at it. It's using 97MB of resident memory
and close to 400MB of virtual memory, which does sound like an awful
lot compared to my first computer... But it's absolutely nothing
compared to things like Signal-desktop, which somehow manages to
map a whopping 20.5GB virtual memory. (That's twenty Gigabytes of
memory for old timers or time travelers from the past, and yes, that
is now a thing.) I'm not exactly sure how much resident memory it uses
(because it forks multiple processes), probably somewhere around 300MB
of resident memory. Firefox also uses gigabytes of that good stuff,
also spread around the multiple processes, per tab.
Emacs "feels" super fast. Typing latency is noticeably better in Emacs
than my web browser, and even beats most terminal
emulators. It gets a little
worse when font-locking is enabled, unfortunately, but it's still
feels much better.
And all my old stuff still works in Emacs, amazingly. (Good luck with
your old Netscape or ICQ configuration from 2000.)
I feel like an oldie, using Emacs, but I'm really happy to see younger
people using it, and learning it, and especially improving it. If
anything, one direction I would like to see it go is closer to what
web browsers are doing (yes, I know how bad that sounds) and get
better isolation between tasks.
An attack on my email client shouldn't be able to edit my Puppet code,
and/or all files on my system, for example. And I know, fundamentally,
that's a really hard challenge in Emacs. But if you're going to treat
your editor as your operating system (or vice versa, I lost track of
where we are now that there's an Emacs Window Manager, which I do
not use), at least we should get that kind of security.
Otherwise I'll have to find a new mail client, and that's really
something I try to limit to once a decade or so.
- I am not using org mode, but did use it for time (and task) tracking for a while (and for invoicing too, funky stuff).
- I am not using mu4e, but maybe I'm using something better (notmuch) and yes, I am reading my mail in Emacs, which I find questionable from a security perspective. (Sandboxing untrusted inputs? Anyone?)
- I am using magit, but only when coding, so I do end up using git on the command line quite a bit anyways.
- I do have which-key enabled, and reading about it reminded me I wanted to turn it off because it's kind of noisy and I never remember I can actually use it for anything. Or, in other words, I don't even remember the prefix key or, when I do, there's too many possible commands after for it to be useful.
- I haven't setup lsp-mode, let alone Eglot, which I just
learned about reading the article. I thought I would be super shiny
and cool by setting up LSP instead of the (dying?) elpy
package, but I never got around to it. And now it seems
lsp-mode is uncool and I should really do eglot instead, and that
doesn't help.
UPDATE: I finally got tired and switched to
lsp-mode. The main reason for choosing it over eglot is that it's in Debian (and eglot is not). (Apparently, eglot has more chance of being upstreamed, "when it's done", but I guess I'll cross that bridge when I get there.)lsp-modefeels slower thanelpybut I haven't done any of the performance tuning and this will improve even more with native compilation (see below). I already hadlsp-modepartially setup in Emacs so I only had to do this small tweak to switch and change the prefix key (because s-l or mod is used by my window manager). I also had to pin LSP packages to bookworm here and here. - I am not using projectile. It's on some of my numerous todo lists somewhere, surely. I suspect it's important to getting my projects organised, but I still live halfway between the terminal and Emacs, so it's not quite clear what I would gain.
- I had to ask what native compilation was or why it mattered the first time I heard of it. And when I saw it again in the article, I had to click through to remember.
.emacs hacks that is constantly
changing. Because a lot is in third-party packages, there are often
many different options and it's hard to tell which one we should be
using.
Registration for
So, LibrePlanet, the FSF s conference, is coming!
I much enjoyed attending this conference in person in March 2018. This
year I submitted a talk again, and it got accepted of course, given
the conference is still 100% online, I doubt I will be able to go 100%
conference-mode (I hope to catch a couple of other talks, but well,
we are all eager to go back to how things were before 2020!)
Sony RX100-III, relegated to a webcam


A new major release of
There is an saying that you can take the boy out of the valley, but you cannot the valley out of the boy so for those of us who spent a decade or two in finance and on trading floors, having some market price information available becomes second nature. And/or sometimes it is just good fun to program this.
A good while back
This is quite mesmerizing when you just run two command-line clients (in a
I recently learned about the
This has ended up longer than I expected. I ll write up posts about some of the individual steps with some more details at some point, but this is an overview of the yak shaving I engaged in. The TL;DR is:
This provided an opportunity to see just what the RB3011 could actually manage. In the configuration I had it turned out to be not much more than the 80Mb/s speeds I had previously seen. The upload jumped from a solid 20Mb/s to 75Mb/s, so I knew the regrade had actually happened. Looking at CPU utilisation clearly showed the problem; softirqs were using almost 100% of a CPU core.
Now, the way the hardware is setup on the RB3011 is that there are two separate 5 port switches, each connected back to the CPU via a separate GigE interface. For various reasons I had everything on a single switch, which meant that all traffic was boomeranging in and out of the same CPU interface. The IPQ8064 has dual cores, so I thought I d try moving the external connection to the other switch. That puts it on its own GigE CPU interface, which then allows binding the interrupts to a different CPU core. That helps; throughput to the outside world hits 140Mb/s+. Still a long way from the expected max, but proof we just need more grunt.
Which brings us to this past weekend, when, having worked out all the other bits, I tried the squashfs root image again on the RB3011. Success! The home automation bits connected to it, the link to the outside world came up, everything seemed happy. So I double checked my bootloader bits on the RB5009, brought it down to the comms room and plugged it in instead. And, modulo my failing to update the nftables config to allow it to do forwarding, it all came up ok. Some testing with iperf3 internally got a nice 912Mb/s sustained between subnets, and some less scientific testing with wget + speedtest-cli saw speeds of over 460Mb/s to the outside world.
Time from ordering the router until it was in service? Just under 8 weeks
As a Debian Developer I have a discount on using Gandi and I ve been using it for quite a long time and have been very happy with it. I ve been using it for registering domains. For example this blog s domain is managed by my Gandi account.
Using publicly registered domain in private-only setup In addition to using this DNS registrar for public stuff, like a blog, one can also use it for a domain accessible only within a private network.