kbob is currently certified at Master level.

Name: Bob Miller
Member since: 2000-05-14 10:39:47
Last Login: 2007-08-20 00:55:54

FOAF RDF Share This

Homepage: http://www.jogger-egg.com/


I've been a Unix developer about 20 years. I've worked at Convex Computer, Apple, SGI, and Oblix. Now I'm a consultant, working for whoever will pay me. (-: Most of my career so far has been OS/networking stuff, with some dabbling in 3D, sci viz (remember sci viz?), audio, MIDI, and a few other things. I live in San Jose, in the heart of Silicon Valley.

My free software contributions have been pretty minimal. There's one driver in the linux kernel tree with my name on it, and a few bugfixes here and there, and the now-obsolete Convex port of GNU emacs.


Recent blog entries by kbob

Syndication: RSS 2.0

Certain people have been pestering me to update my diary. It's only been 9 months... (-:


Well... It turns out I'm a software consultant. Who knew?

Anne's company needed some perl scripts, so I wrote them. It started as a two week contract, back last October and turned into two months. It was fun, because I had lots of friends at Geocast, and it was easy work, and the money was good. So...

I formed my own company, kbobsoft, and started looking for more work. Found it at TiVo. Been working for TiVo since March.

I've never been sure whether "software contractor" or "software consultant" is better. I use the two terms more or less interchangeably. I think "consultant" sounds snottier.


TiVo is an incredibly cool company. They have the best engineering organization I've ever seen. Their product is pretty cool, too. I really hope they survive -- they deserve to prosper.

Oregon, Ho!

We finally did it. Moved out of Silicon Valley, and into beautiful Lane County, Oregon. We're making new friends pretty well. Here are a few: sethcohn, rybolov, Kyrgan, naturedarren.

We bought a big-ass house 15 miles outside Eugene, on 50 acres of forested hillside.

QWest sucks

Yeah, they're an RBOC, so you expect them to suck. But QWest exceeds expectations. Their slogan is,

QWest. We suck harder.

The first three weeks we were here, they turned our POTS lines off and on randomly. We scheduled appointments (with a granularity of a whole day) to get them turned on, and the dispatcher didn't bother to send anyone to our house that day. Anne spent a total of six hours at a phone booth in town pleading with them to turn our phones back on.

Today I'm sitting at home (all day -- can't schedule appointments any closer than a whole day) waiting for them to install the T1. We ordered it on May 15th. I bet they won't show today. Another whole day wasted. I wish I could charge them my usual rate. (-:

PC Training Center

Since we only have a modem at 24 KBps until QWest gets off its ass, I rented a funky little room at the PC Training Center in Eugene. I don't know why it's called that -- it's really a mom & pop computer store. The owner, Stan, refuses to sell systems with Windows preinstalled. You can order a system with any Linux distribution you want (probably BSD too), or you can order it with blank disks that you can install Windows on yourself. That's cool.

My office is 11x11, and it's full of the previous tenant's stuff. I pushed enough of it out of the way that I could set up two TVs and two TiVos. I'm subletting Stan's DSL. He has an E-Smith gateway/firewall, and I have a coyote firewall, so all my packets are double-NATted.


I love the weather. The air is chill, the leaves are starting to turn, the sky is muted gray, the wind is feeling its new strength.


Invited three friends from work over for pizza Saturday night. I like cooking, and pizza is impossible to screw up.


I have all the code for the next phase of cvs2svn in my head, I just need some uninterrupted keyboard time to let it out.

Jury Duty

I am called. I will not be chosen.


dsifry saw my resume in my last diary entry and offered to forward it to the managers at Linuxcare. What a guy!

Meanwhile, back at the old job, my cow-orkers are being ever so friendly. (Note pizza above.) If they'd done that in July, I wouldn't have resigned.



Still installing Mandrake...

Actually, I'm cleaning up things that the upgrade broke. Got through all the updates and tracked down a setenv command in a bash script (?). Now I have to figure out who turned my emacs window green.


It's official. It's public. I have quit my job. Friday is my last day. My boss announced it at the staff meeting and my group just stood around and looked at me like I was the main attraction at the freak show. (-:

Going to have to find some more work now. My resume is up to date; I need to start sending it around. My old boss wants me to come to Geocast. I want (a) some time off and (b) to look around a little. Last time, I took a job after only one interview. I won't do that again.

So how do I get myself a job doing open source/free software?

Installing Mandrake

I've been running Mandrake 6.1 on my laptop and on my main desktop machine since it came out last December. I'm supposed to give a presentation on Linux on laptops to the eug-lug next month, so I decided I should be running a less paleozoic release on the laptop. So I'm going to install Mandrake 7.1. It's a Sony Z505RX, with a USB floppy drive and a PCMCIA CD-ROM.

Went to bed last night while backing up the whole disk across the Ethernet to my desktop machine (which I just recently upgraded to a whopping 46 Gb drive). This morning, I started installing 7.1.

The install itself went pretty well. I quickly figured out that I can boot the pcmcia install floppy from my unsupported-in-Linux USB floppy drive, then access the CD-ROM if (and only if) the CD is loaded when the installer probes for the drive. (But not at boot time, or it'll boot off the CD, which can't see a PCMCIA CD-ROM drive).

It failed the first time, not enough free disk space. Moved a couple hundred Mb of photos onto the desktop machine's 46 Gb disk and found an old Mandrake 7.0 ISO image to delete.

Anyway, the installer ran for nearly four hours. I don't know why it was so slow.

Interlude: shopping, car maintenance, and digging a hole

Several months ago, we had a plumber add a valve to the front lawn's sprinkler system. He managed to start a fire (comedy of errors) and torched one of the boxwood bushes in the hedge. Anne has been hacking at the bush trying to get it to recover, but we finally gave it up. She was working on it, and I went out to help. Dug up the half-dead bush. Now we need a live bush to replace it.

Car's been handling funny, the tires were low. Pumped them up. added 5 PSI all around, but the right rear was at 12 PSI. (It's been leaking since late spring. I need to call the Tire Rack tomorrow and get new tires anyway. (their web site says it uses SSL, but it doesn't. What's up with that?) Anne pumped her tires up too. Then I jacked my car up and took off the right front wheel to find out what the noise coming from that area is. The plastic fender liner had come loose and was rubbing on the wheel. The plastic looked sound, so I bolted it back in place. Anne noticed that the bumper was hanging down on the right, and bolting the fender liner back made the bumper look better.

Then, shower. (It's about 2:30).

Then, off to Men's Wearhouse for a suit. My cousin back in The Old Country (aka back east) is getting married. He's only 25; what's a guy doing getting married at that age? Spent about an hour trying suits and ties and stuff. Now I have a suit like men wear in The Old Country. I doubt I will wear this suit five times in the next five years.

Late lunch/early dinner at Willow Street Pizza. Excellent food and good beer, too.

Then to OSH for plants. Bought six (6) boxwoods and Anne got a Mandarin tree. I think the Mandarin was an impulse purchase.

Then back home. It's getting dark, so Anne hooks up some lights on extension cords while I dig the holes to plant two of our new boxwoods. Shortly the job is done.

Still Installing...

Just before the shower, I booted Mandrake 7.1 and started rsync'ing the Mandrake updates from Sourceforge to my desktop machine. (Did I mention that it has a 46 Gb disk now? (-: ) So now I'm trying to find out what all has broken and fix it.

First is xmodmap. For some reason, Mandrake disabled the use of $HOME/.Xmodmap. Who knows why?

Second is PCMCIA card services. Mandrake 7.1 uses pcmcia-cs 3.14, which doesn't work reliably with my laptop. Gotta build a new kernel to get pcmcia-cs up to rev (and to install the Wavelan driver).

So that's where I am now. Compiling a kernel. No CD-ROM or wireless until that's done.


About 9:30 pm, started baking a batch of blueberry muffins, using my mom's killer recipe. Yummmm!


Upgrading Linux is a big waste of time. Er, I mean, you waste a lot of time upgrading Linux.

Accomplished some good stuff today, but not on the computer.

Did more things with Anne than any other day in memory. That was good.

Unit Testing in Perl

I read the eXtreme Programming book (Wiki:ExtremeProgrammingExplainedEmbraceChange) a while ago, and the part of XP that interests me most has been the unit testing stuff. But I couldn't get anybody else at work interested.

So now I'm working on a big, ugly Perl script (over 1,000 lines and still writing), and I decided to put unit tests into every class definition. Then I wrote some truly ugly code to find all the methods named "self_test" and execute them when the script starts up.

Well, hey, it works. I've got over 1,000 lines of working code, and I haven't had to debug anything that wasn't trivially easy to find and fix. In previous Perl projects, I've always gotten ensnared in bugs where a variable is supposed to be a ref, but it's actually a ref to a ref, or it's a ref to the wrong thing, or, ...

Perl's lack of encapsulation makes isolating the class under test easy -- if Foo::method requires a Bar as argument, I just pass in bless { }, 'Bar', instead of creating a real Bar.

Each selftest uses die to report errors. The "real" code uses Carp::croak pretty extensively.

Here's an example.

sub CvsDirEntry::self_test {
    my $de0 = CvsDirEntry->new(NAME => 'slug');
    die unless $de0->name eq 'slug';
    die unless $de0->path eq 'slug';

my $de1 = CvsDirEntry->new(NAME => 'grub'); $de1->set_parent(bless $de0, 'CvsDir'); die unless $de1->name eq 'grub'; die unless $de1->path eq 'slug/grub'; }

I'm not consistently writing the tests first (Wiki:CodeUnitTestFirst), but I'll get there...

eXtreme Programming and Windows

It seems like the vast majority of XP practitioners are Windows sharecroppers. Why is the intersection of XP and open source so small?


Apache is down again in this month's Netcraft survey. What gives?

2 older entries...


kbob certified others as follows:

  • kbob certified tapir as Apprentice
  • kbob certified sethcohn as Master
  • kbob certified robhudson as Journeyer
  • kbob certified ariel as Master
  • kbob certified rybolov as Journeyer
  • kbob certified Kyrgan as Apprentice

Others have certified kbob as follows:

[ Certification disabled because you're not logged in. ]

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

Share this page