Archive for August, 2006

Link to Google Maps through “Make A Shorter Link”

I just got home. I’m exhausted.

Mark managed to convince Curt at Aviation.ca to get us accredited as media to the Wings and Wheels Niagara airshow. Wings and Wheels is a very small show, but the Snowbirds would be there, and I’m mad keen for the Snowbirds. I haven’t seen them in a few years, and I knew I wasn’t going to be able to make the Canadian National Exhibition airshow next week. Besides, small airshows have a charm all of their own.

The media pass came with some nice perks. Access to the performers and planes. Entry to the “Evening with the Snowbirds” dinner at the “Oh Canada Eh?” dinner theatre. Maybe more – it was all being worked out between the organizers and Aviation.ca even as we were heading to the show.

I took my film camera instead of my digital. The digital has a longer effective zoom, but I don’t trust it as much for being able to get exactly what I want. Unfortunately that means I’m going to spend a fortune in developing, and I won’t have any pictures for several days.

The “Oh Canada Eh?” theatre was quite entertaining. Surprisingly entertaining even – I thought the concept sounded pretty hokey, but it was well done and fun. That’s where I got to meet Petra, the public affairs officer for the Snowbirds. She turned out to be extremely helpful today. They put all the Snowbirds at different tables, so there was one at each table. We didn’t get a pilot, we got the guy, Dan, who drives their big truck. But he was friendly and had some nice road stories. And he says he’s thrilled to be working with the Snowbirds and really hoping they’ll pick him for next year as well.

Today we got some pretty good access to the flight line and I think I got some good pictures. Unfortunately there were a few little mixups and miscommunications as to where we were allowed to go and when. I’m not complaining – you’ve got several conflicting groups who want to balance exposure and publicity against safety for both the performers and planes and the crowd. For instance, at one time we talked to Petra and Airboss, and they both said we could go to the end of this taxiway to take pictures of the Snowbirds taxiing out, and then retreat to the corner of a hangar once they were in the air. We were assured that this location was outside of the “aerobatic box” protected area. They even sent a security volunteer out with us. I think I got some great pictures, as the Snowbird pilots waved and saluted as they rolled past. But then after they took off, the organizers sent out a couple of more security people to tell us to move back to where the paying crowd was kept, because the Snowbirds were refusing to start the show until we cleared out. That was too bad, and I sorry that I am at least partially responsible for holding up the show. I wish things had been made clearer what zones we were allowed in and when. I would like to suggest that the organizers consider having a briefing on the media day to make sure the different people with the different requirements, from the airboss to the public affairs people to the security volunteers to the pilots and media people are all on the same page.

There were several modifications to the show. The US military people didn’t show up because something came up. The Canadian Forces parachute team showed up in a very strangely painted CASA because their normal Buffalo was having problems, and were only able to get a couple of jumpers through some holes in the clouds. (There is nothing more disappointed looking than parachute jumpers getting out of a plane on the ground.) The Sukoi and Julie Clark did pretty much their usual shows. The CF-18 did its usual good job, with without the trademark afterburner climb up out of sight. Well, he did but he was out of sight at about 5,000 feet. And the Snowbirds did their “low show”.

The “low show” maybe is missing some of the cool maneuvers of their “high show”. But because the planes make lots of low passes, it’s easier to get some good photo shots. At least I hope so – I’ll let you know when I get the PhotoCDs back. Like I said before though, I haven’t seen the Snowbirds in a few years, and I’d never seen them do opposing “duos” with two planes in each direction. That was pretty cool.

The Snowbirds show got cut short by a few minutes when they reported that Snowbird 1 had hit more than one bird. Sometimes when one plane hits a bird or has a mechanical, the pilot comes back and takes Snowbird 10 or 11 (depending on whether he needs a left handed or right handed plane). But as he was doing a precautionary emergency landing, along comes Snowbird 5 doing the same. In the autograph line afterwards, Snowbird 1 said that 1 and 5 weren’t the only ones who hit birds – evidently the combination of a show near the lake shore and a low show puts both the birds and the Snowbirds in the same airspace.

Until I get my pictures back, I have to say my best souvenir of the show is my laptop. My laptop has a custom vinyl skin I created by getting a picture from the Snowbirds official site and sending it to a site that creates custom skins from submitted pictures. I had a thought last night that I could get it signed by them, and so I dragged it all over the field today. And it was worth it. I got not just the 9 pilots who fly the shows, but also Snowbird 10 and Snowbird 11 who provide the ground support, and Petra their public affairs officer (who I believe is the only non-pilot who gets to wear the Snowbirds red uniform). A lot of them thought it was a cool idea when they saw it, and asked me where I got it. I’ll try to get a picture of it up later.

So in closing I’d like to say a big thank you to Curt at Aviation.ca, to the organizers, to the Snowbirds and especially for Petra, to the Airboss and security for putting up with us, and to Mark for suggesting this.

In general, how important is “crafting”? Does it vary from MMORPG to MMORPG? I read a bunch of web comics and blogs, and some of them are MMORPGers, and they talk about stuff like “I worked on my knitting craft last night and managed to finish this lovely sweater” (ok, that’s not quite right – it’s usually gloves or boots or something). But to me, the only thing more boring than actually knitting or fishing would be to sit in front of a computer watching a simulated “me” knitting or fishing.

If I decide to spend all my on-line time questing instead of doing boring crafting stuff, will I find myself unable to reach higher levels or to afford decent arms or otherwise held back?

And that’s the way I like them. My post from last time (Rants and Revelations » It’s so nice to renew your medical…) has all the links that explain why a boring medical renewal is the best kind.

I’ve been kind of dreading this for two reasons:

  • The doctor I go to usually spends the entire time making really stupid jokes about Hillary Clinton
  • And at no pattern I can discern, sometimes the exam includes a prostate check and sometimes it doesn’t.

This time, no Clinton jokes, no prostate exam. I had a lot more trouble than before on some parts of the eye test, particularly the one with these diamond shapes that you have to tell which corner has the checkerboard. When it came to the left eye ones, I had to unfocus my eyes and refocus them before I could even see a checkerboard on #1. I got to #10 on the others, but only #6 on those ones.

But I’m legal for another two years. Woo hoo.

How legitimate is it to “game the system”? If you exploit flaws in the AI, is that cheating or just making the best of the situation? Two instances from last night:

  1. I was attacked by two enemies, and they kicked my ass. When I came back, I discovered that if I shot one with a distance weapon where there was a fence between me and the other guy, the one I hit ran up and attacked me but the other stayed behind the fence. This enabled me to kill them one at a time which was way easier.
  2. A “boss character” of a minor quest came up and attacked me while I was busy attacking his lackey. He kicked my ass. When I came back, his AI was acting weird – I’d shoot an arrow at him, and he’d run half the distance between us and then run back to where he was. I’d shoot another arrow, and he did the same thing. I got 3 or 4 good hits in that way before finally closing with him and defeating him in hand-to-hand.

After receiving the email I mentioned in Rants and Revelations » Who’d have thunk it?, I responded with

I have renamed the part of the Wiki that uses the trademarked word
“NavData” to “DAFIFReplacment”. However, I am going to continue to use
the “/navdata/” part of the URL as that is a generic term and
untrademarkable and changing would break people’s bookmarks. You can
have a look at http://xcski.com/navdata/ if you wish.

I hope that meets your requirements.

Evidently their lawyers work nights, or they’ve outsourced it to India or something, because I got a response at 8:47pm:

Mr. Tomblin,

We appreciate your prompt action and reply to our notice.

While we cannot agree that the navdata term is generic, we understand the
bookmark issue and are satisfied with your action regarding this matter.

John Jaugilas
Jeppesen Intellectual Property
(303) 328-4178

I’m participating in a beta for a new MMORPG, which one I probably can’t say because of the NDA that I clicked to agree to without reading very carefully. I’ve never played an MMORPG before and I can really see the appeal – far better for us old farts than the fast twitch first person shooters that I used to play.

I’m playing a “hunter” class, and the hints say to stand back and fire distance weapons rather than getting involved in the hand-to-hand, but I’m also in the initial quests that are very small and don’t make much sense to do in a group. So I spot an enemy, fire an arrow or maybe two, and the enemy comes over and starts hand-to-hand, so I respond in kind. That’s fine and dandy, since so far I’ve had not much trouble with the hand-to-hand either. But on one of the quests I found myself in a very target poor environment with dozens of players running around trying to find enemies to defeat and every enemy already engaged in some battle or other. I basically had to spawn-camp. While waiting for an enemy to spawn, I’d see other players fighting enemies nearby. In order to experience that “hunter” life-style, I’d fire some arrows at the enemy they were fighting to give them some help. Is giving this sort of help a good thing or a bad thing? I’m pretty sure the game system will give the kill to them and not me. But I don’t know if I get XP for the kill or not, and if so would the other players think I’m stealing from them?

Well, it turns out that using the WikiWord “NavData” has upset Jeppesen Sanderson because they’ve got a product with that name, and they’ve sent me an email telling me to stop using the word or they’ll start legal action. I’m still using the word “navdata” because lots of people use it as a generic word meaning “navigation data”. So my Wiki url is still http://xcski.com/navdata/, but all deep links you might have are broken. Replace the word “NavData” with “DAFIFReplacement”.

I put in at Browncroft, and paddled upstream. The stream was running pretty fast because of recent rains. Unlike last weekend, when there was only one place where I had to sprint my hardest to get through some fast water, this week there were three places like that. Because of that, I only managed to make it upstream for 35 minutes before I pooped out. And it only took me 15 minutes to get back down. But on the plus side, the high water meant there was no place where the kayak bottomed out and got stuck like last weekend.

Ok, maybe I was a little succinct in my previous post.

You see, we’ve got an architecture where there are 3 or 4 layers of code, each one of which calls the one below it and then gets information back in the form of callbacks. Oh, and one of the very lowest layers is accessed through an RMI interface. Also, the very lowest layer deals with content, which can be created/modified/deleted through the program, or through other programs or just by doing file system stuff, which that lowest layer finds out about through dnotify.

The front end GUI has a dialog where you can delete content, and the problem was that evidently one of our customers have the fastest fingers in the world, and they complained that they delete the content and then go to ingest (slurp in) new content but the content they just deleted is still there (the deletion process takes a good 10-15 seconds) so the ingest fails due to lack of disk space. So they wanted the deletion to actually wait until it was done. And the lower level library actually provided a method called “deleteContentWaitTilDone”. So I thought it would be a simple matter to call it – once the method returned, the content would be really gone.

That’s when my problems started. I spent a week on this damn thing. The sad thing is that if Martin was still around, I could have used his Eclipse debugging skills and got this done in half the time. But when I attempted to install Eclipse on my machine, every time I fired it up, the whole machine locked up.

The problem seemed to be that the deletion process called callbacks in the higher levels, and ultimately some of them would do GUI stuff, and they’d also call down to the library. I had a hell of a time working out what was the actual problem. I ended up putting System.out.println debugging statements all over the damn place.

What I found first was a bunch of extraneous “synchronized” methods – the problem with that was the methods were synchronized to prevent different things. So instead of synchronizing 6 methods in a class where 2 of them were synchronized to prevent simultaneous accesses to a variable named “childThread”, and 2 of them were synchronized to prevent simultaneous accesses to the library, and 2 of them were synchronized for some other reason. I removed the “synchronized” on the method names, and then protected the important parts with different synchronization Objects, one called “childThreadSyncObject”, one called “librarySyncObject”, and it turned out the other ones didn’t have to be synchronized at all. Further digging revealed that the code one level above this that called this also had a synchronization object, which was redundant and I removed it.

The next thing I found was that one of the GUI level callbacks called “fireIntervalChanged” and it never returned. Ever. That’s when I had another epiphany – the callbacks aren’t in the gui event thread, and the event thread is currently locked because it’s waiting on that “deleteContentWaitTilDone”. So I went through all the GUI level code and made all the callbacks do the bulk of their processing in the event thread using SwingUtilities.invokeLater. The standard way to do that is

SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//..do stuff..
}
});

but unfortunately you can’t pass arguments that way, so I ended creating a metric buttload of tiny private classes that implement Runnable but take arguments in the constructor.

After all that work, I finally had stuff working. But unfortunately I neglected something that’s probably important – I didn’t give any sort of dialog or busy cursor or anything while that processing is going on. Oh well, maybe next time.

Proper Thread synchronization is hard.

While I was mowing the grass on Saturday, I managed to notice that both the passenger side doors on Laura’s car were unlocked, and the front one was actually ajar. Since both Laura and Stevie were known to not lock their doors when they were passenger’s in Vicki’s or my cars (in much the same manner that fish are known to like to swim in water), I assumed that she or her friends had just been careless the night before. I somehow managed to miss noticing that the back window was smashed. Somebody evidently broke into her car and found nothing worth stealing.

I guess I should probably stop leaving my GPS, digital camera, film camera, kayak paddle, and flight bag with 3 expensive headsets, portable transciever and my worthless but irreplaceable log book in the trunk of the car any more. Not sure about the XM radio – yeah, it’s supposedly portable but that would be such a hassle to drag in and out of the car every night. The CDs can probably stay – they’ve all been ripped to MP3 anyway, and besides they’re all obscure crap that nobody would steal.

Back when I worked for GeoVision we had a tradition in the winter that the night of the full moon, we’d go cross country skiing in the dark up to one of the lodges there, cook some dinner, hang out for a while, then ski home. It was extremely cool. One day at work, the day after one of these ski trips, I noticed that there was no money in my wallet. No matter, I thougth, I’ll just head over to the Toronto Dominion next door. But somebody else who had been skiing with us asked if my car had been broken into last night. I said I didn’t think so, so they asked me if there was any money in my wallet. They suggest that I go down to my car and look for a small hole beside the keyhole. Sure enough, there was one. Evidently somebody had gone around to all the cars, punched a hole in the door panel near the keyhole and opened the door somehow, and stolen any money he could find in the car, but only money.

The next full moon came, and this time I decided to be one step up on the theif. I put my wallet in my bum bag so it would come with me when I went skiing, and left the doors unlocked so I wouldn’t get another hole in my door. However, I stopped for gas on the way to the parking area, and so my wallet made its way from my bum bag to my work pants, so didn’t come with me on the ski. I came back to find my wallet had been emptied once again. Buggeration.

After getting that error on the pt_comments table again, I went into mysql and tried a

check table pt_comments;

and it found an error, so then I did a

repair table pt_comments;

and it said it repaired it, but another

check table pt_comments;

found the same damn error again. So I shut off the web server (so I wasn’t getting hit with comment spams) and did a backup and restore of the entire mysql database, and the problem seems to be gone. For now. Maybe. We’ll see.

Every time I go into my Wordpress SpamKarma page, I get the following error:

Failed to purge comment spam entries.
Query: DELETE `pt_comments`, `pt_sk2_spams` FROM `pt_comments` LEFT JOIN `pt_sk2_spams` ON `pt_sk2_spams`.`comment_ID` = `pt_comments`.`comment_ID` WHERE (`pt_comments`.`comment_approved` = ‘0′ OR `pt_comments`.`comment_approved` = ’spam’) AND `pt_comments`.`comment_date_gmt` < DATE_SUB('2006-08-14 11:36:26', INTERVAL 2 HOUR)
SQL error: Incorrect key file for table './wordpress/pt_comments.MYI'; try to repair it

So then I go into mysql, do a “repair table pt_comments”, and repeat the purge operation and it’s fine. But some hours later, when I go back to the page, I get the same error. How do I repair this damn table so it stays repaired? Would doing a full mysqldump and restore fix it?

Hey, that was a big success. It was supposed to start at Noon, and I arrived at 12:15. There was nobody there yet, and I was walking over towards the river to have a look around, and seriously considering whether to declare the thing a big bust and head home, when up comes Brad Salai and Jim Hood with all the food. Hey, even if nobody else shows up, at least we can eat and drink. But over the next little while, people started showing up. By the time the charcoal was ready, we probably had 25 people there. It seems there were a bunch of people from Artisan Flying Club, 3 or 4 other people from Rochester Flying Club (RFC), and at least three former members of RFC.

Mostly we just sat around eating and drinking and talking about flying. What more does any group of pilots need to do? At around 3pm, a Red Bull truck pulled up and handed out cans of Red Bull energy drink. (They’d evidently contacted Brad Salai to ask if they could come.) Just for the record, the sugar free type of the drink doesn’t taste very good. I don’t think I was alone in that assessment – there were a lot of mostly full cans sitting around as we packed up at the end.

I’d say the event was a success, and I hope we decide to do the Second Annual Rochester Pilots Picnic. One comment I heard was that we should get the Rochester Pilots Association RPA back together. RPA sort of went on hiatus for many years because the guy running it lost interest in running it. But then Paul Pakusch decided we needed to get it back together, but when we started having meetings only 4 or 5 people showed up for each meeting, so he disbanded it. I think the Assocation assets were disposed according to the charter, which probably means it went to an aviation related charity. But maybe we went about it the wrong way – instead of having a bunch of boring business meetings, maybe we need to have picnics and other fun things, and then see if we have concerns that need a business meeting. After all, the Rochester area isn’t just Greater Rochester International Airport – there are a bunch of airports in the area, and a bunch of different groups of pilots who should all get together and talk flying.