4 x 20′ L4


  • 4 x 20′ / 1′ rest
    • L4 format (1′ @ 21, 3′ @ 20, 3′ @ 19, 3′ @18)
    • 8 x 10′ pieces

Really nice and easy.  My lower back is bother me a little, but not enough to impact what I’m doing.

Screen Shot 2016-01-31 at 4.18.32 PMScreen Shot 2016-01-31 at 4.18.19 PM

Workout Summary – Jan 31, 2016
–_|_19828_|_80:00.0_|_02:01.0_|_197.4_|_19.4_|_135.9_|_ 65.2% _|_12.8_|_10.2
Workout Details

01_|_02481_|_10:00.0_|_02:00.9_|_197.9_|_19.5_|_126.4_|_ 58.4% _|_12.7_|_10.1
02_|_02483_|_10:00.0_|_02:00.8_|_198.4_|_19.5_|_134.9_|_ 64.5% _|_12.7_|_10.2
03_|_02481_|_10:00.0_|_02:00.9_|_197.9_|_19.5_|_135.0_|_ 64.5% _|_12.7_|_10.2
04_|_02476_|_10:00.0_|_02:01.2_|_196.7_|_19.4_|_139.2_|_ 67.6% _|_12.8_|_10.1
05_|_02480_|_10:00.0_|_02:01.0_|_197.7_|_19.4_|_135.8_|_ 65.1% _|_12.8_|_10.2
06_|_02474_|_10:00.0_|_02:01.2_|_196.4_|_19.3_|_139.2_|_ 67.5% _|_12.8_|_10.2
07_|_02480_|_10:00.0_|_02:01.0_|_197.8_|_19.4_|_136.6_|_ 65.7% _|_12.8_|_10.2
08_|_02474_|_10:00.0_|_02:01.3_|_196.2_|_19.3_|_140.5_|_ 68.4% _|_12.8_|_10.2

Tomorrow:  Scheduled for a rest day, but since I will be flying to Munich on Monday night, I will take my rest day on Tuesday, and do Tuesday’s 4×1000 tomorrow morning.  Last week I did this with an avg pace of 1:40.4.  I’ll aim right around 1:40 and see how I do.

Pyramid of Pain

Back to the lake.  It beckoned to us.  No ice at all and flat water.  I wanted to row so badly.  Oh well, we had to satisfy ourselves with the view out the window.


The plan for today

  • fletcher 20′ warmup
  • Sprint Pyramid
    • 1’/2’/3’/4’/3’/2’/1′
    • equal rests
    • Pace target: 1:41
    • Rate target: 30
  • 2K cool down

I felt OK during the warmup.  I pushed it too fast at first, and looking at the HR data later, it was a bit high.  I did not like my erg at all.  Sounded like grinding gears, and near the finish it felt like the connection to the flywheel was “mushy”.  Not sure why, but it was definitely a sub-par erg.  I blame it for my lousy performance.

The warmup.  First 4 minutes should have been closer to 2:05.  The second to 2:02.

2016-01-30 10.26.23

The the main event.

2016-01-30 10.26.32

2016-01-30 10.26.43

The cool down

2016-01-30 10.27.03

And the HR plot.  I was working very hard for those crappy splits.

Screen Shot 2016-01-30 at 2.35.33 PM

Tomorrow:  4×20’/1′

Using Painsled with Excel

The story goes back to rowpro.  A rowpro user (danburpee) on what was then the concept2 UK user forums invented a spreadsheet to process the csv files that rowpro can export for a workout.  This template was improved and modified over time and is a very useful tool to analyze workouts.  I started with the spreadsheet and adapted it to be used with crewnerd,  RIM, speedcoach and the yahoo fitness app.  When I found out that someone was creating an app for the iphone (and android i guess) that allowed one to log data from the PM3 and PM4 (via USB) or PM5 (via BT), I thought I needed to give it a try.  The app is called Painsled and it is still in beta, but is quite functional as far as I can see.

Right now the app is a bit primitive.  It essentially just logs data from the PM and stores it.  Then that data can be exported as tcx, json, or csv files.  Getting the data off the iphone requires you to plug into itunes and move files to your computer, but I imagine that this will be improved in the future.

I did some workouts with the app and exported the CSV and took a look at what you get.  It’s very different from the exports from the other  tools in a number of ways.

  1.  There is essentially a record for each “event” that comes from the PM.  So, every update of HR, or change of stroke state generates a record in the file
  2. Not all the parameters are logged in each record
  3. There are 31 (31!) fields of data

The result of this is that even short workouts generate really long csv files.  All of my tools assume that the CSV data is formatted in a more concise format.  Essentially one record per stroke, or per set distance or per set time.  Also that every field has valid data for each record.

I experimented with a couple of ideas.  I tried to read it all into excel and concatentate the data there, but because of the sheer number of rows, the performance was miserable.  It was also a pain to do what was essentially a sequential task in a programming environment that was sheet and formula based.  Ultimately I decided that I needed to preprocess the data.

I decided to make the data look as much like the export from my speedcoach as possible.  That is the excel workbook that I have done the most work on, and the file format is very straightforward.  I decided that I would tailor the workbook for painsled, but try to keep it as close as possible to the speedcoach starting point as possible.

I built a script in python called pspack2.py.  You might guess that the name means that it was my second attempt.  Actually, it is more like my fourth, but that’s not important.  I’ve posted the script here : pspack2 (apologies about posting it as PDF, apparently wordpress doesn’t like me posting text files.)

The script is straightforward.  You pass it the filename you want processed, and it does the following.

  1. Scan the file for records that indicate that the stroke state is recovery and save the indices
  2. Read each record of the file and maintain the last valid numerical value for each field.  Basically carrying the last valid value down through all the following records
  3. When you hit a record  that is a “recovery record”, write the current values for the fields to the output file.  I massaged the data field order and formatting to match the speedcoach template.

Then in the excel file, I just adjusted the axis scaling on the graphs to line up with erg splits instead of boat splits, and it worked great.  Here is the current file: Painsled Template Rev – (note:  you need to change the file extension from .xlsx to .xlsm for the file to function properly.  Also note, this works only on excel 2010 and later on windows)

This is not completely done.  There are three enhancements that I want to work on.

  1. Painsled logs distances on a per interval basis, versus accumulating like rowpro.  I will put some math in the script to change that, but it hurt my head to think it through right now.
  2. I like to look at watts, so I will add graphs  to the spreadsheet for that
  3. I want to build a time based interval text summary tab.

But, it works well enough for now and I had some fun playing with python again.

Screen Shot 2016-01-29 at 9.00.43 AMScreen Shot 2016-01-29 at 9.01.00 AM



3 x 20′ L4 : The Painsled era begins

While I was riding airplanes, I had enough time to fiddle around with the Painsled “.csv” output files.  I will post a note about that later on, but I now have the beginnings of a workable workflow.  An indication of how obsessed I am with the “big data” aspect of training, it feels like a big relief to be able to make my pretty charts.

The plan for today:

  • 3 x 20′ / 1′ rest L4
    • 10W/stroke
    • same stroke sequence as Wednesday
  • Peak power training

I felt very sore and tired this morning and the my RPE was quite high in the workout.  HR was on the high side, but reasonable.  I was also feeling some soreness in my lower back.  After the second 20′ piece, I decided that I would not do the peak power stuff today to give my back a bit of recovery time.

Oh happy day!  Plot from Painsled!

Screen Shot 2016-01-29 at 9.01.00 AMScreen Shot 2016-01-29 at 9.00.43 AM

Tomorrow:  The training plan calls for a repeat of the 8×500.  But, I managed to get a few folks interested in a group workout at the boathouse, so I wanted to come up with something new and different.  Time based workouts are better for a group, and I think that this group might really like the sprint pyramid workout. So, this is what I’m thinking is:

  • 1′ / 2′ / 3′ / 4′ / 3′ / 2′ / 1′
  • Equal rests
  • Pace target: ~2k race pace
  • Rate Target: 30

6 x 750 / 4′ rest (post red eye)


  • Arrive in Boston at 6AM from LAX
  • Drive to work
  • Change into workout clothes
  • Fletcher 20′ warm up
  • 6 x 750 / 4′ rest
    • Pace Target: <1:41 (last time 1:41.1, thanks to a blistering last interval)
    • Rate: 30
  • 2K cool down

Low expectations would be an adequate description of my attitude going into this session.  I felt tired and a bit queasy after the flight.  I must have slept a fair amount, I don’t remember taking off and I don’t remember much from the flight itself, but I didn’t feel very rested.

The warmup was awful.  I thought it would be pretty humiliating to HD in the warmup, so I kept going.  The speedy bits actually were not so bad toward the end.

2016-01-28 08.28.14

The main set.  I decided to try to go out at a 1:40 pace.  I was ahead of the target through the first 500m of the first interval and I started to feel less than ideal.  I slowed a bit and let the pace drift up.  Rep 2, I decided to stick to my 1:41 plan.  It still sucked.  I decided that 1:42 might be a wiser choice.  It was.  The next rep went a bit better.  I got cocky.  I decided to try to focus on rate and stick with 30 and see what happened.  Well, I was faster, but I wanted to die at the end of the rep.  So, Rep 5 was just about surviving at 1:42.  Then rep 6, I actually tried to lay down a faster last, but with 250m to go, I nearly lost gastro-intestinal control and I barely made to the end in one piece.

End result: 1:40.8.  Way too much drama for a 0.3 sec improvement.  But I didn’t bail on any reps.  I was annoyed by the intermittent and laggy HR data on the PM5.  I’m not sure if it’s the PM5 or the strap.  I suspect the former, since I’ve never seen this with the strap connected by BT to my phone.

2016-01-28 08.28.22

Finally, I struggled through a 2K cool down

Tomorrow:  3 x 20′ / 1′ plus peak power

Wednesday: 3×20 L4 plus Peak Power


  • 3×20 L4
    • 6 x 10′ : (1’@21, 3’@20, 3’@19, 3’@18)
    • 10W / stroke (so 18spm => 180W, etc)
    • 1′ rests
  • Peak Power Training
    • 15 x 10″ / 1′ rest
    • target > 700W peak in each rep.

This morning I was at crossfit anaerobic.  A gleaming, large box just four tenths of a mile away from my hotel.  I walked there in about 10 minutes.  I met Kim who took my twenty bucks and pointed me to the ergs.  I was tucked away from the class so I didn’t have the nice visual distraction for most of my workout.  The erg was smooth as silk, and clean enough to give me a drag factor of 200 when set to 10 for the peak power stuff.

I had another customer dinner and another big steak last night.  But I am ashamed to admit, when I got back to the hotel around 10, I felt a little hungry.  Luckily, there was nothing to snack on.  This morning, other than a little dehydration, I felt fine.

The 3×20 was uneventful.  I was listening to “Hamilton” (the musical) and with the rate changes, the time passed quickly and easily.  HR was right around the UT2/UT1 border for the whole row, and continued to drop nicely during the 180W bits, just the way I wanted it to.

2016-01-27 07.13.02

After that, I had a quick drink, toweled off, pushed the damper up to 10 and programmed the erg for 1’10” intervals with no rest.  This is peak power training and the goal was to do a standing start and about 8 hard strokes over 10 seconds.  I was trying to get over 230W on my first pull and over 700W for my peak stroke.  I managed to get over 700W for almost all of the sprints, and topped out around 720W.  I didn’t fade much through the workout.  The first pull was more erratic.  If I hit it just right, I would pull a 235 to 240W first stroke.  But if I overcompressed, or open my back early in the first stroke, I would fall down to 220 or below.

I am enjoying these sessions. I’m worrying that I am doing them wrong since I don’t seem to fade as much as the instructions say I should, but I don’t think I can pull much harder!

Here’s the HR plot for everything, including my walk to the gym.  I like the way the sprints look at the end.

Screen Shot 2016-01-27 at 9.03.33 AM


Tuesday: 4 x 1K / 5′ rest – Progress


  • Fletcher Warmup
  • 4x1K / 5′ rest
    • Pace: <1:42
    • Rate: 30
  • 2K cool down

This morning I paid a visit to the good folks at Crossfit Del Mar.  $20 for a day pass and I had my choice of any of the well used and nicely maintained Model Ds to choose from.  The people were nice and the crashing of weights certainly provided a good distraction.  I could tell this place was well run by just how good the form was on all the folks in the class doing a cool power clean/jerk combo.  They must be serious about coaching proper form on these lifts.

The workout was tough.  I was out last night for dinner with a customer.  It ended early, but still a gigantic steak and couple of glasses of wine probably didn’t help.

The warm up felt sluggish and hard.

2016-01-26 06.34.36

The main event was interesting.  I felt awful in the first rep.  I went out hard an I was looking at sub 1:40 pace about halfway through, but I felt like I needed to ease up.  I bled off a bit of pace and cruised to the finish.  I was still more than a second ahead of target for the rep, but I felt significantly more damaged than I did last week after rep number 1.

For rep 2, I chatted with myself and reminded me that the target was 1:42, and that’s OK.  I big improvement over a week.  So, this time I settled more quickly and played around a bit with rate keeping the pace dancing between 1:40 and 1:41.  I was looking at 1:41 with about 20 strokes to go, and I pushed the finish a bit.  Aww crap, I finished it faster than rep #1.  I felt honor bound to try for a negative split session.  Actually, I felt a little better after rep #2 than rep #1.  And 5 minute rests are luxuriously long.

So, into rep 3.  I knew I wanted something faster than 1:40.7, but I was reluctant to push it too hard.  I basically cruised along around 1:41 and goosed the last 20 strokes. 1:40.4

Now the finale.  I busted out of the gate pushing 1:38s.  That lasted about 10 strokes.  I drifted to 1:39s.  By the time I was 30 strokes in, I was in survival mode.  I was not going to let the rep go, but I was in deep trouble,  I dropped back to 1:41s for nearly 500m and the avg pace climbed up to 1:40.5 or so.  With about 30 strokes left, I started pushing really hard and I saw the avg start dropping.  With 10 left, I saw the avg dip below 1:40, and kept pushing.  I finished with 2 strokes at 1:35.

So, a 1:40.4 avg pace for the workout.  That’s 0.6 faster than when I did this workout before the 2014 crash-bs and with a lot less drama, and that year I went 6:37.6.

2016-01-26 07.07.37

I did a 2K cool down and headed back to my hotel walking a bit taller.

2016-01-26 07.18.04

Here is the HR profile for the workout.  Lower HR than I expected to see.

Screen Shot 2016-01-26 at 9.12.02 AM

Tomorrow:   3×20 plus peak power at anaerobic crossfit in Newport Beach.

Sunday: 4×20 L4

Easy row.  Nothing to report.

Screen Shot 2016-01-24 at 6.44.44 PMScreen Shot 2016-01-24 at 6.44.30 PM

Workout Summary – Jan 24, 2016
–_|_19765_|_80:00.0_|_02:01.4_|_195.5_|_19.2_|_134.8_|_ 64.4% _|_12.8_|_10.2
Workout Details

01_|_02461_|_10:00.0_|_02:01.9_|_193.3_|_18.9_|_126.5_|_ 58.5% _|_13.0_|_10.2
02_|_02460_|_10:00.0_|_02:02.0_|_192.9_|_18.9_|_132.4_|_ 62.7% _|_13.0_|_10.2
03_|_02480_|_10:00.0_|_02:01.0_|_197.7_|_19.4_|_132.1_|_ 62.5% _|_12.8_|_10.2
04_|_02475_|_10:00.0_|_02:01.2_|_196.5_|_19.4_|_135.0_|_ 64.5% _|_12.8_|_10.1
05_|_02474_|_10:00.0_|_02:01.3_|_196.3_|_19.3_|_134.4_|_ 64.1% _|_12.8_|_10.2
06_|_02472_|_10:00.0_|_02:01.4_|_195.8_|_19.3_|_139.9_|_ 68.0% _|_12.8_|_10.1
07_|_02471_|_10:00.0_|_02:01.4_|_195.6_|_19.4_|_136.2_|_ 65.4% _|_12.7_|_10.1
08_|_02472_|_10:00.0_|_02:01.4_|_195.8_|_19.3_|_141.4_|_ 69.0% _|_12.8_|_10.1


Tomorrow:  Rest day.  Off to San Diego.

Saturday Sprints: 8 x 2′ / 3′ rest


  • Fletcher warmup (20′)
  • 8 x 2′ / 3′ rest
    • Pace target: 1:41
    • Rate target: 30
  • 2K cool down

What a great morning.  8 of us from our club met up at Regatta Point.  They are letting us move our ergs into a conference room for sessions on Saturday mornings.  I offered up my planned workout as a group session and I was stunned that 7 other folks were nuts enough to join in.  I offered the group a couple of options, either row the 8 as a ladder (24/26/28/30/30/28/26/24), or all at about race rate.  The cool thing about time intervals is that folks can do their own thing and stay in sync through the session.  By the sixth, we were all pretty beaten up.

I was in a bad way.  I basically treated the session like my normal 8×500/3’30” rest.  Of course, its about 20 seconds more rowing and 30 seconds less rest than that, so I dug myself in pretty deeply over the first half of the workout.  I backed off a bit, but didn’t give in to the HD demons.  I think I may have scared my neighbors a bit though.

I had some issues with my HR monitor, so all I have are monitor snaps

Warm up

2016-01-23 10.31.15

Main set

2016-01-23 10.31.27

I paddle the  7 3′ rests for a total of an additional 2773m over 21′.

Happy Ending Cool down

2016-01-23 10.31.42

Tomorrow: Should be a rest day, but I’ll be traveling on Monday, so I will do a 4 x 20′ L4 and not row on Monday.


Friday: 4 x 20′ / 1′ L4 (and PM5 glitch)


  • 4 x 20′
    • 1′ rests
    • 8 x 10′ segments – L4 format (2’@ 18, 2′ @ 19, 2′ @20, 2′ @ 19, 2’@ 18)
    • 10W / stroke

2016-01-22 08.33.19

I had a problem with the PM5 today.  Notice in the picture how there is no HR for the last interval?  So, I was rowing along with 2 minutes left in the last interval, so 78 minutes into a 80 minute row, and all the sudden, this pops up on my screen.

2016-01-22 08.31.21

So, I kept rowing, trying to press the continue button at the catch on about each stroke.  Each time, I would see the normal screen for a second, and the error screen would pop up. When I saw the normal screen flash, it seemed to be updating, so I just rowed 409 strokes blind to finish off the last interval.  After I checked that it had counted down to zero, which involved continuously pressing the “continue” button and trying to get through the menus.  Eventually, I gave up and yanked out the batteries, counted to 10 and plugged them back in.  The PM came up normally and my row was even sitting there in memory, just like it should be.  No painsled data though, but no great loss since it was just a normal steady state session.  I would have been pretty annoyed if this had been a time trial or something.  I’ve got a call into the Concept2 to try to understand what is going on.

Tomorrow:  The plan calls for 8×500.  I think I am going to change it to 8 x 2’/3′ rest.  I managed to convince a few folks from my rowing club to erg together on Saturday morning, and doing it time based will let us start and finish together despite pace differences.