Thursday, 30 November, 2000

Used Pickups Hot Sellers in Mexico

I drove from Austin to Harlingen, TX this evening after work.  Harlingen is in the lower Rio Grande Valley, and just about as far South as you can get in Texas.  On the way there I noticed at least two dozen cars or trucks towing used pickups; all headed South.  I'd made this trip before, and never saw anything like it.  What, I wondered, was going on?

It turns out that used pickups from the US are very popular in Mexico right now because in March the Mexican government temporarily lifted a ban on importing used trucks, and that ban is about to expire.  Or maybe has expired—it's hard to say and I've been unable to find much news coverage.  In any case, used pickups in the US are being sold at premium prices to Mexican buyers.  The Mexican government then charges $200 (US) to bring the truck into Mexico.  Having exhausted the supply in border towns, people are coming to San Antonio (a 4-hour drive from the border) to buy used trucks.

I would have thought that NAFTA would make this unnecessary.  And it will—eventually.  The restrictions, included in NAFTA, are there to "protect" the Mexican auto and truck industries, and eventually will be phased out.  Like most trade restrictions, the ban on auto imports hasn't resulted in significantly more sales of new Mexican-built cars.  Instead, it's resulted in higher prices for used cars and a booming auto theft industry in US border towns.  Cars are stolen in the US, smuggled into Mexico, and sold illegally to unwitting buyers who don't even know they're buying a stolen car.  It got so bad that last week the Mexican Senate passed a law allowing the legal registration of foreign cars manufactured between 1970 and 1993 that were brought into the country before Oct. 31.  They estimate that there are 1.5 million illegal (i.e. unregistered) used vehicles now being driven in the country.

Wednesday, 29 November, 2000

Drawbacks to Instant Communication

Instant communication has its drawbacks.  I've long had a love/hate relationship with the telephone because many people use it as a crutch:  rather than figure out something themselves, they pick up the phone and call me:  interrupting whatever it is that I'm working on, and wanting to waste my time with idle chatter as well.  I solved that problem by putting my phone on "Do Not Disturb," and checking my messages periodically.

The advent of Federal Express, Express Mail, Fax, and electronic mail makes things even worse.  For less than $20, you can send a printed document  to just about any place in the country and be reasonably sure that it'll be there the next morning.  Fax is instantaneous, as is electronic mail.  These are great conveniences, to be sure, but too many people use them as crutches.  Rather than planning their work, too many people wait until the last minute and then rush to the Federal Express office to get the final document on the plane for tomorrow delivery.  It's like they're college students pulling an all-nighter to finish a term paper.  I realize that Federal Express would  have a lot less business if this practice were to stop, but every other company in the country would save huge amounts of money.  I wonder if people would plan their work better if that $20 overnight deliver charge came out of their own pockets. 

In his editorial "New Boss, not the Same as the Old Boss" at, Lou Grinzo points out that most programmers of open/free software simply don't understand the mainstream computer user.  This lack of understanding, he says, is "the biggest single roadblock to Linux's Total World Domination."  It's a very good article, and well worth the read.

It's interesting that some of those who posted comments about the article treat the issue as either/or:  the software is either powerful, or easy to use.  There is no room in their thinking for powerful software that is easy to use.  It's an interesting blind spot.  Probably it's just laziness.  One poster says "The programmers who can start the program[s] are not always (or even often) the programmers who can polish them."  And that's the whole problem, in my opinion.  Anybody can start a program.  It takes dedication and discipline (traits sadly lacking in too many people who call themselves programmers) to polish and finish a software project. 

Monday, 27 November, 2000

Using a Cell Phone as a Home Phone?

I've had a mobile phone (I keep wanting to say "cell phone", but it's digital) for almost three years now.  Whether I actually need the thing is sometimes debatable, but it has gotten me out of tough spots a couple of times.  Back when I got the phone, I just knew that within a year I'd be able to replace my land line with the mobile.  Guess I was wrong on that one.  I could get rid of the land line, but it would be very inconvenient.  One nice thing about my land line is that I have 5 phones in the house.  Whatever room I'm in, I'm only a couple of steps away from the phone when it rings.  Better yet, most of the phones are reasonably comfortable to use.  The mobile, on the other hand, I would have to cart around with me (or try to find it when it rings), and talking on the silly thing is uncomfortable.  I just can't rest this little phone on my shoulder like I can a regular telephone handset.

Why hasn't somebody come up with a digital phone docking station that I can plug into my home telephone wires?  It seems like it'd be easy enough to do.  When somebody calls my digital phone then, the docking station acts like the telephone central station; sending the ring voltage down the line and providing the voice signal on the proper wires.  Similarly, if I picked up any phone in the house I'd get a dial tone (provided by the docking station) and could place my call, which would be relayed to the digital phone.  This isn't rocket science.  All of the technology is available, and probably darned cheap.  The stock in digital phone manufacturers has been depressed for a while now, in part because shareholders are worried that the market is no longer growing.  Reasonably priced, this docking station could rejuvenate the digital phone market.  Heck, I'd buy a new phone if I could get one of these docking stations.

Digital service providers could take a huge bite out of the residential phone market.  Sprint PCS, for example, is currently offering a plan that gives you 1,500 minutes of air time for $35 per month.  That's 250 anytime minutes and 1,250 night and weekend minutes.  Long distance included!  Guess what?  Most of my telephone time is at night or on the weekends.  My monthly residential phone service costs me upwards of $20 per month just for basic service, and long distance easily puts me over the $35 mark.  I'd willingly part with $400 for a new phone and docking station so I could eliminate my residential telephone charges.  I'd be money ahead in less than a year.  Just give me the wire cutters.

Combined with a PDA/phone device (see November 12), this docking station would be a Must Have.

Sunday, 26 November, 2000

Holiday Season Blues

For various reasons, I'm not a very religious person—at least not publicly.  But this past weekend's spending orgy, with marathon sales, Christmas bazaars, frantic shoppers, and other associated madness is enough to turn anybody's stomach.  The period between Thanksgiving Day and Christmas is just one huge exercise in self indulgence and over indulgence, followed by a 7-day party that culminates in the final absurdity of New Year's Eve blowouts.  Anybody who asks me "Where is your Christmas spirit?" is obviously missing the point.  This is a season to reflect, enjoy the company of your family and friends, and perhaps remember that we're all in this together.  Too many people put on their holiday faces in December, and then promptly take them off on New Year's Day, a behavior that is distressingly similar to those who put on their Sunday faces for morning Mass and then remove them for the other 167 hours of the week.  Is it any wonder that people get depressed this time of year?

Saturday, 25 November, 2000

Trouble Installing Linux Components

Finding things on my SuSE 6.4 distribution CDs is a nightmare.  Today I wanted to install GNOME and also look at some of the KDE source code.  I figured, no problem.  Just start up the YAST (Yet Another Setup Tool), select a few packages, and go.  Except "select a few packages" turns out to be much harder than it needs to be.  I didn't want all of the KDE sources, just the utilities, libraries, and base functionality.  There must be 100 KDE source packages.  The utilities were easy enough to find, and the base stuff was conveniently located at the head of the list.  I had no idea that the libraries weren't part of the base package.  I must have spent an hour searching the descriptions of all of the KDE source packages.

GNOME, I thought, would be different.  After all, there should be just one package that'll install the base functionality, right?  Wrong.  Another hour.  And I made the mistake of installing some GNOME utilities, one of which figured that it needed to change my file, causing me no end of frustration when my SMTP server stopped working.

Yep.  Linux (at least SuSE Linux) setup and configuration still has a ways to go.

Friday, 24 November, 2000

Linux Desktop Programming

I continue my experiments in Linux programming.  Understand that I'm mostly uninterested in systems programming.  I'm writing user applications these days.  Today I've been trying to create an application that will put itself on the task tray (or docking tray, or whatever they call it).  So I found a KDE application (knotes) and copied the code that does that.  Of course, that only works if I'm running KDE.  I'll need an entirely different approach if I want the program to work under GNOME.  And another set of code for Enlightenment.  Egads.

Back in September I wrote an article for Dr. Dobb's called "The Failure of the Free Software Movement."  In it, I said, "the GNU/Linux community has to agree on some standards. The most obvious case in point here is a desktop environment standard."  Many readers took me to task for that statement, saying that the competition between GNOME and KDE is good for Linux, and moving to a single standard would end up stifling innovation.  I remain unconvinced.  With the current state of affairs, it's very difficult (maybe impossible) to write portable code that interacts with the desktop.  Libraries like Trolltech's Qt make some things easier, but these libraries are typically desktop agnostic—they talk directly to the X Window library—so there's no portable way to do desktop-related things.

My understanding is that there's no reliable way to determine which desktop is currently running.  If that's true, then programs that do desktop-related things will have to be written specifically for each platform.  Complexity is the price of flexibility.  Is it possible that in this case the price is too high? 

Thursday, 23 November, 2000

Thanksgiving Beer

Well, I survived the annual oink fest with only a mildly upset stomach.  Turkey, rice, potatoes, cranberry sauce, and bread were the main course, and Debra's home made apple pie with some vanilla ice cream topped off a perfect meal.

Thanksgiving dinner just wouldn't be complete without beer.  We opened the rye beer today—the stuff that we made 5 weeks ago.  It was delicious.  Having been in the bottle only 10 days, it's still slightly under-carbonated.  Another week and it'll be perfect.  This is one of the best beers I've made yet.  If you're interested in the recipe, just drop me a line.

Wednesday, 22 November, 2000

Rediscovering Fun in Programming

I'm rediscovering the Joy of Programming.  Maintaining and enhancing a large system (what I was doing until recently) is more work than fun, so to maintain my sanity I've been writing some small utilities at home, and at work I've moved from Product Development into Solutions, where we provide custom solutions for clients who buy our product.  These custom solutions are much smaller than our Inquisite product, and we have a little more freedom in the tools we use to build them.  The development cycle is days or weeks, rather than months and years, and in some ways much more satisfying.

I'd also forgotten just how powerful component programming can be.  Today I started on an internal utility that will send batch emails (survey invitations).  It's a tool that we use to administer surveys for clients.  Using Delphi, I was able to create, in just a couple of hours, the entire database interface that manages surveys and mail recipients all without having to write a single line of code.

Some programmers may wonder why I'd rather hook up components than write code.  The answer is simple.  I've written database access code a zillion times.  It's boring, repetitive work that's very error prone.  Hooking up components that do it for me frees me to concentrate on the program's real work (scheduling and tracking emails sent through our SMTP service), which is new to me, and actually interesting.  

Tuesday, 21 November, 2000

Dynamic DNS

My network at home consists of two Windows 98 boxes and a SuSE 6.4 Linux box, all sitting behind a Linksys Cable/DSL Router hooked to my Road Runner cable modem.  The router serves as a firewall, too, and lets me share things between my computers without having to worry about external attacks.  I configured the router to forward FTP requests to my Linux box, where I have an FTP server that I use periodically for file transfers or to accept large files from friends.  The problem is that I don't have a static IP address.

Today I solved the static IP problem by writing a Delphi program that periodically (once an hour, but it's configurable) queries the router's status page (HTML in ROM) to obtain the current IP address, and compares that value against the previous value.  If the values differ, then the program sends an email (through the SMTP server on my Linux box) to my personal email address and also to my work email address.  It's the low-tech  equivalent of dynamic DNS, which I've looked at but not taken the time to try.

The program's working, but it's not complete.  Right now it runs as a regular program on the task bar, and I need to make it create a task tray icon.  It also requires an SMTP server that will forward emails, which works fine for me, but it'd probably be a good idea to support MAPI and POP3 as well, so people who don't have an SMTP server could still use it.  I used SMTP just because I was curious about setting up and using the SMTP service on my Linux machine.

When I finish the program, I'll put it on my Tools & Utilities page.  If you're interested in the program's source code before then, just drop me a line. 

Monday, 20 November, 2000

Publishers Fear the Internet

I heard a piece on NPR today in which the commentator was describing the Chicken Little attitude that major publishers and some authors are taking towards the Web.  Basically, they're worried that the Web will be the end of their profits.  With all this information available online, who's going to pay to buy a book or magazine?  The commentator likened it to the record companies of the 1930's, who were afraid that radio would reduce their markets.  Who would buy a record when they could hear the music on the radio?  Some record companies went so far as to prohibit their records from being played on the radio.  20 years later, record companies were paying radio stations to play records.  They discovered that exposure increased, rather than decreased, their markets.

I certainly haven't seen any evidence that the wide availability of information on the Internet has reduced the number of books being published.  On the contrary, computer sections in book stores seem to be growing exponentially, even though most of the information in the books is available online.  Books and magazines are still a heck of a lot more convenient for me than my desktop computer.  I like online availability of reference information, but I find detailed technical information and and "how to" documents much easier to read in printed, rather than online, form.  So do most other programmers who I know.  O'Reilly seems to have figured this out.  They publish entire book chapters online as advertisements.  Programmers who like what they see in sample chapters end up ordering the book.  Think of it as buying an album because you like one song you hear on the radio.

Authors, too, should embrace this medium.  A novelist might post the first couple of chapters on the web.  Many people who read and like the first few chapters will end up ordering the book.  New authors might consider publishing a story or two on one of the fiction sites.  If people like the stories, the author will be noticed by somebody in the publishing business.  Think of it as a way to get your story "read".  It certainly can't be any less efficient than sending blind query letters to dozens of publishers and agents.  Plus, people are actually reading your story, which is probably the reason you wrote it in the first place.  Money is a secondary consideration, at least when you start.

It's paradoxical, and seemingly flies in the face of supply and demand.  As information becomes more available, it becomes more valuable.  Publishing is about getting attention.  The more attention you get, the more money you make.  The Web is the best way yet to get attention.  Learn it, love it, live it. 

Sunday, 19 November, 2000

Welcome to My 'Blog'

My friend Jeff Duntemann notes in his web diary that the word to describe a Web diary is "blog" (from "Weblog").  So you're reading my blog.  Jeff's right, it's an ugly word.  Ugly or not, it's common enough to warrant an entry in the Lycos Tech Glossary.

Jeff also mentioned Blogger, a program that lets you post blogs, and Blog*Spot, which will host your blog for free if you don't have a web site of your own.  I've also found an AvantGo client for Blogger that will run on PalmOS and Windows CE.  

A Google search for "blog" returned over 70,000 hits.  It seems that blogging is pretty popular.  Most of what I saw while I was cruising other people's blogs wasn't terribly interesting, and much of it was incoherent.  Jeff's response to that observation was, "The easier it is to publish Web diaries, the less interesting the published diaries will be. It's completely true that some people have absolutely nothing to say. This won't keep them from saying it."  I agree.

Right now I use FrontPage to add an entry every day, but I'm not terribly happy with the solution.  I've considered writing my own web diary program, but now I'll have to give Blogger a try.  If you know of similar programs, please contact me.

Saturday, 18 November, 2000

A Trip to Marshall, MN

Thursday I traveled to Marshall, MN to visit a client.  Having lived in Phoenix and Austin for the last 10 years, I'd forgotten what real cold was like.  Here in Austin, cold usually means that I have to wear long pants rather than shorts, and it doesn't get that cold very often.  It was 18 degrees when I landed in Sioux City, SD on Thursday, and it never did get above 25 degrees the whole time I was in the area.  I'm still amazed that people live up North.  Not that I'd like them all to move South, mind you.  I just think they're nuts for freezing.

I'm also starting to absolutely detest commercial air travel.  My original flight out of Austin on Thursday was canceled.  The replacement flight was late leaving, and the flight from Minneapolis to Sioux City was late as well.  At least my rental car was waiting in Sioux City, and nothing went wrong with that.  Both flights on the way back were late, too, and I ended up getting home two hours late today.  Our commercial air transport system is becoming overloaded.  As airports get busier, small irregularities cause huge traffic tie-ups.  I hope somebody has the answer to this problem.  If things continue on their present path, we're going to end up with air traffic gridlock. 

Friday, 17 November, 2000

Outlook's Proprietary Backing Store

A few months ago, a friend asked if I could write a program that would read Microsoft Outlook mail files.  Like many others, he's wanting to switch from Outlook to something else for email, but refuses to do it if he can't take his old messages along.  I hacked together a little program that accesses Outlook through the COM interface just to show that it can be done.  I'm not real happy with the solution, because it requires that Outlook be installed in order to work.  You can't just point it at an arbitrary .pst file, because those files are encrypted and compressed.

Is it really necessary to encrypt your saved email?  I guess Microsoft could have provided that feature as an option, but to make it the default means that I must have Outlook installed in order to read any of my old email messages.  That's terrible.  Being a packrat, I have just about every email message I've sent or received since 1985.  They're all burned on a CD that I very rarely look at.  But when I do pull it out, I can read the messages because they're all in plain text.  Except for the last three years, which was when I started using Outlook Express, followed by Outlook about a year ago.

Outlook has been ticking me off for quite a while now.  I think it's time to try something else again.  I changed from Exchange to Eudora Pro a little over 3 years ago, but had some trouble with Eudora's MAPI support, which I needed for my FAX program.  I got tired of switching MAPI DLLs so I converted to Outlook Express and then to Outlook because I thought the Journal, Calendar, and other features would be useful.  Well, I don't use anything except the mail portion of Outlook.  Time to get ASCII versions of my Outlook email and convert to something lighter.  Problem is, I've not seen a mail client yet that I actually like.  Perhaps Eudora warrants another look.

Thursday, 16 November, 2000

The Single Source Documentation Myth

One of my duties at work these days is the documentation for our product.  Up to now, I've just been editing the existing documentation and adding new stuff as required.  The documentation needs a major overhaul, but that's a huge undertaking.  I also need to start on the manual for our latest project.  I've been putting it of while I try to find a better documentation tool than RoboHelp, which is great for creating WinHelp or Microsoft HTMLHelp files, but pretty much useless for anything else, in my opinion.  Their "portable" HTML Help requires too much from the browser, and single sourcing WinHelp and printed docs creates hideous printed documentation.

I've never seen a good single-source tool.  The goals of printed documentation are fundamentally different than those of online docs.  Using the same tool to create both kinds of documents usually results in one or the other (sometimes both) being wholly inappropriate.

I've also not yet seen a tool that does a good job of creating help files for multiple platforms.  It should be relatively easy to create a good portable online help engine that provides all of the features of Microsoft's WinHelp, but uses something more reasonable than RTF for the input.  The WinHelp output file format, too, is way too complex.  This would be an excellent Open Source project.  If somebody created an open and portable online help system that has most of the features of WinHelp, people would use it.  If you added the ability to convert RTF files to the new format, I suspect that people would switch from WinHelp to the new system.  Certainly people who are porting Windows applications to Linux would love it.  If you know of a good portable format, please let me know.

Wednesday, 15 November, 2000

Shoddy Software

If builders built buildings the way programmers wrote programs,
then the first woodpecker that came along would destroy civilization
    — Gerald Weinberg.

There is way too much truth in that quote.  The sad part is that most programmers I know seem to agree with the sentiment.  Programmers know that they don't use solid engineering principles when building their software, and yet they wonder why many people don't take them seriously.  Worse, the general public views all programmers in this light.  I know of no other industry whose products are viewed with the distrust that users view software.  The absolute worst part is that users are right to view software in this manner because almost all software is slapped together rather than engineered.

Sometimes I think I should have been a plumber.

Tuesday, 14 November, 2000

Extreme Programming

I'm amused by the relatively recent increase in the number of cowboy coders who claim to embrace Extreme Programming (XP).  These seat-of-the-pants coders who cringe at the thought of creating a design document of any sort, who think coding standards are overly restrictive and testing unnecessary, latch onto a few buzzwords picked up in somebody's two-paragraph introduction to XP and all of a sudden become experts on software development methodology.  Then, conveniently ignoring almost every rule and principle of XP, they continue to hack away at their programs.  Goofy.

If you're looking for a good lightweight software design method, you should give Extreme Programming a look.  It's not for everybody, but small teams of 10 or fewer programmers who are working in fast-changing or high risk areas can certainly benefit.  But it's a serious method, customer driven with real release schedules and primary emphasis placed on testing and evolutionary delivery of working code.  Don't let the cowboy coders who claim to embrace XP turn you off.  Spend a half hour exploring the Extreme Programming site and see for yourself if it's worth trying on your project.

Monday, 13 November, 2000

SQL Variants Cause Headaches

Our application at work can store its data in a local MS Access database, or on a MS SQL Server or Oracle 8 database.  When I first started working with the database portion of the application, I was under the impression that the SQL for accessing these databases would be standard.  Boy, was I wrong.

There's apparently a standard for SQL, but you couldn't tell it by the SQL I've seen.  The differences among these three platforms are huge.  Supposedly standard syntax fails on some platforms or works differently.  MS Access, for example, won't let you use COUNT (DISTINCT field).  Oracle doesn't support the SELECT INTO syntax, but instead requires CREATE TABLE name AS (SELECT...).  SQL Server has the concept of temporary tables.  Oracle and Access?  Nope.  SQL Server and MS Access support the "new" INNER JOIN syntax, but Oracle doesn't.  The languages look similar on the surface, but when I  actually try to write portable code, it's like trying to write portable C++ 10 years ago. 

This is nuts.  I've been fighting with Oracle recently because I'm porting code that was originally written for MS Access or SQL Server.  There are probably Oracle equivalents to most of the Access or SQL Server idioms that we've used, but I have a devil of a time finding them.  I suspect I'd be having the same problem if I was trying to port Oracle code to SQL Server or Access.  What a nightmare.

At this point, I don't know where to go.  I can write the queries and program logic differently for each database platform, or I can write code that grabs raw data from the database and massages it either internally in memory or in a local MS Access database.  Neither of these ideas is very appealing.  

Sunday, 12 November, 2000

Why I Don't Have a PDA

I used to carry a Day Timer organizer.  To keep from losing it, I put my driver's license and credit cards in it as well and it served as my wallet (money goes in the right front pocket), figuring that I'd not forget it then.  No such luck.  If it isn't in a pocket, it's gonna get lost.  Then I got a cell phone and things got worse.  That made two things to carry and remember, which is at least one too many.  So now I just leave the Day Timer behind and carry a traditional wallet in my pocket.

What I really want is a PDA/phone.  Something like a Palm V that has a phone built in.  I've looked at the phones that have Internet access, and am not terribly impressed.  A 4-line, 8-character screen and a telephone-style keypad?  No thanks.  The screen on your typical PDA is already too small, and pressing '7777' to get an 'S' is just plain wrong.  Why can't somebody build a Palm or Windows CE machine that can dock to my desktop and has a full-featured digital phone built in?  The technology is certainly available.  If I could get one of those for under $500 and link it to my Sprint PCS account, I'd do it.

Saturday, 11 November, 2000

The Election Fiasco

Manual recounts?  Confusing ballots?  Re-votes?  Court orders?  This whole election thing just gives me gas.  Now that the lawyers are involved, I don't hold much hope of obtaining "a full, fair, and accurate count."  How can we expect a manual recount to be accurate without one member from every party that was on the ballot seeing every ballot?  Disputed ballots are handled how?

There are people filing law suits in Palm Beach county demanding a re-vote.  How can that be considered fair?  Isn't it likely that people will change their votes, now that they know their votes really do make a difference?  Was the ballot really that confusing?  It certainly looked clear to me, but then I'd heard it explained a dozen times before I actually saw it.

Not that it matters one way or the other.  With Congress split almost 50-50 between Democrats and Republicans, the next President will have to be very good at forming alliances.  Either that or he could stonewall, which would probably be best for all concerned.  It'd sure be nice to have 4 years where the government couldn't implement new ways to squander our money.  

Friday, 10 November, 2000

Online KDE 2.0 Programming Book reports that a new book, KDE 2.0 Programming, is now available online.  The short article contains this link to the book's main page at  From the book's main page, you can reach pages to download the book in HTML or PDF format, or view the entire book online in HTML.  The book is published under the Open Publication License, and will also be available in print (from SAMS) on November 15.

I wonder how many programmers will buy the book.  I've downloaded the HTML version and will peruse it.  If it looks like a good book, I'll certainly trip down to the local bookstore and pick up a copy.  It's nice having the reference material online, certainly, but I also like having a physical book that I can read away from the computer.

One interesting thing about the online version is that you can add annotations that all other readers can see.  This could prove invaluable for posting corrections, examples, and further discussions. 

Thursday, 09 November, 2000

Managing Software Engineers

I ran across this article on Managing Software Engineers the other day.  The author, Philip Greenspun, has some interesting ideas, but for the most part I disagree with his assessment.  My experience with making programmers work 60, 80, or more hours per week is that they burn out relatively quickly.  I've been on a 12-month "Death March" project that suffered more than 100% turnover.  Not a single member of the original team remained by the time the project was canceled.  I've seen other projects with similar turnover rates.

In my experience, the key to programmer productivity is making sure that the programmers are actually working on their assigned tasks.  Without supervision, programmers tend to head off into uncharted territory or spend their time surfing the web, playing games, or goofing off with something else behind the terminal.  I've found that I can keep a programmer focused by creating a busy but realistic schedule with achievable weekly milestones.  This not only keeps the programmer focused, but also helps spot someone who's either not working, or needs some assistance and further training.

The article talks a lot about "great" programmers.  In my experience, "great" programmers are few and far between.  There are a lot of hotshot code jockeys who can spit out an amazing amount of almost working code in a very short time, but they are seemingly incapable of coding to design, testing their code, or documenting it.  Invariably, somebody has to rework the code to make it work.  These hotshots end up being far less productive than a "merely good" programmer who takes his time and delivers a fully functional, tested, documented, and bug-free milestone.  I'll take a room full of hard-working, conscientious, stable programmers who work 40 to 50 hours per week over a couple of Prima Dona hotshots who do what they want when they want and usually deliver a pile of mostly useless code.

Wednesday, 08 November, 2000

I ran across the other day, and I'm not sure what to make of it.  The web page describes it as "a democratic entity for the development of free software."  The company is to be owned and run by developers in a democratic fashion, will pay its developers to work on free software, give them shares and stock options, and all software will be licensed under the GPL.  The first sentence describing the company's structure reads:  

Our basic idea is that we will replace the traditional corporate governance apparatus (which is more a command-and-control, tyrannical system) with one that is more like the democratic governance system envisioned in the U.S. Constitution.

Their October 31 press release says that their objective is "to have e-voting free software ready for the next presidential election in 2004."  A laudable goal, to be sure, but probably unachievable given the proposed company structure.

A company that's structured like the democratic governance system envisioned in the U.S. Constitution would  be terribly ineffective.  The Constitution's primary focus is to limit government power and protect the rights and property of its citizens.  The Constitution severely limits the government's ability to enforce its will on the people.  (Whether today's government is anything like the Framers envisioned is debatable, but beside the point.)

A company, on the other hand, is an entity composed of people working toward a common goal.  However, not everybody agrees on the goal (some just want to get paid), and not everybody agrees on how to get there.  A company must have a hierarchical command-and-control structure so that it can focus the work of its employees.  The company must have the ability to force its will (as defined by the Board of Directors or in the case of FreeDevelopers, its congress of developers) on its employees.  You can call the Board of Directors anything you like, and select them however you want, but at some point somebody's getting paid for giving the orders and others are paid for following them (or fired for not following them).

Without a hierarchical command-and-control structure there is no accountability.  Without accountability there's nothing:  no control of what is created, no deadlines, and no way to ensure that a developer is doing what he's being paid to do.

If you can explain to me how a company structured in this manner can be at all effective, please do.  I'm all ears. 

Tuesday, 07 November, 2000

The Salary Theorem

The salary theorem states:  "The less you know, the more money you make."  A friend of mine supplied the following proof.

From our introductory physics class, we have this equation:

P = Power
W = Work
T = Time

P = W/T

Now, if you accept the adages "Time is Money" and "Knowledge is Power", then we have:

K = Knowledge
M = Money

If we then substitute K for P, and M for T, and solve for M, we get this:

K  = W/M
KM = W
M  = W/K

Regardless of the amount of work performed, as Knowledge approaches 0, Money approaches infinity.  The less you know, the more money you make.

Isn't math wonderful?

Monday, 06 November, 2000

Bicycle Trainer

Debra bought me a bicycle trainer for my birthday, but I hadn't taken the time to actually try it out until yesterday.  A bicycle trainer is simply a stand that holds the bicycle and applies resistance to the rear wheel.  It turns your bicycle into a stationary bike.  Quite a handy contraption when it's cold or raining.

The model she got me is called a CycleOps Mag, pictured to the right.

If you're interested in getting one, I suggest that you try it out at your local bike shop first.  The thing is noisy.  It also takes some getting used to.  You may think that you sit in the same position when you're biking, but you're actually making slight movements all the time to keep the bike balanced.  When you're attached to one of these things, though, you are sitting in the same position, and it gets tiring very quickly.  You also get much hotter, because you don't have the breeze from your passage through the air to help cool you off.

That said, I'm still glad I got it.  It'll be a good way to get my exercise when the weather gets colder.  It's also handy for doing interval training and other workouts that are best done on flat ground. 

Sunday, 05 November, 2000

20% Chance of Rain?

Yet another rainy day here in central Texas.  I remember reading that this area gets an average of 35 inches of rain per year, but I didn't realize that I'd get half of that in just a few weeks.  Just goes to show that you need to look at more than just the annual averages before you make a judgment on the climate.  If you're interested in historical weather data, one of the best places to start is the National Weather Service's pages.  This site displays a map of the United States, with all of the NWS offices highlighted.  From here, click on an office to go to their web page, from which you can locate local climate information.

Speaking of weather, I'm concerned that maybe our local TV weatherman doesn't know what he's talking about.  On several occasions I've heard him describe a 20% chance of rain by saying "That means that 20% of our listening area will get rain today."  That's just absurd.  What it really means is that there's a 20% chance that some place in the area (possibly the entire area) covered by the forecast will get measurable rain.  See "What forecast terms mean" on this page for more information.  That's a huge difference.  The percentages are based on current observations and comparisons with historical data.

USA Today has an excellent weather page.  I'm kind of surprised that this web site is associated with that terrible newspaper.  The Ask Jack section answers people's questions about weather, and the Topic Index has entries for a wide range of topics.

Saturday, 04 November, 2000

Beer Bottling / Homebrewing

Today was beer bottling day.  I had to bottle the beer for next week's party (see Oct 22).  Of course, I took a sample for taste before I began bottling.  It's a little sweet, but that's normal.  Otherwise it tastes like flat beer.

Like everything else about home brewing, the bottling process is very simple.  Again, the primary word is sanitation.  Before you start bottling, you have to clean and sanitize the bottles, siphon the beer from the carboy (glass jug) into a sanitized bucket, and add a little priming sugar (about 3/4 cup of corn sugar or malt extract).  You siphon the beer into the bottling bucket for two reasons:  to help ensure that the priming sugar is evenly distributed in the 5 gallons of beer, and to get the beer away from the dead yeast—you don't want too much of that in your finished beer.  There's still some live yeast in the beer, but not too much.  The priming sugar is food for the yeast.  I'll get to why you need that below.

Once you sanitize everything and transfer to the bottling bucket, it's a simple matter to siphon the beer into individual bottles.  We have a bottle filler, which is simply a tube with a spring-loaded valve at the end.  You put the tube into the bottle, and press the valve against the bottom of the bottle to start the beer flowing.  When the bottle is full, you release the valve to stop the flow.  You can do it without the bottle filler, but it's a major pain, and very messy.

Everybody asks me how I cap the bottles.  It's amazingly simple.  You can buy caps by the pound at the local homebrew store or through the mail.  Mine say "Real Beer" on them.  The capper is a simple and inexpensive (less than $10) device that crimps the cap onto the bottle.  Capping is probably the easiest part of the entire process.

Remember I said that the beer was flat?  Nobody I know likes flat beer, so we need a way to carbonate it.  Home brewers who keg their beer use CO2 to force carbonate it.  But the equipment to force carbonate bottled beer is out of reach for most home brewers, so we let the yeast do it for us.

Yeast digest sugar and produce alcohol and CO2 as by-products.  In your primary and secondary fermenters, the CO2 bubbles out through your airlock.  But if you add some sugar to your finished beer and cap the bottles, the remaining yeast will feed on the sugar, and the resulting CO2 will remain in your beer.  Natural carbonation.

The only drawback (to some people) to this process is that the yeast will settle out of the beer and form a small layer on the bottom of the bottle, and then get stirred up when you take a drink.  It's not harmful (on the contrary, there's some evidence that these small amounts of yeast are beneficial), but some people find the yeast distasteful.  That's easy enough to remedy—just carefully pour the beer from the bottle into a mug, and leave the last 1/4 inch or so in the bottle.

After you bottle the beer, just store the bottles in a cool dark place for a week or two.  Then refrigerate (optional), open a bottle, and enjoy.

Getting Started with Homebrew

Although there's quite a lot of good homebrew information on the web, the best place to start is your local homebrew supply store.  Just go in and tell them that you want to get started, and they'll hook you up.  You can get a full brewing kit with all the necessary equipment, and ingredients and instructions for your first batch of beer for under $100.  That doesn't include bottles or bottle caps.  You can buy the bottles at the homebrew store (you'll need about 50 12-oz bottles for a 5-gallon batch), or save the ones that contain your store-bought beer.  Twist-off bottles don't work so well.  Some homebrew places have a "bottle swap" where people drop off their bottles.  Remove the labels by soaking them overnight in a bucket of ammonia/water solution (1 cup of ammonia in 5 gallons of water works well).  Remember to rinse the bottles thoroughly after soaking in ammonia.

I recommend Charlie Papazian's book The New Complete Joy of Homebrewing.  It contains a lot of information about the science of fermentation, a troubleshooting section, and recipes for lots of different beers.  If your homebrew store doesn't carry it, it's almost guaranteed that your local chain bookstore will. is a good  place to start if you're looking for information online.  Their resource center has links to articles on how to start brewing, a FAQ, and lots of other information.  The Real Beer Page also has a lot of information, and links to dozens of sites that contain brewing information, recipes, ingredients, and equipment.  My local homebrew store, Austin Homebrew Supply, also has an online ordering system.

Friday, 03 November, 2000

Setting the Linux System Clock

I'm no dummy, but when it comes to doing even the simplest thing on my Linux box I sometimes feel really stupid.

The switch from Daylight Savings Time happened last Saturday, and I just assumed (yes, I know how to parse that particular word) that my Linux system would automagically update the clock.  No such luck.  Today that one hour difference finally bothered me enough that I decided to reset the clock.

What a nightmare.  My first mistake was trying to find a pointy-clicky interface to set the time.  I won't bore you with all of the details.  Suffice it to say that I spent an hour finding date (what a horribly over-engineered program) and hwclock, and trying to figure out why the date command didn't update the hardware clock, and why hwclock wouldn't update the current time.

If you need to set your clock, try these two commands:

hwclock --set  --date="11/03/2000 20:05:10"
hwclock --hctosys

The first command sets the hardware clock, and the second sets the system time from the hardware clock.  There are other ways to do this (there seems to be an infinite number of ways to do things in Linux), but this is the easiest for me to remember.

An hour to set the freaking clock?!?! 

I tried searching the Internet for information on setting the date, and mostly came up with nothing new.  The Tucows hwclock man page at provides the same example as the man page on my system, but doesn't quote the date string.  The Linux FAQ at doesn't even mention the hwclock command.  After the ordeal (to borrow a line from Arlo Guthrie), a search of found this article at, which discusses clocks in some detail and even showed me where I went wrong with the date command.

The lesson I learned from this?  Linux documentation and usability is a long way from being friendly enough for the average user.  An hour to learn how to set the clock?  Say all the bad things you want about Windows, but any first-time user could figure out how to set the clock in about 5 seconds without having to read any documentation.  Better yet, Windows understands Daylight Savings Time and automatically adjusts the clock for me.  

Thursday, 02 November, 2000

File Splitter Tool

I went searching the other night for a program that will split a large file into smaller chunks so that it can be downloaded in pieces and reconstructed.  I don't need this type of program very often these days, what with my cable modem, ZIP drive, and CD-R/CD-RW.  Trafficking in 20 megabyte files today is a whole lot easier than 1 megabyte files were 10 years ago.  But 9 gigabyte files are still a problem.

My first stop was, where I searched for "file split" and came up with this page of hits.  I can't say that I looked at all of them, but the half dozen I looked at couldn't handle splitting a 9 gigabyte file into gigabyte-sized chunks.  Most failed when they tried to read the file size, because 9 gigabytes overflows a long integer (2 gigabytes signed, or 4 gigabytes unsigned).  Others failed because they tried to allocate a 1 gigabyte file I/O buffer and overflowed my virtual memory.

If you want something done right...

Today I completed my Splitter program, which should  work for any file up to 9,223,372,036,854,775,808 bytes in size.  Of course, I don't have a file that large with which to test the program, but I did split a 5-gigabyte file into 1-gigabyte chunks.  The program lets you specify the chunk size and the output directory, and even creates a batch file that will reconstruct the file from the pieces.

The program isn't terribly fancy, but it gets the job done.  I wrote it more for the exercise than anything else.  As with other Delphi projects, it was a pleasure to have the UI code essentially written so that I could concentrate on the actual processing.  You can get the Delphi source here.

Wednesday, 01 November, 2000

Teaching and Learning

You learn to write by writing.  If you want to learn programming, you write programs.  You learned how to drive by sitting behind the wheel and stepping on the gas.  Flying, piano, bicycling:  whatever it is, you learn by doing.  Just try learning to juggle without actually tossing the balls into the air.  At some point you have to put down the book, jump in with both feet, and (to borrow a marketing phrase) just do it.  The instructor is there to show you how it's done and (in the case of driving or flying) to prevent you from causing damage when you make a mistake.

I have little patience with coworkers who ask me for a book that will "teach me how to write," or "teach me Delphi."  It's obvious that they're expecting to learn by reading rather than by doing the work.  This is similar to students who view learning as primarily a passive activity:  go to class and somebody will teach.  As if the instructor can somehow force knowledge and ability into their heads.

When somebody asks me if I can teach them something, I say "No, but I can help you to learn."  A book or instructor is simply a learning facilitator.  Learning is up to the individual seeking the knowledge, not the person who holds the knowledge.  Some people are undoubtedly better at teaching (imparting knowledge) than others, and students who are fortunate enough to have such instructors generally have an easier time learning.  Ultimately, though, the responsibility is on the student.  If you have a "bad" teacher, then you just have to work a little harder.  Nobody said it would be easy.  Or fair.

People who want to learn, learn.  People who expect to be taught generally fail.