I have a FitBit Ultra (which I have discussed before) that I use to keep track of my daily activity, trying to force myself into higher and higher numbers, toward the AHA-suggested 10,000 steps per day.
In all honesty, I have dropped my personal goal from 10,000 steps to 6000, because 6000 is an amount that I can adjust my day to get, while I have to spend hours of my evening walking around to get myself up to 10,000. With 6000, I have a lower barrier, so I don't beat myself up with disappointment as easily. I still do, because I still have <3000-step days, but with 6000, I feel I have a fighting chance.
I have a FitBit but I don't pay for the upgraded API, but I can check every hour. And now I do.
In all honesty, I have dropped my personal goal from 10,000 steps to 6000, because 6000 is an amount that I can adjust my day to get, while I have to spend hours of my evening walking around to get myself up to 10,000. With 6000, I have a lower barrier, so I don't beat myself up with disappointment as easily. I still do, because I still have <3000-step days, but with 6000, I feel I have a fighting chance.
I have a FitBit but I don't pay for the upgraded API, but I can check every hour. And now I do.
#!/usr/bin/env python from oauth import oauth import datetime import httplib import os import pymongo import simplejson as json import time import fitbit import locked import pushover as p def main(): checker = locked.locked() # determines if screen is locked if not checker.is_locked(): from pymongo import MongoClient # connect to mongodb client = MongoClient() # connect to mongodb db = client.fitbit # connect to fitbit DB reads = db.daily_reads # connect to collection now = datetime.datetime.now() # what time is now? datestr = now.strftime("%Y-%m-%d") # now in date format isostr = now.isoformat() # now in ISO format fb = fitbit.make_class() # connect fbr = fb.activities_date_json( datestr ) # get updates summary = fbr['summary'] # get summary steps = summary['steps'] # pull out steps new_read = {} # create new read new_read["date"] = datestr # date == datestr new_read["time"] = isostr # time == ISO new_read["steps"] = steps # steps is steps to date if 0 == reads.find( { "date" : datestr } ).count(): # if nada for read in reads.find(): # clear out id = read["_id"] reads.remove( { "_id" : id } ) reads.insert( new_read ) # insert else: old_read = reads.find_one() delta_steps = new_read["steps"] - old_read["steps"] if delta_steps < 100: msg = "You took " + str(delta_steps) msg = msg + " steps in the last hour. " msg = msg + "Go take a walk." pu = p.pushover() pu.send_message( msg ) id = old_read["_id"] reads.update( { '_id' : id } , new_read ) if __name__ == '__main__': main()
There are three modules that are mine: the fitbit module which comes from my fitbit_tools repository; locked module which uses
Similarly, perhaps this task is better suited to a key-value store like Redis than MongoDB's document store. At most I'm having one entry per day and the first entry of a day clears out all previous entries.
But, notwithstanding all the perhaps-suboptimal design decisions, this is an example of how coding and quantifying yourself can help you improve your life.
xscreensaver-command
to determine if the screen is locked (if I'm not at my desk, my step counter isn't being updates; and pushover, which uses the Pushover service to keep me informed. I could and maybe should have it do speech with Festival or pop to my screens with Notify or Snarl, which also are desktop-centered tools, but this is what I have.Similarly, perhaps this task is better suited to a key-value store like Redis than MongoDB's document store. At most I'm having one entry per day and the first entry of a day clears out all previous entries.
But, notwithstanding all the perhaps-suboptimal design decisions, this is an example of how coding and quantifying yourself can help you improve your life.
No comments:
Post a Comment