RCS TX10-B X10 Thermostat Protocol

A little over 10 years ago, I bought an open-box RCS TX10-B thermostat control unit to replace a TX10 unit.  “Open Box” means it came without any documentation, but it should, in theory, be a drop-in replacement for the TX10 — the “B” designator indicates that it’s capable of reporting status and temperature, unlike the TX10.

Unfortunately, “open box” means it came without any documentation whatsoever.  On the plus side, the wiring is similar to the TX10 (with the additional feature of a physical connection for a “setback switch”) but without knowing the X10 protocol it required, I was left without any means to actually get status reports from the unit.

3039bdgmUsing the Internet Wayback Machine to go back to 1998, I located a nifty diagram of the system from Smart Home, from whom I originally purchased the unit.  Ten years ago, it was in the process of being replaced by the TX15-B, a more modern-looking unit — and the only one mentioned on the web site of the manufacturer.

Some experimentation demonstrated that the TX10-B substantially uses the same procotol as the TX15-B, which is documented here.  It doesn’t seem to support the “autosend” feature, nor does it respond to requests for the outdoor temperature, but otherwise, the document appears to be accurate.

The unit uses the venerable TW-523 to communicate, and I was mildly surprised to discover that my TW-523 was capable of receiving, but not sending.  Since the TX10 it was connected to wasn’t capable of sending, either, it may have been defective on the day I bought it, and I’d never have known.

(Yes, it took me 10 years to get around to this project, but now all that’s left to do is the software…)

Share

The Fujitsu Stylistic 3500 Tablet, Linux and Xubuntu

I have an old Fujistu Stylistic 3500 Tablet that I picked up cheap as hospital surplus, which usually sits in its cradle in the kitchen, handy for looking up recipes and playing music.  It came with Windows 2000 preloaded (and as surplus, ravaged by viruses) which it ran until last week, when I finally decided I have had enough of the venerable operating system, and decided to switch to something both more modern (unsurprisingly, a growing number of applications and updates refuse to run under Windows 2000 at all) and better able to make use of its aging hardware: a 500 Mhz Celeron with 256M of RAM.

Fujitsu Stylistic 3500

Fujitsu Stylistic 3500

In addition to upgrading the operating system, I decided to replace the hard drive with an IDE-SSD drive that I found on special.  This made an intuitive kind of sense, since if anything went wrong, I could just put the old hard drive back in.  On the minus side, this meant I had to install an operating system from scratch.

Hurdle #1:  Booting

The tablet is capable of booting from a grand total of two things:  the internal hard drive, and an external floppy drive on a proprietary port.  That’s it.  I do happen to have the Fujitsu floppy drive, so I figured all I have to do is boot a Linux installer from a floppy drive, and I’m all set.

Easier said than done, I guess.  The tablet has one USB port, and the tablet itself needs software to drive the pen interface, so a USB hub and keyboard are necessary, plus a mouse for virtually any operating system’s installer these days.  After some trial-and-error, I burned Xubuntu’s installer to a physical CD, and attached a CD-ROM drive to a USB->IDE interface on the same hub.

It looked like a DOS boot disk was the way to go, since the tablet couldn’t directly boot from the CD-ROM drive, and Xubuntu doesn’t seem to have a ready-made boot floppy.  Naturally, this would require keyboard, mouse, and CD-ROM to first be available to DOS.

However, certain USB drivers would disable the mouse and keyboard when they loaded — which put a damper on being able to actually do anything once they located the CD-ROM drive.  I finally located a combination of drivers that allowed my mouse and keyboard to keep working while mounting the CD-ROM drive (rather oddly, as C:, since there were no recognizable partitions on the IDE-SSD drive, it didn’t show up at all.  No problem, though, the Linux kernel will sort it out.)

Once DOS booted and I could see the CD-ROM, I used lnload97.com to actually boot the kernel from the CD-ROM.

For those wishing to follow a similar path, I present the Fujitsu Stylistic 3500 boot diskette:  [Stylistic-3500.zip]

This is based on a USB driver diskette I located and updated; if your CD-ROM doesn’t show up as C:, or you’re installing a Linux distribution other than Xubuntu 9.10, you’ll need to edit “bootl.bat” before you run it — it should be pretty straightforward.

And the first hurdle is cleared as the Xubuntu installer is able to install Xubuntu on the tablet’s new SSD hard drive.  However, I’m not out of the woods yet.

Hurdle #2:  Networking

I decided to get the network working first, because experience has shown that everything is simpler when a computer can connect to the network.  I have a PCMCIA card for connecting to the wireless network, a Netgear WN511B, that frankly was a little flaky under Windows.  Xubuntu recognizes it, sort of, but can’t communicate to it.

First, I tried ndiswrapper to load the Windows drivers, which worked in the sense that it looked like I had a wireless card, but wpa_supplicant proved unable to connect to my WPA2-encypted network.  I also tried bcm43xx-fwcutter, which failed even more dismally.

The output of my lspci led me to seek a new path:

01:00.0 Network controller: Broadcom Corporation BCM43XG (rev 01)

As it turns out, Broadcom released a proprietary driver for BCM43?? chipsets, and although the BCM43XG isn’t specifically listed on the driver’s page, it works beautifully, at full n- speeds.

The driver’s page is here:  [802.11 Linux STA driver]

Aside from everything in the README.txt listed on that page, I added “lib80211” and “wl” to /etc/modules in order to have the driver loaded on boot.  Upon booting, the card was recognized, the wireless lan came up, and … it asked for my keyring password.

On a side note, I got the driver onto the Xubuntu tablet in the first place by loading it onto a USB flash drive; Xubuntu recognized the drive right away, and it was a simple matter of copying over the file.

Hurdle #3:  Keyring Password

With a keyboard, typing a keyring password isn’t really a big deal, as I did the first time I connected to my wireless network.  Without a keyboard, this is a considerable chore, if not outright impossible.

This is pretty easy to fix — go to ~user/.gnome2/keyrings and delete the keyring, then reboot, and next time, don’t enter a keyring password at all.  While this is less secure (the keys are stored in plaintext) it does have the advantage of not having to enter the password each time.

At this point, I installed sshd, so I could log in to it remotely, and make my life a little easier.

sudo aptitude update
sudo aptitude install openssh-server

Hurdle #4:  The Touchscreen

The touchscreen on a Stylistic 3500 shows up as a serial device, and some kind soul has already written a driver for X.

sudo aptitude install xserver-xorg-input-fpit setserial

The serial device needs to be set up, too, which can be done by creating a file called “/etc/serial.conf” and adding:

/dev/ttyS1 uart 16450 port 0xfd68 irq 5 low_latency baud_base 115200 spd_normal skip_test

The next step is to add the driver to xorg.conf … except that Xubuntu, like a lot of modern Linux distributions, doesn’t actually provide or ship with xorg.conf at all, instead relying on autodetection.  So in order to get the stylus to work, one must first create an xorg.conf.  This is most easily accomplished by killing X — Xubuntu helpfully tries to respawn X, so I took the hack-ish but expedient route of putting a junk file into /etc/X11/xorg.conf (I simply wrote the word “sampo” in it, which is not a valid configuration, which keeps X from respawning) then issued a kill command to the pid running X.  Then:

X -configure

Generated an xorg.conf that I could edit to add in the touchscreen bits.  (Parts already there are in red, my additions are in black.)

Section "ServerLayout"
 Identifier     "X.org Configured"
 Screen      0  "Screen0" 0 0
 InputDevice    "Touchscreen"
 InputDevice    "Mouse0" "CorePointer"
 InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
 Identifier "Touchscreen"
 Driver "fpit"
 Option "Device" "/dev/ttyS1"
 Option "BaudRate" "9600"
 Option "Passive"
 Option "CorePointer"
 Option "SendCoreEvents"
 Option "MinimumXPosition" "0"
 Option "MinimumYPosition" "0"
 Option "TrackRandR"      "on"
EndSection

And I now have a working stylus.  I spent a surprising amount of time fooling around before I discovered the “TrackRandR” configuration parameter — during which my stylus worked on a postage-stamp sized corner of the tablet while the pointer shot everywhere.

Hurdle #5: remote Administration

I can administer the tablet via sshd already, but it’s handy to have remote console access, since a lot of settings are much easier to set via a GUI than by poking around the command line.  So, to provide VNC-capability for the console:

sudo aptitude install xinetd x11vnc

I considered it a good idea to set a password:

x11vnc -storepasswd

Then created a file called /etc/xinetd.d/x11vnc to launch it on demand:

service x11vnc
{
 port            = 5900
 type            = UNLISTED
 socket_type     = stream
 protocol        = tcp
 wait            = no
 user            = root
 server          = /usr/bin/x11vnc
 server_args     = -inetd -o /var/log/x11vnc.log -display :0 -auth /var/lib/gdm/:0.Xauth -many -bg -rfbauth /root/.vnc/passwd
 disable         = no
}

Hurdle #6:  gksudo and an on-screen keyboard

I used Applications->Add/Remove to add Matchbox, an on-screen keyboard, and immediately gksu popped up to request administrative rights…  which greyed out the rest of the screen, making it impossible to actually use an on-screen keyboard to enter a password.  Luckily, this is just a setting in gksudo called “Disable-grab.”  Since I could already VNC into the tablet, this actually wasn’t much of a hurdle.

Verdict

Between the IDE-SSD drive and Xubuntu, the tablet is dramatically faster than it ever was under Windows 2000.  A lot of the tablet’s use is surfing the net via Firefox, which launches and renders faster than it ever did.

Surprisingly, wireless networking is also much improved: Windows 2000 would often have trouble reconnecting to the network after rebooting, and despite being an “n” wireless card, seemed slow.  Now it’s quite stable, and runs at a full 130mbps.

Share

Craigslist Renews My Faith In Humanity

To be honest, I’m really not sure if I should be referring to that as my lack of faith in humanity, but whatever it was, Craigslist readers managed to affirm the Hell out of it.

I’ll start with the ad I posted:

For Sale: $10 firm, you pick it up
21″ HP CRT computer monitor
This is big monitor, about 45 pounds, so I’m not shipping it anywhere.
The front of the CRT is flat, but I’m not calling it a “flat screen”
to avoid confusion with LCD monitors.
The monitor is about 10 years old, but in excellent condition, with no burn in.

Pretty reasonable deal, eh?  That doesn’t stop Craiglist readers from trying to make this deal even better:

Hey, I can use a bigger monitor.  Can you deliver it to [a place about 100 miles away.]
If it works perfectly and it’s really clean (and I still need it) when you get here, I’ll give you $5 cash on the spot.

I have a pretty efficient car, but at today’s fuel prices, I estimate that the round trip to your place will cost me about $20, so that even if you paid the least bit of attention to the word “firm,” I’d be $10 behind, not to mention four hours of pointless driving.  To seal the deal, there’s the possibility I’d be driving back home with this 45 pound behemoth of a monitor, since you may have found an even better deal during the two hours it would take me to get to your house.  Presumably some hot naked chick with a brand new flat screen television willing to drive it across the country and drop it off with a few cases of free beer.

But I have to give the guy a little credit for at least understanding the listing.  I got a smattering of emails that could be answered simply by copying and pasting the listing they were responding to in the first place:

Is this a flat screen LCD or a tube-kind of monitor?

Is this for a computer or is it a television set?

How heavy is this monitor?  I’m thinking of putting it on a shelf.

Will you ship this to me?

And my personal favorite:

How big is the 21″ screen?

I’m not sure if this person is just really, really stupid or just wants me to do the conversion into centimeters or cubits or something for them. I’d like to think he smacked himself in the head immediately after hitting “send” because he realized he had asked an obvious question — because the alternative is that no conceivable reply could possibly make him understand the size of this monitor.

Other questions at least asked about things that weren’t answered in the listing, mostly because it never would have occurred to me to answer these questions, much less that anybody would ask them.

What colors does this monitor display?

Has anything been living in this monitor or died in its case?

Do you think this monitor will make my computer faster?

How much storage (MB or GB) does this monitor have?

Does this come with a computer?

Has this monitor ever been used for viewing porn?

Here again, I have a personal favorite, from somebody whom I hope misread something and really didn’t eat that big a bowl of crazy for breakfast:

Is this fully mature?  How big do you think it will grow?

Shame on me, I guess, for not mentioning that this monitor has already grown to its full size in the original ad.  I’ll remember that for next time.

It’s possible, I guess, that all these people are just pretending to be morons and lunatics in order to screw with me, but there are naturally a few whose purpose is explicitly to screw with me — or more accurately, screw me over:

I’ll bring a check for $210 for that monitor, if you’ll give me $180 in
twenties when I pick it up.  You’ll get $30 out of the deal for your trouble.

For $180 and a monitor, I’ll get a bad check in return, so I’m not entirely clear on where the $30 comes in.  Maybe he’ll mail it to me later care of my address in Gullible Idiotville.  He’s not the only person who thinks that’s where I live:

I will pay you $10 plus $100 in shipping and other fees if you will ship this to Nigeria.
I will send you cash money by FedEx but I need it right away so please ship when I give you the FedEx tracking number if this is agreeable to you we can do business.

Nigera?  FedEx?  Cash money?  What could possibly go wrong?  Oh, right, it might actually cost more than $100 to ship a 45 lb. package to Nigera using any possible method of getting it there “right away.”  Plus the odds of this guy actually shipping me an envelope full of “cash money” for my trouble seems about as likely as me suddenly being declared the Pope.

But at least these scammers  sort of paid attention to the listing.  Other scammers were more lazy:

It seems like you could use some money.  We have money to give away!
To start, send us your:
Full Name:
Full Address:
Social Security Number:
Full bank account number where we can make a deposit:
Amount you need:

Yes, it’s true, my motivation for selling a 21″ monitor for $10 is not to find it a good home instead of letting perfectly good hardware rot in a landfill, but because I need $10 to pay my mortgage.  Or something.  At any rate, I guess I can just keep the monitor, because, hey, free money.

The depressing part of that is that somebody must exist who would actually reply with this information — who still has an account with actual money in it, and despite this,  manages to believe that there’s some other idiot in existence who desperately wants to pump money into the bank account of a random moron for no conceivable reason.  Now that I think of it, Craigslist might be a good way to find such a person.

Epilogue:

Yes, I did sell the monitor to a reasonably sane and intelligent person for $10, so at least one person who reads Craigslist isn’t a complete maniac.  I accept the fact that he could be a partial maniac, but he at least held it together long enough to complete a simple transaction, which up until now I thought was a pretty easy thing for most people to do.

Share

Restoring Selected Keys from the Registry

As I hope everybody does, I have a backup system in place that ensures that I have copies of all critical files, including the system registry.  A combination of Volume Shadow Copy and BackupPC ensure that I’ll have ample copies of the registry available, but the registry itself makes recovery a less-than-straightforward process.

For a bare metal restore, the process is actually not too bad.  To be specific, you can pretty much just copy over the registry files with backups (which is pretty much every file in %systemroot%\system32\config) then rebooting before doing anything else.

More specifically, you want these files:

security, software, system, default, sam

It gets a little weirder from there if you need registry elements from the user hives and security hives, which is conveniently spread out into places like “Documents and Settings\NetworkService\NTUSER.DAT”, “Documents and Settings\LocalService\NTUSER.DAT” and helpfully named things like “UsrClass.dat” spread all over creation.

It wasn’t really my purpose to delineate all these things, so I’ll move on:  instead, my purpose was to point out that what, after losing a drive and reinstalling the operating system, you decide that you don’t want to inherit all the cruft that was lurking in your “old” registry, but instead would like to pull over just a few select keys?

On the plus side, there’s a way to do it.  On the minus side, doing so is about as convoluted as the registry itself.

First, the keys you’re looking for are most likely to be housed in the file “software” or “system,” depending on whether you want some keys describing installed software or hardware, respectively — so restore these files somewhere.  The location doesn’t matter, as long as you don’t put them on top of their current locations.

Second, fire up the registry editor (“regedit” or “regedt32”) which will give you a view of your current registry.  Click on HKEY_LOCAL_MACHINE, which will then make the menu option File->Load Hive available.

Go ahead and pick the “software” file you restored, and you’re immediately prompted for “Key Name.”  This is the key name to mount the hive under, so pick something that’s not a hive already in use.  (In other words, do NOT pick “software” or “hardware” and so on.)  It’s handy, if possible, to pick something absolutely guaranteed not to be in use as a key or value anywhere in the registry, but really anything will do.

Now you can browse the hierarchy of the registry from the file you loaded.  Note that none of these keys are really “in” the registry, but now you can get to them, to select what you need out of the original registry — in my case, it’s almost universally nit picking serial numbers from software I installed long ago and I have an easier time finding the CD than I do where the original serial numbers went.  Once you’ve selected the key, File->Export will allow you to extract it in text form.

Unfortunately, registry exports store the absolute path of whatever you’re exporting, so you’ll have to edit the file to get it back in.  N.B.:  Regedit is notoriously picky about the format of this file, and it will refuse to import a file that isn’t perfect, right down to white space, so you don’t want to edit it with anything that’s going to touch anything but the text (yes, I’m looking at you, TextPad.)  I recommend Notepad with word wrap OFF.

The exported registry file will be littered with references like:

[HKEY_LOCAL_MACHINE\MY_HIVE_KEY\GoodJobSucking]

Your job, of course, is to change every single “MY_HIVE_KEY” to “SOFTWARE” (or whatever hive you’re trying to get the key back into, while leaving everything else alone.  If you were clever about the hive name you selected, this can be a global search-and-replace.

Save the file, then use File->Import to bring the key(s) back in to the actual registry.  When you’re done with this procedure, click on your hive with the crazy name, and select File->Unload Hive to be rid of it.  There’s no “save” in the registry editor, so you’re done at this point.

Share

The Joys of English Grammar

Up front, I’ll confess I’m a bit of a stickler for grammar.  While I fall short of correcting stranger’s obvious mistakes, people really do sound uneducated — or downright stupid — when they can’t be bothered to learn their own language properly.  I’ve certainly just thrown away resumes from job candidates who didn’t manage to get the basics correct in a document that represents them, and business communications where rules of grammar are violated make me cringe.

When I was a typesetter (back when it was done optically, if you can imagine) I was known for getting out an Exacto knife and physically repairing mismatched “who” and “whom” usage, or replacing well abused words such as “aggravate” and “moot.”  This led quickly to my promotion to copy editor, the knack of which has served me well through the years.

While on a shuttle bus near Midway airport, I sat behind two businessmen, traveling together.  One of them was telling a somewhat boring story that I barely listened to, but my ears naturally perked up when he used the phrase, “… we had so little time, we literally had to run to the baggage claim …”

At this point, his companion interrupted him.  “Literally?”

“Yes, literally,” his friend repeated, and attempted to explain, “we didn’t have much time at all.”

“Oh good,” his friend interrupted again.  “I was afraid you were using ‘run to the baggage claim’ in the metaphorical sense.”

“What?”

“Well, you know, when you’re sitting at a large dinner party, and you say ‘I’ve got to run to the baggage claim’ by way of polite explanation for why you’re leaving all of a sudden.”

“Huh?”

“Sometimes I’ll be petting the dog and say “RUN TO THE BAGGAGE CLAIM, BOY!” but of course I don’t mean it literally.  There’s no actual baggage claim within miles of my back yard, and it would be rather silly to expect my dog to make it through security by himself.”

“I’m not sure I …”

“Last time my wife and I got back from Mexico, we checked bags and I was going to pick them up while she waited on the benches.  She said ‘don’t run to the baggage claim!’  We laughed and laughed for hours.”

“What?”

“We had plenty of time, of course.  It’s not like I literally had to run to the baggage claim.  But after that long flight and that airplane food, I sure had to figurativelyIf you know what I mean.  It’s not like I could ‘run to the baggage claim’ in front of all those people.  That’s what made it so funny.”

“I don’t think I …”

“Well, the problem is that it’s nearly lost its meaning.  Like when we play tennis and the ball lands on your side, I can’t just say “the ball’s in your court” without adding the word “literally” or you might think I’m speaking metaphorically.  Like yours is the next move or something.”

“I think you’re splitting hairs…”

“There’s another one!  I walk around with a sharp knife, carefully slicing the ends of these hairs, and yet when I tell somebody I’m ‘splitting hairs’ they think I’m making some sort of meaningless distinction!  All the time I’m splitting hairs in a literal sense!  That’s quite a distinction, you’ll have to agree.”

“I didn’t mean literally that way…”

“Oh, right, you must have meant ‘literally’ in the metaphorical sense.  Where it serves as a sort of vague intensifier and a way of needling people who take ‘literally,’ literally.  Well, to heck with those people, I say.  If you want to ensure that the person you’re talking to knows that you really, really, ran for the baggage claim, feel free to jam in any word you want.  I recommend ‘irregardlessly.'”

Best.  Bus ride.  Ever.

Share

The Haunted Olive Garden

Years ago, my wife and I noticed a new Olive Garden in an area we passed by many times.  We’d been by many times and hadn’t seen it, so we reached the conclusion that we either hadn’t noticed it before, or it wasn’t there.  There were people outside and the doors were open, and it was dinnertime, so we parked out front.

A surprising number of staff were standing outside smoking, which seemed odd only because it was dinnertime, and there were at least a dozen people apparently on break.  They watched us with mild curiosity as we walked through the open doors.

Inside, a woman behind a counter was calling names into a microphone.  Despite this, there didn’t seem to be anybody actually waiting, so we walked up and asked her if it would be possible to get a table.

“You mean you want to eat?” she replied, with an odd mixture of surprise and dismay.  I could see into the dining rooms, which were full of people who were, in fact, eating.

“Yeeees,” I said slowly.  I suspected it was a trick question, but wasn’t sure how else to answer.

“Just a moment,” she said, and disappeared into the back.  She came back in a moment or two and said, “yes, we can actually do that.  Follow me.”

We were seated immediately.  Every table in the dining room seemed occupied, and dinner was decent but uneventful (as one might expect at the Olive Garden) with the exception that we had three waiters and waitresses, all of whom seemed particularly nervous.

As we were finishing our desserts, some of the diners around us were already paying for their meals.  With Monopoly money.  This struck me as weird enough that I looked carefully around the dining room.  The few people who weren’t paying with Monopoly money were paying with plastic — black cards that said “credit card” in white block letters.

“I think we’re in trouble,” I said to my wife.  “I only brought real money and credit cards.  Maybe there’s a toy store nearby, I can run out and get some money to pay with.”

We watched in fascination as other people paid and left, usually leaving Monopoly tips on the table.

In a moment, a man walked up to our table and explained:  “This is a training day in preparation for our grand opening, we don’t actually open until next week.  As our first customers, your dinner is complementary, with our thanks.”  He said this last part a bit louder, and the entire place burst into applause.

They were still applauding as we left.  As we got into the car, I looked back to where the staff had been standing earlier — they had been in front of a large sign that said “CLOSED.”

Share

Launching Firefox Quickly: XP and Windows 2000

If you’re like me, a considerable amount of your computing experience takes place within Firefox.  I have a couple of old, slow computers, however, for which the actual loading speed of Firefox itself is problematic.  Either can keep up fine with web content, and their connections are fast, but Firefox itself can take a surprisingly long amount of time to come up  — which is inevitably when I need it.  Leaving Firefox open but minimized is a somewhat reasonable solution, except for Murphy’s law, which is strictly enforced here, means that I need Firefox after having just booted the machine, or just closed it without thinking.

XP has a strategy for speeding the load time of any application, which is known as “prefetching.”  There are a lot of myths and misinformation about what this is, but essentially, XP keeps track of how a program is loaded, and stores this information in its prefetch area.  Next time the same program is launched, XP consults the prefetch area to see how to load the program optimally.

N.B.:  XP prefetching is automatic and works for every application.  There’s a myth that adding “/prefetch:1” (or some other number) switches to the end of your program’s launch criteria will do something beneficial with the prefetch subsystem.  It does do something, and that is to pass the number to the hash used for prefetching.  So adding it will have the effect of first slowing down the launching of Firefox to its unprefetched speed, then the next time it’s launched, it will be as fast as it was before the switch was added.  Naturally, adding this switch is simply a waste of time.

While I’m digressing, I should point out that clearing the prefetch folder is an equally pointless waste of time and resources.  Getting rid of the trace and layout files won’t make prefetching any better, it will just force them all to be recreated, thus slowing down the initial launch of all applications until this is reconstructed.  Windows actually cleans out the folder itself whenever it needs it, so it’s best just to leave it alone.

Which brings me back around to Windows 2000, the venerable operating system on which my tablet runs Firefox.  Win2k has no prefetching system, so that alternative strategies need to be employed.

This leads to an alternative strategy called “preloading,” which is not like prefetching at all, but more like loading Firefox and minimizing it, where much of Firefox is actually in memory.  Early versions of Firefox included a “turbo launcher,” which was a little bit of software that loaded Firefox in memory so that it would be handy.  This is no longer included, but a third party built a “Firefox Preloader,” which for all intents and purposes is the same thing.

The project is essentially dead, since prefetching made preloading less useful for XP and later versions of Windows.  However, it does work for the latest versions of Firefox, and it works quite well on Windows 2000.  The installer can be downloaded here:

http://sourceforge.net/projects/ffpreloader/

It works by looking for “Firefox.exe” and then loading it into memory.  Next time firefox.exe is launched, nearly everything it needs is already in memory instead of loaded from disk.  Prefetching makes this nearly pointless on XP, but the speed difference on an old Win2k box is stunning — assuming you actually have enough RAM to leave Firefox constantly in memory.

Share

Stupid Gentoo Tricks

What initially attracted me to Gentoo is its sometimes-elegant portage system, which is Gentoo’s version of a package manager — one of the things that distinguishes Linux flavors from one another.

Portage suffers from a sort of chicken-egg conundrum in that portage and all of its files and dependencies are themselves managed by portage, which means that upgrading libraries that everything relies upon can quickly lead to a system where portage becomes inoperative.

Recently, I managed to mangle “wget” by deinstalling a library it relied upon.  This is difficult to recover from since wget is essential to portage’s ability to install packages … such as wget and the libraries it requires.  I also discovered that an ftp client is not installed by default, which is surprising, but effectively ruled out just copying a working wget from another system.

As it turns out, the default Gentoo installation does include busybox, which is theoretically less functional, but will do the trick.  For those unfamiliar with busybox, it’s essentially one binary that contains (and is capable of replacing) a number of tiny command line functions, from cp and cat to rm and xargs.  If you have it installed, typing “busybox” will tell you exactly what command line tools it can replace.

Therefore, it’s possible to [re]install wget by telling portage to use busybox’s wget instead of wget itself:


FETCHCOMMAND="/bin/busybox wget \${URI} -P \${DISTDIR}" emerge wget

Share

Unusually Talented Cats

When I lived and worked on a goat farm in western Massachusetts, we had two cats:  the house cat, “Pzzat”, whose role, like most cats, was to lounge around the house and exude softness and warmth.  The second cat, “Barnyardette,” or “Barny,” for short, lived in the barn and had a more useful role — to keep vermin away from the grain that  feeds the goats.  Pzzat had a bowl of food in the house.  Barney did not have a bowl of food anywhere, being entirely self sufficient.

Barny looked much like other cats, but beneath her soft fur, she was an amazingly hard mass of pure muscle.  Petting her was an experience like petting a rock on which somebody had glued a fur coat — a rock whose rumbling purr might be mistaken for a diesel engine idling nearby.

When goats were milked, the first draw from each teat is done by hand into a “strip cup,” a kind of metal mug with a screen on top.  The screen would be checked for clots or lumps (a sign of mastitis) before the milking machines were attached.  At the end of the milking cycle, Barny would be given the strip cup.

In gratitude for this treat, Barny would first offer her catches on the stoop of the milking house to see if I wanted them before she would devour the entire thing.  This usually meant an assortment of unfortunate mice, but Barny did not shy away from bigger game, either.  An occasional rat, bird, wild turkey, a skunk (which she managed to kill without any malodorous discharge on its part) and a weasel that was easily larger than she, all appeared on the stoop.  When it was clear to her that her offering had been properly displayed, a smear of blood on the stoop and the sound of crunching bones would be the only evidence remaining.

The only thing that Barny didn’t drag off and eat was a turtle she presented on the stoop with a mixture of pride and confusion — since there was no apparent way to kill and eat the turtle.  The uncooperative turtle would hide in its shell until it thought there was no longer a threat, then it would poke out its head and legs and head for the creek.  Barny, attracted by its movement from wherever she’d wandered off to, would run over and smack it on the head, whereupon the turtle would retreat to the safety of its shell, and wait for Barny to go away again.  This cycle evidently continued all through breakfast (which was after the morning milking) when I noticed that the turtle had progressed a couple of hard won feet toward the creek, and I decided to end the cruel game by carrying the turtle to the creek myself.

It was not lost on Barny that of all her food offerings, not only was it the turtle that I finally decided that I wanted, but also that instead of eating it, I wanted the turtle to stay in the creek.  Barny concluded that part of her duties should include keeping the turtles in the creek, and I saw her later patroling the creek, smacking the heads of turtles who thought to exit the creek on the barn side.

For all her care of the goats’ food, Barny was not particularly fond of goats.  They were too big to eat, and the goat personality requires that they challenge everything and everybody — no goat would be above head-butting a cat just to be certain of their social order.  When the goats came into the barn where Barny was patrolling, Barny would leap directly into the rafters ten or twelve feet above and patrol above our heads for a while.  It was such an impressive vertical leap, and Barny handled it with such grace, power, and nonchalance, that I wasn’t above waiting until Barny was patrolling the stables before letting the goats into the barn to watch this feat again.

For her part, Barny was not above insisting upon my affection and attention at the exact moment I lifted a 100 lb. bag of grain, by reaching up and digging her claws into my jeans.  She was strong enough to hang on, riding my leg as I carried the heavy bag with both hands.  Over time, she turned it into a kind of game:  while I looked carefully around for the cat, only moving bags of grain from storage to the bins when I thought she wasn’t around, her goal, of course was to come out of nowhere and ride my leg as far as possible, usually all the way to the bins.  Judging from the holes in my jeans and the claw marks on my legs, Barny won this game a lot.


I did not have a cat when I moved into a small apartment in Lansing, Michigan, and I had no plans to get one.  Therefore nobody was more surprised than I to find a cat in the middle of my kitchen, waiting expectantly, when I got home from work.

The cat seemed so smug, so comfortable, that I was nearly persuaded that I had a cat all along and had somehow forgotten all about it.  My door was locked and my windows were closed, and I had been in the apartment for nearly a month, which ruled out the possibility that it had come with the apartment somehow.  The cat left amiably enough when I opened the front door, and that seemed to be the end of that.

When I got home from work the next day, there was the cat again, as if waiting for me to return.  Again he acted as if this was his apartment and he was my cat, this time indicating that I should open the refrigerator and cupboards.  I did, just in case (nothing was there that I did not expect, nor was there any cat food, which appeared to disappoint the cat, but only mildly.)

Again, I opened the front door, and out the cat went.

When my alarm went off in the morning, I noticed that the same cat was sleeping on my feet.  I am a notoriously heavy sleeper, the cat looked so comfortable and it felt so familiar, that it’s possible that he had been sleeping in my bed for weeks.  I dubbed him Phantom, let him out the front door and went to work.

I mentioned to a coworker, Steve, that I suddenly appear to have a pet cat, one that I don’t remember ever feeding or acquiring, who simply appears in the apartment.

Steve reacted with, “oh!  I’ve heard about the ghost cat of Lansing, but I always thought it was just a legend.  He a fiercely loyal cat who was owned by a lonely old woman who loved him.  The only time they were apart was when she went to her job at the GM plant, and on the day of her retirement, when they could finally be together all day, every day, the woman was hit by a car and died.  The cat refused to eat or leave her kitchen, died of a broken heart.  Now he appears to people who are going to die soon in car crashes.”

“What?   Really?”

“No, you idiot.  The cat’s obviously getting in somehow, there must be a hole or a cat door or something.”

I had already looked, but Steve’s theory made sense, and together we searched the apartment for holes that a cat could get through.  All the windows were locked, there were no holes in the screens, no holes anywhere that we could find.

“Huh,”  said Steve, after we found nothing.  “If that cat comes back, maybe that story I made up is true!”

The next morning, and every morning for months, I’d wake up with Phantom sleeping peacefully at the foot of my bed.  Sometimes I’d let him out, sometimes I wouldn’t bother.  I bought a little box of cat food and occasionally gave him a treat, but not enough to sustain him.  He seemed healthy and clean, so I clearly wasn’t providing his primary sustenance or care, but he seemed to spend every night with me, and the occasional weekend afternoon or evening meal.

Months and months later, I discovered his secret quite by accident.  Late at night, I woke up, got a drink and sat in the dark with my glass — the closet door just off the kitchen happened to be open, and I could see the full moon through its tiny little window.

I saw Phantom in silhouette as he gently peeled back the screen from the frame, and pushed the little window forward in its frame, then wriggled through the gap between the upper and lower sash.  When he was through, the screen and window snapped back into position.  By all appearances, the window was intact, and even casually pushing on the window and screen did not reveal the fact that it could be tilted forward just far enough to admit a small, motivated mammal.

About a week before I moved out, Phantom stopped appearing on my kitchen or my bed.  I don’t know if he sensed my imminent departure or something else happened to him, but I like to think he’s haunting somebody who could use a part time cat.

Share

Conversations with Telemarketers

I’ll preface this by mentioning that I haven’t actually had a call from a telemarketer in at least 10 years.  About that time, my wife was pregnant with our first daughter, and she told me that with all my technical background, I should be able to do something to ensure that no telemarketer ever bothers her again.  Or else.

Naturally I took this as an opportunity to outfit the house with a full blown PBX and auto-attendant, but that’s another story entirely.

When they do get through, telemarketers are a tenacious bunch, and if there’s a remote chance of making a sale, they’ll try almost anything.  I’ll admit to exploiting this trait for my own amusement.  As a case in point, I once received a call on behalf of AT&T:

“Hi!  We’re offering a certificate for $100 worth of free long distance if you sign up…”  I had been running to get the phone, and listened breathlessly to the entire speech.  At least it was delivered with a little penache, so I tried to be polite.

“I’m really not interested in switching to AT&T.”

“May I ask why?”

“Well, an AT&T van ran over my dog last year, and I still haven’t gotten over it.”

(Muffled laughter, then a long pause.)  “Oh, god, I’m sorry.”

“His name was Lucky.  I loved that dog.”

“Oh, umm…”

“I still can’t see an AT&T van without bursting into tears.”

“We don’t have to come to your house to become your long distance carrier.  You won’t have to look at an AT&T van.”

“The logo freaks me out, too.  I can’t see it without thinking of Lucky.”

“Our bill will appear on your regular statement, with your local bill.  You don’t even have to look at it if you don’t want to.”

“We had just gotten him back from the vet, too.  Poor Lucky.”

“What if we offered you $100 certificate, you know, as an apology?”

“Isn’t that the same thing you were offering a few minutes ago?”

“Well, yes, but you can use it however you want.  You can call Lucky’s friends to let them know you’re thinking of him.”

“His friends were mostly squirrels.  And I think AT&T might have gotten to them already, anyway.”

“Our service really is unparalleled in the industry.”

“That’s not what I meant.”

“Oh.  Well, we do have a very large fleet of vehicles.”

“Are you making fun of me?”

“Of course not.  But accidents do happen.  I’m sure the driver didn’t mean it.”

“Did you ever see that Twilight Zone where that woman’s dead husband called her on the phone?”

“Yes, I did.  I’m pretty sure she used AT&T, if that’s what you’re asking.”

“I was wondering if I could commune with Lucky over the phone.”

“With $100 in savings, what have you got to lose?”

“Maybe it would be faster if I just stood in my driveway and you sent a van over.”

“If you sign up as our customer, I’d be happy to put in a service call for you.”
Sometimes, the tenaciousness of telemarketers borders on bizarre.  I received a call from a local newspaper, urging me to sign up for local delivery.  As usual, there was the canned diatribe that I listened patiently to, ended with the common ploy of “just tell me your address and I can sign you up right now.”

“Actually, I don’t want the paper.  I can’t read.”

“Perhaps somebody can read it to you.”

“I don’t think so.  I could just listen to news radio.”

“We’ve got pictures and comics.  You could clip them out if they interested you.”

“I don’t have any thumbs, so it’s hard for me to use scissors.”

“You could use a knife.  Or the paper tears pretty easily, you could just rip them out.”

“I’m legally blind, so I probably wouldn’t look at the pictures.”

“Do you have a dog?  You could use the paper to clean up after him.”

“I did, but he was run over by an AT&T van.”

“Really?”

“No, I just said that to get rid of a telemarketer.  It didn’t work, though.”

“Oh.  Have you got a cat?  It’s great for the bottom of litter boxes.”

“Seems kind of expensive to buy the paper just for that.”

“We have so many coupons every day that the paper virtually pays for itself.”

“I’m blind and I have no thumbs.  How am I going to clip coupons?”

“Well, how do you shop now?”

“I pretty much eat whatever the pixies bring by.”

“Can they read?  Maybe they can clip the coupons for you.”

“Are you serious?”

“Sure!  Perhaps they could read you the headlines, too.  There’s no better way to keep in touch with current events.”

“Well, I’d love to, but I’m moving in a week.”

“Then give us your new address!  We’ll sign you up in advance.”

“I’m moving to Bangladesh.”

“We can ship the paper anywhere in the world.  All you pay is the shipping charges.”

“I’ll be living on a mountain, miles from civilization.”

“How about weekly, instead of daily?”

“How does that help?”

“Well, our Sunday paper is an excellent source of weekly news, and you may not be interested in getting the paper every day.”

“I’m not interested in getting the paper any day.”

“What about the coupons?”

“What good are they going to do me on a mountain in the middle of nowhere?”

“Surely you’re going to need some goods and services.”

“Not for long.  I’m really going there to die.  I only have one month left to live.”

“Perfect!  Our free trial period is 30 days, so all you’ll have to pay in advance is shipping.”

“Are you suggesting that I get the paper for 30 days and not pay for it?”

“Well, if you live, I’d suggest that you pay your bill so that you can continue to receive the paper, with all it has to offer…”

“You know, I just realized, I’ve got a stack of papers by the door.  I think I already subscribe.”

“Really?  Is it our paper?”

“How can I tell?  It feels like a big stack of newspapers.  It gets bigger every day.”

“Does it feel kind of jagged along the edge, with a big fold in the middle?”

“Ummm…   Yes.  Is that good?”

“That sounds like our paper, alright.  I’d better check with our subscription department, and give you a call back.”

“I may not hear the phone, because I think I’m going deaf.”

“That’s okay, I’ll keep calling until I reach you.”

Amazingly, he did call back, but I was lucky enough to be away and only hear the messages on the answering machine:

#1: “Sir?  I checked with our subscription department and they have no record of you as a subscriber.  I forgot to ask if the stack of papers had staples in the fold.  You may want to check on that and get back to me.  And you may want to call and cancel your subscription to that other paper, if you don’t need it.  Save yourself some money.  But be sure to give me a call so we can start your subscription right away.”

#2: “Sir?  You forgot to give me your address in Bangladesh.  We can get your subscription started with just a credit card, and remember, you only pay shipping.”

#3: “It’s been almost a week, and you haven’t returned my call, so you may have left already and may not be picking up your messages.  If Pixie is still living there she may want to give me a call and discuss the best value in newspapers available for home delivery today…”

One of the biggest problem with telemarketers in general, is that they soak up an awful lot of time, and I relish the occasional opportunity to return the favor.  A telemarketer representing an investment broker afforded the perfect opportunity.  As usual, first the spiel, then the question:

“All we need is your social security number to open an account for you right now…”

“Oh, I’d love to!” I gushed, “because I just inherited a huge amount of money and have no idea what to do with it.  Hang on a minute while I find where I put that check…”

I put the phone down and made a brief show of rustling papers.  I have no idea how long she waited, because I didn’t pick the phone back up until the next day.

However, I did have to appreciate a call I received from a company hocking voice mail.  They were interested in charging me about $25 per month for a glorified answering machine, with the sole (real) advantage being that people could leave voice mail if I was on the phone.  As I listened to the spiel, it occurred to me that it sounded exactly like the local phone company’s own voice mail offering, which cost about $7 per month.  For no particular reason, I walked the telemarketer through a feature-by-feature comparison of the two voice mail systems.

I concluded with, “Well, it sounds like your voice mail system has the exact same features, but costs three times as much.”

“That’s about right.”  (“Your point being?” was implied in her tone, and the fact that she hadn’t hung up yet.)

“Well, then I’d have to be some kind of idiot to sign up with you.”

“Great!  Then we’ll sign you up right away!”

<click>

Well played, madam.  Well played.

Share