Wednesday, October 29, 2008

LinkedIn

Today, I joined the 21st century and created a profile on a social networking site (LinkedIn). I've resisted for a number of years, but the thought that I might be able to recruit through LinkedIn was enough motivation.

Monday, October 27, 2008

On Auto Save

I was just coding up something Eclipse for work and decided I wanted to pop a dialog to ask the user "Do you want to save?" I did a quick Google search to see if I could find the name of dialog I wanted - and instead, ran across this blog post. The author, in a nutshell, through the post and his subsequent comments, argues that asking the user to save is a bad thing and, instead, your program should always be saving - but in such a way that it is possible to roll back the changes.

At first blush, that seems like a really good idea. If the program is always saving, you never need to worry about losing your work, so you never need to stop and think "now I want to save" - and hence can't forget to do it. Likewise, if you discover that you've been going down the wrong path, you can always step back and reverse your changes (just undo until you get back to where you would have preferred to be). Presumably, the program will even reload your undo history when you reload a given document.

Here's the problem. "Save" does more than just commit a set of recent changes to non-volatile storage. It's also an expression of intent that means "and now I've made a meaningful set of changes to which I want to be able to return (in the event of a crash, etc.)." In some circumstances, these two things are equivalent (or very nearly so). For instance, when I'm typing a blog, I might periodically be saving my entry because, after all, any change I've made is meaningful. Sure, I might decide later to back up, but there's no problem if basically every change I make is saved.

This is simply not true in all circumstances. Imagine, instead, a database application with hundreds (or thousands or millions) of users, all of whom are working on pieces of a single, centralized data store. Anne opens a form to edit an entry in one of the records on the database. As she makes changes, she effectively breaks things - while updating field 1 but not having had a chance to update fields 2 and 3, the entry is now in an inconsistent state: its data no longer makes sense and should not - or cannot - be committed back to the database. If it were committed (if the database allowed it), Bob might see some of Anne's changes but not all of them and he might either be thoroughly confused, or take some incorrect action based on the inconsistent data.

Save, then, becomes the mechanism by which Anne says "And now my data is consistent and should be visible to all users of this database." Likewise, should Anne try to close the form through which she is editing the entry, the software well and truly should ask her "are you sure you don't want to save those changes?" Here, save is a clear expression of intent and cannot be serviced with auto save plus versioning.

One final thought: it's tempting to say that the software should ensure that Anne cannot make changes to any entry and in so doing put that entry in an inconsistent state - even temporarily. But that assumes that there is some mechanism by which the software can "guess" at reasonable or correct values for all related fields when any one of them is changed. In the case of a set of related dates (Earliest Launch Time, Latest Launch Time, Preferred Launch Time), this is easily handled. In general, simple solutions cannot be found: when updating code, for instance, how is the software supposed to guess at a correct set of actions to take in response to an arbitrary line being updated? Anne must make the changes she had in mind and then signal to the software that now her changes should be committed and thus should be visible to all users.

Wednesday, October 8, 2008

Presidential-Campaign Lying: Inexcusable

Last night, the second of the three Presidential Debates for 2008 aired. Like the first debate, there were no fireworks, no home runs, and no real difference was made in the campaign. I only recall one truly excellent answer (given by McCain on whether or not Russia would once again be an "Evil Empire"); there was much prevarication and demagoguery.

There was also a lot of lying. Several times during the night, one candidate would say, "John McCain's/Barack Obama's plan for health care/taxes/etc. does X, while my plan does Y." To which the other candidate would say, "Barack Obama's/John McCain's plan for health care/taxes/etc. does U while my plan does W." Clearly, one of them was not telling the truth or was distorting it. Most likely, both of them were, basically, lying.

This is inexcusable. For a whole host of reasons. In our day-to-day dealings with people, we demand, even if we don't always expect, honesty. We demand it of our children, we demand it of our friends, we demand it of our spouses. Honesty is prized. Why, then, do we tolerate it from our politicians? I hear people say all the time that they cannot/do not trust politicians. Political untruths have become a given and, even worse, are viewed as acceptable. Shown a bald-faced lie by one candidate or another, people merely shrug, rather than express indignation.

In past decades, politicians could get away with lying on the campaign trail and lying to audiences in televised, national debates. There was no effective way to fact check candidates' statements as they were being uttered and, even if it was known that a bald-faced lie had been uttered, no effective way to push that information out to the masses.

Today, televised lying should be impossible. With the Internet at our fingertips and the vast pool of knowledge shared by bloggers and the main-stream media, any falsehood uttered by a candidate should be immediately flagged and highlighted; posted in prominent places for all to see. It is truly ridiculous that the majority of Americans simply don't know when they've just been fed a lie.

Here's what I envision. In the next Presidential election, at every event a candidate attends, groups dedicated to fact checking political statements (like FactCheck.org) show up with fast Internet connections and massive screens and, in real-time, fact check the candidate's (or candidates') statements.

Imagine, in a debate format: John McCain claims that his idea to write down mortgages with government money is a new idea, all his own and, immediately, over his head, appears the fact check:

McCain proposed to write down the amount owed by over-mortgaged homeowners and claimed the idea as his own: “It’s my proposal, it's not Sen. Obama's proposal, it's not President Bush's proposal.” But the idea isn’t new. Obama had endorsed something similar two weeks earlier, and authority for the treasury secretary to grant such relief was included in the recently passed $700 billion financial rescue package.
(source: FactCheck.org)


Likewise, Barack Obama states that his health-care plan would lower premiums and, immediately, over his head, appears the fact check:

Obama said his health care plan would lower insurance premiums by up to $2,500 a year. Experts we’ve consulted see little evidence such savings would materialize.
(source: FactCheck.org)


It wouldn't take long for candidates to figure out that lying in such a context is absolutely useless and only serves to clearly paint them, in the eyes of the public, as the mockery of statesmanship they have already become.

Let's face it. In 2008, with the amount of information we have at our fingertips, that candidates can mislead voters through misrepresentation, mangled facts, and outright lies is simply inexcusable. It's about time someone threw this kind of nonsense under the bus.