How would you passively beemind procrastination activities?

OK, so I want to take my procrastination-related goals to the next level.

In the spirit of tools like RescueTime and Tagtime, I’d like to passively beemind time spent on a few time sinks, like vlc, YouTube or Facebook. RescueTime is out of question - keeping data about how I spend my time in the clown is something I’d really like to avoid. Tagtime, OTOH, is not 100% passive.

I have my own piece of code which checks regularly what I’m doing (basically, it checks the focused window, and if it is Emacs, it checks even more details, like the mode I’m in, so that it can know if I’m programming, writing an email etc.). Now I want to start submitting these data to Beeminder.

Here’s my question. Assume the pings (to use TagTime’s term) will come every minute. I’d really prefer not to have a goal with several hundred datapoints per day - looks wasteful to me (in the sense of wasting Beeminder servers’ bandwidth and storage). On the other hand, I’d like my pings to be way more often than 1-2 per hour - once every 5 minutes is an absolute minimum. What would you recommend? (I’m specifically asking @dreev and @Bethany_M_Soule, since they know best what would be a significant burden on their infrastructure.) One idea I got is to submit a “summary” once per hour, but this would (of course) make my code much more complicated. Another would be to “collapse” consecutive pings if they are spent on the same thing.

Also, any other thoughts/recommendations/suggestions? Not only software-related, but also psychology-related?

Note: I have no problem with regular, non-stochastic pings (unlike TagTime) - I’m too lazy to try to game the system anyway, and it would be gaming my own goals, so why would I do that anyway? The goal of my code is not to have a long-term estimate on where my time goes, but rather a pretty fine-grained “journal” of my day.

Also, would anyone here be interested in such a simple app, written (of course) in Emacs Lisp? It only works on GNU/Linux, since it uses xdotool under the hood.

4 Likes

Be careful that planning a perfect anti-procrastination tool doesn’t become something you’d need to track with itself :wink:

Regarding Beeminder, something I’ve done quite a few times now is the following:

When I want to post a datapoint, I check to see if the datapoint would change the aggregated daily value per the aggday (think last, max, min, sum…). If it does, I post it. If it doesn’t, I update the comment, indicating the most recent time that I checked/tried to submit the datapoint.

This doesn’t sound like it fits what you’re doing exactly, but one thing you could do is similiar to “run length encoding”. If you are doing something that is the same as the most recent datapoint, instead of adding a new datapoint, edit the appropriate one and adjust the value appropriately.

When doing this, don’t forget to check that the most recent datapoint you’re comparing against is the same day as the one you want to submit, and “break” across the goal’s dateline.

I suggest you take a look at ActivityWatch if you haven’t already. They have some importers that may be useful to you!

2 Likes

I’ve been told by support once that millions of datapoints shouldn’t be a concern, on the other hand.

Right now I’m using a naive approach where I might send datapoints at a rate of a couple hundred per hour if I’m in the swing of studying… https://www.beeminder.com/eugeniobruno/leanflow_reps#data

I’d be very interested to see what you write and pretty sure I’d find it useful, but more likely as a crib to cobble together something that fits whatever problems I find I have rather than using what you write as a proper software package.

1 Like

TagTime generates one datapoint per day, as it happens. It updates any existing datapoint to reflect new pings that match that goal’s lambda in the TagTime configuration. Cached on the local machine so that not all datapoints are checked every sync.

My own scripts that passively monitor stuff (usually backlog size) send datapoints only if they differ from the previous datapoint value (or if it’s the first datapoint of the day). Still creates multiple datapoints per day, but far fewer than the polling rate would suggest.