Sunday, October 31, 2010

"The right tools for the right job"

Dennis is readying a test for the students in his Java class today, so I volunteered to prep the pumpkins for carving to buy him a bit more time. Which is to say that I had ample time to reflect on the value of proper tools Even the El Cheapo plastic pumpkin-carving kits, with the trapezoidal spoons and the tiny saw-like knives, are a bona-fide revolutionary improvement than the serving spoons and ultra-sharp paring knives that did the job in my younger days. There's just no comparison.

"Where were these things when I was growing up?!" I demanded semi-rhetorically. "Awww, c'mon," retorted Dennis facetiously, "You can take your chances with cutting your fingers off like everyone else."

Good point. I'd been thinking merely of time and irritation saved. But providing the best available toolsets can have other (beneficial) consequences even beyond these. Trust the engineer-turned-programmer to appreciate that even more keenly than the writer-turned-programmer.

Saturday, October 30, 2010

w00t for a genius next door

About ten years ago, Dennis signed us both up for a three-day beekeeping course through the University of Minnesota. The lead instructor was Dr. Marla Spivak (trading fours with the ineffably easy-going, down-to-earth Gary Reuter). It was an experience where I swear I could feel the synapses connecting in my brain. (Even the Saturday night "mixer" that involved tasting honey from around the word--literally!--was almost worth the price of admission all by itself.)

So Dennis--again, ahead of the curve--was flipping through the current Bee Culture today, and shouted out that Dr. Spivak had received a substantial grant from the MacArthur Foundation as one of its 2010 Fellows. (If you want to see how absolutely beast this lady is, watch this, and now she's confidently handling bees without gloves. Me, I'm still too much of a coward for that, even in my 8th year as a bee "hoomin.")

But, my fascination with these six-legged beauties aside, I personally think that the MacArthur Foundation made a particularly prescient choice in Dr. Spivak (and, by extension, the U of M team). Namely because it represents a tidal shift in thinking. See, business--agribusiness or otherwise--has the bad habit of chasing the fabled "silver bullet." Meaning, the latest pesticide or methodology or wonder drug...or whatever hand-wavy assumption of "innovation" fiats away the walls of any corner into which we have painted ourselves. Thus, encouraging a multi-pronged attack on a problem--with the balanced, even nuanced perspective that implies--is a huge deal. We need so much more of that kind of thinking.

And so, as I want to congratulate a person whom I consider a force of nature (and I do not use that phrase lightly), some congratulations are also due to the MacArthur Foundation itself for--I like to believe--nudging the business of problem-solving forward.

Friday, October 29, 2010

Frivolous Friday, 10.29.2010: All nerdery is created equal

Uh-oh: Lately it's been more difficult to repress a passion for costuming that dates back to my teens. And the fact that it's Halloween weekend doesn't help. Thus it was that I found myself gratuitously volunteering pointers for the next incarnation of a co-worker's feudal Japanese garb (which didn't need that many, by the bye).

Worse than turning one an insufferable bore/boor, there's a point where a passion for any niche of esoterica crosses over into snobbery. Sadly, my mail's been delivered to the "snobbery" zip code for many, many years. Mere still photos from "historical" fare like The Tudors series make me want to curl up in the fetal position and whimper. Worse, when something like the Patrick Bergin / Uma Thurman cover of Robin Hood actually puts some effort into it, I tend to lose track of the plot because I'm too busy freaking out over the fact that nobody's cheesing it out in green tights.

Yet, I don't imagine that such nerdery is unique to costuming. Case in point: Three friends and I were hanging out, watching Indiana Jones and the Last Crusade. Friend #1 used to collect WWII memorabilia--to the point where he schooled a History prof. by bringing in an Afrikacorps uniform to settle a debate. Friend #2 was your basic SCA jock back then...now he's Baron Basic SCA Jock, thank you very much. And Friend #3 was a pocket-protector-wearing engineer. Commentary on the movie included the following critiques:

Me: That is *not* a 12th century script!

WWII Memorabilia Collector: They got the insignia on his uniform all wrong!

Basic SCA Jock: Do you know how much that sword would be worth today?

Pocket-protector-wearing Engineer: Look--there's a hex. nut in the bottom of The Holy Grail!

I rest my case.

Thursday, October 28, 2010

Real vocabulary vs. alphabet soup

The office Sys Admin. & I have been joined at the hip lately, trying to migrate a web application to its new home--all as gently as possible. The rough edge handed to the users, through me, is a change in process--or, rather, the addition of features that will ultimately make more work for them. They are less happy about it even than I, who have very little sandpaper with which to smooth it. But none of us has a choice in the matter: Mandates are mandates.

I mentioned something of this to Sys. Admin., and he looked frankly incredulous: "You mean none of the stakeholders has had anything to say about it?" he asked. In so many words, anyway--but one of them was definitely "stakeholder."

Now geeks in general, but in particular admins. and programmers, live more literally by letters than numbers, and the accusations of swimming in alphabet soup are more than justified. So when Sys. Admin. used the term "stakeholder" a few times--and regale me with a horror story of how he'd seem similar disregard for the end-user sink an application--I couldn't help but think, "This is the type of person you want in your I/T Dept., all the way up the chain." You can't guarantee that caliber of staff plugging the highest GPAs into the most comprehensive set of troubleshooting scripts--and certainly not while chasing the lowest bid every budget cycle.

(Oh, and for anyone who might be thinking of it: You are absolutely not allowed to hire him away from us. No, really.)

Wednesday, October 27, 2010

A long-winded rationalization

A minor tug-o-war's been going on in my head since last week. The folks for whom I volunteer some programming/database-querying time needed data for grant-reporting.

The person with whom I usually work doesn't pretend to be tech-savvy, but she's contientious--which, IMO, is infinitely preferable to someone who only asks for help after they've made a complete hash of things. Because the group's free software and limited budget has trained her to make do with scouring through raw database tables for info., I am (shocking at it sounds) quite comfortable with emailing her an SQL query to run in the powder-keg of the live server.

Problem is, each query is customized to fit the moment, and after awhile the turnaround time for each data-set seems excessive, given that questions are raised during business hours and responded to (sometimes with more questions) after business hours.

But the other problem is something that's been drilled into me from various directions over the years, and that thing is that custom report writers are more dangerous than anything. Heck, we've seen what people can do with single statistics, much less an entire spreadsheet of numbers. An automated report writer is tantamount to the proverbial bottle-of-whiskey-and-a-machine-gun scenario, right?

Ultimately, though, the first commandment of software development is merely another form of the first commandment for writing: Know your users (a.k.a. audience). Mass-market software, by definition, has to define its user-audience in terms of some lowest common denominator. Accordingly, much code is written not to do the actual job at hand, but rather to minimize the possibility of screw-ups. But, on the other hand, when you know that instructions will be--gasp!--read, caveats heeded, etc., what then?

Tuesday, October 26, 2010

A retraction...sort of

So, awhile ago--January, to be specific--I griped about "over-sharing" between Microsoft Office's instant messaging ("Communicator") and its email ("Outlook"). But then "my" client hired someone whose first name is strikingly similar to that of our office's alpha-QA tester.

I suppose, in a sense, it could be considered A Good Thing that I email the client more often than the person who finds the majority of my bugs. But the downside of the upshot to that is that Outlook's taken to auto-completing with the client contact, rather than QA version of the name. Culitivating the habit of not saying in email what you wouldn't say in person isn't the worst thing you could do for your career. But the fact remains that clients typically don't need to know what's going on inside the magic software machine until there's something to demo. on the Beta server.

But the tie-in between Communicator and Outlook is such that any email address not recognized as being part of your organization is flagged with a blank white circle in lieu of the color-coded status. That's already saved me at least a few mis-directed emails already. So I thought it would be only fair to eat a heaping spoonful of my own words and give Microsoft Office credit for the color-cue that's spared my contact some "over-sharing" of a sort, and me some embarassment in the process.

Thanks, Microsoft!

Monday, October 25, 2010

The bug-proofing of a code-promoter

Oddly, the endearing trait of my second-youngest co-worker is that he sometimes treats me like I'm senile. For a few years now, he's been the keeper of an oddball batch of code that lives on its own set of oddball servers. I've never quite understood why some of it has to be that way--it's not like code has cooties, after all. But the upshot is that you don't promote changes from development all the way through production in anything we'd consider a "normal" fashion.

The upshot is that every time he sends an issue involving this oddball code to me to promote it up the food chain, he always includes all the info. I need instead of assuming I'll remember from last time. Because, sadly, I usually don't...there's enough of a time-gap between promotions to forget.

What a relief, not to have to know or remember everything about everything! It might sometimes even be worth wondering whether he's right and I am actually slipping into my dotage. ;-)

Sunday, October 24, 2010

Listening to the voices in your head

Well, a voice, anyway. Debugging is debugging, whether it involves a computer or not. Today it was the steam-cleaner for the carpet. I had measured hot water and soap into the bucket, emptied it into the cleaner's reservoir, snapped the bail on the catch-bucket, and flipped the switch into the "on" position.

Nothing.

It was plugged in. But I can never remember if it's the top or bottom electrical outlets in the living room that are controlled by the light-switch. Double-checked: Yep, I have the right one. I could check the fuses, but it's easier to plug in the lamp and make sure that works. It does.

All the while something's nagging at me that I've been here before.

It's possible that I have a defective cleaner, but there's no way it'll get into the trunk of my car, and Dennis and his truck are still probably with the bees by that point, which means cooling my heels for 45 minutes--if I'm lucky.

There's gotta be something else to this. And, on second look, there's the override switch, between the back and the handle. One finger-flick later, the whole business roars to life (and Mr. Kitty takes refuge downstairs).

Now, I'm not a fan of "gut-decisions," simply because--unless they're snap decisions or it's one of those "horse apiece" scenarios--I consider them a cop-out. But nagging little voices are another matter entirely. Your mileage may vary; I just know that, more often than not, that type of voice has something to say. It's not always correct, but giving it a hearing is important.

Saturday, October 23, 2010

Something dead trees and disk drives have in common

Tomorrow's "workout" will be a matter of lifting weights and wrestling with machines. But instead of doing this at the gym, the weights will be buckets of soapy water (alternately clean and grungy) for the rented carpet cleaning machine.

Vacuuming the living room as prelude turned out to be more of a time-consuming job than anticipated, because it meant pulling out the bookshelves. And pulling out the bookshelves meant taking out the books. And taking out the books meant actually looking at them. Which ultimately meant facing the fact that I have never, and will likely never read some of them. A few smallish stacks now sit on the floor, destined for a couple people who will value them more than I; the rest are destined for the library, the Salvation Army, Goodwill, or wherever.

And I find myself a bit chagrinned by old ambitions of and pretentions to scholarship. (Not that I'm knocking scholarship, mind you; I'll take non-fiction over fiction at least 90% of the time.) But I flatter myself that I'm a bit wiser for realizing that information that's never retrieved is a waste of space--be it shelf space or drive space.

Friday, October 22, 2010

Frivolous Friday, 10.22.2010: The Emperor's new laptop

Once upon a time, in a land suprisingly advanced (technologically speaking) for its political system, there dwelled an Emperor with a highly unsatisfactory laptop. Because, naturally, Emperors simply cannot bear to see someone with something they don't already have. And so he had installed absolutely every software program he'd ever heard of on his top-of-the-line Windows 7 laptop...with entirely predictable results.

One day, as the Emperor struggled to bring up his calendar program for the day's favor-grantings and banishings and enemy-beheadings, a flash and a puff of smoke erupted in the royal audience chamber. As the startled courtiers drew back and exclaimed in fright and amazement, a gaunt wizard in a black tunic and denim breeches strode forward and bowed low before the Emperor and Empress. "Your Majesty!" proclaimed the wizard, "I have journeyed from the Infinite Loop to offer my services in the the troublesome matter of your laptop."

To Her credit, the Empress managed not to roll Her eyes or wear a "Here we go again..." expression as Her husband leaned forward and breathlessly asked, "What have you come to offer Us, O wizard?"

"Sire, if your unworthy servant may be so bold, I posit that your trouble stems from allowing any lowly piece of software to burden your hardware--and your attention. Pray allow me to shoulder the burden of your best interests, to let you focus on the all-important business of ruling!" And, as the wizard spoke, there appeared in the air beside him a white laptop that dazzled the eyes of the assembled Court.

"Behold!" cried the wizard, "The answer for your slow, buggy user experience! And all for a price I think you'll find quite reasonable for the value." And with that, the wizard whispered a figure into the Royal Exchequer's ear. The Exchequer and the Emperor held a hurried whispered conversation while the Empress could be observed biting her tongue.

"Very well," announced the Emperor. We shall henceforth impose a tax upon the willy-nilly installation of Windows programs to pay for Our new-found simplicity. A pox upon too much choice, We say! "Yes!," echoed the assembled courtiers, "A plague upon choices!"

And so it was that the wizard paid a visit to court every several months with new (and spendy) variations on "simplicity." These the Emperor eagerly purchased and financed with new taxes and fees appropriate to the choices being removed: Taxes upon Flash players and .SWF files. Taxes upon real keyboards. Surcharges for having more than one bar on one's cellphone signal or more than one application running at any given time. Taxes on hard drives and optical drives. Steep fines for installing software not approved by the wizard. The Royal Constabulary was even authorized to issue speeding tickets to CPUs running faster than 1.6 GHz.

At long last, the wizard presented the Emperor with his masterpiece: A computer so simple it was invisible and so light it could not, in fact, be distinguished from the air itself. The Emperor of course, simply had to own it--the Exchequer's suddenly bulging eyes and apoplectic coloring notwithstanding. But, before a new tax on all computers heavier than air could be proclaimed, the Empress sweetly announced that, as the Emperor's birthday was nigh, she would finance it from Her own purse. Furthermore, she pointed out, as Her husband's computing experience could not possibly be "simplified" any further, taxes and fees should no longer be required of the populace.

At this, the wizard bade the Emperor, Empress and the court a final farewell, leaving the Emperor to rule His lands while His clerks and Chancellors chose the software best for administering them, and the Empress gratefully retired from Her tech. support duties.

And they all lived happily ever after.

Thursday, October 21, 2010

When "sustainable business models" go bad

From a global standpoint, Americans are apparently the most generous with their wallets, Canadians with their time. Major props to both countries for that. But in the American version, it's more than sad to see that supporting some charities is at least partially counter-productive. Actually, it's also hugely mind-blowing. C'mon--you can accuse Bill Gates of many things, but stupidity of ludicrous dimensions is normally not one of them. Ditto for Warren Buffet, who pledged a goodly chunk of his fortune to the Bill & Melinda Gates Foundation.

Now, I'll grant you, judging by the mailers that hit my doorstep, some (cough!) "non-profits" (cough!) seem to prefer to keep themselves in business by entrenching themselves in increasingly extreme positions. But undermining the good they're doing by subsidizing the evil they're combatting? C'mon...

Fortunately, it gives the average giver another weapon against the phone marketers employed by "charities" ranging from scammy to legit. Dennis & I already rebuff not only the proverbial lion's share of such folks, but even the hyena's share as well, simply by asking for a breakdown--in writing--of the organization's allocation of funds--meaning the percentage allocated for basically putting themselves out of business. I can't recommend that highly enough. But from now on, we will also request a copy of the investment policy.

Wednesday, October 20, 2010

The cynical side of meetings

First off, let's just establish that there are good reasons for meetings. It's just that execution matters more than intent. All-hands team meetings, for instance, can be excellent for cross-pollination, but not as an exercise in the team lead trying to fit all her/his one-on-ones into the same half-hour. Project kickoff meetings introduce the players and define the pieces of the puzzle, at least until they're subverted by glory-seeking and accountability-avoidance.

But it occurred to me this week that there's one dimension of meetings--its dirty little secret, if you will--that's never acknowledged. And that's the establishment and/or reinforcement of the organization's social order. And if you're a new programmer in particular, it's important to pay attention to that dimension if you don't want to have your time wasted by people who turn conference rooms into royal courts, star chambers, etc. Mainly because they either want to look important or busy or both.

Don't pay attention so much to who's sitting next to whom, and for pete's sake, forget the agenda and what's on the PowerPoint slides. If the person who called the meeting isn't actually in the driver's seat, that's a tip-off that things are not what they seem. Pay attention to who shows up late (and insists on rewinding the meeting to bring them up to speed), and who takes calls during the meeting. Either is a sign that you need to find an ejector seat...or at least try to sneak in some real work amid the ego-jostling. Squabbling, on the other hand, is usually a sign of progress--assuming that the squabblers are about evenly matched. Pay attention, then: You're could learn more about what makes these people tick than from months of water cooler jibber-jabber.

All things that really should be on the curriculum at Programmer School. Knowing them ten or fifteen years ago would have saved me a few (figurative) scars. Not to mention oodles of time.

Tuesday, October 19, 2010

Karma or bad optimization?

Earlier today, I found myself (at the wheel of my little green car) trailing a red sedan in a parking ramp. Before I follow up on that, I want to give red sedan's driver medium sized--if not big--ups for appreciating context. By which I mean understanding the difference between a crowded parking ramp and I-90--something that could not necessarily be said of everyone.

But red sedan--henceforth known as "RS"--was quite obviously was on the make for a parking spot a short bee-line from an entrance. The irony was, as we turned the corner more or less separating said parking lot's upper bowels from its lower ones, the prospects went from nil to nearly wide-open. I left RS to take its pick of the plummy-looking spaces at the far end and slotted little green car into the handiest stall.

Guess who was first through the building entrance? Me, actually. Why? Because the afore-mentioned "plummy" parking spaces were all reserved for patrons in wheelchairs. Thus it was that I found myself passing RC--by then moving in reverse--on my way in.

Spiritually, I suppose you can consider it just karma in action. But the geek in me prefers to consider it poor optimization. In this example, the ultimate goal in parking a car is to find the space that minimizes the amount of elapsed time between opening the car door and opening building door. The location of the parking stall is a big factor in that, true. But it's not the only factor. Just like the amount of cash you pay out during any transaction is only part of the "value" equation.

Again, props to RS's driver for not blasting through the ramp--and also for not just appropriating a wheelchair-accessible spot. Clearly s/he was also optimizing for the all-important factor of Not Being a Jerk--and that's something I certainly don't consider trivial. We need all of that we can get.

Monday, October 18, 2010

No post today

A replacement refrigerator arrives tomorrow. The triage and transfer of the loud refrigerator's contents just finished. Now comes the job of doing the resulting dishes. Hope my gentle reader's evening is considerably more interesting.

Cheers!

Sunday, October 17, 2010

From Kin to #WIN?

It feels perfectly normal to root for the underdog; what's weird is that in this case the underdog is Microsoft in the mobile phone market. And the Windows 7 phone is seems to be suprising folks in a "comeback kid" sort of way. I'm almost certain that it was a @TheMotleyFool tweet that pointed that out while called the "Windows 7" branding a "lousy" choice. At the time, I wasn't sure I agreed with the "lousy" assessment, and after thinking about it, I'm confident that it isn't a mistake.

But first some backdrop, and foremost the observation that there are still one heck of a lot of people still on XP. Partly because of Vista's reputation for bloatedness. Partly because of the nuisance (and risk) of upgrading. And partly because, at a certain point, an operating system is merely a means to an end, that end being running the programs that help pay the bills. Or, failing that, run programs that at least try to amuse you. Windows 7 looks slicker, certainly, but we're already prepping for a good deal of headache for the cutover, mainly from the standpoint of getting our old familiar programs to work on it. Speaking purely for myself, I'm figuring that the workday normally lost to workstation upgrades can safely be doubled for Win7.

So, that all being said, wouldn't it be interesting if the new phone platform served a double purpose: 1.) Rebounding from the Kin, and 2.) To introduce Windows 7 in a sleeker, sexier context than the desktop? If they pull it off, more power to them. Partly b/c XP could use a dignified retirement even more than Brett Favre. But mostly because just about any market--like politics--benefits from a strong third party.

Saturday, October 16, 2010

An effective ad placement

Dennis' vehicle is at the point where fixing what's wrong with it would cost (far) more than it's worth. So we were at a dealership this afternoon, test-driving a couple replacement candidates.

Interestingly, the vehicles' plastic floor protectors (the temporary kind the repair shop uses) were advertisements for a local credit union. At least I thought it was interesting, anyway. Namely because living in the La Crosse area for nine years seems to have greatly bolstered my immunity to print advertising. In truth, the number of billboards in La Crosse is so ridiculously high that I consider a mark against any business that subsizides that giant patchwork of eyesore. So I had to tip my hat to Westby Coop Credit Union for actually fishing for business, rather than being just another knot in the driftnet. Good job, folks.

Friday, October 15, 2010

Frivolous Friday, 10.15.2010: Bees in the bonnet

A three-way conversation at the grocery store checkout tonight made me realize how very thoroughly beekeeping demolishes your chances of being mistaken for a "normal" person 100% of the time. Not that I mind, mind you--most days I'm lucky to be mistaken for a responsible adult. But a normal middle-aged American female? Fuggedabowdid...

Here are the most obvious symptoms, at least in my case:
  • You talk to bees. As in, you stick your face six inches from the flower they're on and talk to them as if you're their mother assuring them that they're special, just like in the official Mom job description. And you don't really care who's weirded out.
  • You develop a repertoire of stock "elevator pitch" answers. Mostly to questions that have to do with Colony Collapse Disorder or whether honeybees hibernate through the winter or how honey is harvested or whether you get stung.
  • You buy sugar in ten-pound increments, and don't think to make up a lie to the question "What are you baking?" Mainly because you'd miss giving the checkout clerk and folks in line something wierd to talk about.
  • You don't diplomatically stop yourself from correcting people when they refer to yellowjackets/wasps/etc. as "bees." Particularly in the context of what a nuisance yellowjackets are.
  • You don't empty out the smoker before putting it in the back of the truck. Partly b/c it'll probably be out by the time you're home and partly to see whether anyone will notice that the vehicle seems to be on fire. (Odds are, usually not.)
  • You wake up one day and realize that you have a head full of bee esoterica that simply will not help you survive the zombie apocalypse. Which somehow doesn't stop you from talking the ears off anyone who asks you about bees.
The thing is, I'm certain that every hobby in danger of crossing over into lifestyle has its equivalents. But in my highly biased opinion, beekeeping is the kind of hobby that will leave you a better person for it.

Thursday, October 14, 2010

Output > Input

While feng shui'ing the documentation of our flagship product--per Client Services's suggestion--it occurred to me that I'd made the same error in writing as I often do while writing user interface (UI) code.

When coding, I have the tendency to obsess over validating input to avoid data being corrupted and leaving the question of UI to Those Who Know Best. In writing, I spent so much time attempting to make sure the user entering/manipulating data didn't hose it up, that getting meaningful data back out was shoved to the proverbial back burner and more or less left to scorch.

The truly pathetic part is, I started that documentation something like eight years ago, and only realized the deficiency now.

Moral of the story: Don't be me.

Wednesday, October 13, 2010

The single (new) useful thing I learned today...

...fits into one line of code. Specifically it's http://user:password@mydomain.org. It doesn't take you anywhere on the web. Technically, it's merely an example of how to provide a username and password for a Mercurial (source code) repository on a single line. Practically, it's a bit more than that, but that's not germane to the moment.

One pithy little nugget of information--the key to a lock I hadn't thought needed to be picked--is still evidence that this 1/29,256th of my statistically-expected lifespan hasn't been wasted.

Tuesday, October 12, 2010

Paying a favor forward

I probably have at least half a year's worth of StackOverflow podcasts not yet listened to. I never developed the ability to write (code or prose) while someone else is talking, and I doubt I'll ever develop it. Thus I dropped behind the times, particularly the bit where the business model of Stack Exchange (the commercial offshoot of StackOverflow) changed. The upshot was some folks found themselves due to be evicted from the question and answer forum they'd originally rented from the Stack Overlords.

That includes the folks behind the librarian cartoon Unshelved, who are now recruiting folks with karma from other StackExchange forums. A librarian friend originally introduced me to Unshelved's programmer-themed cartoon cousin Not Invented Here. I've hearted NIH since the first strip--despite being not a little freaked out at the way Desmond's penchant for Hawaiian shirts, shorts and sandals so closely matches Dennis' late-spring-to-early-autumn wardrobe.

Alas, I have no karma of that coin to offer to the cause. So I am paying forward the tip for the comic by noising about the situation in hopes that one of my gentle--and karma-wealthier--reader would kindly come to Unshelved's assistance. I think we can safely trust librarians to be generous with their wealth of knowledge (and access to the same) when given the chance, yes?

Monday, October 11, 2010

Units of measurement for programmers

For some crazy reason, I was thinking of this (highly NSFW) comic today. I'm sure it had absolutely nothing at all to do with spending pretty much the entire afternoon mucking out the code equivalent of the Augean Stables. Complete coincidence, I'm sure.

Now, I figure if you're going to resort to "colorful" language, you might at least take advantage of the entire rainbow. So rather than opting for the old standby (Hint: It involves a hard liquor and two different dances), we should probably just make it more generic: Not-safe-for-work-isms. Also, the other failing of the comic's metric is that its unit of time measurement is the minute. No offense intended to the minute, but we programmers don't care much about you these days. Nay, the second (and its variants) definitely come in first. Millisecond-based timestamps, nanoseconds, megabit-per-second upload and download speeds, and even the hipster-nerdy bogomip.

Given the above considerations, our revised units of measurement would be a number of Not-safe-for-work-isms per second, or Nsfw/s for short. We can shorten that further by simply recalling that Algebra encourages us to simplify fractions. And, lo! We have an "s" common to the numerator and denominator in our Nsfw/s fraction. Thus, our unit will be known simply as the Nfw. Hopefully its maximum value (like sine and cosine) will be one. And, still more hopefully, not very often at that.

Sunday, October 10, 2010

A thought from the No Bars Zone

The other night, I was thinking of texting Dennis to let him know about how long it would be before I expected to be done and on my way home. Problem was, my El Cheapo cellphone couldn't pick up a signal because of my location, something that usually happens in cinderbrick basement rooms, hospitals, Coon Valley, etc. So I figured I'd just call when I was out of the Dead Zone.

That's when I realized what first blogging (with comments enabled), then texting, then Facebooking, then Tweeting, then ??? has taught us about communication: Many "two-way" conversations are really one-way conversations that happen to cross each others' paths. Mind you, it's entirely possible to have synchronized mini-monologues disguised as dialogue--that's just how it sometimes works out.

But the way the conversation develops (perhaps even evolves) in the unsynchronized format is what--to my way of thinking, at least--makes it ultimately more useful. Such pauses--not an option in person, on the phone, or over chat--are opportunities to take the proverbial breath. To bite back on the sarcastic rejoinder...or to sharpen its cutting edge. To find a more diplomatic phrasing than immediacy would allow. To back one's hunches with "facts" of whatever pedigree we require. Or to take the conversational "escape hatch" of simply letting the reply box drift out of sight upstream.

Yes, the looser standards of grammar, the LOL-spelling and character limits are often bemoaned, sometimes for good reason. Yet I would argue that, in the the afore-mentioned respects, the somewhat mis-labeled "interactive" web/mobile experience has actually improved communication. Net gain or net loss? I wouldn't begin to guess. But I do know that the payoff on perspective can be quite handsome when one learns to appreciate it.

Saturday, October 9, 2010

An odd consequence of censorship

A day or three old, this news: The Libyan government has started objecting to content served by domains registered in their country. Moreover, any crackdown could (in theory) extend to content routed by way of URL shorteners that are likewise registered with .ly extensions. (As an aside, I can't help but scratch my head over what were the registrants were thinking at the time. I mean, if you want the entertainment of watching the Morality Police getting their knickers in a twist, go for .sa or .ir.)

Honestly, though, I never even bothered to look up the top-level extension's root zone before or after I'd used bit.ly to keep a tweet from running over its character allotment. Amazing, isn't it, how "useful" and "free" tend to go unquestioned when they travel as a pair? Then, too, if you're posting a link to the content on Twitter or Facebook or what-have-you, it's not like your browsing privacy is at stake, which effectively takes away one less reason to think about the transaction. Presumably, the service provider is mining and selling aggregate data, which assumption also neutralizes the suspicion over being offered a free lunch.

But, in the end, what makes this interesting--to me, at least--is how such services made a niche within the micro-climate of micro-blogging, and without a great deal of fanfare. Evolution is fascinating, no?

Friday, October 8, 2010

Frivolous Friday, 10.08.2010: Fine-farming

So here's my latest "so crazy it just might work" brainstorm. Note: In the interest of full disclosure, I should note that my usual--and long-suffering--sounding-board--a.k.a. Dennis doesn't think it'll work. So I will merely leave my gentle reader to corroborate Dennis' opinion--or not.

With the earlier onset of evening we've all no doubt noticed in the last month, I've noticed that folks around La Crosse still seem to think that the calendar's set to something like late June. At least so far as not having their lights on at the right times of day. It's annoying enough that I'm flashing my lights at grey vans and black SUVs that just materialized out the the twilight in an attempt to alert them to the fact that they're not stealth bombers, for crying' in yer beer. But I have yet to see a single one correct their violation of traffic statutes by turning on their headlights.

And as much as I happen to think that the La Crosse Police Dept. could actually make a dent in our tax rates if they'd step up and start busting these twits, maybe this is one of those situations where privitization would actually not make things suck even more.

So here's what I had in mind: Any citizen who is eligible to be bonded can purchase a digital camera from the city/county/state (whatever the appropriate jurisdiction may be). Said cameras would be set up to upload photos, timestamp and geolocation to a central server. Those who purchase the cameras--actual investment of cash being necessary to weed out the time-wasters--are then eligible to stand on street corners, roadsides, what-have-you and photograph the license plates of cars that fail to run with their lights on at the appropriate hours. The license plate and related data is uploaded, the appropriate jurisdiction issues a citation, takes a cut for administrative costs, and the camera-purchaser banks the rest.

Now, we already know about the cameras at traffic intersections busting motorists for running red lights, speeding, or what-have-you. Thus, having an officer present at the scene of the traffic violation is no longer a necessity.

But farming out revenue collection has an even longer pedigree...and one as illustrious as St. Matthew, whose first career was as a tax "collector" for the Romans in Judea. (If you're not too up on ancient history, the only thing you need to understand is that the quotations around "collector" are there for good reason: Ad-hoc extortion would be the more accurate term.) But in this case, the geo-location and date/time data included with the photographic evidence would be more than enough to prevent fraud--particularly if the photos were uploaded directly from the camera.

So. All I'm saying is that there's plenty of precedent--not only for the technology but even the economic model itself. If the upshot is that people start driving like the responsible adults they're supposed to be, awesome. And if the upshot is that some law-abiding, enterprising folks make a few bucks off the abundance of idiots we seem to have around here, I'm down with that too. Frankly, I don't see a downside: Who's with me on this?

Thursday, October 7, 2010

Programming, Process and Proficiency

Let's say your organization has a custom-written software application it uses month-in and month-out. Now let's suppose that the app. needs to be modified. And, finally, let's surmise that you have two programmers to choose from:

Programmer A bleeds ones and zeroes and knows everything about the language in which the software is written. Alas, s/he knows little to nothing about how you use it.

Programmer B has been with your organization for a number of years, in a number of roles. Alas, s/he is barely partway up the language's learning-curve.

Which do you choose?

Here's my take: Processes are picked up by using them. This in many, if not most cases—takes time away from actual programming. Or else processes they’re picked up by osmosis—working with users, listening to their gripes, cleaning up data after mistakes, etc. Understand that I’m not trivializing the learning of a new language--nay, not in the slightest. But I would make the case, based on experience, that the process of learning processes is inherently less efficient than the process of learning a new language/platform.

Why, then, in so very many job descriptions, are the platforms and languages in the "must-have" list, while the industry knowledge is in the "nice-to-have" list? Why, then, is the resident "cowboy coder" called in to inflict her/his cut corners and minimalist use cases and "I don't write code for stupid people" attitude on ao many users? Maybe I've just been disproportionately unlucky that way throughout my career. But it seems to me that, just like politics, software is only as good as the standards we insist upon.

Wednesday, October 6, 2010

Yet another argument against letting the bean-counters cook the soup

Mostly, I've been lucky enough to work in companies where the programmers and the Sys. Admins rubbed elbows. Heck, I've even been a programmer for a company where the Sys. Admin. wore my jeans, kissed my husband, drank from my coffee mug--that sort of thing.

Today I was reminded of why keeping those who write code that runs on the servers cheek-by-jowl with those who keep the servers clean, healthy and running is a thing of undiluted good.

I'm sure it will come as a shock to my gentle reader, but there was--dare I confess it?--a bug in my code. If a user clicked a web page image (which functioned more or less like a tab), JavaScript on the web page tried loading a nonexistent file from a nonexistent folder. But the user would never know it--and, in fact, this code may be left over from as early as 2002. (Ah, the wonders of copy-and-paste!) But our alpha-geek has started paying attention to the web server logs, particularly after working our Sys. Admin. (who, incidentally, sits kitty-corner from me) to parse and summarize the log messages and route the tastier bits to the interested parties.

In the grand scheme of things, the harm this gremlin does consists of wasting CPU cycles and generating unnecessary email messages. (The web server doesn't care if a file request works or not, so that's a wash.) But that's not to say that another "invisible" error might not have been more insidious. That's where not building a wall between programmers and admins. pays off--most notably in the amount of time and friction required to fix a bug.

Sadly, I've also worked at places where departments staffed by programmers are considered "profit centers," and departments staffed by Sys. Admins. are considered "cost centers." The harm isn't just in the de facto caste system it creates; it also serves to drive up the cost of such bugs. Bottom line (and I do mean "bottom line"): Don't be that company.

Tuesday, October 5, 2010

A glaring exception to user-centered design

Microsoft offers a "freemium" software product that makes life considerably easier for the programmer or database administrator who has to work with their SQL Server database server. Its full name is "SQL Server Management Studio," usually referred to as SSMS for short. At work, it's rare that I don't have at least one instance of it open at any given time. But I thought this little quirk I've noticed in the 2008 version made a good illustration of programming for field conditions.

When you're writing in the SQL language, you're referring to various objects in the database--everything from tables to individual columns in tables to custom code to other database and sometimes even databases on other servers. But, just like the spell-checker in a word processor has its "dictionary," SSMS maintains its own dictionary of words that are reserved in the SQL language, as well as the objects in the database currently in use. The upshot is that if the programmer fat-fingers, say, the name of a database column, SSMS highlights it with the squiggly red underlining you'd expect from a spell-checker.

The weirdness comes in, though, if you're in the middle writing SQL code and make a change to the data structure to which it refers--for example, let's say you add a new column to a data table. Even after you commit your edits to the database (which basically checks all its references and slams you with error-messages if you've screwed something up), that new column is not added to the "dictionary" currently in use by your editing session.

That struck me as more than a little out of touch with the realities of the single-programmer experience, let alone within a team environment. Odd, considering how SSMS's market niche is quite small, compared to ubiquitously mainstream software like Word and Excel. As quirks go, it's pretty minor--at least I haven't caught it corrupting data. (By comparison, MySQL Workbench is absolutely worthless for the task I need it to do.) But to me, the existence of such a quirk is surprising in that, in terms of features, SSMS hardly needs to break its functionality into "ribbons" to avoid terrifying its users with menus so dense they just might collapse and suck the rest of the application into a black hole of complexity.

On the merits, you'd think that programmers writing tools for other programmers would result in the most meticulously thought-out software known to humankind. Sadly, it's quite the opposite, at least in my experience. On one hand, I suppose it's sorta-kinda flattering that you're considered smart enough to work around quirks that would freak out the "average" user (however "average" is defined).

But the reality is that programmers are users too, users who appreciate a fully-finished product as much as anyone. Yet--again, in my experience--so many "enterprise" tools are not actually sold to the customer so much as the CIO. Meaning, not the people who, y'know, actually have to use them or anything.

Monday, October 4, 2010

Heisenberg, project manager

In the wake of a weekend rollout, I had more than the usual amount of housekeeping to do in the bug-tracking software that I bastardize for project management. That's sort of a duplication of effort, given that some of the same information also ends up on my timesheet, and there's absolutely no overlap between those two applications. Like any self-respecting geek, I'd much rather be heads-down in a new project--and, according to a looming deadline, I really should be.

Maybe it's the fact that my "project manager" title translates to "chief cook and bottle-washer," but I didn't realize until today that a certain Heisenberg-esque uncertainty applies to PMs who actually "manage" other people.

The buzz in the halls, the patter of email hitting your inbox, the flurries of code check-ins, the bug-tickets opened and closed, timesheet numbers: These and more are the indicators of momentum. But there is a limit to the precision to which these can measure the miles or yards left before the milestone. Yet, holding an all-hands status meeting (or even, in a sense, one-on-one meetings scheduled with implacable regularity) give the project's position at that moment in time, but leaves its momentum a matter of conjecture (however empirically-founded).

Like I mentioned, the only "team" I manage is me, myself and I. Even the time my co-workers spend testing, writing reports, and sometimes even promoting code is requested on a peer-to-peer (as opposed to manager-to-underling) basis. Then, too, I've had five years with this particular application, and somehow--despite some epic screw-ups--manage to work on a very, very long leash.

But, in other jobs, with other bosses, this is a (cough) "revelation" (cough) I wish I'd had much, much earlier, with other bosses. At the time, I considered the incessant need for status more than a little insulting--as in "What--I can't be trusted to do my bloody job?!" In hindsight, however, some folks I considered "helicopter managers" were probably motivated by that fundamental uncertainty. (Not all, but that's another story...)

Such a realization would likely have saved some friction and at least one sucker-punch. Because then I would have thought, "Ooh--that would make me a Heisenberg Compensator--just like in Star Trek!" Which, as we we know, makes all the difference in the world. [insert self-deprecating eyeroll]

Sunday, October 3, 2010

A twist on the "silence is golden" adage

If I divide the number of lines of new/changed code by the hours I spent today in the office, I'd probably be depressed. I could, I supposed, blame the Packers' spotty performance on offence, defense and special teams. But then I'd have to blame myself for listening to the game in the first place.

But from the standpoint of stretching my brain quite a bit further around what actually needs to be done for this next project, today was anything but a bust.

The thing is, though, that I doubt that would have been accomplished on a day when my morning and/or afternoon will be bisected by a meeting. Or when the project could be tossed into cryogenic suspension at any moment, should "my" users find something unexpected in their data. Or when QA does what it's supposed to do and find bugs in the work I tipped off my plate onto theirs. (Darn them for doing their jobs!) Or neighbor-noise breaches my earbuds/headphones. Or code/data needs to be boosted up the queue. Or a sparkly ball of tin foil rolls into view.

As criminally self-delusional as it is to pack quote-unquote knowledge workers into their pens in what amounts to a factory farm of distractions, it's considerably worse to insist on standardization in hours. The bulk of "my" users are in a different time zone, and having the excuse of humoring that differential makes a huge difference for me. Why? Because I can (mostly) count on one quiet interval in my day. If the noisy parts are spent running in place, the quiet part is the time to move ahead.

Bottom line: Don't insist on the same schedule from everyone. True, you need a certain amount of overlap, simply as a window for collaboration. But there is a definite tradeoff between managerial convenience and forward motion. IMLTHO, respecting that tradeoff will move you much further ahead than ignoring it.

Saturday, October 2, 2010

If you ain't got a hook, you're wastin' bait

An odd little experience today: I had to run east, and then subsequently west on La Crosse Street. In the area around UW-LAX's campus and the entrance to Myrick Park, someone in a bird costume was holding up a sign about a bird seed sale. I guessed that it was a student fundraiser, which is good. And we do like to subsidize the local birds, so I was fully prepared to throw down a few bucks for two decent causes rolled into one.

Problem was, I couldn't see any indication of where the sale was actually happening. Now, I'm a fairly cautious driver by nature, so I figured that maybe I just missed it by giving the lion's share of my attention-span to the road. Plus, I knew I would be coming back that way in about a half-hour, when I could read the sign held by the person on in another bird costume on the other side of the street a block down.

About half an hour later, the person in the cardinal costume was still there, but as I approached, s/he turned the sign before I could read the subtitle. I think I read something about Myrick Park, but when--a second or five thereafter--I peered up the park entrance, there didn't seem to be anything at all going on, not even a sign of other bird seed customers.

I still feel kind of bad about it, because it was a wasted win-win situation. So the only good I can make of it is to hold it up as an illustration of the difference between marketing and sales. Marketing exists to grab attention, and dudes in bird suits will certainly do that. Even in this town. Sales, on the other hand, is the art of making it a no-brainer for the client/customer to part with their money. It's no interest for twelve months. It's the send-no-money-now CD or book club. It's the offer that expires at midnight. It's the drive-through value-meal deal just off the Interstate. It's one-click shopping.

In other words, it's getting the cash to the barrel-head now, not after there's time to think. But if the customer can't find the barrel in the first place, that's a fatal problem. Because, even in this economy, there seem to be more barrels every day. And--oh, how it pains me to write this--they who make their customers think the least will probably win.

Friday, October 1, 2010

Frivolous Friday, 10.01.2010: The Harry Chapin edition

We forked some code in 2004;
It should've been cleaner heading out the door,
But, "We're on the short road to 'broke' from 'poor,'
And maintenance contracts are what that work's for."
But as I copied all the files I couldn't throw away,
They said, "We're coming back to play, yeah--
You know you'll see us back in play."

And our fat's in the fire
Like a greasy spoon:
We've bet the farm, promised them the moon.
"When we scrubbin' code, boss?"
"I don't know when, but we'll just refactor then, yeah--
You know we'll have the budget then."

We fork again in 2006:
This flabby old dog needs to learn new tricks.
But our client doesn't want their data mixed:
We throw it at the wall again--and it still sticks!
And as I hit CTRL-C and then CTRL-V,
The code said, "You ain't seen the last of me, no--
You know it'll be you and me."

And our fat's in the fire
Like a greasy spoon:
We've bet the farm, promised them the moon.
"When we scrubbin' code, boss?"
"I don't know when, but we'll just refactor then, yeah--
You know we'll have the budget then."

So, the next fork lands around 2008
The app. is buckling under its own weight.
But, see, there's this new client, they have some bling
We're hitting the big-time, can't ya' hear "Cha-ching!"?
We'll just get a big, bad server to handle the bursts--
But you need to make the code work first.

And our fat's in the fire
Like a greasy spoon:
We've bet the farm, promised them the moon.
"When we scrubbin' code, boss?"
"I don't know when, but we'll just refactor then, yeah--
You know we'll have the budget then."

Now we find ourselves here in 2010:
The same old movie's playing again.
The code is too duct-taped to take a new patch
Our best option would be to start over from scratch.
But we can't afford the staff-hours, 'cuz we're in a time-crunch;
Competitors would eat our lunch, yo--
Competitors would eat our lunch.

And I realized amid the dismay and the fuss,
We've none to blame but us:
The enemy is us.

And our fat's in the fire
Like a greasy spoon:
We've bet the farm, promised them the moon.
"When we scrubbin' code, boss?"
"I don't know when, but we'll just refactor then, yeah--
You know we'll have the budget then."