How To Use Beeminder Without Ever (Hardly Ever) Leaving Emacs

Friday, May 11, 2018
By Marcin Borkowski

a hand with 6 fingers

We’re honored to have Marcin Borkowski guest blogging for us today. Dr. Borkowski is a professor and programmer in Poland, and a hardcore Beeminder user for four years now with 39 active goals. This post is highly nerdcentric but starts with some examples of powerful beeminding that should be inspiring for anyone.

I’ve always struggled with a systematic approach to my workflow, so when I saw Beeminder mentioned on some blog years ago I thought it sounded worth a try. It didn’t take long before I was in deep. I even got a fancy premium plan for features like auto-ratchet and pledgeless goals (no money at stake).

In fact, nowadays almost all of my goals are pledgeless. It turns out that works for me. Maybe I just need a small nudge to be sufficiently systematic, maybe I don’t really need Beeminder anymore, or maybe I’m just geeky enough to be motivated by a nice-looking graph more than by financial penalty. But it doesn’t matter why — it works, so I’m not changing it!

How and what I beemind

For things I want to do every day, here’s the simple scheme I’ve settled on: Create a binary do-more goal — entering a 0 or 1 each day, depending on whether I did what I needed to or not — with a slope of 0.8 per day and a maximum safety buffer of 2 days. That gives me some leeway, but not too much. In my experience, this works really, really well.

Most of my other goals, though, are do-more goals with “minutes spent” as the datapoints.

As for what I beemind, well, here’s a small sample of the things I’ve accomplished thanks to Beeminder:

Many of these are mundane but to me the value I’ve gotten out of Beeminder is really, really great. Thanks Daniel and Bethany!

Caution! Nerds only beyond this point! (or: How I automate data entry with Emacs)

One problem I had with Beeminder was its user interface. The web UI is, let’s say, not the best one imaginable (although I generally hate web apps’ UIs). The Beeminder Android app’s UI is the best by far, and from the very start I used it the most.

But it has one big drawback. It’s not Emacs.

The thing is, I live in Emacs. Non-Emacs users won’t understand but we Emacsers tend to hate doing anything digital in any other application. Emacs is much more than a text editor: it’s almost an operating system, and a general way of approaching UIs. Its main features are discoverability and extensibility unmatched by any other thing in IT. My Emacs, with all add-ons I’ve installed, has about 15000 variables determining its behavior, and almost 200 of them contain settings suiting me personally.

I use Emacs as my text editor for both code and prose. Including this blog post, of course. It’s my personal information manager, my email client, and my file manager. It’s my mp3 player, pdf viewer (with features probably not present in any others — how about displaying all lines in a pdf matching a regular expression?), calculator, ssh/scp client, Git interface… Probably the only serious thing lacking is a good web browser. (There is one, although it does not run JavaScript, which excludes it from most uses nowadays.)

One of the killer apps for Emacs is Org-mode. It started in 2013 as a note-taking mode for Emacs, and grew to include a hypertext authoring system, a to-do list, a time-tracking tool, a spreadsheet, and a lot more. It is difficult to describe Org-mode in a paragraph, but the internet is full of blog posts, tutorials, and videos about how it can transform your life. As a simple example: while reading an email in Emacs, I can press some key combination to pop up a window with a link to the very message I’m reading, add a deadline, and quickly transform it into a to-do item which will pop up in my agenda a predefined number of days before the deadline, complete with the link to the email. While working on this task, I can attach subtasks to it, then tell Emacs when I start and stop work on these subtasks, and after I finish, have Org-mode generate a report with a breakdown of how much time each subtask took.

Needless to say, I really wanted to have the task duration information generated by Org-mode be automatically sent to Beeminder.

“After I finish I can have Org-mode generate a report with a breakdown of how much time each subtask took”

And so my Emacs Beeminder client was born. [1] It is perfectly suited to how I use Beeminder, but it appears to be general enough for others to use it too. I strongly encourage you to give it a try, especially if you are already an Emacs user. It has an extensive readme, so I’ll only mention some of my favorite features here. You can sort your goals, not only by the deadline, but also by the hour of the deadline (e.g., a goal with a deadline of 13:00 tomorrow will appear earlier on the list than a goal with a deadline of 14:00 today). You can filter goals by how much you’ve done today so that, e.g., you can display only the goals for which you have not done your daily norm. You can filter by the deadline or by the deadline hour so that you can just display goals with a deadline within 2 days, or only goals due within 2 hours. You can submit datapoints automatically, e.g., when you clock out (stop tracking the time) in Org-mode. You can view goal details, including historical datapoints. This may be especially nice when combined with Emacs’s search capabilities, using strings or regular expressions. You can also edit past datapoints (and unlike the web and Android clients, this also works for autodata goals — occasionally useful when the external service somehow messed up).

You probably could achieve much of what I do without Emacs by integrating Beeminder with some cloud-based time-tracking tools. I prefer my way, though. If anything works in a suboptimal way, I can just tweak my (or Emacs’s) code to make it work the way I want. One example is a proof-of-concept hack I implemented some time ago, where I can have goals called “encrypted-1”, “encrypted-2” etc., with description containing the real title and description, but encrypted using GPG and then base64-encoded. This way I can have really private goals, which are still displayed “normally” by my client. Not even Beeminder’s admins have any way to know what I’m really beeminding! [2] Also, with Org-mode all my data are really mine, not sitting there on someone else’s computer without me having access to them. Yes, you can easily export all your data from Beeminder, but not all services are like that!

But wait, there’s (going to be) more

In case I haven’t yet convinced you to try out Emacs, Org-mode, and my Beeminder client, I’m going to prepare a screencast demonstrating it. I talked about this a long time ago, but now I really mean it! So stay tuned and happy beeminding!



[1] Confusingly, there is another, unrelated Beeminder client on Melpa. It has fewer features, although it does offer things not (yet?) present in mine, like converting your Beeminder list of goals into an Org-mode To-Do list. Of course I think mine’s the best. Just be aware you need to download it directly from GitHub.

[2] Dreeves chimes in: It’s common to use a less nerdy version of this trick by just naming your goals obliquely/esoterically. Like you can have a do-less goal for eating “cupcakes” and only you need to know that what that really means is snorting cocaine.

Tags: , , , , ,