Thursday, December 25, 2014

Terraria Free for Android on Christmas Day at Amazon App Store


Terraria is free for Android from the Amazon App Store - today only!  This is part of a free daily package that includes a number of other games too.



Walmart Is Our Fitbit Gym


Fitbit expert tip of the month.

We have recently been involved in a number of Fitbit challenges and as the season gets colder it becomes more and more difficult to keep our challenge step count high. Our solution - move our steps inside.


walmart map

target map

We have resorted to extending our standard shopping duration and pacing the various large stores. It's heated, level, stocked with drinking fountains and bathrooms, plenty of distractions to keep the mind busy, and most importantly free (beat that regular gyms!). As we trace through every single isle we can accumulate a couple of thousand steps each revolution.

walking map





Monday, December 22, 2014

10 Mindful Movements


On Monday morning how are you feeling? Frantic or peaceful? Each Monday spend 15 minutes practicing the 10 Mindful Movements. Open this PDF for instructions, or this PDF instructions and watch this YouTube video for a demonstration.

"The practice was introduced by a Zen Buddhist monk named Thich Nhat Hanh, and it’s based on basic yoga and tai chi movements. Each of the ten routines is designed to be easily accessible and can be performed by people of all ages and all body types, whether they’re familiar with mindful practices or not. They can be done before or after sitting meditation, at home, at work, or any time one has a few minutes to refresh both mind and body.
For those new to meditation, the exercises are an easy way to get acquainted with mindfulness as a complete, multifaceted practice. For current practitioners, the movements add a welcome physical element to a sitting meditation practice."


Monday, December 15, 2014

Echoes of Christmas


Our family enjoyed an evening at Echoes of Christmas hosted in Liberty Park of Salt Lake City. It was an enjoyable evening of live signing, animals (even a camel!) and the Christmas story. Even the kids had a good time. You can tell it was a good time when your kids go from running around and rowdy, waiting for our turn, to quiet and paying attention.

"Echoes of Christmas is a Live Nativity that features 7 original songs that bring the true meaning of Christmas into our hearts. This 40-minute walking tour is a free event and open to all. Make this a family tradition. Dress Warmly."
Dates and Location
Dec. 11-13 & 15-17, 2014
7-9 PM, starting every 5 minutes
Salt Lake City’s Liberty Park
(enter from 900 S. at 600 E.)



Of course I had to geek out and traced a map of our path, along with stopping points, on my phone's GPS.



Friday, December 12, 2014

Tau of Scouting

Tau of Scouting


Action is better than inactivity.
Participation is better than watching.
Outdoors is more fun than indoors.
The unusual is more exciting than the usual.
The surprising is more interesting than the expected.
The mysterious is more appealing than the obvious.
The real thing is more appealing than a substitute.
Preparation is better than winging it.



-- author unknown

Wednesday, December 10, 2014

Purchase OnePlus One Without Invite



While supplies last, you can now pickup a OnePlus One without an invite, and they will arrive before Christmas.




Hide Chrome Avatar Menu


A recent update of Chrome turned the previously hidden new avatar menu on by default.  This avatar menu allows you to quickly change your login profile.  I only ever use one profile, so the button just gets in the way, and I have a few times accidentally clicked the avatar menu instead of the minimize button (muscle memory says the minimize button is always the first button on the left, right?).

At first I wasn't sure what the name of this "avatar menu" feature was, but after a bit of digging through the chrome configuration options, I found one called "Enable the new avatar menu" that looked promising and finally removed the button.  Happiness.


To hide the avatar menu button: browse to chrome://flags in your chrome browser, and search for the "Enable the new avatar menu" option, and change the setting from "Default" to "Disabled".  Finally click the "Relaunch Now" button at the bottom, and Chrome will reload with the avatar menu button hidden.


Update July 2015: This option appears to have changed to "Enable new profile management system", but there appears to be a bug which does not allow this menu to be disabled.
In the mean time one can always add '--disable-new-avatar-menu" to the Chrome shortcut link




Monday, December 8, 2014

Dropbox Fail



I just ran into what appears to be the Dropbox version of the Twitter Fail Whale.  I am trying to download some of my important files off of the Dropbox website, and I keep getting this error:



Sadness.


UPDATE: The issue has resolved itself as of the following morning.


UPDATE: Ran into yet another issue with Dropbox, which eventually resolved itself. At least the error messages are cute to look at...




Wednesday, November 26, 2014

Blizzard Epic Black Friday Sale



Blizzard's black friday sale has Diablo III and StarCraft II for 50% off the base games. (and 75% off on World of WarCraft, if you are into the subscription game). Sale ends December 2nd.




Tuesday, November 25, 2014

Cross Country Snowboarding



Get your skootch on and join the extreme sport of Cross Country Snowboarding.

It's a powerful thing, and you really feel connected to MM (Mother Nature).

"This is an outsiders sport of an outsiders sport (snowboarding), plus we do it outside.  We are rocking a triple entendre."

"One thing about us is when we do go Cross Boarding, we never step out. No way! You're in from sunup to sundown. Stepping out is sacrilege in Cross Country Snowboarding. You just don't do it."

"If you don't switch it up and go goofy every once in a while, you're going to get skootch leg.  You'll know the guys in the chalet, with skootch leg, because they are going to be walking in circles."

Cross Country Snowboarding brings you these excellent moves:

  • Skootchline Blunt
  • Frontside Skootch
  • Backside Skootch

It's all about moving forward, turning around and moving forward.

"We know it's never going to be the big thing. That's the great thing about Cross Country Snowboarding. It's impossible to for it to sell out."






Friday, November 21, 2014

Matchup.io and Fitbit



So you have received an invitation to participate in a Matchup.io step challenge.  Now what?  The following are directions to configuring and linking your Fitbit with Matchup.io.


Fitbit Settings


1.  Purchase a Fitbit.  (eg. Fitbit One from Fitbit / Amazon ~$99)


2.  Create a free account at Fitbit.com.


3.  Setup your Fitbit and Sync with your Fitbit account.  Sync by downloading the Fitbit application for Android / Apple / Windows / Windows Desktop and connecting to device through Bluetooth.


4.  Be friends with your friends.  This is a social activity, so connect with your friends.  Everyone can help track everyone's progress and help motivate each other to reach their goals.


5.  Be friends with the creator of the step challenge.  The step challenge creator should have already sent a friend invite to you.  If they have not, send an invite to them.


6.  Change your profile picture.  Don't be the anti social friend.


7. Configure your Fitbit privacy settings to share your step count with friends.  Again don't be anti social, allow your friends to at least see your step count, activities and primary goal.


Matchup Settings


8.  Create a free Matchup.io account.


9.  Join the Matchup challenge.  The challenge creator should have sent you an invitation or the challenge URL.  If you haven't received this yet, ask the challenge creator again.


And that's it.  Now you just need to wait for the challenge to begin and remember to stepSTRONGTM.





Friday, November 7, 2014

75K Fitbit Award

Woot Woot!
You've walked 75,000 steps today!

What an overachiever!
75,000 steps in one day?
We bow down to your awesomeness.







Thursday, November 6, 2014

BlizzCon 2014 - Virtual Tickets


BlizzCon begins tomorrow (Friday, November 7th - Saturday, November 8th). For those who are unable to attend in person ($200 sold out), Blizzard is also providing remote virtual access to the convention. BlizzCon Virtual Tickets can be purchased for $39.

"The Virtual Ticket gives you a front-row seat at BlizzCon from the comfort of your own couch."

The Virtual Ticket Includes:

  • Panels, Interviews, and Exclusive Content
  • Contests
  • BlizzCon In-Game Goodies
  • Closing Ceremony - performance by Metallica
  • On-Demand Replays - available for 2 weeks past the event




Sunday, November 2, 2014

Stride Length vs Step Length - Stop the Confusion

Stride Length

I think the term "Stride Length" should not be used.  It appears to have morphed from being one's "gait length" now into one's "step length", which leads to confusion.  Poor Pedometer documentation (made in foreign countries?) I think is to blame.

Having been a boy scout and earned my Orienteering merit badge long ago, we all had to calculate out our "stride length" ("pace count", "gait length") and "step length" ("step count").  This is what I have always known these terms to mean.

Google dictionary definitions of "stride length", and they all tend to say:
"stride length: The distance between 2 successive placements of the same foot, consisting of 2 step lengths"
But then you look at calculating your stride length for a pedometer and all of a sudden "stride length" is now calculated the same as "step length".

Even fitbit appears to perpetuate this in their FAQ: How do I measure and adjust my stride length.

This is why I think the term "stride length" should no longer be used.  Thoughts?

Saturday, October 25, 2014

Fitbit One

Fitbit One Wireless Activity + Sleep Tracker

I won a Fitbit at a company event, and have liked it enough that I picked up a second one, for my wife.

"Fitness means being active, sleeping well, and eating smarter - and Fitbit One helps you do all three. During the day, it tracks your steps, distance, calories burned, and stairs climbed. Come nightfall, it measures your sleep cycle to help you see how to sleep better, and it can even wake you in the morning without waking your partner. Your stats upload wirelessly via computer, or select mobile devices (like the iPhone 4S). Powered by your stats, you can set goals, and track progress with charts and graphs. Stay motivated by earning badges or connecting with friends for support or friendly competitions. Log food, work-outs and more. Bring greater fitness into your life - seamlessly, socially, 24 hours a day." (amazon)

MSRP is $99, but you can pick one up a black Fitbit One on amazon for about $86, or a burgundy Fitbit One for about $83.

Fitbit One Features:
  • Tracks steps, distance, calories burned, and stairs climbed
  • Monitor how long and how well you sleep
  • Wakes you (and not your partner) with a silent alarm
  • Syncs automatically to your computer or select mobile devices via Bluetooth 4.0/Bluetooth Smart
  • Set goals, view progress with charts and graphs, and earn badges
  • Share and compete with friends throughout the day
  • Free iPhone and Android Apps
  • Small and discreet - wear in pocket, on belt or bra
  • Log food, weight and more on Fitbit's website or apps
  • Sweat-, rain-, and splash proof
  • Rechargeable battery



Outlook - Enter Network Password - Network SharePoint


Starting about a week ago, whenever I would open my corporate Outlook 2013 (Outlook 365), I would be prompted to "Enter Network Password" for "Network: SharePoint".  If I canceled the prompt, my email did not appear to be affected, so whatever was causing this prompt was not critical.

After much Googling and trying a number of solutions, such as clearing the Credential Manager under Control Panel, and other such similar solutions, nothing seemed to work.  Fortunately, I found one thread that had found a solution.  The cause was an overactive Outlook Add-In plugin called "Outlook Social Connector 2013".  To stop the password prompt, simply clear your SharePoint Social Network Account.  You can also permanently disable the Add-In entirely, if you wish.


Option 1 - Clear SharePoint Social Network Account




Open Outlook 2013, select File, select Account Settings and then select Social Network Accounts.



Click the "X" icon next to the broken SharePoint account to remove the account settings.



You will be prompted to confirm the removal of this connection, select Yes.



The broken SharePoint  account settings will be cleared, and you will no longer be prompted to enter the network password.



Option 2 - Permanently Disable Outlook Social Connector 2013 Add-In




Open Outlook 2013, select File, select Options, select Add-Ins and then select the Go button next to Manage COM Add-ins.



Deselect the Outlook Social Connector 2013 Add-In, and you will no longer be prompted to enter a network password.






Tuesday, October 14, 2014

iPhone 6 Plus vs Nokia 3310 Brick



I had a good chuckle over this joke, found making the rounds on Facebook. My kids have a little brick phone and they are indestructible.



Tuesday, October 7, 2014

Blood Moon

Blood Moon  (image from Google Images)

Tomorrow morning (Wednesday, October 8th, 2014), there will be a "Blood Moon" total lunar eclipse. The eclipse will appear from 4:20 am to 5:20 am, with the peak maximum total eclipse appearing at around 4:50 am (for Salt Lake City).

Local viewing times can be found on the Eclipse Calculator.


Viewing conditions as reported by AccuWeather


UPDATE: I posted the photo I took of the Blood Moon on my 365 project.



Friday, October 3, 2014

Introduction to the Google Calendar API (HOWTO)




I have used Google Calendars to schedule and control a number of projects (eg. sprinkler system, alarm clock, etc) .  The following How To will get you started.  You will of course need a google account.


Create Project


1) Start by visiting the Google Developers Console

and create a new project.


2) Select the project and navigate on the left menu to APIs & auth then APIs and enable Calendar API for this project.  You can disabled all other APIs if you only need Calendar access.


3) Next, select the Consent screen menu option from the APIs & auth menu.  Enter a Product Name and select an Email Address.  If you do not do this step, you will get a Error: invalid_client error later on.


4) Next, select the Credentials menu option from the APIs & auth menu.  Under OAuth select Create new Client ID.


5) For the Create Client ID select Installed application for Application Type and select Other for Installed Application Type and finally click the Create Client ID button.


6) After the ID has finished being created, click the Download JSON button.  Save and rename the file as something simple like client_secret.json.

This json file contains your API credentials needed to access the Google Calendar APIs.


Install Google API Libraries


1) Install the Google API Libraries using Python's PIP installer:
$ sudo pip install --upgrade google-api-python-client

gflags may or may not be needed, depending on what code you use: (may be optional)
$ sudo pip install --upgrade python-gflags

If you would prefer alternatives, view the Google APIs Client Library for Python page.

Authorize Application


Next we will need to run our application and authorize it against the desired account.

1) Clone my sample code:
# git clone https://github.com/oeey/gcalendar.git

The sample code is just a slight modification from the Getting Started Sample Code.  The Google sample code has some outdated code that will throw some obsoleted warnings.

2) The application has not been authorized to an account yet.  Run the application once and you will be asked to paste a validation URL into your browser.  Login to your desired target account (with the calendars you want to access) and then paste the validation URL into your browser.

For convenience I have a first_auth.py script that is the same script as the gcalendar.py script, but terminates after authorization.  You can run any of the scripts to complete this authorization step.

The first_auth.py is pretty simple:
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run_flow
from oauth2client.client import flow_from_clientsecrets

def main():
    scope = 'https://www.googleapis.com/auth/calendar'
    flow = flow_from_clientsecrets('client_secret.json', scope=scope)

    storage = Storage('credentials.dat')
    credentials = storage.get()

    class fakeargparse(object):  # fake argparse.Namespace
        noauth_local_webserver = True
        logging_level = "ERROR"
    flags = fakeargparse()

    if credentials is None or credentials.invalid:
        credentials = run_flow(flow, storage, flags)

if __name__ == '__main__':
    main()

You may notice the "fakeargparse" code. The run_flow() call wants the flags to be set from the parameters pulled from argparse. I think that is overkill for what I needed, so I just created a fake container so run_flow() wouldn't complain.

Run the first_auth.py script to collect the application authorization.
$ python first_auth.py
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=1039XXXXXXXXXXXXXXXXXXXXXXXXXXcs46gdj2.apps.googleusercontent.com&access_type=offline

Enter verification code:

3) Copy the URL into the browser and accept the permissions.


4) You will be presented with a code, to which you will then enter back into the prompt of the first_auth.py application.  The authorization will be stored in the credentials.dat file for future requests.
$ python first_auth.py
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=46XXXXXXXXXX2-bXXXXXXXXXXXXXusvh6.apps.googleusercontent.com&access_type=offline

Enter verification code: 4/WzAQfXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2vw2M2Pl7OykQI
Authentication successful.

Now that we have our API credentials and are authorized to access an account, we can begin to play with the Google Calendars.


View Upcoming Events


The upcoming.py script builds off of the first_auth.py script, cycles through the next few upcoming calendar events and displays the event titles.
...
    if credentials is None or credentials.invalid:
        credentials = run_flow(flow, storage, flags)

    http = httplib2.Http()
    http = credentials.authorize(http)
    service = build('calendar', 'v3', http=http)

    print "Upcoming Events:"
    request = service.events().list(calendarId='primary')
    while request != None:
        response = request.execute()
        for event in response.get('items', []):
            print event.get('summary', 'NO SUMMARY')
        request = service.events().list_next(request, response)

This script defaults to the primary calendar associated with the account.


Calendar ID


The previous script defaults to the primary calendar associated with the account.  If you wish to specify an alternate calendar, you will need the Calendar ID.  A calendar's ID can be found on the Calendar Details setting page (same page you can change a calendar's name on).  Look for the Calendar Address line, and the Calendar ID will be in the parenthesis.  It will look something like "a3sd5221ap2qe5ksbev3ip4@group.calendar.google.com".


Next 12 Hours of Events


Finally, to specify a time range for events, I use the following code in my gcalendar.py script.  This code will collect the next 12 hours worth of events.
  ...

    service = build('calendar', 'v3', http=http)

    # get the next 12 hours of events
    epoch_time = time.time()
    start_time = epoch_time - 3600  # 1 hour ago
    end_time = epoch_time + 12 * 3600  # 12 hours in the future
    tz_offset = - time.altzone / 3600
    if tz_offset < 0:
        tz_offset_str = "-%02d00" % abs(tz_offset)
    else:
        tz_offset_str = "+%02d00" % abs(tz_offset)
    start_time = datetime.datetime.fromtimestamp(start_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str
    end_time = datetime.datetime.fromtimestamp(end_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str

    print "Getting calendar events between: " + start_time + " and " + end_time

    events = service.events().list(calendarId='primary', timeMin=start_time, timeMax=end_time, singleEvents=True).execute()singleEvents=True).execute()
    #pprint.pprint(events)
    for event in events['items']:
        print event["summary]


And this is the basis for the code I use to schedule my sprinkler system with.