An “in-real-life” sunny day in London with potential Zwift scenery!

50 years since I graduated with my first degree from King’s College gave me the opportunity to join the Alumni weekend in London, and the sunny weather made it a real treat as I walked about early in the day in peace and quiet – much needed after recent events in London. Here are some of the pictures from the day…

Click here to see and hear the bells of St Clement Danes on my Facebook page, as presented in the nursery rhyme “Oranges and Lemons”. See https://en.wikipedia.org/wiki/Oranges_and_Lemons for more

Duplicate ride issues on Strava

I have recently seen three examples of duplicate rides on Strava, owing to the rider recording the ride both on s conventional Garmin, and also on a wristwatch device.

Usually, Strava normally doesn’t allow duplicate rides. I thin, however, there is a logical gap in their thinking – each ride has a unique serial number, and if Strava sees the same serial number it won’t accept it again.

But the same ride on two DIFFERENT devices will have, I’m sure, two different serial numbers so Strava accepts it. It doesn’t make its judgement, it seems, on the CONTENT of the ride (time and location coordinates) which would be harder to program – so i guess they haven’t bothered.

Strava used to have a restriction on when pictures could be uploaded to a ride, on the basis of some misplaced strategy to make sure people didn’t forge ride pictures!!

But it seems they haven’t even got the basics right!! They obviously need some consultancy on this…see my previous article at www.briansutton.uk on merging rides for a bit (lot) more in this kind of area.

Suffice to say that when merging two rides (recorded in two successive parts on two different devices owing to battery life issues) you have to randomise the serial number of the merged ride. Otherwise it inherits the serial number of one of the component part rides, and won’t upload because Strava spots the duplicate serial number.

Merging Strava and Garmin ride files to create complete courses

A while ago, I posted an example of how to edit .gpx and .tcx files when there might have been a small corruption of the ride file preventing it from being uploaded to Strava. See it at  http://www.briansutton.uk/?p=330.

This post concerns the situation when you have been on a long ride, and the battery on your first Garmin Edge (or similar) GPS has run out and you have continued the ride with a mobile phone app (such as the GarminConnect or the Strava app) or another Garmin, and therefore have two, consecutive files that need to be merged to create a single ride file.

In the past I have used the Strava recommended website and tool at http://gotoes.org/strava/Combine_GPX_TCX_FIT_Files.php which is very easy to use and usually DOES create the single file required. It IS necessary to follow the advice in the app to randomise the ID number of the ride (in case either part of the ride has been uploaded to Strava previously – duplicate IDs are not allowed and will prevent the new file from uploading). Once it IS successfully uploaded, make the old files private (on Strava) to avoid doubling up on the relevant distances and elevations! GarminConnect refuses to upload “duplicates”.

By the way, this tool does handle any mix of .gpx, .tcx and .fit files as well; .fit files are digital, not text based (saving a lot of space on the more modern Edge devices that use it as their native file format) but Gotoes (and Strava and GarminConnect) convert them to .gpx or .tcx format for display (your choice when merging) and these formats ARE viewable and editable sensibly in good text editors such as the free one I use, TextWrangler (or its upmarket and chargeable version, BBEdit).

What I have found, however, is that although this Gotoes technique DOES create a file that is readable by Strava as a complete activity, and shows the whole map of the route both for the activity (AND for a course created from it) appropriately on the GarminConnect website, it doesn’t do the whole job when you need to download the course derived from the ride activity to your Garmin for later use.

What happens is that when the second ride recording device is started, although it records latitude and longitude correctly (of course), the cumulative distance parameter starts again from zero (naturally). The effect of this is that when you try to turn the whole, Gotoes merged ride into a Garmin course, although the online GarminConnect shows the course correctly, when downloaded by Garmin Express to an Edge device as a course, the course is truncated at the changeover point where the second Garmin started recording. So the downloaded course on the Garmin device is incomplete, only showing the course from the first part of the ride.

It turned out to be quite a task to put this right, and this post describes the process. It’s a long post, but working all this out and doing the conversions took me most of a day! The author of the Gotoes app, Brian Lucido, has since very kindly and very quickly taken a look at this for me, and his comments and emerging solution are at the end of this article.

Extract from the start of the combined ride .xml file

What follows here is the .tcx file preamble (ride summary), and also the first trackpoint from the combined .tcx file created by Gotoes, but it includes in its preamble section the distance recorded by second (!) device used on a ride when the first ran out of battery life, not the complete distance. I am surprised it used the second Garmin (shorter) distance for this ride (Andratx to Port Pollensa), because in my first attempt at doing this for another ride on another day (Port Pollensa – Sa Calobra loop), it took the FIRST Garmin (longer) distance (!):

<?xml version=”1.0″ encoding=”UTF-8″?>
<TrainingCenterDatabase
xsi:schemaLocation=”http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd”
xmlns:ns5=”http://www.garmin.com/xmlschemas/ActivityGoals/v1″
xmlns:ns3=”http://www.garmin.com/xmlschemas/ActivityExtension/v2″
xmlns:ns2=”http://www.garmin.com/xmlschemas/UserProfile/v2″
xmlns=”http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:ns4=”http://www.garmin.com/xmlschemas/ProfileExtension/v1″>
<Activities>
<Activity Sport=”Biking”>
<Id>2016-05-13T07:14:07Z</Id>
<Lap StartTime=”2016-05-13T07:14:07Z”>
<TotalTimeSeconds>30363.5</TotalTimeSeconds>
<DistanceMeters>20586.637522382</DistanceMeters>
<MaximumSpeed>58.169</MaximumSpeed>
<Calories>3054</Calories>
<AverageHeartRateBpm>
<Value>55</Value>
</AverageHeartRateBpm>
<MaximumHeartRateBpm>
<Value>143</Value>
</MaximumHeartRateBpm>
<Intensity>Array</Intensity>
<Cadence>0</Cadence>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2016-05-13T07:23:43Z</Time>
<Position>
<LatitudeDegrees>39.57607</LatitudeDegrees>
<LongitudeDegrees>2.42579</LongitudeDegrees>
</Position>
<AltitudeMeters>76.2</AltitudeMeters>
<DistanceMeters>0</DistanceMeters>
<HeartRateBpm>
<Value>88</Value>
</HeartRateBpm>
</Trackpoint>

The first highlighted line is in the file preamble, showing the supposed total length of the ride, 20586.637522382 kms, and the second highlighted line is the correct initial starting distance for the combined ride (zero) i the first trackpoint of the combined ride.

We can see highlighted below that the preamble ride distance in the instance is probably picked up from the second Garmin, because the last trackpoint in the combined file has used that distance (the time, latitude and longitude are correct of course, for the ride termination point!):

Last trackpoint in the Gotoes combined ride file

<Trackpoint>
<Time>2016-05-13T15:55:25Z</Time>
<Position>
<LatitudeDegrees>39.909860</LatitudeDegrees>
<LongitudeDegrees>3.083439</LongitudeDegrees>
</Position>
<AltitudeMeters>7.241</AltitudeMeters>
<DistanceMeters>20576.285</DistanceMeters>
<HeartRateBpm>
<Value>108</Value>
</HeartRateBpm>
</Trackpoint>
</Track>

The problem is that the whole ride distance was 116536.455 kms, as we see below from the last trackpoint in my own, final modified ride file, created using the techniques I explain below. That combined distance, of course, does not appear itself in either Garmin, it has to be calculated, as it does for every other trackpoint in that second part of the ride (by adding on the last trackpoint distance from the first Garmin):

Final, corrected combined ride trackpoint in my reconstructed ride file

<Trackpoint>
<Time>2016-05-13T15:55:25Z</Time>
<Position>
<LatitudeDegrees>39.909860</LatitudeDegrees>
<LongitudeDegrees>3.083439</LongitudeDegrees>
</Position>
<AltitudeMeters>7.241</AltitudeMeters>
<DistanceMeters>116536.455</DistanceMeters>
<HeartRateBpm>
<Value>108</Value>
</HeartRateBpm>
</Trackpoint>

The problem is caused by Gotoes somehow picking up the trackpoint distances recorded by the second Garmin and treating them as valid for the whole ride, whereas they are only valid for the second part of the ride;  ideally the distance would have started at the end distance recorded by the first Garmin device, but of course the second Garmin doesn’t know about the first one, and in effect the <DistanceMeters> has been reset to zero at that point.

The real problem is that when merging the two files, Gotoes should adjust every one of those trackpoint distances for the second Garmin ride file entries, by adding on the final recorded distance of the first one, to each one, but it doesn’t. This is what I have had to do manually using the following techniques (to do it globally rather then editing hundreds of them one by one!).

Maybe the problem would be resolved if all distances were calculated from latitude and longitude data at the time of Gotoes merge, because these ARE correct, but because Garmin adds (the possibly redundant (see my comments at the end of the article)) <DistanceMeters> parameter to every trackpoint, Gotoes seems to use this instead of recalculating distances from latitude and longitude data. Maybe this is why Gotoes merge works for activities up on the Strava and Garmin websites – possibly those websites DO use the latitude and longitude to (re-)calculate and display ride statistics and maps, and for online course display; but not, apparently, when downloaded to a Garmin Edge device. Maybe the Garmin Edge device doesn’t have that function built in for recalculating downloaded courses, and just uses the <DistanceMeters> parameter when doing that.

In summary, this doesn’t seem to be a problem for the activity itself on GarminConnect and Strava, but it does cause an issue for the Course created from the activity once downloaded to a Garmin Edge; hence the need to edit the Gotoes file.

XML file editing process

This took me half a day to work out, but then only 1/2 hour to implement for each of two such rides! I’ll just describe the essentials, and can expand further for anyone who needs help!

The issue is that any text editor, whether a really good one like TextWrangler or BBEdit, or a basic one, doesn’t do arithmetic! In the file from which extracts were taken above, there were hundreds of trackpoints in error (the second part of the ride, on the second Garmin) as far as distance is concerned. This was far too many to adjust manually (by adding the closing distance parameter from the first Garmin (which was 95950 kms) to every trackpoint distance from the second Garmin).

I should say here (for the “techies”) that I first thought of using the “regular expression” editing option (called “grep” in the web editing trade) in TextWrangler to isolate the <DistanceMeters>123.456</DistanceMeters> distance parameters, which is very easy (123.456 is obviously going to be different for every trackpoint for the ride). But then there is no way to edit or paste in (globally in one operation) each different trackpoint distance within TextWrangler (varying distances here represented by 123.456) by adding the constant 95950 to each original one.

One can find and select the trackpoints with their different distance data globally using grep wildcard characters (I used the search term:

<DistanceMeters>.*\..*</DistanceMeters> and it works for any amount of different numbers either side of the decimal point in the distance numbers)

but there isn’t a way to do a selective, global replacement with the (different) correct distances for each trackpoint.

What I found was necessary is to import the relevant thousands of lines (“only” hundreds of distance lines but each trackpoint has a dozen or so other lines of data) of the .tcx file into Excel (where you CAN do arithmetic!) as a (html) file delimited by certain characters;  isolating the distance figure in each <DistanceMeters> line into a separate Excel column; add on the constant starting distance 95950 kms to each distance number entry in that Excel column; and then save the file with the modified distances as an Excel text .txt file. This file is then opened by TextWrangler, where, if it is done the right way (as explained below), the original file format can easily be recreated and the data (the whole new file, in essence) substituted into the second part of the original, merged ride file (i.e. the part from the second Garmin whose <DistanceMeters> data had started at zero instead of 95950 in this case) to create a ride file properly representing the whole ride and its complete distance.

More TextWranger XML editing, Excel import, Excel editing and final TextWrangler XML editing details

What took so long to work out?! Here’s the a) to r) of the process:

a) the import of the second Garmin file into Excel (by default an Excel .txt file) requires 1) only importing the trackpoint items (hundreds of them) and 2) not the preamble (easy);

b) work out a way of specifying the delimiting characters such that the distance data is isolated into its own column in Excel when imported (more difficult). This is the most important and crucial step, it turns out. What I had to do (there might be a better way) was replace the surrounding <DistanceMeters> and </DistanceMeters> tags with xx and xx/ respectively (the / is possibly redundant, but I wanted to be able to edit back in the original tags which are different for opening and closing tags). “xx” is unique in the file, there being no other instances;

c)  add on the starting distance (95950 for starting the the second part of the ride, not zero! i.e. the closing distance for the first part) to each line where the distance parameter occurs (in Excel’s column C, say); this is best done by doing a conditional add into another (intermediate temporary) empty column (e.g. using the Excel formula if(C1<>””,C1 + $G$1,””) defined for row 1 in the temporary column, and then pasted into every row cell in that temporary column in the spreadsheet, where the constant add-on distance 95950 has been stored in cell G1, say) where we only add on the distance 95950 where the existing distance column has a number in it (i.e. isn’t blank). Then this new column is “pasted special” into the original distance column, choosing the option values only (since we want nothing but text or number data in the new file, NOT formulae). The intermediate, temporary column is then deleted;

d) add a new column either side of the new, replaced distance data column, ready to receive some new tags (i.e. <DistanceMeters> tags instead of the unique xx used purely to isolate the distances for the Excel import);

e) similarly, as for the distance data, conditionally (e.g. using if(C1<>””,<DistanceMeters>,””) to add this opening tag text to another column to recreate the original style opening tags, only in rows where the cell in the distance data column isn’t blank;

f) similarly, conditionally (e.g. using if(C1<>””,</DistanceMeters>,””) to add this closing tag text to yet another column to recreate the original style closing tags, only in rows where the cell in the distance data column isn’t blank;

g) again using paste special, paste the values only from these two intermediate columns into the new columns created either side of the actual distance data column;

h) delete the two intermediate columns;

i) save the new Excel .txt file and open it in TextWrangler (which allows opening any text based file, including Excel delimited ones (just like .csv files, although this is a .txt file in Excel), with those new  <DistanceMeters> and </DistanceMeters> columns we created in Excel, effectively undoing the “xx” tag changes we made as part of step b);

j) globally edit out any spaces left between the distance data items and the new <DistanceMeters> and </DistanceMeters> tags introduced in Excel; there are some left in the the Excel .txt file when it opens in TextWrangler. This is two very simple standard global edits, e.g replacing:

“<DistanceMeters>   ” with “<DistanceMeters>” (using “Replace all”) and similarly for;

”    </DistanceMeters>” with “</DistanceMeters>”;

k) copy and paste the whole file of new trackpoint items (no preamble or “postamble”, remember, trackpoints only) into the second part of the original Gotoes merged file to replace the old, second Garmin data from the changeover point;

l) The summary ride length parameter in the Gotoes merged .tcx file preamble was actually, in another file I had to alter, the longer of the two ride parts, and in this one it was the shorter one! Naturally I changed that to the total length in each one, a simple single edit each time.

m) run the add-on XML formatting option in TexWrangler (the Text Filter “XML Tidy” plugin which I had added to my TextWrangler before) over the whole file to achieve the right indentation (for appearance and accessibility only, with no change of content); I use this because sometimes when using TextWrangler to import xml data (as with Gotoes) the xml data is inserted as an extremely long string of data. Soft wrap doesn’t sort this, but there are reformatting tools like XMLTidy, JSONTidy and PHPTidy (and others) that don’t change content but re-present it in the accepted format for such file structures.

n) delete all versions of the original two parts of the ride activity in GarminConnect, and any website incorrect courses derived from them (Garmin won’t upload files it thinks are duplicates);

o) upload the new file to GarminConnect as an activity;

p) turn the activity into a course using the standard GarminConnect website dialog;

q) download the new course into the Garmin Edge of your choice (both of them in my case!)

r) check that the whole course is in the map option in the Garmin Edge – at last it is!

Appendix: Even a little more on Step b)!

In order to get the Excel import of a tab or character delimited file to isolate a numeric item in any line, we have to find a unique character that opens and closes that data item in TextWrangler, in any line in which it appears, before importing into Excel. Each trackpoint entry in the .tcx file has a dozen or so lines as we see above from the extracts, and only one of them for each trackpoint has the distance data for each (of the hundreds) of the trackpoints.

An issue is that the more obvious and usual delimiters from the xml tagging, “<” and “>”,  appear for all other data items too, so using them, or any other alphabetic single letter (Excel import only allows one delimiter character!) one might choose in <DistanceMeters> or </DistanceMeters> is no good for isolating distance data, as all of the letters in them happen to be used in other lines of each trackpoint. The delimiter character needs to be unique to the distance data item line in order to isolate the imported distance data into its own Excel column.

I first thought of changing <DistanceMeters> to “x” all through the .tcx file, but in the end decided to use “xx” for the opening and “xx/” for the closing tag each time – maybe unnecessary but I wanted to be super-safe there were no other single “x”s, or that the single character delimiter “x” in the Excel import dialog didn’t cause confusion when it was used for both opening and closing, and I added the “/” (to distinguish opening and closing delimiters) which in the end I just deleted in the excel file as it turned out not to be necessary. I used double x “xx” in case that would create a column either side of the distance data, but it didn’t! But it DID isolate the distance numbers themselves into their own column which was the object of the exercise.

The three successive Excel import process dialogs thus looked like:

Excel import dialog #1

Excel import dialog #1

 

Excel import dialog #2

Excel import dialog #2

 

Excel import dialog #3

Excel import dialog #3

PS I should say that I reported this to Brian Lucido (the Gotoes developer) at Gotoes.org on their website at 00.27 Mar 25th UK time, and he responded at 00.35! Mightily impressive in the early hours of Sunday UK time (I think they are 7 hours behind, but it still Saturday evening for them, when they should be at the pub!) He is looking at it now, defining the issue as the distance resetting as each new part of the ride is added to the combined ride file. I’m off to bed now while they work on that! I’m losing an hour, as we all are tonight! Need my beauty sleep at my age!

I wondered why the distance doesn’t get calculated from the latitude and longitude positions, or rather, why is it reported in the ride file at all? It would seem to me that there is no point in adding redundant data (from a good database design standpoint, this seems contrary to 2nd Normal Form for a database – see https://en.wikipedia.org/wiki/Database_normalization) such as the calculated distance in those tags. It only helps if someone is reading the file; any training software that is reporting on the ride could do it from the latitude and longitude, and then there is no issue about multiple rides because the latitude and longitude are correct in both parts of the ride. I suppose that is a question for Garmin whose device operating software puts it in there! Brian Lucido said that it is (only) needed for indoor training activities where thee is no GPS data available.
To be honest I haven’t double checked the times and calories etc; I assume the time of day is good in both parts of the ride, the heart rate is instantaneous as well, but I’m not sure how calories gets into the summary.

Brian came up with a solution after I suggested the point about data redundancy – and just removed the <DistanceMeters> tag!  It’s the easiest thing to do, and he agreed it was redundant.  H looked into what it would take to fix the issue (problem was a private variable – so it gets reset to zero each time the subroutine is executed)… and decided that it would be easier just to comment out the <DistanceMeters> part.  He realized that his app prohibits files lacking lat/long in any case… <distancemeters> is only there for swimmers and people on trainers and treadmills who don’t have any lat/long data.  Those types of activities don’t really need a merge tool!

But the summary data for <DistanceMeters> is incorrect in the preamble part of the file too, so that would need to be corrected in his app,  Apparently, while he was looking, he might have seen a circumstantial bug with the power/cadence… and is going to fix that. More to come…

 

Bicycle helmets – again!

I own up to having a hobby horse. My cycling friends will be surprised to know I don’t wear a helmet when riding it (!).

The hobby horse, of course, is my insistence on the advisability of wearing a helmet when cycling – always.

But I have today been assailed by several articles that I can’t let go without comment. I’ll be as brief as I can, and not repeat my previous comments on this safety topic. I’ll restrict myself to brief commentary on subject matter of the articles themselves.

My notice was drawn to the issue today by this potentially self-serving Facebook post by Velosure Legal and Cycle Insurance. Why “self-serving”? Well, I can only imagine that if riders take the advice that helmet use is of no help, it makes medical claims bigger and ambulance chasing fees higher!

"You don’t make it safe by forcing cyclists to dress for urban warfare" Great article on cycling, helmets & hi-viz, and…

Posted by Velosure Legal & Cycle Insurance on Wednesday, 22 March 2017

As for the Guardian article to which they refer:

https://www.theguardian.com/lifeandstyle/2017/mar/21/bike-helmet-cyclists-safe-urban-warfare-wheels

both they and Velosure should realise that a helmet’s primary purpose is for head protection (not for persuading motorists to take care, although it would be good if they did) – the head that contains a human being’s most important asset, the brain; the organ that seems to be missing in those that argue that it’s OK to ride without a helmet.

I’m certainly not going to be brainless enough to leave my helmet at home on the off-chance that somehow public road safety policy will change as a result. I’m not convinced by those that argue that personal safety measures and road infrastructure improvements are an either-or, or equivalently that somehow that tails will start wagging dogs; those that believe that will no doubt also expect that pigs might one day fly. F1 racing drivers (I think David Coulthard once said this) used to talk of leaving their brain in a box in the pits before going out to race, a metaphor for refusing to focus on the high risks of the sport (even higher back in the day) to reduce inhibition and enhance performance. For most of us this isn’t an option – or shouldn’t be.

Talking of brainlessness, in the cycling policy area I am in particular appalled that British Cycling (BC, the “organisation” that doesn’t have a system to record medication given to the professional cyclists they support; BC, that employs a doctor who apparently can’t keep his laptop safe; BC – and/or their favoured Sky team that hand carries an undocumented jiffy bag to their world-leading racer at a major event; BC, that can’t make a doctor available to present clear, honest and informed evidence to a Select Committee; and BC, that is alleged to be institutionally misogynous) continue to keep Chris Boardman as Technical Adviser despite his misplaced views on helmet wear, well documented and demonstrated in cycling advisory videos where he appears consistently riding a bike without one. With all their other failings, it isn’t surprising that BC’s HR policy in this area is also a mess.

Get thee to a doctor?

http://www.telegraph.co.uk/news/health/news/10866273/Cycle-helmets-are-useless-says-brain-surgeon.html

The neurosurgeon quoted in the article above might, as a by-product, also increase his caseload by persuading people to make themselves more likely to suffer a brain injury. He’s also generously spirited enough to try to get a Darwin award himself by being quoted as riding through red traffic lights, apparently OK in his opinion because it’s only his life he’s putting at risk. Really?! Ignoring the risk of secondary accidents caused by any necessary avoiding action by other road users? It beggars belief! What credibility does he have to pronounce on the choice of wearing a helmet or not? And do we really think that a research project on road-user attitudes and driving style* can distinguish a three-inch difference in road positioning when the driver sees a rider wearing a helmet. I don’t believe it. Especially as it’s quoted by our potential Darwin award winner.

http://www.bath.ac.uk/research/news/2016/01/25/helmet-wearing-risk-taking/ – Dr Tim Gamble and Dr Ian Walker, from the University of Bath’s department of psychology

More Grauniad excellence

https://www.theguardian.com/science/2016/jan/24/bike-helmet-appetite-danger

Here go the Guardian again, with what seems to be a concerted campaign to allow bike riders to kill themselves (by giving people excuses to ignore the benefits of a helmet), which, I suppose, might be seen as a good outcome by some of their other road-using readers. Despite their insistence here that they aren’t advising people to stop wearing helmets, they miss the simple point that reducing blunt trauma and severe abrasions are the primary purposes of a helmet – anything else is theoretical puff. No-one who has suffered or seen a head-impact fall from a bike would say otherwise, surely!

The Guardian must have spiked this article on Risk Compensation!

http://io9.gizmodo.com/5751216/would-putting-a-spike-in-the-middle-of-your-steering-wheel-make-you-safer

A very good point is made in the article – the logic of NOT wearing a helmet, so as to make yourself and others be more careful, might lead you to do exactly what is suggested in the title of the web page article!

Zwift off-piste course choices

In case this helps anyone who gets bored after a day or two with any of the Zwift courses, you can change your preferences to force Zwift to give you London, Watopia or Richmond on any day of the week, not just the allotted ones on the monthly schedule. Take care, and be aware of the advice that there are no hidden courses (allegedly). So don’t, as a computer scientist might, try other changes to see what happens and where you might be taken! Your rides might be a little more lonely than usual when making an alternate choice, of course…and I presume there might not be any races or group rides organised “off-piste” so to speak…

http://zwiftblog.com/world-tag/

Important: Do not insert bogus values into your preferences file!

There are no “hidden” courses, secret maps or back doors which can be found by inserting the wrong values into your prefs.xml file. If it’s invalid, Zwift will just behave unpredictably or even crash. Follow these instructions carefully and you’ll be safe!

PS I would recommend iMazing as a Mac based IOS file manager rather then the one suggested in the zwiftblog link. See the reasons here https://www.entertainmentbox.com/itunes-update-breaks-ifunbox-vshare-alternative-fix-imazing/

 

Monday, Monday…

Various connotations for an alliterative Monday morning come to mind! One is that great song “Monday, Monday” by The Mamas and Papas (https://m.youtube.com/watch?v=iIo8_bMFwxs or https://m.youtube.com/watch?v=-TFddCrHlPY) I remember driving to back in the 60s, sometimes from my home in Tottenham into central London in the days when you could park free in the old Covent Garden, near King’s College in the Strand.

But today must be Morbid Monday as I scan the Obituary column in today’s Telegraph. I read with a little sadness but some amusement the coverage of Peter Skellern. It states that for a few years in the 80s he had a creative partnership with Richard Stilgoe, and one of their songs was “Joyce the Librarian”, who had never been kissed but had a liaison with a regular reader, and ended up like one of his library books – two weeks overdue.

Further down the page is the (appropriately enough, late) news of the February 6th death of Raymond Smullyan, a mathematician, logician, and sometime magician and pianist whom I remember from one or two of his mystifying (mathematical) publications from my time as a research student in the late 60s. I still have his arcane book “Theory of Formal Systems” which I think I acquired from attending a summer school at Prof Chris Zeeman’s Maths department in Warwick, where my bestie Maths pal, David Fallows was an MSc student, after our first degrees at King’s.

Smullyan’s obituary (pictured here) mentions one of many logic problems he published over the years, including in several high-end puzzle books. It presents you with three gods A, B and C, who, in no particular order, are called Truth, False and Random. True always tells the truth, False always speaks falsely and whether Random speaks truly or falsely is a random matter.

Your task is to determine the identities of A, B and C by asking three yes-no questions, each one of which is addressed to only one God, although you may ask the same God more than one question.

The Gods understand English, but their answers are given in their own language; their words for “yes” and “no” are “da” and “ja” although you don’t know which is which.

There are online solutions for this, but give it a try first, before looking. (This is my return shot, Tom, for the polynomial question you set me!)

There is a simpler problem of this kind: you are at a fork in the road, and there is a person there from the local community, which comprises people who either always tell the truth or always lie. You may ask just one question to the person there to establish which way to go to your desired destination, but you don’t know if you are speaking to a truth teller or an inveterate liar. What would you ask?

Well, today’s obituaries have inculcated more than just the usual regret! Mostly, in reading obituaries (as I have tended to do for many years) I have been inspired by the many achievements of those who have been their subject. Over their lifespans, so many people have achieved so much!

I hope my interlocutor, when the time comes, can be creative in this respect!

Image may contain: 1 person

Relativity matters (!)

But my friends wouldn’t expect me to stop there!

John Wheeler had a great way of explaining both special and general relativity, and any of his books is worth the time spent to read them. Find this quote in his “Geons, Black Holes, and Quantum Foam”. He also came up with the terms “Black Hole” and “Wormhole”.

Depending on your grasp of the mathematics, a good book to start with might be his book written with Edwin Taylor, first edition in 1965, Spacetime Physics.

A much more demanding book from 1973 is “Gravitation”, a classic written with Charles Misner and Kip Thorne, which as its title implies covers General Relativity (i.e. relativity WITH gravity).

Of course, we hardly see space-time curvature in our day-to-day lives, just as we hardly see the direct effects of special relativity (although our lives depend on it in many ways at the subatomic level). Newtonian mechanics is a very good approximation for our everyday purposes.

But in high field strength gravitational fields, light will follow a curved path because in effect mass and space-time curvature go hand in hand. And at the special relativistic level (no gravity), at speeds near to the speed of light, physical effects are measurable such as time dilatation and length contraction.

These effects sound very odd, but given that a major axiom of relativity theory is that light always passes us at the same speed, no matter the velocity of the light source, any consequences are bound to be counter-intuitive. Our everyday experience is that, for example, a cricket ball bowled or thrown at us by someone running towards us is endowed with their running speed plus the speed of their arm. A ball thrown from a standing position with the same throwing or bowling action will be slower.

At speeds near to the speed of light (“relativistic” speeds), however, this additive “cricket ball” effect breaks down, and for light itself there is NO added speed if the source is moving towards us, even if the source is travelling at nearly the speed of light. (On a related point, light from distant sources in the Universe, travelling away from us very quickly, passes us at that same light speed, but is red-shifted. An interesting debate is to read Fred Hoyle on why there is so little blue-shifting, but that is a whole other discussion!)

Similarly for gravitation fields – it is only when the field strength is very high can we detect the predicted effects. The “lensing” or convergence of light from behind a massive star (like the sun) or the recent ground-breaking detection of gravitational waves thought to be issued by a pair of rotating black holes (the LIGO experiment) depend on very high gravitation fields we simply don’t encounter here on Earth.

General Relativity was used to calculated a predicted precession of the orbit of Mercury distinct from the Newtonian calculated precession – and it was found to agree with observation. But even that closely to the sun, the effect is tiny and would hardly have been noticed but for the intense scrutiny that was made as a test of Einstein’s theories.

Einstein’s creativity in postulating the constancy of the speed of light, and then his doggedness, using the mathematical tools then at his disposal (i.e. not our modern more evocative nomenclature and terminology that is more revealing of patterns in the required algebraic geometry) in solving the general Relativistic field equations show both his abundant inspiration, and lots of perspiration.

After all, to return to Wheeler’s duality of mass and spacetime geometry (curvature), for Einstein to solve equations that are reflexive in that the “independent” variables are also “dependent” is much harder than when you can assume that one set of variables is fixed and the others’ movement or variation doesn’t affect the first.

(Physics and mathematics are rich with examples of simplifying assumptions to help solve problems (often “linearizing” non-linear differential equations). For example, the general “three body problem” in Newtonian gravity is intractable, but the “reduced” three body problem (RTBP) IS tractable, the simplifying assumption being that one of the three bodies is postulated to be so small (e.g. a satellite in the presence of the earth and moon) that although it is affected by the gravitational field of the earth and moon, it has no effect itself on the sun and moon. In this way the problem is sufficiently decoupled (or linearized”) to be solvable).

100 years later Einstein’s theory still stands up. Probably quantum theory, and the union of it with General Relativity to create a GUT – a Grand Universal Theory – whether through string theory (maybe not) or loop quantum gravity (maybe) or some other yet to be fully formulated process will turn General Relativity into a “good approximation” just as Newtonian theory is a good approximation to relativity. Again Wheeler’s “Geons, Black Holes, and Quantum Foam” provides some food for thought.

But just as Newton loses none of his reputation as a giant of physics of his time, following Einstein’s work, neither will Einstein lose his as a result of any new all-embracing theory. They both had broad enough shoulders for others to use to develop our scientific understanding.

Is space-time real?

Einstein’s space-time is a mathematical construct to allow him (and us) to understand how space and time have to be inter-dependent. Look up the definition of “simultaneity” in the special relativity context, and you will see that simply modelling space and time separately with no interaction between them fails to allow for the fact that different observers moving at different speeds will disagree about whether events that happen that are spatially separated are simultaneous, or whether one event happens before the other. All three outcomes are possible depending on the speed and direction of motion of the observer, and this can only be postulated and resolved with a space-time model, NOT in a model with a fixed time axis. All this tells us that space-time IS physically real, in that the effects we would see if velocities were high enough are genuinely predicted and correctly calculated in the space-time model. Our lives are played out in such a definition of the interdependency of space and time, not in a fixed three dimensions with a fixed and separate time dimension shared by everyone. In the language of the theory, we all have our own “world-line” that is a combination of where AND WHEN we “are”, and these world lines have their own individual pace of time (not one shared by all), and at high speed differentials mean that we, and others, might observe events, as discussed above, happening in a different order from each other. There are limitations on how much and if these differences occur, depending whether the separation of space-time location of the events we are observing are “space-like” or “time-like” but Quora isn’t a great medium for illustrating that. But I can elsewhere is needed!

Avalanche matters

Now that my son Tom will be ski-leading for the Ski Club of Great Britain in Verbier later this month, including some off-piste days, or at least with a greater proportion of off-piste than our usual family skiing, my mind turns towards avalanche safety and the recent sad news of the fatal avalanche in a familiar resort we have skied in many times, Tignes (and Val d’Isère).

The first news of this was on the BBC and Sky News websites. The BBC coverage at http://www.bbc.co.uk/news/world-europe-38954628 has been updated to reflect the later news that the group, which included a 48-year-old man, his 15-year-old son and the son’s 19-year-old half-brother, as well as the experienced and well-known instructor, 59, were only a few dozen metres from the ski lift. It would seem they had been walking, carrying their snowboards, possibly towards a nearby lift. Since they were swept 400m down the slope, this must have been higher up, perhaps the Combe Folle draglift up to just below the top of the Lavachet Wall.

 

The Sky report, that hasn’t been updated,  said the avalanche had been in the Tovière area. I well remember the run Mur de Paquerettes (https://m.youtube.com/watch?v=QuwFfN6ESqo) (PS not me skiing in this video) underneath the Tovière mountain restaurant, where there is live music and where the hang gliders take off. Mur de Paquerettes is a pretty steep mogul run we have skied a lot, but it isn’t in the pictures here; we don’t see the Tovière Gondola bubble lift which provides a spectator view of the mogul antics from right over the run. It is further to the right as we look here; the off-piste run in this avalanche area is down from the Lavachet Wall, and we see part of  Tignes le Lavachet in the foreground.

These screenshots from the excellent ski navigation app FatMap (https://fatmap.com) show the area concerned. In the lower centre of the right hand picture, we can clearly see the large ridge that protects the Tignes village of Le Lavachet, with a smaller similar feature protecting Val Claret pictured at the centre of the wider shot on the left.

Tovière ski area in Tignes

Tovière ski area in Tignes, showing Val Claret where run Mur de Paquerettes and Henri end, both away from the affected area

Tovière ski area in Tignes 2

Tovière ski area at Tignes Lac and Le Lavachet, where the affected off-piste runs and the avalanche end. Note the avalanche barriers

 

 

 

 

 

 

 

 

This extract from the Tigne piste map shows the specific area concerned and the ridge clearly visible to the left of Le Lavachet. Note that the red piste Combe Folle, and the black runs Crocus and Trolles finish at the Tignes Lac and Le Lavachet side.

 

Tignes piste map showing the local lifts and pistes

Tignes piste map showing the local lifts and pistes above Val Claret, and near the affected area above Lac and Le Lavachet

 

Henry “Avalanche Talk” Schniewind was interviewed this morning about yesterday’s avalanche in Tignes down from the Lavachet wall. This is clearly an historically avalanche-prone slope, so much so that the man-made ridge and trough seen above had been constructed to protect houses in Tignes Le Lavachet from avalanches, and the party were thus caught in even deeper snow in the trough or gully between the slope itself and the ridge. Estimates of the accumulated avalanche depth there range from Henry’s 2-3 metres to 8 metres in the BBC report. Not a great place to be skiing (or even walking, as this party were thought to have been, carrying their snowboards towards a nearby lift) between a steep slope above and a snow trap below. It is to be remembered that once the avalanche snow stops moving, it has the consistency of concrete, rendering it vital to somehow stay on top of – or float on – the avalanche as it is moving down the slope, before it comes to a stop.

Here is the weblink for this morning’s ITV interview with Henry Schniewind:

http://www.itv.com/goodmorningbritain/news/safety-concerns-after-four-killed-at-tignes-ski-resort

Henry talks about the vital, minimum equipment necessary when skiing off-piste – an avalanche transceiver, a probe and a shovel. To this many would nowadays add a flotation air-bag rucksack, although opinions are divided on this. Opinion is also divided on which type to choose – a mechanically triggered RAS system (e.g. Mammut), an electronically triggered ABS system (e.g. Ortovox) or an electric fan-based inflation system (such as the Black Diamond Jetforce system), which obviates any (compressed air cylinder) issues for air travel with such rucksacks, but which might not be so quick or effective for inflation. All types are triggered by the wearer using a T-handle, stored in the rucksack shoulder strap when not required.

Update from http://echomag.co.uk/features/2017/tignes-avalanche-update

There was a lot of confusion on the scene of the Lavachet Wall avalanche yesterday but clear details have finally emerged.
The group taken by the slide was a group of 4, and not of 9 as previously reported. It is currently not clear why authorities were looking for 9 victims – it sounds as if the family party of four were all double booked.
The instructor was a very high-level ESF snowboard instructor, aged 59, with years of experience. His clients were a family from the South of France: a father, 48; his son, 15; and his step-son, 19 – all strong snowboarders, all wearing avalanche kit. One member of the family escaped having descended earlier with an equipment issue.
The slide took them while they were boot-packing across the face which cut in to the snowpack, weakening it, and causing the slide to release. 40m wide at its release point, the avalanche took the victims over 400m down the slope burying them underneath 7m of snow in a man-made gully built for the express purpose of protecting the houses behind it from avalanche debris.
With Météo France’s avalanche bulletin warning of windslabs and instability on slopes of this aspect an investigation will follow. Jean-Christophe Vitale, the mayor of Tignes, has gone on record to say: “He was a very experienced professional who knew the area well. I’m sure he took every precaution while taking his clients to this place, but off-piste zero risk does not exist.”
One bright-side to the incident is that one 16-year-old who was with the group when they did the same run earlier in the morning wasn’t with them on the second run. Either experiencing problems with his equipment or after a fall the instructor sent him down the pistes for the day. It wasn’t until the afternoon that he learnt the group he was with were caught in the slide.

Hero image: Radio Val d'sere Graphic: LP/INFOGRAPHIE

Hero image: Radio Val d’sere, Graphic: LP/INFOGRAPHIE

 

The risk of avalanche at the time of the avalanche was 3 on the scale of 5 and this incident, on a North-West facing slope, came on a relatively warm morning after several days of strong winds. Météo France’s official avalanche report noted the risk of rising temperatures and the presence of wind slabs on North, West, and Southerly aspects.

 

An avalanche risk rating of 3 is hardly unusual through the season; it highlights the need to be very aware of the weather reports and resort assessments, noting that there is always some risk. Here is that morning’s Metéo France report:

Météo France’s official avalanche report

Météo France’s official avalanche report

 

The following article by Henry Schniewind and Hugh Morris has some useful hints and tips on what to keep in mind when skiing off-piste:

 

http://www.telegraph.co.uk/travel/ski/advice/Ski-safety-avalanche-survival-tips

 

and see more from Henry’s website at http://www.henrysavalanchetalk.com

 

 

 

Using TextWrangler to edit Garmin, Zwift, Tacx and other .fit, .tcx and .gpx files

On the lost ride retrieval topic, I haven’t yet found a way to locate any surviving Tacx data from my iPad, but I have several times had cause to edit a Garmin ride file which wouldn’t upload to Strava.

Typically this has been because the ride data file has been corrupted, albeit quite innocently. On one occasion I paused my Garmin 705 and paused/unpaused it several times too rapidly to make sure I was hearing the right chirp or multiple chirp which indicates it is running (or not). This cause the file to be mis-recorded – I’ll come to that in a moment.

The most recent occasion was with my Garmin 520, which just switched itself off mid-ride. I turned it back on, and the ride appeared to be recorded normally, but would also not upload to Strava. On the 520, as with the more modern Garmin devices, it looks to an iPhone using the Garmin Connect app and bluetooth, and this ride would not synchronise to the phone either.

On both occasions I was able to repair the file using TextWrangler, an advance text editing application (on my MacBook Pro) that I use to create and edit web pages. It handles a file structure called “XML”, a structure that on a line by line basis creates tagged files that contain data in a repeating pattern enclosed by an open and closing tag for each data item such as heart rate, latitude and longitude and so on. Here is an example of two successive “Trackpoints” that the Garmin records every second or two during a ride:

<Trackpoint>
<Time>2017-02-08T11:36:54.000Z</Time>
<Position>
<LatitudeDegrees>45.81380844116211</LatitudeDegrees>
<LongitudeDegrees>9.084691047668457</LongitudeDegrees>
</Position>
<DistanceMeters>0.0</DistanceMeters>
<HeartRateBpm>
<Value>80</Value>
</HeartRateBpm>
<Extensions>
<ns2:TPX/>
</Extensions>
</Trackpoint>
<Trackpoint>
<Time>2017-02-08T11:36:55.000Z</Time>
<DistanceMeters>0.1</DistanceMeters>
<HeartRateBpm>
<Value>80</Value>
</HeartRateBpm>
<Cadence>24</Cadence>
<Extensions>
<ns2:TPX>
<ns2:Speed>0.054688</ns2:Speed>
</ns2:TPX>
</Extensions>
</Trackpoint>

The problem with the Garmin 705 failure was just that ONE of the opening tags <Trackpoint> was missing for one timestamp, so that the file was formatted incorrectly. Strava is VERY strict on accepting only correctly formatted files, so until I added this tag back in (there are thousands of them in any ride, 20,000 in that particular ride) Strava wouldn’t accept it; but even replacing just that one missing one meant that I could use the file for Strava.

On the second occasion with the 520, one timestamp at the point that the Garmin 520 turned itself off suddenly changed its date to a completely different day, and all the rest of the dates were similarly wrong for the rest of the file. Here are the two successive timestamps in question, with a sudden jump from 2016-11-27 to 2019-04-07! This was at line 23857 out of 84192 in the file altogether:

<trkpt lat=”55.931874252855777740478515625″ lon=”-4.27179764024913311004638671875″>
<ele>46.40000152587890625</ele>
<time>2016-11-27T09:42:42.000Z</time>
<extensions>
<ns3:TrackPointExtension>
<ns3:atemp>2.0</ns3:atemp>
<ns3:hr>146</ns3:hr>
</ns3:TrackPointExtension>
</extensions>
</trkpt>
<trkpt lat=”55.9292156808078289031982421875″ lon=”-4.27936230786144733428955078125″>
<ele>34.40000152587890625</ele>
<time>2019-04-07T09:43:34.000Z</time>
<extensions>
<ns3:TrackPointExtension>
<ns3:atemp>3.0</ns3:atemp>
<ns3:hr>137</ns3:hr>
</ns3:TrackPointExtension>
</extensions>
</trkpt>

This time, a simple global edit to make all of those (10,000) subsequent dates the same as the first 5,000 or so meant that the file was once more readable by Strava. In this case, Garmin Express on the MacBook WAS able to read the original file, as no doubt Garmin’s software is better at second guessing their own software glitches than Strava is, or is bothered to be! In general I find Garmin’s software leaves a lot to be desired, both on the Mac and also in their devices, but the 520/820 series are a lot better than previous models.

One final point: .fit files that are created and used by those more modern Garmin devices are not alphanumeric, so they aren’t easily correctable other than wth Garmin’s own web-based available software, which just tends to truncate any part of the file that has an error. But if you can read the file with the laptop applications Garmin Express or Garmin Basecamp, you can the export a .tcx or.gpx file from them which IS the tagged file structure you can edit in an application like TextWrangler. The .fit files don’t look very amenable in Textwrangler – ouch!:

 Tˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ†ˇˇˇˇˇˇˇˇ #Eù2∫~√’ÁÈ͸/3Ù
öı
 S¬≥ˇˇˇˇˇˇ@ˇˇˇˇˇˇˇˇ %Eù2√’XˆÍ¸∂9Ô

 Qˇˇˇˇˇˇˇˇ¿ˇˇˇˇˇˇˇˇmˇˇˇˇˇˇˇˇ (Eù2ë√’hθ0CÈ
È
 P ˇˇˇˇˇˇ )Eù2°√’/θ7FÁ
ôÁ
 Pöˇˇˇˇˇˇˇˇ—ˇˇˇˇˇˇˇˇ +Eù2…~√’ θzL·
.‚
 P¥ˇˇˇˇˇˇˇˇÄˇˇˇˇˇˇˇˇ -Eù2B}√’ï%θ±R€

Recovering from lost turbo rides in Zwift

Recently I have lost or partially lost Tacx rides using their trainer software on my iPad, and also had one lost Zwift ride.

For Zwift there is a way to recover partial rides if the software freezes, by peering into the iPhone or iPad with a laptop program called iMazing. It’s a chargeable program, but has a set of free functions which are enough to bring up the Zwift/activities folder in the iPad, from where stored .fit files  – and also image files if you have taken screenshots – can be copied to upload manually to Strava.

Zwift have the following advice on their support pages at https://support.zwift.com/hc/en-us/articles/202257019-Can-I-upload-my-activities-to-a-third-party-site-

Finding your local .fit file

If for any reason you experience an issue, such as a game crash or Internet loss, your fit file is automatically saved every 10 minutes in the \Documents\Zwift\Activities folder on your computer.

If you’re riding on iOS, you can reach your .fit file through iTunes.

  1. Plug your device into your computer and open up iTunes.
  2. Click on your device in iTunes, then click “Apps” and scroll down to the “File Sharing” section.
  3. You should see Zwift listed, and it should have a “Zwift” folder. Click that, and then click “Save To” and save it to a location of your choice.
  4. Find the saved Zwift folder, and copy the fit file out of the Zwift/Activities folder.”

but I couldn’t find a way of saving the folder from iTunes to my laptop, although it is visible in iTunes where they say it is.

In any case, with iMazing you can pick off just the file you want, not necessarily the whole folder, so it’s a better way of doing it. Here are a couple of screenshots of what iMazing presents:

Apps in my iPhone as viewed from iMazing

Apps in my iPhone as viewed from iMazing

The Zwift rides and pictures within the Zwift/activities folder

The Zwift rides and pictures within the Zwift/activities folder