This week in tech

So for several years now, I’ve had two cameras protecting the front and back of the house. It looks like I got the first one in February 2013. Both cameras were very similar even though they were from different companies – it looked like they’d licensed the firmware from the same source, but one got a much later build of the software. Either that, or being Chinese companies, they probably just ripped each other off.

But both of them had just about every feature I wanted in a camera. They had Pan/Tilt/Zoom, a simple web interface which worked on every browser on every OS I cared about, IR night mode, motion detection alarms that would send you email or ftp pictures to a server, and both wifi and wired ethernet. The one on the front wasn’t near a power source so rather than running power out there, I ran an ethernet cable and did Power Over Ethernet (PoE), but the one in the back was near power but not somewhere I could run ethernet, so it’s transmitting over wifi. Both had a few minor quirks, but for the most part they were exactly what I wanted – I keep a couple of windows open on my monitor showing both video streams and I have an app on my iPad that will do the same. It’s very handy when I’m working to see people coming to the front door because I can’t hear a door bell up in my office. Their biggest flaw was that they were pretty low-resolution (640×480). Unless it’s close up, it would be pretty hard to identify a face at 640×480.

So I’ve been looking for replacements that do everything these ones do, except do it in high def. And I’ve run into a shitload of problems. Evidently the “Server Push Mode” that made these things work on Linux browsers has gone out of fashion or something, because I haven’t found anybody who has it. Even if the screen shots on their downloadable manuals indicates they have it, they don’t. That option is not on the screens you see in the shipping product.

Another problem is that evidently I’ve become incapable of reading product descriptions in detail. I ordered a really nice D-Link camera that did a weird “920P” resolution (somewhere between 1080P and 720P), but which worked on Linux browser. The only problem with it, which I didn’t notice until I was installing it outside, is that it’s not advertised as an outdoor camera. I thought it was. It lasted several months but a rainstorm a few weeks ago seems to have finally killed it. Lesson 1: Check to make sure it’s weatherproof before ordering. I also ordered one that when it arrived it turned out it didn’t do Pan/Tilt/Zoom, even though NewEggs’ search function returned it when I’d specified that as one of the required options. Lesson #2: NewEggs’ search function is crap. I eventually got one from Foscam that was advertised as working with “any standard browser”. It turns out that to them, “any standard browser” means IE or Firefox on Windows 8 or below. Lesson #3: People who write product descriptions are a bunch of liars.

After I returned that one, I got a similar camera from Ipcam Central. Once again, their downloadable manual showed a “Server Push Mode” that was not present in the actual product. Once again, their promise of “Supports Mac OS X” turned out to be a lie – they claim that they will have an application that will be available in a few weeks or months, but I’m not holding my breath. But I decided that since all the cameras seem to have the same problems no matter the vendor, I was going to do my damnedest to see if I could make it work. With with a lot of help from their tech support I’ve got it pretty workable. First they recommended I download some Linux software to do ONVIF – the software is called OpenCVR and it didn’t work for shit. But then they told me the secret undocumented rtsp stream names, and so now I’ve got a VLC window displaying the lower resolution version of the video and audio feed on my monitor (vlc rtsp://admin:password@backcam/12). I tried the high resolution version and it froze up after a while. Not sure if that was due to network problems or what. I’ve also set up a job on my Linux box that uses VLC to continuously grab 10 minute movies into files (vlc rtsp://admin:password@backcam/11 --sout=file/ts:/backup_2/backcam/backcam-$(date +"%Y%m%d%H%M%S").mpg -I dummy --stop-time=600 vlc://quit). I figure that breaking it up into 10 minute chunks will help restart it if it freezes up, and also it will be easier to provide files to the police if it sees anything.

The web interface doesn’t display the actual video (except on Windows), but it does allow me to control the pan/tilt/zoom features and do much of the setup. The only thing it wouldn’t allow me to set up is the motion detection, because it wants visual “zones”, and it won’t display those except on Windows. Fortunately I have a Windows laptop that I hardly ever use that I was able to drag out and dust off to do that one piece of setup. It didn’t work at first because Edge, the new browser in Windows 10 doesn’t support plugins, and it didn’t work at second even after switching back to IE11. Eventually tech support figured out that I needed to tell IE to run in the dreaded “Compatibility mode”. Once I did that I was able to set up the motion detection, and this morning I got emailed a series of pictures of me letting the dogs out for their morning pee. I also got pictures of a few points in the night where nothing happened, but that’s par for the course with these things – even the old cameras sometimes go nuts when it’s raining or snowing and send me hundreds of these emails in a night. As well, each of these motion alarms saved a nice little short movie to the on-board storage of the camera.

Oh yeah, remember how I said that every camera vendor lies? Well, another sort-of lie these guys tell on their web page is they describe the on-board storage as “an SD card”. Except when you ask tech support, there is no way to get to this SD card to remove it or replace it with something bigger. If you can’t replace it, then while calling it “an SD card” might be technically correct, it doesn’t matter to the end user how you implemented the on-board storage. You might as well have called it magnetic core memory for all the good it does me.

But the upshot of all this is that I’ve managed to cobble up a system that works for me. I’ve ordered some PoE adapters, and when it comes I’m going to move this camera to the front door position, and order another one for the back door.

Update: So I moved the camera to the front door, and about 3 hours later the camera started slowly going out of focus, and the focus buttons on the interface don’t work. Tech support remoted in and said “we can make it focus”, so I said “well, if you can make it focus, how about putting it back in focus and leave it like that?”, and then they admitted that they hadn’t made it focus. Fuck.

Update 2: I got the second camera, and replaced the first camera with the second camera, and got it set up nicely. Then I took the first camera and set it up for the WiFi so I can put it in the back yard, and noticed it is now completely in focus. So I guess when I power cycled it last time and did a factory reset, I didn’t leave it off long enough. Fingers cross that it stays that way.

Long Lake Long Boat Regatta 2015

I had to miss last years LLLBR because of other commitments which is a shame because this is always a good competitive race. Also when the weather is good (like it was this year) it’s a spectacularly beautiful venue. Unfortunately whatever wind there is tends to funnel straight down the lake, but it’s the same for everybody so no problem. This year it was sunny and cool, and with almost no wind at the beginning which built into a light breeze in the middle.

In previous years, it’s been a simple out and back, but evidently last year they changed it so we start at the same place, but go in the other direction under the bridge, go about 3.5 km into the lower part of the lake, come back under the bridge, then circle around an island and come back for a total of about 17km. Not only is it more interesting route but it’s more spectator friendly. This year there was actually cash prizes for the touring class kayaks, so there were a lot of people in touring class, meaning that the unlimited class looked like it was going to be a fight between John H, Pete G and myself. Todd, Roger, Doug and others were all fighting it out for the money.

Less than 100 meters after the start, Todd was leading, John was on this tail, Roger and I were side by side, and Pete was behind us. (Update after reviewing the video, it appears that it was Pete and I side by side and Roger was already on John’s wake.) Within another hundred meters, Roger had claimed John’s stern wake, I was glued to his stern, and Pete was glued to mine. The canoe wave had started a few minutes ahead of us, so we were passing the slower ones almost immediately. And Todd was not taking any prisoners. At the first canoe, he tried to scrape us all off – John didn’t lose the wake, but Roger ended up a little off John’s wake and I was a little off Roger’s, but we fought back on. At the next canoe, John lost a little distance, but clawed back on. At the next canoe, John ended up going the opposite side of the canoe from Todd, and Roger lost his wake as well. That was pretty much the way it stayed to the first turn – Todd alone, John alone, then Roger, me and Pete in a conga line. (Update: from the video it appears that John got back on Todd’s wake after the scrape, and stayed there around the turn.)

At the turn, I intended to follow Roger around, even though his boat doesn’t turn as well as mine. But Pete decided to turn as tight as he could and come around us on the inside. I took the bait and latched on his stern wake and Roger latched on mine. On the way back to the bridge we came up through some wakes of some of the faster c-2s and slower c-4s, as well as some boat wakes, but otherwise it was nice and flat. A couple of times Pete looked like he decided to try to catch John and put in a big dig for a few hundred meters. But we were nearly a minute behind John even after those digs and not really closing.

Now this whole way I’d been paddling way too hard. My heart rate was in the low 160s and I was sure Pete was going to blow me up, so at about the six kilometer mark I decided I needed to slow down, drop off Pete’s wake and paddle my own race and hope I could catch him later. But after I slowed down, he slowed down as well, so he ended up not getting more than two or three boat lengths ahead of me.

After the bridge, there was a strong head wind, and it seemed to be slowing down Pete more than me. I caught him not long after and almost immediately he wanted me to come through. He asked me if I thought we should follow Todd towards the left side of the lake or John towards the right. I didn’t think it made any difference because there didn’t appear to be any shelter on either side, so I just went straight towards the boat at the turn. Pete latched on my wake.

About half way from the bridge to the turn, I got passed by a stranger in my boat. That wasn’t a total surprise – I’d advertised my Think Legend and this guy Kurt had agreed to pick it up today at the race. But I hadn’t seen him before the race, so I wondered if he’d blown me off. But now he came steaming by. We introduced ourselves to each other and he went off to hunt down John and Todd.

As we got closer to the turn, I was starting to think that I was starting to close the gap on John. I timed the gap at around a minute back at the bridge, and now it was closer to forty seconds. Hope bloomed. And then as I’m turning, I sneak a look back and I’ve got a few second gap on Pete and Roger. Time to put the hammer down!

For the whole last four kilometers from the turn to the finish, I’m convinced that I’m getting closer and closer to John, but I just don’t have any gas left in the tank to put in a final sprint to catch him. I sneak glances behind and it appears I have a good gap on Pete and Roger, and it may be growing. As I cross the line about 10 or 20 seconds back on John, he appears completely surprised to see me there. He jokingly accused me of sneaking up on him like I had at Armond Bassett. There was nothing stealthy about my approach – I was wheezing like a steam engine, but he was probably working just as hard and just as loud. I looked back and it appeared that Roger had taken back the lead from Pete and Pete was latched onto his wake.

Results haven’t been posted yet, but Todd won touring class, followed by Roger and John won unlimited class followed by me and Pete. All in all a fantastic race and a very pleasing result for me. A great way to end the race season.

Update: Results are here. I was only 11 seconds behind John at the finish.

The third canoe that I mentioned above that Todd successfully scraped off Roger, Pete and I and nearly scraped off John posted his how video. You can see us at the 1:50 mark.

Long Lake Long Boat Regatta September 26, 2015 from Scott Ide on Vimeo.

Third annual BayCreek Kayak and SUP Cup

Today was the BayCreek race. The first time I wrote a long blog post about it. The second time I didn’t – I wrote a few lines on Facebook but that’s all.

Just like last time, the race got postponed because of the weather. This time the forecast was a bit crazy on the Saturday although the thunder didn’t show up. But no matter – Sunday was actually quite nice. It was partly cloudy which turned into sunny about the time the race started. There was a stiff breeze almost straight down the bay. During the warm up I determined that while the breeze slowed things down a bit on the way out and helped a bit on the way back, the waves didn’t really help on the way back because they were moving too slowly and you had to blast over them. Good thing they were small.

The other thing I did while warming up was verify that my new GPS was working right. Last weekend I left my old one on top of my car, and by the  time I came back for it it had been run over by multiple cars,ruining it. I ordered the new Garmin Forerunner 920xt, and it arrived while I was out of town, so this is the first time I’ve paddled with it. It was fine, except just before the 1km mark it gave me some message I could not understand about heart rate recovery. I hoped that wouldn’t happen every kilometer in the race and decided it was good enough.

Ok, after checking out the conditions, next thing is to check out the competition. Jim won last year, but he is sidelined by an injury. The guy in the Stellar surf ski came again this year, but he wasn’t a threat. The one that had me worried was Pete – I’d beaten him last year but he’s gotten a lot faster this year. Not only is he in a faster boat, he’s just paddling better. He’s faster than me in the BayCreek Wednesday night time trials now, and he managed to complete Blackburn when Mike and I quit. Paul D and Dennis Moriarty were in touring class and weren’t going to be challenging me either, so I figured it would be me and Pete fighting for first and second place.

At the start, it very quickly sorted out as I’d expected. Pete and I were neck and neck going up the channel. I don’t envy the guys who had to stand there in the water up to their waists to take pictures but last year they got some really good shots so it’s worth it. At the one kilometer mark I got another one of those annoying message pop ups on my GPS although I’m pretty sure it was different.

After the channel Pete slipped back into my stern wake. A couple of times I snuck a look back and see we had a good gap. After 3km I pulled off to the side and made Pete take a pull. I’d intended to make him pull for at least 2km (because we’d been side by side for the first kilometer so it only seemed fair). My heart rate recovered a bit but our average speed also dropped. Also his speed didn’t seem all that steady – although that could be the wind. So I ended up tapping his stern a couple of times. After a few times l decided to pull through – my rest ended up only being 1.7 km. After the turn we got a good look at the other racers – the guy in the stellar was a few minutes back, and Dennis was pulling Paul D a few minutes behind him. 

After they had all gone by, I made Pete take another pull. Once again, I got a bit of recovery, but once again I got impatient and pulled through after just a short while. But by now the short rests were starting to tell on me and it wasn’t very much longer before Pete pulled through without any prompting on my part. The entire final 4km I was either on Pete’s stern wake or beside him. At one point, we got hit by a gigantic side wake and I made the mistake of trying to get some surf from it. Pete didn’t – he just took it without altering course. By the time it was passed, I was a boat length behind him and 20 meters to his side. It was an effort to get back to him, and then we were in the shallow water just before the channel. I faded really badly, or maybe Pete put the hammer down early. The water there was so slow you couldn’t compare your speed in that area with the speed in the deep – we’d been making around 11 km/hr in the deep, now we were barely making 9.5 in spite of being in a sprint. Pete got at least two boat lengths on me. But as it got a bit deeper in the creek I started clawing it back. Pete said afterwards that he thinks he started his sprint early and faded – I don’t know, I must know I was sprinting as hard as I’ve ever sprinted. And the final result is that at the line I was about a foot behind him. Close but no cigar. 

So what’s my take away? 

  • It was nice to be in a strategic side by side battle again – most races I’m chasing one guy and trying not to get caught by the guy behind me. I think the last time it was like this was last year’s Long Lake race where I was in a pack with Mike Littlejohn and Roger Gocking. 
  • I’ve got to be more patient when I’m riding wake and less generous when taking my pull. The third guy was well behind us, so there was no reason to kill myself to go fast. If I’d gone 10.3 km/hr instead of 10.6 into the wind, I might have had some more energy going down wind.
  • Pete is turning into a formidable opponent. I’m going to have to work hard to stay close to him.

By the way, other than that one notification at the one kilometer mark, the new GPS is great. I really like it.

Foscam FI9828W – Don’t buy this POS

I’ve had a security camera on the front door for a couple of years now, and as well as giving a bit of piece of mind at night, it’s also really handy during the day to watch out for delivery people. It was so successful, I decided I wanted another camera to watch the back door and the garage. That was motivated at least in part by the number of garage break-ins we’ve had in our neighborhood and the fact that at least one neighbor was able to give the police some nice pictures of the perp from his security camera.

Unfortunately the company that made the front camera (Airsight) had stopped selling them (it appears they’re back now), so I bought a Wancam camera. It had all the same features as the Airsight (Pan/Tilt/Zoom, controllable through any standard web browser, weather proof, infrared for night vision, motion detection, email, ftp, etc). I liked it at first, and the interface seemed very familiar but after a few weeks I noticed a problem – it needed rebooting at least four or five times a week. And since the power plug is in the garage, it often didn’t get rebooted for a few days, especially in winter. So it’s now sitting in my junk box.

I then bought another camera – I decided this time to get an HD, at least 720P. The camera I’m using up front has only one flaw major flaw – I wish it was better resolution. This one is a D-Link DCS-52222L. Unfortunately, because NewEgg.com’s search function sucks balls, I didn’t noticed that while I specified I wanted an outdoor camera, most of the ones the search returned, including this one, are indoor cameras. It turned out to be damn near perfect, except I’m sure any day now it’s going to succumb to the weather. Also I haven’t figured out how to get the motion detection working – I told it to email me snapshots but instead if emails me a text file.

In preparation for the inevitable, I bought another camera. This one, the Foscam FI9828W, advertised that it was “920p” (which is a non-existent resolution standard, but obviously somewhere between 720P and 1080P) and all the other stuff I wanted, like pan/tilt/zoom, weather proof, and most importantly, “viewable over the internet using standard browsers”.

Well, it turns out that that last one was a complete 100% lie. It only works on Internet Explorer and Firefox on Windows (and on Windows 10, it doesn’t work on the standard browser Edge, and you have to find the “Open in Internet Explorer” menu item) and supposedly on Macintosh. You have to install plugins to make it work, which means it won’t work on Edge and Chrome because they don’t accept plugins, and it won’t work on Linux because they don’t make plugins for it. Now on Linux I can display the actual video using vlc with a rtsp url, but I can’t control the camera. Also I’ve discovered that if I leave it up and running for a few hours, it’s likely to freeze up and then I have to re-open the stream in vlc. The only light at the end of this tunnel is I can view and control the camera with an iOS app. Not as good as just having a browser window open like I do with the Airsight and D-Link (and formerly the Wancam) cameras. Another thing that changes is that with the other three cameras, there was a simple “curl” command I could do to grab a snapshot from the camera. I had that running on my Raspberry Pi to grab snapshots every second and store them in case I needed to review. However, I did find a work-around using “aconv” – avconv -i rtsp://userid:password@192.168.1.16:88/videoMain -r 1 -vsync 1 -qscale 1 -frames 86400 -f image2 backcam%09d.jpg – unfortunately it’s too processor intensive and can’t run on the Raspberry Pi, so I have to run it on my desktop. Or I could have the camera take snapshots at regular intervals and FTP them to the Raspberry Pi. So I guess with these two work-arounds I have a functioning camera, although I’m not happy with it.

And if the blatant lie about “woks on standard browsers” wasn’t enough reason to hate them, here’s some other reasons:

  • The setup for daylight savings time is broken – if you enable daylight savings time, you have to choose the offset, but if you choose 60 minutes it changes the time by two hours, so you have to set it to 30 minutes to get it to offset by an hour.
  • I set up two video streams, with the “sub” stream being lower resolution one, but if you open the “sub” stream using rtsp in vlc, it actually still shows a full resolution stream. The secondary stream works on the D-Link
  • When you set up email, it asks for the sender and one or more recipients. But for some odd reason, it sends a copy of the email to the sender as well. So for the other cameras, I can use the camera name as the sender, but I can’t for this one because it has to be an existing email address.
  • When you set up ftp, you have to give an FTP url like ftp://192.168.1.4/uploads but if you give the trailing slash (like you would expect to do when you’re specifying a directory) it fails with a message that says the login credentials are wrong.
  • If you put the IR LEDs on “Automatic” mode, it doesn’t work. The IR stays off, and consequently the captured images are all black and the motion detection doesn’t work. If you want to see in the dark, you have to manually set it to “Night Mode” and remember to set it back off in the day.

So obviously whoever wrote the user interface was a moron.

Armond Bassett Race 2015

Saturday was the Armond Bassett memorial race. I’ve done this race several times in the past, and up until now it’s only taken place in two weather conditions, torrential thunderstorms or hot, airless and humid. This year was a pleasant change – it was absolutely perfect – cool, overcast but not oppressively so, and with a slight breeze.

As usual I arrived way way early. The best part of any kayak race is the pre- and  post-race hanging around with other paddlers and shooting the shit, and we had plenty of time for that. Because the race is in Rochester, not only did Vicki come to watch, two of our non-paddling friends Mike and Gail came to watch and cheer.

Since this race is flat water, I decided to try my V12. It’s not as light as the V10 Sport and based on my results in the weekly BayCreek time trials, possibly not as fast – although that might be because the time trial spends a greater proportion of its time making 180 degree turns and accelerating out of them. But it’s a boat I want to get some experience with and so I thought it was a good risk.

It’s also a course I scouted a few times, and there are some tricks to it. The biggest trick is that from about kilometer 1.5 to the turn at kilometer 3 the water is very shallow for almost 1/3rd of the width of the river to the left side, and again on the right after the turn. It’s easy to get suckered into that side because it’s closer to the inside of the curve of the river and so it looks shorter. But our long boats get slow in shallow water, and even worse you can find yourself dragging your paddle or your rudder in the mud and/or weeds. There are other shallow spots to watch out for, and interestingly enough, one place where sneaking in behind an island is actually faster because it’s surprisingly deep in there and sheltered from the current and wind. Oh yeah, one other factor in favor of the V12 – it has an over stern “kick up” rudder so I wouldn’t have to worry about weeds and submerged logs. I’d broken the rudder of my Sport on a submerged log while scouting the course a week or two ago.

At the start, as expected Tom Murn jumped out in front. He’s just back from competing in the Under 23 World Championships so while he’s been concentrating on 1000 meter sprints, a 16km paddle is just a walk in the park for him. He was followed closely by Todd who was followed closely by Doug and Mike in Doug’s V10 Double, and by John Hair, who was trying to get on the Double’s wake. That left Roger and I hunting for a wake we could hold, or failing that a good line. For some reason, everybody was going off to the left under the first arch of the first bridge. I knew that wasn’t as good a line but what are you going to do when that’s where the wakes are, so I followed. But even within the arch there were shallow spots and deep spots, so i was trying to hold to the deeper part on the right while Roger, who was to my right, was trying to push over to the left. I wasn’t yielding an inch and so he dropped behind me. It wasn’t until I felt a slam against the side of the rear of my boat that surprised the hell out of me and forced me to brace that I realized that roger had dropped behind so he could cut to my left. I guess he’d slightly misjudged it and hit my stern.

After we cleared the bridge, he and I were pretty much neck and neck and pretty much down the middle of the river until we got to the stretch at kilometer 1.5 or so. He got suckered into the shallows, and while it didn’t slow him down as much as I’d hoped, it must have cost him energy. He disappeared from view behind me about kilometer 2.5 or so. When I did the turn at kilometer three I could finally see where he was and he was at least five boat lengths back, and neck and neck with a stranger in a Simon River boat. That was enough of a gap for me to take a gulp of water, but not enough to stop worrying that either Roger or the stranger were coming back, or worse that they’d trade pulls and both pass me.

But now I was paying attention to John ahead of me. He had a pretty fair gap, but he was going into the shallows and losing time. Every time he passed a landmark I’d count how many strokes it took me to get to that landmark and I was definitely closing on him. I just had to hope I could catch him before he ran out of shallow water to make mistakes in.

At kilometer 6.5, we were back up to the start/finish area. My cheering section was easy to spot (and hear) as they stood up on the pedestrian bridge, although I couldn’t actually read the sign they were holding. It felt good to see them, and I feebly tried to croak out a thanks, but they couldn’t hear them.

Not too far after the bridge at kilometer 7 is a “sneak” behind an island. John didn’t take it and I did. I had a fantasy that I was going to pop out the other side of the island ahead of him, but that would have only happened if he’d gotten mired in the sandbar that tails back behind the island just under the surface of the water, but evidently he didn’t, because he was still ahead of me. I continued to grind my way up to him, keeping just enough further out from the shore that I wasn’t getting into the suck water and he was. Watching your GPS to see if your speed drops is a good way to do this – if you can trust the VIRB overlays on my video, you can see that I was still making a respectable 10.4 km/hr through the “sneak”, although I was closer to 10.7 in the deeper part of the river.

I didn’t actually catch John until about kilometer 10.7. I had time to take a drink and try to recover a bit in his stern wake, and while I was debating with myself whether to go up beside him and work together or just suck his wake as long as I could when he must have noticed me, because he suddenly made a sharp “S” turn. At first I thought he was avoiding a rock or submerged log, so I tried to turn with him, losing lots of speed in the process. But then he said something to me and put the hammer down, so I started to think he’d done it deliberately to throw me off, sort of like the “Crazy Ivan” move that Soviet subs did in “Hunt For Red October” and other military fiction. He claimed afterwards that he’d just turned to see what the noise he’d heard was, and was startled to see me there. I guess he was pretty focused ahead of him because there had been plenty of opportunities for him in the last 5 kilometers or so for him to see me in his peripheral vision as I was off his stern quarter.

At the turn at kilometer 11.3, he’d gapped me by a good four boat lengths, but my turn was a little better than his and I closed it to within two boat lengths or less. But no matter what I did, I just couldn’t seem to pop up that last couple of boat lengths to be able to ride his wake. For the rest of the way downstream, he’d get out into the middle of the river and open up a larger gap, and then he’d go to close into shore around a bend and I’d close it down a ways, and then he’d be out in the middle and open it up again. I don’t think I ever got closer than 2 or 3 boat lengths the whole way.

At kilometer 15.8, I passed under the pedestrian bridge again and once again my cheering section was waiting. I was too tired to do anything to acknowledge them other than look up at them and nod. But I was sprinting for all I was worth, and that isn’t much. I managed to finish 12 seconds behind John, which I’m pretty happy with. I don’t think I could have finished that close to him without the advantages of guile and knowing the river.

Full results are here.