Developing apps for the Garmin ConnectIQ SDK

Early on this triathlon season, I bought a Suunto Ambit 2s. I loved the idea of having accurate workout data for my training, plus more accurate time/distance data for my races, and the Suunto has delivered. But it’s missing a few things: its support for interval workouts is poor, and the Movescount website is less reliable than I’d like. Luckily Suunto added export to Strava, but you still have to use their computer-based app to transfer workouts from the watch to the computer to the Movescount site, so when the site’s down you can’t see your workout data. (There are also various website bugs, including one in computing swim distance that means that the results on the website don’t match the results on the watch, but I digress). Having said all that, I was planning on sticking with the Suunto because I like the industrial design; it’s comfortable to wear, looks good, and has all the basic functionality I need.

Then I read this: Garmin announces ability to develop apps on wearables, with Connect IQ.

Coupled with my native lust for all shiny gadget things, the availability of the SDK opened a whole range of possibilities, not only for apps I could get for the watch but for apps I could write. I immediately started pondering what kinds of useful apps I could build and came up with one that I thought would be very useful: a flight timer. There are at least two different flight times that I need to log for every flight: how long the propeller was turning (because that drives how much money I put into our engine reserve fund) and how long I was actually in the air (which is what I actually log as flight time).

The GPS in 706 can automatically calculate flight time from takeoff to touchdown… provided you remember to look at it after landing and before turning off the avionics master switch. We also have a Hobbs meter that measures the time when the propeller’s actually turning. However, an app that automatically records time in flight, along with the origin and destination airports, would be useful. CloudAhoy does something similar, based on ForeFlight track data (and for all I know, ForeFlight can do this already). However, a timer that’s not tied to the aircraft would have the advantage of not losing its data when you turn off the airplane, and not being tied to a phone, external GPS, or iPad greatly reduces the risk of losing data due to battery or device failures.

So, I ordered a Garmin 920XT and downloaded the Garmin SDK. On first inspection, it looks like the SDK and development model are both pretty tractable for what I want to do. I’ll be blogging about my development efforts as they progress. For now, if I can get basic logging to work in the device simulator, I’ll be happy. There are a few features I’d like to have in the app to make it useful: it should automatically log flight time from takeoff to touchdown, geocode the origin and destination points so that the log file reflects airports and not just GPS points, and provide a timer function for things such as switching fuel tanks in flight. If I can extend that to include automatically logging flights into Safelog, that’d be even better but that might be some time away.

The 920XT itself will be a nice upgrade from the Suunto, which I am going to loan to my pal Jay for use in his training, but it won’t ship until sometime in November, so I’ll be running on the simulator for a while yet (and using the Suunto to log workouts, too!)

The SDK includes a comprehensive set of API docs, the device simulator, an Eclipse plugin that runs the command-line compiler, and assorted sample apps. I’ll have ore to say about it once I get my environment set up and running and start playing with the samples. Garmin’s clearly thinking about this the right way, though; in addition to their own developer forum, they are actively encouraging the use of StackOverflow.

Stay tuned for updates!

2 Comments

Filed under Aviation, Fitness

Disney and Universal 2014 wrapup

A few more-or-less random thoughts about our recent trip to Disney World and Universal Studios Florida:

  • Universal is a see-it-once park, I think. We enjoyed it but there was nothing so compelling that I think we’d want to go back again in five years. On the other hand, all four of us had specific things at Disney that we looked forward to doing (among them: turkey legs, the Winnie the Pooh ride, Tower of Terror, and Space Mountain).
  • Having said that, the Harry Potter attractions are superbly done: decoration, character acting, costuming, and all the little touches come together to provide a very immersive experience. Just don’t expect to be able to drink a whole mug of butterbeer. (And don’t be surprised if the Forbidden Adventure ride leaves you nauseated for a couple of hours afterwards.) Getting early access by virtue of staying in a Universal property was well worth it.
  • We didn’t buy, nor did we miss, the front-of-the-line ride access benefit that Universal sells for $60+ per person, per day.
  • Disney’s MagicBands system works extremely well and made paying for things much easier– which, I suppose, is the point.
  • The FastPass+ system takes a little getting used to because you can get multiple passes at once, but there are limits on which rides you can stack passes for. Read up on it before you go.
  • We stayed at two “value” hotels: Universal’s Cabana Bay and Disney’s All-Star Music Resort. Both had nicely equipped, clean “family suite” rooms. Both claimed to sleep six: Universal provided two double beds and a twin pull-out sofa, while Disney provided a queen, a twin sofabed, and two single fold-out sleep chairs: not ideal for six-foot teenagers, but workable.
  • Disney’s on-property wifi was great at the parks, as was Universal’s. However, the Disney in-room wifi was unusuable– worse even than the worst of the Microsoft conference hotels I’ve had to use in the past.
  • EPCOT’s International Food and Wine Festival was going on, so we got some primo foods when we ate dinner there. I’d like to do the festival again, but with more time to savor the food.
  • Tom, Matt, and I all ran into friends at the parks. It’s a small world indeed.
  • We didn’t rent a car, so we used Uber for the move from the Kissimmee airport to Universal, then a cab from Universal to Disney, then Uber again. Orlando’s taxis are about a million percent cleaner than in most other cities, but Uber was cheaper and faster.

Overall, a successful trip (good flight, too!) but boy, am I glad to be home!

 

1 Comment

Filed under Aviation, General Stuff, Travel

SharePoint task list shows “read only” when opened in Project 2013

SharePoint Online has a nifty set of features for managing project tasks, but I don’t like its web interface. I prefer Microsoft Project (which makes me a bit of a heretic, but there you have it). SharePoint has a button that will take the current task list and give it to you as an .mpp file, then open it in Project so you can edit it. Sadly, this button only works in IE for Windows; it doesn’t work on my machine when I use Chrome, and of course since there’s no Project version for Mac OS X, it doesn’t work there either.

Anyway, I’ve been using this button a lot, but the other day it just quit working. I’d click the button, the .mpp would open, but Project would see it as read-only, so I couldn’t save edits back to the SharePoint site. I did some digging and found that other users had reported success opening the .mpp directly from the “recently used” file list, but that didn’t work for me. So I posted this thread. Meanwhile, as I waited for an answer, I tried a variety of things, none of which worked. Then, in a completely unrelated set of operations, I signed out of Office 365, changed my account password, and signed back in… and then it worked. Perhaps this fix will prove useful for future generations.

2 Comments

Filed under Office 365

A few quick notes on Office 365 Groups

Today the Office 365 team announced the rollout of the first phase of the Groups feature. I hadn’t been playing close attention to the roadmap for this particular feature, so I decided to play around with it and report my findings. Rather than the kind of carefully reasoned analysis you might expect from Tony or Van Hybrid, this is sort of a stream-of-consciousness record of my initial exploration. However, it probably reflects how most customers will discover and use the feature. Remember that this is written within a few hours after the feature launched, so things that I call out as not working or missing may not be lit up in my tenant yet.

  • First, I looked around to figure out how to create a new group. The screenshot in the online help shows Groups appearing in the left-side folder nav bar. I didn’t see that in my tenant. When I switched to the People view, I noticed that the People search selector had a “Groups” item available, but since there were no groups that wasn’t super helpful. Clicking the “New” icon at the upper right of the People view gave me a modal pop-up asking me whether I wanted to create a new group or person. The interface for creating new groups is straightforward: give your group a name, add some people to it, and off you go. Here’s what it looks like:
Creating a new group is straightforward.

Creating a new group is straightforward.

Note that there’s no way to specify an email address for the group object. You can send mail to it from within OWA, or by clicking the envelope icon in the group information sheet, but there’s no visible external SMTP address to, send to. This seems like an oversight.

  • The group documentation says that newly created groups get their own OneDrive for Business folder and group mailbox, but I haven’t yet seen any signs of those objects in my tenant. However, the docs also say that group members will get a “welcome to your new group” email once those objects have been created, and because that hasn’t shown up yet, I’m guessing that there’s just a short provisioning delay.
  • I created a new group named “Managing Consultants”. I picked that name on purpose, because I already had a mail-enabled security group with the same name. The Groups interface happily let me create a duplicate. The existing USG doesn’t show up in the Groups interface in OWA, nor does the new Group show up in Outlook’s online GAL (which may just be an artifact of AD latency). The help topic for creating and navigating groups shows a number of settings that aren’t visible in my tenant. For example, you can supposedly change the URL used to access the group or set the group to either private or public– those options aren’t available to me yet.
  • I clicked on the mail icon to create a message and sent it off; it arrived immediately in the target mailboxes. Interestingly, though, the group name doesn’t show up in Outlook; instead, the individual group members’ names appear.
  • Even after creating two groups and sending a message to one of them, neither group appeared in the OWA left navigation bar. Surprisingly, they didn’t appear in the OneDrive nav bar either:
Where'd my groups go?

Where’d my groups go?

  • Bizarrely, clicking the “Browse groups” item opens a new OWA window, which opens in mail view, not the People view. The new OWA window’s left nav bar has a People section, but it’s empty– even though the original OWA window I kept open still correctly shows unread mail from people in my Inbox.
  • When I create a Group, it doesn’t appear as an available group in Yammer. I presume this is by design.
  • I didn’t test Group conversations because there are no visible Group objects in OWA where the docs say they should be.

From the bumpy state of feature display and behavior at this point, I infer that there’s a multi-step provisioning task that runs when a new Group is created, and that at least the ODB step hasn’t run yet. This might confuse users who wonder why they can use a group for one purpose (sending mail) but not another (ODB). I’ll wait a day or so for the provisioning and loop back to see which of these items are bugs and which are just caused by setup delays.

6 Comments

Filed under Office 365, UC&C

Training Tuesday: a new bike and my first long bike ride

Wow, lots has happened since my last Training Tuesday entry. Maybe I should call it “Triathlon Tuesday,” since not every post is about training? But then again, not every post is about triathlon, either, as you’ll soon see.

I’d been wanting a new bike for some time. My previous ride, a Specialized Crosstrail Sport Disc, is a big, heavy beast of a bike. Its gearing is designed for trails; it has 3 chainrings (more on which later) with 9 gears in each. In addition, the frame geometry is such that you sit up straight and tall, which is fine for riding to work (the reason why I bought it) but not so great for riding fast in races or training. After my debacle at Rocketman, and my successful experience at Nation’s Tri with a rented Cannondale road bike, I knew I wanted to try to find a road bike before my last two races: Racin’ the Station and Rocketman Florida.

To save you lots of tedium, I’ll cut my description of the shopping process short. Suffice to say I did a ton of research, hit all the local bike shops, test rode a bunch of bikes, and spent an unhealthy amount of time looking at bikes on SearchTempest and eBay. The keys to finding the perfect bike are that you should pick a bike:

  • that fits you. This is a bit of a problem since I am tall. Bike geometry is complicated, so I quit trying to predict what would fit me in favor of riding bikes to see. how they felt
  • that’s in your price range. You can spend many thousands of dollars on super-fast racing bikes with all kinds of fancy crap, but that wouldn’t do me much good. To get faster, I need more time riding, not an uber-bike. All I wanted was a basic entry-level road bike, so I set a budget limit of $1000.
  • that you like. This was tricky. I saw lots of bikes that I liked that weren’t in my price range, and some that I liked and were in my price range didn’t fit me (including a really sweet all-carbon Douglas).

I pretty much struck out at the local bike shops. The model year for bikes changes over in August or September, so there were very few 2014 bikes in my size left, and most manufacturers hadn’t shipped many 2015 bikes in my size and price range. So I narrowed things down to a couple of 2014 models at two local shops– a Trek Madone 2.1 and a Cannondale CADD9–  and was planning on going to pick one out when I got back from Exchange Connections. In the meantime, though, a mechanic who works for one of the local shops told me about a sweet-sounding bike he had: a 2013 Giant Defy 1. It was in my price range, and I liked the idea of getting a slightly used bike for less than retail. We met Wednesday, I test-rode the bike for a few laps around the parking lot, and made the deal. Thus this picture from Wednesday night:

What a sexy beast! And the bike is nice too.

What a sexy beast! And the bike is nice too.

I didn’t get a chance to ride Thursday, but Friday afternoon after work I put on my SPD pedals and speed/cadence sensors and got in about a 2-mile ride. After a few tweaks to the seat position, I packed up the bike and went to bed. Saturday morning, I got up bright and early to meet Wendy (one of my Tri101 coaches), her husband, Teresa (another 101 alum), and her husband to convoy over to the All You Can Eat ride sponsored by the Spring City Cycling Club. I hadn’t really planned on riding this ride, but after I told Wendy that I bought the bike, she encouraged me to give it a shot. I decided to go for it. I only signed up the 34-mile loop, but I figured that would be plenty. The 50-, 67-, and 103-mile groups rolled out at 8am, and I joined them so I could ride with Wendy and Mike. The weather was absolutely perfect: mid-70s, with a nice breeze and plenty of sunshine. The first 6 miles or so were pretty slow, as we were riding in a big mob. However, about mile 7, there was a long downhill (with a sharp left at the bottom, yikes), and that spread the group out a good bit. I hit about 30mph downhill and could easily have gone faster if I weren’t so chicken!

Doesn't look like much from here…

Doesn’t look like much from here…

This ride was much different from what I’m used to. In triathlons, you’re not allowed to bunch up or draft, and everyone rides hell-for-leather. In this kind of ride, you can ride abreast, clump up, ride right of the centerline, and pretty much do what you want as long as you’re not unsafe. It was great to be able to ride along chatting with people, the more so because I actually knew some of the people I was talking to!

Another big difference: in this kind of ride, there are rest stops WITH FOOD. That’s right: we rode about 15 miles, stopped for a snack, rode another 8 miles, snacked again, and then rode about 9 miles to the finish. At the first stop, I had half a PB&J, a banana, a big cup of Gatorade, four or five Fig Newtons, and a brownie. Longer distances thus mean more snacks, giving you a built-in incentive to push your distance. As it was, 34 miles is about double my previous long ride distance, so that was enough pushing for me.

After rest stop 2, the ride went fine until we turned onto Salty Bottom Road (great name, huh?) The turn put us into the teeth of a stiff headwind, which slowed me down, and then I had to stop and walk up about half the hill around mile 32– I was just gassed at that point. I definitely felt the difference in chainrings on this hill; on the Crosstrail I would have just dropped to the lowest ring and blasted up the hill (well, OK, “blasted” probably isn’t the right verb). Having only 2 rings is going to take some getting used to.

The scenery was incredible: a hundred shades of green in the grass and fields, a squadron of planes overhead flying into Moontown for the EAA 190 pancake breakfast, and mountains, or at least what passes for mountains here, in the background. The course was very well marked and the support volunteers did a wonderful job of feeding us, providing a sag wagon, and handling all the pesky logistics.

This graph nicely summarizes the overall ride for me. The white line is elevation; the orange line is speed. The gaps indicate rest stops. You can clearly see the big downhill around mile 7 (look for the steep white cliff), plus a few later hills. My average speed was 14.3mph, which was pulled down by the long stretch of chat-riding  at the start. I was routinely hitting 20+ mph on the flats, something that would have been improbable, if not impossible, on the Crosstrail, so I’m really pleased with the results.

Tale of the tape

Tale of the tape

Now I need to log some more miles before Rocketman Orlando, which features a 32-mile bike course. On Sunday, I rode the Racin’ the Station course with a group, just to get a feel for it; I wasn’t pushing hard at all and averaged around 14.5mph. I need to get a few more rides in this week (along with RtS this Saturday). I’ll definitely be on the lookout for other sub-metric-century rides– I may have accidentally caught the club-ride bug!

Leave a comment

Filed under Fitness

My first real IFR trip: Decatur-Manassas and back

My trip to DC to compete in the Nation’s Triathlon was my first “real” IFR flight. I say “real” because it combined flight in actual instrument conditions with busy airspace and a long cross-country—conditions I expect to encounter often as I fly around.

Earlier in the summer, I had signed up for the tri.The timing was such that I would come home from GATTS, have a couple of days to pack, and then fly up to DC, hopefully with my instrument rating. That turns out to be what happened.

Flight planning was straightforward. The DC metro area has a number of general aviation airports scattered around, but it also has significant restrictions on its airspace. Without going into all of the gory details, it’s enough to point out that the airports that are closest to central DC are heavily restricted. In order to fly to the so-called “Maryland 3”, you have to go to either Dulles or BWI, get fingerprinted, have security interviews with the FAA and TSA, and then get a PIN that you use when filing flight plans. I didn’t have time to do that, so I settled on Manassas, which is further out but would provide a reverse commute into and out of the city—it also helped that the route from Manassas to the hotel passed right by the bike shop where I’d made arrangements to rent a road bike.

I planned an early departure Saturday morning. Because I’d been out of the office for most of the week, I couldn’t leave earlier than about 5pm, and I didn’t want to fly night IFR in unfamiliar, complex airspace after a full, and tiring, day at work—that’s how accidents happen. My original plan was to fly from Decatur to KGEV, fuel up with avgas and diet Coke, and then continue on to Manassas. The weather at Decatur at departure time was OK, with an overcast layer about 2000’, and Huntsville Approach quickly cleared me to my target altitude. The first hour or so of the flight was smooth on top, then things got a bit bouncy because there were clouds at my filed altitude—with some light rain and a fair bit of chop. Once past that, though, things were looking good until I looked at the weather at my destination airport and alternate . Both were below minimums, so instead I flew a bit further east and landed at Winston-Salem, which was nicely VFR. It turns out that the airport there has self-service or full-service fuel, with a whopping $1.69/gal price difference—but getting to the self-service pump from the FBO is an adventure that involves runway crossings and, in my case, aggravating the pilot of a Malibu who had to hold short while I taxied. Such is life.

The flight into Manassas was perfectly uneventful, just the way I like. I had filed direct from Winston-Salem to Manassas, but I didn’t expect to get that routing, and sure enough, I didn’t; Potomac Approach sent me direct to the Casanova VOR, then direct Manassas. It was fun watching the Foreflight traffic display en route, since I could see a ton of traffic into Reagan.

Watch out for the big iron!

Watch out for the big iron!

Going to CSN first wasn’t much of a diversion, so it was no big deal. Manassas was VFR, but storms were expected later, so after I landed, the fine folks at Dulles Aviation hangared the plane. (I also want to point out that they provided stellar service: the rental car was ready when I got there, saving me a commute to the nearest Avis office some 12 miles away, and they treated me like I had just flown in on a Gulfstream.)

The return trip looked simple enough too. I filed direct Manassas to Greenbriar, WV. The race was on Sunday, and I needed to be at work Monday morning, so I had to leave late in the afternoon, meaning that several of the airports I would normally have considered as fuel stops were either closed, or would be. Greenbriar was reporting 900’ overcast, which was fine with me, so I filed, preflighted, and started up, then called Manassas Ground to get my clearance.

Here’s what I was naively expecting: “N32706, Manassas Ground, cleared as filed to LWB, climb and maintain 9000’, departure frequency…”

Here’s what I got instead: “N32706, Manassas Ground, cleared to LWB via the ARSENAL FOUR departure, thence the Montebello transition, then direct NATTS, then direct LWB; departure frequency…” Thus we see how ATC deals with the expectations of a novice IFR pilot. This set off a frantic burst of knob-twiddling as I tried to set up the KLN94 for that departure (which it didn’t have, since its onboard database was too old). I eventually got it set up, was cleared for takeoff, and then got a series of ridiculous vectors from Potomac Approach that sent me well north of where I wanted to be. However, the flight to Greenbriar was nice and smooth between layers, and, as advertised, the weather on arrival necessitated shooting the ILS, which I did smoothly. After taking on fuel, it was off to Decatur; the rest of the flight was unremarkably smooth except for a great sunset and some tasty snacks (yay vanilla wafers!) I considered it a very successful trip!

A great sunset to cap off a great trip

A great sunset to cap off a great trip. Not shown: vanilla wafers.

Leave a comment

Filed under Aviation

GATTS days 8 & 9: judgment day(s)

The title of this post gives it away: I didn’t pass my check ride on the first try. Read on to find out why…

On day 8, I woke up early, loaded the car, and drove to the airport to meet Peter. We’d arranged with Ken to meet early because the weather from Manhattan to Topeka (and the surrounding area) was poor: 1200’ or less ceilings, with lots of wind and a good bit of rain. Peter and I agreed to head east and see what the weather looked like when we got there. Short answer: it was terrible. The entire flight was in clouds, with plenty of bumps, then on arrival, ATC gave us about 20 minutes of holding on the localizer, which was, um, invigorating, not to mention bouncy. We finally landed and this is what we saw:

Paul robichaux net 20140903 001

Ken was there waiting for us, so we went inside and went through the standard check ride prep; he and I both signed into IACRA to complete my check ride paperwork, he briefed me on the Pilot’s Bill of Rights, and so on. Then we spent about an hour on the oral exam, which was perfectly straightforward. I wasn’t surprised by any of his questions, largely thanks to the combination of Peter’s coaching and my own study. The weather wasn’t good enough for us to conduct the practice approaches on the check ride under VFR conditions, so we adjourned to the airport restaurant for a snack (which was interrupted by a business phone call for me, alas). After about an hour and a half, the weather had lifted enough for us to fly. We took off, and Ken had me intercept V4 to give us some distance from the airport. We flew west a bit, then he had me recover from unusual attitudes, which went well… except.

See, I was having a hell of a time keeping to my assigned altitude. I’d like to blame it on the wind, but it wasn’t just that; my scan was deteriorating faster than ever before. I’m still not sure if I was nervous, rattled from the weather, or what, but after a few gentle reminders from Ken (example: “Do you know what the PTS requirements for holding altitude are?”, just in case my poor performance was due to ignorance vice lack of skill), he had me head in to the ILS for runway 13. I flew fairly well despite the wind gusts, intercepting and tracking the localizer without a problem.. but, again, my altitude control was poor, and I let the glideslope needle hit full deflection down. I was too high, and that was that: he had me land, gave me the dreaded letter of discontinuance, and held a short debrief with Peter and me. Then I flew us home, in a funk the whole way; we did some remedial training en route, which I obviously needed but didn’t want. After landing I went back to the apartment, sulked for a while, worked a bit, and then mentally steeled myself to repeat the process the next day… and that’s exactly what happened. The next morning, we went back to the airport, flew to Topeka, met Ken, did the same IACRA stuff, and went out to the airplane.

When you retake a failed (or interrupted) checkride, the examiner doesn’t have to retest you on the portions you passed, although she can. In my case, Ken just wanted me to fly the approaches and holds, which I did, starting with the ILS for 13. It was still breezy, but nowhere near as windy as the preceding day, and/or maybe I was less nervous. In any event, I flew a textbook ILS approach, did a decent job on the hold (despite a stiff and inconvenient crosswind), and followed with the VOR and localizer back course approaches. I landed, taxied in, and Ken shook my hand to congratulate me. Here’s what the airport looked like when we taxied up:

Paul robichaux net 20140901 003After another debrief, in which the often-heard and completely true phrase “license to learn” was tossed around several times, we bade Ken goodbye and headed back to the ramp. After a short and uneventful flight back to Manhattan, I shook hands with Peter for the last time, got a fresh diet Coke, and headed home. The flight home was smooth and clear, so I didn’t actually get to perform any approaches, more’s the pity. After such a long time away, I was delighted to get home, sleep in my own bed, play with the cat, and generally settle in a bit.

Once a little more time has passed, I’ll write up my overall impressions of GATTS. It is safe to say that I’m pleased with what I learned and their teaching methods, but I feel like I need a bit more experience before I form a complete opinion. Meanwhile, I’ll be flying!

Leave a comment

Filed under Aviation