Tracking Tax Documents With Org Mode

As I’ve written many times, I use Org mode to organize a ridiculous percentage of my life and can’t imagine living without it. It’s just so powerful that I keep finding new uses for it. The problem is, though, it’s so big and powerful that it’s hard for a n00b to get started. Experienced Org users always give the same advice: don’t try to learn it all at once; learn and use some small part of it first and then move on to another aspect of Org. Rinse and repeat.

Eric MacAdie has a slightly more refined version of that advice. As he says, “Learn X to accomplish $SOME-IMPORTANT-TASK” is much easier than just “Learn X”. This being tax season here in the U.S., he suggests learning how to use Org lists to track the receipt of tax forms.

That’s exactly how I learned Org. I started by making a check list of the W2s and 1099s that I expected to get and checked them off as they came in. When the list was complete, I could move on to the next stage of preparing my return. But that was just the first step. Later, I started tracking my tax info all year long. I had an Org table for each class of expense and added each tax deductible item to it as I went along. Each row of the table also had a link to the receipt for the item so they’re easily accessed in case of an audit. Of course, being Org tables, I also had a running total automatically. In one case, only a portion of an expense was deductible and Org could take care of that calculation automatically as well.

Finally, I had a summary table that gathered the totals from each of the tables. That table is completely populated automatically by Org as well. At the end of the year, I simply export the required tables to PDF and send them and the W2/1099 documents to my accountant. It’s still not pleasant—tax time never is—but it’s a lot easier than it used to be.

If you’re looking for a task to apply Org to and you live in a jurisdiction like the U.S. with a completely irrational and dysfunctional filing system, tracking your tax data is a good place to start.

Posted in General | Tagged , | Leave a comment

Red Meat Friday: Neovim and Astro

Regular readers know that I was a Vi/Vim user for many years before I switched to Emacs. I liked Vim and was happy with it but when I started writing in Lisp dialects, trying Emacs seemed liked a worthwhile experiment. I was pretty quickly captured by the Lisp Machine vibe that Emacs provides and have been a devoted user since.

Still, I have always maintained that Vim is a great editor and the proper choice for those who want just an editor and not an operating environment of the type that Emacs provides. The latest iteration of Vim is Neovim, which among other things has replaced the terrible Vim extension language with Lua. I haven’t used it—Emacs devotee, remember—but it seems like a nice evolution of the Vi/Vim family.

To me, the greatest advantage of the Vi family is its composable key sequences that make learning the editing commands relatively simple. I was, therefore, a little nonplussed by this video on Neovim and Astro. If I had to summarize my impression in a single phrase it would be “bringing Doom Emacs to Vim”. The most salient feature to my mind is the substitution1 of Vim’s composable key sequences with a mishmash of Doom-like key sequences many of which aren’t even mnemonic.

The whole thing seems ill conceived. It has a lot of Emacs features but they seem poorly implemented. For example, the first part of the video involves installing Astro and involves several iterations of restarting Neovim. Emacs users don’t have to perform that dance. To channel Dennis Ritchie, if you want Doom Emacs you know where to find it.

Of course, some folks obviously like the system. You might too so take a look at the video. It’s just over 16 minutes so shouldn’t be too hard to fit in.

Footnotes:

1

Or perhaps addition would be fairer

Posted in General | Tagged , , | Leave a comment

Some Technical Details on AWK

Many of you know that I’m a big fan of AWK. After Lisp and C, it’s my go to language, especially for scripts that involve reading a bunch of lines and performing some sort of regex-mediated action on them. Its language is basically C-like but there are some anomalies that can seem mysterious.

Volodymyr Gubarkov has a project to provide an InteliJ plug in for AWK and part of that requires parsing AWK syntax so he has a good handle on those anomalies and why they exist. He discusses those peculiarities in his post, AWK technical notes.

It’s an interesting post that explains many things that you probably didn’t know about AWK. In a way, it’s getting into the weeds but it also increases your understanding of the way things work and allows you to write better AWK.

For example, one thing I didn’t know was that although it’s illegal to have a space between a user defined function and its argument list, it is legal to have a space between a built in function and its argument list. The reason for that involves string concatenation. Take a look at Gubarkov’s post for the details.

The post mentions some other interesting anomalies in the AWK syntax and the reasons for them. If you use AWK, it’s definitely worth reading the post if only to be aware of the gotchas waiting for the unwary.

Posted in General | Tagged | Leave a comment

Stacks, Heaps, and Recursion

Even before I learned Lisp, I really loved coding with recursive algorithms. When I decided to learn Lisp, I did so through Paul Graham’s ANSI Common Lisp, which meant, of course, that recursive programming became part of my programming DNA.

A significant part of my Lisp journey involved Scheme where recursion is the go to mechanism for most looping constructs. That’s because the Scheme standard mandates tail call optimization so that recursion is no more expensive in time or memory than any other looping mechanism. Not all languages or even all compilers for a given language support tail call optimization so a prejudice against recursion has emerged. The problem, according to this prejudice, is that recursion can lead to stack space exhaustion.

Tim Bradshaw examines this prejudice and dismisses it for the silliness it is. According to Bradshaw, there’s a deep-seated belief among programmers that stack space is a scarce, valuable resource while heap space is essentially free and unlimited. This leads to a preference for implementing inherently recursive procedures in an interactive way that involves managing the stack explicitly in the heap rather than using recursion and managing the stack implicitly.

As Bradshaw points out, the stack and the heap are both just memory and neither is more expensive or scarce than the other. There’s no reason to restrict stack space while allowing large heap spaces other than convention and it’s time for us to reexamine this prejudice. It’s hard to argue; Bradshaw has a point.

Posted in General | Tagged | Leave a comment

Let Them Eat Cake

Grrr. I had my blood pressure taken today and it was perfectly normal. Then I read this Slate article and it shot through the roof. Or so I imagine. I know for sure that it infuriated me. In the article, Ben Mathis-Lilley discusses the views of Steve Rattner on remote work.

Rattner, an “investment asset manager” and on-again/off-again politico, is complaining about all those remote work riffraff who simply don’t want to work as hard anymore and would rather goof off at home. He quotes Marc Benioff, CEO of Salesforce, Meta’s Mark Zuckerberg, and JPMorgan’s Jamie Dimon to support his thesis that remote workers have grown soft, and no longer want to hustle. The reason they feel comfortable with this, Rattner says, is the remarkable growing prosperity “we’ve” experienced in the last few years.

Mathis-Lilley puts the lie to this nonsense and then burns it to the ground. It’s fine, he says, to talk about this remarkable growth in prosperity as long as you are in the top 1% or, better, top 0.1% of earners. If you’re anyone else, not so much: your earnings have been essentially flat.

In order for the great unwashed to commute to work it costs about \$6,000 a year and if they have 2 or 3 children another \$40,000 a year in child care. That’s a lot of money for someone with no real increase in income. Rattner, on the other hand, lives 10 minutes away from work (in Manhattan) and could easily walk to work if he liked.

As the title suggests, Rattner and his ilk really are like Marie Antoinette in their inability to comprehend the problems that commuting to the office imposes on the average employee. If you have a nasty, suspicious mind like mine, you’ll also suspect that the main driver of their back-to-the-office crusade is really about wanting to control every second of their employee’s life, or at least of their workday. But probably life.

Posted in General | Tagged | Leave a comment

Eli Zaretskii Wins FSF Award

The Free Software Foundation has announced that Eli Zaretskii, the de facto lead Emacs developer, is the winner of the Award for the Advancement of Free Software. It’s well deserved and I offer him my wholehearted congratulations.

Zaretskii has provided exactly the quiet, steady leadership that the project needs. He devotes huge amounts of time to Emacs for free and we should all be extraordinarily grateful. The award is the least the community can do for him and I’m glad he received it.

Congratulations, Eli; the award is well deserved.

Posted in General | Tagged | Leave a comment

Adding A Thesaurus To Emacs

Marcin Borkowski (mbork) has been doing more writing lately and has felt the need for a thesaurus. I very seldom use a thesaurus for reasons that I’ve written about previously but it’s sometimes convenient to have one. My typical use case is to avoid reusing the same word too often in close proximity. A thesaurus is good in that situation because I’m just interested in finding an alternative word, not shades of meaning.

Borkowski is trying to decide between two thesauruses, le-thesaurus and mw-thesaurus. Le-thesaurus provides a simple list of synonyms from which you can choose and it will automatically replace the word at point. Mw-thesaurus presents a nicely formatted buffer that gives synonyms and information about shades of meaning. It’s much more comprehensive than le-thesaurus but doesn’t automatically replace the word at point.

I have two thesauruses installed: mw-thesaurus and power thesaurus. Power thesaurus operates much like le-thesaurus but uses a community sourced thesaurus. I almost always use power thesaurus because it best fits my default use case and because when I want shades of meaning and context I turn to Websters 1913, most recently through the newly built-in dictionary-search.

Another problem with mw-thesaurus that I didn’t know about until I read Borkowski’s post is that it globally sets org-hide-emphasis-markers to t, which hides all Org emphasis markers in all buffers. That’s not something I want, and I’ve occasionally noticed it happening in the past but I didn’t know why. Borkowski solved that by editing the source code but perhaps there’s a better way.

Regardless of which one(s) you install, it’s often handy to have a thesaurus available without having to leave the comfort of Emacs. Any of those discussed here are fine and there are doubtless other good ones.

Posted in General | Tagged , | Leave a comment

Emacs and LLMs

It seems as if every second technical article or tweet that I read is about Large Language Models (LLMs) and, in particular, the various iterations of ChatGPT. In response to this, there are already several Emacs packages providing an interface to ChatGPT.

Over at the Emacs subreddit, ahyatt argues that Emacs is the best platform for LLMs. The main reason for this, he says, is that the primary thing you want ChatGPT to do is integrate with your writing environment and Emacs excels at this. Furthermore, with Emacs, this integration is universal: You can use it with code, documentation, technical papers, emails, and just about any other type of writing.

Ahyatt also mentions that it’s often useful to provide context with a ChatGPT prompt and Emacs makes this easy to do. He goes on to speculate on other advanced use of ChatGPT and how they can be easily enabled with Emacs. Take a look at his post for the details.

Whether or not ChatGPT is the long awaited—or dreaded—revival of serious AI, those who want to experiment with or work on LLMs need a platform from which to do so and as ahyatt argues, Emacs is an excellent choice for that.

Posted in General | Tagged | Leave a comment

Org Novelist

As many of you know, I’m fascinated by those who use Emacs for projects that don’t involve science or engineering. One such aspect that I always enjoy reading about is using Emacs for creative writing, by which I mean novels, short stories, poetry, and the like.

That may seem like an edge case but there are plenty of writers who write their novels with Emacs, including such A-list writers as Vernor Vinge and Neal Stephenson. There’s little reason to wonder why. Emacs has superb editing and linking capabilities that makes writing and organizing a piece of prose easier than it would be with most other writing platforms.

John Urquhart Ferguson is another writer who uses Emacs and he’s written a package, Org Novelist, to make the note taking and story organization easier. A full-blown novel can have several minor characters and locales that are hard for the author to keep track of. Similarly, ideas may occur to the author that don’t involve whatever part of the story is currently being worked on and a way of capturing those notes is needed. Ferguson’s package is intended to help with that. Best of all, the package let’s you write your prose in Org mode.

Ferguson has a short announcement on reddit but to really get a feeling for what the package is about and what it can do, take a look at the README on his GitHub repository. The package is not on MELPA or any of the other package repositories so you’ll have to download it from GitHub.

Ferguson stresses that the package was written for his own use with his particular workflow but he’s releasing it in case others find it useful. From the README, that seems likely to me so if you’re interested in a package to help you with your creative writing, take a look.

Posted in General | Tagged , | Leave a comment

Curl and Its Developer

This is the twentyfifth anniversary of Curl, one of those quiet utilities that everyone uses but that never makes a big splash. Along with wget, Curl is one of the two premier standalone applications for downloading content from the Web.

Its 25th anniversary is reason enough to give Curl and its developer, Daniel Stenberg, a shout out but there’s an even better reason: hardware setup porn. The Hackers Stations site has a page on Stenberg’s home office and the kit he uses. He’s a full time open source developer who works from home so it’s obviously important that he has a comfortable and efficient setup. Another reason Stenberg deserves an Irreal shout out is that he’s an Emacs user.

There’s no real point here, of course, but if you’re like me, you take voyeuristic pleasure in seeing other people’s setups. Working on a cross platform application, as he does, Stenberg has machines running Linux, Windows, and macOS so his setup is pretty complete. The page even describes all the knickknacks on his desk.

Definitely worth a couple minutes of your time if you enjoy seeing how other developers work.

Posted in General | Tagged , | Leave a comment