Index | Archives | Categories | Tags | Atom Feed

fitbit v3

Good news! My attempts with wearing the fitbit in reverse, i.e. with the sensor at the underside of my arm, were successful:

Chart showing heart rate as measured by Polar H10 vs fitbit alta HR

This time the fitbit alta HR and the Polar H10 agreed much more closely, even during an hour of running! It also correctly detected the drop in heart rate in the middle of my run when I stopped for a bit.

So while not accurate enough for serious heart rate tracking during exercise (for that I still recommend a chest strap like the Polar H10), the fitbit is definitely good enough for 24/7 monitoring and more casual tracking during exercise.

fitbit v2

As promised in the previous post, I made another attempt at getting more accurate readings from the fitbit. The good news is that wearing it tighter does seem to improve the sensor readings. The bad news is that I'm not sure if this tightness is comfortable in the long run, we'll see.

The following was recorded while grocery shopping, cooking and eating Salmon Teriyaki bowls and some reading:

Chart showing heart rate as measured by Polar H10 vs fitbit alta HR

The two peaks in heart rate correspond to me walking to and from the grocery shop. Curiously the fitbit once again exaggerated my actual pulse; this time though there was definitely no stray light (I wore the fitbit tight against the skin, under a long sleeved shirt and a coat).

I'll perform some more experiments tomorrow with wearing the fitbit in reverse, i.e. with the sensor against the bottom of my arm.

Heart Rate Trackers

Recently I acquired one of the new fitbit alta HR bands, mainly because it promised to track my heart rate 24/7 without the need to wear any chest strap.

I always expected this to be less accurate than a chest strap, but how much less? I also happen to have a Polar H10 chest strap (which I use when running), so I decided to record with both for an extended period today.

The results are below (click for the full image):

Chart showing heart rate as measured by Polar H10 vs fitbit alta HR

The fitbit is in blue, the Polar strap in green. There are a few gaps in the data for the Polar strap because I recorded in parts with an app on my phone, which ran out of batter at some point.

Interestingly enough the fitbit actually overestimates my heart rate. If anything, I'd have expected the opposite, because it's easier to miss heart beats with an optical sensor …

Linux on the Alienware 13 R3 (2017)

I recently bought a new laptop because my trusty old Thinkpad (x230) finally got a bit too old for my taste (apart from the battery it still works perfectly though!).

After a lot of searching around and gnashing of teeth - how can current laptops be barely faster than my 4 year old Thinkpad?! And what do you mean, the laptop comes with at most 16 GB of RAM and I can't even upgrade it?!

Finally, I settled on the Alienware 13.

As a gaming laptop, it has a quad core i7 - 7th gen Kaby Lake - and a great GPU, the GTX 1060. 3.5 TFlopscache in a laptop! Since I'm partial to a bit of machine learning, that kind of performance was very enticing. It's also fully upgradeable - 2 m2 slots for SSDs, as well as 2 SO-DIMMs for RAM.

Additionally, the Alienware 13 comes with a stunning OLED …

Error handling with Status(Or)

I just read an article linked on Hacker News advocating the use of Either<L, R> to signal errors in functions. While I think this is a good start, in my experience Either is too general, the lack of standardizing of the error value makes error handling abstractions hard. How did that file function signal again that a file was not found?

What works a lot better in my experience is a more specialized type Status, with a standardized enum of error codes and a free form error message.

Here's an excerpt from the Status type we use at Googlecache:

enum Code {
  OK = 0,
  UNKNOWN = 2,
  NOT_FOUND = 5,
  ABORTED = 10,
  OUT_OF_RANGE = 11,
  INTERNAL = 13,
  DATA_LOSS = 15,

class Status {

  bool ok() const;
  int error_code() const;
  StringPiece error_message() const;


This …


Tea has become my favorite beverage, bar none.

With flavors stretching from light and sweet white and yellow teas all the way to dark and earthy pu-erh, no other drink can match its variety of flavor.

Best enjoyed freshly brewed from whole leaves in a small pot, you need very little to start drinking great tea.

  1. Some hot water, from a kettle or pot, doesn't matter.
  2. A tea pot or infuser with lots of space for your tea to expand, see mine as an example: my tea pot
  3. Loose leaf tea!

Some of my favorite tea includes:

Work Rules!

Work Rules! is the title of a great book by Laszlo Bock, SVP of People Operations at Google.

It's a pretty accurate portrait of life at Google (at least from what I've seen over the last three years), and at the same time it is a great guidebook for companies that haven't yet come as far along the path of employee empowerment.

If you are in any way involved with work - be it employer or employee - this is a must read, with lots of practical advice on how to improve your organization (and your life!). It may also give you a bit of an idea of why I consider Google such a great place to work, probably the best I've seen so far anywhere.

WaniKani on Anki

WaniKanicache has long been my favorite way of studying Kanji, but I've always disliked the need to type in every single reading and meaning. At 300 reviews a day that's a lot of typing!

Today I finally had enough. First I considered making a user script for WaniKani to make it work a bit more like Anki (where you don't type the answer at all, you simply indicate how well you knew it with one tap). But then I realized that I might as well just use Anki directly.

I quickly found wanikanitoanki.comcache, which is great to export all Radicals, Kanji and Vocabulary and has really nice Anki templates too. Alas, the exported data didn't include the critical mnemonics! Presumably because these aren't returned by WaniKani's API.

Luckily, WaniKani is almost trivial to scrape:

import requests
from bs4 import BeautifulSoup

s = requests.Session()
login_page = BeautifulSoup(s.get …

Usability Testing on 10 Cents a Day

I just read Steve Krug's Don't Make Me Think and while I really liked the whole book, what especially stuck out was the chapter on usability testing as often as possible.

It doesn't need to be an expensive or time intensive process - just grab 3 people for 45 minutes each, pay them 50$, show them your website or app and ask them to use it while thinking aloud. Maybe give them a few simples tasks to do.

Repeat this process regularly - say once a month - and you should be able to catch a significant fraction of the usability problems on your site very cheaply.

Standing Automation

I've had a standing desk at work for a long time, but I've always felt that I wasn't using it enough, that I still spent most of my timing sitting.

This week I finally decided to do something about it.


I bought a small sonar sensor (LV-MaxSonar-EZ1), hooked it up to an Arduino and added a little Python script to sample the sensor once a minute.

The sonar is mounted to my table and measures the distance to the floor, and with ~3 cm accuracy it's very easy to distinguish whether I'm sitting or standing.

Since the Sonar happily runs of 5V, I just connected its power input pins directly to the VCC and GND pins of my Arduino. Conveniently it also provides the measured distance as analog voltage on a pin, I just connected that to A0 on the Arduino.

The Arduino code to regularly sample the sonar is …

© Julian Schrittwieser. Built using Pelican. Theme by Giulio Fidente on github. .