Friday, June 19, 2015

Initial Hammerhead One review

Warning! This review is long. You've been warned.

I finally received my Hammerhead One a week or two ago. This thing's been a long time in the making, starting as a kickstarter (or one of those crowdfunding sites, I'm too lazy to go back and look it up) that I was really excited about. If you're not familiar with a Hammerhead One, it's a bicycle navigation device - here's the manufacturer's own video:




Hammerhead One demo video

It's a really, really cool concept, so I was more than happy to back them.

The process took a while. I knew this from the start, but it certainly seemed to go on quite some time. They were good with updates to the process, but I quickly learned that "we think we'll be shipping it by {insert some point in the near future}" statements were not terribly likely. Eventually, I decided "okay, it'll happen at some point, and it'll be a pleasant surprise when it does". Finally, about a month ago I received an update message that said they'd be shipping out soon. It showed up on my porch one day, and I was pretty stoked!


Initial thoughts


  • It's a clean design
    The final shipped design is awfully close to the initial designs, and is really clean. Non-cycling friends can (and have) made jokes about the new sex toy, but aside from that it's a pretty cool looking gadget.

  • No documentation at all in the box?
    The box looks pretty good, but one thing I noticed right away is there's no documentation either in the box or on it. If you're going to ship a device with no form of instructions included, you'd better make damn sure it's super intuitive to use and has no gotchas. Turns out, this isn't the case.

    There was, however, a nice thank-you card which lists the names of all the initial supporters. Yep, I'm on there, along with two friends that I know supported it. Cool.

    The only instructions that I received with the unit came in the shipping email:

    "Once you have unboxed your Hammerhead we suggest you connect it to the app and update the Firmware immediately: This video will show you how to update the firmware, and here is an initial turn instruction guide."

    As this was the shipping email, I initially missed it, and as we'll see, that turns out to be not quite enough.

  • Reusing the Garmin mount is a clever approach
    The mount on the Hammerhead uses a standard Garmin bike computer half-turn mount. It's simple, it works, and opens up the ability to use a bunch of other mounts.

  • Sparse documentation online
    After some initial setup issues, I hit the "Help" link in the app which leads to their online FAQ. They've bolstered it quite a bit since I got mine, but at the time, it was really sparse. The only other thing I managed to find were the videos which we've already discussed.

  • Setup video says iOS, no separate video for Android
    Although the app looks almost exactly the same between the two platforms, the setup video that they linked to in the shipping email clearly says "iOS" in the title. So I look for the Android version, and I don't find it. Good thing I know Android and iOS well enough to be able to translate what they're trying to do in the video. It's not hugely different (beyond it actually working in iOS - but more on that in the next section) but it's still different.

  • No GPX import?
    Playing around with the app, it looks like a fairly basic navigation app. I find I get the best results planning rides using a computer and web-based tools instead of an app on the phone - and then being able to import that route into an app on the phone when it comes time to follow it. This doesn't appear to be an option, and it doesn't even look like I can use another tool and then import that path. I understand that this could lead to issues - if I give it a route that's not on its map, how will it know where to turn, and if I go off-route, how will it figure out how to re-route me? It's probably not a trivial solution, but I sure hope that they figure it out.

Android problems

I have two phones - my own Android (first gen Moto X) and an iPhone 6 from work. This turns out to be a good thing, because about two weeks into having my Hammerhead, I've still yet to get it working with the Android phone. I've discovered a bunch of fun things, and have been seriously frustrated up to this point, but so far their customer support has been pretty good. Here's a rundown of the problems I've discovered and not yet surmounted:


  • You don't pair it with your phone like a normal Bluetooth device.
    If there were instructions, I might have known that before I started using it. Having missed the one paragraph of instructions in the shipping email, I figured "Okay, it's bluetooth. Let's get it paired up and see what this thing can do." So, I went to the phone's Bluetooth setup menu, just like I've done for all the other Bluetooth things that I have, and tried to set it up. This failed with an "invalid PIN" error. I checked the instructions I received for what to do in that situation and oh wait - I didn't get any. Hah.

    Turns out you have to do the pairing in the app. Why? Fucked if I know. I've got theories.

  • If you manage to lock it up, the only way to reset it is leave it alone and let the battery run out.
    In the process of trying to figure out how to get it to talk to the phone (remembering that I missed the one paragraph of instructions with links to videos for a mobile OS that I was not using) I managed to lock it up. The device has one button which is ringed by light when it's on, and at some point this went solid greenish-blue and the device stopped responding at all. The phone wasn't able to see it anymore - it was locked up. With no troubleshooting instructions and nothing of use I could find on the FAQ (which was much less populated than it is now and had almost nothing about connectivity issues) I was left to my own troubleshooting steps. I'm a computer guy, I've got decent troubleshooting skills. The first thing I tried was to press and hold the button, as many electronic devices honor that as a "turn off regardless" indicator. Holding the button down for well over a minute made me think that wasn't the case. Tapping the button did nothing. There are screws on the back of the unit and I considered opening it up - they're just T-6 Torx, which I have - but at this point the thing is brand new and I decided I didn't really want to do that.

    Ultimately, I left it alone and let the battery die off. Once that happened, I could start trying to use it again, until I locked it up again and had to let it die all over again. Speaking with support, I was told that I could reset the unit by "Plug in the USB cable and hold the main button for 6 seconds. Then remove the USB cable and hold the main button for 3 seconds." This procedure kinda sucks since I need to have a USB cable on hand and leaves a bunch of questions unanswered:
    • Do I keep holding the button when I unplug the USB or do I let it go?
    • Does the USB cable have to be plugged into the wall, or would a cable by itself do the trick?
    • Most importantly, why didn't it work with any variation of the procedure that I could think of?

  • Removing the charging port cover isn't intuitive or documented
    The charging port cover is easy to find, at the bottom of the unit on the back. Getting it off is another matter. It looks like it should just slide off away from the bottom of the unit, but trying to do that by hand without forcing it wasn't resulting in anything. There's a tab on the back of the device that looked like maybe it needed to be depressed in order to let the cover slide off, and I tried that. Turns out that's exactly what you don't want to do as it keeps the cover in place and pressing on it increases the lock, not decreases it. I see the FAQ entry has been updated to state this now - but that wasn't there the other day when I tried it. Also, the FAQ entry had one single photo with an arrow on it pointing to the charging port. The problem here is that the photo looks like a quick shot with a cell phone camera in crappy lighting so the arrow points to an area on the phone you could have found on your own (I did) and the relevant point on the unit is a featureless blob of black, so you really don't get any information from the photo which isn't already obvious. See what I mean?
    Crappy white balance and exposure make this photo useless.

    With a T-shirt providing a dark background so it doesn't throw off the auto exposure and sunlight from the window by my desk, I managed to get this photo:
    Less than a minute of work and a much more useful photo.
    I didn't include the cover because I took that off and just left it off.

    I eventually managed to get the cover off by sticking the point of a screwdriver in the space around the tab that holds it in place and pushing it away in the direction I guessed was right.

  • The charging light is hard to see
    When I first let it die off because it was locked up, and then plugged it in, no lights came on. Considering the thing is covered with LEDs, I was kinda surprised about that. No form of indication if it's charging or done? Fail.

    Well, turns out I was wrong. There's a small green LED on the side of the unit which shows when it's plugged in. I had initially missed it. Let's see why:
    The charging light is on. Can you see it?
    See it now? The viewing angle is quite shallow.
    I also don't think the light changes based on the charge level. It's just an indication that it's plugged in. So, is it fully charged? Well, the app can tell you that, but a simple flashing during charge, solid when fully charged would remove the need for the app.

  • The firmware process isn't well documented or intuitive
    The only instructions for upgrading the firmware are on the iOS video. It just shows the procedure happening once and leaves out pretty important details. I managed to assemble the proper procedure from the video, the light sequence demo video, and other information I managed to find online.

  • Lack of information on firmware versions
    Since the only place you can update the firmware is through the phone app, you never have to manually download it, and that's nice. However, there's no way to see what the current released version of firmware might be - or changelogs, or anything like that. As a computer guy, I'm used to things like this. For the general user, not a huge problem, but since they recently uploaded a video mentioning firmware 1.5, and I'm at 1.3.x, I have to assume that it hasn't been released because "Update firmware" is greyed out in the app. Or maybe something's broken. I can't tell.

  • The Android app won't actually talk to my phone
    After finally managing to update the firmware on my device, I tried to use it with my Android phone. I can create route instructions, but when I try to ride it, I get the following error:
    "wait for some time." ?? Dafug?
    Despite "waiting for some time" - it never sees my Hammerhead.

  • The Android app crashes repeatedly
    Related to the above point, when I click "Skip" on the "Connecting to Hammerhead" prompt above, the app closes and I get this:
    Yay, crashed!


  • All of this works on my iPhone
    I guess we know where they spent all their development effort and QA testing.

Test drive on my commute to work

So yes, I know that my first test with this thing should be on a bike, not driving in a car, but time constraints combined with curiosity/impatience led my first test to be my driving commute to work. It's actually not awful because I know the roads between home and work pretty well so should be able to follow pretty close to the route the app suggests, and it'd be interesting to see how it handles things. The key, however, with anything that gives you directions is you should get familiar with it on roads and paths that you _know_ so you learn its quirks - you don't want to find these out blindly following it where you have no idea where you _should_ be going.

For this test,  I had the hammerhead propped up in front of my speedometer so I could see the lights out of my peripheral vision, and the iPhone was in my phone holder so I could see the route it had planned out for me.

  • It really prefers bike paths to streets
    This isn't too surprising, since it's designed first and foremost for giving directions to road bikers. Still, the roads around my house are quite nice and cyclist friendly. Here's the way it suggested I start my ride:
    It's pretty, but a circuitous 2.8 miles.

    Perfectly valid route that's a full mile shorter.
    While the route it suggested is pretty and almost completely avoids any roads, the way I usually go is perfectly fine for cyclists and takes 1 mile off the ride before I've even gotten to Route 202.

  • It prefers a shared-use path to a marked bike lane.
    Similar to above, Route 202 has a shared-use path that runs along side the road, separated by a fence. It's a nice way to go - but 202 also has marked bike paths on the road. If you chose to do that (admittedly, few cyclists do, but I have) it will confuse the app, frequently telling you to turn around and head back when the shared use path goes away from the road too far.
    Route 202 has bike lanes and a separate shared-use path. gmaps

    If you don't already know where you're going, the indication for a U-turn while you're heading the right way on a marked bike lane could be confusing as hell.

    If you do already know where you're going, then you don't really need a blinky thing on your handlebars telling you where to go, do you?

  • The routing was pretty good for a cyclist in the area
    Ignoring wanting to use bike paths over roads and insisting on a U-turn when you don't follow it exactly, the routing was pretty good. There are some tricky areas for bikes on my commute, and it managed to avoid those pretty effectively.

  • It tried to direct me over a bridge that has been closed for a month or two
    I use the Waze app for driving. It's a community-supported app that allows you to report problems on the road, including road closures. One of the routes I take to work has a bridge which is currently closed for repairs. I was able to tag the bridge as unavailable in the Waze app so that other folks knew to not go that way.

    Unfortunately, Hammerhead's map doesn't know this, and tried to direct me over the same bridge. When I took my usual detour around the closed bridge, the Hammerhead was diligently instructing me to make a U-turn for well over a half mile before it finally figured out the way I was actually going.

  • The amount of pre-turn warning that you get seems to be based on distance from the turn
    Okay, this is kinda a bullshit observation since I was in a car, going far faster than the app was designed for, but the turn notifications I was getting happened *very* close to the turn. At bike speed, that'd be just fine, but adjusting the amount of warning based on the speed doesn't seem like it'd be terribly difficult. More of an observation than a real issue.

  • Several indicated turns that weren't actual turns.
    Driving down a section of road where I had well over a mile to the next turn, it kept indicating left turns. Sometimes those turns seemed to be nothing more than a bend in the road. Sometimes it indicated a left turn on a straight stretch of road where there was nothing beyond a driveway on the left. If I didn't know where I was going and didn't have the map up, that would have been confusing as HELL. Problem is, not knowing where I'm going and not having a map up is exactly the targeted use case for this device.

    I should note that these were indicated left turns - not the slight turns shown in the video. I did see one slight right on my route, which was accurate.

Conclusion - so far

I still think the Hammerhead is a great idea and a slick design. It shows real promise. However, I can't help but wonder what the hell they did with 20 months of development time. I can't imagine they offered these to too many folks for beta testing... or is that us, the initial backers? I can't imagine how they managed to go 20 months of development without writing any type of useful doc, or taking more than a single crappy cell phone camera when a simple lightbox setup with a good SLR would have been so much more effective. It's just been a really frustrating first experience with the device.

Given some time, I think that it still shows huge promise, and I'm not giving up on it yet, but I certainly don't think it's ready for the big time, and I sure won't be using it alone to figure out how to get somewhere. It needs a bunch of work before I'll be ready to trust it that far.

Wednesday, June 3, 2015

VirtualBox autostart on boot

I run a number of VMs inside VirtualBox on a server - while I've got VMware, I'm more familiar with VirtualBox from working with it for Windows VMs on my mac, as well as development using Vagrant and so forth... so I use VirtualBox for some small test systems. Also, I'm told VMware has specific hardware requirements, and although I've got a stack of enterprise-level servers, they're noisy and generate a surprising amount of heat. In order to avoid having to set up the air conditioning in my computer room, I run my VMs on a decent desktop-class system which is quiet and generates much less heat. Decent trade-off.

After rebooting I discovered my VMs weren't running, so I took a look online to figure out how to do this, and many places pointed to the same blog post:

http://lifeofageekadmin.com/how-to-set-your-virtualbox-vm-to-automatically-startup/

While the procedure worked, it wasn't perfect, so I'm posting my modified version of the procedure here, mostly for my own reference. (run these commands as the user who owns the VBox VMs which will be autostarted.)
  1. Create the file /etc/default/virtualbox with the following contents:

    sudo bash -c 'cat << EOF > /etc/default/virtualbox
    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
    EOF'

    *NOTE:
    Don't use vbox.cfg as found in the above link. Apparently some VirtualBox scripts look for that file for other purposes.

  2. Make sure your user is a member of the vboxusers group:

    if ! groups | grep -w nobody; then sudo usermod -aG nobody $LOGNAME; echo Log out; fi


    If you see "Log out" as the output of the above command, log out and back in so your group membership is updated. If you're okay, you should see the output of the groups command.

  3. Create the /etc/vbox directory and the autostart.cfg file:

    sudo mkdir -p -m 1775 /etc/vbox
    sudo chgrp vboxusers /etc/vbox
    sudo bash -c "cat << EOF > /etc/vbox/autostart.cfg
    # Default policy is to deny starting a VM, the other option is "allow".
    default_policy = deny
    # Create an entry for each user allowed to run autostart
    $LOGNAME = {
      allow = true
    }
    EOF"


    You set the sticky bit (the "1" in the "1775" to keep users in the vboxusers group from deleting the files aside from their own. This is how the /tmp directory works - 1777 and users can only delete their own files.

  4. Set the autostart property via VBoxManage

    vboxmanage setproperty autostartdbpath /etc/vbox


  5. Modify the appropriate VM with autostart enabled:

    vboxmanage modifyvm Graphite --autostart-enabled=on


  6. Restart the vboxautostart-service"

    systemctl restart vboxautostart-service

  7. Restart your system and confirm that the VMs have started:

    vboxmanage list runningvms