Beeminder Forum

Triangular beeminding for tracking alcohol consumption

Your wish is my command. Added “square”, returning the square of the sum of the values each day.

Well I was about to sign up for a premium plan so that I could enforce hitting a goal every day, but it sounds like I should wait until this actually works?

1 Like

This is the nudge we need! Thanks! Note that the current limitation is that you can’t automatically ratchet yourself to an emergency day every day, you can just auto-ratchet the road to your current datapoint, so you can never have more than 2 days of safety buffer. If you’re generally skating the edge then you’ll still generally have an emergency day every day anyway.

So I think it’s rare to actually want such extreme auto-ratcheting. But if that’s you then we should certainly let you, and this might be an easy fix (or might be surprisingly hard – not sure yet). In any case, if you email us – support@beeminder.com – we can give you a steep discount for guineapigging this for us. Thanks again!

I was also interested in auto-ratchet to 0 safe days, combined with weekends off. But I think that still wouldn’t work because the auto-ratchet would consume the flat road section from the weekend.

I would in theory be able to implement vacation-aware auto-ratchet in the tool I’m writing, though, because it would be able to see your vacation config.

1 Like

That’s another vote for implementing true breaks, as opposed to the current mechanism of flattening a section of road.

3 Likes

True, it would be easier if Beeminder had a proper concept of a break. Not just for this, but also so that the road dial would still work. The tool I’m writing hacks around this by letting you set a horizon on the vacation creation date, so you can say, e.g., “My vacation is April 4 - April 10 but don’t enter it until that’s sooner than 14 days from now so that my road dial still works”.

I think the only tricky business is to decide what happens to the would-be road during the break. I am planning on offering 3 choices. First you flatten the road during the break and then: 1) steepen the road before the break to account for the missed work (you’ll reach the total you would have had after vacation on the day the vacation starts), 2) steepen the road after the break to account for the missed work (you’ll reach your ultimate goal total on the ultimate goal date, but you won’t do any extra work before. With repeated vacations like weekends-off, this can set up a chain-reaction making the end road section arbitrarily steep.), or 3) do nothing (you won’t reach your ultimate goal total on your ultimate goal date anymore, but perhaps you don’t care – your rate of progress on non-break days will still be the same).

2 Likes

Autoratchet on do more goals was broken for some unspecified-but-probably-embarrassingly-long amount of time, but I did some debugging in there last week or so, and it should now have the same result as if you manually ratcheted to that value. Major caveat: autoratchet doesn’t play nice with future changes / breaks. So if you schedule breaks or changes in rate in the future, you probably don’t want to also have autoratchet on.

Autoratchet on do less goals is actually using an entirely different algorithm, and you can’t ratchet yourself any closer to the edge than blue, I believe.

2 Likes

Hmm, now I’m not sure if auto-ratcheting to 0 days of safety buffer is exactly what I want.

My goals are:

  • practice at least 5 minutes of music every day without exception (this is crucial for forming a daily habit)
  • average X hours of music practice per week, where ideally X >= 6 but should be dial-able over the months depending on other time commitments (this is crucial for longer-term progress, since 5 minutes a day will hardly get me anywhere)

In the sense of the first goal, every day is an emergency day in Beeminder-speak, although that doesn’t really encourage a helpful mental attitude, since while I want to feel a continual sense of urgency to maintain the habit, I don’t want to be feeling in a constant panic every day either!

The second goal should kick in if I do the bare minimum 5 mins/day for too many days in a row, creating a genuine emergency if in the last 7 days I’ve totalled less than X hours of practice.

So as an extreme example, if I did 6 days in a row of 5 mins/day, and then 10 hours in one day, Beeminder should consider that I’ve hit my goals.

Now the problem here seems to be that Beeminder can only apply one constraint per goal - is that right? If so I expect I’ll be receiving some advice “create multiple goals and enter your daily data into both”, but that’s really ugly. I only want a single graph where I track the data. Or am I missing another way to achieve what I want?

1 Like

Off the top of my head, this is what I think I would do: set it up for 5 min/day and 0 safe days. Then, set the api up to check once weekly for this week’s total and then have it make up for the difference over the following week if you were under 6. It’s “chunky” (on a weekly level as well), but it works over the long run. {So, set the road rate for next week to 6-[this week’s total]+35 minutes. Or, you could spread that out only over your coming weekend, if you wanted to use roadall instead, though that’s slightly harder. That would look like (6-[this week’s total]+10 minutes)/2 set on the coming Saturday and Sunday. I’d probably do the first, I think. In fact… I think I’m going to do that for both my meditation and yoga goals. Thanks for the idea. I’ll pass on the code if you’d like it (though, I probably won’t build it for 2-3 weeks due to other commitments).

Thanks for the suggestion. If I understand your solution correctly, it is artificially imposing weekly boundaries on the calculations, rather than some kind of moving average? But even if you could apply your tuning daily to avoid this problem, it feels like a pretty ugly (albeit clever) hack working around the underlying lack of functionality :-/

One of my main goals of using beeminder is to bring more focus in my daily life to the things I care about. Even though personally I’m a coder, beeminder is not really helping me if it’s adding extra coding requirements to my life workload (or even just requiring me to make use of someone else’s API-consuming code). Also I presume that beeminder is targeted at non-coders too? So ideally beeminder would have a way of achieving this natively, in a user-friendly fashion.

P.S. I have no idea what ‘roadall’ means :slight_smile:

2 Likes

I don’t think there is any way to do this with a single goal currently.
But setting up two goals sounds to me like it would work really well. One
goal where you just say whether you practiced at least 5 minutes or not,
with the rate set to 7/wk. The other goal set to the amount of time you
want to practice per week. You say this is “really ugly” but it doesn’t
sound that ugly to me, only slightly inconvenient. In some sense, you
really do have two goals: you want to spend a certain amount of time, to
make progress, and you also want to be consistent, to build a habit. To
mitigate the inconvenience you could very easily automate the data entry
using a tool like https://github.com/lydgate/bmndr — it would just be a
couple-lines long script that calls bmndr. You enter a time and the script
submits the time to one goal and a data point of ‘1’ to the other goal.

2 Likes

Getting back on the topic of triangular aggregation, is there a way to make the aggregation “interval” longer than a day? I am thinking about using this for snacks at work, but I’d be interested in aggregating over a week rather than a day. You know, so the 2nd snack in the last 7 days counts as 2 rather than 1 regardless of whether I already had a snack today.

I’m guessing no since it is called “aggday” and not “aggwhateveryoulike” but why not ask? :slight_smile:

5 Likes

Thanks for the feedback. Only catch is that I regularly alternate between entering data via the web UI and the Android app. So any clean solution to this would be server-side. If I went with your twin goal suggestion, I wonder if it would be possible to use Zapier to get Beeminder to automatically feed data from one goal to the other?

1 Like

Beminder really should make it super easy to automatically handle meta goals like this & it’s an easy way for them to double the amount pledged, so I’m not sure why it’s not a higher priority.

1 Like

I’m assuming this is what they mean by having Beeminder on the Beeminder integration list. But you gotta admit it can’t really be the highest priority.

Welcome to Beeminder, we integrate with ourselves. Coming soon Fitbit!

:smiley:

2 Likes

Ha, yeah, I love how you think but Beeminder’s not quite that flexible yet! I also want to hear how triangular beeminding works for people longer-term before getting carried away with fancy aggregation functions.

I’m also excited about this.

And, breaking news: @bee just added an “Added Datapoint” IFTTT trigger (ask us for a link to the beta) so we may have just nailed this…

2 Likes

I am also interested in this. Just posting to a) let the devs know that there is interest and b) be notified if this does become a possibility! [“This” being an aggregation interval of a week.]

1 Like

Just my thoughts about this. I also have a beeminder goal for this. But I count beers (half a liter) as one unit. I have a weekly rate of one. This is what the german association for healthy nutrition is suggesting. I don’t know how much a drink is. If it is less volume of alcohol than in an average beer, then it would be ok. I don’t want to discuss the amount of alcohol uptake here, this is up to personal thoughts and preferences. But I think that penalizing the second or third drink at the same night has one drawback: You can drink each night a drink. I fear that this is not a good idea! You will end up drinking every day instead of once a week several drinks. I think it is better to have – say – two drinks and then a break of one day. The body needs time to regenerate……

2 Likes

If you want to penalize this, you could make the formula:

lambda x: triangle(x) + N if triangle(x) else 0

Where N is some suitable penalty for drinking at all, perhaps N=1 or N=2. If N is too large then you’ll end up always drinking a 2nd drink whenever you drink 1. To some extent this is unavoidable unless you explicitly Beemind # of days with 0 drinks. But I tried that and it is its own form of annoyance.

2 Likes

TBH taking a day off a week isn’t at all difficult for me so it’s not something I need beeminder to enforce.

I don’t know who the German association for healthy nutrition are, but honestly if they’re suggesting that more than half a litre of beer a week is too much then I don’t consider them a credible source - unless German beer is ridiculously strong that’s literally an order of magnitude smaller than the NHS or various other professional medical bodies recommend.

2 Likes