Archive for June, 2005

Nice flight up.

Thursday, June 30th, 2005

Vicki and I flew up to Ottawa today in the Lance. The plane was a bugger to get started, and at first we had a problem where the push to talk (PTT) on my yoke and that on the hand mike refused to work, so we cross threaded the headsets and I pushed the PTT on her yoke when I wanted to talk. A major pain. A few minutes later I noticed I still had the button pushed down to put comm1 on the overhead speakers. I turned that off and suddenly my PTT started working again. I’m not sure what the connection is, but it was good to get rid of the criss-crossed wires and the hassle of reaching over every time I had to talk.

The Lance climbs like a slow dog in hot weather, so I took off with the gear override on and two notches of flaps. That made a huge difference.

Rochester was very hazy, reporting 3 miles visibility, with few clouds at 500 feet and a scattered layer at 5000. I said to Vicki “it will get clear as soon as we’re above that scattered layer at 5000″. Actually by the time we got above the layer, it was more like 6000 feet, but it was clear, cool and very smooth up there. We levelled off at 9000 feet around the KONDO intersection. We could see a “wiffle-diff” (a rising plume of cloud punching through the cloud layer) just ahead of us as we turned direct to ART. I guessed it was the steam from the power plant at Oswego. I guess the air below the cloud was so unstable that the moisture from the power plant started rising and kept rising until it hit 9000 feet.

I was a little disconcerted when I was about to reach ART and they hadn’t ammended by clearance to specify the CYRIL.SIX arrival. Usually Wheeler Sack approach does that by then, because the FSS computers won’t take that when I file, but Ottawa insists on it. I called and queried, and he said that it was already on the strip, so he thought I’d already been given the clearance. Good thing I know this route.

There was a weird strip of clear air over the St. Lawrence River. I’ve often seen different weather on each side of the river, but this is the first time I’ve seen the same weather on both sides and different weather just in the narrow confines of the St. Lawrence valley.

After crossing the St. Lawrence, Montreal Center started us down. First we were in and out of the tops of cumulus clouds at 7,000 feet, but as we were getting vectored for the approach it was almost completely solid between 4,000 feet and 3,000 feet. In the infrequent breaks, I could see that at 3,000 feet was only a few hundred feet above the base of the clouds. So as soon as Ottawa Terminal cleared me for the NDB 25 approach, I descended (I still can’t get used to the way they don’t give you an altitude for the approach) down to 2,500 feet and said I’d take the visual.

After I was cleared to land, a Dash-8 reported ready to take off. She probably could have taken off before I got in, since I had my gear down and was slowed down to 90 knots by then, but the controller made her wait. I admit, I still get a feeling of power making 50 people wait for little old me, but I wonder if I should have offered to slow down more to allow them to take off.

Never trust the label

Wednesday, June 29th, 2005

I’ve just wasted 4+ hours because I trusted the label that said that the CD our build-meister gave me had the latest build on it. I guess I trusted the build-meister too. I should have noticed that many of the RPMs said “3.6-006″ instead of “3.6-007″ like I was expecting.

Instead, I have to rebuild two systems (a CMS and a CP, as defined in the post the other day) back to RedHat 7.3 and version 3.3 of our software, configure it, burn a new DVD with CentOS 3.4 and version 3.6-007 of our software, and upgrade the two systems. See you in another 4 hours.

Oh, and did I mention that the air conditioning at work has one of its three chillers off-line, and has for the last three days, and so it’s hot and sweaty here?

What were they smoking?

Tuesday, June 28th, 2005

Sometimes I’m forced to question the sanity of my cow orkers. If you run our setup program and choose the option to set the time and date, you are presented with a string like “062716452005.40″ As near as I can figure, that’s DDMMHHmmYYYY.SS, or translated into English, day, month, hour, minute, year, period, seconds. Besides the utterly moronic order of the elements in the string, the input routine has absolutely no flexibility in what you can enter and no error checking. Get one character wrong or miss a column, and you’re going to get a date and time that are utterly unlike what you expected, and you won’t find out until you exit the setup program and type “date”.

Hmmm. How do I do this?

Tuesday, June 28th, 2005

Ok, picture a network with one “controlling computer”, which I’ll call “the CMS”, and a bunch of satellite computers which I’ll call “the CPs”. These satellite computers live in projection booths in a theatre and have digital projectors hooked up to them, but that’s not important. The problem I’m dealing with is upgrading the machines from version 3.3 of our software to version 3.5. The software upgrade also necessitates an upgrade from RedHat 7.3 to CentOS 3.4.

I’ve got the upgrading of the CMS sorted (I have a non-bootable DVD with an apt repository with CentOS 3.4 and our software, and a kickstart file that does the upgrade without touching the partition with our data on it).

The CPs have hostnames of cp1 to cpN, and IPs of 192.168.30.101 and up. cp0 (192.168.30.100) is reserved.

What I’m working on now is upgrading the CPs. What I’ve been doing is making the CMS a PXE boot server, and wiping the boot partition on the CPs one at a time, re-installing them as cp0 and then when it comes back up, ssh-ing in and restoring the backed up configuration, including the hostname and IP.

The problem with that is that it takes 20 minutes per CP, and the powers that be are complaining that it takes too long. They’d like something more parallel.

So I’ve been thinking of retrieving the MAC addresses of each CP before I upgrade. Then I do them all in parallel, and use the MAC address afterwards to figure out which one is which. I understand that I can use “arp -a” to retrieve the MAC addresses. I’m wondering if there is something I can do to DHCP to give out the correct 192.168.30.1xx address to the right machine, or whether I should have DHCP hand out addresses in some other range, and then use “arp -a” again to find which machine has which address and fix them one at a time?

Yesterday

Monday, June 27th, 2005

Yesterday was another back breaking and knee hurting day of getting ready for the move. This time the target was the Video/DVD/CD shelf and the book shelves. I went through the videos and DVDs and put the ones that belonged to me and I wanted to keep in one place, the ones that belonged to me that I didn’t want to keep in the garbage, and the rest in semi-categorized piles for Vicki to sort out. The biggest problem was the stuff oriented to little kids. The real crap like “Babysitters Club” and like was tossed, and the quality and semi-quality stuff like Disney movies was kept. The second biggest problem was the pile of about 15 unlabelled tapes. Most of them have been kicking around unlabelled since I moved in here 9 years ago, and Vicki has been saying for the past 9 years “I’m going to watch them and label them”, but of course nobody ever gets around to it. And since our VCR is currently doing this weird “flash of death” thing, we can’t watch them now. So they’re stored away where they’ll go another 9 years without anybody looking at them. Oh well, such is life.

After all the fun of the video collection, I moved onto the rest of the book shelves. It’s amazing what crap gets tucked into our bookshelves and forgotten. I found a girl’s swimsuit in a plastic bag with original price tags on it. I found plates and knives and forks. I found old board games that nobody has played in 10 years. Lest anybody think I’m picking on everybody else, I also found about a dozen print outs of manuals and installation instructions for computer programs that I’d obviously meant to get back to later and never did, all tucked in random parts of the bookshelf. I found school binders full of blank paper. I kept a stack about two feet high of various types of blank paper, but threw out a shocking amount. I found one of our missing copies of “Pronounced Cathouse.org” (sorry, I don’t have the actual title in front of me - I think it was a take off of a Lynryd Skyrnd album cover), which is a priceless treasure.

All in all, I think I filled up about 6 or 7 garbage bags. I also threw out a gigantic Sun workstation monitor that I borrowed from work (if anybody asks for it, I’ll claim I dropped it when moving it, which I came close to at least twice) a Mac LC-III and two old SCSI drives, and two bird gyms. And we moved a van load of boxes and two computers to the new place.

Vicki, besides doing the incredibly angst-full job of sorting videos, also worked hard up in Stevie’s room. I believe that the last time Stevie’s room was cleaned up, it was done by a chap named “Hercules”. I wouldn’t have taken on that job for any price.

Damn you, Linode

Sunday, June 26th, 2005

For the second weekend in a row, my linode node has died. This time, the linode.com web site is down as well. From what I can glean from the linode IRC channel (which isn’t on linode), about half of their servers are dead to the world.

For me, that means no outgoing email, no mailing lists, and of course my hosted web sites including navaid.com are all down. This sucks.

Last week’s outage was caused because some clueless tech at ThePlanet, which is the colo where their servers live, moved some power connections around (after being explicity told not to touch anything) and overloaded a power supply. That took several hours to resolve.

Update
It’s up again, after only 6 hours. Geez, this sucks.

Man, I’m tired

Saturday, June 25th, 2005

I spent the afternoon cleaning up the basement. Or rather, I’d planned to clean up the basement, and what I managed was the two computer desks and a tiny bit of the bookshelves. I filled up about 4 garbage bags and a recycling bin. I’ve got two boxes of books and CDs and the Windows box to go to the new house. Oh, and one of the computer desks can go.

I’ve put a monitor back on my Linux server (since it’s not needed on the Windows box right now), and I’m posting this using elinks. Kind of weird.

I can see the progress, but unfortunately I can also feel the pain in my knees and legs, and also all the work left to be done. It’s so discouraging. I feel like I’m going to have to take a week off work just to get the house good enough to list, and then another week to get ready to move.

Six Approaches in Six Months

Friday, June 24th, 2005

It’s that time again, time to reset the clock on my instrument currency. Just about every time I go on a flying trip, I manage to get some actual IFR en-route, usually only for a few minutes here and there, but in the last 6 months I’ve only done one real approach, and of course no holds. In order to stay instrument current you have to have done a hold and 6 approaches in the last 6 months, plus “intercepting and tracking course through the use of navigation systems” (which is pretty hard to avoid if you’ve done the other bits), and since I plan to fly up to Ottawa for Canada Day weekend, I need to be current in case I do get some weather.

I wasn’t interested in doing any non-precision approaches. Ottawa and Rochester both have ILSes and frankly the whole “currency” thing is more of an exercise in being legal than in safety. (Before our trip out to Mt. Holyoke this fall I’ll probably practice a few non-precision approaches because I don’t remember what approaches they have at Barnes Muni .)

So I filed ROC-GEE-ROC, and flew out to the Geneseo VOR and did a hold there. No problem, they assigned a hold on the airway I was already on, so the entry was dead simple. One turn around, and I was ready to come back in. I asked for the ILS 28 approach.

The controller descended me to 2,500 feet and vectored me for the approach course. My first approach wasn’t bad, but wasn’t great. Both horizontal and vertical I kept within 2-3 dots. And when I “broke out” at decision height I was a bit south of the runway.

The next two approaches went much better. Vertical I kept within the donut, and horizontal I went out a dot, or a dot and a half maximum. Although I still ended up a little bit south of the runway each time.

The next approach, I got a new controller. He vectored me further out, made me to descend to 2,100 on the final turn, and then asked me to keep my speed up. I did, and I actually did a pretty good approach. Kept it in the donut both horizontally and vertically almost the whole approach.

I’m not sure what went wrong in the last two approaches. Maybe it was the new controller (who kept giving me the descent at the last turn, but started turning me in nearer and giving me an abrupt turn-on), maybe it was the fact that I adjusted the DG for precession, maybe I was overconfident, and I was trying to fly them fast again, or maybe I was just bored and tired. But both approaches I was hitting 3 or 4 dots deflection horizontally both to the left and the right. And on the final one, I couldn’t get it slowed down for the landing. After I got touched down, I couldn’t even seem to put much pressure on the brakes, and very nearly decided to go-around. I ended up rolling into the overrun area on runway 28, which is 5500 feet long.

Getting spammed in earnest now

Tuesday, June 21st, 2005

After I moved my blog from MoveableType to WordPress, it seemed that the comment spammers couldn’t find my new blog. For a while there, it even seemed that referrer spam had dropped down to nearly nothing. But they’re back, with a vengeance. They’re still trying to spam my old blog which doesn’t exist anymore, and Maddy’s blog which doesn’t accept comments any more, but now they’re spamming my blog. Or attempting to, anyway. SpamKarma is catching them all, but right now it’s catching 20-30 comment spams a day.

It’s a frustrating waste of my time and resources. I don’t pay for disk space and network bandwidth so that these vandals can use it up.

Obviously there’s something wrong with the way I’m profiling perl scripts

Sunday, June 19th, 2005

I’m trying to reduce the memory foot print of my waypoint generation scripts. In order to see how much memory they use, I’ve been doing a (ulimit -v NNNN; ./CreateCoPilot.pl ….) and adjusting NNNN up and down to bracket where it fails due to lack of memory. I’ve had two problems with that:

  • The break point isn’t constant - a number will work on time and give me an out of memory error on the next run.
  • The numbers are nothing close to what I’d expect.

That second problem is the worst. Near the end of my script, after generating this huge (15,000 record) array of references to hashes, I sort it using the following code:

my $recordsArrRef = $self->{records};
my @newrecs = sort { $a->{waypoint_id} cmp $b->{waypoint_id} }
@{$recordsArrRef};
$self->{records} = \@newrecs;

It appears that at one point, there should be two arrays with 15,000 records in them, and yet when I benchmark the one where I’ve commented this code out against the one that has it, the unsorted one only saves 350 bytes. Ok, maybe it’s sorting in place, and all I’m saving is the actual code. Or maybe that isn’t the point of maximum memory usage. So then I looked in the Palm::PDB code, which is a library from somebody else. And at the end, after getting this array of hashes together, he goes through the array and encodes each one into binary, putting that into a different array. AHA, I thought, that means I’ve got the array of hashes and an array of encoded data records. Maybe what I should do is shrink the array of hashes as we build the array of encoded data. So I changed

foreach $record (@{$self->{records}})
{
...
$data = $self->PackRecord($record);

push @record_data, [ $attributes, $id, $data ];
}

to

while (defined($record = shift(@{$self->{records}})))
{
...
$data = $self->PackRecord($record);

push @record_data, [ $attributes, $id, $data ];
}

and I seem to have saved over 5,000 bytes. Not bad. But I think the has *got* to be a better memory profiling tool for Perl. Time to hit CPAN, I guess.

Oh oh

Sunday, June 19th, 2005

My linode has been off-line since 8:50 this morning. I checked thier support forum, and evidently 4 or 5 machines were off-line, linodes 39-43. (I’m on 41). The technician was checking into it. Then about 9:50, I suddenly couldn’t get into their support forum either. It looks like their whole site has gone tits up.

All my mailing lists are going to be dead until this gets fixed. Waaaa.

Bear with me here…

Friday, June 17th, 2005

While most of my blog entries are an example to the world on how to write in a way that can appeal to everybody, this one is going to be mostly a reminder to myself.

I’m having problems with my waypoint generator on the Linode, mostly because with only 96Mb of real memory, each individual generator task quickly becomes too big and then tasks start swapping, and everything gets horribly I/O bound.

At first it seemed that things were dying right at the very end, and so I lept to the conclusion that it must be in the sort phase, where it takes all the records that it’s retrieved from the database and stuck into an array of references to hashs, and sorts the array by ID. I solicited some opinions on that, and got some good ideas on how to sort by ID in the database while still allowing the priority of datasources that I use now. The most interesting one said

select ...
from waypoints w1
where ....
and field(datasource 'FAA', 'DAFIF', 'Thompson')
= (SELECT min(field(w2.datasource 'FAA', 'DAFIF', 'Thompson'))
from waypoints w2
where w1.id=w2.id)
order by w1.id

But before I had a chance to implement it, I did some testing on my own machine using “ulimit -v” to simulate the reduced memory size. I ran an example query that produces a result file with 71197 records in it, honing in on the minimum memory size that would allow it to finish without getting an “Out of memory” error. Then I cut out the sort stage and did it again. And what I found surprised me. Cutting out the sort stage only saved me 375 bytes, reducing the memory size from 107625 to 107250 bytes. And made the time go from 1:46 to 1:35, a scant 10 seconds or 10%.

Looks like I’m going to have to find another way to reduce the memory footprint. And I keep coming back to this idea I had where I do the sorted query and write each record out to a temporary file as I retrieve it, storing only the id, PDB “unique id”, record number and the offset from the beginning of the temporary file. Then when that’s done, I go back and write the PDB file header, and the PDB file index (which consists of the offset from the beginning of the file, attibutes, category and the unique id), and then append the contents of the temporary file. That way I can avoid having the entire contents of the database in memory.

Side note about the PDB “unique id”: Each record in a PDB file has a 3 byte “unique id”. Normally when you’re creating a PDB file, you leave that as zero and the PDA itself fills it in when it loads the file. But when Laurie Davis created the CoPilot application, it used the unique id as the key to reference the waypoint records from the flight plans. So if I did leave them as zero and let the PDA fill them in, every time you reloaded your waypoint file your flight plans would get scrambled. So I maintain a table with a unique mapping between waypoint ids and “unique ids”. That way, even if you got, say, “KROC” from the FAA data this time and from the DAFIF data next time, your flight plans including KROC would still work, because both KROC ids would get the same “unique id”. That also means every time I load new data into the database, I have to find any ids that don’t currently have a “unique id” for them and generate some new ones. Occasionally I should purge no longer used ids and re-use their unique ids, because 3 bytes doesn’t give you a lot to play with.

AvWeb’s story on Bax

Thursday, June 16th, 2005

Read it. Especially read the sample column, all three pages.

Gordon Baxter Dies At 81

Bax

Thursday, June 16th, 2005

Gordon Baxter died yesterday. He was 81.

I don’t think Gordon Baxter will mean much to most of you, but he was a radio personality (and I do mean “personality” - not a personality-free meat puppet or a screaming idealogue which as what they mean now when they use that term) and writer. And to me, he was the epitome of what it meant to be a pilot.

When I started to fly, I subscribed to a load of flying magazines, including the iconic “Flying”. They’d all arrive about the same time, but before I started on any of them I’d turn to the back of “Flying” and read “The Bax Seat”, Gordon Baxter’s column. One of the first one I read was about how he’d had to surrender his medical and couldn’t fly solo any more. Many of his later ones were about flights taken with kind friends who would be Pilot In Command but let him take the yoke or the stick for old times sake. Many of his articles made me cry.

He didn’t write much about the gory and mundane details of flying, weather, regulations, airspace, or the machines (although he loved his Mooney). Flying for him was about being in the company of people who you love like your best friend on first meeting because they share your love for flying. It was about the places he went and the people he met. And he wrote about it in an easy effortless manner that many have tried and failed to emulate - because it was obvious that they were trying, while “Bax” didn’t have to try, he just wrote.

A few years ago one of the Flying editors said that Bax was too sick to write any more, and they started running some of his best old columns in the magazine. Then they wrote how overwhelmed Bax was by the outpouring of love from people who’d never met him.

I never met Bax, and yet I feel his loss.

Blue skies, Bax.

Time Warner is pissing me off

Thursday, June 16th, 2005

Time Warner were supposed to come to the new house to install cable (and more importantly, cable modem) some time between 4pm and 7pm today. Vicki was at the house from 1:30 on because some new furniture was delivered today, but she wanted me there to point out to the cable installer where I wanted the cable modem and the two TV drops. So I grabbed my laptop and the Linksys router which I’m not using any more (see many, many blog entries) and headed over. Got there at the stroke of 4pm. And waited. And waited. And waited. Helped Vicki put the curtains back up. Tightened some screws. Put some more screens in. And waited some more. Vicki went out and bought some food. Watched the last Doctor Who episode which I happened to have on my hard drive.

At 7:45 I called Time Warner to find out where the fuck the installer was. And they told me that the installer had been there at 4:59 and was unable to get in. I told her that her installer was a fucking bullshitter, as the house was continually occupied with both front and rear doors wide open and nobody drove down our driveway, nobody knocked on either door, and nobody rang any doorbells (actually I’m not 100% sure we have a door bell, but that’s besides the point). She then asked if I’d gotten the two messages they’d left me, and I said no, because I was away from my home phone at the new house WAITING FOR HER GOD DAMNED INSTALLER TO COME.

I got home, and found messages on our voicemail from 4:35 and 4:44 asking for me to confirm that I was going to be there for the installer. Since I told them when I booked the appointment that this was a house we hadn’t moved into, and since they called and left a message reminding me of the appointment yesterday, what the hell do they need me to confirm this? And why are they calling after the scheduled appointment time to confirm?

And just to make my annoyance complete, that 15 minutes I was on hold I was subject to continual commercials telling me how much better Time Warner’s customer service is than the satellite companies. Unless satellite companies actively come over and kick you in the balls while you’re waiting and then leave without installing anything, I can’t see how they could be any worse.