Red Meat Friday: A Close Call

I’ve never understood the allure of Twitter. It is, without doubt, a toxic environment1 and while it may, according to whom you ask, have become more benign under Musk it’s still not, by and large, a place sensible people want to be.

Leave it to the Babylon Bee to perfectly capture the Zeitgeist:

Footnotes:

1

Yes, of course there are exceptions but the predominate vibe is take-no-prisoners political vitriol.

Posted in General | Leave a comment

Finding The Link To An Org Attach File

Matus Goljer (Fuco1), whose work I’ve written about many times before, has an interesting post on his use of org-attach. The point of the post is a way of automating the finding of the Org headline that points to an attached file. Normally, that’s not a problem because you’re starting with the Org file but occasionally you search for the attached file directly outside of Org and want to find the Org entry that points to it.

To me, the part of the post that resonated the most was that org-attach provides a way of avoiding the agonizing decision making that goes into deciding where to store documents in the file hierarchy. In that respect, it sort of reminds me of my email strategy. Following Ben Maughan, I store all my saved emails in a single flat file and use the excellent mu4e search capability to find them. It really is far superior to trying to figure out where in a complex file hierarchy the email belongs.

The same is true in storing a file related to an Org file heading. Rather than trying to figure out the proper place to store it, you simply let Org worry about where it is and use Org’s search and linking capabilities to find it.

Goljer’s post is short and worth a read. It’s another example of how Emacs and Org mode can make your life easier.

Posted in General | Tagged , | Leave a comment

A Brief History of Sun Microsystems

If you’re involved with computer/software engineering and aren’t just starting out, you’ll be familiar with Sun Microsystems. For a long time their computers seemed to many of us to be the very apotheosis of a “workstation”. Many software folks still consider SunOS 4.1.3 to be the best commercial Unix implementation before or since.

Sadly, Sun was caught up in the rise of cheap Intel-based workstations running Linux and was unable to adapt to the market changes. The once powerhouse was finally bought by Oracle and effectively disappeared. The most salient extant Sun product is Java. Its hardware and most of its software has simply disappeared.

It’s easy to see why. When I was coming up, Sun machines were too expensive for most individuals and found use mostly as servers and high end workstations for well healed corporations. On the other hand, most folks could afford a cheap Intel machine running Linux or one of the BSDs. These days, Intel/Linux machines have taken over most of the server market as well.

Asianometry has an interesting video that provides a short history of the rise and fall of Sun. It follows Sun from its inception as a Stanford project to its acquisition—and dismantling—by Oracle.

Sun is an important part of our shared history and their hardware and culture are an important part of our story so it’s worth understanding their part in that history. The video is 18 and a half minutes long so plan accordingly.

Posted in General | Tagged | Leave a comment

The Loop Macro Explained

If you’re a Lisper, you’re probably aware of the loop macro controversy. Few people are neutral: they either love it or hate it. I’m in the latter group. Although I’ve gotten to where I can mostly read a loop macro and figure out what it’s doing, I would never use it to write code. My objections are two-fold:

  1. Its syntax is not at all Lisp-like and requires a paradigm shift to use.
  2. It’s not really documented. Paul Graham remarks that it’s code is the documentation.

Gavin Freeborn is in the other camp. He loves the loop macro and considers it one of the best parts of Common Lisp. Unlike me, he considers its declarative syntax a feature. He thinks the loop macro is “the best form of procedural iteration that I’ve ever seen.” He has a video on the loop macro that regardless of which camp you fall in you’ll probably find useful.

One thing I really liked about the video is that he precedes each keyword with a colon—something not strictly required—making it much easier to mentally parse the loop invocation. If you’re like me and are not a loop aficionado, you’ll find the video useful because it will help you understand what’s going on when you run across the macro in other people’s code. If you don’t mind the idea of loop but are not an expert, the video serves as a good introduction.

The video is just short of 21 minutes long so you’ll need to schedule some time. If you’re not a Common Lisper but want to experiment with the macro, Elisp also has a version (officially called cl-loop but loop is still accepted) that you can play with from the comfort of Emacs.

Posted in General | Tagged , | Leave a comment

Supercharge Your Workflow With Yasnippet

I’ve long been an enthusiastic Yasnippet user and have written about it a few times. Its canonical use case is in programming to fill in primitives such as the for loop in C or a class definition in Python but I rarely use it that way. I mostly use it with Org files to do things like create the header for blog posts, add boilerplate, do simple expansions like latex → LaTeX, insert daily checklists into my journal, and add code blocks to my blog posts.

These are all pretty simple operations that don’t begin to use all that Yasnippet has to offer. Jack of Some has an excellent video on how to superchage Emacs with Yasnippet. He does, of course, cover simple text substitutions but he also shows how to use its more advanced features.

One particularly nice example is his expansion of a Python class definition. As he adds arguments to the definition, the snippet automatically adds the code to initialize the instance with the arguments’ values. More generally, he shows how you can embed Elisp into the snippet template to do non-trivial things like insert the name of the current file into the text.

One thing I didn’t know how to do was to add “global snippets”. Usually snippets are only active for a particular type of file but it’s possible to have snippets that are always available. Take a look at the video to see how to do this.

The video is two years old but I just came across it. It’s definitely worth a few minutes of your time. It’s a few seconds over 12 minutes long so it should be easy to fit into your schedule.

Posted in General | Tagged | Leave a comment

A Better Dired Listing

Sooner or later almost every Emacs user discovers Dired and becomes a dedicated—or even fanatical—user. It’s basically a file manager but embedded within Emacs. As I’ve mentioned before, I tend to be an old-timey sort of guy so my natural inclination is to do my file manipulations on the command line just as I have for years but even I am a Dired convert and do essentially all my file work with it.

Nicolas Martyanoff is pretty much the same but he has a problem with the default listing. His complaint is that there’s a lot of unnecessary information, often formatted in an inconvenient way. That would be a minor annoyance except that it often causes the (arguably) most important datum, the file name, to wrap and be difficult to read.

Fortunately, Dired is reasonably configurable by setting various variables. Martyanoff took advantage of this to produce a nicer Dired listing. The dates are all in ISO format and file sizes are given in bytes rather than the generally useless number of file blocks. The resulting listing is more pleasant and easier to read as you can see from Martyanoff’s post.

Dired, of course, gets its information from ls so getting a better date and size format just means changing the arguments to ls, which are specified in one of the above mentioned variables. Sadly, the required changes are specific to the GNU version of ls so you’ll have to use it.

Martyanoff doesn’t mention if this effects Wdired but there’s no reason it should. That would be a showstopper for many of us. Other than that, this seems like a nice change that might be worth implementing. There is just a bit of Elisp involved so it’s easy to try it out and experiment with it.

Posted in General | Tagged | Leave a comment

Sussman Explains the End of SICP

If you’ve spent any time at all on Irreal, you know that I consider Structure and Interpretation of Computer Programs (SICP) one of the best—arguably the best—books on computer science. It’s influence was tremendous and served as the backbone of the introductory programming course at MIT for a couple of decades.

Then, seemingly suddenly, MIT abandoned SICP and started using Python to do things like control robots in their introductory course. Most of you oldtimers know that I have very strong feelings about this. Just ask Grant.

Still, this change was driven by Sussman and Abelson, the authors of SICP and the primary teachers of the course that was built on it, and we have to consider that maybe they knew what they were doing. Here’s Sussman, in a fairly recent video, explaining the decision to retire SICP. If you care about SICP at all, you should definitely watch it; It’s only 7 minutes long.

Sussman builds a great case for the power of the SICP approach but I’m less convinced by his rational for what replaced it. He describes the poking at “batteries included” libraries to figure out what they do as a sort of science. To me, it seems more like casting magic spells. Younger engineers using those libraries—almost always without understanding how they work—are just casting spells without any understanding of the magic behind them. I think a lot is lost with this approach but folks smarter than me—like Sussman—disagree. Still, we’re all entitled to our opinions and this is mine.

Posted in General | Tagged , | Leave a comment

Literature Review With Org-ref

If you’re a researcher or even a college student writing research papers, one of the arduous tasks waiting for you is the literature review. You probably start with a single paper and want to find related papers that address the same problem. In the past, this was a hard problem but the digitization of papers has made it easier.

John Kitchin has made it easier yet. I’ve written before about his excellent org-ref, a package that helps organize and automate references. The org-ref package has always supported literature review but recently Kitchin has added some new features that take advantage of OpenAlex to find

  • Similar papers
  • Citations of the paper
  • Papers listed in the references

It’s an excellent addition that makes literature review a little less onerous. The reason org-ref is so useful is that Kitchin wrote it for his own use as a researcher and it therefore meets real needs as opposed to theoretical needs that someone not involved with research might imagine. If you haven’t already watched Kitchin’s video on org-ref, be sure to take a look. If you’re a researcher it will be enough to make you take up Emacs. It’s a truly amazing piece of software.

I’ve long been a fan of Kitchin’s work and this latest addition to org-ref is a good reason why.

Posted in General | Tagged | Leave a comment

Code vs. Verbatim in Org Mode

If you do even a little writing in Org mode, you’ve almost certainly needed to occasionally typeset a word or sequence of words in a typewriter font. This, at least for me, comes up in two ways:

  1. I want to typeset something that would normally be part of a code buffer
  2. I want to typeset something like a file name or extension

To a first approximation, the distinction doesn’t really matter because they both end up as a typewriter font. But the two categories are different and Org distinguishes between them. For code items, you’re suppose to use a tilde:

~(setq variable value)~

For the other category—unhelpfully labeled “verbatim”—you’re supposed to use =:

On startup, Emacs reads the configuration file =init.el=.

It’s a great distinction but one that I, and probably many other people, ignore. I always use = for the simple reason that it’s easier to type than ~. After all, they’re typeset the same way so why bother trying figure out the correct one to use when = is easier anyway?

Still, in the back of my mind there’s a little voice that keeps saying, “What if it’s like Y2K? What if one day there’s an exporter that typesets them differently?” It seems like an unlikely, theoretical problem but then so did Y2k. Early programmers waved away the problem with the same sort of rationalizations that I’m using to ignore the difference between = and ~.

Some folks are more forward looking. Grant Rettke, for example, has a system that he adheres to and has even documented. His post, Choosing Between Code and Verbatim Markup In Org Mode, lays out his system and specifies which terms get the verbatim markup and which get the code markup. If you want to do the right thing, his post is a good place to start. Or you could be like me and suffer the consequences when the hammer falls.

Posted in General | Tagged , | Leave a comment

Org Plot Made Easy

As long term Irreal readers know, I was trained as a mathematician and later became a computer software engineer so you’d think I’d be pretty good at generating plots: Nope. I’m terrible at it. My go to tool is Gnuplot, which is powerful and flexible but hard to master for those of us who don’t use it regularly.

I’ve tried Org Plot as an intermediary but I couldn’t get decent results even though Org Plot is just a front end for Gnuplot. Charles Choi to the rescue. He has an excellent post on how to use Org Plot to make nice looking graphs.

His secret is leveraging YASnippet to take care of all the boilerplate that Gnuplot requires. That’s the real problem with Gnuplot. Setting it up requires a lot of very unintuitive specifications in an obscure configuration language. Choi’s solution is to make a YASnippet template for each type of graph so that it’s easy to insert it when needed.

Choi’s solution doesn’t stop there though. He also has a context-sensitive menu that’s activated when you click on an Org table. From there, you can pick the type of graph you want to plot and the appropriate boilerplate will be inserted. Another menu option will run Org plot and generate the graph. See his post for the details including the YASnippets and the Elisp code for the menu.

This is a nice solution for those of us who only occasionally generate graphs but still want them to look nice. And, of course, it’s yet another example of how Emacs lets you have it your way.

Posted in General | Tagged , | Leave a comment