06/24/2009

I beg to differ

Category xpages
I've been following Peter Presnell's posts about his experience with XPages, and am looking forward to seeing what code will result. Anyone familiar with his .Domino framework knows that he's one of the best LotusScript developers anywhere. So his initial reaction was a bit surprising to me. In particular, his most recent post made a few assertions about server-side JavaScript that conflicted with my experience thus far with the language. Since I haven't seen any response from IBM thus far, I'd like to propose a few counter arguments about the language in the hopes of clearing up some corresponding misconceptions.

Server-side JavaScript is not JavaScript.

Syntactically, it is almost identical: semicolons, curly braces, and so forth. However, the language is really just a veneer - every variable, every object, every function is interpreted at runtime as Java. Assigning {} to a variable, for example, is actually instructing the server to create a Java Map descendant. This is why IBM's implementation supports most existing @Functions: the server isn't executing the code as JavaScript, it's interpreting it in order to execute Java code, so any syntactical deviation is fine as long as IBM's intepreter knows how to respond.

Perhaps I'm just splitting hairs here - after all, the client- and server-side LotusScript runtimes sit atop layers of C, so any LS code we write ultimately results in the creation of C objects. Yet LotusScript can rightly be considered its own language, with plenty of strengths and weaknesses, some particular to itself, others shared with other languages. But I think this is still a crucial distinction, because the implementation of SSJS in XPages is its own beast, and acknowledging that makes it easier to understand how we can make it work for us and not against us. This is not just a matter of remembering that it has no window object and alert() is pointless; rather, remembering what's going on "under the hood" helps to structure the objects and functions we define in ways that maximize the language's strengths.

Server-side JavaScript is strongly typed.

Peter's exactly right: the lack of strong typing in traditional JavaScript is often a crippling limitation, which is why I'm thrilled that it is a limitation that SSJS does not share. As more and more XPage applications emerge, you're going to see a lot of code that looks like this:

var NAB:NotesDatabase = session.getDatabase("","names.nsf");
var peopleView:NotesView = NAB.getView("($Users)");
var myName:string = context.getUser().getDistinguishedName();
var userRecord:NotesDocument = peopleView.getDocumentByKey(myName, true);
//...


The colon syntax is how you declare a variable's type. In traditional JavaScript, the typeof operator returns one of only 4 possible results:
  1. "number"
  2. "string"
  3. "function"
  4. "object" = everything else...
SSJS objects are Java objects. Java is strongly typed. Ergo, SSJS objects are strongly typed. Like regular JavaScript, typeof will return "number" or "string" for primitive types (and it shares the silly limitation of calling any array an "object"), but invoke typeof on the global session variable, and it returns "lotus.domino.local.Session". Invoke it on the result of any valid call to getComponent() and you'll get "com.ibm.xsp.component.xp.XspCommandButton" if it's a button, for example, something very similar if it's any other core control.

As Nathan and I both mentioned in the comments on Peter's post, Squawk is a textbook example of an application that relies heavily on the strongly typed nature of SSJS. Nearly all of the code is in the form of custom Java classes we wrote that are simply being instantiated within an SSJS context. Every time you load a transcript, add someone to your flock, or post a new squawk, the application is executing two or three lines of SSJS that, in turn, execute dozens, or even hundreds, of lines of Java code. It's like LS2J without all the memory leaks. We could easily have written most of what it does in "pure" SSJS, only using Java classes where an equivalent construct wasn't built directly into the language, but structuring it the way we did had numerous advantages, most of which I'm not even permitted to reveal. The point is that this flexibility allows us to take full advantage of the benefits of strong typing without losing the fluidity of the JavaScript syntax... we can still create inline objects and arrays, anonymous functions, and everything else that is appealing about JavaScript.

One additional note about strong typing: the colon syntax is entirely optional. At runtime, a call to session.getDatabase is going to return a NotesDatabase whether I explicitly indicate that in the code or not. Likewise, DDE's code assist is pretty good at guessing the return type of a method call even without type declaration. But including the declaration ensures it knows what it's looking at... and so does anyone who has to maintain your code, including you.

JavaScript doesn't need classes.

I know, that sounds heretical coming from an OOP fanatic. But it's true. When used properly, closures render a classical structure nearly irrelevant: JavaScript objects can have private properties and methods, and can be extended to provide new members while still inheriting the members of a parent object. So... what more would we want? Such a claim deserves its own post, so as time permits I'll provide an example of this in action... and it doesn't involve a single use of .prototype.

06/16/2009

Quick UI trick for XPages

Category xpages
If you follow Declan's blog, you already know that using the OneUI CSS template makes it even easier to rapidly give your XPages a pleasant user interface. Here's a quick tip for adding an interesting UI element to your pages that takes advantage of some of the OneUI behavior.

When you wrap any link in a span that has a style class of "lotusBtn", the link is rendered with a border and background graphic, so it looks like a button even though it's just a link. This is one approach for ensuring that an element intended to behave like a button (in other words, has an onClick event) will render similarly across all browsers. Since a section control, when rendered in a browser, is nothing more than just a link that uses client-side JavaScript to toggle the display of additional content, this allows us to render the section header such that it appears to be a button that, when clicked, displays the section contents. Since the entire section is wrapped in the "lotusBtn" span, which has a 1px border, the entire section has a border, but only the header has the background graphic... in other words, it looks like an inline dialog.

For example, if your XPage includes functionality for parsing RSS/Atom feeds and you want to allow the user to submit the URL of a feed they want to subscribe to, you might create a table for the URL field and corresponding label, and a button (or link styled as a button) for submitting the value. Here's how that would look if using this style technique.

Collapsed:
image
Expanded:
image
Note that in this case I'm using a custom image for both the expanded and collapsed state.

So the user clicks an element that looks like a button, which displays the additional detail inline instead of as a modal dialog or popup window. To enable this in your own XPage, select the section you want to render this way, switch to the Source tab and wrap the xp:section element in the following markup:

<xp:span styleClass="lotusBtn"><xp:section....</xp:section></xp:span>

One more quick customization to this technique: in addition to the "lotusBtn" class, you can add either "lotusBtnAction" or "lotusBtnSpecial". Instead of a silver background with blue text, the section header will have white text on a green background if using "lotusBtnAction", or blue if using "lotusBtnSpecial". So, for example, for a white-on-green button, the source would look like this:

<xp:span styleClass="lotusBtn lotusBtnAction"><xp:section....</xp:section></xp:span>

Click here to see an example of all three styles in action.

06/12/2009

because I think I'm a writer

Category projects
For as long as I can remember, I've had people in my life convincing me that I have "a way with words". In grade school, one of my teachers read a story I had written at home and was impressed enough (though, likely as not, with the enthusiasm I displayed more than the content of the story itself) that she gave me access to one of the school's computers so that I could type it up, print it out, illustrate it ("illustrate" is, at best, an exaggeration, since whatever artistic ability I may have, it does not include the ability to draw or paint a remotely recognizable image), and even bind it - though that final step was performed using a stapler, if my hazy memory of childhood serves. I no longer remember the story, but I doubt that I'll ever forget the way the process of writing and "publishing" it made me feel.

During the decades since that childhood project, I've received various forms of similar reinforcement from various sources, ranging from handwritten notes scrawled on a term paper in the red ink of a professor's pen to the comments on this blog that prove a few people out there find content here that holds their attention. Having discarded an intentional career in music before it began, only to find passion for an accidental career in programming, I've nonetheless repeatedly found myself pondering ideas for novels, documentaries, and even just short stories. I frequently wonder whether, were I no longer able - or, for some reason, willing - to make a living writing code, could I manage to make a living writing stories? I consider it doubtful. But since I still have the luxury of a career that I enjoy and that pays the bills, I can afford to muse over that possibility without any pressure of finding a way to bring it to fruition.

As such, I've started writing several books over the past couple years, currently in varying states of completion, none showing much likelihood of ever becoming something I would publish. One was probably a very bad idea from the outset; at least one was probably a good idea, and I may someday put in the effort required to bring the story to life. But I recently began a new short story (knowing full well that I don't have the time now - or in the foreseeable future - to complete a full novel), and have been surprised by how rapidly, and fluidly, it has taken on a life of its own, almost without my trying.

Admittedly, I've pursued a process with this story that I hadn't previously tried, in at least two significant ways. First, I've talked to more people about it. Each person with whom I've discussed the basic plot has made suggestions that have enriched the personality of the characters, the impact of the story's events, or both. Second, when describing the premise, characters, and events, I've spoken as though the story is actually happening: the occurrences that comprise the back story have already happened; because of those events, the personalities of the characters, and the effect of previous events on the decisions the characters make, the way the story unfolds and ends is inevitable. This wasn't intentional, and is a strange sensation, because - as a former actor - I have difficulty with suspension of disbelief. That's always been my biggest obstacle when attempting to author fiction: if I don't believe the story, how can I hope to convince an audience? For some reason, with this story, it's different. When thinking, talking, and writing about these events, it feels real. Each time a new element of a character's personality or history unfolds, I'm not deciding it, I'm discovering it: something happened to them that I hadn't previously realized, but now that I do, their actions make more sense. I'm sure this sounds cheesy, but it's fascinating to me, and quite fun.

Earlier this week, I was discussing the ending with Laura. I've already forgotten how all the elements of it took shape - whether she made specific suggestions or, as so often happens when we're talking, the mere act of describing to her something I think I already know suddenly makes it seem so much clearer. But however it happened, I now know precisely how the story ends. And, as contradictory as this sounds, it's both happy and tragic. Possibly poetic... time will tell.

When all the words are in their proper order, I'll toss it out on LuLu. It's no Sunken Treasure, but I have faith that it'll contain a pearl or two.

06/10/2009

in which I eat a small portion of dog food

Category musings
Thanks for all of the feedback on my lazyweb request from last night. Earlier this evening I had narrowed my selection down to either an HP dv5tse (with the optional "frameless" display, which bumps the native screen resolution up to 1680x1050) or a 13.3" MacBook Pro (after ruling out several other options, including a Lenovo IdeaPad, a couple Acer models, etc.), but still couldn't decide.

Because my wife is a genius, she had the perfect suggestion: "You're not a crowd, but couldn't you still use Crowded Wisdom?"

For those not already familiar with why Crowded Wisdom makes difficult decisions easier, the key is the multiple vectors of evaluation: each individual decision-maker is asked to evaluate the merits of a suggestion, in the context of a comparison to similar suggestions, both vertically and horizontally. The vertical is a measurement of how soon the suggestion should be implemented; the horizontal measures the perceived impact of implementation. So it's conceivable that a given decision-maker might be evaluating a dozen suggestions that are all great ideas, but the 2-dimensional ranking/rating produces a fascinating visual depiction of what should be done now and what can wait, especially when this decision-making process is aggregated across large crowds of people (hence the name).

In the context of the IBM Design Partner program, Crowded Wisdom is currently being used to provide this kind of data for various categories of proposed enhancements to the Notes/Domino platform. Obviously, I can't reveal specifics about what those enhancements are, but based on what I've already seen, I suspect that as early as 8.5.1, IBM's decisions about what to include and what to postpone will have been positively impacted by their use of this tool.

With that context in mind, I created a blank instance of Crowded Wisdom on Ophelia and started submitting suggestions, with each suggestion worded as a criteria for a satisfying laptop purchase ("Screen resolution should be 1280x800 or larger", "The laptop should be reasonably sized", "The vendor should be reliable", etc.), then sent a "scorecard" comprised of those suggestions to myself and began ranking and rating them. I found myself ranking my purchase criteria (the vertical vector) based on how rapidly the absence of each would annoy me... and rating them (the horizontal vector) based on how much. Laura was glancing over my shoulder during this process and said, "Wow, you definitely want the HP." Which is true.

A pleasant surprise was that I found myself already satisfied with the decision, and I haven't even made the purchase yet. While it's very possible that I'll be disappointed with the result when, or sometime after, it arrives, the satisfaction with the decision itself - specifically, with the criteria for the decision - was immediate... which is unusual for me when making large purchases like this. Just as I can assume that a release of Domino that implements the suggestions that CW tells IBM should be a priority, but excludes others that CW says can wait, can be considered a successful release, I'm assuming that a laptop which satisfies the criteria that floated to the top in CW will be a purchase I'm happy with, even if it doesn't have other attributes that I know I want... 'cause now I've visually acknowledged to myself that I want them less. Which got me thinking about another possible benefit of implementing this on a large scale in any organization: not only does it help the decision-makers to make the "right" decision, but I can foresee a possible impact on product/process adoption; the more people who have gone through the process of deciding not just what they want, but what they want more, the less people might gripe about what was and wasn't done once the decision has been made and the actions associated with that decision produce a result.

06/09/2009

tell me what to buy

Category lazyweb
Timmy needs a new laptop. Three years ago, we splurged and bought a matching set of Dell Inspiron 710m's - one for me, one for Laura. We were quite pleased with them until we found out that they suck (apparently Dell agrees - they don't even make that model anymore). Laura's has survived longer than mine primarily because she's gentler on a system than I am (no Designer, no VMWare, etc.). Mine, on the other hand... the sound card died about 15 minutes after the warranty expired, which was disappointing but not tragic - I could still sync my iPod, of course, so I would just listen to it instead of running iTunes while coding. But the hard drive went not long after. So I dropped in a new, slightly larger one, which has been fairly reliable ever since, but since the laptop runs hot, I'm sure its days are numbered.

The real trouble has been power: although the battery in Laura's still holds about a 90 minute charge, I'm lucky to get 30 out of mine, and neither of us could manage to keep a power adapter alive for more than a few months. And, naturally, none of the 9 that now sit lifeless in a cardboard box in the server room (read: a small nook branching off of the living room wherein Ophelia sits, humming quietly to herself, serving up this blog and sundry skunkish Domino apps I play with when I can't sleep, SFTP, SVN, and anything else I feel like asking her to do) were on any of the many recall lists, and Dell was predictably unresponsive to requests to replace any of them with an equivalent device that wasn't crap. Or for less than about $80 per unit. Lifehacker to the rescue once again: I caught wind of a Belkin "univeral" adapter (it ships with 12 interchangeable tips, each compatible with several different laptop models, and supposedly if the one you need isn't included, they'll ship it to you for free, but the one I needed was in the box) for $19. So I bought two. I've only had them about a month, so who knows how long they'll last, but what was noticeable immediately is that they don't run hot, which seems to have been the primary problem with the Dell adapters.

In any case, my Inspiron now sleeps with the proverbial fishes. The Asus EEE I bought for Lotusphere last year has been a handy little toy for watching movies and such, though it's way too small for any actual work (though it does have Notes installed, and for a short while after 8.5 was released, was running Domino... and did quite well), so I got Laura a 1000HE. It's large enough for what she needs but still fairly small and light. So she bequeathed me her Inspiron and, following a quick organ transplant (hard drive and RAM, to be precise), it's limped along decently. I have sound again, which is nice. The 1280x800 is preferable to my work Thinkpad's 1024x768 when coding an XPage without access to an external monitor. But it no longer hibernates, and having to completely shut down and boot back up is a big pet peeve of mine. The hard drive runs hot, so I back up my data to 3 separate locations in preparation for its eventual death. And, again, who knows how long these Belkin adapters will continue to surprise me.

So this is the part where you tell me what I should buy as a replacement. I've perused NewEgg and PriceGrabber, scoping out various models (Acer seems to have a couple promising rigs, and I'm intrigued by the largest of the Lenovo IdeaPads) and reading customer reviews, but I'd rather have advice from those who use laptops for similar purposes ("Dammit, Jim, I'm a coder, not a gamer"). I'm tempted to take the plunge and buy a MacBook, but despite all the valid reasons I can think of for doing so, I can't shake the feeling that I'd just be buying one because I want a Mac. And there's no denying that, spec for spec, I can get more power for less money from another vendor. Nonetheless, Apple fans, feel free to convince me otherwise.

Here are my requirements, approximately in descending order of importance (knowing full well that some may be contradictory):

  1. Lots and lots of RAM. Ideally, it should ship with 4GB, but be expandable to 8GB. Virtual machines, before you ask. That and, on average, 4 concurrent applications that either run atop Eclipse or are Eclipse. So, yeah. RAM is a must.
  2. Wide screen resolution: 1280 or higher. The vertical isn't as important (as long as it's > 600); Designer 8.5 is all about the width (no girth vs. length jokes, please, this is a family-friendly site). OTOH, I don't need 1920 (as long as the card supports it on an external monitor).
  3. Hard drive doesn't need to be enormous, but > 300 GB would be nice. I travel frequently, sometimes for several weeks at a time, and would like to not have to choose which movies I want to take with me before each trip, or have to hook up an external drive each time I want to watch one. OTOH, I could give a rat's about SSD. No moving parts sounds neat, but I'd rather spend my cash on something else (Goto 1).
  4. Battery life should be ~3 hours. Laura's 1000HE lasts an amazing 9 hours. Impressive, but more than I need. If I can power up when the plane hits 10K feet leaving ATL and have the 3% warning display as we start our descent into SFO (~4 hours), I'll be a happy camper... but I'd be content with 3.
  5. Reasonably sized. Having grown accustomed to a 12.1", 17" seems huge to me now (watch it... remember what we discussed earlier). But I'm okay with something in between (Goto 2). Same rules apply to the weight: I don't need it to be as light as a MacBook Air, but if my primary care physician would consider the act of carrying it from one room to another to be "strenuous exercise", I'll pass in favor of something that won't make my legs go numb if I decide to do something silly like resting my laptop on my lap (Goto 3).
So, now that you know what I'm looking for, pair me up with a good match. Heck, if you feel so inclined, you could even buy me one... though I'm quite sure I haven't earned it.

UPDATE: on advice of imaginary legal counsel, I'm obligated to state that the prevalence of references to the programming construct known as "Goto" in this blog post are in no way an endorsement of its use in any code intended for production use, with the sole exception of error handling routines in LotusScript. Any such use is forcefully advised against by the author, and included in said blog post for entertainment purposes only.

06/09/2009

Nathan wins at the internet

Category viral
Yesterday, Nathan posted (to YouTube, not to his blog) a video of a product he and several other of our developers have been working on for a few months. He sent it around internally and to a couple external folks. This morning it hit the Yellowverse, and within a few hours (in Ed Brill's estimation), it had gone viral. I'm really proud of what these folks are accomplishing with this product, so it cheers me to see the reaction it's received so far, and I can't resist embedding the video here, although I have no doubt all of my readers have already seen it. Congratulations to those on the project for their accomplishment.

06/04/2009

index does not exist

Category xpages
Dear IBM:

An error message that does not tell me what to do next is a pointless error message.



Just a suggestion: here's what I think the message should say instead:
We're sorry. Because DDE is a wee bit flaky, it's lost track of how to find the XPage you were attempting to edit. But there's a workaround (albeit an annoying one):
  1. Switch to the Java perspective
  2. Open the .xsp file associated with the orphaned XPage
  3. Copy the entire source to your clipboard
  4. Switch back to the Domino Designer perspective
  5. Delete the XPage
  6. Create a new XPage with the same name
  7. Overwrite its auto-generated source with the contents of your clipboard
Sorry, we know that's kind of a pain. But this happens rarely, so we're confident you'll cope.
See? If the error message looked like that, I'd know exactly what I need to do. Instead, I had to resort to trial and error (restart DDE, restart Windows, rename the workspace folder and allow DDE to create a new one... and, finally, the process described above).

Doubtless the specific, isolated behavior that triggered the error I saw has been reported to IBM, there's an SPR, somebody's already fixed whatever causes it, and after upgrading to 8.5.1, I'll never see it happen again. My point is not this specific bug - it's the supreme uselessness of the error. Somebody wrote code in DDE (or, more likely, one of the myriad layers of Eclipsiness upon which DDE is based) to display this error... which means that someone chose to use the phrase "index does not exist" as an explanation for what went wrong. Never, ever, ever, ever, ever do that. If you're going to bother to respond at all to runtime errors in your code, don't choose wording that tells you what went wrong, tell the user what to do.

kthx

05/29/2009

biennial

Category musings
As of last Thursday, I have been with Lotus 911 for two years. After previous jobs that (no offense, former employers) already felt stale after a few months, it's been wonderful to have a job that just keeps getting better.

With the exception of a couple LotusScript buttons for the Notes client interface of Crowded Wisdom (and perhaps an agent or two elsewhere I've since forgotten about), I've been doing nothing but XPages development since the beginning of November... it occurred to me today, that's roughly a third of the time I've been in my current job, despite being the "cutting edge" technology in this industry niche. At first it was just for our own products, but literally within a week after returning from Lotusphere, I was developing XPages for our clients, and it hasn't stopped since. In fact, I'll be onsite at a client next week to start yet another mid-sized XPage project. Call me a fanboy if you like, but I'm having more fun than I ever have before working on the Domino platform, because XPages give me a slew of new capabilities that I can offer to our clients without rescinding any of what I've always loved about Domino. I can create a very basic web application that actually looks decent in a matter of minutes; in a couple days I can make it look even nicer by adding some OneUI flair; over the course of a couple weeks I can add features that, if attempting to implement in "legacy" elements, would make my brain hurt.

And the reason that I get to play with this stuff full time is that I work for a company that stays on the cutting edge, and has clients who know that we do - who, more often than not, came to us precisely because they know that we do. Sorry for the sales pitch embedded in that observation, but I just love that I'm no longer sitting in a cubicle that I've occupied for years, writing code in the same language I was writing when I first arrived, for the same version of Domino they were using when I got there, to solve the same problems that should have gone away as the business evolved... but didn't because it hasn't. But I've learned recently that I'm not good at celebrating - it's much easier to dwell on past failures and regrets, and focus on what I don't have, than to celebrate successes and blessings - so, as one effort in my attempts to improve at that, this is a public thank you to my employer for not only allowing me to do what I enjoy doing, surrounded by some of the brightest members of the Yellowsphere (no, I won't call it a bubble, it's not a bubble), but also paying me enough to keep the creditors from hunting me down. You guys rock.

05/07/2009

How to sync your browser bookmarks and passwords to Domino via XMarks

Category webdav
I'm a big fan of XMarks, previously an extension for Firefox called Foxmarks for synchronizing bookmarks across multiple computers, now a cross-browser (IE and Safari, in addition to Firefox) extension that also allows synchronization of saved passwords... which is a handy feature, but I'm not too keen on storing all my site passwords on their server. While updating my preferences to disable that option, I stumbled upon a setting to "Use own server".

Intrigued, I clicked "Learn More", certain it'd be instructions for integrating it with PHP or Rails... but was pleasantly surprised to see that they support FTP but recommend WebDAV. Heck, I've had WebDAV set up on Ophelia for years. So I tossed a new database out there to store the XMarks data, and a couple minutes later had repointed the 3 laptops I use regularly to the Domino location. Works like a charm. Here's all you have to do:

1. Configure your Domino server to support WebDAV on for at least one DNS address.
2. Choose (or create) a database to store your data, and make sure it's set up correctly for WebDAV (allow design locking, No Access for Anonymous, Designer or above access for the account you'll authenticate as, maximum Internet access set to Designer)
3. In your XMarks settings, enable "Use own server", then specify the URL of a file resource (which doesn't need to exist in the database... it'll be created automatically) for each feature you want to use; for example:
http://dns/path.nsf$Files/xmarks.json
http://dns/path.nsf$Files/passwords.json
(where dns is the DNS address you configured to support WebDAV and path is the location of the database that will store the data)
NOTE: notice there's no slash between .nsf and $Files... while YMMV, I've found that including a slash confuses Domino. It tries to find a view called $Files instead of realizing you're trying to access the database via WebDAV.

That's it. That's all there is to it.

Weird... no code at all? Did I just submit an admin tip? Huh. Okay, then I'll end it with a development tease: I suspect if you replace the above URL syntax with URL's to agents/XPages/custom controls, you could do some crazy fun stuff with the posted JSON... but I'll leave that as an exercise for the reader (<cough>dogear</cough>).

04/29/2009

An IBM commercial I'd love to watch

Category marketing
Nathan posted an interesting insight into the current disparity between the targeting of end users in recent IBM product releases and the targeting of IT management in their marketing approach. In the comments, he refers to collaborative technology as "the great democratizer of the last decade", which got me thinking.

Here in the U.S., our system of government is a representative democracy. This is not a pure democracy in the etymological sense; if it were, it would collapse under its own weight... in a pure democracy, every decision must be approved by the masses and (one assumes) not much ever gets done. Rather, we are a republic: we elect a very tiny group (when one considers that the nation has several hundred million citizens) to make decisions on our behalf.

When those representatives are aware that their constituents are paying attention - most especially when it appears likely that those constituents are seriously considering replacing their representative with an alternative - it's not uncommon for their decisions to more closely reflect the "will of the people". In fact, it's extremely commonplace for an elected official's voting record to suddenly swing toward the center during an election year. That shouldn't be surprising: they're playing the odds; move toward whatever the center happens to be at the time, and you inch toward the magical 51% that lets you keep your job for a little while longer.

Trouble is, apart from the wonks, nobody knows you're moving toward the center... unless you tell them. President Obama was elected because his campaign was able to delude so many ordinary citizens into believing they could make a difference that the delusion became real. While plenty would dispute that the difference those people made was a good one, the assertion remains true: in our system of government, your voice will be heard if enough people are saying the same thing you are. That's why so-called "talking points" are so heavily used by both parties: standardize on the phrasing of the message you want heard, and the subtleties of any argument get drowned out by the bleating of so many supporters who haven't thoroughly examined the underlying implications... or, in some cases, even fact-checked the message.

What does any of that have to do with IBM? Imagine the following commercial:

(shot of smiling end-user in business casual attire)

"I love my email account at work, 'cause it's not just email."

(cut to a 25-second screencam of end-user doing end-userish things... specifically, tasks that can only be performed via the integration between email and business applications that Notes provides and that show off how pretty Notes is now)

"Our company uses Lotus Notes, so I can description of the tasks shown in the screencam, not just send email and schedule meetings. It lets me edit documents, spreadsheets and presentations, send instant messages to colleagues and customers, and access all of the applications and websites I need to do my job. Lotus Notes really is all I need at work."

(cut back to smiling user)

"Can your email account do all that? If not, ask your boss why your company isn't using Lotus Notes..."

(user raises eyebrow meaningfully)

"... or using everything it can do."

(fade to IBM/Lotus logo, then to black)

Imagine if that commercial aired during American Idol, and the next day, every manager at some Exchange shop had 3 of his employees ask why they have to have 8 different Windows applications open just to do their job, when they could alternatively just use Notes. If that commercial kept airing (or others like it soon followed), each of those users would get increasingly annoyed each time they have to perform some occupational task requiring them to launch some application that exists solely for the purpose of performing that one tiny minute task. And maybe they'd complain to their boss again. And again. I guarantee you that, if managers really do get that kind of feedback from their staff, sooner or later IT is going to feel pressure to take a closer look at Notes, including the IT departments already running Notes but still supporting R4 'cause they haven't yet had either the courage or sufficient management backing to embrace the new millennium.

Contact Me

Hire Me

Elsewhere

What the Quote?

"Can't sleep, clowns will eat me."

Unknown

"Just your crib, homes."

Adam Slagle

"No, she's all four-cylinder ugly on the inside."

Laura Tripcony

"It's an enzyme that keeps you from farting when you eat chili."

Devin Olson

"These guys may be bleeding yellow, but I am sweating whiskey."

Bill Buchan

Apparel

Lotus Rocks

I write the code that makes the young girls cry

Current Terror Alert Level

Assorted Linkage

ClustrMap