Friday, February 25, 2011

Frivolous Friday, 02.26.2011: Bot Bingo (NSFW)

Yesterday @CouleeRegion tweeted "Jeez, mention 'job' and the spammers come running." Which is a sad--no, make that downright pathetic--comment on the state of our allegedly post-recession economy. (Or, to satirize a certain--ahem!--political celebrity: "How's that record-y Wall-Street-y profit-y thing workin' out for ya?)

But let's give credit where it's due. One thing I'll say for Twitter is that their bot-blocking armor has improved--largely, I believe, because of the "Block and report as spam" feature: Human judgement trumping mere algorithms, nat'cherly...

And, while it's been quite awhile since I've wanted to dunk my eyeballs in hot bleach after looking at one of my "follower"'s avatars, Twitter has obviously hunkered down for the never-ending cat-and-mouse game that is the fight against people too lazy/slimy/uncreative/lame to actually add value to the economy (a.k.a. spammers).

Yet, rather than bemoan this state of affairs, why not actually have fun with it? By which I mean a Twitter game/meme called "Bot Bingo." (Note: For the purposes of the game, it's probably best to create a separate account.) To avoid the necessity of a centralized scorekeeper, here's how I imagine the rules would work out:

1.) The "grid" is based on a 25-day month--in other words, spam-bots collected on the 26th through the 31st day of the month don't count. The "grid" is considered to be 5 x 5 (see Rule #3, below)

2.) "Bait"-tweets must be issued on the appropriate day of the month, or they don't count.

3.) The (5 x 5) BINGO "grid" looks something like this:
  • Row 1: The 1st, 6th, 11th, 16th and 21st day of the month
  • Row 2: The 2nd, 7th, 12th, 17th, and 22nd day of the month
  • Row 3: The 3rd, 8th, 13th, 18th and 23rd day of the month
  • Row 4: The 4th, 9th, 14th, 19th and 24th day of the month
  • Row 5: The 5th, 10th, 15th, 20th and 25th day of the month

4.) The "bait" subject for tweets are as follows:
  • Day 1: Jobs
  • Day 2: Stocks and/or investing
  • Day 3: Real Estate
  • Day 4: Work from Home
  • Day 5: Marketing (pref. w/the word "Consulting" included)
  • Day 6: SEO and/or Internet Marketing
  • Day 7: Social Media
  • Day 8: Blogging
  • Day 9: Twitter
  • Day 10: Facebook
  • Day 11: Lindsay Lohan
  • Day 12: The Jonas Brothers
  • Day 13: Justin Beiber
  • Day 14: Taylor Swift and/or any dude who's ever brassed her off
  • Day 15: Any member of the High School Musical brat-pack
  • Day 16: Bacon
  • Day 17: Wine
  • Day 18: Any secret "discovered" by "A Mom"
  • Day 19: Health
  • Day 20: Any self-proclaimed "ninja" or--worse--"sensei"
  • Day 21: Sex (specifically, nothing that would be endorsed by the Puritans)
  • Day 22: Sex (specifically, anything the Victorians would consider "trashy." And, by the bye, don't overestimate their standards. These, after all, were the folks who considered 12 or 13 the "age of consent" for a chick...until the more "enlightened" year of 1885 raised that minimum to 16--unless she was to inherit property, thus giving the protection of her "virtue" the force of law until the age of 21.)
  • Day 23: Sex (specifically, anything that would have been criminialized before the 1960s/1970s in the industrialized West)
  • Day 24: Sex (specifically, anything that would raise Hugh Hefner's eyebrows and make him say, "Seriously?! I gotta see this..." right before hollering for a photographer)
  • Day 25: Sex (specifically, anything that would skeeve out Larry Flynt)
5.) Just like regular BINGO, the "winner" is the first in her/his Twitter group with five contiguous "matches" (vertically, horizontally or diagonally) wins.

6.) The "winner" in each Twitter group, presumably, gets bragging rights until the next month.

Tuesday, February 22, 2011

The cost of nothing to lose

The last time I sat through any crime/spy "thriller" wherein the internet was the main antagonist, I shouted at it. (I'm sorry to report that it was no less than the "Killswitch" episode of The X-Files. But for pity's sake, I'm supposed to mistake a CAT-5 cable for a T-3 line and believe that a laser shot from a compromised weapons satellite can bulls-eye a laptop that's just been thrown from a moving vehicle? Seriously?!)

Fortunately, Daniel Suarez's Daemon (lent to me by best friend and better-pedigreed geek H.) hasn't done that yet, although the flashbacks to Stephen King's Christine and the HAL-meets-The-House-of-Usher schtick were both a tad cheesy. (I'm only about 1/3 of the way through the book; I'm hoping it redeems itself.)

But aside from the thought of a manipulative, powerful, and well-funded artificial intelligence (AI) co-opting humans via their weaknesses, one little bit actually did send a shiver down my spine, and partly because of the fortuitous intersection with current state events.
...Sobol was employing an optical license plate reader. Gragg knew it was commercially-available software--used all the time on interstates and downtown roads. But Sobol needed access to DMV records to determine who owned the car. He must have cracked a DMV database in order to get his registration information. Gragg considered the hourly rate of the average DMV worker, and realized that gaining access wasn't a problem for Sobol.
And I can't help but remember how, after the Western zeitgeist bored of cheering for German reunification, Glasnost, Peristroika, Presidents Walesa and Havel, Mother Russia and her fourteen baby republics, etc...then woke to worry about assets of the former Soviet Union put on the black market by employees who no longer had any loyalty to a system that wasn't paying them. I'm talking, of course, about the more, errr, radioactive assets.

Now. That's an extreme case. But Governor's thinly-disguised attempt at scapegoating state employees (and unions in general) to a populace already disgruntled at job losses, bank bailouts (that emphatically did not open the sluices of small business capital) underwater mortgages, stagnant wages is not doing the taxpayer any favors in the long run. (Nor, I might add, is baking in $140 million in tax breaks while threatening jobs when you don't get cooperation. Nor is reserving the right to sell off state assets without competitive bids--'cuz, you know, Halliburton worked out soooo well that way--when your campaign contributions are now under the microscope.)

Look. I don't work for the state of Wisconsin. Neither does anyone in my family. I've never belonged to a union, and have held some pretty mixed opinions of them. But the fact of the matter is that the folks at the DMV--just like the the state police and the Governor himself--ultimately work for me in the sense that my taxes are paying part of the bill. And such ham-fisted tactics--right at the outset, no less--don't even qualify as "management," much less "leadership." And that's even without the "cui bono?" questions now surfacing, thanks to Gov. Walker's transparently self-serving courtship of the media spotlight.

Government doesn't exist for the same reason as business, so I frankly consider that comparison ill-considered at best and a canard at worst. But even if the analogy were true, it's never good business--in the long run--to give your employees nothing to lose. (That should be tattooed on the inner eyelids of every MBA grad ever.) And it's certainly not a good idea in a state environment, which is so much more responsible for your well-being than any business. Which is why I refuse to have this (cough) budget (cough) perpetrated in my name without making any protest. Ultimately, it is ordinary schlubs like me who will the price if not enough people stand up to this particularly textbook example of failed management.

Friday, February 18, 2011

Frivolous Friday, 02.18.2011: The traveling programmer problem

In computer science, there is a class of real-life situations--no, really--that can't actually be modeled with mathematical and/or logical formulas. The shorthand for them is "NP-complete cases," and after brief exposure to the high-level concepts, it's pretty easy to believe that their real existence is to separate the "software architects" from the folks who chunk out working code for a living.

One such is the "traveling salesman problem." The salesman has to visit multiple cities on the map one--and only one--time each. Which sounds simple enough until you stipulate that you want him to minimize the distance traveled (and thus the cost) and also not cover any leg of the trip (i.e. the line between two cities) more than once.

To date, there is no "formula" to generate that route. Thia leaves two options:

  1. Approximation--i.e. the "close enough" approach, or
  2. Calculating all possible combinations--i.e. the "brute force" approach.

Even with today's computing Clydesdale-power, at a certain point, brute force isn't feasible. (Hint: Simply thumb through your old Algebra textbook until you find the section on factorials, if that helps.) Despite the misleading article title, approximation is currently the most viable option, and kudos, epic props, and a side of "w00t!" to Dr. Zhang for his coup.

That being said, it neither explains--much less excuses--the unadulterated ridiculousness on parade yesterday when I had to book tickets for a business-related trip. La Crosse, WI to Los Angeles, CA--how complex could this be?

Well, one option for the outgoing part of the trip that was surely calculated by the ghost of Christopher Columbus. On acid. Because the first leg went from La Crosse to Detroit, then backtracked from Detroit to Minneapolis, and then headed to Los Angeles.

Now, the funny thing I discovered about the travel-booking software that my firm uses is that, in this presumably more environmentally-conscious era, each leg of the trip now lists its estimated C02 emissions. As metrics go, I think that one was...ummmm...counterproductive...for recommending this particular route.

But wait! It gets better.

I had second thoughts about my departure time, so I bumped the homebound time out by all of one hour later. Sorting by the least expensive to most expensive fares, the least expensive fare--which, by the bye, was nearly $500 more than for one palty hour previous--had my route thus: Los Angeles to Boston to Chicago to La Crosse. And if all went according to plan--Oh, puh-leeeze: As if...--I would be home a day later than if I'd left an hour earlier.

I sooooo wish that I'd taken screenshots along the way so my gentle reader could see that I'm not exaggerating, much less making any of this up. Fortunately, one of my co-workers was on hand to help me navigate the web app., so I at least had the comfort of camaradarie in my freakitude.

Yet I couldn't help but notice multiple airline options for the exact same departure times--for the initial flight and the connecting flight. Okay, maybe for the initial flight--given how flights are staggered among multiple runways, that's not outside the realm of possibility. But the connecting flights departing at the same time? Really?! Is there some sort of race going on? Are the pilots planning to cruise the planes side by side so they can while away the time playing charades at 30,000 feet?

[insert much banging of forehead on desk--otherwise known as Left Brain Oxycontin]

Ahhhh... That's better. Sorta-kinda. As Bull Durham's Annie Savoy observed, "The world wasn't made for those of us cursed with self-awareness." Or those of us cursed with a rudimentary capacity for logic, I might add.

Sigh...

- - - - -

A friend emailed me something like this in the very late 1990s. In 2011, it's not nearly so funny. If you want to know why I call B.S. on the supposed "efficiencies" of oligopolies (and their alleged economies of scale), this is a good part of the reason.

(And to think I used to look forward to air travel...)

Tuesday, February 15, 2011

Madison Avenue: Spam Never Sleeps

Hmmm...maybe that doesn't scan so well as Oliver Stone's heavy-handed commentary... Dang.

Anyhoo.

Last night, while mixing teriaki marinade and paring beef for homemade jerky, Dennis mentioned the latest high-profile results-jacking busted by Google.*

Dennis suggested the incident as good blog fodder. At first, I was a little skeptical, thinking that we--by which I mean I/T folks--are pretty jaded about the cat-and-mouse arms race played by Google and legions of SEO mountebanks. (By the bye: I'm not actually mixing metaphors here; in the hands of a talented artist like Jeff DeBoer, a cat and mouse arms race can be both awe-inspiring and absolutely delightful.)

I do recommend reading the full five pages of the original New York Times expose, simply for their peek into the shadows of the world of link-farming--and, more aptly, why you should at least skim past the first link. But for me, the real takeaway is that, while software is key to boosting the signal-to-noise ratio (which is to say, a search engine's bread & butter, beer and pizza, burger & fries, hummus & pita, yadayadayada) ultimately, human intervention is a non-negotiable part of the business model. (If you read the PayPal chapter in Founders at Work, you'll notice the same schtick in the anti-fraud dept.)

And that's maybe the lesson that the "everyone" implied by the link-farmer interviewed in the NYT article should take to heart.

- - - - -

* Welcome to Valentine's Day in a dual-geek marriage. Knowing me, I was playing with banana chips--products of the same dehydrator--to see how far I could fold them over between my molars before they actually snapped and I had to crunch them out of their misery.

Friday, February 11, 2011

Frivolous Friday, 02.11.2011: Story problems for programmers

One thing I noticed about UW-L's comp. sci curriculum was its emphasis on math. Maybe sometime down the road--particularly after MTH 225 (Mathematical Logic), that might have made some sense. In the meantime, I would have appreciated it if the curriculum would have covered situations that might occur in the life of the average programmer. (Heck, I would have settled for "average" in the sense of the trimmed-mean, bell-curved, and nice-round-number reality that spawns story problems.)

But it didn't. So to partially ameliorate that glaring deficit, I offer a few examples for the benefit of both textbook authors as their readers.

(Now...granted, Tom Cargill--who, like Yogi Berra, didn't really say everything he said--immediately springs to mind with: "The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time." But I think Mr. Cargill paints far too rosy a picture. So let's fix that, shall we?)

Question 1: Your firm's billing software requires that time spent exclusively on a project be billed in half- and whole-hour increments? If anything greater than fifteen minutes rounds up to a half-hour and anything between 40 and 59 minutes rounds up to one hour, what is the maximum amount of time per day you can waste on Facebook? (Choose one.):
___ A.) 3 hours and 59 minutes
___ B.) 2 hours and 39 minutes
___ C.) Dude, are you smoking crack?! You'll be interrupted so many times, you'll either have to lie like a rug or work weekends to avoid burning your PTO.

Question 2: The cost of changing specifications is 5% during the Design Phase, 15% during the Coding Phase, 65% during the Testing Phase, and 115% after implementation. Assuming an original project estimate of $100,000, what is the total amount billed to the client for changing specifications twice during the coding phase, five times during the testing phase and three times during after final implementation? (Choose one)
___ A.) $700,000 (cost as percentage of original estimate)
___ B.) $2,458,625 (cumulative cost assuming simultaneously implemented changes in each phase)
___ C.) $16,742,523.38 (cumulative cost assuming independently implemented changes in each phase)
___ D.) $100,000 (Sales bid the job at flat rate. Cheer up: Maybe they'll take you out on the pontoons they bought with the commission.)

Question 3: Your firm just signed a contract to customize software around the client's existing data-set within the next 90 days. The terms of the contract specify that you receive 25% of the data as a sample on Day 10, and the final data snapshot on Day 89. Assume that 10% of the data will contain discrepancies, and that it takes a full day to resolve 20% of the discrepancies. On what day will the application contain clean data?
___ A.) Day 95
___ B.) Day 93
___ C.) Day 92
___ D.) Whaddya mean you can't just zen what data's supposed to be entered? Aren't you programmer types supposed to be "numbers" people? Sheesh...

Question 4: A potential client has promised to send you screenshots of the Access database that's powering their core business functionality so you can evaluate the feasibility of replicating the application in something less likely to flake out for no reason. Your firm's Exchange server will emails whose attachments exceed 10 MB in size. The possible client's screenshots average 375 KB each, using the .PNG format you recommended. Assuming that the application requires 50 screenshots, how many emails should you receive? (Choose one.)
___ A.) 2
___ B.) 3
___ C.) None (Anyone savvy enough to know what a .PNG is should know to ask whether they can just upload the whole mess to an FTP server.)
___ D.) None (The potential client decided to be clever and compress the files for a single email, but your Exchange server's anti-virus software is configured to black-hole .ZIP files.)
___ E.) None (The potential client was "too busy" to type "P and G" into The Google and just printed the screens and faxed them to you.)

Question 5: Your boss has just quoted a 30-day timeline to a client, hangs up the phone, and asks for your projected completion time. Your answer is (choose all that apply):
___ A.) 42.
___ B.) Hurr (and/or Durr).
___ C.) More cowbell!
___ D.) An African swallow or a European swallow?
___ E.) I like pie.

Question 6: Your firm bills your sole client by the hour, but insists upon the fiction of the 40-hour workweek with respect to its programmers' timesheets. Assuming that each of your six programmers averages a 60-hour week January - September, how many programmers do you have to hire in October (and pink-slip before New Years') to maintain your Sugar-mommy (or Sugar-daddy) cred. with the client you invite to the company Christmas party? (Choose one.)
___ A.) 2
___ B.) 3
___ C.) Troll the local campus for the more articulate Comp. Sci students and offer them free hors d'oevres and booze to fake it

- - - -

Answers:
1.) C
2.) D
3.) D
4.) E
5.) Yep.
6.) C

Tuesday, February 8, 2011

In praise of the "no blue skies" business model

A few months after I took the helm of "my" application, The Powers That Be decided that it would be a good idea to send me halfway across the country to meet my power-users face-to-face. Truth be told, I know I didn't absorb nearly enough of the end-user experience in those three days, but relationships solidified at a pace that phone and email can't match.

Fat times, those. Sometimes, just trying to get my work done on time while spec'ing out future work was the challenge.

A few years on, and the housing bubble popping and derivatives investment house of cards tumbling brought an end to that. We managed to hang onto the client (and thus I managed to hang on to my job), but the fallout on their end involved a lot of staff turnover. To date, only one of my original "power users" is still with the group. That would have been the most appropriate time for another face-time junket. But, of course, the budget couldn't support it just then.

With the benefit of hindsight, that was a lost opportunity, and I think we're paying for it now. And when I think of the extravagances--well, "extravagances" to my frugal Upper Midwestern sensibilities--of the era before, I can think of a few I would have happily "banked" for leaner times. That's not a mistake we'll make twice--not if I have anything to say about it. Not even if I have to put up with Delta and the FAA's sad-sack excuses for "service" in the name of a belated meet-and-greet sometime during the next few weeks.

So, mixed in with the fat vs. lean metaphors--because, hey, if corporations are officially "people," we might as well go all reductio ad absurdum while we're at it--is my wondering why business reactions to the economy-at-large seem to so closely resemble modern dietary habits. You know, the deep-dish Carnivore's Special pizza (with cheesy breadsticks, 2 liter bottle of soda plus cinnamon breadsticks for dessert) when the money's rolling in, and ramen noodles when it's not?

We all know that crash dieting--particularly after living on bacon ranch double cheeseburgers--isn't healthy in real life. During the last few business cycles, I've seen what its equivalent does to the underlying fabric of organizations. Yes, I understand: If our species had even 25% less capacity for self-delusion (as in "This time it'll be different,") the entertainment, fashion and investment industries would cease to exist. I get it. No, really.

But for everyone else...seriously, now. How can the same speculative investment in an emerging (and thus largely unknown) market be too trivial to bother with during the boom and too farm-bettingly dangerous during the bust? Not quite a strawman argument there--too many examples from business history (particularly while I'm under the influence of The Innovator's Dilemma at the moment) for that.

I guess I just don't understand why an initiative you're not willing to risk your budget and reputation on during the bad times can be a good idea during the good times. But I have seen first-hand how self-defeating the binge-and-diet cycle is, and I think that anyone who works for a paycheck has every right to expect considerably less...errrrr..."fiscal myopia" from their annointed leaders.

Friday, February 4, 2011

Frivolous Friday, 02.04.2011: Aeron-chair psychology

Originally, I was planning to riff on a suggestion Dennis--bless his inventive (and somewhat twisted) brain--made. But then the proverbial "little birdie" (a.k.a. Twitter) told me that today is George Romero's birthday.

Now, in the name of honesty, I have to disclose the following anecdote. My co-worker, who is also the office's Movie Buff in Residence--let's call him "J"--lent me his copy of Shaun of the Dead. And while Simon Pegg is always fun to watch, not to mention at his absolute funniest in deadpan mode--no quasi-pun intended--the comedy just wasn't my cup of brains.

J. seemed disappointed at my disappointment, and tried to contextualize the movie as "a tribute to George Romero." "What's a 'George Romero'?" I asked. J. literally stopped in his tracks, visibly deflated, and said plaintively, "Okay. You know when you make those historical references and I don't get them? That's what this feels like." (As it turns out, the George Romero of which J. was speaking is the "godfather of zombie movies." Whoops.)

Poor J. I felt bad. Really I did. And I realized that I'd also lost a not-insignificant amount of Geek Cred. At least I can partially redeem myself for the first trespass here and now. But the memory of the incident set me wondering why zombie movies tend to be cult movies and, moreover, why they also tend to appeal to a geekier demographic.

The first thought that sprang to mind was that any apocalypse (zombie, nuclear, etc.) qualifies as an escapist fantasy. Sure, reliable 4G/wi-fi access may be hard to find, but in the meantime, office politics-as-usual are a luxury your plucky little band of survivors can't afford. Also, sheer brawn is next to useless. Mainly because if you go mano-a-mano with a zombie, you're already dead. Outwitting them enough to stay just inside shotgun range is the game, friends and bretheren.

And speaking of shotguns, my complimentary armchair theory to the above was: A zombie apocalypse would be--let's face it--the ultimate first-person shooter video game. No need to worry about gratuitous head shots because, well, it's their brains or yours. Plus, zombies are already dead, so it's technically not murder. And you can be almost certain that their former selves would actually be cheering you on. Long story short: No ethical ambiguities need apply.

In light of those two considerations, zombie movies should, by all rights, be catnip for the average geek. Alas, I've never fallen under that particular "average." True, George Carlin warned against underestimating the power of stupid people in large groups. But. The shambling pace of any zombie horde never seemed to me to qualify it as a credible threat. Nope: Too much suspension of disbelief for me, I'm afraid. Sorry 'bout that.

Then, too, the flavor of horror movies on which I was raised was decidedly more genteel and reasonable--stuff involving Boris Karloff, Bela Lugosi, Lon Cheney Jr. and the like. You know: Scientists "renovating" ancient castles with no visible means of support. Police coronors not batting an eyelash at corpses entirely drained of blood. Silver bullets standing up to the rigors of modern ballistics. The fact that the ancient Egyptian embalming process involved not only removing internal organs, but also extracting the brain (with a hook through the nose) before discarding it. (That lovely mental image you just had there? You're welcome--no need to thank me.)

Yeah, much less suspension of disbelief involved. [eyeroll]

Tuesday, February 1, 2011

Why it doesn't pay to stint on I/T

To respect security, I won't be mentioning names. But earlier this week, I was trying to access a large-ish website that was clearly buckling under the crush of traffic. After plinking the F5 (i.e. "Refresh") key a few times, I left the web page open as something else claimed my attention

A minute or three later, I noticed my browser's "Download" notification window asking me whether I wanted to download a PHP file and open it in the application designated for that file extension. At that point, strict professional courtesy should have made me say "no," but I rationalized that I would do no tangible harm by just peeking.

Now, if you're not a web programmer, what you need to know about how most web content is served is that it often involves some delegation. What's traditionally known as a "web server," is capable of handing off files (HTML and images and such) that don't change. When, however, the content is updated in real-time (which is to say most of the web nowadays), the task of generating it is left to another software package, sometimes known as an "engine" (e.g. servlet engine, Zend engine). The engine's output is then handed back to the "web server" as HTML and images and such and delivered back to the user's browser.

That's how it's supposed to work, anyway. In the case of the website I tried to access, the "engine" portion had clearly stalled out under the traffic load. The web server, still struggling to keep up with the requests for content, finally sent the PHP files responsible for delivering the content--or at least one of them.

That's bad. Why? Because, exposing the code files themselves exposes the inner workings of the web application. That could include information about the database structure behind it, and--in an Armageddon-worst-case-scenario--the connection information for the database itself.

In all fairness, and for perspective, that scenario would involve the proverbial perfect storm of a web server near-meltdown, sloppy programmers, and even more slovenly system/security administrators to set up that sort of situation (plus make it easy to exploit). But it's also an excellent argument for not automatically defaulting to the least expensive, get-ya-by-for-now option. In hardware or people, by the bye. Simply because there's being caught in out the perfect storm, and then there's doing the rain-dance for it. Moral of the story: Don't be that person.