Can all software be free?

Those who believe that all software should be free have little understanding of the overall software business.  There are free versions of widely popular packages like text editors, web browsers, and web servers that have all of the functionality of proprietary programs, but most of those programs are relatively small (under 200,000 lines of code) and limited to the types of things that programmers like to use.  So there’s a large pool of talented and interested individuals available to write and maintain the package.   In addition, these programs are usually substantially completed by a very small group of developers before they are released as free software.  Free software can work in that niche.

On the opposite end of the spectrum is large vertical market packages that require a lot of vendor support.  The companies that create these packages must charge for something, because they’re paying programmers to create the programs.  These applications (customer resource management and business intelligence, for example) are very large (millions of lines), and not terribly interesting to most programmers.  Programmers work on this software primarily because they get paid, not for fun.  The free software community’s contention is that companies who create these packages can make the program freely available and still make money by providing services.  It’s been done to some small extent, but I doubt that it can be done successfully in general.

There is a huge middle ground between these two extremes that consists of software that takes a group of developers a long time to create (a year or more for a manageable team of fewer than 10 developers), using a combination of in-house code and purchased components.  These applications will have maybe 500,000 lines of in-house code combined with that much code in third-party components.  These are smaller vertical market packages that don’t require much vendor support, but they’re not useful to enough people in order to be inexpensive, nor interesting enough that programmers would create them for free.   I can see no way that these types of packages can be successfully distributed as free software.

Class reunion

I flew to Harlingen, TX last night to attend a class reunion at the Marine Military Academy, where I was a student for five years (grades 8 through 12).  A friend from 20 years ago met me at the airport.  We went out for a few drinks and proceeded to stay up all night long reminiscing and catching up.  We were at the school at 6:00 AM to have breakfast with the cadets and staff.  After breakfast we walked around the campus marveling at how things have changed over the years.  I’ve been back to the school about a dozen times since I graduated in 1980, but my friend Jim Allison hadn’t been there for 20 years.  A lot of things have changed.  The food’s the same as it was 20 years ago, though.  Friday is still Mexican food, and they’re still using Marvin Bell’s old enchilada recipe.

Unlike most schools that have reunions for a specific class, MMA invites everybody every year.  As a result, there were former cadets from just about every class since the first (1966).  We all share a unique experience (attending a small military school) that has left a visible mark on our personalities.  I’m still pondering the nature of that particular beast.  I’m also left wondering if the mark is only on those of us who choose to come back to the school and visit.

At any rate the trip was great fun, although brief in my case.  I had to leave at 3:00 on Friday afternoon.  A prior commitment prevented me from staying the weekend and participating in all of the festivities.

Book review: Guns, Germs, and Steel

I was browsing a bookstore in the Dallas/Fort Worth airport last month when I ran across the book Guns, Germs, and Steel by Jared Diamond.  This Pulitzer Prize winning book (subtitled “The Fates of Human Societies”) “attempts,” as the preface to the paperback edition says, “to provide a short history of everybody for the last 13,000 years.  The question motivating the book is:  Why did history unfold differently on different continents?”

What a fascinating book!  The author traces mankind’s history since about 12,000 B.C. (the dawn of food production) up to the late Renaissance period, with most of the time spent on earlier periods.  The focus is on why things happened, rather than when who did what to whom.  The author is a scientist by training, and his application of the scientific method to historical research results in a much more interesting read, and more believable conclusions.  Not only do I see the conclusions, but I can follow the trail of evidence that leads to the conclusion.  And, no, the conclusion isn’t racist (i.e. that one race or another is genetically superior).  Quite to the contrary.  The author’s one-sentence summation of the book is: “History followed different courses for different peoples because of differences among people’s environments, not because of biological differences among peoples themselves.”  The 425 pages that follow this statement make a very compelling case.  

The book is written in layman’s terms without sounding condescending.  It’s a pleasure to read.  I highly recommend this book to anybody who’s interested in understanding how our societies came to be what  they are today. 

Hooking up the new DVD player

Debra and I finally went out and bought a DVD player this past weekend.  It’s a Panasonic 5-disc carousel changer.  Since the DVD also plays CDs, we were able to get rid of the CD changer boom box we’d been using.  That’s now in my office.  We also picked up a new VCR (the old one died after 10 years), and a “universal” remote (more on that below) to control all this stuff.  Getting everything hooked up turned out to be something of an ordeal.

You see, our stereo receiver is the Bang & Olufsen 5000 receiver that I bought in 1984 when I had more money than brains, and our TV is a 24″ Magnavox that Debra bought in 1989.  The TV has one input: a coaxial RF jack.  And the B&O stereo only has RCA jacks for one input device.  The other inputs accept a 5-pin DIN plug.  I got the new VCR connected with no trouble.  But of course I couldn’t hook up the DVD because it doesn’t have an RF output.

I got lucky yesterday and found a B&O store, and surprisingly enough they had an RCA-to-DIN converter plug in stock.  Then I stopped by Best Buy to pick up an RF modulator and an A/B switch so I can select between the DVD and VCR, and an extra coaxial cable to patch from the RF modulator to the A/B switch.  Hooked it all up and, voila, it works.  I’m disappointed that we have to get up and manually operate the A/B switch, but I’ll live.

So here comes the fun part:  programming the universal remote.  At $180, I could hardly believe that I bought the thing, but if I could control all five components with a single remote, it’d be well worth it.  The aggravation factor, you know.  Programming the remote is reasonably easy:  just select the device type (VCR, CD, DVD, TV, etc.) and then enter the code number from the tables in the supplied documentation.  It didn’t take long to select the cable box, TV, VCR, and DVD and confirm that I could turn them on and off.  The thing doesn’t support my B&O receiver (nor does any other universal remote that I’ve seen).  Even with that, I was reasonably happy.  Except I couldn’t access all of the functions on the DVD or on the cable box.  So we took the thing back:  no reason to have six remotes for five pieces of equipment.  It turns out that the VCR remote has some “universal” capabilities of its own, and I was able to program it to turn on the TV and cable box, and switch channels on the cable box.

A friend mentioned that Phillips has a universal remote (the one we tried was a Sony) that can “learn,” but having dipped in that pond before, I’m reluctant to try it again.  And on reflection, $180 is way too much for the convenience of having just one remote, especially when you consider that no universal remote is going to operate my B&O receiver.  It’s too bad that manufacturers have never agreed on some kind of standard for remote signals.  I’ve given up trying to find a universal remote.  One of these days we’ll just buy a full system with an integrated remote from one manufacturer.  Until then, we’ll live with the three (TV/VCR, DVD, and stereo).

Get out the Ark

Q:  What do Austinites call the day after two days of rain.
A:  Monday.

We’re swimming here.  March average rainfall in Austin is 1.69 inches.  We’ve had 5.29 inches of rain this month, and three more days of thunderstorms to go.  The back yard is a swamp.  Area lakes are now slightly above “full” level.  No major floods yet, although there is a flash flood watch in effect tonight.  Surprisingly enough, the ground seems still to be soaking it up.  Our back yard is a low spot, and standing water rarely lasts longer than a day, even after all this rain we’ve had lately.  And it’s great for the grass (which I can’t mow because the tractor sinks) and the rest of the plants.

It’s too bad I haven’t installed the rainwater collection system yet (maybe next year), because I’m sure I’ll be needing water for our vegetable garden come July and August.  It’s surprising how much water you can collect from the roof of your house.  In a 1″ rain, the roof of a 2,500 square foot house will shed about 1,400 gallons of water.  I could easily collect over 10,000 gallons of water in the spring for use in the dry hot summer months.  All it takes is a simple system of pipes to carry water from the rain gutters on the house to a cachement system (typically one or more tanks in the 3,000 to 7,000 gallon size).  Harvesting rainwater for household needs isn’t practical if you have other options, but it’s perfect for watering plants.  It also gets the water away from the foundation, which would alleviate some of the shifting that causes cracks in our walls.

Rainwater collection systems for garden use are fairly inexpensive.  If you’re interested, here’s a good place to start.  http://www.greenbuilder.com/sourcebook/Rainwater.html

WalMart vs UFCW

I’ve always been suspicious of union organizing efforts, and the recent activity by the United Food and Commercial Workers in Las Vegas strengthens my conviction that union organizers are more interested in power than in any type of “fairness.”  The UFCW started this action last summer by pressing the Clark County Commission and area cities to prevent Wal-Mart from opening their Supercenter stores.  When that didn’t work, the union organized a picketing campaign aimed at keeping people from shopping at Wal-Mart.  That didn’t work either, so now they’re trying to get Wal-Mart employees to hold a union election.  It’s a tough go, in part because Wal-Mart has a high employee turnover rate (around 50%), and in part because long-time Wal-Mart employees actually like the company’s policies.  Unions have been trying to organize Wal-Mart workers for years.  It looks to me like the UFCW is eyeing the 850,000 nationwide Wal-Mart employees as a way to breathe new life into their sagging membership.  Wal-Mart is a tough nut to crack, though.  Unions have been trying for years to organize Wal-Mart workers, and to date have failed completely except for some meat cutters in one or two stores.

I’ve seen the UFCW do this one time before:  in Grand Junction, CO in the early 1980s.  The UFCW had a lock on the local supermarkets (Safeway and City Market) until a new County Market came in offering a larger selection and better prices.  The UFCW’s organizing campaign was astounding, and when the first election failed they stepped up the negative ads and started picketing the new store.  I, of course, made a point of tweaking their noses by crossing the picket line every day.  Mind you, this wasn’t County Market employees picketing for better pay or anything:  it was UFCW members picketing the store because the employees choose not to have the union represent them.  Not that I would have respected the picket line if it was the employees. 

The primary interest of unions today appears to be maintaining their power rather than protecting the workers that they claim to represent.  A union today is like any other large bureaucracy:  those in power have a vested interest in keeping the union strong so that they don’t have to go find honest work.  The union remains in power, not because it provides for its members, but because new employees are required to abide by union rules even if they choose not to become members.  And if they choose not to join the union, they are discriminated against by the union representatives and the pro-union employees.  By placing seniority over performance, and refusing to tie benefits to realistic production, quality, or profit goals, unions promote mediocrity at the expense of their members, their employers, and their customers.  It’s little wonder that Americans today are increasingly anti-union.

Warning labels on bungee cords

I bought a package of replacement bungee cords for my truck last week.  I use the things surprisingly often, and they tend to get brittle and snap after a few years.  I opted for the cloth covered type this time rather than the heavy black rubber ones.  The hooks on the old rubber cords tend to fall off and get lost, and the rubber straps seem to wear out faster than the cloth covered type.  Anyway, today I actually opened the package.

There’s a warning label on each cord.  The label states the cord’s rated capacity (“Do not exceed 75 lbs.”) and a warning not to stretch the 24″ cord longer than 40″.  There are also warnings about firmly attaching the hooks, keeping your face away from the cord when attaching or detaching it, and a couple of other warnings that I don’t recall now (and I’m too lazy to go out to the garage to find a label).  I’m surprised they actually got all that information on the little label.

Warning labels on bungee cords.  What a concept.  I can understand the weight and stretch ratings, but it’s obvious that the other warnings are there simply to prevent some Darwin Award nominee from hurting himself and bringing suit against the manufacturer.  It’s painfully obvious to anybody who gives it a moment’s thought that these bungee cords are giant rubber bands that can cause some serious damage if they’re used stupidly.  The warning labels serve only as a source of humor to those of us who are smart enough to read them.  Anybody who would misuse a bungee cord is probably too stupid to read anyway, so the warning labels are a complete waste.  Amazing.

Rosedale Ride

Bicyclists are optimists.  Either that or we’re just nuts.  This morning was the Rosedale Ride, an organized cycling event with distances ranging from 9 to 62 miles.  All proceeds benefit the Rosedale School, which supports and educates students with exceptional physical and mental handicaps.  Since I’ve not been training much lately, I choose to ride 45 miles rather than 62.  It turned out to be a good training ride in preparation for the 62 mile Ride for the Roses in 2 weeks.

I got up at 6:00 this morning, and it was raining.  Actually, it was pouring.  I turned on the local news station to check out the weather, and it didn’t look too promising.  Since I’d told friends that I would be there, I figured I might as well go, but I fully expected to see a “canceled” or “postponed” sign at the race site.  Instead, there were almost 1,000 people already there!  It rained right up to the start of the ride, but nobody headed home.  It stopped raining at about 8:30, and we started the ride a few minutes later.  It turned out to be a very good ride.

Let’s Build a Compiler

When I was going to college, one of the most popular Computer Science electives was compiler design.  We went through all the theory talking about LALR(1) parsers, terminals, non-terminals, peephole optimization, and all that, and then wrote the front end for a small Pascal-like language.  Over the years, I’ve had reason to implement parsers for many different “languages,” none even as difficult as the toy Pascal we worked with in college.  And every time I need a parser construction reference I look not at the Dragon Book or any of the other mainstream compiler texts, but instead I turn to my faded printouts of Jack Crenshaw’s Let’s Build a Compiler.  In this series of articles, Jack Crenshaw dispenses with most of the theory and gets right to the heart of creating a scanner and a parser.  I followed this series while Jack was working on it, and even did a C conversion of the code (Jack’s examples are in Pascal) for the first 8 installments.  If you’re at all interested in writing a parser of any type, you should take a look at this series.

I mention this today because I’m writing a parser for a client project.  I got stuck, looked at my bookshelf, passed over the 5 different compiler construction books I have there, and dug through the closet (working at home today) looking for the 3-ring binder that contains the old printouts.  Dot matrix printout of a fixed font.  It’s hardly pretty, but there’s tons of good information on those pages.  Check it out.  It’s worth your time. 

California energy situation

I find the energy situation in California somewhat amusing.  No, I’m not laughing at the potential loss of life if power is cut to a hospital or some old folks can’t turn on their air conditioning come June.  What makes me laugh is that Californians have for years obstructed construction of new power plants, preferring to buy power from out-of-state suppliers in order to keep the associated environmental effects (real or imagined) out of California.  And then they scream for Federal intervention when those out-of-state suppliers raise the prices in response to an ever-increasing demand and a falling supply.  It’s not as if nobody saw this coming.  Some people in California have been warning about this for years.  When I heard that the “deregulation” regulations prevent PG&E and Southern California Edison from passing the higher costs on to their customers, I started rolling on the floor.  Not only do Californians expect somebody else to pay the environmental price of their voracious power appetites, they expect the supply to be cheap, plentiful, and uninterrupted, regardless of what it actually costs to produce or obtain.  Is it any wonder that PG&E and Edison have racked up $13 billion in debt over the last 8 months?  The state is now paying $50 million per day to keep Californians’ televisions turned on.

Here’s the one that almost made me pee in my pants.  Californians now are offering a coal-fired power plant in Utah billions of dollars to expand, and want an exclusive contract on the additional generating capacity.  At the same time, community groups and environmentalists all over the state are blocking proposed construction of small, clean, natural gas fired plants that could provide inexpensive, reliable, and uninterrupted power to local areas.  Environmentalists are also blocking exploration and development of regional natural gas and oil, and scream bloody murder if anybody even suggests a new nuclear power plant or hydroelectric dam.  And they keep sucking down those megawatts.  There are almost 34 million people in California.  If they turned off one 100 Watt light bulb per person, they could save 3,400 megawatts.  That much power savings would have prevented Monday’s rolling blackouts.  Do you doubt that with very little effort they could more than triple that savings at no real inconvenience?

Conservation efforts can only go so far, though, and power demand will continue to increase.  At some point Californians will have to make a choice:  stop consuming or start producing.  If you want to maintain your “not in my back yard” approach to power generation, that’s just fine.  Just don’t come crying to me when nobody else wants to generate your power, either.