Bangs on Keyboard, Makes Shiny

I am Jakob Heuser. I code, I write, & I strive to keep things simple. Photography is a hobby I'm happy not being paid for. I work at LinkedIn, and enjoy making an impact.

The Fitness Wristband Shootout

Read The Full Post

Ever since I invoked the 4 hour body and shed 50 pounds, I’ve been looking for simple ways to continue to measure my day to day progress. As my weight has shifted up or down, I’ve been trying to identify outliers in behavior that caused the change. Lucky for me, 2013 is the year of the “wearable fitness”. Nike, Fitbit, Jawbone, and Motorola are all in the game. At an uncomfortable sum of money per wristband though, it’s an expensive experiment to try them all and find the best one on the market right now. Obsessive nerd that I am, I got a few- and then I borrowed a few more from my colleages to get my hands on every current fitness tracker. If you want to save on some reading, go run out (hah!) and get the Fitbit Flex.

The Final Two Contenders: Nike and Fitbit

The Things That Actually Matter

It turns out, when it comes to your fitness wristband, there’s a very small number of features that matter. There may be bells and whistles and dodads galore, but while nice, those are not going to be the things that piss you off when trying to become a walking datapoint. In testing, I found there is really only one thing that will be a consistent source of frustration: taking it off. Removing the wristband to charge or sync is one more opportunity for you to forget the wristband, creating gaps in your data. Since all the devices must remove to charge and offer comprable battery life, you’ll have to remove the wristband at least for that. Removing to sync however, that’s just silly.

In fact, at this point, let’s just stop talking about the Jawbone UP. If you’d like, go to a store and try to cram the 3.5mm headphone plug attached to the wristband itself past your iPhone or Android case. Then imagine doing that every day because you want to see your data. Then imagine returning your device in a fit of rage. I’m still confused how a leader in bluetooth made a manually syncing wristband.

It’s also worth mentioning that “being discontinued” is a deal breaker as well. So, let’s just rule out the Motoactiv since Motorola decided fitness wasn’t cool/profitable anymore.

Then There Were Two: Nike and Fitbit

So now that we are looking at not-discontinued fitness trackers that can actually sync wirelessly, we are left with two brands. The Nike+ Fuelband ($149) and the Fitbit Flex ($100) offer wireless sync, allow you to set a goal, and then go commence fitness until your goal is reached. From here on out, it’s all about preferences. Both the devices are resizable, both of them track distance, and both of them put their data in pretty charts and graphs for you on their websites.

I spent a week wearing both.

If you’re wearing your device for looks and to get a general sense of your activity day to day, then the Nike+ Fuelband is your gadget. The LED style and readouts are really eye catching and turn heads. The red-to-green progression for your goal is awesome, and the little goal animations make the device fun. It’s simple to set a goal, and simple to work towards it.

The Flex, however, is one more tool for someone who wants to see their data as part of a larger system. It’s integration with other sites, the addition of WiFi friendly scales, and the complete dashboard help you really understand your fitness in the context of your long term goal. This idea is probably better reinforced with a snapshot of the dashboards.

The Dashboards: Nike on Top, Fitbit on Bottom

In the end, Nike just can’t seem to put up as much detail as Fitbit. Wearable fitness is as much about the second word as the first. If Nike+ can make their apps all part of one larger ecosystem, I believe they’ll be a strong competitor. Until then, the FitBit has the winning position locked up.

Over on GitHub

See All My Projects

Good Git Commands To Know

Read The Full Post

I love git. It and its other distributed version control systems have changed the way we think and write about code. Not too long ago, we used to commit giant monoliths of code to SVN locations. Complex environments often had to dedicate at least one person to managing branches. It was the complete opposite of good. I’ve been using git now for over 6 years, and I’m still learning tips and tricks that make my day to day development easier and better. These are my favorite commands.

git bisect: When did the code go wrong?

Eventually something will break, and it will only happen after a long stream of commits. The git bisect command allows you to begin searching for that commit where things went south. The command looks like

git bisect start
git bisect bad HEAD
git bisect good aecdb123

You’ll need to specify a “bad” revision (often HEAD), a “good” revision (perhaps from a tag or git log), and then you’re off to the races. Git will select a commit exactly halfway between “good” and “bad”. So you’ll test your code. If it worked

git bisect good

And if it didn’t

git bisect bad

Every time you tell git if things are good/bad, it will cut the remaining revisions down by half. Before you know it, you’ll have zeroed in on the code that is causing everything to fail. Check the commit log, see what happened, and you’ll usually be 99% of the way towards fixing your broken build. All of the bells and whistles that make bisect even cooler are available on the git-bisect docs page.

git pull –rebase: cleaner merges

Often times, you will have to pull down changes from somewhere like github. By default, git pull will create a full merge, interweaving your code and the upstream code together. On large projects, this can be incredibly painful if it comes time to bisect something. Instead, the git pull command has the ability to rebase your changes. You’ll jump to your upstream version, and then apply your commits as if they were a series of patches. The result? A nice linear commit history.

git pull --rebase origin master

The above command rebases the origin remote’s master branch into your current working copy. If you’re tracking an upstream branch, the remote and branch names become optional items.

git config –global alias: less typing

Sometimes, you probably feel like a rediculous string of git commands is necessary to get exactly what you want. Git helpfully makes it easy for you to rerun that command by aliasing your favorite command (which might now be git pull --rebase to a new git command), to something like git rpull.

git config --global alias.rpull 'pull --rebase'

Other uses of the alias command I’ve seen is to shorten the git bisect commands, use special arguments for git log, or generate work specific diff files using the options for git diff.

git-reflog: proof you can undo just about anything

git reset --hard is probably one of the scariest operations you can do. Just like that, it could appear your entire repository was catapulted back in time. This can be pretty great… as long as you didn’t need any of those changes. It only took me accidentally resetting my changes once before I did git reset in new branches only. This was before I learned about the “reflog”.

The git reflog command spits out a sequence of operations.

$ git reflog

1907832 HEAD@{0}: checkout: moving from master to sample
1907832 HEAD@{1}: commit: working on git article
809189a HEAD@{2}: commit: final title change
1887f64 HEAD@{3}: commit: minor amendment to iframe article
6c8e64c HEAD@{4}: commit: launch iframe blog, added to git blog
b47369b HEAD@{5}: pull origin master: Fast-forward
7f66541 HEAD@{6}: commit: changed to hashes for markdown, new post
b9e19d0 HEAD@{7}: commit: converting to pygment happy land
432a308 HEAD@{8}: rebase finished: returning to refs/heads/master
432a308 HEAD@{9}: rebase: more drafting of the creed post

It turns out that it’s damn-near impossible to lose something in git. As you commit, rewind, replay, and revert, git keeps a record of every single thing you’ve done. Now, let’s reset to some arbitrary distance ago, destroying all my hard work.

$ git reset --hard b9e19d0
HEAD is now at b9e19d0 converting to pygment happy land

Sure, I’m back in “pygment happy land”, but I just lost 7 commits worth of work. Whoops. git reflog knows you better than you think; it has your history of changes, including your foolish reset:

$ git reflog

b9e19d0 HEAD@{0}: reset: moving to b9e19d0
1907832 HEAD@{1}: checkout: moving from master to sample
1907832 HEAD@{2}: commit: working on git article
809189a HEAD@{3}: commit: final title change
1887f64 HEAD@{4}: commit: minor amendment to iframe article
6c8e64c HEAD@{5}: commit: launch iframe blog, added to git blog
b47369b HEAD@{6}: pull origin master: Fast-forward
7f66541 HEAD@{7}: commit: changed to hashes for markdown, new post
b9e19d0 HEAD@{8}: commit: converting to pygment happy land
432a308 HEAD@{9}: rebase finished: returning to refs/heads/master
432a308 HEAD@{10}: rebase: more drafting of the creed post

A quick git reset --hard 1907832, and everything is back. Making reflog the absolutely coolest tool in a version control system.

Keep Learning

Most of these tips were pulled from notes I took while learning git. I then learned there is an entire website dedicated to improving your git-fu. http://gitready.com/ has examples, tricks, tips, and even more amazing things that go beyond this basic article.


Contact Jakob