Gmzamz’s Beeminder journal

Derails

  • Running, again. Hopefully staking $30 will make me. I’m NOT going to archive this. I WILL start actually running

New goals and/or dialing rates

  • New goal: YNAB-transactions - This tracks the oldest cleared, un-approved transaction without a flag as ‘how many days old is it’
  • New goal: ynab-more-dates This tracks the same thing, but as ‘days since epoch’. See the financial section for why I’m doing both
  • New goal: system-improvements In the theme of ‘year of little improvements to my systems’, I’ve created a goal to track them.
  • Dial: Wakeup - adjusted rate down to 1 hour/day, and ratcheted it

Tech stuff and automation

YNAB Script (Expand me!)
#!/path/to/your/python/venv
import ynab
import datetime
import logging
from pyminder.pyminder import Pyminder
from ynab.models.patch_month_category_wrapper import PatchMonthCategoryWrapper
from ynab.models.save_month_category import SaveMonthCategory

budget_id = 'last-used'
cur_month = datetime.date.today().isoformat()
epoch = datetime.date.fromtimestamp(0)

configuration = ynab.Configuration(
    access_token = "YNAB_ACCESS_TOKEN"
)
pyminder = Pyminder(user='BEEMINDER_USERNAME', token='BEEMINDER_ACCESS_TOKEN')
bm_trans = pyminder.get_goal(slug='ynab-transactions')
bm_more = pyminder.get_goal(slug='ynab-more-dates')
date_lowest = 999999999
print(f"ynab-more-dates: Initial: {bm_more._data['curval']}")

with ynab.ApiClient(configuration) as api_client:
    api_instance = ynab.TransactionsApi(api_client)
    tran_type = "unapproved"
    transactions = api_instance.get_transactions(budget_id, type=tran_type).data.transactions
    today = datetime.date.today()
    highest = today - today
    for t in transactions:
        if (t.cleared == 'cleared' and t.flag_color == None):
            if ((t.var_date - epoch).days < date_lowest):
                date_lowest = (t.var_date - epoch).days
            if (today - t.var_date > highest):
                highest = today - t.var_date

if (date_lowest > bm_more._data['curval']):
    bm_more.stage_datapoint(date_lowest)
    bm_more.commit_datapoints()
    print(f"ynab-more-dates: Creating new datapoint: {date_lowest}")
else:
    print("ynab-more-dates: same data, skipping")

if (bm_trans._data['curval'] != highest.days):
    print(f"ynab-transactions: Creating datapoint {highest.days}")
    bm_trans.stage_datapoint(highest.days)
    bm_trans.commit_datapoints()
else:
    print("ynab-transactions: same data, skipping")

I fixed my bedtime shortcut to use the adjusted date[1] as the determinator of whether to log a datapoint. Since I gave myself Fri and Sat night off, it shouldn’t log datapoints even if it’s Sun at 1am. This was as simple as hoisting the adjusted date I use to determine what day to log under and using that date for the logic on if I should log as well.

I’m increasingly convinced I should just setup node-red and put all my workflows and automation in there instead of having everything live in scripts. It’d make it easier to write them, and easier to keep track of them. Plus I could use for other automations like Home-Assistant stuff or RSS->emails

Thoughts

Tracking financials

YNAB-transactions is my goal of the week. I’ve been super lax with staying fiscally responsible lately and kinda let YNAB go wild. I’ve got it set to have the oldest allowable transaction to be 8 days old (plus a small window at the beginning). Not shown in the graph is the previous 2 months of transactions I went through… before getting distracted halfway through and making the script to automate tracking this (see above expando). Also planning to do the same for reconciling accounts later.

That being said, I’m not super happy with how it’s structured. Right now I’ve got it setup as a weight-loss goal, but it won’t use the green>blue>orange>red pattern since the red line is flat. So it’s looking like I’ll only ever see it when it’s a Beemergency rather than during ‘blue means do’. I’m open to suggestions here. Maybe a do-more goal somehow? A rate of 1day per day sounds ideal if the Y units make sense. If I use ‘date of oldest tran.’ rather than ‘how many days old is oldest tran.’ it kinda makes sense. I’m not sure how high Beeminder goals can go, but for sure they can’t currently be rendered as dates. So 2025-11-25 would have to be represented as ‘20,417 days since epoch’ [2] . Then just have the starting datapoint be set to epochdays(today) - MAXOLDESTDAYS.

Actually, writing that out helped crystalize what I want, so I’m going to try doing it this way too and see which works better. Thus was ynab-more-dates was born. This will solve the green>blue>orange>red issue, so unless there’s some weird pitfall I think this will be the winner.

Systems

I’m working my way back through the forum to see what people have tried. I was reading through @narthur’s journal, his systems-upgrade goal inspired me to actually track my own systems improvements. Thanks! The rate is super conservative right now and matches my Beeminder journal rate. Basically meaning if I haven’t done anything lately, do something while I’m journaling. It’s just a Todoist label goal so it’ll integrate nicely into my current workflow.

How many Beeminder goals is too many? I could never imagine manually adding data to tens of goals like I’ve read some people do. But if all my goals are automated… then it seems like it’s just a matter of self-expectations?

Intentionality

At one point I used to Pomodoro’s a lot. I tried using toggl to actually track this, but it fell through because it just didn’t feel right, so I archived it awhile back. This past Friday I happened to use the timer aspect of it before playing games to limit myself and it just kinda stuck. I’m not going to Beemind it (yet) but if using it for fun things helps adoption, I might be able to shift it to slightly less fun things later on once get in the habit. It’ll still have the issue of being yet another app[3] I need to track though

Screentime

Now for the !FUN! one: screentime. I think my goals are too lax, so I’m dialing them down waiting until after the new years to dial them down. The shortcut showing my screentime is INVALUABLE, as without the instant feedback I know I would have derailed. I’m more and more convinced Jomo premium will be worth it, since I only care about useless scrolling time, and limiting time with useful things like documentation or YNAB is counterproductive. Plus it’ll let me lock my reddit rule so I can’t pull a sneaky and set it to only be active a week from now… again


  1. Adjusted date = current datetime - 12 hours. This accounts for doing things after midnight. ↩︎

  2. I’m just using unix epoch as an example since everything uses it, but any ‘days since’ counter would work ↩︎

  3. I’m fairly sensitive to the ‘too many apps’ cycle. If I start using multiple apps for my productivity system then it all falls apart because I forget to check them, then have to pick up the pieces months later and rebuild. Right now I just have Todoist. Since Beeminder is entirely automated for me, it doesn’t really have this issue ↩︎

2 Likes