This is sad

I don’t know if this is a comment on the sad state of Java, or the sad state of the way my mind works.

I’ve been a Java developer since 1998. I think it’s a great language and I love working in it. But when I’m starting a personal project, I look for excuses not to use it. I don’t know why. I can code up beautiful and powerful GUIs in it, but I usually choose not to. It’s so ridiculous that I’m going to a meeting to discuss a possible freelance project very shortly, and I think I’m going to end up deciding to learn Python and wxPython and coding the GUI in that rather than do it in Java. And I don’t really know why.

Should have looked at it yesterday!

Remember how on Saturday I was having to hold full right rudder just to go in a straight line? Well, today we went out for a long paddle on the lake, getting to know the course of the Rochester Open Water Challenge. The lake wasn’t bad, and I was riding Dan’s wash the whole way, but the rudder problem was getting worse and worse. Just was we were getting back towards the beach, Dan wanted everybody to go into the Bay because that’s where he’s planning to take the race, but my foot was cramping up from holding so much rudder for about 7.5 miles, so I started heading for the beach.

I was about 300 metres from the group when my rudder when “ping” and I felt the cable fall onto my right foot. Oh, that is bad. Here I am, trying to ride the surf to shore when I’ve got full left rudder on. I raised my rudder, and that’s not much better – I remember when I bought this boat finding a review on-line that said that the biggest problem with it was that it was totally uncontrollable without a rudder, and so therefore not safe for a sea kayaking trip. Well, it took a lot of dragging my paddle on one side, sweeping on the other, and then repeating the process on the other side, but I got into shore.

And when I looked, as well as the cable coming off the rudder pedal, the foot peg had completely “burst through” the channel that it’s supposed to ride in. No doubt it was this that make the rudder misbehave. Unfortunately, there is no way in hell to fix this without a replacement part, and Baycreek doesn’t carry them, so I’m not going to have this boat working for Wednesday night.

The Poseidon Adventure

Today the team met for some light training on the lake. The winds were coming from the south, and so there was almost no waves on the lake except for a gentle regular swell coming from the north west. Unlike several members of the team, and Dan, that’s my favourite time to be out there, when there is nothing to challenge you. It’s been pretty nippy today with temps in the low to mid 60s, and of course the lake water is still very cold, so I made a last minute decision to wear my wet suit, and thank goodness I did.

After a bit, we ended up on the other side of the boat channel and jetty from the beach we’d launched at. We were in the middle of some race tactics work when I was making a circle around and concentrating on looking at the radius point of the turn instead of watching the other boats, while Bill, who was also making a circle around and not watching out for other boats, crashed into me. I attempted a brace but didn’t react quick enough and my boat went right over dumping me in the cold water. Most of my stuff stayed in the boat, except my half skirt which came out when I did – I managed to snag it with my foot just as it was drifting down out of reach. My PFD, which was a bit lose so I could breath, came up around my head which was unfortunate. Initially the cold was enough to make you gasp, but after a few seconds I was actually feeling fairly comfortable in the water.

But I have enough trouble getting into and out of my boat in optimum situations like Dan’s dock or the boat ramp. Even with two boats docked up against mine and guys helping me on both sides, I was unable to get back into my boat and fell out again when I tried. So I ended up clinging to the front of Mike’s boat as he paddled me into shore. The water felt extremely cold against the back of my neck and head. But when I got close enough to shore to stand up, I didn’t feel cold. I wasn’t entirely sure if that would continue, or if I would chill off quickly, so I wanted to get moving again. I tried to dump and pump out water, and get back into the boat, but I was rushing because I felt that I needed to get paddling again before the chill hit me. That was bad, because I ended up doing a bad launch and falling out again into the water. Then Mike and Paul D came to help me get in by holding onto my boat, but again I rushed and didn’t do it right, and fell in again. Mike and Paul had both said that they were going to wait for me to get in and paddle with me back to the beach were we’d launched to make sure I was ok, but at this point Dan came along and took over. He told Mike and Paul to go off and do some training exercise, and made me go sit down on the beach while he took care of dumping out my boat again and getting it ready. Initially I was worried that sitting down in the air would cause me to chill off, but there was almost no wind down low and I didn’t feel too bad. The short rest was actually a very good thing, because I managed to catch my breath and calm down a bit. Up until this time I hadn’t realized that I was acting a bit panicky. This time when I got back in I did it right and didn’t try to rush.

I paddled off, expecting Dan to come with me, but he didn’t for some reason. As I rounded the jetty to head back to the beach where we’d launched, I discovered that my rudder was all jammed up with sand from the beach, and between that and the residual water in the bottom of the boat, I was having some trouble staying upright and off the rocks at the end of the jetty. By this time I was out of view of any of the rest of the paddlers, and I was really annoyed that Dan hadn’t come with me as he’d promised. I felt like I could easily have dumped there and nobody would have seen me for a long time – maybe long enough to get hypothermic and drown. But I managed to get it to shore fairly close to where I wanted to be, and went back to the car to change. I went back to the boat and recovered all my equipment, and by this time I could hear Dan yelling at somebody on the other side of the jetty.

Everything worked out fine this time, and once again we had a great old time afterwards drinking beer and telling stories. That is really the best part about being part of the team.

I feel like when the water warms up a bit I really need a refresher course on kayak rescues. I’ve done canoe rescues in the past, but a kayak is a lot harder to get back into, especially when you’ve got a tight cockpit like mine.

Today’s Discovery

If you have a Core Data data model with one Entity, say “AircraftCategory” that has a “to-many” Relationship to another, say “AircraftClass”, you can access the AircraftClass objects for an AircraftCategory using an NSMutableSet. But if you Fetch an NSMutableArray of AircraftCategory, and are doing a “fast enumeration” through the AircraftCategory objects, and you happen to remove one of the AircraftClass items from the current AircraftCategory object using one of the generated accessors, the fast enumeration will see that as a modification of the NSMutableArray of AircraftCategory and throw an exception. This is in contrast to Java where you would only get an exception if you were to add or remove things from the actual Collection that you were iterating, and not from calling setter methods on the objects in the Collection.

So instead of removing the AircraftClass from the AircraftCategory, I discovered that what I have to do is remove it from Core Data directly, using
[managedObjectContext deleteObject:aircraftClass];

I haven’t tried it yet, but I wonder if this wouldn’t happen if I assigned the fetch results to an NSArray instead of an NSMutableArray?