Printf Style Debugging Of Elisp

All the cool kids use debuggers for debugging their code. In most situations that’s the right answer. After all, you can set breakpoints, step through your code, and examine values at each step. If you want a detailed view into what your code is doing, debuggers are the best solution.

Sometimes, though, they’re a bit heavy weight and way more than you need. Often all you need is a few strategically placed printf​s to get the necessary information to solve the problem. Sometimes, for various reasons, you can’t use a debugger so you’re forced to fall back on printf.

Marcin Borkowski (mbork) has a nice example of the latter. He was debugging an Elisp function that messed with windows and that interfered with Edebug’s use of those windows. The answer, of course, was to fall back to the printf method. The natural solution was to use the Elisp message function but there were some problems. The first problem was easy. The messages appeared in the minibuffer and disappeared before he could read them. He fixed that by wrapping message in a function that waited for a key press before continuing.

Then he noticed that virtually all his invocations were of the form (message "var1: %s, var2: %s" var1 var2), and that it made sense to abstract that a bit into a new function. That brought a couple of new problems but they were also easily dealt with.

Mbork’s post is well worth reading and his code is worth a bit of study too. I like the way he just digs in and solves the problems without too much worry about whether or not it’s the best way. At the end of the day, he solved his problem and that’s what matters.

Posted in General | Tagged , | Leave a comment

Capturing Fleeting iOS Notes Org Mode

Over at the Emacs subreddit, ValuableBuffalo is looking for a way of taking what he describes as “fleeting notes” on his iPhone and capturing them to an Org file in his Git repository. As soon as I saw that, I immediately thought of Álvaro Ramírez’s Journelly. It’s an app that Ramírez describes as “like tweeting but for your eyes only”.

Irreal readers know that I’m a huge fan of Journelly and have written about it extensively. My use case is similar to what ValuableBuffalo is looking for: I use Journelly as a memo book so I capture random notes during the day and they are automatically exported to all my Apple devices. My typical is invocation is to bring up Journelly, press the dictation button, record my entry, and save it. Journelly captures the time and my location automatically so I don’t have to worry about that.

Ramírez himself answered ValuableBuffalo and pointed him to working copy to help with the Git interface. I’m happy to have my entries collected in a single Org file on my laptop so I don’t bother with collecting them into Git directly. I suppose I could capture the journelly.org file to Git but I haven’t yet bothered.

Another user, JDRiverRun, mentions using the Apple Notes app for capturing the notes. That’s what I used to do but Journelly automatically adds a date/time stamp and records my location when taking the note. Journelly really is much better for this type of application than Notes.

If you have a need similar to ValuableBuffalo’s, take a look at Journelly. You’ll probably find that it’s a good fit for your needs.

Posted in General | Tagged , | Leave a comment

How RSS Beat Microsoft

As many of you know, I’m a big fan of RSS and use it everyday to scour the Internet for potential Irreal topics and also just for topics that I find interesting or useful. I was there at the beginning—although I wasn’t an early adopter—but I’d never heard of its erstwhile big company competitor Information and Content Exchange (ICE). Big name companies like Microsoft, Adobe, CNET, and others early on smelt the potential for monetizing content syndication and financed the development of ICE.

It was the typical big company fever dream: large, complicated, expensive, and with a protocol that had lots of fields that worried about things like licensing the content. A year later, RSS hit the scene and was an immediate success with “small” publishers like bloggers. Unlike ICE, it was small, easy to implement, and open. Anyone could, and did, make their own implementation.

This interesting, but little known, story is told in a blog post over at Buttondown.com. The post makes the comparison of RSS versus ICE to that of VHS versus Betamax. Although there are all sorts of theories as to why VHS won that particular battle, the Buttondown post claims that it was because VHS was cheaper, simpler and open. Just like RSS.

It’s a story that we see repeated often in our field: some basically freelance guys for their own reasons and often on their own time put together an ad hoc solution to some problem and their solution takes over the world. Even the OSI-TCP/IP wars can be squeezed into this paradigm. The large, complex, government committee designed OSI protocols were expected by many to swamp the TCP/IP upstarts and yet many of today’s younger engineers have probably never heard of OSI and certainly don’t know any of its details except, perhaps, for its famous 7 layer model.

The ICE-RSS wars is an interesting story that I haven’t come across before. It’s definitely worth a couple of minutes of your time if only to see Microsoft and other big companies taking their lumps.

Posted in General | Tagged , | Leave a comment

Ashton Wiersdorf On Organizing Papers For Research

Ashton Wiersdorf has a nice post on how he organizes papers, notes, and citations for his research. Of course, Emacs is at the center of that process and it’s another aspect of Emacs use that fascinates me. A couple of weeks ago I wrote about Kiran Gopinathan’s method of doing paper reviews, which overlaps considerably with Wiersdorf’s post. Two and a half years ago, I wrote how John Kitchin does the same thing.

Wiersdorf is a self-described Emacs maximalist but he is, nevertheless, also a heavy Zotero user. I’ve written about Zotero many times before. It a package for storing, managing, and building the bibliographies for papers. See this Wikipedia article for details. Wiersdorf’s post describes how he combines Zotero and Emacs to manage his research papers.

He also recommends the citar package for handling citations. John Kitchin’s Org-ref is another excellent choice for this but the citar package works well with Zotero. Lots of folks swear by Zotero and if you’re one of those people, citar may be for you.

The other major package that Wiersdorf uses is Protesilaos Stavrou’s Denote. He describes it as a Zettelkasten-like package. Gopinathan uses Org-roam for the same thing so you should take a look at both packages to see which you like best.

Finally, Wiersdorf uses the citar-denote package to integrate denote and citar. It ties citar and denote together and allows you to easily access papers from their citation. Take a look at Wiersdorf’s post for some details.

The most important thing, Wiersdorf says, is to use Emacs to build your own system. It’s not an editor, he says, but a toolkit to build your ideal editor. That’s differs a bit from my usual definition but is certainly a good description. Regardless, the goal is to make Emacs into an editor that meets your exact needs.

Posted in General | Tagged | Leave a comment

Blogging With Emacs

Chris over at Entropic Thoughts has some thoughts on blogging and Emacs. He’s conflicted. On the one hand, he yearns for a simple, static blog generator that he can understand. On the other hand, he uses Org Babel a lot and it’s an important part of his blogging workflow, which involves generating graphs in R for a lot of his posts.

He’d like to write a simple blog exporter that he understands and can modify but feels that it’s too hard to include the Org Babel functionality. I feel his pain. I use WordPress for Irreal and although it mostly works well, I sometimes wish I had a simple static generator that didn’t depend on a complicated infrastructure like WordPress. But every time I look into it, the effort doesn’t seem worth the gain and, as I say, WordPress mostly does a good job of meeting Irreal’s needs.

On the positive side, I do write my blogs in Org mode and have access to all its tools. Before my provider started blocking the XML-RPC protocol, I simply used Org2blog, which took an Org buffer and took care to exporting it directly to WordPress. These days I have a slightly more complicated process. I have a command that converts my Org buffer to HTML and saves it to the clipboard. Then I invoke WordPress and paste the HTML into its HTML input buffer. That’s not ideal but it’s pretty simple and I certainly understand it, at least until I push the WordPress publish button. Every once in while I try publishing with Org2blog because that is truly easiest way to go from Org to WordPress. Maybe I try that with this post.

In any event, it is possible to publish directly from Org even to a static blog fairly easily simply by converting the buffer to HTML and then doing whatever yo need to do to push it to your site.

Posted in General | Tagged | Leave a comment

Org-transclusion

Over at the OrgRoam subreddit, thephatmaster asks for some help in using org-roam to organize and write his research. As of this writing, he hasn’t gotten much response but there is a comment that recommends he take a look at org-transclusion. I hadn’t heard of it so I took a look.

The idea is that you can include content from another file in an org document by means of a link. It’s sort of like a # INCLUDE: but a bit more flexible. You can, for example, make changes in the destination file and have them reflected back to the source file.

You can also specify which lines you want from the source file and have only those imported. There’s also a nice integration with code blocks that the author, nobiot, talks about in this video (9 minutes, 45 seconds).

This looks like a mature package that’s been around for at least 4 years and is still be maintained with the last update 9 months ago. There’s a comprehensive manual available online as well as an info file. The software is available from GNU ELPA and so is easy to install.

This seems like a really good package that can help organize research and serve as a way of reusing research notes. Take a look at the GitHub repository for a list of ways you can use it.

Posted in General | Tagged , | Leave a comment

Bending Emacs: Episode 1

Álvaro Ramírez is trying a different way of communicating his ideas and projects to us. He has a new YouTube channel for this and has posted his first video, Bending Emacs – Episode 1.

It’s a very nice step-by-step explication of how to use his DWIM shell command to translate one or more video files to animated GIFs. I first wrote about DWIM shell command three years ago and have mentioned it several times since.

This problem was just what DWIM shell command was developed for: getting a handle on the complexity and confusion of FFmpeg command line options. Even though Ramírez does this sort of thing all the time, he has trouble remembering all the FFmpeg options. For this particular project he fell back on relying on an LLM to give him the magic formula but if you’re not an AI user, you can always read through the documentation.

After that, it’s a simple matter of using DWIM to capture the process. Ramírez also shows how to capture the process as an Elisp function so that it can be invoked seamlessly from Emacs whenever it’s needed.

Those of you who like to get your tech hits visually will enjoy this video. The blog post has a good précis of the video and the video itself is only 6 minutes, 15 seconds long so it’s easy to fit into your schedule.

Posted in General | Tagged | Leave a comment

The Author On Inhibit Mouse

Note

Sorry this is late. The Internet has been out all day here.

Post

James Cherti, the author of inhibit-mouse, has a blog post that talks about the package. Irreal wrote about the package last week but you may enjoy learning a little bit more about it first hand from its author.

Cherti discusses why you might want to disable the mouse and why he believes that inhibit-mouse is a better solution than the disable-mouse package. The majority of his post explains how to configure the package: it turns out that it’s very configurable. The information in Cherti’s blog post is much the same as the README on his GitHub respository for the package so you can read either one.

As I said last week, it’s really easy to generate unintended mouse actions especially if you’re working on a laptop with a trackpad. Inhibit-mouse is an easy way of preventing that and helping you wean yourself from Emacs mouse usage.

Despite what you read here on Irreal and elsewhere, there isn’t really anything wrong with using a mouse with Emacs or any other app but if you prefer not to or, if like me, you find yourself making inadvertent mouse clicks, inhibit-mouse or disable-mouse are fairly easy ways to solve the problem.

Posted in General | Tagged | Leave a comment

Eliminating Emacs “Bloat”

Over at the Emacs subreddit, emacff wants to know how he can eliminate Emacs “bloat”. It’s a harmless question and if it’s purpose was trolling, it largely failed as emacff received reasonable answers to his question. Still, it’s annoying. We see this sort of question all the time. Someone is in a tizzy because Emacs includes the doctor or tetris commands or something else the complainer doesn’t see the point of.

There are two answers to these complaints. The general answer is that Emacs is best thought of as a modern day Lisp Machine so of course it has functions not related to editing just as the original Lisp Machines did. The editor is just one function of many.

The specific answers is that these functions—and, indeed, many others—use virtually no resources except for a tiny bit of disk space. That’s because many Emacs functions aren’t loaded until they’re called so the only resources they’re using is the disk space that holds their code. On a modern computer that’s literally in the noise as far as disk space is concerned.

Emacs users are famous for spending a huge number of cycles fiddling with their editor configuration and I suppose worrying about removing unwanted functionality is another example of that. Except users tweak their configuration to improve their workflow. Eliminating tetris from your Emacs build doesn’t improve anything. It just wastes your time. To my mind, it’s like complaining about some application your OS provides but that you don’t use. Sure, you can get rid of it. Until the next OS update. Similarly with Emacs. All you’re doing is introducing a reoccurring task to be performed every time you update your editor.

It is, of course, possible to do what emacff wants but it’s a lot of work and requires technical skill that many users—especially those who ask questions like this—are unlikely to have.

Posted in General | Tagged | Leave a comment

Obscure Emacs Packages: tmr

Jakub Nowak has entered the Emacs Carnival: Obscure Packages sweepstakes. His entry is about tmr. For those of you who don’t know, tmr is a packages that allows you to set timers from within Emacs.

Until I got my iWatch last April, I never cared much about timers. I’d just look at the clock and wing it. My iPhone, of course, has a timer but I didn’t use it a lot. With the iWatch, setting a timer and having it with you all the time is easy and I got in the habit of using timers more than I had.

Still, if you’re working on your computer and need to set a timer for something you’re doing on that computer, it’s natural to have the timer running on the computer itself. The tmr package from Protesilaos Stavrou (Prot) is just what you need. You can set multiple timers in various ways and display a list of active and expired timers from within Emacs.

Take a look at the manual at the above “tmr” link to see the capabilities and how to access them.
Prot, of course, has contributed many packages and in the scheme of things this may seem like a small one but when you want to time something, it’s just what you need. Take a look and see if you don’t agree.

Posted in General | Tagged | Leave a comment