• Personal Blog


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 20
    Posted on June 4th, 2014


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 21
    Written by Denis Finnegan


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 28
    Tags

    Jawbone Up
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 38

    Review of the Jawbone Up

    As part of R&D for Tesco Health and Wellbeing, I was asked to review the Jawbone Up as a potential compatible device for integration with Tesco Health and Wellbeing to provide more advanced activity tracking then is currently available in the current service. I reviewed the device across a number weeks and below are the key areas that I will discuss in terms of my experience.

    1. Aesthetics & Comfort
    2. Device Functionality
    3. Service Usability
    4. Customer Data Access
    Jawbone Up

    Jawbone Up

    Aesthetics & Comfort

    The Jawbone has a soft rubber band that is shaped like a bangle and seems reasonable flexible and sturdy. It’s fairly comfortable although I did find that sometimes I would need to move it a little as at times my skin could get irritated after exercise. I thought that the band definitely looked masculine with its sort of black rubber and steel finish and I wonder how taken with it a female user might be. Most of the time I didn’t notice it on my arm, except for when I was in bed at night and my wife absolutely hated it as it would often catch her hair.Jawbone Comfort

    One of perhaps the biggest drawbacks was the fact that to sync the device, you had to plug in through the earphone socket and over time, I really found this to be a chore and would often forget to sync and so often didn’t check my stats, especially when I was busy.

     

    Device Functionality

    Jawbone Smart Sleep AlarmJawbone High LevelOne of the features I loved most on this device was the silent alarm in the mornings. This was really useful for waking me up, with out waking my partner as I love to snooze, up to 3 or 4 snoozes so this was a super feature. It claims to be able to wake you up in periods of non REM sleep so you wake feeling refreshed but I can’t speak wither way to this. The move alert was also quite good for reminding me to get up and move around when I had been idle for too long.

     

    Service Usability

    I had some initial difficulties in terms of setting up the device with my phone which I still can’t really explain but once I had it up and running I have to give marks to the Jawbone App, I really did find it easy to use and intuitive. I didn’t bother reading the manual and was able to find my way around the app without issue.

    Jawbone was very quick, from my first sync to start telling me about how many steps I counted although I have to say that I really would question the accuracy of the steps counted. I participated in a work activity challenge while wearing the Jawbone and the challenge involved around 400 steps but the Jawbone counted somewhere in the region of 3 times that figure.

    Jawbone Daily Activity

    Jawbone Daily Activity

    The charting and information also was quite clear and easy to read with lots of information available but something I really felt that was lacking was the ability of the app to tell me anything useful from the data it collected. I found the smile / mood feature fairly useless as my mood was not connected to any of my other results nor anything useful done with it.

    At first I found the detail hour by hour step count hugely enthralling but after a week or so, the novelty wore off without the extra insight. Once I understood what a day at the gym versus a rest day looked like or a weekend day versus a week day, there didn’t seem to be much else the app could tell me beyond collecting more data over a longer period.Jawbone Sleep

    There were some other benefits however, I found the sleep tracker quite accurate and I liked the fact that even if you forgot to put the device in sleep mode, which I very often did, that it was clever enough to convert activity (or low activity) into sleep when I gave it the times; often, it was actually able to guess the sleep times automatically when I went to put it in the following day.

    Jawbone Time to BedGoal setting was pretty simplistic, setting sleep goals to get to bed by a certain time and steps goals which were often pretty crude and didn’t seem to have any real intelligence behind them. It did tell me at one stage that my sleep wasn’t consistent and recommended a bed time that I assume was based on my average waking time, minus 8 hours. I definitely found this impressive as it was some of the first real insight I saw in the app and did prompt me to look at my sleep patterns.

    I was quite impressed by the facts and insights that I received. Jawbone have set up a number sort of warning behaviours through out the app and also feed back to you on your stats versus the community which I found impressive and would like to see us doing on Tesco Health and Wellbeing.

    I didn’t really use the food tracker as it was too laborious entering the foods but it seemed to have a reasonably good database of foods available and the barcode scanner worked well.

    Jawbone Insights

    Lastly just a brief mention on the weekly emails which I found clean, to the point and useful for the week on week comparison. This is something worth building on more, the idea of challenge yourself to do better than last week, in the drudgery of the day to day, this can get lost but very useful to see it week on week. Still, the information was fairly limited and was still lacking that extra insight to do something useful with all of my information.Jawbone Weekly Review

    Customer Data Access

    I also had a go at extracting my data using the Jawbone Oath API and after a bit of fiddling around was able to access all of my personal and activity information so using this device with THaW would be relatively easy. I’ve included the code below for reference.

    Summary

    All in all, I think the Jawbone Up is an impressive device, fashionable, comfortable with good sleep tracking features. However, I feel the service is actually the most impressive part of it but there is just something lacking to keep me engaged. Perhaps it was the community or the lack of intelligent use of my data. Finally though, what really killed it for me was that I felt the step counting was not accurate and having to plug in the device to the phone was a pain but perhaps the bluetooth Up24 version resolves this issue although I’d worry about having to charge it all the more often. I think Jawbone have huge potential if they keep working to do more with the data they collect.

    Jawbone API Code

    I did a little playing around with the Jawbone API to see if I could pull my own data out and using my reliable old Python code of choice, and the help of the web, it wasn’t long before I was pulling a variety of useful information out about my activity.

    # NOTES:

    # https://jawbone.com/up/developer

    # http://eric-blue.com/2011/11/28/jawbone-up-api-discovery/

    # http://eric-blue.com/projects/up-api/

    # https://niklaslindblad.se/2013/07/jawbone-up-api-updates/

    # http://stackoverflow.com/questions/3682748/converting-unix-timestamp-string-to-readable-date-in-python

    # https://github.com/jplattel/PyJawbone/

     

    # Used for web requests

    import requests

     

    # Used for processing JSON

    import json

     

    # Used for grabing the code off

    import webbrowser

     

     

    #################################################################################

     

    ####################################

    ####### DEFINITIONS SECTION ########

    ####################################

     

    # Method for getting the first authentication code

    def getAuth(scope):

    print “getAuth”

    u =  ‘https://jawbone.com/auth/oauth2/auth?response_type=code’

    u += ‘&client_id=’ + client_id

    u += ‘&redirect_uri=’ + redirect_uri

    u += ‘&scope=’ + scope

    webbrowser.open(u) # Remove this for production, only for debugging

    email =’denisfinnegan@gmail.com’

    pwd  = ‘230482’

    payload = {’email’: email, ‘pwd’: pwd, ‘service’: ‘nudge’}

    url = ‘https://jawbone.com/user/signin/login’

    user_agent = ‘Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0’

    headers = { ‘User-Agent’ : user_agent, ‘Content-Type’ : ‘application/x-www-form-urlencoded;charset=utf-8’ }

    response = requests.post(url, headers=headers, params=payload)

    print “CONTENTS: %s” % response.json

    print “”

    print “HEADERS %s” % response.headers

    print “”

    jsonData = response.json

    xid = jsonData[‘user’][‘xid’]

    token = jsonData[‘token’]

    print “”

    print “XID: %s” % (xid)

    print “TOKEN: %s” % (token)

    print “”

    return u, token, xid

     

    # Methode for getting the access code for a user with a auth code.

    def getAccessToken(code):

    print “getAccessToken”

    print “”

    print “CODE PASSED IN IS: %s” % code

    print “”

    u =  ‘https://jawbone.com/auth/oauth2/token?’

    u += ‘&client_id=’ + client_id

    u += ‘&client_secret=’ + client_secret

    u += ‘&grant_type=authorization_code’

    u += ‘&code=’ + code

    res = requests.get(u)

    print res.json

    if res.status_code == 200:

    # Should be in the format of: {“access_token”: “token_here”, “token_type”: “Bearer”, “expires_in”: 31536000, “refresh_token”: “refresh_token_here”}

    print “Getting access_token:”

    print res.json[‘access_token’]

    return res.json[‘access_token’]

    #return json.loads(res)

    else:

    return res

     

    def apiCall(access_token, token, xid, endpoint=’/nudge/api/users/@m/moves’):

    # for other parameters, look at: https://jawbone.com/up/developer/endpoints/

    print “apiCall”

    u = ‘https://jawbone.com’

    u += endpoint

    headers = {‘x-nudge-token’: token}

    print headers

    print “”

    print u

    print “”

    res = requests.get(u, headers=headers)

    if res.status_code == 200:

    print “res.json”

    print res.json

    import datetime

    # Example to show how to convet a time value from the “/@me” endpoint

    #tempTime = res.json[‘meta’][‘time’]

    #print (datetime.datetime.fromtimestamp(int(tempTime)).strftime(‘%Y-%m-%d %H:%M:%S’))

    return res.json

     

    else:

    print res.json

     

     

    #################################################################################

     

    ####################################

    ######## MAIN CODE SECTION #########

    ####################################

     

    # Set Variables #

     

    # client_id & client_secret are obtained from the

    client_id = ‘xOztshMZ8dA’

    client_secret = ’72b9d353ae5ec47f65ceb5ee2187f17ac087cb1e’

    redirect_uri = ‘https://www.tescodiets.com’

    scope = ‘extended_read’ # Change this scope if neccesary (depending on usage)

     

    #Generated an authentication URL with the scope:

    auth_url, token, xid = getAuth(scope)

    print auth_url

    print “”

     

    code = raw_input(“Please enter code: “)

    print “”

     

    #Open auth URL and sign it, you will be redirected and given a auth code.

    access_token = getAccessToken(code)

     

    # Set Endpoint

    endpoint=’/nudge/api/users/@me’  #endpoint # Change this to the endpoint you want

    EndResult = apiCall(access_token, token, xid, endpoint)

    print “”

    print EndResult

    #If the response is succesfull, JSON will be return, otherwise it will return the error.


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 42
    This entry is filed under Personal Blog.
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 43
    You can follow any responses to this entry through the RSS 2.0
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 43
    feed.
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 55
    You can skip to the end and leave a response. Pinging is currently not allowed.
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\single.php on line 61

  • Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 16

    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 16

    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 16
    0 Comments


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 17
    Take a look at some of the responses we have had to this article.


  • Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 44

    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 44
    Leave a Reply


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 45
    Let us know what you thought.


  • Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 62
    Name
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 62
    (required):


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 66
    Email
    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 66
    (required):


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 70
    Website:


    Warning: Use of undefined constant woothemes - assumed 'woothemes' (this will throw an Error in a future version of PHP) in C:\localserver\www\denisfinnegan\wp-content\themes\openair\comments.php on line 77
    Message:

    CAPTCHA Image
    Play CAPTCHA Audio
    Reload Image