Consider those goals met

On October 13th last year, I posted about my goals for this year, and beyond. In that post, I expressed the goal of doing 650-700 miles of paddling this year. I just checked with Garmin Connect, and it shows that since January 1st I’ve paddled 759.25 miles, including 76.17 miles of races. That does not include a few workouts here and there where I forgot my GPS, or a short gap where my GPS stopped uploading to the computer and I had to buy another one. If I do the “Last 365 days” instead of “Since January 1”, that ups my total to 945.8 miles. I’d say that constituted a pretty decent base.

I also said I’d like to join a pit crew to see what it’s like at the Adirondack Canoe Classic (aka “The 90 Miler”). That I did, and I helped out Sue and Liz as they took care of Doug and Mike at the 90. Granted, I didn’t go to every pit stop, mostly because I was trying to get a decent paddle in each day myself so I could see what it was like, but I was there at the finish to help tired paddlers out of their boats and take care of their boats for them. And in spite of seeing these guys staggeringly tired and bloody and nearly puking, I’m sure that I want to try it next year. I just hope my knees can stand up to portaging.

More on this data loader program

Well, I profiled a smaller data set and found a place where I was wasting a significant amount of time while processing nodes that I don’t care about. I’ve modified the code and I stopped the perl program (after 6098 minutes elapsed, 3491 minutes user, 2584 minutes system) and I’ve re-run it, and it finished in 16 minutes 30 seconds elapsed, 16 minutes 10 seconds user, 10 seconds system. Meanwhile, I’ve written a Java program that does the same stuff that the perl program does (like I said in my previous post, the perl program doesn’t actually do any loading or anything useful, it just parses one of the types of nodes that I’m interested in and prints out what it’s found) and it ran the whole file in 17 minutes 38 seconds elapsed, 6 minutes 31 seconds user and 10 minutes 9 seconds system.

So the upshot of this is that I guess I’m going to stick to perl.

I may need to rethink this…

I am currently working on a new data source for the waypoint generator. Unfortunately because of the way it’s licensed, it’s only going to be for the iPhone version of CoPilot, and I can’t make it available for GPX and other users. Now all of my data loaders have, up until now, been written in Perl, and I have a really good Perl module that performs many of the loading tasks, such as merging existing data with new data.

The new data comes in the form of a gigantic XML file with a kind of weird schema. The provider actually provides both the gigantic file, and also a smaller set of updates on the 28 day cycle favoured by the ICAO, so hopefully I’ll only have to parse the gigantic file once, and then process the updates. I installed XML::SAX and Expat, and coded up a preliminary decoder to extract some (but not all) of the information that I need, just to make sure I was doing it right. I ran it with a subset of the data, and it seemed to be doing ok, and then just for grins while I was working on improving the code, I fired it off on the whole file. That was 3 days (72 hours) ago. It’s still running. Unfortunately I didn’t put in any progress messages so I don’t know where it is in file, only that it’s past the airport section that I care about. I profiled the subset data, and verified that Perl is spending most of its time in Perl code, not in native code – some of it mine, some of it XML::SAX, and some of it in Moose.

So here’s the conundrum: Do I spend the time to re-write this loader code in another language and hope it’s faster? Or do I accept the fact that this is going to take forever, but hopefully I’ll only have to do it once and then the updates will be small enough that I can do them in perl? Because re-writing in another language means re-writing all the data merging and validation logic code, and could be a potentially huge project. And I won’t know until it’s all working whether it’s going to be faster.

Update: I profiled the perl program with a semi-large dataset. Here’s the results:

dprofpp
Total Elapsed Time = 56.86461 Seconds
User+System Time = 46.10461 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
20.5 9.494 23.288 397862 0.0000 0.0001 XML::SAX::Expat::_handle_start
15.4 7.136 12.820 131698 0.0000 0.0000 XML::SAX::Expat::_handle_char
14.7 6.787 55.922 1 6.7867 55.921 XML::Parser::Expat::ParseStream
13.6 6.311 12.977 397862 0.0000 0.0000 XML::SAX::Expat::_handle_end
7.07 3.258 3.258 472462 0.0000 0.0000 XML::NamespaceSupport::_get_ns_det
ails
6.79 3.132 3.132 397862 0.0000 0.0000 XML::NamespaceSupport::push_contex
t
6.48 2.986 5.685 131698 0.0000 0.0000 XML::SAX::Base::characters
4.24 1.953 1.953 131698 0.0000 0.0000 EADHandler::characters
3.87 1.786 4.411 397862 0.0000 0.0000 EADHandler::start_element
3.78 1.744 12.308 211270 0.0000 0.0000 XML::SAX::Base::__ANON__
3.69 1.702 1.838 4000 0.0004 0.0005 Data::Dumper::Dumpxs
2.55 1.174 5.870 397862 0.0000 0.0000 XML::SAX::Base::start_element
2.44 1.124 3.956 397862 0.0000 0.0000 XML::NamespaceSupport::process_ele
ment_name
1.93 0.892 0.892 397862 0.0000 0.0000 XML::NamespaceSupport::pop_context
1.85 0.854 5.768 397862 0.0000 0.0000 XML::SAX::Base::end_element

Note how it’s dominated by XML::SAX::Expat.

Cool surfer d00d

Today Mike, Ken and I met at the Irondequoit Bay inlet for some paddling in the surf. The air was fairly cold, in the low 50s, and the water was in the low 60s, and I was wearing my farmer john and my Hydroskin shirt, so I was pretty well prepared for it. Unfortunately when we got there what we found were huge crashing waves, and howling winds. The bay side wasn’t so bad, but with the wind howling I knew that once we got a little bit off shore the waves would kick up there too. We decided to “play” a bit in the channel.

When we paddled into the channel, what we found were huge crashing waves at the top end of the channel, and beyond them what looked like a solid wall of water about 5 feet high. Honestly, you didn’t get any sense that there were waves out there, just that the lake level was 5 feet higher than the water level in the channel. Mike and I decided to just do runs up and down the relatively calmer part of the channel, getting into waves that were probably only a foot or so high, but Ken was into it and we could see him flying around in that maelstrom. I was sure his boat was continuing towards shore without him a few times, but as it got closer you’d see it get under control and realize he was still in it.

I should mention that the “relatively calm” part of the channel was highly variable – every now and then a set of white caps would come roaring down about half way down the length of the channel, especially on some shallower water on the east side, but much of the time you could get about two thirds of the way up without any difficulty.

I ended up dumping three times in the 30 minutes I was out there. The first time came when Ken asked to dock up with me so he could attach his paddle leash, and by the time he was done we’d drifted sideways to the waves and wind, so almost as soon as I was clear of him I dumped. The second came as I was getting back in after that dump. I normally don’t count the secondary dumping while getting in because it happens so often.

The third time I had drifted a little too far upwind as I was waiting for a lull in the waves, and when I went to turn the wind caught me hard and threw me over. After that time I decided to call it a night before I started to get cold. I was well dressed for it and I hadn’t felt cold while in the water, but I figure it’s better to quit while you’re ahead.

I intend to do some more of this kind of wave work. I think it’s really good for me, and eventually I’ll probably come to enjoy it. However, I need to make two small adjustments – I need to put on my big rudder on the ski so I have a bit more control, and I need to remember to bring a towel and some dry clothes for after.

Long Lake Long Boat Regatta 2010


Today was the Long Lake Long Boat Regatta, my favourite and unfortunately last race of the year. Two years ago it was my first race outside of the Bay Creek time trials, last year it was my second race in the Thunderbolt where I did surprisingly well, and this year was an awesome surprise.

The weather forecast was horrible – lots of wind, and a fair chance of rain. On the drive up, and after we arrived at our cabin last night, the wind was stronger than I liked, but not horrible, but every now and then there would be a few minutes where it was blowing very, very strong. I have no way to estimate the wind, but when it was blowing hard I wouldn’t have been surprised if they said 40 mph. I was surprised that it didn’t set off some car alarms.

This morning, the wind was pretty much the same – a steady but not really strong wind, and occasionally one of these sustained gusts that was blowing all the boats around. One guy’s boat started rolling down the hill, and Vicki and Susan turned it upside down to stop it from blowing away. The owner of the boat came along, listened to Vicki explain what they did, and promptly turned it back upright and walked away again. Not too surprisingly, his boat promptly stared blowing again, and this time it ran over and broke his paddle. DUH! Another guy was putting down his guide boat and a gust of wind caught it and he nearly dropped it on Paul D’s paddle. I rescued his paddle and PFD and tucked them in closer to his ski so it was less likely to get crunched.

After the racer’s meeting, everybody launched and started milling around. Another sustained gust hit just then, and I was starting to think this was going to really bad. Vicki had convinced me to wear my PFD against my judgment, but at that point I was wondering how long I’d be swimming before a rescue boat picked me up. A woman with a Think surfski managed to swim twice before the starting gun went off, and then decided not to race after all.

They were doing a mass start with the war canoes going up wind and everybody else going down wind. The war canoes had the finish line buoys to line up on, but the rest of us were just told to “line up in front of the seaplanes”, which is so vague as to be useless. To make matters worse, they told us “3 minutes to start” at least three times, and then told us “30 seconds to start” several more times. Meanwhile everybody lined up was getting blown further and further down-lake.

Finally, after yet another “30 seconds to start”, I heard “10 seconds to start” and started my GPS. And probably not much more than 10 seconds after that, I heard “GO” and I started paddling. Except I was kind of taken aback to be out in front. That’s not normal, so I looked around, and was relieved to see the canoes had started as well. It was probably less than half a minute before Doug and Mike in their K-2 charged past, and seconds after that that Roger Gocking, the paddling machine, came by. The strong tail wind was giving me lots of surf. I heard Mike say to Doug to “build into it” and I thought that was a good idea. I was trying not to go out too fast and fade like I do so often.

After a few minutes, Paul D called from behind me “As long as we’re together, let’s trade off every mile”. It sounded like a good plan to me. But I was surprised that Dave W wasn’t riding my wake as well – he’s usually minutes faster than me, and he’s a master at finding a good wake to ride for the early part of the race. A few seconds after my GPS beeped for the first mile, Paul called “Coming up on your left, slow down so I can get past”. With the surf behind us, it was hard to go slower, and so when I didn’t slow down enough he said “take a drink”, which I did and that got him past me.

Paul pulled hard, but again with the surf behind us, I occasionally ended up beside him instead of behind him. But I was getting some benefit from being behind him so I tried to stay back there.

When my turn came, I pulled ahead, and the waves were definitely getting much rougher. Instead of just punching through everything, occasionally there would be one that was so big the water would meet on top of the deck of my kayak. I would slow down a bit and wait for the wave behind me to build up until it was giving me a better push, and then I could blast through the big one or two ahead of me. My speed was fluctuating wildly because of the conditions, depending on whether I was riding a wave or attempting to smash through one. Plus I’d already washed away my boat number and I was trying to remember what it was since I’d have to call it out to the turn-around boat and the finish. I was figuring I wasn’t doing Paul any good with the speed ups and down, and so when the next mile came and I called to see if he was there, I wasn’t too surprised that I didn’t get a response.

So now I’m all alone. Roger Gocking is ahead of me, but taking very strange lines – every time I looked he seemed to be at a 45 degree angle to the line I was taking, but still pulling away. I knew Dave W was behind me somewhere and probably gaining, and my normal marker Mike was a tiny little spec in a K-2 way ahead. It was going to come down to my ability to pace myself, and my ability to handle these rough conditions. I knew I had faded badly in the second half of last week’s Erie Canal Regatta and also in previous races such as Armond Bassett, so I was concerned I was going to hard, but I had to go faster than the surf since I was only in a half skirt and I’d already taken on some water punching through the big waves.

When I reached the turn around, I had my usual tense moments as the boat went cross-ways to the waves. But I could see that Paul had latched onto the wake of a C-4, and Dave W was with him, both about 30 seconds to a minute behind me. Going into the wind, I was trying to figure if it was worth the extra distance to follow the right shore, which was a little bit wind shadowed but also well out of the straight line. The K-2 and Gocking weren’t doing that – as earlier, Gocking seemed to be almost tacking back and forth, and I was having trouble even seeing where the K-2 was.

I was thinking I might try for the wind shadow behind this small island in the middle of the lake when Dave came by. I was about 3/4 of a mile from the turn around, and he’d made an incredible gain by making up all that time in such a short distance. I decided I was going to try to grab onto his stern wake and hold it for however long I could, which after that gain I was figuring wouldn’t be too long. He was going straight for the passage between the island and the right shore, with no attempt to go for a wind shadow anywhere. I figured I’d have to use him as my wind shadow. It wasn’t a huge help – I spent most of the time between 1 and 2 boat lengths behind him, far too far back for any help from his wake or from his wind shadow, but it was a goal, a carrot dangling in front of me. He was relentless. Instead of slowing down when the winds were gusting hard or the waves were high, he just kept paddling at almost exactly the same pace and exactly the same style. I tried to adjust to a lower paddling style and a full grip on my paddle during the strong gusts, but with him right there I could no longer allow myself to slow down.

When we passed through the narrows between the island and the point on the right, the wind whipped the waves into white caps. I’d heard Mike talk about the wind tunnel effect on Long Lake before, but this was incredible. I dropped another boat length behind Dave and heard myself think “hey, I stayed with him for over a mile, that’s pretty decent”, but then I said “HELL NO, I’M NOT GIVING UP”, and started doing a really fast “hit and out” paddle stroke, and caught back up to him.

I was right in his stern wash as we came into the last more sheltered part. He didn’t speed up any, and I came alongside. I’ve watched enough Tour de France to know what was coming next – he’d let me go ahead, and then slingshot past me in the final sprint. And I was ok with that – he’d towed me for 4 miles, and he was normally minutes ahead of me, so finishing a boat length behind him was a victory for me. As I came alongside, he said “If we’d worked together, we could have caught Gocking”. I explained I was doing everything I could to stay with him, taking a pull or two wasn’t in the cards for me. And then it played out exactly like I expected – I pulled ahead half a boat length, the speed slowly increased, and as we hit 7.1 mph he pulled ahead and kept accelerating all the way to the line. I finished mere seconds behind him, in what I consider one of the best finishes of my (short) career.

In the aftermath, I have to give full credit to two things:

  • All the time the Bay Creek Paddling Team has spent in rough conditions in the last two years and
  • Dan telling me to shorten my paddle this week. I’d lengthened it on Jason Q’s advice to try to get better catch, but I hadn’t made the connection that the longer paddle was probably why I was fading so much in the races, until Dan pointed out that I was shoveling vast quantities of water into the air at the end of my stroke.

So thanks Dan, and thanks to the rest of the team for another great year. Next year I’m going to try to do the 90, so I’m going to spend the winter trying not to lose my conditioning, and trying to lose a bunch of weight.