Iāve always struggled with the general problem that certain days are not suitable to work on certain Beeminder goals. I gave up on the automatically-adjust-the-road approach (https://github.com/DrTall/beevacay) last year when it became clear that road editing is not for the faint of heart.
The new approach is detect-and-complain, or ālintā: https://github.com/DrTall/beelint This is still pretty experimental so itās far from tried-and-true but Iām pretty excited about it.
My current Beelint config has 4 parts:
Weekends-off goals
Weekends-only goals
A vacation coming up in February (blocks all goals)
A Google Calendar based blacklist for nights where I have events after work. Iām using this to detect these āLate nightsā and then forbidding those goals which I find really annoying to deal with when I get home late.
My Beelint goal is updated by the script with the list of goals with problems:
This also integrates with my Beedash, by highlighting lint errors in pink. Orange is still a real eep!:
If anybody checks it out let me know if it works for you!
Very cool! Iām trying this out today. A few issues I have run into: (1) the instructions for getting a Google Calendar API key seem not to match the interface. Maybe the interface has changed? I tried to figure out the right thing to do but I am not at all sure that I did. (2) When I run it I get āNo module named dateparserā. Whatās the canonical way to get that Python module (on Ubuntu)? I tried āsudo apt-get install python-dateutilā which seemed a likely candidate, but no dice.
I believe that pip is the way you want to install python packages. You should be able to run it without sudo since it installs for your user by default. e.g. pip install --upgrade python-dateutil.
OK, I was able to install dateparser with pip install --user dateparser. The next error I ran into is āNo module named apiclient.discoveryā; after some Googling I found I needed to pip install --user google-api-python-client. And thenā¦ it worked! Well, I still donāt know if the Calendar integration works, I donāt have any calendar-based rules set up yet. But at least the date-pattern rules worked.
I wouldnāt say it was clear, but thatās what I guessed anyway. But in any case I may want to use some calendar based rules, I just donāt have any set up yet.
@dreev Any chance to get an API trigger for āDerail this goalā ? It would be useful for this project! Currently if I fail to deal with a lint violation it will always be there tomorrow, and the next day, etc. forever. So I sort of have to set a low pledge cap, but that also fails to motivate me. It would be nice to be able to get the safety buffer behavior instead.
Iām still very glad that you mentioned it. I hadnāt thought of an API trigger, and that might be the best way to ease into having an uncle button and seeing what use folks make of it.
Also saves anybody figuring out how to smoothly incorporate it into the UIā¦
Thatās true! And hopefully if it is ever implemented it wonāt assume that people only want to uncle on an eep! day. The goal I ought to have uncled on last night has 9 days of safety buffer.
A goal wonāt show a lint error if today is also an illegal day for that goal. The idea being you canāt work on it on the illegal days, so linting it on such a day is pointless.
A config option to mark goals as always_valid_if_data_today which makes it so that the goal wonāt show lint errors if Beeminder has any data points for that goal today. Useful for true/false goals where you can only make limited progress every day.