I had this idea for an app to handle registration and results for kayak races. I had the following requirements in mind:
It must work when off-line
It must work on laptops and tablets
Preferably, it will sync up with a server when it is on-line
It must not require any installation or other technical futzing around because my target audience (the people who run kayak races) are not all very technically sophisticated.
I discovered PouchDB, which would take care of the storing information locally in the browser when off-line, and also would sync to a server when it came time to do that. And so off I went programming away. My little proof of concept was humming along, it could accept registrations and display and edit existing registrations, and I was well set to add results entry and display, when I thought to try it on the bane of every web developers lives, Internet Explorer.
First problem: IE reports the ‘fetch’ is not a valid function. Fortunately, the documentation for PouchDB warns you about that, and says to install a polyfill. So I install it, and now IE reports ‘Promise’ is not a valid function. Hmm, no mention of that in the PouchDB docs that I can find.
Can I just mention as an aside that the PouchDB docs do say that it supports IE 10 and IE 11? Yeah, about that…
Thanks to an answer on StackOverflow, I find another polyfill for Promise. Now IE reports that you can’t use IndexDB on web pages that are loaded as files rather than as URLs. Not sure what to do about that except tell people to stop using IE. It appears that with my polyfills and stuff, it does work in Edge, at least. Small mercies.
I’d say the day dawned bright and early, but Mike and I actually hit the road before dawn so it was not bright but it sure was early. After driving behind what I thought were the slowest drivers in the Adirondaks (at least until the drive home) we arrived around 9:30 in plenty of time to register and prepare.
There was a strong breeze, and Mike decided to switch from his cut down rudder to a normal weedless. I stuck with my new 5″ DK rudder, which is a bit smaller than an Epic stock weedless, but still gives me pretty good control. The wind actually picked up by race time and gave us a ton of challenging wind and wave conditions from every direction, but I never wished for more rudder control.
There was a stronger field this year than last. There were the guys who I knew I had no chance against, like Jan W and Eric and Ed Joy. There was Jim Fredricks and his wife JoAnn, who last year only did the 7 mile race but this year he was saying that he’d “probably” do the 14 miler – in this race you’re allowed to decide which one you’re going to do at the first buoy turn. Eileen Visser was here, as well as her son Scott. And a whole load of our Rochester paddling group, including Dennis Moriarty and Mark Ressig, both of whom have beaten me the last time we raced each other. Roger Gocking and Jim Phillips were in Roger’s V8 Double.
Of course, being racers we had to have the traditional pre-race “airing of the excuses”. Eric claimed he’d just gotten over some sort of stomach bug, and Jan said he had only paddled twice since the Tupper Lake race. We declared Eric the winner of the excuse contest. Turns out later that he actually hadn’t been exaggerating.
Off the start, I was resolved to not make my usual mistake of leading a pack and then getting beaten by them. So I was sort of on Jim F’s side wake and Mike was beside me. Eric must have had a slow start because he came chugging through on the other side of Mike. Jim was a little anxious to get on Eric’s wake and basically was pushing me into Mike until I thought “why am I doing this” and decided to hold my line. Jim ended up tapping me, but that’s racing. Then he was ahead, and I kind of crowding Mike out of his stern wake. Looking back I could see Dennis and Mark and a few others on Mike’s wake.
We were somewhere near the buoy where the 7 mile racers turn off when Eileen came chugging up along side me. She wasn’t looking for anybody’s wake to ride, but it looked like a lot of Mike’s train was now on her. We pretty much stayed like that, with Jim leading one train with me right behind, and Eileen leading another train. The first river was a bit narrow but nobody really got in each other’s way. Then we came out into Eagle Lake.
We had quite a headwind by now and the waves were making it hard to keep station on Jim’s stern wake. I tapped his stern exactly once, which I thought was pretty good boat handling on my part considering I’d been on his stern for 4 kilometers, but he didn’t like it and yelled at me. As we went into the second river, I ended up side by side with Eileen and we were trying to not interfere with each other or with Jim but it was a tight squeeze and we couldn’t be 100% non-interfering without just conceding the whole race and going into single file.
On the next lake, the wind seemed even stronger. Jim grabbed his drink hose and I noticed his hand shaking a bit and his boat twitching, and I thought “hey, maybe he doesn’t like being in the waves or maybe he doesn’t like being in a pack in the waves, either way I’ve got to take advantage of that”. If either of those is true, it’s no wonder he didn’t like me tapping his stern earlier. Or maybe it was a ploy – earlier he’d tried a few ploys to make me take the lead or to drop me but I saw them coming a mile away. Just one of the many advantages of training in a big group like we do here in Rochester.
I surged ahead, hoping I could drop him. Eileen came with me and we ended up side by side going into the wind. Eileen remarked how this is just the most beautiful race, and I can’t say I disagree. We didn’t drop Jim, although we had dropped a lot of our respective trains at this point. Jim seemed like he wasn’t sure which of us to follow as I saw him switch from my stern to Eileen’s a few times.
Approaching the turn buoy, I could see that the people ahead had gone clockwise. Since I thought we had a gap, I suggested to Eileen that we go counter clockwise instead, because it would mean that we’d exit the turn with a good strong wind behind us. But just as we start the turn we see Jim and JoAnn and a couple of others just a half a boat length back and bound and determined to go around clockwise and yelling at us to widen our turn so they could turn inside us. While the map at the captain’s meeting didn’t indicate a preferred turn direction at this buoy, and last year we turned it counter clockwise, the map on the race website does show a clockwise turn so they were probably within their rights to demand we accommodate them, and we did. But turning into the wind did help, and we opened up a good gap.
On the downwind, our speeds went up from around 9 km/hr to around 11 km/hr. I was hoping we’d pick up more but the waves were only moving about 9 km/hr and we had to punch through them rather than ride them. Eileen stopped to eat something, so now I was alone for a minute or two until Jim caught back up and passed me. I tried to stay with him, but couldn’t. He had maybe a two boat length gap heading into the first river but he kept pulling away. And as we headed into Blue Mountain Lake, JoAnn came through and passed me and caught him – I’d actually expected Eileen rather than JoAnn. They then proceeded to work with each other and increase their lead on me for the rest of the race.
As we proceeded around the lake, each buoy turn gave you an opportunity to see who was behind you and how far back they are. They also launch you into a new direction with respect to the wind and new conditions of wind and wave. Sometimes it was surprising because you’d think based on the previous leg that you’d end up with a beam sea for the next leg, but the wind would be channeled around an island or the waves would refract between two islands and you’d find yourself with a good following sea or at least a not very adverse angle.
At the first couple of buoy turns, I could see that I had a really good gap on Eileen and Dennis, that Mike and Mark were well off the pace, and Bob Raymonda had moved himself nearly into contention with Dennis. And then as the race went on, my gap over Eileen and Dennis shrunk a bit but not enough to worry about.
But then the last couple of legs had quite adverse beam waves and reflected waves off the shore and all manner of challenges, and I was foundering a bit, having to brace once or twice on some of the turns and missing strokes. But I was still amazingly surprised on the last leg into the finish when Eileen passed me, and I glanced over and saw Dennis almost there as well. Suddenly I was no longer thinking about the waves and balance, and only thinking about catching Eileen back up and keeping ahead of Dennis. And you know what? I felt much more stable then than I had before. I didn’t catch her, but I don’t think I was more than a boat length behind. (I think the official result has me 39 second back, which I don’t think is accurate.) Looking at my rear facing video camera, it looks like Dennis was at least 5-10 seconds behind me, although officially he was given a time 2 seconds back. Oh well, as long as the positions are right, right?
My Linux server, which I bought back in 2011, was getting flaky, crashing and freezing up with alarming regularity. So the first thing I tried was ripping out the two nVidia video cards – I’d originally put in two because I was using it as my daily driver and running three monitors (including a 4K), and didn’t need them any more because I only had one monitor on it and rarely logged into the console since I switched to using a MacBook Pro and then later a 5K iMac as my daily driver.
But that didn’t really help much, so I started looking at a replacement, and instead of getting a JNCS motherboard bundle and then finding my own case, power supply and drives, I bought a complete system from JNCS. However, in anticipation of getting the new system, I bought two new 4TB drives to replace the 3TB drives in the existing systems. And after I’d finished migrating the data from the 3TB drives to the 4TB drives and took the 3TB drives out of the system, the random crashes stopped! Shit, I didn’t have to buy the new system after all!
But anyway, the new system arrived. I moved the two 4TB drives and the two 256GB SSDs from the old system and fired it up. I had a hell of time swapping cables around and between SATA ports because I’d get the BIOS to recognize 3 of them but not 4 of them until I found just the right combination. I think a new set of SATA cables might be in my near future. After getting the BIOS to recognize the 4 drives, I could not for the life of me get it to boot from them. The grub menu would come up, but it couldn’t find the /boot partition for some reason. I tried booting with a live image to repair the boot, but couldn’t get it working, so I said “screw it” and just installed a new Kubuntu onto the built-in NVMe drive and restored all the required functionality from the old system.
I also had a hell of a time with the 4TB drives – they were RAID-1 with LVM on top of them, but the new system wouldn’t recognize them as RAID-1. I tried various “mdadm –assemble” commands, with no luck. Finally, I said screw it decided to just nuke it and start again. I used fdisk to re-write the partitions and did a “mdadm –create” to create a new RAID-1, but as a complete surprise to me, the system immediately recognized the existing LVM system and gave me back all my data!
Anyway, it’s working great now and one of these days I’ll be confident enough in the new system to reformat and repurpose the old SSDs. And boy does that NVMe drive boot fast!
So I found a new waterproof external battery pack for the GoPro. This one used a waterproof case and a gland nut on the GoPro, and a separate battery pack with another gland nut. I’ve been starting to come to the conclusion that the problem with the GoPros shutting down is one of heat. So I was hoping that keeping the battery outside the camera case would reduce the heat build up.
I charged the new battery and attached it to the GoPro with no internal battery in it. I tried setting the GoPro to 4K/60fps and took it out while walking Gizmo, and then just letting it run. It make a strange chime and then shut down after just over an hour. I let it cool down a bit and reset the camera back to 1080p/60fps and (without recharging the battery) got over 3 hours on it.
What I’d really like to do is try it at 1080p/60fps in a more realistic scenario, where things are moving and the image stabilization has to work like it does in a real scenario. Maybe I’ll put it on the oscillating fan and just let it rip.
Ok, so I kicked both cameras down to 1080p instead of 4K, figuring it would reduce the heat build-up. And I managed to get the expected 4+ hours out of camera #1. Great!
However, camera #2 is still having problems – it would shut down as soon as I hit record. I tried doing a factory reset, I tried swapping SD cards, but the problem appears to be that it just doesn’t like the sidecar battery. It doesn’t matter which sidecar battery I use – as soon as I turn it on, it turns off. Take off the sidecar battery, and it’s quite happy recording for 100 minutes.
I think for this weekend I’m going to try using the sidecar battery on camera #1, but just going bareback on #2. I’ll probably put #2 on the bow facing back, because that view is usually only important in the first part of the race. When I get home, I’ll see if GoPro will admit there is a problem with their camera, although since it only happens with a third party battery I don’t have high hopes.