Sunday, June 7, 2009

Idle wondering

How much overlap is there between the folks who want to put the proverbial stake through the heart of "antiquated" software like Windows XP or Internet Explorer 6 and those who are celebrating the 25th anniversary of Tetris this week? Just askin'...

Saturday, June 6, 2009

Progress for breakfast

It's June in Wisconsin, which means that approximately 1/4 of the state's smaller cities are hosting their annual "Dairy Days" celebration this weekend. My husband and I made our first appearance at the Vernon County pancake breakfast, on the invitation of our "landlady," meaning the lady wife of the (theoretically) semi-retired farmer (we all know how that story goes...) who graciously allows us to keep our hives on their property.

Despite the cold wind driving the colder rain, they were packing 'em in to the huge tents. Five smacks bought you pancakes (naturally), sausages, fresh yogurt, orange juice, milk, cheese curds, string cheese, and coffee. (Aside to non-Wisconsinites: Cheese and coffee is a perfectly acceptable breakfast combination, yo.) The polka band was in full swing onstage, despite the rudeness of the weather. (Or maybe they just felt the need to keep the blood moving--can't say as I blame them.) A couple of young ladies in tiaras were making the rounds, and no doubt the local politicos and other movers and shakers were doing the same.

Normally, the sense of timelessness in the community pancake breakfast or county fair or ice cream social or what-have-you sort of awes me. Something about those gatherings unchains the sense of the years' flow, of the interlocking of generations. But this breakfast was different for one simple reason: Nearly everything on my plate or in my cup was organically farmed. Even the coffee was fair-trade, and roasted in Viroqua.

In other words, these people get it. That it's time to stop wasting our energies dreaming up ways to inflate bean counts to make this quarter's books look good. That it's ultimately more efficient do do good and do well at the same time (contrasted with the "robber baron" model of the Carnegies/Vanderbilts/Rockefellers/Morgans/et. al. trying to buy their way into Heaven after a lifetime of rapacious chicanery). And that, friends and bretheren, is the kind of shareholder value I can get behind. So you can bet that the 2010 pancake breakfast is on my calendar. Hope to see you there!

Friday, June 5, 2009

Frivolous Friday, 06.05.2009: Murphy's Law for Programmers

Just a small sample of the law's sub-clauses:
  1. If your boss bought the office a book about it, it's already obsolete.
  2. The backup tape you need the most is the one that's corrupted.
  3. Hard drive crashes will occur immediately before a major source commit rather than immediately afterward.
  4. The "WTF" code you just ranted about in front of your teammates will always turn out to be your own.
  5. Bugs resulting from weekend rollouts lie dormant until Monday morning.
  6. Any user granted the power to screw up data will.
  7. Your duct-taped-together proof-of-concept demo. will be in production faster than you can say "Screenshot for a Marketing Power Point slide."
  8. ... and you won't be informed until it corrupts the second client's production data with values you hard-coded for the first client.
  9. There is a strong relationship between a salesperson's technical ignorance and her/his pretensions to software design.
  10. Impending release dates are merely evolution's way of culling robust and forward-thinking features from the weak and sickly herd.
  11. You say, "It looks like we'll make the target date." The Powers That Be hear: "We have time to add features."
  12. No feature/fix should ever take very long...so far as the person delegating it is concerned.
  13. Documenting code is not the same thing as writing code, and thus must be considered a drag on your productivity.
  14. There is a direct correlation between the importance of an infrastructure/design/security/etc. decision and the amount of effort put into avoiding it.
  15. Ultimately, these decisions will be made by the person or committee that possesses the least relevant information.
  16. Management's favorite method for introducing new technologies is to hire someone who knows bupkis about your legacy infrastructure, but is beady-eyed and slavering over the latest programming fad.
  17. The most promising result for your esoteric Google search was copyrighted five years ago, or links to Experts-Exchange.
  18. The people responsible for your code's dependencies will always be too busy working on something else to fix the bugs you found.
  19. The "cowboy" programmer with no consistency in style is actually "sourcing" code from the internet. This person will invariably be hailed as a miracle-working "genius."
  20. The Richter-scale-registering sneeze will only come when your finger is on the F5 key. And you're logged into the production database.

Thursday, June 4, 2009

Software and "the elevator pitch"

Lest anyone think that I prefer to trash-talk about open source and free software, here's something that applies equally--if not more so--to their proprietary cousin. In marketing, there's something called an "elevator pitch," which means a description of your product or service short enough to relate to a potential client in the course of a (short) elevator ride. If the client doesn't understand what, exactly, it is that you can do for them by the time the door opens at her/his floor, the pitch fails.

In my previous job, my company signed up for a developer partnership program with Microsoft. Which basically meant that they sent us a copy of darned near every bit of software they make. Or at least it sure seemed like it. And in case that wasn't enough encouragement for us to peddle their dope to our customers, we were also sent marketing materials. Let's just say that it was awfully tempting to take up skeet-shooting as box after box of CDs piled up in my office. Or--better still--to hang the shiny silver disks by fish line from the ceiling tiles, add multi-colored and ultraviolet lights, and redecorate in a disco theme. (Which, in retrospect, could have been really cool. For about a day.)

What made the whole thing so darned ridiculous, however, was the fact that I didn't know what even half the stuff was supposed to do. BizTalk Server. Commerce Server. SharePoint Server. Looking at Microsoft's current list of "server" offerings, those three look familiar. I can probably make educated, if somewhat vague, guesses at what these might do. But others? Antigen. Expression. Azure Services Platform. There's absolutely no way of knowing what you're supposed to accomplish by using them without further information. And that species of information, let me assure you, was not included in the heaps of prettily-packaged CDs. (Sometimes, without reading the fine print, I couldn't be sure that the CD in my hand was the actual software or its talking-points.)

Even for the deep pockets of Microsoft, that's a considerable waste of money--assuming that this program is still in force. Because not supplying the "what's in it for me?" kind of information is like neglecting to build the last ten feet of a bridge: It doesn't matter how much has already been invested, because it's useless. The two sides are not connecting--i.e. no communication is taking place. Why? Because mailing a box of digital mulligan stew cannot be dignified with the term communication. Most especially in what's allegedly a "partnership."

True, I can look up each software product/suite and have a reasonable chance of concluding whether it could A.) Lower our costs and/or B.) Increase our revenues. (And, in fairness to Microsoft, they seem to have improved their ability to summarize a product without competing for the gold in the Buzzword Bingo Olympics.) But at that point, Microsoft switching from "push" to "pull," just doesn't make sense. It's like trying to reel in the fish before you've set the hook. If I can't zen the value in what's being dangled in front of me (preferably in the equivalent of an elevator ride), why wouldn't I just swim on by?

I probably bang on about this too much, yet I can still find too many examples of the understanding gap between the people who make the software and the people it's intended to serve. Software companies throw so much money at the programming side and the marketing side, but the "bridge" so often seems to be left to build itself.

Wednesday, June 3, 2009

Last night's leftovers

Last night, I came home determined to make forward traction on re-writing a (Java) Swing form to that it is created (with a variable number of fields) on-the-fly based on an XML file. The idea is that the .class file would not have to be regenerated, re-JARed, and re-distributed as the underlying platform evolves. Only fixes (and of course the XML file) would need to be downloaded. That's what I'm trying to achieve in the proof-of-concept anyway.

The roadblock is my complete lack of experience parsing XML in Java--coupled with the fact that I haven't paid attention to that technology niche in many years. The decision to choose a DOM-based model vs. and event-driven model was pretty straightforward. Which means Xerces. Okay, great. I know that I can get download that from Apache--should be a no-brainer. But then I see it mentioned--in passing--that oh, by the way, that's been "bundled" with Java for the last couple of versions at least.

And that's where the annoyance really blossomed. I checked the 1.6 APIs, and those packages are mainly composed of interfaces, rather than classes. Interfaces, in Object-Oriented terminology, an interface is merely a pattern. You (or someone else) has to supply the actual cloth--i.e. the code--to make anything useful. Java Database Connectivity (JDBC) is quite similar in its preponderance of interfaces to classes. But the deal there is that you need a separate piece of code (known as the JDBC "driver") to actually work with a database. Which made me wonder whether I wasn't being misinformed. So there was some time wasted sorting that out.

Once it was established that yes, you could somehow parse XML in Java using Xerces without having to download anything extra (unless you absolutely must have the bleeding-edge version), it next became a question of where the heck do I look for it. Rather than pile everything including the proverbial kitchen sink into one steaming pile o' bytes, Sun--the folks who make the leading Java brand--splits the "extra" features off into separate files. Thees are called JAR (which stands for Java ARchive) files. However, knowing which JAR holds the code you need is the issue. Some--if not most--software development programs install with the bare-bones JARs, however, and you have to manually add in any extras. That was the second, and--as it turns out--the most time-wasting issue.

Because, frankly, trying to find this rubber-meets-road information suuuuuucks. You'd think that the people who invest such sweat into the code they want others to use would put a small fraction of that effort into making installation painless. But nooooo. At least not if half a dozen different Google searches can be counted as evidence of that.

I've forgotten where I read the usability adage, "If you can't click it after three beers, it's too small." But that makes a wonderful baseline for the usability of software in general. And I likewise think that if you can't find the software you want to install in fifteen minutes or less, is it really worth your time? And from the side of the software purveyor--free or not--do you really want your developer's first experience with your product to be one of frustration?

Tuesday, June 2, 2009

Writing and management

If you want people to do things "your" way, it is your responsibility to ensure that absolutely no one misunderstands
  • What needs to be done
  • Who needs to do it
  • How--and, if applicable. where--it should optimally be done
  • When it's due
  • Why it needs to be done at all.
No excuses. You could learn that to pass an English class: Surely you can learn it when your management job depends on it.

That's all that really needs saying, I guess.

Monday, June 1, 2009

An odd contradiction

The office where I work (during the day, anyhow) sits atop a lighting/furniture store. The proprietors maintain a public restroom, and don't waste the real estate in any marketing sense. The mirror and mirror's lighting are regularly replaced and--like Minnie Pearl's trademark hat--they bear price tags. I availed myself of the facilities tonight when I realized that I had arrived downstairs before my husband was there to meet me. I don't recall the coat stand in the corner of the restroom having been there the last time I checked, but I had opportunity to appraise it (and its price tag)--by mere coincidence of placement, no doubt.

From a functional standpoint, I can understand why the coat stand uses so much faux wrought iron on the base which doubles as an umbrella stand: The mass lowers it center of gravity and thus makes it more stable. However, the problem is that I can't remember owning a "full-size" umbrella since...well...it was clear plastic and had Disney characters on it. That would have been about 1971 or 1972, and Mom's side of the family still called them "bumbershoots." I remember how thrilled I was to have a prop with which to "play grown-up"...until I opened it once, and pinched my finger but good: I was leery of umbrellas for years afterward--seriously. Which I suppose makes me a tad biased on the virtues of full-size umbrellas. And I can't recall seeing too many umbrellas that aren't double-jointed nowadays. So I surmise that the design is a deliberate throwback to the days of parasols and walking sticks.

From the window shopping I do on my way up to work, much of the furniture for sale has a decidedly "antique" bent, in style and/or fake weathering. "Antique" projects the air of stability--i.e. we have roots in this place--as well as the ability to recognize quality/craftsmanship--because we all know that no one makes anything like they used to--and the security in the correctness of one's taste necessary to defy the tyranny of fashion.

All of which, when you noodle it, is almost exactly 180 degrees off our attitude toward the gadgetry we like to flash. In that case, Heaven forfend that our toys be even one-point-nine-nine-nine-nine-etc. (Although, in fairness, there is more than a little "retro" cachet to the Commodore 64. But that's only in certain circles, none of which can be called "mainstream.")

Tonight's drive (or in my case today, ride) to the beehives that needed to be checked and re-arranged is a half-hour one way. So there was time to turn over that contrast in my head. Yet, despite that, I can't quite reconcile the dichotomy of those two value-systems. For all I know, Hegel himself might not be up to synthesizing this dialectic. Nevertheless, I think it's an interesting commentary on what people do with their disposable income. Particularly when they think that other people care.