Minding my goals (ian's corner)

Yes! https://github.com/dreeves/gmailsnooze
(Though it’s possible that version has fallen behind what I currently use for myself in Google Apps Script.)

I should mention for others that the built-in snooze feature that Gmail has has come a long way in the meantime and is probably fine for most people. I do still prefer my script though.

Agreed about putting all sent mail back in your inbox so you can decide whether to snooze it for followup. And for others I should mention that that’s a thing anyone can do with just a filter; it’s not part of the fancy scripting. See the “Re-Ping” section of http://dreev.es/snooze. Oh, wait, you have to be logged in to Gmail to even see that. Lemme paste the relevant bit:

Re-Ping just refers to snoozing your own outgoing mail so it comes back to you and reminds you to follow up — re-ping the person — if you haven’t gotten a response.

There’s no separate feature for this, you just want your own sent mail to be easily snoozeable, the same as incoming mail. What you do is create a filter so your sent mail initially stays in your inbox:

  1. Create a filter (available from the “show search options” dropdown on the search box)
  2. Set the From to your own email address, or your username — something that will match all the email addresses you send from
  3. On the next screen, check nothing but “Never send it to Spam”

Experiment ongoing! Here are my notes: https://github.com/beeminder/blog/issues/4


@dreev On the issue of keeping your script up-to-date in GitHub, I’ve recently switched to using Google Clasp to develop my App Scripts projects locally and then deploy using clasp push. That way I can keep GitHub as the Single Source of Truth and easily push my updates back to GAS. Would be happy to help you get that set up at some point if you’re interested.


Brilliant! I had the repo starred already, but it seems I forgot!



I have a backlog of exactly 9 months worth of old podcast episodes. There’s no obvious way to isolate the backlog. So I just want to report how many I listen to. Basically, I want to maintain at least the average amount released (about 22 episodes / month).

What I really like about the setup is that I’m planning to base my decisions on the yellow lines. Whenever I’ve crossed 4 yellow lines I’m going to ratchet back to 7 days. 9 of those ratchets and I should’ve cleared most of the backlog [0].

@dreev I got distracted by the magic behaviour of those yellow lines. I’ve always thought they demarcate 7 day’s worth of buffer. But, depending on the zoom level (?), goal start date, … they represent a single day instead. Neither of these situations are documented on this help page, so I’m not really sure what the expected behaviour is.

Compare these two screenshots. They differ in graph start date by 1 day.

I had it looking how I wanted, but after my first ratchet today, the yellow lines are back on a daily resolution. Is anyone else tripped up by this?


Good call on the Anti-Magic violation there! Our thinking (probably before formulating the Anti-Magic Principle!) was that beyond the orange, blue, and green lines, the yellow lines are really just to shade the good side of the Bright Red Line, so we have heuristics based on what seems to look good. If we wanted to be more dogmatic about anti-magic… I’m not actually sure how we’d satisfy the aesthetic desiderata. There’s probably some way though!

I have to think harder but I’m tentatively standing by the design choice here. Again, good eye spotting the issue!

Oh, and for your use case, does it work to just do everything in terms of the raw number of safe days?

1 Like

Yes, I’m really watching the exact number of safe days (37+), but I liked the YBR-nostalgia of watching/being in lanes.

Indeed, my guess was that this was an aesthetic issue. It’s clear to see how the degenerate case, where only part of a single yellow line, or none at all could be confusing. I’d say shading could be accomplished by actually shading in a light yellow, with darker lines overlaid.

In practice, one could say that currently every goal’s good side is marked by a different “shade” of yellow. I’m talking about the emergent shade (caused by the density of yellow lines) that’s especially apparent when looking at the graphs in thumbnail form. Maybe some people are depending on that shade to get some kind of intuition about the intensity/slope of the goal (flat forever goals tend to be really yellow) or maybe the gallery would look bland with only a single shade of yellow? But maybe it’s something to consider experimenting with? Maybe a unified yellow shade results in a cleaner and less noisy design feel?


But, obviously, I’m not entirely convinced myself that showing the weekly lines is really an important design goal. The shading argument might stand on its own though. See this graph, for example, with inconsistent “shading”:

1 Like

Ah, the solid shading denotes infinite safety buffer.
And to review for anyone just tuning in, the thin yellow lines – with density chosen magically for aesthetic reasons – denote finite safety buffer.

1 Like

Funny, I was talking about the parts that (seem to) remain white (due to the weird road shape). :slight_smile:

1 Like

In true beemail fashion, this is just a post listing some of the topics I’d like to post about.

An update about beeminding my urgency load / attempting to reach 7 days of buffer (green is the new orange).

Onomastics: treader, eepdater and tightroper goals. Beeps, itstheromancecupid.

The confusing situation with gmailzero reminders.

My take on bookminding (very close to the gold standard).

Aborted revival of beelint.

Data schemes/data shapes.

Reverse breaks.

Goal creep.

Not committing to anything, but let me know if anything sounds interesting (don’t expect blog post quality material).


I am voting for this one because it stands out - probably because I played with proselint a couple of days ago and I am primed on “lint.”

1 Like

I haven’t forgotten about the rest, but I’m just leaving this here. It’s me tracking my urgency_load. No comment, for now.


I had a little time and finally implemented a basic, looks-mostly-correct-for-a-single-use-case implementation of longer dueby tables. It’s at GitHub - ianmcb/dueby: Generate dueby tables for Beeminder. I’ve been wanting (to do) this for a long while.

It’s based on the (old) Python code at Beebrain: The Brains of Beeminder. I later found the latest archived version at road/blib.py at master · beeminder/road · GitHub I wanted to use a canonical version of the road drawing code, so the results hopefully correspond well to those of the website.

I took the opportunity to experiment a bit with ChatGPT. While I’m predicting namedropping GPT like this will soon become redundant and tired, maybe some are still interested. I let it generate most of the skeleton. It generated foldlist based on that 2-line summary and added dayfloor (when asked). I asked it to remove the dependency on pandas. But I had to remove most of its logic, since it looked too complicated and I didn’t need such a nested data structure (and I’m not too well versed in Python).


I just looked it up and Discourse doesn’t automatically combine multiple successive posts by the same author. I think it just clicked why micro-blogging works so well for some people (say foone). I think I might be one of them and might try it out here, but it would be and look nice(r) if those posts were automatically combined.

1 Like

There’s still some missing links in my setup. It’s like the proverbial bucket with a hole, because one thing leads to another, leads to …

A main one is my note- and task-taking setup. I had the foresight to add a Created property to my org-mode capture templates. Some headlines are missing the property and I’d love to automatically add it. That (hypothetical) code always takes the form of some elisp that looks at the git repo my notes are in, any clocking data and the surrounding headlines.

That leads to wanting to find the earliest appearance of a string in a git repo. The opposite of what most people are looking for (blame). I solved this part already (August 2022). Maybe not optimally, since it’s slow IIRC, but it seemed to work:

headline='fill hole in bucket'; git show --no-patch --date=format:'%F %a %H:%M' --pretty=format:%ad $(git grep "$headline" $(git rev-list ^$(git log --oneline --pretty=format:%H kisp.org | tail -1)^ HEAD) -- bucket.org | awk -F: '{print $1}' | tail -n 1)

1 Like

Obviously, a great excuse to improve my elisp. So I should just read mbork’s “The Emacs Lisp Book”. On the store page, it’s calling out “An Introduction to Programming in Emacs Lisp”, so I should read that first. This was before my book-reading goals/system was in place, so that started that whole side-chain (with meta-goals, using my version of phillip’s Beeminder endpoint).


That always starts me thinking of some bugs in beeminder.el I want to reproduce/report/fix. I want to be able to:

  • report the number of overdue habits (org-mode feature) to Beeminder
  • with Created/Last Modified properties in place, implement a basic headline freshening

I should also refresh my memory on GTD, since handling backlogs of tasks is mostly/partly solved, I guess. Overall, org-mode is still working great for me.

I want to recreate a system I had at one time (using settings/templates/a little code). Headlines with NEXT and no schedule, get put in a section before the agenda so they can be scheduled. I think I had a hook to prompt for efforts (time estimates) when scheduling tasks as well. That’s pretty valuable and I’d like that back.

Some more emacs/Beeminder integration bugs/RFEs:

  • enable uploading to multiple goals (say when a parent headline is linked to a different slug)
  • fix some spurious output when uploading
  • fix an issue around marking a recurring habit (linked to Beeminder) that is currently clocking as done; I should check, but either nothing gets uploaded or no entry gets added to the logbook (when logging on entering/leaving the right states is enabled)
1 Like

I just remembered why I want those Created properties so bad (I could start freshening today without those). I’ve always wanted to create a graph of open/total headlines over time. With the date created and the date marked as done in the notebook, I should be able to recreate that data over an entire file’s history.

That would fit great on some kind of dashboard I want to create for people who are trying to contact me. Based on a whitelist and differing amounts of detail, I want to give them an indication of how busy/overwhelmed I currently am. Maybe some graphs, a number based on urgency_load, open headlines, unanswered mails, etc.

Great segue into getting back into using a local, scriptable email client. Maybe an easy way to create tasks for replying to mails and to automatically respond to people with a status report.

1 Like

I’ve been using a work Windows laptop for a couple of years. Only because it was there and convenient and my Linux laptops needed to be updated, but aren’t/weren’t backed up well.

I want to start using git-annex as backup/duplication tool, but in a great case of procrastination I decided I needed to read the entire devlog (900 posts) to really grok the software. Not an entire loss, because I do like reading those (say the oil shell devlog, etc.), but still… Also, since I’m still on Windows, I had to resort to the suboptimal Cygwin/MINGW/WSL environments to test the software out. It doesn’t work great and I don’t even want to use it like that, so that’s definitely time not well-spent (debugging). Especially with WSL being such a harmful poison apple, with regards to Microsoft’s EEE ways.


Minddump over. I really thought I’d be able to put up a succinct list of bullet points. Maybe this was therapeutic, maybe not…

ETA: Maybe it was. I managed to look for and find (not that hard) my old init file and copied some of my old code. Now I can once again call up a list of unscheduled tasks. It feels really inefficient and slow, but that’s for another day.