Tracks2Miles and Tracks2TitanXT removed from Play Store

I have removed both of the apps in the title from the play store.

This is for a number reasons:

  1. MyTracks removed the API required to get at the recorded tracks meta data which vastly reduced the capability of the app.
  2. DailyMile shut down, which rendered Tracks2Miles useless.
  3. Google flagged both apps as potentially having SQL injection attacks (while theoretically possible I couldn’t find a directly exploitable use case).
  4. Even before the shutdown I had completely moved all my activity tracking to dedicated Garmin devices and Strava.

Dirty Kanza 100 2019

I’ve just got back from a pretty great trip.

As I mentioned in a previous post, this year I was going to take part in one of the premier gravel riding events, the Dirty Kanza.

The Trip

I flew out to Denver and spent the first 4 days in Boulder. This was for a few reasons. Firstly it’s somewhere I’ve been wanting to visit for a while as it was one of the options I listed for my year at uni in the US (I suspect that the powers that be knew I’d have spent the whole year snowboarding which is why I ended up in North Carolina…) and I was sure there would be some good riding to shake the flight out of my legs. It’s also at altitude (about a mile above sea level) which I was hoping would help as a final little push (I know you have to spend more than a week at altitude before it actually starts to have a positive effect).

While in town I went on 2 rides led out of the Full Cycle bike shop. The first was a road ride on Saturday morning at 09:00 which covered about 70km in 2 and a bit hours.

It was a nice pace to shake the flight out of my legs and to make sure I’d put the bike back together properly after the flight. The ride was pretty flat and I didn’t have any trouble keeping up with the pace.

The second ride was billed as a gravel ride but had aspects that were closer to a mountain bike single track ride. And this time I really started to feel the altitude as there was a bunch more climbing some of it pretty steep.

Both rides left from the Pearl Street store with at least 2 ride leaders. If you are in town and want somebody to show you some good riding I suggest you head along and see these folk.

I stuck in a repeat of Saturday’s ride on my own on the Monday just to keep the legs turning over as I didn’t fancy doing any major climbing. I also tried to stick a short run in but the the altitude really kicked in and I managed about 4k before deciding that enough was enough while gasping for air.

On Wednesday I set off on the monumental drive across most of Kansas. I had booked a place to stop in a small town called Hays to break up the nearly 600mile drive.

The drive was an experience, I’ve driven round different parts of the US in the past, but either on the East coast or round the US National Parks in the South West, but this was just hour after hour of nearly totally straight flat road. I can totally see the appeal of a self driving (totally, definitely not the current systems that require human oversight) vehicle for this kind of driving.

While stretching my legs when I arrived I happened to catch a train crossing Main Street.

Then on Thursday I finished off the run in to Emporia. While the first 360 miles had been nearly totally flat the ground did finally start to become a little bit more rolling.

The Event

The Dirty Kanza is based out the town of Emporia in East Kansas.

The DK takes over pretty much all of Commercial Street, with pretty much all of the shops getting involved. There is a area between Commercial Street and Mechanics Street where all the sponsors get to set up their stands and you can look at all the new bikes and tech.

On the Friday before the actual event there is a short social ride, I rolled round with everybody before heading off to recy the first 10 miles of the course.

The full 200 mile event starts at 6am (with the dawn) and the 100 mile event starts 30 minutes later so I got to see the folk doing the longer distance set off.

Once they had cleared the starting area, we got to line up to set off.

The ride was a tale of 2 parts, the first 90km to the feed station went really well, cruising along at a steady 23kph and doing just over half the climbing in just under 4 hours. I’d made a decent dent into the 2 750ml drink bottles I had with me. I refilled them both and had a snack to keep the energy up, I spent about 15mins at the rest station. The temperature for the first leg had topped out at about 25 °C.

The second leg was a lot harder covering just short of 80km, the temperature topped out at 35 °C and averaged 32 °C and this meant I burnt through a lot more water. Luckily there were a couple of places along the way where I could top up my bottles again. It also kicked off with one of the bigger climbs of the whole route. There had been a 40% chance of rain (with the possibility of thunder) in the forecast for the afternoon that I had been keeping an eye on all of the week running up to the event, hoping it wouldn’t happen. By the time the temperature passed 30 °C I had changed my mind and scanning the sky for clouds.

I got within 10km of the finish when I had my first and only mechanical issue. My rear tire had nearly fully deflated, but the tubeless sealant had managed to plug the leak so all I needed to do was use a CO2 canister to top it up.

Crossing the DK finish line

The finish line was back down Commercial Street which had been converted into a street party while we had been out on the trail. Lots of people cheering which really helped get over the line.

I would definitely do the DK again, may be even give the full 200mile version a try next time, but that would need a bigger training plan and probably finding a way to spend a good few weeks at altitude in the run up. I would also make use of the third bottle cage mounts on the bike

This year’s challenge

Towards the end of last year I was looking for something a bit different to do in 2019. I’m still going to be doing a bunch of triathlons but I also wanted to have a go at some more endurance events.

I’ve already done a marathon (London in 2016) and I having had my IT band tighten up as I crossed the half way point on Tower Bridge I’m not that interested in doing another just yet. This rules out an Ironman distance triathlon as the concept of a marathon after everything else really doesn’t appeal. So I went looking for something else, possibly something on the bike.

Gravel riding has been growing in popularity for the last few years and the number of different specialist bikes available continues to increase. So that sounded like a good place to go looking. Also it was a cracking excuse to buy a new bike (n+1).

I was also looking to make it part of a proper holiday this year, like the trips to the US National Parks I’ve done in the past.

The Event

I’d seen a video‘s of people doing the Dirty Kanza and it is held up as one of the first and great gravel events. The event is based around the main 200mile event but they also run 350mile, 100mile and 50mile events.

Given off road riding was going to be new to me and furthest I’ve ridden so far in one go is about 140km I decided that 200miles (300+km) for the first time was probably pushing things a little too far, so I put an entry in the ballot for the 100mile event. Just after Christmas I was notified that I had a place, and the mad dash to get somewhere to stop for the weekend of the event started

The Bike

2017 Genesis Datum
2017 Genesis Datum

The LBS had an ex-demo Genesis Datum 20 going for a absolute steal of a price.

The Datum 20 is a carbon frame gravel bike with 700c wheels, hydraulic disk brakes and Shimano 105 group set. The 50-34 up front and 11-32 cassette should get me round most thing. I wanted to stick with mechanical gearing as DI2 would be just something else that could potentially go wrong out on the course and I’m not totally sold on the whole one-by concept just yet.

The first upgrade was set of Hunt wheels, I got a set of the Four Season Gravel rims and got the local wheel builder to assemble them with a PowerTap G3 rear hub. This was for 2 reasons, the first was because the standard wheels weren’t tubeless capable and secondly because I wanted a power meter to help train and to measure my effort for pacing during the event.

I had to get a shim for the rear brake caliper as the standard wheel came with a 140mm rear disc and the G3 hub only takes a 160mm. I also shod the new rims with 38mm Panaracer Gravel King SK tyres. The 38mm only just have enough clearance at the rear so I’ll be swapping them for some 35mm before I head to the US just in case the course is wet and ends up muddy.

Training

I’ve done pretty much all my riding on the road, so I knew I’d have to get used to riding on softer ground, both gravel and mud. But to get things kicked off I booked a week riding in the hills in Spain in February. I went with a company called Andalucian Cycling Experience. I’d been away with them before so knew what to expect, and had a great week covering over 420km and climbing nearly 9000m.

When I got back I started out with the local tow path on the Gloucester and Sharpness Canal and a few of the local bridle ways get used to the back end of the bike sliding around a bit.

The next step was out to the Forest of Dean to the Cannop Cycle Centre. Here they have a gravel track called the Family Trail which is just short of 15km.

Doing big sets of 2 laps in one direction followed by 2 laps in the other to stop it getting too repetitive made up good base. Getting out to the start early on a Saturday morning and getting 6 laps before breaking for some lunch and the trail started to get busier with families. It’s also helping with planning out me nutrition and hydration for the event (though it’s possibly going to be a lot hotter in Kansas)

I’ve also been sticking in some local events. The Cotswolds Cross Enduro Sportive was an absolute killer, with sections of riding down a running stream and other parts that were only really possible on a full suspension mountain bike

In between the big sets at the weekends I’ve been making sure I get in at least 2 or 3 sessions on the trainer on Zwift mixing it up between doing their planned workouts and racing (on a good day I can get in the top 3 of a short cat. C event).

Now the clocks have gone forward and it’s lighter in the evenings I’ll be trying to get out climbing the local hills before dinner.

The event is at the start of June so I better get back on the bike.

New Zwift Machine

I’ve been off my bike for the last month recovering from an ankle injury. During that time Zwift have released a pretty serious update containing the new New York area.

zwift-new-york

This update includes some futuristic courses set round Central Park. These include transparent roads and flying cars.

Acer Revo

Unfortunately all these new fancy features proved too much for my old Acer Revo that I was using to run Zwift. The Acer Revo was released back in 2009 so the fact that it’s 1.6Ghz Intel Dual Core Atom and Nvidia Ion video chip set sharing 4gb of RAM had lasted this long was pretty impressive.

So it was time to look for a new machine to use for winter training. Small footprint media server type machines have come a long way in the last 9 years and the “standard” seems to be the Intel NUC range of machines.

NUC’s come in 2 main form factors, both are about 4″ square but the difference is the hight of the unit. The low hight version only support M2 SSD storage where as the higher units support both M2 and 2.5″ SATA drives. I opted for a NUC7i5BNH with 8gb of RAM and a 240gb SATA SSD. This should meet the current Zwift recommended spec.

Assembling the machine was remarkably simple, just 4 screws in the base allow full access, lifting out the drive tray reveals the 2 memory sockets. Once the memory is fitted just slide the drive into the tray and secure with the supplied screws before reseating the tray and base, fastening the 4 access screws again.

I initially intended to install Windows 7 as I had a ISO image and a license already, the only problem is the NUC only has (externally) USB 3.0 ports and the Windows 7 install image only have USB 2.0 drivers, so while the NUC will boot either from a USB CD/DVD drive or USB key, it can’t access the keyboard/mouse to start the install or read the rest of the installer files from the drive. There are instructions about how to patch a USB key install image, but after lots of messing about trying I finally remembered that my Windows 7 image and license were for the 32bit version and Zwift needs 64bit Windows. In the end I bought a Windows 10 license key and downloaded a new USB install image.

The Windows 10 install was relatively painless, until it got to the part where it forced me to create a online Microsoft account just to log into the local machine and wanted me to opt into a load of tracking for advertising. I fully understand why people are more than happy to stick with Windows 7.

Anyway everything is now up running so on with the winter training plan.

Barcelona Triathlon 2017

Had a great day in Barcelona today at the Barcelona Triathlon.

The sea was calm, very little wind and sunny.

The sea was easily warm enough to swim without a suit, but I decided to wear mine anyway to help with buoyancy to keep the legs up. Off the beach start went well starting just behind the front to not get run over in the surf. I was well up the field by the first mark of the q shaped course, and by the end we were deep into the back of the previous wave. The watch measured 1625m in 27mins which is on a par with the times I’ve been doing in the pool recently.

T1 went smoothly and on to the ride. The course was pretty flat, not too technical and draft legal for the whole field. I managed to average 34+kph and spent most of the time hopping between groups. Ended up about 1:08

T2 again went smoothly and there was a surprisingly small number of racked bikes, then on to the run. This was a hard slog, along the beach before heading up towards the centre of the city. By this point it was starting to get properly warm pushing up towards 29degrees. The last 200m included a steep ramp up from the beach side path to the board walk area which I really could have done without, but managed to get round in less than 50mins.

Total time by my watch 2:30:01 (so close!). The official results say 2:30:03

The only down comment for the day was the arrangement of the starting sequence. Transition was only open from 6am-8am with the first start at 8:10am. This was a small wave of VIPs. Then 2 more waves at 10min intervals, followed by 20+min break before 3-4 more waves, another 20min break then the next batch of starts. So my start in wave 10 was at 9:50, nearly 2 hours after transition closed so a fair bit of waiting around. The rest of the organisation was great.

Update on Garmin Forerunner 935

It’s been a few weeks since I picked up my Garmin Forerunner 935. I must say I’m pretty impressed.

Step counting

I’ve been using it to record my day to day step count and all day heart rate data as well as all my training and the London Triathlon.

The battery life is great, I’m getting a good 2 weeks out of a charge even when using it to record activities with GPS and ANT+ sensor data. It seams to take about 2 hours to fully charge.

Having it sync with the phone is useful as it means I don’t need to keep a Windows box kicking around just (OK, I do still need one for Zwift but that is less regular) to run the Garmin Connect application to upload my workouts to the web and Strava. There is built in WiFi support as well which can allow it to sync without having the phone, I’ve not enabled this at the moment as even if I’m not always carrying my phone while training it is pretty much always going to be around when I get back.

Another change is that the ANT+ sensors now live in a collective pool rather than being bound to something like a bike profile so you don’t need to remember to pick the right profile if you have multiple bikes. The watch will just pick all the relevant sensors it can see as you select the activity type. The only downside I can see to this is if you lend somebody a bike and both go riding at the same time. To get round this you can force it to pick one if it can see multiple versions of the same sensor. But it does mean I don’t need 3 different profiles, one for the Propel, Defy and the Defy on the turbo trainer.

Rest indicator

The new training tracking feature is also helpful, giving indications of how much rest time you should take between activities and also a training load number. The training load number is supposed to unique to each user so not something you can compare with others, but should show if the system thinks you are over training (looks like I need to back off a little)

Training Load

The only extra I have purchased is a glass screen protector as I managed to get a very small scratch in the plastic face on the first day wearing it. I’ve no idea how it did it as I doing remember knocking or catching it against anything. The protector is very thin and fits nearly flush with the bezel and you can’t tell it’s there. Given I’m planning on wearing this as my day to day watch as well as for activity tracking this is a little disappointing, but this is probably why it’s cheaper than the equivalently spec’d Fenix 5.

London Triathlon 2017

As I mentioned in the last post, I did the London Triathlon at the weekend. I got round in a total time of 2:40:33 which is 3min quicker than WTS even in Leeds I did about a month ago. I’m slowly working my way back towards the sub 2:30:00 times I managed in 2015.

The weather forecast changed all week but always with rain at some point in the day, early on it looked like it might stay dry until at least the run, but this was dashed when I got properly soaked while riding from Leytonstone down to Excel before the start.

As usual The London Triathlon runs a number of different courses over the weekend, I was racing the “shortest” loop version of the Olympic distance which was made up a 2 lap swim, 4 lap bike and a 4 lap run.

The “long” loop version on Sunday morning is a 1 lap swim and a 1.5 lap bike (down to Parliament and back) and a 3 lap run which I’ve done a couple of times before.

Swim

There was a break in the rain just in time for the start of the swim

The 2 lap swim has it’s good and bad points over the 1 lap version

  • good: you can see the between all the turning buoys. For the 1 lap version you can’t see the first buoy from the start line.
  • bad: Waves set off in 2 halves with 2 mins between halves and 20mins between waves, which means that as you start your pretty much straight into the back of the mid pace swimmers from the wave before on their second lap. Also with the shorter legs the waves don’t spread out as much so the was a lot more bumping and jostling all the way round and especially at the run in to the exit.

Ride

By the time I was out of the water and on to the bike the rain had well and truly kicked back in. The course was a 10k loop between 2 roundabouts, but the turns were the short way round the which made them very tight, this combined with a little technical section just west of Excel made for some treacherous areas. The course was pretty much pan flat except the climb over the flyover just before the first turn. I averaged 30kph, over the 40km which is OK considering how wet it was.

Run

It stopped raining again for the run which is again nearly totally flat, apart from the climb up into the Excel each lap to pass the turn to the
finish straight. The indoor loop was a bit longer this year.

The new Garmin 935 worked really well, the triathlon mode is very similar to the 910XT with the lap button being used to move between disciplines. One feature that I think is new is the ability to set the auto button lock on a per activity basis, I used this to lock the buttons for the openwater swim. I did this because unlike the 910XT the the start/stop and lap button are on the right hand edge of the watch and as I wear my watch on my right wrist this put the buttons up against the edge of my wetsuit so I was a little worried they might get push by accident. This just meant I had to press and hold one of the buttons when I got out of the water to unlock things before pressing the lap button to signal entering T1.

Garmin Forerunner 935

My trusty Garmin Forerunner 910xt has finally been put out to pasture, 2 years ago the barometric altimeter failed and I got it replaced with a refurbed version and over the last 3 months the power button has been getting harder and harder to push. My best guess is that the micro switch has lifted off of the board so it needs to be push at just the right angle to get it to line up with the contacts and actually activate.

My Fitbit HR had also given up the ghost as well in the last few months so I went looking for a replacement that would cover for both. I looked at both the Garmin 735 and the 935. Both do step counting and have a optical HR sensor in the back. Reviews of the HR sensor on the 735 were not so great and it was missing a barometric altimeter so that didn’t help it’s case. Wiggle were also doing a week of extra discount (17%) at the time as well which helped to bring the price of the 935 down to something slightly more sensible than list price.

So as you can guess by the title of this post I opted for the 935. It arrived this morning so I don’t have a lot to say about it just yet, but the first impressions are:

Garmin forerunner 935
Garmin forerunner 935

  • It’s a lot smaller than the 910xt and even a bit smaller than the Suunto Vector that I have been wearing as a day to day watch
  • It’s also lighter than I expected, I’m used to wearing something with a bit of heft (My first serious sailing watch was a Citizen Yatchmaster which was stainless steel, when I took it off my arm used to float) to it so this it will take a day or two to get used to how light it is.

A lot of the features need a bit of time to learn my training pattern and my day to day activity profile so I’ll give it a week to bed in and write some more about it, I’m also doing the London Tri next weekend so that will be a good chance to give it a proper workout.

Both the 735 and the 935 both support the 2 new HRM belts from Garmin that support recording HR data while swimming (the HRM-Tri and HRM-Swim), while I already have a ant+ HRM belt I’m seriously tempted by both of these (mainly for the geekiness) so I may have to grab one or both soon.

Contributing to OpenStreetMap

I had a day off on Monday, there were a couple of things I needed to get done and I just needed another day out of the office.

On the Sunday evening while working out what to do with the rest of the day I happened to be looking at the OpenStreetMap site for the area round my flat. I noticed that the latest set of roads for the second phase of the development hadn’t been included yet.

As it was
As it was

I use data from the OpenStreetMap project on my Garmin Edge 810 cycle computer to provide both maps and routing information (it’s free vs paying Garmin for map packages) so I really appreciate all the work that has gone into this project so I decided to have a look at how to contribute these new roads.

I knew that people tended to upload GPS data in the form of GPX files that then got used to build the maps. The best tool I had to record the GPS data was my Garmin Edge 810 so I decided to have a quick ride round the new roads.

Strava’s preview has dropped a lot of points, but the actual track looked more like this.

As well as using the 810 I put my Garmin Virb Camera on to record a video of the ride. I mainly did this to catch the street name signs so I could name things properly.

Signing up on the OpenStreetMap site was trivial, just fill in a username and email address, then click on the link in the email that was sent to verify the address. Now I had the option to upload the GPX file. From there I followed the instructions here and use the Potlatch 2 editor to overlay my GPX trace on the existing map. I then traced on the extension of Tinning Way and George Raymond Road and added Annealing Way. I need to go back over the video to double check the names of the other new roads so I can add them as well.

OpenStreetMap tiles get regenerated from time to time so after an hour or two my updates became visible to everybody else.

After adding new roads
After adding new roads

I’ll have to regenerate the maps for my Garmin Edge 810 sometime to see if it now directs me via these new roads when I set off on my next ride.

Openstreetmap Video overlays

So as I mentioned in my last post I’ve been playing with generating map overlays for the cycling videos I’ve been making while out training. I’d run into a rate limiting problem when using Google Maps static map API.

To work round this I thought I’d see what I could do using Openstreetmap. Openstreetmap doesn’t have a static image API so I’m going to try and build something similar using LeafletJS and a way to grab images of the pages generated.

<html>
<head>
	<title>Maps</title>
	<link type="text/css" href="leaflet.css" rel="stylesheet"/>
	<script type="application/javascript" src="leaflet.js"></script>
	<style >
	#map { 
		height: 250px; 
		width: 250px;
	}
	</style>
</head>
<body>
	<div id="map"/>
	<script type="application/javascript">
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

var args = getUrlVars();

var line = args["line"].split("|");

var last = line[(line.length - 1)];

var centre = [last.split(',')[0], last.split(',')[1]];

var map = L.map('map',{
	zoomControl: false,
	zoom: 15
});
map.setView(centre, 15);

L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 
	{
		maxZoom: 20,
	}).addTo(map);

var latlngs = [];

for (var i=0; i<line.length; i++) {
	latlngs.push(L.latLng(line[i].split(',')[0],line[i].split(',')[1]));
}

var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
	</script
</body>
</html>

This generates the map tiles and overlays the route, but it’s as a web page, now I needed a way to convert this into a PNG image. There are two options, html2canvas or PhantomJS. I decided to go with PhantomJS first. The following loads and renders the page and then generates a PNG image.

var page = require('webpage').create();
var system = require('system');


page.onConsoleMessage = function(msg, lineNum, sourceId) {
  //console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

page.viewportSize = {
  width: 265,
  height: 250
};

var url = "file:///opt/share/playing/map-overlay/index.html?" + system.args[1];

console.log(url);

page.open(url, function(){
  setTimeout(function() {	
    page.render(system.args[2]);
    phantom.exit();
  },500);
});

The coordinates for the line are passed in on the command line along with the file name to write the file to.

test

phantomjs --local-to-remote-url-access=true --max-disk-cache-size=1024 --disk-cache=true map.js [Path] [file name]

Running PhantomJS with the disk cache enabled should keep the load on the Openstreetmap servers to a minimum but I’m also looking at how easy it is to set up my own tile server.

I can now feed this in to the scripts I spun up last time.