Monday Morning Weigh In

Big week on the bike.

Two long days, two recovery, and a MTB ride.

Still making steady progress.

Taking it week by week. The massive jump was water weight. I lost 9# on my Sunday ride.

I also purchased a Whoop recovery wrist strap and subscription. I believe my problem has always been inadequate recovery so I’m giving this thing a shot. So far it’s been telling me what I already feel. After Sunday’s crushing ride yesterday was a “red” day (take a break). Today is a yellow (do some lighter aerobic work), and tomorrow should be green (do a hard workout) if I play my cards right today.  

I also turned 40 Friday. So that’s fun.

Rough plan for this week is a easy 30-45min ride on the trainer Tuesday. VO2 intervals Wednesday, easy ride Thursday and Friday. Crush myself either Saturday or Sunday with a 4-5 hour ride.

Weight Loss

Comments Off on Monday Morning Weigh In


Monday Morning Weigh In

Had a good week last week. Got my power meter pedals installed so I can confirm that my aerobic fitness is terrible. Just got to keep plugging away.


Mostly just riding along super easy (HR ~130). 

Wednesday I did a VO2 max workout on the trainer. Sufferfest’s “A Very Dark Place”. It’s a simple 5x4min VO2 workout. 

I plan to do that once a week and maybe throw in something like Sufferfest’s “Hell hath no fury” (2x20s) to mix it up.

This does make me wonder if it’s possible to make meaningful aerobic improvements while losing a significant amount of fat weight. Last time I undertook this process in 2015 my aerobic fitness did not change at all.

How’s the weight loss coming? It’s falling off as I planned.

Proceeding as planned.

Next DEXA is October 12th. I should be just into high 160s by then. I am guessing 168 or so.

Weight Loss

Comments Off on Monday Morning Weigh In


Monday Morning Weigh In

Monday is here and I’m feeling FLAT.  Still riding slow trying to keep my heart rate under/around 135.  Pulling my 3 year old around in the bike trailer reinforces the slowness.

Diet has been going well. Snacking is mostly gone and I’ve been able to stick to “no eating after dinner”.  Since we eat around 5:00PM (thanks kids!) this gives me a solid 12 hours without food every day.

Starting to play with my indoor training setup. I’ve never been able to “just ride” on an indoor trainer. I always need a structured workout to get through.

Last Week in Cycling

I’ll do a weigh in tomorrow. If i see averages around 175 this week I’ll know I’m still on track.

2018/09/11 Weigh in

Still heading in the right direction!

Indoor Training
Weight Loss

Comments Off on Monday Morning Weigh In


Monday Morning Weigh-In

Did around 10 hours on the bike last week / weekend. Got a 4.5hour ride in on Sunday and a couple other 2 hour rides at a SUPER slow pace.

I’m attempting to actually follow the MAF approach. For me, at 40 years old and my current shape that means riding around at 135 BPM or lower for hours on end. I’m embarrassingly slow but in all my years of training and stagnation this is the approach I have not tried correctly.  I’ll do a MAF test this week (warm up for 15 mins, ride at 135 BPM for about 30 mins, cool down for 15, record power). By my next DEXA scan in 6 weeks if I’m doing this correctly there should be a nice power improvement at that heart rate.

And now for the pictures.

This is an image of my lifetime graph from my Withings scale. I’ve highlighted my lowest weight at the end of 2015. I only lost .5LB of muscle according to all of my DEXA scans when I lost all that weight.

And here is my last 30 days picture.

Weight Loss

Comments Off on Monday Morning Weigh-In


Baseline DEXA Scan Results

So I had my first DEXA scan today. It was not pretty.

31% body fat, nearly 54 pounds of the stuff. I had some success with my current approach in 2015, and a failed attempt in 2016 when I tore my AC joint downhill mountain biking. 

It’s day four of not drinking & no snacking after dinner. I keep trying to grab a handful of chips on my way by the kitchen but remind myself NO.

To be continued…

Weight Loss

Comments Off on Baseline DEXA Scan Results


The road to race weight

I once again find myself in the familiar position of having to lose a bunch of weight. Excuses abound but really I just stopped caring over the last two years.

My target race weight is right around 140# and 10-11% body fat based on previous DEXA scans and experience. I was here in January of 2016, having hit 186 after having our first son and moving to Denver from the east coast. I was able to maintain 1-2 pounds per week of weight loss until I hit 150 and then it slowed WAY down.



I am currently 180#.

So what is my plan? Start simple.

  • Stop drinking.
  • Stop snacking after dinner.
  • Start working on the aerobic base riding the bike super slowly for around 10 hours a week.

I have a DEXA scan scheduled for tomorrow and I will schedule a follow up every 6 weeks, it really helps me stay on track and focused.

I will be stepping on the scale every day. Maybe there is some WordPress widget that will upload my current weight. Yes a lot of people say thats overkill, useless, demotivating, etc. Not for me, I believe you really do get what you measure.

So, here we go. I’m putting this out into the world in hopes that it serves as another point of accountability.

Weight Loss

Comments Off on The road to race weight


Spring.Net Cache & Complex Keys

So you want to cache the results of a service dll using the Spring.NET CacheResult attribute… But your class takes a List or complex object as part of the method call. No worries, you can use a helper class to generate your cache keys for you!

So my problem, I wanted to cache the result of this method call:

No problem, I’ll just slap a CacheResult attribute on the method and have Spring do the work for me!

All looks good! AspNetCache is defined in my Spring.Config to use the built in ASPNetCache and the CacheKey is generated using SpEL (Spring Expression Language). It can do nice things like get property values on your object if you pass in a complex type, or test conditions. Read up if you are not familiar with the syntax.

Well after some testing all is not well. All calls to the method are resulting in the same data being returned. So i do a little bit of debugging and find this!

Well I guess SpEL doesnt magicly handle collections when creating a cache key. After some digging I discover that SpEL can invoke CLR objects! This means we can use a helper class to generate the cache key. This has the added bonus of letting us toss some tests around the key generation since this could have quite easilly slipped out into production if we were not careful.

CacheKeyHelper to the rescue.

So lets change tha Key string so it uses this new calss.

Well that doesnt work. SpEL doesnt cleanly handle generics yet. Then I remember that SpEL can invoke objects that are registered in the spring config using @(ID_NAME).Method syntax.

XML to the rescue!

So I declare an instance of the CacheKeyHelper class for string types, and I modify my CacheResult attribute to use this new instance.


Software Development

Comments Off on Spring.Net Cache & Complex Keys


Mediawiki SEO: 301 redirects

I was asked to change Mediawiki’s #REDIRECT handling from transparent redirects to SEO friendly 301 redirects. I tried to create some extensions but none of the hooks seemed to provide a way to change the redirect functionality the way I needed to.

Turns out I only needed to edit Article.php and Wiki.php with very minor 1 line changes. Haven’t seen this posted anywhere else so enjoy.

#Article.php - Changed line 32 to return $rt->getFullUrl();
function followRedirect() {
  $text = $this->getContent();
  $rt = Title::newFromRedirect( $text );

  # process if title object is valid and not special:userlogout
  if( $rt ) {
    if( $rt->getInterwiki() != '' ) {
      if( $rt->isLocal() ) {
              // Offsite wikis need an HTTP redirect.
              // This can be hard to reverse and may produce loops,
              // so they may be disabled in the site configuration.

              $source = $this->mTitle->getFullURL( 'redirect=no' );
              return $rt->getFullURL( 'rdfrom=' . urlencode( $source ) );
      } else {
          if( $rt->getNamespace() == NS_SPECIAL ) {
              // Gotta handle redirects to special pages differently:
              // Fill the HTTP response "Location" header and ignore
              // the rest of the page we're on.
              // This can be hard to reverse, so they may be disabled.

              if( $rt->isSpecial( 'Userlogout' ) ) {
                  // rolleyes
              } else {
                  return $rt->getFullURL();
          return $rt->getFullUrl();

  // No or invalid redirect
  return false;
#Wiki.php - Changed line 11 to $output->redirect( $article, "301" );
function initialize ( &$title, &$output, &$user, $request) {
    wfProfileIn( 'MediaWiki::initialize' );
    $this->preliminaryChecks ( $title, $output, $request ) ;
    $article = NULL;
    if ( !$this->initializeSpecialCases( $title, $output, $request ) ) {
        $article = $this->initializeArticle( $title, $request );
        if( is_object( $article ) ) {
            $this->performAction( $output, $article, $title, $user, $request );
        } elseif( is_string( $article ) ) {
            $output->redirect( $article, "301" );
        } else {
            throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle() returned neither an object nor a URL" );
    wfProfileOut( 'MediaWiki::initialize' );
    return $article;

Software Development

Comments Off on Mediawiki SEO: 301 redirects