All posts by Tim Anderson

Strava sues Garmin for patent infringement, but says it is really about API access

Strava, a social network for runners, cyclists and other sports, has filed a lawsuit against Garmin, makers of sports watches and other devices, alleging that Garmin has infringed Strava patents on heatmaps and segments. However, Strava’s Chief Product Officer Matt Salazar said that the lawsuit is an attempt to put pressure on Garmin over new API brand guidelines which Strava does not wish to implement.

The lawsuit, filed on Sept 30th in the US District Court in Colarado, claims that Garmin infringes two US patents granted to Strava, 9297651 and 9778053. The first relates to heatmaps, which show the popularity of routes. The second relates to segments, usually partial routes defined by users, on which athletes can compare their own performance with past attempts and compete with others. Strava is asking that Garmin be prohibited from using allegedly infringing features in its products. Luis Mendoza has written in more detail about the legal aspect here.

Yesterday though, Salazar said on Reddit that the legal action relates to Garmin’s new API developer guidelines, published on July 1st. Strava has not complied and apparently now has a deadline of November 1st, following which Strava’s access to the Garmin API may be cut off.

The point of contention is Garmin’s logo requirement, which according to Salazar “required the Garmin logo to be present on every single activity post, screen, graph, image, sharing card etc.”

Salazar said that “we consider this blatant advertising. These new guidelines actively degrade your user experience on Strava (and the other 150M+ athletes). We already provide attribution for every data partner.”

He added that “we consider this to be your data … we believe you should be able to freely transfer or upload that data without requiring logos to be present.”

The background is that most Garmin users (who use Strava) set an integration with Strava such that each activity is automatically uploaded.

Reddit users were not much impressed with Salazar’s comments, considering that Strava introduced restrictions on how third parties access its own API last November, and that the terms of use for Strava grant the company full rights to the data “without compensation to you,” making Salazar’s claim that it is regarded as belonging to the user doubtful.

Users do not seem to mind the logo. “Runna already includes the Garmin logo on activities when used. It acknowledges the device and IMO it’s nice to know which device is used if you’re using multiple. It’s not offensive and doesn’t degrade the user experience at all,” said one.

Salazar does not actually explain why Strava is complaining about one thing but taking legal action about another; one presumes that the idea is for Garmin to negotiate for an end to the lawsuit in return for removing the logo requirement but these things create a lot of bad feeling and it may not work out as intended.

Strava is the company with more to lose. Garmin has an alternative to Strava called Garmin Connect, which has social media features, but most people use Strava as it is well established and has a better user interface. The existence of Garmin Connect though means that users have an exit route from Strava, but not so easily from Garmin unless they replace their expensive watch.

Garmin is also a much bigger company. Revenue of $6.3 billion in the 2024 financial year and operating income of over $1.5 billion, whereas Strava “expects to hit $500M in annual revenue soon” according to a recent report. Profitability is not known but Strava is planning to go public early next year.

From the point of view of runners like myself, there is no possible benefit from the lawsuit (other than the possibility of fewer small logos) and plenty of possible inconvenience if Garmin does block its API from Strava.

My own view of Strava has until now been favourable especially because it does not show advertising (other than for itself) to free users, apparently because it values the user experience, which in this case I think most would support. The company perhaps gives too good an experience for free, from a business point of view, and the added value of a subscription is not that great, especially as the “athlete intelligence” via AI is poor, doing little more than stating the obvious as far as I can tell.

Incidentally, I am one of the few Strava and Garmin users who does not use the integration, mainly because I do not want every single activity on the platform. One can instead download the .fit file from Garmin Connect and upload it manually to Strava. The annoyance here is that the Garmin Connect mobile app does not include the download feature, and the Strava mobile app does not include the upload feature. Both are possible though via the web browser, so that is what I use.

Book review: Run like a Pro (Even if you’re slow) by Matt Fitzgerald and Ben Rosario

I found this book a refreshingly different (to me) take on how best to train in order to improve your running performance. Ben Rosario is an olympic coach, and Matt Fitzgerald a runner and author. The book comes after Fitzgerald spent three months training with the athletes Rosario was coaching at his club, Hoka NAZ Elite. Although not himself an elite athlete, Fitzgerald wanted to train as if he were and to learn from the experience.

There is an account of the experience itself in another book; this one is a training guide informed by what happened. I picked it up because I was interested in the theory behind what is sometimes called 80/20 running – the idea that 80% of runs should be low intensity – which Fitzgerald advocated in his 2015 book of that title.

This 2022 book continues to advocate 80/20 running though there is a lot more here than that. The central thought is that many recreational runners (meaning most of us) train badly and could improve by learning from how elite runners train. Although we are slower and have less time available, the same principles apply to elite and non-elite runners alike, the authors argue, so why not learn from the pros?

Run Like a Pro consists of 14 chapters, the last five of which are training plans and explanations. Each chapter is by Fitzgerald, but followed by a few pages of “Coach’s tip” by Rosario, at least that is how I think the dual authorship works. The tips are good, by the way, and its’s good to have these two distinct voices.

Chapter 4 particularly interested me, as this is where the 80/20 principle is explained. I was surprised by how precise it is. The authors describe the “first ventilatory threshold,” or VT, defined as “the lower of two distinct exercise intensities at which the rate of oxygen consumption abruptly spikes.” There are various ways to calculate this, such as a 4 out of 10 perceived effort, but an example given helps us to get a feel for it. Someone who runs a 45 minute 10K, the authors say, which is 7:15/mile or 4:30/km, would have a VT of 9:49/mile or 6:06/km. According to the book, 80% of such a person’s running should be at or below the VT, but typically is not, “and that’s a problem.”

Various pieces of research are quoted, such as a study of 30 club runners in which half stuck to 80/20, and half did a more common pattern of moderate intensity training. Both groups improved their 10K time, but the 80/20 group improved by 5% and the other by 3.5%. A small study, but the book claims that “other research has yielded similar results.”

Food for thought; but there is plenty more here even if you are unsure about 80/20. There are chapters on pacing, managing mileage, balancing intensities, running form, nutrition, and the mental aspect of running.

One thing that made an impression on me is in the pacing chapter, where the authors advocate a “fastest last mile rule.” The idea is that slowing down towards the end of a long run is a bad habit; in fact, “any running you do after you’ve started slowing down involuntarily offers no benefit,” they say. “Beyond that point you are no longer training, you are punishing yourself.”

A further consequence of running to exhaustion is that injury risk increases.

Is there really no benefit to running after fatigue has made you slow down? The question provoked a lively discussion on Reddit’s Advanced Running forum.

The chapter on running form includes a series of exercises, some of which involve weights or a stability ball. I intend to try some of these as I am fully convinced of the value of strength training for runners.

The training plans cover distances from 5K to ultramarathon, each with 3 levels, for beginner, intermediate and advanced. You have to do a bit of work to translate the plans into workouts. 11 levels of intensity are defined, from easy to very high intensity. Then I counted 18 different types of runs, along with drills, stride and plyometric workouts, and a general reference to cross-training. Following a plan therefore means figuring out exactly what is required, based on descriptions like “Run 15:00 easy, drills and strides 5 x (4:00 @CV/2:00 easy), 15:00 easy.”

This is a great book for runners, well-written and easy to ready, and I think anyone determined to train better will get something useful from it.

Run like a Pro (Even if you’re slow) by Matt Fitzgerald and Ben Rosario

Winchester Half Marathon: hilly, late starting, got my target time

The Winchester Half is personally significant for me; it was the first half marathon I registered and trained for and in some ways got me started as a long-distance runner. This was my third time; in 2023 I was pleased to be just sub 2 hours, last year I was excited to beat 1:45 – my time was 1:40:48 and I commented on Reddit that I might have been able to catch the 1:40 pacers but only with “a titanic effort.”

Fast forward 12 months and I think I am a bit faster; this time I want to be sub-1:40.

The course is beautiful and starts and finishes in the historic city of Winchester, adorned with a cathedral that is in parts over 900 years old. It is also hilly; the first 3K or so is all uphill, following which it is undulating but includes another steep climb in the village of Oliver’s Battery, the segment for which on Strava is named “Drained battery.”

I arrived at the race village around 1 hour before the 9:00am start time; there were people around but it was strangely quiet. There had been an incident on the motorway, which was therefore closed, and the race was delayed by at least 30 minutes, in part because of delayed runners but also because key traffic marshals were stuck in the traffic and without their presence the race could not go ahead. There were even whispers that the race might be cancelled; road closures are difficult to manage at the best of times, everything has to be pre-approved by the authorities and if the race missed its time window it might have to be abandoned.

The weather was perfect, everything was set up, and runners milled around feeling a bit glum. It is odd to prepare oneself for a race, have an early breakfast and warm-up run, and then … nothing. I began to feel hungry; the plan was to do the race and have a second breakfast afterwards, but I did not want to eat again before running.

After 45 minutes or so there was some good news. The race would go ahead, the start time would be sometime after 10:00am. I had a chat with the two 1:40 pacers; they said they would try to keep an even pace despite the hills. I would therefore fall behind initially but hoped to catch up and overtake them later.

Nutrition? I tend to take a half marathon in my stride as far as possible. Early breakfast. One gel before the start and then nothing, I did not stop at the water stations.

The race

At 10:15 the race began. I started just behind the 1:40 pacers and as predicted, they disappeared ahead as I laboured up the first hills. The 1:45 pacers passed me as well. Nevertheless I felt pretty good; one redeeming feature of this course is that the starting climb is the worst and there are some nice steady downhills to come. We reached the junction with Kilham Lane on the left and the famous Clarendon Way on the right, the road levels out, and I began to speed up. You need to average 7:38/mile pace for sub-1:40; mile 3 I did in 7:16, mile 4 in 7:00 and mile 5 in 6:40 (yes it is downhill!).

I thanked the 1:40 pacers as I passed them and they told me that all I needed to do was to stay in front. Well I knew that; but “drained battery” was still to come.

You reach a charming village called Hursley with is the far point of the race. Next comes a relatively gentle climb up a narrow country lane, back to Oliver’s Battery which is on the outskirts of Winchester. Grind up the last major hill, and then the last 4.5 miles are easy. My time on the dreaded segment was 5:22, beating last year’s 5:39, and I was pretty sure then that I would achieve sub-1:40.

The last 4 miles have a few twists. There is an underpass where you actually have to go down steps; I tend to be cautious here for fear of falling over! Then there is a steepish descent, too steep for an ideal pace, followed by a flattish three miles or so to the finish. I tried to keep up the pace, foolishly hoping that I might win my age category. Back into the city centre, under the historic Kingsgate arch, around a few corners, then the sprint to the finish, rudely overtaken in the last stretch by a runner perhaps half my age!

Post-race

1:37:17 and an improvement of over 3 minutes from last year, but also a bit of an anti-climax. I realised that the not-very-generous race organisers had 10 year age categories so I had no chance of winning (I was 4th out of 24), and also discovered that I had apparently failed to order a t-shirt.

On the plus side, Starbucks were offering a free coffee to all finishers and I wandered along to collect my tall Americano which turned out to be more tasty than expected, possibly improved by post-race thirst. It was now lunchtime and too late for a second breakfast so I wandered home instead, thanking the excellent marshals en route; a tough day for them since they had been out longer than expected and remained super cheerful and encouraging.

Postscript: there are two Strava segments for the Oliver’s Battery stretch, one is longer and is called Low battery and the other just covers from the start of the steep hill to the underpass and is called Drained battery. I like Drained battery better but it may be hidden by default in a Strava post, just one of those Strava mysteries.

Book review: Advanced Marathoning by Pete Pfitzinger and Scott Douglas (4th edition)

This is a new edition of a book well-known in the running community as among the best available guides to marathon training. The first edition was published in 2001, the second in 2008, and the third in 2019.

That third edition is personally important to me. When I was contemplating running a marathon for the first time, my son gave me the book based on recommendations from the Reddit Advanced Running group. I have read the book multiple times and followed its 18/55 schedule twice, on both occasions achieving my target time, and qualifying for a “good for age” place for the London marathon next year. I regard the book as a key factor in that success.

The new edition follows the same proven structure as its predecessor but with a modernised design, colour photographs (previously all were monochrome), updated elite runner biographies, and updated text and schedules based on the latest research and feedback from readers.

The book is aimed at runners who want not only to run the marathon, but to achieve a good performance. “The runners for whom we wrote this book have goals such as setting a personal best, qualifying for Boston, or running faster than they did 10 years ago,” the authors state.

That does not mean you have to be an elite runner. The schedules (training plans) here are relatively demanding, and therefore require commitment, but the pace you choose as your target for the marathon is up to you. When I first picked up the book I observed that a table in the first chapter (and the same in this edition) lists marathon goal paces from 5:00/mile (3:06/km) to 8:30/mile (5:17/km). Although it is not explicitly stated, this seems a reasonable guide to the range of speeds the authors anticipate, though the book is a good read for anyone who wants to understand marathon training better.

If you expect to complete the marathon in over 4 hours (slower than 9:09/mile or 5:41/km) then the schedules here are likely less suitable for you since the suggested distances may take too long, though the new edition is a little more flexible in this respect.

How to train for a marathon

Training for a marathon is not just about following a schedule. It helps to understand the basics of how to train, as well as other key components such as nutrition and core strength training. There is also the detail of how to run a workout, and what to do when something does not work out because of injury or life getting in the way.

Part 1 of this book is called training components and has the following chapters:

Elements of training: a short but informative summary of what we know about how to train for endurance running. Not much changed in this edition. It’s an excellent simplified guide. If you want to know more try The Science of Running by Steve Magness.

Nutrition and hydration: this is an important and somewhat contentious topic with updates in this edition to increase the suggested amount of carbohydrates you should consume during a run. Some good practical tips on things like how to drink on the run.

Balancing training and recovery: the title of the chapter says it all, training is all about the body adapting to the stress you put on it, and that adaption takes place when you are recovering so this balance is critical. A few changes in this edition such as a discussion of super shoes.

Supplementary training: something I did not know before taking up running is that simply running is not enough to strengthen your muscles for optimum performance. Additional core strength training will make you faster as well as probably reducing injury risk. Quite a few changes in this edition with some different exercises, clearer instructions and new photos. It looks to me as if the new edition has been carefully revised to reflect research in this important area. Do not neglect this; it is a key part of the training.

Advanced marathoning for masters runners: this is interesting to me as I am in this category, but it is not my favourite chapter, partly because it is dispiriting to read about our slower pace and greater injury risk as we age. Another thing is that the older runners in the examples are not that old by some standards, Kate Landau and Roberta Groner in their 40s for example. In the first edition Douglas wrote about running in his 50s; that has been rewritten now as a runner in his 60s which is closer to home for me.

Tapering for peak marathon performance: a great short chapter on a suprisingly complex topic and one for which data is inconclusive. The idea is to get to the start line in peak condition which means reducing workouts enough to remove fatigue, but not so much that you begin to detrain.

Race day strategy: I love this pragmatic chapter about the day itself, how to pace yourself, when to consider dropping out, coping with the psychology of the race and more. Pure gold, not much changed in this edition.

Training schedules

Part 2 of the book contains the training schedules and how to use them. There are a range, based on how long you have to train (18 weeks or 12 weeks) and how many miles per week you can manage (up to 55, 55-70, 70-85, more than 85).

Research shows that higher weekly mileage corresponds well, for most runners, with faster marathon times and lower risk of a severe drop in pace over the last 6 miles. Higher mileage is also more demanding and not to be taken lightly. Personally I have not gone beyond the “up to 55” schedules.

The authors define several types of training runs, these being long runs, medium-long runs (typically run midweek), marathon pace (MP) runs, lactate threshold (LT) runs (faster than MP), general aerobic runs (moderate effort), recovery runs (short easy runs), VO2Max intervals, and speed training (sprints or strides).

That is a lot of variety and the key chapter here is called Following the schedules; I have read it carefully several times! Note that the schedules do not show actual paces but you are guided either by calculating the pace from your MP or by using heart rate; I have chosen the MP approach.

A change in this edition is that the runs are more flexible. For example, the LT runs can now be done as intervals rather than as warm up, LT run, cool down. There is also a little more give in the schedules, such as a run of 8-9 miles instead of simply 9 miles. These changes are mainly aimed at slower runners giving them permission to run a little shorter, though if you always run the maximum distance you would actually run a little further than in the third edition schedules.

There are also schedules for recovery after the marathon, and a chapter on multiple marathons where you want a good time twice over a short period such as 4 or 6 weeks.

I was sorry to see that one of my favourite sections in the multiple marathoning chapter has been removed in this edition. This was called Why multiple marathoning and included the comment, “normal marathoners should check the amount of glass in their houses before throwing stones at multiple marathoners. After all, the bulk of this book has been devoted to detailing how to maximize your chances of success at an activity that the human body isn’t really suited for.”

Space reasons? Too close to the bone? Not sure but I will keep my third edition on the shelf.

The book for you?

This book has worked for me and I recommend it provided that you have the time and commitment for the schedules and with the caveat that it is likely less suitable for those who expect to take over 4 hours.

In general the training here is old-school and not in tune with the current trend towards more low intensity running such as the Norwegian Singles approach. I do not thing there is any consensus on the best approach and every runner is an unique human being so it is hard to declare any particular type of program as best.

My observation though from anecdotal data such as Reddit run reports is that those who follow the schedules in this book, commonly called just “Pfitz”, tend to get good times and avoid common pitfalls like having to walk the last few miles, though not exclusively so. However that could also reflect the fact that the schedules represent a significant commitment, more than many other plans.

Another often recommended book is Daniel’s Running Formula by Jack Daniels. I have this one too and my observation is that Daniels describes the system he devised whereas Advanced Marathoning is a more general approach. Working out how to follow the schedules in the Daniels book is more complex and there is a little less pragmatic advice, though Daniels does have a chapter on treadmill training which Pfitzinger and Douglas hardly mentions. I am sure that excellent results are possible with either book.

Is the book worth it if you have the third edition? The earlier book is not suddenly less good than it was, but things like the revised supplementary training and more flexible schedules are worth having, and the modern design and new elite runner anecdotes are nice to have. It is, after all, a small expense compared to the cost of your running shoes.

Finally, one thing I like about Advanced Marathoning is the concise, pithy writing. There are little comments which I come back to again and again, even while actually running a race. For example, the authors describe the final 6 miles of the marathon, often the most difficult, as “the most rewarding stage of the marathon … this is the stretch that poorly prepared marathoners fear and well-prepared marathoners relish.”

Whether or not you read this book, I hope this is true for you.

Disclosure: if you buy the book from an Amazon link on this page I will get a small commission

Broløbet: the bridge run 2025, an amazing experience

“Run across the bridge.” That was the pitch for this unusual run, the bridge in this case being the Øresund Bridge between Copenhagen, Denmark and Malmo, Sweden, on the 25th anniversary of its official dedication in summer 2000. This was the third such run, the first having 79,719 finishers on 12 June 2000, still the world’s largest half marathon; and the second with around 30,000 runners in June 2010. 

Broløbet 2025

Someone in our running club mentioned it early in 2024. The first adventure was signing up; tickets went on sale on 1st February 2024 and sold out 40,000 places in a few hours, with the web site barely functioning under the load. Nevertheless a dozen of us signed up; and 18 months later arrived in Copenhagen, city of parks and bicycles, ready to run.

The run was organized by two running clubs, Sparta Atletik in Denmark and MAI (Malmö Allmänna Idrottsförening) in Sweden. There were expos in both countries, with the Copenhagen one conveniently positioned by Fælledparken parkrun where some of us ran on the Saturday before the race. Bib pickup was as the expo, which was fun with a nameboard showing all the runners, discounted shoes and other goodies. Along with the bib, runners were given a handy folding bag which was required for bag drop.

I had not trained specifically for this run, taking the view that I would still be fit enough following Manchester Marathon at the end of April. In fact my fitness has dropped a bit but not disastrously so. I had signed up for the 1:30 – 1:40 wave and was nervous about completing it in the time but figured this race was more about the experience than chasing a PB (personal best). This put me in the third wave (yellow), starting at 9:50, though bag was to be dropped by 8:45.

Being a get-there-early sort of person, I arrived around 8:00am at which time it was easy to use the facilities and have a wander round; not much to see other than the gathering runners and a stand from sponsor Boozt. Weather was sunny and we had been warned of a warm race so slathered myself with suncream and did my best to hydrate. Organization until this point had been fine but there were a few issues in the start area; not enough portaloos was the biggest problem.

We left the pen shortly after 9:50 as planned. This was not the start though; we were walked around some roads and waited a bit, so Garmin tells me the actual start was 10:26. The course ran through Kastrup and then down into the tunnel that precedes the bridge. It was warm until we entered the tunnel, then nice running conditions in the shade of the tunnel, busy with runners but not too congested. My first miles were the fastest, then it was a gentle uphill out of the tunnel and towards the bridge. As we emerged from the tunnel there was a noticeable headwind but the sky was overcast and it was not as warm as expected, phew!

By the time we got onto the bridge proper it was about half way through the race. Plenty of water stations with drinks in cardboard cartons; quite good for holding though I am not good at drinking much while running. The course did not allow for much in the way of spectators though stationary traffic on the other half of the bridge gave us some honks and cheers. 

The nature of the course is that you have a long gentle climb until you reach the centre of the bridge, and then a long gentle downhill to the finish. I should have been able to speed up more than I did, but not being in peak condition I continued at just over 7:30 mile pace. Coming into Sweden and off the bridge there were spectators and some nice crowd support. Then into the park, past a sign that said “200m to shine”, and a little kick at the end to finish on 1:39:34, just within my start wave prediction, 2895 of 40230 runners, and 6th of 340 in my age group.

The finish area at this point was busy but not too crowded. I received my medal and banana, got a free “selfie” from a Boozt stand, and wandered through the finish field looking for the bag trucks which turned out to be at the far end. Then I returned to the finish in search of friends and family.

Oh dear! I am not sure exactly when things started to go wrong, but the runners finishing at what should have been just under two hours, and later, were not able to run over the line because of congestion. They were forced to walk to the finish, with some complaining of 10-15 minutes wait; frustrating for those aiming to beat 2 hours. The reason was that the immediate finish area was not being cleared of runners fast enough; I remember from Manchester (a mere 30,000 runners) that this needs to be done quite aggressively by marshals otherwise you get exactly this problem.

The situation was worse because there was no segregation in the finish area between runners and general spectators so it was hard to move through the crowd. There should have been a sizeable runner-only area at the finish allowing a clear space to move into after completion.

Another common complaint was lack of signage, particularly to the bag collection area. Bag collection was fine for me; I was served by the same person who picked up my bag first thing in the morning. Later on though things fell apart; the trucks were apparently out of numerical order, bags were strewn around, spectators were allowed into the bag collection area and some thefts were reported.

Worse still was the transport away from the finish. There were coaches both back to Copenhagen, or to the nearest train station at Hyllie. There were no organized queues but lines formed, though with no real clarity as to which line was for which coach, and some ignoring the lines and heading straight for the road side. There were not enough coaches, and it began to be whispered that a collision on the bridge had delayed the Copenhagen coaches. Mobile internet or even voice calls barely worked so communication was poor.

Many of us took what seemed to be the least bad option, a 5KM walk to Hyllie, despite a friend messaging “don’t come to Hyllie” because of overcrowded platforms and lack of sufficient trains. For us, once we got to Hyllie all was well and we stepped straight onto a train to Copenhagen and even got seats.

This was not good though and many of the problems seemed to be avoidable, particularly the organization of the finish area, lack of finish area marshals, lack of communication, and shortage of food and water during the long enforced wait for transport.

Other runners complained about the tunnel section, cool when I ran it, but later on stifling hot from all the runners and the fact that the ventilation was not turned on until too late, apparently because it was noisy.

Of course all these problems soon fade from memory; it was a fantastic run and an unforgettable experience. Nobody knows when or if there will be another bridge run and I am glad to have been part of it.

Adidas Manchester Marathon 2025: second marathon and sub 3:30 achieved

This was my second marathon. The first was in October last year and went super well; I targeted 3:45, used the Pfitzinger/Douglas (Pfitz) 18/55 schedule (in the book Advanced Marathoning) for training, and while it was fatiguing I finished in 3:37 and (as I now know) in relatively good shape.

This time around I wanted to beat 3:30 and repeated Pfitz 18/55 but with faster pace. Training went well overall, no major injuries, and I mostly hit the workout paces though I find what he calls the V̇O2 Max sessions difficult to achieve; these are the most demanding sessions intended to improve one’s maximum rate of oxygen consumption during running.

Before the race

Got to Manchester Saturday afternoon, didn’t get to run at all though Pfitz schedules a 4 mile recovery run saying it is mainly there to keep you from fretting. Difficult to carb load when travelling but I did my best with a big bowl of cereal for breakfast followed by a bacon roll later, packed lunch with chunky cheese sandwiches and fresh fruit, then I consumed a mid-afternoon Ploughmans with a fruit smoothie and in the evening, a delicious goats cheese flatbread. I also drank loads of water, not sure exactly how much but several pints during the day. I think this did help as I was well hydrated before the race.

Set the alarm for 5:30am not that I needed to; didn’t sleep brilliantly. Cup of tea and sourdough roll early (Pfitz suggests eating 3-4 hours before running), more water. Then I headed for the start on the first tram from my hotel at about 6:25; no reason to be so early except that I didn’t have anything else to do! Always enjoy chatting with other runners and their supporters.

My first marathon had fewer than 1000 runners, this one claimed 36,000 though I am sure the actual number was a bit less. All a bit different though. Arrived Old Trafford tram stop, 10 minute walk to the start area. Dropped my bag at around 8:00am and was a little cold in my club vest, did some half-hearted short warm-up runs and took advantage of the portaloos. This was a success actually, the benefit of the early start meant that I had plenty of time to get ready as it were and had zero GI issues during the race.

I was in bronze wave which was the fifth to start after Elite, White, Red and Blue. Each wave had I gather up to 1800 runners which is biggish and I found myself towards the back of the wave for some reason. This didn’t matter as such, but the 3:30 pacers were towards the front and it wasn’t possible therefore to start with them. More on this later.

The Race

Off we go and I am trying to go no faster then a 7:45 pace (all my figures are in miles) and no slower than 8:00. Some congestion but it went fairly well and the miles started ticking by. Took an energy gel at the start and another 4 miles in. Skipped the first water station, grabbed a bottle at the second, but found drinking quite hard while running, I have learned that I can’t take a big gulp as it can easily turn into a coughing fit. Did my best; at least with the bottles you can carry them for a bit and take occasional sips.

After maybe 6 miles (can’t remember exactly), I catch up with a 3:30 pacer (there were two) and had a chat. Now, I knew from my Garmin that I was on target for sub-3:30 but of course having started at the back of the wave the pacers were a little in front. It was tricky though; the guy said he was currently running ahead of pace because he had a bathroom break and was now catching up with the other pacer. So I didn’t want to keep pace with him as it would be too fast. Off he went into the distance.

At the half-way point I finally caught up with the other 3:30 pacer. This was odd because he was now quite a way behind first guy. I asked about this and he said his fellow pacer was more than a minute ahead of time. He also said he was a bit ahead, and his plan was to to slow down at 26 miles and then wave people past to get their time. I concluded that my best strategy was to try and stay ahead of him.

I was more fatigued at this point than I was when half-way in October but there were two good reasons for that. One was that my pace was about 7:54/mile versus 8:16 or so in October. The other was the heat; we were running in up to 20 degrees Celsius and bright sunshine whereas October was overcast with occasional light rain and much cooler (I don’t know the exact temperature).

Another thought: for this event I trained in the cool of the winter and then ran in relatively warm conditions; where last time I trained in the heat of the summer and then ran in relatively cool conditions – an easier transition!

Anyway I was keen to get to 20 miles as Pfitz calls 13-20 the “no-mans land of the marathon” when you can easily lose pace. Kept the pace fairly well and was helped by the pacer because if he appeared beside me I knew I had to run faster!

Got to 20 miles and by this time I was seriously fatigued. I took my first carb-packed SIS beta fuel at this point and told myself it would help me to keep going.

The last 6 miles were tough. I can’t say I hit the wall; I lost a little pace but it wasn’t terrible – my slowest mile according to Garmin was mile 24 at 8:04 pace. Heat was getting to me, really needed water at the last drink station. It was difficult to drink enough, but poured the rest over my head, great idea and I should have done this before.

It is hard to describe the mental battle that was taking place in those last miles. I told myself to just keep running even though I no longer had the energy for it. I told myself to run fast so that the ordeal would be over quicker. I thought of my family and friends tracking me and did not want to disappoint them. And again, if the 3:30 pacer appeared, I did my best to run faster (and in the end, I did finish ahead of him, but a few seconds behind the other 3:30 pacer).

The crowd at Manchester was fantastic and it was great to hear all the shouts of encouragement including my name from time to time (name were shown on the bibs). I also passed plenty of runners walking and told myself that I would not do that. Just one parkrun to go. Just two miles to go. Then there is a sign that says “welcome to the finish straight,” great news but I did not have it in me to up the pace. Kept running, tried to smile for the camera, crossed the line, and then there was a weird moment: is it really OK to slow down now?

I was pretty sure that I had beaten 3:30 but did not get the exact time until later (not carrying a phone). 3:27:46, a personal best by over 9 minutes and a good for age for London next year I hope, with over 24 minutes below the required time (V65 M).

After the ordeal

Finishing a marathon can be anti-climactic. I felt good about my time but also very fatigued, and the first thing you do after finishing at a big event like this is quite a lot of walking, since the organisers have to keep the finish area clear. So picked up a bottle of water (good thinking!), walked to medal area, picked up tasty non-alcoholic tin of beer (chilled! Nice), walked to picked up bag, quite a long way with several lorries for each start wave, then walked to T-shirt area, then you come out of the finish area and eventually to a sign that says Piccadilly Station 14 mins walk, my hotel was near there so I just plodded on, eventually sitting down to a lovely latish lunch there with a cold beer and some fellow finishers.

I can’t really fault the organization, the start was smooth and on time, the facilities were good, the medal is nice, all very professional, but there is inevitably a lot of standing around at the start and walking at the end.

The pacers worked hard but were not ideal for me. I would prefer that they ran closer together and with even splits, though they did finish pretty much on the button.

While I was happy with my time it was actually slower than the 3:19 VDOT predicted from my best half in February; I think this shows the impact of the heat as my effort was as great or greater.

Despite piling on the suncream I caught the sun in a few spots, my advice if you are running this summer is don’t forget the back of your legs and all round your arms as that is where I went wrong. Wore a cap which I do think helped.

Finally, kudos to the Pfitz plan and book which got me through again without any calamities, such a great resource.

Creating a secure ASP.Net Core web application with Entra ID (formerly Azure AD) auth by group membership – harder than it should be

Several years ago I created a web application using ASP.NET and Azure AD authentication. The requirement was that only members of certain security groups could access the application, and the level of access varied according to the group membership. Pretty standard one would think.

The application has been running well but stopped working – because it used ADAL (Azure Active Directory Authentication Library) and the Microsoft Graph API with the old graph.windows.net URL both of which are deprecated.

No problem, I thought, I’ll quickly run up a new application using the latest libraries and port the code across. Easier than trying to re-plumb the existing app because this identity stuff is so fiddly.

Latest Visual Studio 2022 17.13.6. Create new application and choose ASP.NET Core Web App (Razor Pages) which is perhaps the primary .NET app framework.

Next the wizard tells me I need to install the dotnet msidentity tool – a dedicated tool for configuring ASP.NET projects to use the Microsoft identity platform. OK.

I have to sign in to my Azure tenancy (expected) and register the app. Here I can see existing registrations or create a new one. I create a new one:

I continue in the wizard but it errors:

This does not appear to be an easy fix. I click Back and ask the wizard just to update the project code. I will add packages and do other configuration manually. Though as it turned out the failed step had actually added packages and the app does already work. However Visual Studio is warning me that the version of Microsoft.Identity.Web installed has a critical security vulnerability. I edit Nuget packages and update to version 3.8.3.

The app works and I can sign in but it is necessary to take a close look at the app registration. By default my app allows anyone with any Entra ID or personal Microsoft account to sign in. I feel this is unlikely to be what many devs intend and that the default should be more restricted. What you have to do (if this is not what you want) is to head to the Azure portal, Entra ID, App registrations, find your app, and edit the manifest. I edited the signInAudience from AzureADandPersonalMicrosoftAccount to be AzureADMyOrg:

noting that Microsoft has not been able to eliminate AzureAD from its code despite the probably misguided rename to Entra ID.

However my application has no concept of restriction by security group. I’ve added a group called AccessITWritingApp and made myself a member, but getting the app to read this turns out to be awkward. There are a couple of things to be done.

First, while we are in the App Registration, find the bit that says Token Configuration and click Edit Groups Claim. This will instruct Azure to send group membership with the access token so our app can read it. Here we have a difficult decision.

If we choose all security groups, this will send all groups with the token including users who are in a group within a group – but only up to a limit of somewhere between 6 and 200. If we choose Groups assigned to the application we can limit this to just AccessITWritingApp but this will only work for direct members. By the way, you will have to assign the group to the app in Enterprise applications in the Azure portal but the app might not appear there. You can do this though via the Overview in the App registration and clicking the link for Manage application in local directory. Why two sections for app registrations? Why is the app both in and not in Enterprise applications? I am sure it makes sense to someone.

In the enterprise application you can click Assign users and groups and add the AccessITWritingWebApp group – though only if you have a premium “Active Directory plan level” meaning a premium Entra ID directory plan level. There is some confusion about this.

Another option is App Roles. You can assign App Roles to a user of the application with a standard (P1) Entra ID subscription. Information on using App Roles rather than groups, or alongside them, is here. Though note:

“Currently, if you add a service principal to a group, and then assign an app role to that group, Microsoft Entra ID doesn’t add the roles claim to tokens it issues.”

Note that assigning a group or a user here will not by default either allow or prevent access for other users. It does link the user or group with the application and makes it visible to them. If you want to restrict access for a user you can do it by checking the Assignment required option in the enterprise application properties. That is not super clear either. Read up on the details here and note once again that nested group memberships are not supported “at this time” which is a bit rubbish.

OK, so we are going down the groups route. What I want to do is to use ASP.NET Core role-based authorization. I create a new Razor page called SecurePage and at the top of the code-behind class I stick this attribute:

[Authorize(Roles = "AccessITWritingApp,[yourGroupID")]
public class SecurePageModel : PageModel

Notice I am using the GroupID alongside the group name as that seems to be what arrives in the token.

Now I run the app, I can sign in, but when I try to access SecurePage I get Access Denied.

We have to make some changes for this to work. First, add a Groups section to appsettings.json like this:

"Groups": {
"AccessItWritingApp": "[yourGroupIDhere]"
},

Next, in Program.cs, find the bit that says:

// Add services to the container.
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));

and change it to:

// Add services to the container.
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options =>
{ 
// Ensure default token validation is carried out
builder.Configuration.Bind("AzureAd", options);
// The following lines code instruct the asp.net core middleware to use the data in the "roles" claim in the [Authorize] attribute, policy.RequireRole() and User.IsInRole()
// See https://docs.microsoft.com/aspnet/core/security/authorization/roles for more info.
options.TokenValidationParameters.RoleClaimType = "groups";
options.Events.OnTokenValidated = async context =>
{
if (context != null)
{
List requiredGroupsIds = builder.Configuration.GetSection("Groups")
.AsEnumerable().Select(x => x.Value).Where(x => x != null).ToList();
// Calls method to process groups overage claim (before policy checks kick-in)
//await GraphHelper.ProcessAnyGroupsOverage(context, requiredGroupsIds, cacheSettings);
    }
    await Task.CompletedTask;
};
}
);

Run the app, and now I can access SecurePage:

There are a few things to add though. Note I have commented a call to GraphHelper; you might want to uncomment this but there are further steps if you do. GraphHelper is custom code in this sample https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/ and specifically the one in 5-WebApp-AuthZ/g-2-Groups. I do not think I could have got this working without this sample.

The sample does something clever though. If the token does not supply all the groups of which the user is a member, it calls a method called ProcessAnyGroupsOverage which eventually calls graphClient.Me.GetMemberGroups to get all the groups of which the user is a member. As far as I can tell this does retrieve membership via nested groups though note there is a limit of 11,000 results.

Note that in the above I have not described how to install the GraphClient as there are a few complications, mainly regarding permissions.

It is all rather gnarly and I was surprised that years after I coded the first version of this application there is still no simple method such as graphClient.isMemberOf() that discovers if a user is a member of a specific group; or a simple way of doing this that supports nested groups which are often easier to manage than direct membership.

Further it is disappointing to get errors with Visual Studio templates that one would have thought are commonly used.

And another time perhaps I will describe the issues I had deploying the application to Azure App Service – yes, more errors despite a very simple application and using the latest Visual Studio wizard.

Garmin Connect+: new subscription will be a hard sell

Garmin, makers of sports watches which gather health and performance data on your activities, has announced Connect+, a subscription offering with “premium features and more personalised insights.”

Garmin Connect+

Garmin Connect is the cloud-based application that stores and manages user data, such as the route, pace and heart rate, on runs, cycle rides and other workouts, as well as providing a user interface which lets you browse and analyse this data. The mobile app is a slightly cut-down version of the web app. Until now, this service has been free to all customers of Garmin wearable devices.

The company stated that Garmin Connect+ is a “premium plan that provides new features and even more personalized insights … with Active Intelligence insights powered by AI.” It also promised customers that “all existing features and data in Garmin Connect will remain free.” The subscription costs $6.99 per month or $69.99 per year. UK price is £6.99 per month or £69.99 per year which is a bit more expensive.

The reaction from Garmin’s considerable community has been largely negative. The Garmin forum on Reddit which has over 266,000 members is full of complaints, not only because the subscription is considered poor value but also from fear that despite the company’s reassurance the free Garmin Connect service will get worse, perhaps becoming ad-laden or just less useful as all the investment in improvements is switched to the premium version.

On the official Garmin forums an initial thread filled quickly with complaints and was locked; and a new thread is going in the same direction. For example:

“I paid £800 for my Descent Mk2s with the understanding that there WAS NO SUBSCRIPTION and the high cost of my device subsidised the Connect platform. The mere existence of the paid platform is a clear sign that all/most new features will go to the paid version and the base platform will get nothing. You’ve broken all trust here Garmin, I was waiting for the next Descent to upgrade but I will look elsewhere now.”

A few observations:

  1. Companies love subscriptions because they give a near-guaranteed and continuous revenue stream.
  2. The subscription model combined with hardware can have a strange and generally negative impact on the customer, with the obvious example being printers where selling ink has proved more profitable than selling printers, to the point where some printers are designed with deliberately small-capacity cartridges and sold cheaply; the sale of the hardware can also be seen as the purchase of an income stream from ink sales.
  3. A Garmin wearable is a cloud-connected device and is inconvenient to use without the cloud service behind it. For example, I am a runner with a Garmin watch; when I add a training schedule I do so in the Connect web application, which then syncs with the watch so that while I am training the watch tells me how I am doing, too fast, too slow, heart rate higher than planned, and so on. That service costs money to provide so it may seem reasonable for Garmin to charge for it.
  4. The counter-argument is that customers have purchased Garmin devices, which are more expensive than similar hardware from other vendors, in part on the basis that they include a high quality cloud service for no additional cost. Such customers now feel let down.
  5. We need to think about how the subscription changes the incentives for the company. The business model until now has included the idea that more expensive watches light up different data-driven features. Sometimes these features depend on hardware sensors that only exist in the premium devices, but sometimes it is just that the device operating system is deliberately crippled on the cheaper models. Adding the subscription element to the mix gives Garmin an incentive to improve the premium cloud service to add features, rather than improving the hardware and on-device software.
  6. It follows from this that owners of the cheapest Garmin watches will get the least value from the subscription, because their hardware does not support as many features. Will the company now aim to sell watches with hitherto premium features more cheaply, to improve the value of the subscription? Or will it be more concerned to preserve the premium features of its more expensive devices to justify their higher price?
  7. It was predictable that breaking this news would be difficult: it is informing customers that a service that was previously completely free will now have a freemium model. The promise that existing free features would remain free has done little to reassure users, who assume either that this promise will not be kept, or that the free version will become gradually worse in comparison with the paid option. Could the company have handled this better? More engagement with users would perhaps help.

Finally, it seems to me that Connect+ will be a hard sell, for two reasons. First, Strava has already largely captured the social connection aspect of this type of service, and many Garmin users primarily use Strava as a result. Remarkably, even the free Strava is ad-free (other than for prompts to subscribe) and quite feature-rich. Few will want to subscribe both to Strava and Connect+, and Strava is likely to win this one.

Second, the AI aspect (which is expensive for the provider) has yet to prove its worth. From what I have seen, Strava’s Athlete Intelligence mostly provides banal feedback that offers no in-depth insight.

While one understands the reasons which are driving Garmin towards a subscription model, it has also given the company a tricky path to navigate.

Changing my mind about open ear earphones

I have become a fan of bone conduction earphones. Initially this was because they are great for running since they let you hear everything going on around you which is important for safety. I also came to realise that pushing earbuds into your ear to form a seal is not the best thing for comfort, even though it can deliver excellent sound quality. Bone conduction earphones sound OK but not great, but I found myself willing to sacrifice audio quality for these other characteristics.

That said, bone conduction earphones do have some problems. In particular, if you attempt to wind up the volume you get an unpleasant physical vibration, especially on tracks that have extended bass.

There is another option, which I have seen described as air conduction or open ear. In this design, the sound driver sits adjacent to your ear canal. I tried one of these a couple of years ago and found the audio unbearably tinny. Unfortunately I concluded that this was inherent to this type of earphone and dismissed them.

Recently I was able to review another pair of open ear earphones which has changed my mind. The actual product is a Baseus Bowie MF1 though I do not think it is extra special in itself; however it is pretty good and the sound is excellent, better I think than my usual bone conduction earphones and without any vibration issues.

I notice that market leader Shokz has cottoned onto this and the Openrun Pro 2 (at a much higher price than the Baseus) has dual driver, with the low bass handled by air conduction, again avoiding the vibration problem.

The more I think about it, the more I like the open ear or air conduction idea. No fuss about ear sleeve size or needing a perfect seal; no discomfort from jamming something tightly into your ear; and, I now realise, very acceptable sound quality.

Out of Thin Air by Michael Crawley: a wonderful read

This is perhaps my favourite book on running, and I have read quite a few. The title is a play on words. The author lists two meanings, though I can find three.

Cover of Out of Thin Air by Michael Crawley

The first is that running has a mystique; “athletes who fly in, astound us with barely comprehensible feats of speed and endurance, and then vanish again into thin air,” Crawley writes.

The second and most important is that western media has tended to assume that “the performances of elite Ethiopian, Kenyan and Ugandan runners are produced almost directly ‘out of thin air’,” the reason being genetic traits or natural giftedness. This is patronising and wrong, and “masks the years of preparation and sacrifice that have gone into creating this illusion,” Crawley says, as well as the fact that the support of the Ethiopian state for running is “far superior” to that in the UK.

The third is that Ethiopians train at high altitude. The thin air has benefits, encouraging the body to adapt by creating more red blood cells, more blood vessels in the muscles, deeper breathing. Therefore running performance improves out of thin air.

It is timely that I write this Ethopia’s Tadese Takele has just won the men’s 2025 Tokyo marathon held on 2nd March, with a time of 2:03:23, and Ethiopia’s Sutume Asefa Kebede has won the women’s 2025 Tokyo marathon with a time of 2:16:31.

Crawley has two advantages over most others in writing this book. First, he is an outstanding runner. In 2018 he ran the Frankfurt Marathon in 2:20:53, putting him in the top 0.1% of runners, placing him 1084th best in the world for the marathon at the time, according to his world athletics ranking.

Second, he is an academic, an anthropologist who is an assistant professor at the University of Durham.

These two factors meant that when he went to Ethiopia between 2015 to 2016 to train with some of the country’s top runners, he both won the respect of the other athletes, and also brought with him unusual skills of observation.

The consequence is that as readers we become immersed in both the training and the life stories of the athletes. I have read other books about running in Africa but none has offered the same sense of being there as this one.

We learn about about what dedication to training means in this context; that the prize money for winning or placing high in major events is transformative and a big incentive for these runners; that training together with others is not just a matter of being in the same group but a deep connection of shared energy; that running on asphalt is the hardest kind of running and that natural surfaces are much preferred for training; that mixing different kinds of training, such as speed and terrain, even within a single session, is vital for progression; and that the transition from running well in training to performing in a foreign race is a difficult one that not everyone can manage.

There is much more and I felt a sense of loss when finishing the book. I look forward to reading it again.

Out of Thin Air is available from Amazon or from your favourite bookshop.