The Use Of Tools

Seth Godin has an interesting post on the use and design of tools. His thesis is that some tools, such as a hammer, are immediately accessible to the casual user. Even experienced hammer users aren’t going to be significantly more efficient in their use.

The tools that you and I use—modern tools as Godin puts it—aren’t like that. They’re more complicated and very often difficult for the casual user to use effectively. Sadly, says Godin, these casual users don’t bother to learn how to use these tools well. They take the attitude that they’re too busy to waste time on learning, let alone mastering, their tools. Meanwhile those who do master these tools can be orders of magnitude more efficient with them.

So why does this post have the “Emacs” tag? It’s not a mystery. One of the most frequent complaints that I’ve been seeing against Emacs is that it’s too hard to learn and that, after all, real people have jobs to do and can’t afford to spend time learning things. Left unstated is how all those Emacs users, many of whom have produced truly astounding software, managed to learn Emacs.

Over and over again you see phrases like “VS Code just works out of the box.” That’s great for the casual user “too busy” to master difficult tools but failing to master your tools creates a debt that will come due, probably at a most inconvenient time.

As Godin puts it,

Don’t hold the hammer at the wrong end. And insist on software that’s worth the time it takes to learn.

Most important, once you find software that’s worth the time to learn, learn it.

None of this is to say that you must, or even should, use Emacs. Only that whatever editor you choose, take the time to learn it well.

Posted in General | Tagged | Leave a comment

The Zen Of Task Management

Bastien Guerry has a longish post on how he uses Org mode for task management. If you’ve been around Org mode for any amount of time, Guerry will be familiar to you. He took over the maintainership of Org mode when Carsten Dominick decided he needed to get back to Astronomy, which is, after all, his profession. Since then, Guerry has stepped in when Org needed him and has continued to be a presence in the project.

His years of working on Org mode internals have given him a first rate understanding of how Org works and the best way to use it. Therefore his post on how he uses Org to manage his tasks is must reading for all Org users. Guerry will be the first to tell you that his system may not be what you need but his reasoning for why he made the choices he did is instructive for us all.

I don’t really use Org to manage my tasks to the extent that Guerry does. For me, my agenda is more of a display of my daily log although some tasks do find their way into my agenda. Regardless, I found his discussion of his organization of tags to be very helpful.

No matter how you use Org mode, you should take a look at Guerry’s post. He has a lot of good ideas that you may find useful.

Posted in General | Tagged , | Leave a comment

Decreasing Emacs Load Time

A week and a half ago, Bozhidar Batsov stirred up a storm by claiming that Emacs startup time doesn’t matter. There was much foaming at the mouth but I agreed with Batsov: Emacs startup time hardly every matters. When it does, it is in very special circumstances that, happily, most of us never experience.

At the end of my post on the matter, I said that if your Emacs startup time is lengthy, it probably indicates a problem with your configuration. Batsov apparently believes the same and in a new post offers some advice for addressing that problem.

He frames his discussion in terms of the use-package macro that most people use. The secret, he says, is to delay loading packages until they are needed. That makes sense because loading a single package won’t take long but loading, say, a hundred may add significant time to your init time. By deferring the loading, you speed up Emacs’ startup time at the cost of adding a tiny delay later when you first actually need a package.

Batsov’s suggestions are a bit complex but the TL;DR is to avoid the :preface, :init. and :config keywords. You should definitely read his post for the details. Ironically, he doesn’t follow his own advice because, as he says, Emacs startup time doesn’t matter.

Posted in General | Tagged | Leave a comment

Emacs For Everything

Joshua Blais has an interesting post that looks at the idea of using Emacs for everything. That’s a familiar meme for us Emacsers, of course, but you don’t often see a careful, considered examination of the idea. Blais is an Emacs user so his post is, naturally, supportive of the idea but he does try to give both sides of the issue.

Blais’ main argument is built around the flow concept. Interrupting a knowledge worker’s flow can have devastating effects on their productivity. These interruptions include context switches and one study suggests that context switching and multitasking takes up around 60% of our working time. That seems high to me but whatever the value, it’s certainly significant.

One of the virtues of Emacs is that virtually all your text based tasks can be done in Emacs. That’s significant because the editor provides a uniform interface to all those tasks. Indeed, you can even slip it into other apps with packages like Emacs Everywhere that allow you to bring up an Emacs window to edit some app’s text area. For example, I use it with iMessage so that I can compose my texts in Emacs.

The advantage to doing most things in Emacs is that you avoid context switches and can better stay in the flow. A secondary benefit, as least for me, is that it provides a single set of muscle memories to deal with. As I’ve said before, I do better with a single set of keybindings so folding everything possible into Emacs is a win for me.

Blais also considers and dismisses the argument that Emacs takes so long to learn that you never regain the time “lost” to learning it. Even a few seconds thought is enough to recognize that idea for the silliness it is but Blais makes the point that if you aren’t using Emacs you’re still spending time learning other utilities that Emacs would otherwise handle. I know this first hand. Before I came to Emacs I was a long time command line user and spent years learning to use it effectively. Now I rarely use the command line; everything I need to do I can do from within Emacs.

Blais’ post is well worth a few minutes of your time whether or not you’re an Emacs user. Take a look.

Posted in General | Tagged | Leave a comment

AI And Em Dashes

My old colleague and friend Watts Martin has an interesting and amusing post on em dashes and their indication of AI generated text. As many of you know, Irreal is an em dash friendly site [1, 2, 3, 4] and we spend a good portion of our pixel budget on them.

I was, therefore, surprised to discover from Martin’s post that according to LinkedIn influencers, real people don’t use em dashes—they use hyphens—and therefore em dashes are a sure sign of AI generated text. Once I got over the notion of a “LinkedIn influencer” and what that could possibly mean, I read Martin’s explanation for this bizarre and clearly erroneous belief.

His explanation would make a fine Red Meat Friday post. The TL;DR is that LLM AIs are, by and large, trained on polished text where the use of em dashes is natural and common, whereas, sadly, many people can’t write at all. That is, their reading and writing is restricted to things like emails or business memos that haven’t had the benefit of even a first editing pass, let alone a final polishing. Most of these people don’t read enough “good” writing to even know what it looks like.

Those of us who do use em dashes should feel flattered. We are, apparently, at least as good at writing as the current AIs. Of course, I’d prefer the comparison to be to Iain M Bank’s Minds—this is Irreal, after all.

Posted in General | Tagged | Leave a comment

Scrim Beta

Charles Choi, someone whom Irreal often writes about, has a new app and is looking for beta testers. His app, scrim, is a way of making the org-protocol available to macOS users. The problem is that org-protocol depends on the ability to call emacs-client from within the invoking application but security rules on recent macOS versions make this difficult or impossible. Take a look at the scrim link for a fuller explanation.

Becoming a beta tester is really easy. All you have to is install TestFlight and choose the Scrim app. My experience with TestFlight has been outstanding. It automates virtually everything including keeping you up to date with the latest beta version.

The only app I ever want to export data from is Safari and I have some custom AppleScript code to handle that. Still, if I were starting today I would probably try to use org-protocol to solve the problem for any application supporting the share menu.

If you want to import data from other applications into Emacs or think that being able to do so would make your workflow smoother, take a look at Choi’s post and consider becoming a beta tester. If you are already a Captee (Choi’s previous application for this) user you should especially consider this.

I can tell you from my own experience with being a beta tester for Journelly, that it’s a rewarding and beneficial activity. You not only get an early look at an application but can also influence its final form. And, of course, you help the developer deliver the best possible app.

Posted in General | Tagged , | Leave a comment

Emacs And Lisp

Joe Marsahll has been blogging up a storm lately. One of his latest posts is a sort of personal history of Emacs and its relationship to Lisp. When Marshall started as an undergraduate, he was using the line oriented editor TECO. If you think your experience with an editor is difficult, read his description of what it was like to use TECO.

Soon he was directed to Vi and a whole new world was opened to him. He no longer had to work in the blind but could actually see what he was doing. Later, when he moved to MIT he was introduced to Lisp and various early incarnations of what we now think of as “Emacs”.

Emacs, of course, began life as a set of macros for TECO so, in a sense, Marshall revisited TECO when he started working at the MIT AI lab. but the Lisp Machines that were developed in the AI lab had their own Emacs clone integrated into the system. In his career he has used a wide variety of Emacs-like editors but like all of us he’s using GNU Emacs these days.

One of the things Marshall talks about is using Sly with Emacs to recreate his experiences on the Lisp Machine. Sly, he says, pretty much recreates the interface that you had using ZWEI—an early version of Emacs—on a Lisp Machine. I’m still using Slime for my Lisp coding but, as I have written many times, I have a long standing urge to work on a Lisp Machine so I may give Sly a try if only to get closer to the Lisp Machine experience.

Posted in General | Tagged | Leave a comment

Prot On Elisp

If you follow the various Emacs forums, you’ll see a lot a whining about how hard Elisp is to learn and how things would be so much better if only the extension language were something rational like Python, Ruby, or Lua. I rail frequently against this nonsense but Prot (Protesilaos Stavrou) stands as an unassailable refutation of the silliness.

He’s a guy with a liberal arts education who has no training in programming and yet has nevertheless produced some really great Emacs software. If you look at his code, you can see that he’s obviously mastered the intricacies of Elisp.

Now, Prot has shared some of his knowledge in the form of a short Elisp tutorial. Although Emacs is exhaustively documented, there’s a dearth of Elisp documentation for beginners. There is, of course, the Elisp manual, which is comprehensive, but not really beginner friendly. It’s a reference rather than a tutorial.

There’s the builtin Elisp tutorial and Mbork’s Elisp book but not much more. I am, therefore, happy to see Prot’s contribution. I haven’t had a chance to do more than scan it but it seems like a very worthwhile addition to the Emacs corpus.

One thing for sure, it should put all the whiners to shame. If you’re claiming to be a software engineer but find Elisp too difficult to learn, you should be chagrined that a guy with no formal training in software is nevertheless able to produce first rate Elisp code that the Emacs community embraces as useful and excellent.

The irony is that Lisps in general are actually easier to learn and use than other languages. It’s just that they’re unfamiliar to n00bs so they seem unapproachable. If you just suspend your expectations from other languages, you’ll find that Elisp is actually an easy language to learn.

Update [2025-04-13 Sun 16:24]: Added link to Prot’s book.

Posted in General | Tagged , | Leave a comment

An Application Of Bloom Filters At Google

Joe Marshall, who is an old time Lisper now working at Google, has an interesting story about the use of Bloom filters at Google. The story begins when Marshall noticed an anomaly in the response time graph of one their search appliances. There was an odd blip at 300 ms across several machines that was independent of the search string.

Marshall soon narrowed the problem to the spell server that asks you “Did you mean X” when you misspell a word in your search string. Here’s how that works. When you enter a search string, each word is checked to see if it’s in the list of “known misspellings of legitimate terms”. This is done by means of a Bloom filter. The thing about Bloom filters is that if they tell you an item is not in the list then that item is definitely not in the list. But if it says the item is in the list, the item may or may not be there. If a spell server term is flagged as a misspelling, a longer running process is invoked to find the misspelling and suggest alternatives. Obviously, misflagged terms increase response time.

A good Bloom filter is designed so the probability of a false positive is minimized. Marshall gives the basic idea of Bloom filters but they’re actually a bit more complex because they use multiple hash functions. Still, his explanation tells you what you need to know: It basically hashes each word into a bit array that is false if the term is not there, and true if any term hashed to that bit location. Obviously the bigger the bit array, the less chance of a collision. You can check the linked Wikipedia article if you want the details.

Marshall’s problem turned out to be that the bit array wasn’t big enough so even correctly spelled words were being flagged. When he increased the bit array size the problem went away and the 300 ms blip disappeared.

Posted in Programming | Leave a comment

Configuring Journelly

After my post Initial Thoughts On Journelly, in which I recounted how I’m using Álvaro Ramírez’s Journelly app, Bren Smith asked me to share my configuration for sharing files between my iOS devices and my Mac. If you’re an Emacs user and want to enjoy the full power of Journelly, it’s important to be able to share the files between your iOS devices and your Macs.

The thing is, it’s so easy that it didn’t occur to me an explanation was needed. By default, Journelly keeps all its files locally on your phone or other iOS device but it’s possible to store them in the iCloud or, really, anywhere that’s reachable from your Mac and your iPhone/iPad. If you click on the three dots at the upper right of the Journelly screen and then choose Storage → iCloud Drive, Journelly will allow you to store your files in the iCloud. From there you can easily access them from your Mac.

Apple’s default location for storing the files is a long and complex file spec so you’ll probably want to set a symbolic link to it so that it’s easy to access from the Mac. Once you’ve done that, it’s easy to bring up the Journelly file in the usual way from Emacs or any other app.

It’s also possible to put the files somewhere else in the iCloud by using the Storage → Other… option. I did this so I wouldn’t have to navigate the complex file spec but in the end, it turned out to be easier to just set a symbolic link so I recommend you just use the Storage → iCloud Drive option. On the other hand, I think, but haven’t verified, that you can use Storage → Other… to store the files anywhere you like but I don’t know the details.

The other thing to keep in mind is that Journelly is still in beta so any or all of this could change. Still, I’ve been using this setup every day without any problems.

Posted in General | Tagged , | Leave a comment