The Dream Draws Nearer

If you’re a hardcore Emacser or Lisper, you’ve probably always drooled over the famous space-cadet keyboard. Just think, you’d have keys for all four bucky bits, not to mention a multitude of other keys with no apparent use if you aren’t on a Lisp machine. From time-to-time some manufacturer will offer keycaps from the space-cadet but that’s always struck me as sort of pointless.

Now, Kono is considering making a modern version of the space-cadet keyboard. There are no details on the site so it’s not clear how such a thing would work or what computers it would work with but it’s nice to see someone’s thinking about it. Because I really want those Hyper and Super keys1.

Footnotes:

1

Yes, I can—and do—overload the fn and ⌘ Cmd keys on my Mac to provide the same functions but it’s not the same thing.

Posted in General | Tagged , , | Leave a comment

How Uber Debugged a Latency Problem

Even though I’m an Uber user, I’ve never thought very much about their IT infrastructure other than to form an (hilariously) simplified mental model of what it probably looks like. It turns out to be a pretty sophisticated operation that has, among other things, a dedicated “Observability Team” that takes care of building and monitoring Uber’s telemetry subsystems. The system gathers fairly fine-grained metrics on what’s happening and these are monitored to spot problems and reveal opportunities to tune the system for better performance.

Wilfred Hughes pointed me to this post by Richard Artoul over at the Uber Engineering blog that tells the story of how after a recent deployment of some updates, the latency for collecting and filing events increased from about 10 seconds to 20 seconds. They reverted the change and went looking for the source of the latency. That turned out to be harder than you’d guess because the obvious strategies, like profiling, failed. Furthermore, the problem only manifested in the production system so they had to debug on the live system rather than one of their testbeds.

What follows is a tale of some impressive engineering and debugging. Even when they located the offending code, it was hard to understand how it was causing the latency. Before they were finished, they even instrumented the Go compiler to help with understanding what was happening. When they were done, they completely understood the problem and had made a change to one of their algorithms to prevent it from happening again.

If you write code, you really should read this post. It’s an example of debugging at its best.

Posted in General | Tagged | Leave a comment

Emacs Future History

I was reading this post on some Ivy hacks and it reminded me of another post that I’ve been meaning to comment on. Over at the CollBox blog, Cameron Desautels writes about the Emacs concept of future history.

The idea is that Ctrl+m used to move to the next minibuffer history entry is overloaded to move beyond the current entry to a future entry. What it does is bring up any DEFAULT value(s) specified in the call to read-from-minibuffer or read-string.

That’s handy but what I found most interesting was the fact that Desautels started the post with: you can use the same mechanism to edit a default value offered by a prompt. Take a look at Desautels’ post for the details and some examples.

Posted in General | Tagged | Leave a comment

Refactoring Prose With Org Mode

Edmund Jorgensen over at Edmund’s technical ramblings has a really excellent post on leveraging Org mode in a nontrivial way for writing prose. Jorgensen is a software developer by day and a novelist by night. He’s published two novels and a book of short stories so he’s familiar with the problems that authors face.

His latest novel, World Enough (And Time), was in some trouble. He had several subplots going and when it came time for revision, he had a difficult time keeping track of the subplots and how a change in one might effect the others. Because he belongs to the school of writers who let their novels evolve—often in unexpected ways—his revision process frequently involves substantial changes as he gets new ideas from what he’s written so far.

Being an engineer as well as a writer, he naturally sought a technical solution to help him get control of the chaos. His first attempt was to track chapters and scenes in a spread sheet. That helped initially but became unwieldy. Jorgensen, however, was a serious Org mode user and he suddenly realized that Org held the answer to his problems.

I’ll let you read his post for the details. It’s worth reading even if you aren’t a novelist because his workflow could easily generalize to other situations. As usual, I learned something that I started using immediately: org-match-sparse-tree (or more generally, org-sparse-tree) allows you to filter for entries in an Org file containing a tag or combination of tags. It’s really useful, and as I say, I’ve already used it. I definitely recommend Jorgensen’s post.

Posted in General | Tagged , | Leave a comment

EmacsCast: The Video

Rakhim Davletkaliyev, whose EmacsCast podcast I’ve written about many times, has published a video on his Emacs configuration and workflow. As you know by now, I always enjoy seeing how others use Emacs and most often learn something new or get a good idea for my own workflow.

Davletkaliyev’s workflow and the Emacs packages he uses are much like mine. Well, except for the keybindings. I’m almost always content to use the default keybindings but Davletkaliyev has aimed to make his bindings as much like that of the other software he uses as possible. Since he’s on a Mac, that means using the ⌘ Cmd key in many of his commands. For instance, he uses ⌘ Cmd+o instead of Ctrl+x o to switch to the next window.

My first thought was that I should be doing something like that too because it would decrease the number of different bindings for similar operations among the applications I use. Then I realized that

  1. Almost everything I do except for the browser is done in Emacs.
  2. For the browser and any other extra-Emacs application I may need, I have Emacs keybindings configured for all the mac commands.

So in a sense, I solved the problem in exactly the opposite way: rather than adapt the Emacs keybindings to be like native app bindings, I configured the native apps to have Emacs keybindings. Either way, it reduces the cognitive load when switching applications.

Davletkaliyev’s video is about 16 and a half minutes but well worth watching. If you want to see exactly how he has things configured, there’s a link to his configuration.

Posted in General | Tagged | Leave a comment

Microsoft Is Closing Its Ebook Store

Microsoft is closing its ebook store. Who cares? The people who have bought books from them care because they will no longer be able to read their books. Microsoft, to its credit is offering to refund the purchase price but why not just keep the authentication server running? How much could it cost?

The author of the linked article paints a dire picture of where all this is leading. It’s a bit overwrought but it’s worth examining the current practice and whether it makes sense. The legal fiction is, “We’re just selling you a license to read the book, not the book itself. We can revoke that license at our will.” Except that hardly anyone thinks like that when they’re buying an ebook.

I’ve written many times about my ongoing efforts to be completely paperless. Part of that is buying ebooks rather than physical books. I really love books and appreciate all the arguments about how they feel and smell but, really, ebooks are just so much more convenient in almost every way that “real” books just don’t make much sense anymore. That, of course, puts me at odds with another of my deeply held “digital tenets:” Keep all important data in an open format.

My guess is that even the hidebound publishing industry will come to see that DRM is against their own interests and give up on it as the music industry has. Whether that happens before Amazon finishes eating their lunch is still an open question.

In any event, the closing of the Microsoft book store should serve as a warning to us all: let someone lock up your data and you could lose it at their whim.

Posted in General | Tagged | Leave a comment

RSS vs. Twitter

Over at Gizmodo, Patrick Howell O’Neill belabors—what seems to me to be—the obvious. He posits that RSS is a much better way to keep up on what’s going on than Twitter. Wen I read that, my immediate reaction was, “Well, Duh!” Twitter, he says, is mostly a toxic tsunami of half-baked hot takes, propaganda, hostility, and outright hate. That characterization is probably more apt for feeds concerned with social issues and politics than those dealing with tech but I think the conclusion holds in both cases: RSS is better.

Although I do check some technical feeds or hashtags on the Twitter website, I use those as pointers to longer more thoughtful posts or articles. I’ve never understood why anyone would think you can say something useful in under 280 characters. I’ve seen more than one blogger quit Twitter and say that it felt like getting off drugs.

On the other hand, I’ve depended on RSS for years to point me to interesting articles that I can write about or otherwise enjoy. These days, I use the outstanding elfeed to do all this from within Emacs.

Lots of folks love Twitter, of course, but at least for my purposes, RSS is a much better solution. A Tweet is a good way to discover that the latest version of Emacs, say, has been released but if you want thoughtful analysis a blog or technical article is a much better bet.

Posted in General | Tagged | Leave a comment

Mu/mu4e 1.2 Available

If you’re a mu/mu4e user, there’s good news. Version 1.2 has been released. It’s mainly a bug release but there are a handful of new features, which you can read about here. I’ve been using it for the last few days without difficulty.

Of course, since I’m running on a Mac, upgrading was a bit complicated. The new version of mu requires an updated Xapian that, in turn, had some updated requirements of its own. Rather than go through the pain of building it by hand, I took the easy way out and installed it with Homebrew. Homebrew installs things in its own special place so the mu build was still finding the old version in /usr/local/bin. I ran a make uninstall on that and then added a link in /usr/local/bin to Homebrew’s copy of xapian-config. I also had the fix the path to bash in the install script but that may be a local artifact on my machine.

Once all that was done, everything worked fine and I’m enjoying my new mail client. If you’d like to read and write your email from inside Emacs, mu/mu4e offers an excellent solution. I’ve been using it for a couple of years and love it.

In the last week, I’ve installed the new mu/mu4e and the new Emacs. Life is good.

Posted in General | Tagged | Leave a comment

Emacs 26.2 Has Been Released

It’s official. Emacs version 26.2 is out and available at the usual places. I compiled and installed it on my Macs without any problems using the usual spell:

configure --with-ns CFLAGS="-g3 -O2 -I /usr/local/include/libxml2"
make
make install
make install-info
sudo mv  nextstep/Emacs.app/ /Applications/

This post is being written with it and so far (after a day) I haven’t seen any problems. If you’re uncomfortable living on the edge and have been waiting for the official release, it’s here. Thanks to John, Eli, Nico, and the others for all their hard work.

Posted in General | Tagged | Leave a comment

The Recentering Sequence

Maybe the Emacs developers knew what they were talking about after all. A couple of years I discovered that you can control the sequence of positions to which recenter-top-bottom will move the current line. As I wrote at the time, abo-abo recommended changing the default sequence from middle \(\to\) top \(\to\) bottom to top \(\to\) middle \(\to\) bottom. As abo abo said, if you believe in gravity that sequence is more logical and is also more convenient. That made perfect sense to me and I changed it in my config.

Lately, I’ve noticed that I almost always end up using Ctrl+l twice because—unless I’m looking at a function definition—I need to see what comes before the target line too. If I am looking at a function definition, Ctrl+Meta+l does just what I want.

Therefore, today I bowed to the developers’ wisdom and changed the recentering order back to the default.

Posted in General | Tagged | Leave a comment