Back-To-The-Office Backfires

Those of you who have been around for a while know that Irreal strongly supports remote work. It’s obviously good for those employees who want it and Irreal has always claimed it’s good for employers too. Sadly, a combination of following the herd and a tendency toward being control freaks has prevented many companies from embracing remote first policies.

The management of these companies always use the same argument: having employees on-site increases synergy and improves productivity. These claims have always been based on “feelings” and claims of obviousness without any actual research to validate them.

Now The Hill is reporting on some comprehensive research that shows these beliefs to be baseless. Businesses that offer their employees flexibility and have a strong remote first policy actually do better on all the metrics that matter to an enterprise. They’re more productive, have better productivity growth, better retention, and—perhaps most fatally for the control freaks—have improved revenue growth over companies with an on-site mandate.

Indeed, one study found that fully flexible companies grew revenues 1.7 times faster than “mandate driven” companies in the years 2019–2024. That’s a hard statistic for the control freaks to shrug away with synergy arguments.

The best summary of the article is its last paragraph, which is worth quoting in full:

Executives face a choice. They can pursue badge-driven control that fails to raise performance and risks losing their best people, or they can treat flexibility as a strategy, design for trust and clarity, and measure what matters. The organizations that choose the latter are building stronger teams and better businesses. The smart move now is not to roll back flexibility — it is to raise the standard for how you lead.

Realistically, we shouldn’t expect much change. The control freaks will continue to talk about water fountains and insist that workers will slack off if they’re not being monitored—preferably in person—constantly. Perhaps evolutionary forces will solve these problems for us. On the other hand, the control freaks are always with us.

Posted in General | Tagged | Leave a comment

Your Commit Messages Should Tell A story

Chris Mariana has an interesting post about making Git commit messages with Magit. Well crafted commit messages, he says, can tell a story about your project than can valuable in the future. The secret is in the “well crafted” part.

Rather than a bunch of messages like “Small edits” or “tweaked the foobar”, your commit message should describe what you actually did. Maiorana is a writer and his examples reflect a writing project rather than coding but everything he says applies regardless of what type of files you’re committing. Take a look at his post for examples of both good and bad commit messages.

The other nice thing about his post is that he shows how to use Git reporting to do some rough analysis. Magit, of course, has easy ways of doing this. Again, see Maiorana’s post for the details.

Finally, he offers some suggestions for writing better commit messages. These are aimed more at the story writer than the coder but, again, they can help someone writing code too;

I must admit to being guilty of writing terrible commit messages, especially for my blog posts. I’m very apt to use Maiorana’s example of “minor edit” instead of saying what I actually fixed. Sometimes, it just fixing a typo in which case “fixed typo” is fine but usually it’s something more extensive and a meaningful commit message helps me locate the commit I’m looking for.

Posted in General | Tagged , | Leave a comment

Anju

We here at the Irreal bunker belong to the cohort that believes every right thinking person eschews the use of the mouse whenever possible. Still, in our honest moments, we recognize that there are some intelligent, skillful people who do like using the mouse.

One such person is Charles Choi, who likes using the mouse and even menus. Emacs, of course, supports mouse use but it’s always been a step child and Choi has had enough. He has, therefore, written a package, anju, that implements several features to make using the mouse in Emacs a bit nicer.

He’s added features to

  • Pop up a window management menu
  • Pop up a configurable list of buffers
  • Maximize current window or return to previous window configuration

Added commands to the context menu for selected text, Org mode, and Dired mode, and added a bookmarks submenu to the Main menu. He’s also reorganized the Help menu.

As I said above, I don’t care very much about any of this but I’m sure there are plenty of people who do. Choi has done a lot of work to make using the mouse and menus in Emacs a better experience both with this package and some of his previous ones.

Posted in General | Leave a comment

Christian Tietze On Emacs Mistakes

In celebration of this month’s Emacs Carnival, Christian Tietze has a post on his mistaken beliefs about Emacs. His “mistakes” were not about his using Emacs in the wrong way. They concerned his mistaken beliefs about Emacs.

His first mistaken notion was that Emacs is old and clumsy. We see this all the time. It’s certainly true that Emacs is old in the sense of having been around for more than 40 years but it’s not old in the way people who say that mean. Emacs is, in fact, a modern editor that offers technology that others are still trying to get working. The canonical examples are Org mode and Magit but there are others.

As for clumsy, n00bies find it that way the same way beginning bicycle riders find bikes clumsy. Once they learn to use it correctly it seems natural and they don’t have to think about how to use it.

His second incorrect idea involves text. He believed that text was not enough and that you needed fancy formatting of your input text. Actually, of course, Emacs’ almost exclusive use of straight text is one of its superpowers. Irreal and just about every other Emacs commenter has made this point repeatedly and discussed it in depth.

The rest of his misconceptions involved what you can do with Emacs. At first he thought he would use it just for to-dos—presumably with Org—and that he would build his configuration by copying and pasting bits of Elisp that he found elsewhere.

Experienced Emacers learn that Emacs will eventually try to swallow every task you do on your computer and that your init.el is a black hole that will suck up any mental cycles that venture close to its event horizon.

Tietze’s misconceptions are common but fortunately every user who sticks with Emacs comes to recognize them for the mistakes that they are.

Posted in General | Leave a comment

Lisp Machines!

Anyone who’s been around Irreal for a while knows of my fascination with Lisp Machines. Part of my love or Emacs is that it’s (sort of) a reimagining of the Lisp Machines. Sadly, I never had a chance to work on an actual Lisp Machine but my fascination and love for them continues.

The idea of the Lisp machine is that although it had pretty much standard hardware components, it had specialized microcode that optimized it for running Lisp. For me, the real win was the software more than the hardware. That software still exists but is encumbered so it’s not available without a steep payment or a bit of piracy. That means that for those who, like me, love the idea of the Lisp Machine, the closest we’re going to get is Emacs.

Ketrainis over at Asianometry has an excellent video that recounts the history of the Lisp machines from their birth to their demise. They were hundreds—perhaps thousands—of times slower than today’s cheap laptop but they were built by and for hackers and everything was user customizable just as with Emacs. Even the microcode could be reprogrammed. Joe Marshall has a great post that describes his reprogramming the Lisp Machne microcode to break DES.

This customizability was a huge benefit that every Emacs user will identify with. If the software didn’t support what you needed it to do, you could simply change it—even at the microcode level—to get the behavior you needed.

Ketrainis’ video is 45 minutes, 21 seconds longs so you’ll definitely need to schedule some time but if you have any interest in Lisp Machines, it’s worth your while.

Posted in General | Tagged , | Leave a comment

Paredit Keybinding Conflicts

There are, I suppose, a few Lisp programmers using Emacs who resist paredit but most of the rest of us have long since succumbed to its charms. It can be a bit difficult to get used to but once you do, it’s a tool you don’t want to live without.

There is a problem though. Since Paredit’s introduction 20 years ago, Emacs has added new default keybindings some of which conflict with the existing Paredit keybindings. I can remember having to remap some of Paredit’s keybindings to avoid this.

Bozhidar Batsov has a nice post that discusses these conflicts and how to deal with them. My use of Paredit is mostly restricted to a small subset of its commands so I haven’t experienced the full impact of these conflicts. Even for those commands I do use—like slurp and barf—the conflict doesn’t bother me because I never use the arrow keys to move the cursor.

If you use more of the Paredit commands, take a look at Batsov’s post for his suggestions for resolving them. Or, you could switch to Fuco1’s smartparens, which avoids these conflicts while providing the same functionality and extending it to other file types.

One thing for sure, if you use paredit-splice-sexp you’ll want to resolve its conflict because Emacs uses Meta+s as the search map prefix and that is too useful to forego.

In any event if you’re a Paredit or Smartparens user, you should definitely take a look at Batsov’s post.

Posted in General | Tagged | Leave a comment

Restarting Running Elisp Code

One of Lisp’s features that seem like magic to those of us brought up with C-like languages is the ability to change the code of a running process, reload it, and continue running with the new code. The amazing thing is that the process is not restarted. It simply continues running but with the new code.

Emacers do this all the time, often without realizing what they’re doing. They make a change, to their init.el, say, evaluate it, and continue executing their current Emacs instance. Sometimes, this is simply changing a parameter value but you can also change a function definition in the same way.

If you’re new to Emacs you may wonder how this magical spell is invoked even though you’ve done it several times. It’s simply a matter of evaluating the new code and continuing. Except when it isn’t. There are some edge cases that can trip you up. In Lisp it’s devar values. Emacs adds defface and defcustom. The values defined by these commands are not changed by a code update. This is on purpose. The idea is that you don’t want to mess with a user’s, say, custom values when you change the code.

Bozhidar Batsov has a nice post that discusses all this with particular attention on how to deal with devar and the other edge cases. For example, I always thought the the way to change devar variables was to evaluate a setq of the variable with the new value but you can also simple invoke eval-defun (Ctrl+Meta+x) to the devar to update the value. This also works for defcustom and defface.

The other nice thing I didn’t know about is the restart-emacs command that restarts Emacs and—with desktop-save-mode​—reloads everything, including the new defvar etc. values. Take a look at Batsov’s post for more details.

Posted in General | Tagged | Leave a comment

🥩 Red Meat Friday: AI FOMO

Observant Irreal readers will have noticed that I hardly ever write about AI and its attendant hoopla. I recognize that it has shown itself useful in certain restricted domains but I can’t shake the feeling that it’s mainly a magic trick powered by statistics, about which Benjamin Disraeli purportedly said, There are lies, damned lies, and statistics.

Everyone in the tech world, and elsewhere, is talking about AI and there is a strong, if subtle, pressure to get onboard. Terence Eden says no and rejects the pressure to avoid being left befind. He compares the AI hype to the previous hype about cryptocurrencies. Remember them?

Eden recalls being told to avoid being left behind on cryptocurrencies or “enjoy being poor”. The whole argument struck him as strange. From what was he going to be left behind? If, and when, he said, BitCoin and its siblings became useful, less volatile, reliable, and easier to use, he could adopt them then without the attendant risk of being an early adopter.

He feels exactly the same about AIs. As I said above, he has found them marginally useful in specific domains but not generally ready for widespread use. Indeed, in the journalism business, for example, they seem mainly useful for getting journalists fired.

If the AI tech proves to be as amazing as they claim, he says, there will plenty of time for him to adopt it. In the mean time, he’s not wasting time and effort on what may prove to be another technology that never realizes its claimed potential.

Posted in General | Tagged | Leave a comment

Some New Packages

Over at Bicycle For Your Mind, macosxguru reports that despite his good intentions to stop tweaking his configuration and absorb what he already had installed, he found that there were so many excellent new packages that he had to add them.

I can confirm that the packages he lists are, indeed, brand new and just released. There were so many of them last week that I couldn’t write about them all. Here, for the record, are the new packages that he’s just installed. Take a look at macosxguru’s post for more details.

Kirigami
A sort of general fold and unfold package that works everywhere. I almost wrote about this last week but ran out of time.
Visible-mark
Make the marks visible. Which marks and their appearance is configurable.
Javelin
Quick bookmarks for Emacs.
OPML to Org
Converts OPML files to Org files.
Appine
App in Emacs. This is a very interesting package that allows the embedding of macOS views such as WebKit, in Emacs. I didn’t get a chance to write about this but I definitely want to research it more. It looks like it could be very useful.
Buffer-guardian
I did write about this in conjuction with super-save. It automates the automatic saving of buffers when various events like loss of focus or timer expiry happen.
Isearch-lazy-count
A package that numbers the targets for isearch.
Markdown-table-wrap
Wrap Markdown tables to a fixed character width.
Surround.el
I wrote about and installed this package. It deals with adding and deleting surrounding delimiter pairs and more. I really like this package.

All of these packages are worth looking into if you have a need for their functionality.

Posted in General | Tagged | Leave a comment

Moving From Obsidian To Emacs

Curtis McHale runs an online book club where readers share their posts on the current book. He’s been using Longform in Obsidian but it kept corrupting his data organization so he decided to move to Emacs. His site requires Markdown but he decided to go all in on Org mode so he needed a way to convert his old Markdown posts to Org and then to export his Org files to Markdown.

Migrating from Markdown to Org was easily handled by Pandoc. When exporting from Org to Markdown there were a couple of problems. The easiest problem was smart quotes: " and ' are mapped to the HTML entities &ldquote;, &rdquote;, &lsquote;, and &rsquote;, which is not what McHale wanted. He fixed that by simply turning off with-smart-quotes.

The slightly harder problem was footnotes. The Org exporter handles them correctly but presents them as a Top Level heading, which doesn’t work for him because he has each post for a book as a separate subtree in the book’s Org file. He fixed that with a bit of post-processing that mapped # Footnotes to #### Footnotes.

His post has a video that shows him stepping through all this if you prefer a visual presentation. He uses Doom Emacs so that may be a bit disorienting to those who are used to vanilla Emacs.

In any event, it’s a nice post that shows how Emacs can easily handle tasks that you were using more complicated apps like Obsidian to do.

Posted in General | Tagged , | Leave a comment