Groundhog Day Resolutions - November 2021

October was my first month back on GHD goals after some time off. It went okay.

October's primary goals

1. Finish one primary goal

I spent some time working on improving my processes. This is something I've written about before and it's definitely something I overlook.

My primary focus was on improving my daily workflow; things like automating common tasks and learning more about the tools I use every day.

There are still improvements I'd like to make, mostly around my daily habits, but so far I'm happy with the changes I've made.

2. Finish one secondary goal

I ran a half marathon in October and it went much better than my first attempt. I was still a little slower than I would have liked, but considering I flew back from the UK 3 days before the race I'm pretty happy with my performance.

Primary goals for November

1. Finish another primary goal

There are a couple here that I can get done if I focus on them (and I think focus will be a theme for next year).

2. Finish one secondary goal

Some of these are month-long goals and probably won't get done this year, but there are one or two shorter ones I can work on.

3. Start planning my 2022 goals

I rushed my goal setting for 2021 and I think it shows. I'd like to take a more considered approach for 2022 and concentrate on things I actually want to do instead of what sounds good.


Filtering the Emacs dashboard agenda

I use emacs-dashboard to show an overview of my work when I start Emacs. It looks a little like this:

Emacs dashboard

The weekly agenda gives me a quick glance of what's scheduled for the week ahead, as well as any upcoming deadlines, but I wanted to tweak it slightly to remove some non-useful information.

I use the WAITING keyword to mark tasks that are waiting on someone else and don't require my attention. I have a separate agenda command to show me all WAITING tasks and there's no need for these to show on my dashboard.

The dashboard package provides a couple of different ways to customize the agenda view. One of those is dashboard-match-agenda-entry, which uses org-mode's tag and property matching to filter tasks.

Limiting the dashboard agenda looks like this:

;; Match just one TODO keyword.
(setq dashboard-match-agenda-entry
      "TODO=\"TODO\"")

;; Match multiple keywords.
(setq dashboard-match-agenda-entry
      "TODO=\"TODO\"|TODO=\"IN-PROGRESS\"")

;; Match everything except WAITING.
(setq dashboard-match-agenda-entry
      "-TODO=\"WAITING\"")

There is a lot more to org-mode's matching system; I've used it to create custom views for displaying my monthly goals, but it can be used to match tags, categories, and even properties like Effort.


My Emacs Ledger reporting configuration

I've been using Ledger to keep track of my finances for several years, and one feature I really like is the ability to run reports from within Emacs via ledger-mode.

Creating these reports is done by customizing the ledger-reports variable. It's also possible to set them using the ledger-reports-add function, but I prefer to set them all in one go during setup.

My current list of reports looks like this:

(setq ledger-reports
 '(("bal"            "%(binary) -f %(ledger-file) bal")
   ("bal this month" "%(binary) -f %(ledger-file) bal -p %(month) -S amount")
   ("bal this year"  "%(binary) -f %(ledger-file) bal -p 'this year'")
   ("net worth"      "%(binary) -f %(ledger-file) bal Assets Liabilities")
   ("account"        "%(binary) -f %(ledger-file) reg %(account)")))
bal
Shows the balance of all accounts; this also includes individual expenses (such as Expense:Car:Gas) so it's a pretty long report.
bal this month
As above, but only includes transactions from the current month.
bal this year
Same as bal, but limited to the current year.
net worth
A short report that shows what I've got in each account, as well as what I owe on loans and credit cards.
account
This prompts for an account name and then shows its transactions for the current file. This is useful for quickly seeing how much money has been spent on a specific category during the year.

Emacs reports that have the %(ledger-file) token are run against the current ledger file. I have my Ledger files stored in a projectile project so I can quickly jump to them to run reports or make adjustments.


Copying all Pocket highlights with a bookmarklet

I use Pocket for managing my reading list and make liberal use of its highlighting functionality. Although Pocket has an API - and an Emacs reader that works really well with it - there isn't a way to export highlights. This makes it a pain to process my notes to the point where I just don't do it.

To make things easier I wrote a little bit of JavaScript to export highlights from a Pocket article view. It wraps all highlights in org-mode quote tags, adds a title and "Source" link, and then copies everything to the clipboard.

It's not perfect; it doesn't handle images, and lists end up being copied line-by-line, but it makes the process much, much easier.

Drag the button below to your bookmarks bar, and then click it when viewing any highlighted article in Pocket to copy notes to the clipboard (tested in Firefox):

Copy Pocket Highlights

The un-minified source is below and can be modified to remove org-mode specific formatting if needed:

to_clipboard   = "#+TITLE: " + document.getElementsByTagName('h1')[0].innerHTML + "\n\n";
all_highlights = document.getElementsByClassName('highlight');

for (highlight in all_highlights) {
    highlight_text = all_highlights[highlight].innerHTML;
    if (typeof highlight_text !== 'undefined' && highlight_text.trim() != '') {
	to_clipboard += "#+begin_quote\n";
	to_clipboard += highlight_text.trim() + "\n";
	to_clipboard += "#+end_quote\n\n";
    }
}

to_clipboard += "*Source*: " + document.getElementById('reader.external-link.view-original').href;

navigator.clipboard.writeText(to_clipboard);

Groundhog Day Resolutions - October 2021

It's been a few months since I wrote a GHD post, and it should come as no surprise that every goal in July was a complete bust.

July's primary goals

1. Complete another secondary goal

2. Complete another session of deliberate practice

3. Write more

Secondary goals for July

1. Release a playable demo of my Atari ST text adventure

2. Release an update to one of my other side projects

Primary goals for October

1. Finish one primary goal

As always I'm trying to cram things into the last 1/4 of the year. There are a couple of things I'm going to miss out on; Ludum Dare just wrapped up and I was running at the time, but there are still other goals I can complete.

2. Finish one secondary goal

There are a couple of easy ones I can cross off the list if I actually put time into them.

The last few months I've been struggling with a nasty case of writer's block. I've also been busy with freelance projects, and as a consequence haven't spent much time on my own personal goals.

I'm deliberately keeping things light for October so I can get back into some kind of rhythm. We'll see how it goes.