All posts by Tim Anderson

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 which 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 Managed 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.

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. 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.

AWS 5k re:Invent 2024 results

Yes I ran it again. It is a lot of fun but still very strange. Chip-timed but no results published! Well, they are published but hidden. Here they are:

https://www.athlinks.com/event/391331/results/Event/1097603/Course/2542986/Results

Note that nobody is named.

The leaflet that comes with the bib for the race says to use the QR code on the bib to view your results. That takes you to Girls on the Run Las Vegas who are receiving a donation thanks to the race. That’s great but I could not see the results there – there is a link to a 5K but it is not the AWS one.

Congratulations to 529 who was top with a time of 16:54. As for me, I was 136th – not bad out of 1089 and an improvement on last year by 36s.

AWS did provide finishers with a nice medal, a pair of socks, and a polaroid snap – how retro!

Facebook vs Reddit as discussion forums: why is Facebook so poor?

Facebook’s user interface for discussions is terrible. Here are some of the top annoyances for me:

  • Slow. Quite often I get those blank rectangles which seems to be a React thing when content is pending.
  • UI shift. When you go a post it shows the number of comments with some algorithmically selected comments below the post. When you click on “View more answers” or the comments link, the UI changes to show the comments in a new panel.
  • Difficult navigation. Everything defaults to the algorithm’s idea of what it calculates you want to see (or what Facebook wants me to see). So we get “Most relevant” and “Top comments.” I always want to see all the comments (spam aside) with the most recent comment threads at the top. So to get to something approaching that view I have to click first, View more answers, and then drop-down “Top comments” to select one of the other options.
  • Even “All comments” does not show all comments, but only the top level without the replies.

Facebook is also a horrible experience for me thanks to the news feed concept, which pushes all manner of things at me which I do not want to see or which waste time. I have learned that the only way I can get a sane experience is to ignore the news feed and click the search icon at top left, then I get a list of groups or pages I have visited showing which have new posts.

Do not use Facebook then? The problem is that if the content one wants to see is only on Facebook it presents a bad choice: use Facebook, or do not see the content.

Reddit by contrast is pretty good. You can navigate directly to a subreddit. Tabs for “hot” and “new” work as advertised and you can go directly to “new” by the logical url for example:

https://www.reddit.com/r/running/new/

Selecting a post shows the post with comments below and includes comment threads (replies to comments) and the threads can be expanded or hidden with +/- links.

The site is not ad-laden and the user experience generally nice in my experience. The way a subreddit is moderated makes a big difference of course.

The above is why, I presume, reddit is the best destination for many topics including running, a current interest of mine.

Why is Facebook so poor in this respect? I do not know whether it is accident or design, but the more I think about it, the more I suspect it is design. Facebook is designed to distract you, to show you ads, and to keep you flitting between topics. These characteristics prevent it from being any use for discussions.

If I view the HTML for a reddit page I also notice that it is more human-readable, and clicking a random topic I see in the Network tab of the Safari debugger that 30.7 KB was transferred in 767ms.

Navigate back to Facebook and I see 6.96 MB transferred in 1.52s.

These figures will of course vary according to the page you are viewing, the size of the comment thread, the quality of your connection, and so on. Reddit though is much quicker and more responsive for me.

Of course I am on “Old reddit.” New reddit, the revamped user interface (since 2017!) that you get by default if not logged in with an account that has opted for old reddit, is bigger and slower and with no discernible advantages. Even new reddit though is smaller and faster than Facebook.

Tip: If you are on new reddit you can get the superior old version from https://old.reddit.com/

My journey to a first marathon

Note: this is a rather personal post and probably not interesting for most people.

2023 was a year of running for me but what next? For runners the marathon always beckons; the most famous races in the running calendar are marathons (London, Berlin, Boston, Chicago, New York and Tokyo) and I felt that if I was ever going to run one, it should be soon as I am an older runner.

In 2023 I ran two half marathons but I knew that a marathon was a much harder challenge. In February 2024 I signed up for the Abingdon Marathon, 20th October 2024. I chose Abingdon because it was flat, and somewhat familiar as I grew up near there and it was my late grandmother’s home.

My son gave me a book called Advanced Marathoning by Pete Pfitzinger and Scott Douglas and known affectionately as Pfitz in the running community. The preface says, “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.” A bit ambitious for me but then again, I did want to run London one day and “good for age” looked like my best bet for getting in.

The book was excellent for me because it is science-based and the rationale for everything in it is explained in matter of fact terms. There are many ways to train for a marathon and our knowledge of how best to do it continues to evolve; but the schedules in this book are well proven. I picked the easiest training schedule which is called 18/55: an 18 week schedule in the which the maximum miles per week is 55. I counted back from my marathon date and put the mid-June starting week in my diary.

I had to pick a target pace since the schedule paces are derived from this. There were two factors. One, what was I capable of doing. Two, what did I need for London. I picked 8:30 per mile; somewhat arbitrary but I hoped it would work on both counts.

In a table of “sample long-run paces” on page 14 of the book, 8:30 is the slowest pace given for “marathon goal pace.” I felt therefore that I was picking the slowest pace which the authors felt was in scope for the book, though this is not explicit.

Incidentally I switched mentally from per KM pace to per mile pace because this book and many other marathon training guides and discussions primarily use per mile paces. The KM equivalent is always given but there is a bit of friction. I also came to prefer using the longer distance for my mental segments.

Note that you are not meant to start even the 18 week schedule from scratch. “These schedules are challenging right from the start and get harder as your marathon approaches,” say the authors. You need to be in what one might call half marathon fitness before you start.

Following the schedule

Although the schedule is 18/55 most weeks are fewer than 55 miles. The mean is about 40.5 miles. It is still a big commitment. Let’s say one averages about a 9:30 pace in the training; that is about 6:45 hours running per week, spread over 5 training sessions. Add on a bit of time for changing and showering and it is a lot to fit around a working week, and demanding for family and friends too.

When I trained for a half marathon I did so quite informally. A long run on Sunday and a daily jog, including parkrun on Saturday. I was sufficiently scared of the marathon that I decided to follow the schedule as closely as I could.

That said, I did not follow it exactly. For one thing, I carried on with parkrun and mostly ignored what the schedule offered for Saturdays. Second, I had races scheduled and these conflicted with the Sunday long runs. I worked around this either by adding a second run after the race (since the races were shorter than the scheduled long runs), or sometimes I just treated the race as the long run.

I did make sure to include four key long runs in the schedule. These were three 20 mile runs, and an 18 mile run with 14 miles at marathon pace. For most of these runs I actually did a bit more than the scheduled distance; it is quite hard to do them exactly unless you do the same route out and back and turn back home at half way. I preferred to do circular routes and in practice my longest run was between 22 and 23 miles.

I entered all the training runs as workouts on my Garmin. My “execution score” which measures how well I conformed to the scheduled pace was typically poor. One reason is that I live in a hilly area and it is hard to keep a pace. Second, I found it difficult to run slow enough for the recovery, warm up and cool down sections. Third, I found it hard to make the target pace especially early on in the training.

It sounds cruel, but the training runs often have you running at the fastest pace at the end of the run. The Pfitz “marathon pace” sessions for example get you to run say 5 miles at easy pace then 8 miles at marathon pace. The idea is to adapt your body to be able to maintain the pace when fatigued.

I was fortunate not to suffer much illness during the period. I picked up a bug when on holiday in July. I had to stop training for a few days but then resumed.

Core strength training and avoiding injury

Having suffered from plantar fasciitis and a second foot injury I was conscious of the risk during intensive training. There is a chapter in the Pfitz book called supplementary training and I regarded this as equally important as the training schedule. The reason is simple: if you do not do the core strength training you are likely to get injured, and if injured, you cannot train. A further benefit is that the strength training directly improves your running.

I followed the section called Core stability training and combined the exercises with others I had discovered, developing a workout that took around 40 minutes to complete, and doing this most days.

I did not experience any major issues with feet, calves or hamstrings during the training or indeed during the race and I feel that this is thanks to this exercise programme.

Tapering

The taper period in my schedule was the last three weeks. 20 mile run on the Sunday before, then a gradual reduction in mileage. Taper is known to be a difficult time and I had some little issues. One is that I had booked a half marathon race two weeks before, when the schedule said to do a 17 mile long run. I decided to run the half marathon as a training run, not at race pace.

The coach at my running club supported this, telling me an anecdote about a woman who missed qualifying for the commonwealth games after winning a half marathon two weeks before the marathon at which selection was decided. Her rival came second in the half, but won the second race and was duly selected.

I did not doubt the quality of the advice and started determined to run no faster than 8:15 per mile. With the race atmosphere and amongst the other runners I found myself running at 7:58. I slowed a little and did the second mile at 8:01. Then I was keeping pace with a friend from my club and chatting. He pulled ahead of me and I could not help myself, I stayed with him, then a few miles later passed in front. Mile 7 I did at 7:12. In the end I finished in 1:39:43 which was a half marathon PB for me – but what about the taper? What about my lack of self discipline?

After that I followed the taper schedule religiously, even skipping parkrun 8 days before the marathon because it was designated a rest day. It was a big change for me though, after 16 weeks of hard running. It felt like losing fitness.

In the week before the race, there was another issue. Weather. The forecast for 20th October was rain and strong winds, gusting up to 40 mph or so. The Great South Run in Portsmouth, scheduled for the same day, was cancelled. People signed up for Abingdon or the Yorkshire marathon (again same day) posted on Reddit about how to run in bad weather. It was hard not to be anxious. Perhaps the event would be called off, and all my training in vain. Perhaps a howling gale would make getting a good time impossible.

In the event, the weather was poor but not as bad as predicted. Phew.

The race

I did my best not to leave anything to chance. The day before, I ate a big spaghetti lunch before heading to the race hotel in Abingdon. Then a light evening meal with no alcohol, just a big glass of orange juice. On the morning, I got up at 6.00am and ate two bread rolls with jam. The idea is to go into the race well stocked up with the right kind of nutrition and well hydrated, but not to have toilet issues. Therefore one has breakfast three hours before the race.

I decided to run with minimum baggage. This meant leaving my smartphone behind, relying on the drink stations for water, and carrying only gels. I had running shorts with two deep pockets in which I stuffed 7 SIS isotonic gels, the same ones I had used in training – following the principle, nothing new on race day.

The course starts on the race track at Tilsley Park to the north of Abingdon. I arrived at about 7:45am and had a look round. It was somewhat bleak and the inflatable start/finish arch was not yet pumped up.

Tilsley park two hours before the start of Abingdon Marathon 2024

The venue was well organised though and complete with changing rooms. There was light rain but no gales. I got ready, and chatted to some of the other runners. The time slipped away; I had intended to do a short warm-up jog but a long queue for the bag drop meant I ran out of time. Headed to the track at around 8:45am; the sound system was not working very well and it was hard to hear the pre-race brief. The runners intending to finish in under 2:30 were encouraged to start near the front but any plans to sort other runners into pace groups seemed to be abandoned.

A few minutes later we were off. It is hard to describe but this was an emotional moment. I realise I am only a mid-pack club runner but 18 weeks intensive training leading up to this made it a big deal for me.

There was a little bit of congestion but this was a smallish race (fewer than 1000 runners in the end, some who had booked perhaps did not turn up because of the weather forecast) and it was not a big problem.

It did feel odd trying not to run too fast. Sam Murphy writes in her book Run your best marathon:

Research has shown that when marathon runners begin the race at a pace that is just 2 per cent quicker than their practised goal pace, they flounder over the final 6 miles. The reason this advice is so often repeated is because it is so rarely heeded.

Running a race induces something similar to flight or fight response where the stress of the occasion enables the body to out-perform. The race atmosphere and one’s determination to do a good time drives you to run as fast as you can; yet one knows that holding back is vital. It is a mental battle. “This feels peculiar, trying not to run too fast” I said to another runner and we chatted. A side-effect of deliberately slowing your pace is that you have more breath for talking.

But what was my target pace? I set it originally at 8:30. Calculators like VDOT said that based on my half marathon two weeks before, I could do 7:55 but I felt that was risky and over-optimistic. Nevertheless I had decided to try and go a bit faster than 8:30. I kept a close eye on my Garmin. If the pace went up above 8:15 I consciously slowed down. If it went below 8:30 I tried to speed up.

The race begins with a run east and then south into Abingdon. At about 5 miles I passed the house where my grandmother used to live, in the beautiful old town.

5 miles in, running past the house where my grandmother used to live in East St Helen’s St, Abingdon

Then you run out of town, and start a two-lap section where you run through a village, on into Milton business park, and back through a pretty village called Sutton Courtenay (where Eric Blair, also known as George Orwell, is buried).

The first 10 miles were a breeze. I chatted to another runner who said he was targeting a similar time to mine, around 3:40. Had he run a marathon before? Oh yes, he ran Manchester marathon in April in 3:18. You will be well ahead of me then, I said; but he thought he had not kept up his fitness. We ran together for bit, then he went ahead as expected. However he told me that I looked fit which was nice of him!

As it turned out I met him again in the latter part of the race and ended up finishing a minute or two ahead.

During the two lap section you see mile signs for the second lap as well as the first; that is, you see a sign for 16 when you are really on mile 8 etc. I do not know if this was part of the reason but miles 10 to 13 seemed to take ages and I was beginning to feel a bit of fatigue. I was keen to get half way, telling myself that it was downhill after that.

Mile 13 appeared eventually and I entered what Pfitz calls the “no-mans land of the marathon. You’re already fairly tired and still have a long way to go.” The book says that this is where you can easily lose pace; but I did not. The reason was that I was keen to pass 20 miles – the moment at which, some say, the marathon really begins.

I am not sure what it is about 20 miles but it is the point at which many runners find themselves having to slow down. Often they say they “hit the wall” though what runners mean by this varies. Sometimes it means literally being unable to run any further, more often it means losing pace or entering a run/walk phase.

Pfitz brilliantly calls the last 6 miles “the most rewarding part of the marathon … this is when your long runs, during which you worked hard over the last stages, will really pay off. Now, you’re free to see what you’ve got … this is the the stretch that poorly prepared marathoners fear and well prepared marathoners relish.”

I think this is brilliant because it sets you up mentally to look forward to the last 6 miles, if you have followed one of the book’s schedules, making it less likely that your pace will fail.

In my case mile 22 was my fastest mile, the only one under 8:00 according to the Garmin. In general though, while I did not really speed up, I did not slow down either.

The last two miles though were tough. I was extremely fatigued. Then again, I knew I was within reach of my goal time and determined not to stop now. I was also concentrating on not falling over. The Abingdon marathon is run mostly on open roads and you have to move between road and pavement, it would be easy to trip over a kerb when fatigued and your running form is slipping.

I passed the 25 mile sign. Then I was on a half-closed road and the marshalls were saying “not far now.” I entered Tilsley Park and then back onto the track. 600m to go. Tried to put in a little burst of speed at the end though there was nobody to overtake, or trying to overtake me. Then it was done, and a boy scout apologetically handed me my medal, not being tall enough to reach up and place it around my neck.

The finish

I placed 485 out of 995 finishers, and was 14th out of 44 in my age group 60-69. My time was 3:37:16 which is a pace of 8:18 per mile; however I feel a sense of achievement which is out of proportion to the actual result.

It may also be true that keeping pace right to the end means that I could have gone faster; it is difficult to know but perhaps, next time, I will risk holding back a little bit less in the early miles.

Running book review: The Art of Running Faster by Julian Goater and Don Melvin

I have mixed feelings about this book, first published in 2012. Most runners want to run faster. But how? Julian Goater, 1981 National Cross Country champion, shares his insights in this title. 

With a mixture of anecdote and specific training advice, he expands on six components of fitness: speed, suppleness, strength, stamina, skill and psychology. Some of his advice is uncontentious: do core strength training, for example, and do different types of training sessions including fartleks (short bursts of speed within a run), intervals, long runs and recovery runs. He is a enthusiast for cross country because “it gives you all-over, full-body fitness and resilience that will help you enormously when you run on quicker surfaces.”

All the above makes sense to me, but I am less sure about his advocacy of training twice a day. “To fit in the variety of training sessions you need, run twice a day most days,” he writes. This is not to get in more mileage overall, but more variety of short sessions.

Goater’s overall philosophy seems to me well summarised in a quote he references from Olympic gold medalist Sebastian Coe: “I’ve always felt that long, slow distance produces long, slow runners.” Goater feels that runners all too often get in plenty of miles but get too comfortable running at a steady pace and do not do enough speed work; and speed work, he says, must be above race pace otherwise it is useless. In fact it must be well above race pace. “To be effective, even your slowest speedwork should be done faster than your best pace for the distance below the one you are aiming for. If you are training for 10K, run your long sustained-speed repetitions at a faster pace than you can sustain for 5K,” he writes.

The author also states that “ideally, at least 80 percent of your running should be done at a comfortable cruising pace – but not just jogging.”  So he is not recommending speedwork above all else.

I did enjoy the book and especially Goater’s recollections of Coe, David Bedford, Steve Cram and other runners of his day. I think it could help me to run faster, if only thanks to his insistence on purposeful training and encouragement to put in more effort.

That said, I note the lack of references to scientific studies of the impact of different types of training. Rather, Goater relies on his own experience as a runner and a coach. 

A good book, but best read alongside other more rigorous training guides.

The Art of Running Faster by Julian Goater an Don Melvin (ISBN 978-0-7360-9550-1)

Running book review: Run your best Marathon by Sam Murphy

I like this book and recommend it, perhaps even for those not intending to run a marathon, or not yet.

Murphy is a runner and journalist, and takes the trouble to explain the science and to back up her statements with references to credible research. This is important because there are a surprising (to me) number of unresolved questions for those who want to optimize their running. Stretching, for example, before or after a run. “I’ve yet to find any evidence that stretching – of any kind – actually makes you run faster,” says Murphy. Does it reduce injury? “No clear effect,” she writes; but adds that there is evidence that if you think it helps, it does.

I would still call this matter of stretching unresolved. Julian Goater and Don Melvin, in their 2012 book The Art of Running Faster, have an entire chapter on the subject and say that “You do need to stretch – regularly … in my experience regular stretching is the key to avoiding injury.”

Murphy also has a down-to-earth section on how to choose trainers. “Many of the claims made about how shoes can protect or correct your feet are exaggerated or just plain wrong,” Murphy writes, with reference to research. She does confirm though that those super expensive carbon-fibre plate shoes are faster, but also notes some downsides. Comfort is the most important thing, she feels. I also like this great tip: when buying shoes, take out the insoles and stand on them. “Your whole foot should be within the boundary of the insole,” she says, otherwise you will have cramping which can be a disaster (it was for me).

The book takes the reader through the art and science of training, and then offers a set of training plans. She categorizes the plans as full throttle (training five days a week), steady state (mostly four days a week) and minimalist (mostly three days a week). In each category there are plans for experienced, and first timer. Runs are described as easy, tempo, marathon pace and so on; but you have to work out the exact pacing yourself, for which there is extensive guidance, as this depends on your capabilities and targets. 

These schedules are not as demanding as those in the classic book Advanced Marathoning by Pete Pfitzinger and Scott Douglas, nor is Murphy’s book as technical. Experienced runners would likely benefit more from the Pfitzinger and Douglas book; yet having read both, I still found Run your best Marathon useful.

Where this title wins though is in its approachability, down to earth style, and coverage of those small details which experienced runners seem just to know, but rarely explain. This is especially true in the second half of the book, about practicalities, body maintenance, how to choose a race, and nutrition/hydration. There is advice on exactly what to eat and drink, and how much, even down to tips like how to drink while running, without choking or coughing. There is also a complete checklist of what you might need for race day, though I am not sure about the bin liner she suggests for keeping dry before the race!

The book is very approachable and especially suitable for those contemplating their first marathon (as I am). Much of it applies to other distances as well, certainly longer runs of 10 miles or more, and there is so much general running advice that it may be worth a read even for those who have no intention of subjecting their bodies to a gruelling 26.2 mile race.

Run your best Marathon by Sam Murphy (Bloomsbury, ISBN 978-1-4729-8952-9)

Running book review: The Race against Time by Richard Askwith

I picked up this book, sub-titled “Adventures in late-life running”, because it seemed a good fit for my own situation, having taken up running as I approach retirement age.

It is not quite what I expected. Askwith’s first love is fell running, which he used to do intensively when younger. He recounts in the first chapter how he returned for a reunion fell run, now in his early sixties, and his reflections on the toll of age on his performance and that of his friends. 12 of them came for the reunion but only 4 actually ran, the others declaring themselves unfit for more than walks and socialising.

What we get in the subsequent chapters is a series of portraits of older runners, most much older than their sixties, backed up with interviews: why do they run in old age, how do they train, what is their story?

There are also interviews with experts on the subject of old age and fitness, and the whole book is punctuated with Askwith’s reflections on aging, mortality, and a few of his own recent experiences of running.

Curiously this is a book which I enjoyed less as it went on. Askwith’s constant self-deprecation becomes tiresome, and he seems almost unaware of the frustrating contradictions which he presents. How much should you train? Not too much and focus on HIIT (high intensity interval training) according to an interview with Peter Herbert. – you can read more about his approach here. Yet we also hear from the amazing Tommy Hughes a world record (for age) marathon runner and how he runs 20 miles a day in training. Or by contrast Angela Copson, who according to the book hardly trained at all for the 2007 London Marathon, other than running alongside her husband riding a bike, but achieved under four hours as a sixty year old woman.

It is all fairly confusing if you come to the book looking for advice on how to run well as an older person; and in fact you should look elsewhere for that kind of advice.

On the other hand, Askwith does put in the hard work of going out and interviewing numerous interesting older runners and for that, the book is well worth a read.

https://amzn.to/3LGn44d