Friday, December 17, 2004

Announcing CollectorStreet.com

Check it out! The CollectorStreet.com web site that Vlad and I created is now open for business. Do you know any collectors? Please do them a favor and spread the word that we're kicking off by giving away free classified advertising space to anyone who wants it. Thanks.

Click here to see some example ads (items that I am personally selling).

Sunday, September 12, 2004

Proud to be a Swing Voter

Every time I hear about politicians courting the swing voters, I wonder why the non swing voters don't get upset that they are being taken for granted. Shouldn't every voter need to be persuaded, every time?

Saturday, June 19, 2004

Quick, Easy, Free UML Diagrams of Java Classes

I sure do love it here in the Java open-source community!

I read in Martin Fowler's blog that there's a cool open-source tool, called UMLGraph, he's been playing with for rendering UML class diagrams. If Fowler says it's worth checking out, then that's good enough for me. What the heck? I'll give it an hour.

So, I installed the tool itself (a JavaDoc Doclet -- just one jar), and I installed the free executable from AT&T Labs that actually does the rendering. I added a JavaDoc command to my Ant build script, and I added a call to the AT&T tool. Walla! Pretty UML diagrams to go with my program! It couldn’t be any simpler.

Not that I'll ever wait until the end of a project and generate reams of UML documentation to sit on a shelf -- what this will allow me to do is start to write new Java code, without any meat on the bones yet, and immediately get diagrams as I go to show off at design reviews and whatnot. Don’t like the way the design looks? I'll just take advantage of the Eclipse refactoring tools, and then re-render the diagrams. Is that slick, or what? No need to pay for a Rational Rose license, nor go though contortions to install it. No need to learn how to use the Rose UI. And, best yet, no need to "transcribble" (transcribe with possible errors) the design into code -- it's already code.

Note that I've only played with UMLGraph's class diagrams thus far. There's also a way to draw sequence diagrams, but it doesn’t work off of the Java source. You have to use something called the PIC language, so that's not as slick, but I'm not complaining. Being able to render class diagrams quickly and easily (and cheaply) is a tremendous boon. I couldn't wait to spread the word.

Oh, and back to why I love the Java open-source community: Fowler's blog entry wasn't even a day old when the UMLGraph people changed the front page of their site to reference the suggestions for improvement that Fowler made. I wouldn't be surprised if the team has acted on them already.

Friday, June 18, 2004

Opting Out

Here is a concise web page that tells you how to cut down on junk mail (snail mail), starting with those pesky pre-approved credit card appilcations that you otherwise have to shred.

Thursday, June 17, 2004

The Decline and Fall of Our Civil Rights

First the fun part:

I saw this on techno.blog("Dion"): "Teacher Arrested at Airport - At New York Kennedy airport today, an individual later discovered to be a public school teacher, was arrested trying to board a flight while in possession of a ruler, a protractor, a setsquare, a slide rule and a calculator. Attorney general John Ashcroft believes the man is a member of the notorious al-gebra movement. He is being charged with carrying weapons of math instruction.
'Al-gebra is a very fearsome cult, indeed', Ashcroft said. 'They desire average solutions by means and extremes, and sometimes go off on a tangent in a search of absolute value. They consist of quite shadowy figures, with names like 'x' and 'y', and, although they are frequently referred to as 'unknowns', we know they really belong to a common denominator and are part of the axis of medieval with coordinates in every country.' As the great Greek philanderer Isosceles used to say, ! 'There are 3 sides to every triangle.' When asked to comment on the arrest, President Bush said, 'If God had wanted us to have better weapons of math instruction, He would have given us more fingers and toes."

Here's the serious part:

On last night's Tavis Smiley Show, civil rights attorney Connie Rice expressed dismay at how she seems to be the only one of her peers who is concerned about the extreme errosion of privacy that Patriot Act II will introduce. I was driving while listening and couldn't take notes, so I can't go into particulars, but I was appauled as she read off the things that Ashcroft will be able to do without a by-your-leave from anyone. It's scary stuff!

In searching via Google, I see she's really not totally alone in this. The Bill of Rights Defense Committee in MA is a prominent site with lots of resources and calls to action.

Sunday, June 06, 2004

Friedman on Outsourcing

I caught a 1-hour program on the Discovery Channel the other day about outsourcing to India that was pretty good. It was by Thomas L. Friedman a columnist for the New York Times. The program, called "The Other Side of Outsourcing" showed Friedman's visit to Bangalore, India where he interviewed Indians on the pros and cons of globalization. It looks like you can still catch a rerun on the Discovery Times channel this week if you have digital cable.

It starts off by listing all of the things that are currently being outsourced from call centers (commonly divided into inbound, i.e. service calls, and outbound, i.e. sales calls), to proofreading novels, to Indian medical doctors analyzing x-rays. They say its only the tip of the iceberg. I'm waiting for someone to start outsourcing the proofreading of American résumés.

Thursday, May 20, 2004

Nickeled & Dimed to Death x 100

Two months ago, Bank One quietly shortened the grace period on my credit card by 7 days (although the customer service guy swears it was only 5). So, suddenly I'm hit with two $35 late charges in a row, plus extra finance charges. Sneaky, sneaky. I think that they are also deliberately sending the bills out late. The one I got today is due on the 2nd, which means I only have a week to get a check in the mail if I want to allow 5 days for it to get there. What if I was away on a business trip?

A few days ago I read an article on SlashDot about T-Mobile charging their customers a "Regulatory Programs Fee" which sounds like a government tax but is just a way for them to stick it to the customer without changing the prices they advertise. Sneaky, sneaky. I think they took their cue from the practice of hotels hitting you with a "resort fee" that's on top of the advertised rate and never mentioned until you arrive to check in. Sneaky, sneaky. (BTW, I was considering switching to T-Mobile once until I realized that the contract they wanted me to sign bound me to terms that appeared only on some arbitration company website that wouldn't come up in any browser. Talk about buying a pig in a poke!) Anyway, you can bet I'll be watching out for when my cell phone company follows T-Mobile's example.

And, of course, today my cable bill went up another $2.50 for the second year in a row.

It used to be that you had to watch out for being nickeled and dimed to death. Now, it's $2.50'd and $35.00'd to death.

Tuesday, May 18, 2004

Two Books on Being a Software Professional

I just read a blog entry on productmarketing.com that mentioned a book called Coder to Developer by Mike Gunderloy. (The blog is addressed at marketing professionals and recommended the book as a way for them to become familiar with how software is, or ought to be, created). This book reminds me of another one called Code Complete by Steve McConnell that is due out with a second edition next month. I highly recommend Code Complete to anyone interested in software craftsmanship, and it sounds like this other one might be worth a look, too. The biggest difference appears to be that Gunderloy's book is thick with .NET stuff, while McConnell's book is agnostic.

The productmarketing blog points out that Gunderloy's book is "generous with references to other works," and that his index of all web-accessible references is online. Be sure to check it out, whether or not you read the book. At a quick glance, I recognize many sites that I know and love, and I'm sure I'll have fun exploring the rest.

Thursday, May 06, 2004

Tech Jobs on the Rise

The Extreme Programming SoCal group meets informally over lunch every other Wednesday (in addition to occasional formal programs), in two locations: Pasadena and Tustin. The Tustin contingent was 7 strong this week with some rarely seen faces, three of whom were all just laid off together, which is why they were available. They swear that it was because their group was doing XP and the old guard managers simply reverted to what they considered "tried and true," without questioning the true part. They didn't seem worried about their prospects, though. Vladimir (another Vladimir, not my partner) said that one mailing list he subscribes to recently increased from 2 or 3 help wanted ads per month to 50+. So, it sounds like the economy really is picking up, even if some companies are still feeling the pain.

Wednesday, April 28, 2004

Don’t Refactor and Enhance at the Same Time

Last night at my "Introduction to Refactoring" presentation, I received a bunch of blank stares the first few times I said that you aren’t supposed to refactor and enhance at the same time. Eventually, it dawned on me that I was being imprecise in my definition of the word "enhance." After all, refactoring is itself a form of enhancement -- you are improving the design when you refactor. So, what I meant by "enhance" is adding functionality from the user’s (customer’s) point of view. I don’t know where I picked up that terminology. Maybe it was a culture thing where I’ve been working. Do other people use the term "enhance" that way?

Anyway, the bottom line is you aren't truly doing refactoring unless
  1. you isolate the refactoring activities from the feature-adding activities,
  2. before you apply a refactoring you have an automated unit test that puts the existing functionality through its paces, and
  3. the exact same unit test runs cleanly before and after the refactoring is applied.
Note that it’s okay if the unit test has to be tweaked to conform to new method signatures and whatnot, but you can’t change anything that has to do with what the unit test is trying to prove.

Friday, April 23, 2004

The Myth of the 100-Year CD-ROM

Think your CD backups are trustworthy? Think again. According to an article on rense.com, some CDR's don't even last 2 years! What I can't figure out is if that means 2 years from the time it's burned, or from the time it's manufactured? I'm guessing the latter. How fresh is your supply of blank CDs?

Getting Hired

My friends who are about to graduate from the U.C. Irvine School of Information and Computer Science -- and anyone else looking for a programming job -- should check out Arjun Ram's blog. He has some great advice for software engineers in the job market, having recently changed jobs himself.

Saturday, April 17, 2004

CandidateMap.com

As we move closer to the 2004 presidential election, it's great to see web sites like CandidateMap.com popping up. This one is an archive of quotes from the candidates sorted by topic. For example, you can pick from 30 topics (e.g. Taxes, Drugs, Environment, Sci/Tech & Space), and then read one relavent quote from each candidate. If you haven't yet formed any opinions, this looks like a great way to get started.

Friday, April 16, 2004

"Intro to Refactoring" on Tuesday, April 27

I will be speaking on Tuesday, April 27 at 7pm in the city of Orange on the topic of refactoring. This will be at a meeting of the Orange County Delphi Users Group, although the topic has nothing to do with Delphi, per se. OCDUG meetings are free and open to the public.

If you have heard the term "refactoring" bandied about, but you're confused as to exactly what it means, you are not alone. It doesn't help that people tend to misuse it all of the time. This introduction will define what refactoring is, what it is not, when you would want to use it and why. In case you are completely in the dark, you'll find an official definition of refactoring below, but don't worry if it doesn't make sense yet. All will be made clear.

This presentation will last a little over 1 hour and include 5 specific step-by-step examples of refactoring. The examples are in Delphi, but
should be easy enough to follow along for non-Delphi programmers as well. A basic understanding of object-oriented programming is assumed (e.g. encapsulation and inheritance). Being able to read a UML class diagram will definitely help as well.

"Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external
behavior. Its heart is a series of small behavior preserving transformations. Each transformation (called a 'refactoring') does little, but a sequence of transformations can produce a significant restructuring. Since each refactoring is small, it's less likely to go wrong. The system is also kept fully working after each small refactoring, reducing the chances that a system can get seriously broken during the restructuring." -- From www.refactoring.com

The OCDUG meetings are held at Red Brick Software, 1301 East Lincoln Avenue, Orange, CA 92865. [Directions]

User Interfaces for Infrequent Tasks

Software DesignParaphrasing an article by Barbara Nelson of Pragmatic Marketing, good software may very well be complex, but that complexity needs to be hidden from the user as much as possible. Nelson cites Intuit’s Quicken as a prime example. "They learned what regular people needed by spending time in people's homes, watching how they managed their home finances. Quicken was the first finance package to use the checkbook metaphor, something regular people already understood. Quicken was hugely successful, and even with dozens of competitors, managed to gain 75% market-share because it was easier to use. It was the first product to take a customer-oriented view instead of a data-centric view."

One way to hide complexity is through a guided UI (a.k.a. a wizard or an interview). A common misconception is that a wizard makes a good UI for novices, when in fact they are more properly employed to address infrequent tasks, and should have nothing to do with whether or not the user is a novice. Novices aren't novices for very long (when performing a frequent task). Writing a guided UI for a frequent task is bad, because it eventually bogs the user down. On the other hand, a guided UI is perfect for an infrequent task, especially a complicated, critical, or finicky one, no matter whether the user is generally regarded as a novice, intermediate, or advanced. You might say that when it comes to infrequent tasks, every user is always a novice.

Monday, April 05, 2004

Outsourcing Battle is a Red Herring

On Firday, Slashdot cited an article entitled "How India is Saving Capitalism" that sparked yet another argument pitting capitalism against patriotism. This kind of battle over outsourcing is a red herring. Executives who outsource to save money are failing to see the big picture, and anyone who chooses to fight on that battleground is wasting his time and contributes nothing towards "winning the war."

These executives keep asking the wrong question, "How can I continue to develop the same old crappy software, but do it cheaper?" They ought to be asking, "How can I develop better software?" "How can I develop it faster?" "How can I make it last longer and be more useful?" By improving the quality of their software it'll be more desirable. It'll draw more customers and can demand higher prices. Answering these questions can lead to a 100-fold improvement on the ROI versus any kind of cost-saving measure.

As an added bonus, better software is, well, better. If you want to talk about morality, let's talk about how much better our society will be when the software we use provides more intuitive user interfaces, adapts more easily to our needs, offers increased security, and performs faster.

The sad part is that the answers to these questions are right in front of our faces. All we have to do is open our eyes. The 'Net is a free, all-you-can eat buffet of best practices, high performance/high security open source frameworks, feature rich open source tools, design pattern catalogs, refactoring catalogs, ... you name it.

If you really want to keep the programming jobs at home, then quit sniveling and do something to make yourself and your fellow programmers more valuable. Pick one thing and explore it. Read up on a management methodology like XP, RUP, or Scrum. Or, become familiar with a tool like Eclipse. Or, try out the unit-testing framework that goes with your language of choice. Or, otherwise avail yourself of the wisdom of luminaries such as the Three Amigos (UML), the Gang of Four (Design Patterns), Martin Fowler (Refactoring), and Steven McConnell (Code Complete). Apply what you learn and pass it on. It's as simple as that. (Not easy, but simple.)

Tuesday, March 30, 2004

Levels of Indirection

Smokebreak TV is responsible for the best laugh I've had in a long time. It goes like this:

A group of my coworkers in the Tucson office started a cable access show called Smokebreak TV and released their first episode last week. My friend, Vlad, a coworker with me in the local office, reviewed the episode in his blog, offering up an E-for-effort appreciation of the show and noting the potential bulldada factor. Being unfamiliar with the term, bulldada, I tried looking it up on Merriam-Webster as well as doing a "define:"-style Google search. Both turned up empty. I then tried a regular Google search on "buldada means" and got a hit on a book review that defined the term. The book in question was "Galaxy 666" by Pel Torro, which Ken DeVries called the worst science fiction novel ever written. He said that it "does for literature what Plan 9 From Outer Space did for the cinema." Reading the quoted passages is what sent me reeling. So, thanks guys. I owe you one.

Wednesday, March 24, 2004

iPod Race movie

I just discovered the iPod Race (quicktime) movie from last December. If you are an iPod user and you haven't seen it yet, you gotta check it out.

Thursday, March 18, 2004

Endo-Testing with Mock Objects

I finally paid attention to the buzz surrounding endo-testing with mock objects and read the introductory paper. I’m quite impressed with the concept and I can easily see how it’ll provide me with an easier way to unit test within complex states. I’m already convinced that test-driven development is the way to go, so I’m especially impressed with the idea that mock objects work especially well when employed as a TDD tactic.

By the way, for anyone still using Delphi, there’s a Delphi Magazine article on the subject.

Monday, March 15, 2004

You are Invited - Intro to UML & Design Patterns

I will be speaking on Tuesday, March 23 at 7pm in the city of Orange on the following topics: An introduction to UML followed by a very brief introduction to design patterns (which will, of course, be illustrated using UML diagrams). This will be at a meeting of the Orange County Delphi Users Group, although as you can see, the topics have nothing to do with Delphi, per se. OCDUG meetings are open to the public.

The Unified Modeling Language (UML) comes in multiple forms and serves many purposes. This presentation will describe UML diagramming in particular and discuss the uses for it. All 9 diagram types will be presented with an emphasis on the Class diagram. (That's the one that most people think of when you just say "UML diagram.")

Software design patterns first became popular with a book called "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (a.k.a. "The Gang of Four"). All software is designed according to patterns, whether or not the programmers realize it. This book sheds light on how patterns are used in software design and offers up a catalog of certain patterns that tend to recur in good code. Many other pattern catalogs have emerged subsequently, but the original GoF catalog is still considered the proper starting point. This presentation will cover: the general concept of patterns, the difference between patterns and idioms, and how patterns are described and catalogued. One pattern (Singleton) will be discussed in detail.

The OCDUG meetings are held at Red Brick Software, 1301 East Lincoln Avenue, Orange, CA 92865. [Directions]

Friday, March 12, 2004

Proposed Spammer Punishment


When we finally figure out how to catch and convict spammers (and virus writers), I propose that they each be punished as follows:

  1. Lop off his or her head
  2. Put the head on stake
  3. Aim a web-cam at it as a warning to all other would-be spammers

That's not too lenient, is it?

Why Anti-Spam Technology Doesn't Work

Over half of all e-mail traffic is SPAM these days, and it's getting worse, costing businesses $20 billion a year in lost productivity. Most of it originates from a handful of organized spamming groups that the authorities are unable to do anything about because of ineffective laws. In the mean time, a number of technological solutions are being used/proposed, but, as this terrific article (and part 2 of 2) shows, none of them (will) work. What a mess! I sure hope somebody finds a way to deal with this soon.

Wednesday, February 25, 2004

Borland? Or Bore-bland?

I was at the Orange County Delphi User Group Meeting last night. It was a special meeting because John Kaster flew all the way down from Scots Valley with a promise to tell us "all the reasons why we should make Delphi 8 part of our .NET plans," according to the e-mail advertisement. I guess that's a popular subject these days since this meeting had the largest attendance I’ve seen in years. Too bad Kaster couldn’t deliver the goods.

I should mention that I was 10 minutes late, so I can’t speak to the very start of the meeting. When I arrived, Kaster was winding down from some introductory remarks about how Borland is repositioning itself as the "whole development lifecycle" company (or something like that) -- complete with an epiphany-inspiring puzzle piece logo that's sure to change my life forever.

Kaster then turned the floor over to two of his colleagues in the Starteam division (which is still located here in OC). They proceeded to bore us to death for almost an hour. Try as I might, I couldn't figure out why they were even up there. This had nothing to do with either Delphi or .NET. At first, I thought maybe they were leading up to some news about Starteam, but my anticipation faded fast when they started droning on with a demo of how to set up a Starteam project. Talk about old news! As a longtime Starteam user, I can attest that there was not one scintilla of information less than 3 years old. Maybe it was because of my seat in the back of the room -- one of those folding chairs with an attached writing desk -- but I could swear I was back in high school and had been sentenced to detention.

When they got to Q&A, I decided to throw them a bone. In keeping with their development lifecycle theme, I asked about how well Starteam integrates with their requirements tracking tool, Caliber RM. "For example," I asked. "Say a project manager is looking through the bugs that have been reported as change requests in Starteam and decides that a few of them should really be treated as feature requests for the next version. What facilities are there for converting such bug reports into Caliber requirements?" The answer I got was really convoluted, but what I think I heard was essentially "Ctrl-X/Ctrl-V." Am I missing something? How does the self-proclaimed thought leader in development environment integration expect to thrive by selling us bundled products that don’t integrate?

Needless to say, by the time Kaster got back in front of the projector and started to actually talk about Delphi 8, I was numb. I made a valiant effort to follow along and understand what big things Delphi 8 brings to the .NET table, but I didn’t see any. All I saw was Microsoft finger-pointing and all I heard was more old news: "Live data at design time this" and "still not quite drag-and-drop form design that." Ho, hum. By 8:45 I was counting the minutes until the meeting ended, hoping to salvage what was left of the evening with one of our famous parking-lot “after-meetings.” But the meeting ran long and there was still no end in sight, so I bolted.

Monday, February 23, 2004

Contact Management Software for Job Seekers

I'm on a quest to find a good, inexpensive contact management software package to recommend to jobseekers. ACT and Goldmine are way too expensive at $500 a pop. So far, the closest I've seen is one that my friend, Vladimir, just discovered. It's the QuickBooks Customer Manager for $80. It's a version 1.0 product, so the feature set is lacking, but the basics are there. [See the CNET Review] I especially like the way it manages links between names and companies. You can associate several individuals with a company/organization and quickly jump between them. For example, I can click on my employer and see a list of all of my coworkers (that I’ve entered), and from their click on myself. My record, in turn, shows that I'm associated with my employer (of course) as well as the School of Information and Computer Science at U.C. Irvine. If I click on that link, it'll show me all of the other people that are associated with the ICS School (i.e. my fellow alumni, current faculty, and whomever else I'm tracking as such). In that regard, it's very much like the genealogy software I use. My biggest complaint is that the searching capability is severely limited. For example, you cannot search within the text fields of the notes, the call logs, or the e-mails that are associated with people. Don't get me wrong, this is better than trying to use Outlook alone as a contact manager, and I'll probably stick with it and hope that a search feature is forthcoming. In the mean time, if anyone out there knows of a better alternative, preferably an open-source one, I'll all ears.

Wednesday, February 18, 2004

Computer Science Careers

It's career night at U.C. Irvine again and I've been asked to participate on a panel discussion with some fellow alumni. Here are a few references that I plan on mentioning:
  • Joel Spolsky of Fog Creek Software is outspoken on many aspects of software craftsmanship. His site includes a pretty good forum discussion on questions to ask the employer during an interview. Be sure to check out Igor K's contribution at the end entitled, "How to research the company," as well as Ged Byrne's great list of questions such as "Do you fix bugs before writing new code?" and "Can you make a build in one step?"
  • Right Management Consultants do a fantastic job running outplacement seminars and otherwise helping people to boost their careers.
  • Software Development magazine is always a must read. Among the technical articles you will usually find one or two per month concerning software careers (salary surveys, outsourcing issues, résumé writing, etc.)

Tuesday, February 17, 2004

Can We At Least Agree on What "Agree" Means?

Like the good citizen that I am, I decided to read up on proposition 56 in my California voter’s guide to get my facts straight. (In case you are not from CA, prop 56 is a constitutional ammedment that would make it even easier for our legislature to tax us to death by reducing the vote needed to pass a spending bill from a 2/3 majority to only 55%.) On page 11 of the guide, there’s a "Fiscal Effects" analysis prepared by some unnamed Legislative Analyst in the Attorney General’s office which includes this statement: "This proposition, by reducing the number of votes needed to pass budget-related bills, would make it easier for the legislature to agree on these measures." [Emphasis mine.]

Shouldn’t that be “disagree?” I don’t know where this guy studied math, but I was taught that when there is a 55-45 split of opinon, that means there is LESS agreement among the parties than with a 67-33 split, not more. Prop 56 would certainly make it easier to get a spending bill to pass, but it would be in spite of disagreement among the legislators, not because they suddenly agree.

Monday, February 16, 2004

The Reasonable Man

"The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man." ~ George Bernard Shaw

Wednesday, February 11, 2004

Brainstorming and Pair-Programming

While Vladimir Drndarski and I were pair-programming today, the following conversation ensued:

Vlad: "That's a bad design."
Craig: "Only because we are testing it."

I'll leave the circumstances to your imagination, although I assure you that I was serious at first, before I realized the absurdity of what I had said. Well, we both cracked up. Then, needless to say, we changed our tack. Chalk up another victory for pair-programming.

On a related note, Jim Powell, a colleague of mine, gave a presentation yesterday about brainstorming techniques. For example, he talked about how an initial pool of ideas can be built up in the generation phase by pushing the boundaries, piggy-backing on the previous ideas, and inverting or negating the previous ideas. (More on that in a moment.) Afterwards, it occurred to me that one of the reasons pair-programming works so well is that it basically amounts to an endless stream of mini-brainstorms between the two partners. I don’t have any objective proof, but I swear that whenever I pair with someone, we’ll write code that is easily 3-4 times tighter and cleaner that if I had written it alone. I'm sure the brainstorming aspect has a lot to do with why.

Regarding idea generation via negation, I will never forget the first time I tried it. I was using a technique called “20 Answers” which is essentially a way to do a brainstorm single-handedly. I started with a blank piece of paper and wrote my question at the top, “How can I get this bleepin’ report-printing framework to fill in the calculated totals I need on the cover sheet at the beginning of the report, even though the figures to be totaled haven’t been processed yet?” (That was back in my C/PM days, and the tool I was using didn’t know how to make a preview pass when generating a report.) Some of the possible answers that immediately came to mind were:

1. Somehow pre-calculate the totals
2. Write a post-processor to fix up the cover page
3. Bypass the framework and write the whole report in Print statements

But they were obviously too complicated. So, I loosened the constraints and brainstormed some more...

8. Find another framework and rewrite the whole app
9. Write my own framework from scratch

Of course, those were even more complicated. Eventually, I started getting really silly and downright contrarian. I thought to myself, what if I don’t try to answer the question at all? Or that I only answer part of the question? That generated a few more possibilities...

15. Perhaps I could convince the customer that they don’t really need the totals on the cover sheet?
16. Perhaps they’d settle for a summary page at the end instead of a cover sheet in front?

And then it finally hit me. Who says the cover sheet has to actually come out of the printer first? Thus:

19. Print a summary sheet at the end that looks like a cover page and have the clerk move that page to the front before mailing the report.

Walla! I had struggled with that problem for a few days before I brought out the "big guns" and went through the 20-Answers exercise. It’s true what they say about the power of getting things down on paper to stop the mental "looping." But disciplined brainstorming like that isn’t something that comes naturally to a single individual, at least not to me. When I’m pairing, however, it does happen naturally -- and constantly. It's just part of the conversation.

I’ve been pair-programming on and off for a few years now, and the more I practice it, the better my work gets. What’s your experience? Write me.

Thursday, January 22, 2004

Republic Day

"Happiness is when what you think, what you say, and what you do are in harmony." ~~ Mahatma Gandhi (1869 - 1948)

This Sunday evening it'll be Monday morning in India where they will be celebrating Republic Day. Last August I had the opportunity to experience life in India first hand. It is a land of wild extremes -- big business cheek to jowl with abject poverty, fabulous art and architecture surrounded by squalor, and ancient icons of culture and religion upstaged by garish billboards and cell phone transceivers, just to name three. Even though I was warned to expect this, the reality is never quite like you imagine. My biggest surprise, however, was of the pleasant sort -- finding out just how friendly the people are. I guess nobody thought to warn me about that. Other than the street beggars (who I must say were really annoying), I didn’t meet a single unpleasant person during my entire stay in India. Indeed, almost everyone went out of his or her way to help me, to explain things to me, and to otherwise just wish me well.

So, to my friends in Mumbai and Bangalore, may you have an outstanding Republic Day. I hope it finds you healthy and happy.

Wednesday, January 21, 2004

Inane E-Mail Footers

I don’t know what’s worse, those inane e-mail footers that go "Attention: This message is intended only for the individual to whom it is addressed, blah, blah, blah," or the fact that they come attached to everything from I’m-on-vacation auto responses to chain letter emails that promise years of bad luck if you don’t immediately forward it to 50 strangers. Not only are those footers pointless, they’re often incorrect. (For example, say that you accidentally send an e-mail to the wrong person because your mouse wiggles while you are trying to pick John Doe out of your address book and you get Jack Doe instead. Off it goes, to the "individual to whom it is addressed," but NOT to the person that was intended.)

If adding such verbiage to e-mails was ever effective, that effectiveness has got to be diluted 1,000 fold by now. Remember those 2 questions the airport attendants had to ask us about whether or not we packed our own luggage? After 7 years, the FAA finally quit making them ask us, because there wasn’t a single time when it did any good. I’ve never heard of those e-mail disclaimers doing anyone any good, either. Isn’t about time we stop cluttering up each other’s in-boxes with them?

Monday, January 19, 2004

A Brave New World Wide Web

"We don’t know what the web is for but we’ve adopted it faster than any technology since fire." -- David Weinberger (co-author), The Cluetrain Manifesto: The End of Business as Usual, 2000

According to Cluetrain, the magic of the Internet is that we are all finding our voices and communicating directly with each other. According to a Harris Interactive poll, 69% of American adults were users of the Internet in 2003 (as opposed to just 9% in 1995). What are these 146 million people talking about? Everything. We’re comparing notes and sharing first-hand knowledge. Cluetrain co-author Christopher Locke calls the Net "a powerful multiplier for intellectual capital." We are talking on many levels in many roles. We are doing it instantaneously and without filters.

One of the ways we are communicating is consumer-to-consumer. I probably don’t need to tell you the worth of reviews posted to www.amazon.com and www.epinions.com. You may have even found one valuable enough that you wanted to "pay it forward" by posting a review of your own, right? Us consumers collectively know more about any given product than the manufacturer does. After all, we have the company’s employees drastically outnumbered. Now that we are talking directly to each other, we are rapidly becoming a force to be reckoned with. Companies that decide to listen and join in on the conversation with an open and honest attitude will keep our business. Companies that don’t won’t.

One of the first causalities of this Brave New World Wide Web are monolithic computer software companies that don’t know how to give their customer’s what they really want. Enter open source software. Check out the first four winners of the newly announced Open Source Awards. Whether or not you find those projects to be useful, personally, you will certainly find it interesting to see the motivation behind their existence. What do they portend? Will all software go open source? Hardly. But the ones that remain commercial will have to be just as adaptable in their own way.

Thursday, January 15, 2004

TextPad (shareware) Keeps Getting Better and Better

There is a fabulous shareware text editor called TextPad. We have a site license for it at work and everyone uses it all of the time. Some of the more interesting features recently added (in 4.6 and 4.7) are:
  • New features for cutting and pasting as HTML.
  • Sped up many functions, especially when dealing with huge files.
  • The Clip Library now includes a Clipboard History.
  • A new command that duplicates the active line (or paragraph).
  • Now takes advantage of the extra keys found on an Internet/Multi Media keyboard.

Wednesday, January 14, 2004

"Tae-Bo Flex" DVD is Inflexible

The Tae-Bo concept is wonderful, but Billy Blanks' Tae-Bo Flex is the worst sequel to come along since The Scorpion King. It's a major step down from the classic Tae-Bo VHS tapes I bought 4 years ago. First of all, I have to question if the "flex" aspect of the workout really does any good. I'm no expert, but just standing on one foot and holding a pose doesn't seem to be useful either from an aerobic or anaerobic perspective. But, whether or not the content is worthy, the presentation of it certainly leaves a lot to be desired. Billy Blanks' performance was pathetic. He kept screwing up his lines and had to be corrected by his assistant. This is clearly something that they whipped out in one take with few rehearsals, if any.

And then there's the brain-dead formatting. This production of Goodtimes Entertainment doesn't even take advantage of the fundamental features of a DVD! There is only one item on the menu: "Play." What's the point of that? It may as well just start playing. Better yet, how about a few more menu choices, like scene selection. Hello?! The 45 minute program isn't broken down into chapters at all, so the Skip Ahead button doesn't work. (You can't even use the Skip Back button to restart at the beginning.) This is supposed to be a DVD that we'll wear out watching over and over, yet they expect us to sit through the introduction every time. If it were up to me, I would have put in at least 4 chapter breaks: intro, warm-up, workout, cool-down, and credits. ( I don't need to be reminded how to warm up, and would rather do that while watching CNN, then skip straight to the workout.)

I bought Flex in a 3-pack with Flex Express and Cardio. Cardio isn't as bad content-wise, but it's not compelling either, and it still suffers the same poor production quality.

Tuesday, January 13, 2004

Unfinished Projects = Costly Excess Inventory

Speaking of Mary Poppendieck (see below), the Feb '04 issue of Software Development magazine carries a great article about measuring the maturity of a software development organization -- specifically why assessments are better than certification. In it, Poppendieck mentions another of the 7 wastes of manufacturing, excess inventory, and how it maps to software development. "The level of inventory in your system is the amount of stuff you have under development. The more inventory of unfinished development work you have sitting around, the greater you're at risk of it becoming obsolete, getting lost and hiding defects. If you capitalized it, you also bear the risk of having to write it off if it doesn't work." This is the focal point of her analysis of why Dell succeeded in putting Zeos out of business. Zeos was named as a finalist for the Malcolm Baldridge National Quality Award (which would be the equivalent of a CMM Level 5 certification for us software developers). Yet, all of the so called quality-producing “capability” enshrined in the Zeos procedure manuals couldn't hold a candle to Dell's simple 2-pronged vision of keeping inventory to a minimum and delivering product to the customers as quickly as possible.

Monday, January 12, 2004

Mary Poppendieck on "Lean Software Development"

During my discussion with Gloria Mark last Thursday about multitasking work habits (see below), I mentioned a concept I learned from one of Mary Poppendieck's lectures at the Software Development West 2003 conference. The lecture was from her new book, Lean Software Development: An Agile Toolkit. In a nutshell, the book takes a whole slew of best practices that have been used in manufacturing for decades (collectively known as "lean manufacuring"), and applies them to software development. In chapter 1, Poppendieck introduces us to the "7 wastes of manufacturing" and proposes a way to map each of them to software development. One of these wastes is extraneous movement (e.g. when a tool crib is too far away from the position on the assembly line where the tools are often used), and Poppendieck likens it to extraneous task-switching on the part of a software developer. Every time a developer has to "ramp up" and "ramp down," she says, it's a sunk cost. I think it's quite interesting, therefore, that Professor Mark's research shows that Poppendieck is fighting an uphill battle on this front, since everyone's natural tendency is to switch tasks often.

Friday, January 09, 2004

Multitasking Madness

I was at a reception last night for the UC Irvine School of Information and Computer Sciences (www.ics.uci.edu) and had the opportunity to chat with many of the professors there who are doing fascinating research. Gloria Mark told me about some work her student, Victor M. González, is doing to study the work habits of software developers, software architects, and software managers. He's found that the average person naturally juggles 11 different tasks at one time and switches between them every 4-1/2 minutes (not counting time in meetings). It's too early for any conclusions, but I'll be interested to see what recomendations they make in the way of new tools and such that bow to the inevitible and support this behavior, perhaps even allowing us to juggle more.