I use Gmail for my personal email. A while back, Google added some more themes for Gmail and, at some point, picked the one called, "Tree." A few weeks ago, I noticed something. Drops of water on my screen. I quickly figured out that they were part of the GMail interface. It appears that this theme (and others) are sensitive to the weather and change accordingly. I think that is so cool.
Now, this effect is simply eye candy. There is no additional functionality, no improved usability. Also, I can look out the window and see that it's raining. The changing theme is just something cool to look at, that's all. But, it is cool.
I like the effect for a couple of reasons. It makes a connection between my online world and my real world, worlds that I have mentally kept distinct and separate, subtly blurring them or merging them. Also, the "how'd they do that" factor appeals to the geek in me. It's a cool mash-up (composite,) determining my location (by IP? by my profile?) and pulling the weather report for that area to determine the images to display (the theme does show the sun on sunny days, too.)
I used to dismiss "features" like this as unimportant. Over time, however, I have come to see the value of eye-candy. Certainly, as a programmer, I place the highest importance on functionality and usability. Still, there is value in clean elegance and beauty and, in the right context, even whimsy.
|
Gmail Eye Candy
|
|
|
Java Add-ins for Domino
|
Consider a database technology in which:
- The datastore is semi-structured, document-based, and not relational.
- Documents are the primary unit of data and consist of any number of fields and attachments.
- Each document is identified by a unique ID.
- The databases can be distributed (i.e., replicated,) including support for partial replicas.
- Replication includes bi-directional conflict detection and management.
Sounds like Notes, right? I thought so, too. But, I'm not talking about Notes. I'm describing CouchDB. I found the introduction and the technical overview to be quite interesting.
Here are some more similarities to Notes:
- Servers host named databases, which store these documents.
- Documents include metadata that’s maintained by the database system.
- Document fields are uniquely named and contain values of varying types.
- Documents are stored in a flat address space.
- Databases can be compacted and are available during compaction.
- The database has views (which are design documents that can replicate) for displying the semi-structured documents
- Documents can be protected so that are only viewable by listed users, called "readers."
But, I'm not the only one. IBM is interested, too. In fact, they are paying its creator and all around Notes good guy, Damien Katz, to keep working on it.
Seen in this context, along with the similarities, CouchDB offers what appear to be "fixes" for some of Notes' shortcomings:
- The CouchDB file layout and commitment system features all Atomic Consistent Isolated Durable (ACID) properties.
- The database file is always in a consistent state.
- Excepting the header area, consistency checks or fix-ups after a crash or a power failure are never necessary.
- The views can be read and queried simultaneously while being also being refreshed.
- Database readers are never locked out and never have to wait on writers or other readers.
- Any number of clients can be reading documents without being locked out or interrupted by concurrent updates, even on the same document.
- CouchDB provides a RESTful HTTP API for reading and updating (add, edit, delete) database documents.
<TotalSpeculation wild="true">
Since IBM has abandoned DB2 as an alternative Notes datastore and have committed to making NSF the best and only store for Notes data, I wonder if CouchDB—with its striking similarities to NSF and its tactical performance, stability, and scalability advantages—might not form the basis for a new NSF Subsystem. Can we say, "NSF-Next"?
</TotalSpeculation>
What do you think?
Updated: Based on a comment.
|
Is CouchDB the New NSF?
|
How do you abbreviate memory (or storage) sizes? For example, which of these would you say best describes 2,512,555,869 bytes?
- 2.51 GB
- 2.34 GB
- 2.34 GiB
Before I tell you the correct answer, let's look at what is different about these abbreviations:
- 2.51 GB—This value, you might have guessed, is obtained by dividing the value in bytes by 10^9, which is 1,000,000,000 (one billion or one thousand million, if you prefer) and appending the "gigabyte" units, GB.
- 2.34 GB—We arrive at this value by dividing the number of bytes by 1,024^3 (or 2^30 or 1,073,741,824) and using the same units as a.
- 2.34 GiB—The value is determined exactly like b., but the units, GiB, are different.
So which one is correct? Here is what Wikipedia has to say on the subject:
- 1,000,000,000 bytes or [ 10^9 ] bytes is the official definition, based on the metric system (SI) of prefixes for multiples. It is used in telecommunications for network speeds and traffic volume and by most computer storage manufacturers for capacities of hard disks and flash drives... The Linux kernel also uses this definition.
- 1,073,741,824 bytes, equal to [ 1024^3 ], or [ 2 ^ 30 ] bytes is the interpretation commonly used for computer memory and often file sizes. Microsoft uses this definition to display hard drive sizes. Since 1999, the [ International Electrotechnical Commission ("IEC" )] has defined this quantity as gibibyte (abbreviated GiB) and most standards bodies now recommend this usage.
Somehow, I am not surprised that the storage manufacturers would favor the first definition. This gives the illusion of larger drive capacities, if the reader assumes the 2^30 method of calculation. But maybe, that's just my suspicious nature, since the difference is less than 2.3%.
I wondered why, though, I hadn't seen more wide-spread use of gibibyte (GiB), if this has been the "standard" for the past ten years. The article goes on to explain.
The IEC's recommendations are frequently ignored amongst computer professionals, and "gigabyte" is used colloquially to mean [ 1024^3 ] bytes.
If we assume that the IEC has any authority to make these determinations, then we are left in an interesting pickle: Choosing between "right" and "popular." If we take our stand on principle and use the standard, we may confuse our customers. If we go with the flow, then why have a standard at all?
How do you abbreviate your bytes?
Incidentally, the Notes 8.0 Mail template goes for the popular:

P.S.: I hate fighting editors. This: 1,024<sup>3</sup> is perfectly valid HTML. Leave it alone!
|
How do you abbreviate your bytes?
|
I believe that this article will demonstrate my thinking on the "better than good enough" approach to application development.
This is a pet peeve of mine: "1 documents". Say it out loud. To me, it's like listening to the screech of fingernails on a chalkboard to hear these words uttered. But that's okay, actually, since when does anyone actually say "one documents?" I'm pretty sure I have never heard these words spoken, not even by my three-year-old nephew. But, I read those words (and others like them) all too often in "good enough" software.
Of course, what we should expect to read are phrases like:
- "You have 0 unread documents"
- "You have 1 unread document"
- "You have 2 unread documents"
- ... etc.
And, by the way, dodging this issue by writing "You have 1 unread document(s)"... well, that just isn't good enough for me.
The code to accomplish this the "better than" way is trivial. All it requires is a certain attention to detail and a desire to do better than good enough.
Here are a few incomplete code segments to demonstrate what I mean:
C++
string strEnd( intCount == 1 ? "" : "s" ); cout << "You have " << intCount << " unread document" << strEnd << endl;
LotusScript
If intCount = 1 Then strEnd$ = "" Else strEnd$ = "s" Print "You have " + Format$( intCount, "#,##0" ) + " unread document" + strEnd$
Formula
tEnd := @If( tCount = 1; ""; "s" ); tMsg := "You have " + @Text( tCount ) + " unread document" + tEnd; @Prompt( [Ok]; "Information - " + @DbTitle; tMsg );
(In languages other than English, you would need to modify the code, of course, but the concepts should be adaptable.)
But, let's get real. Is this such a big issue? No, not really. Will this make or break your application? Probably not. So, why make such a big deal about "You have 1 unread documents?"
Mostly, because I'm a little anal that way. But, seriously, attention to details—details like doing better than "1 documents"—collectively do make or break our applications.
|
You have 1 unread documents
|
This will be my professional blog. I have a personal one and I have guest-posted to our company blog. With this blog, I'm joining the rest of my team who have also jumped into this "web logging" thing.
So, "better than good enough." What does that mean?
For me, this blog's title describes a facet of my work ethic. That is not to say that I feel that I am better than anything or anyone. No, not in the least. What it does mean is that I don't tolerate a "that's good enough" approach to my own work. I drive myself to get it right. I strive to do the best I can.
That's why I admire the gurus in my profession. Because of their generosity, I learn from them and can improve what I do. With this blog, I plan to imitate them and share what I've picked up over the years (as non-guru-ish as those things might be) and you can do the same in your comments, if you like. We can be "better than good enough" together.
Of course, the products or projects we're working on need to be released or delivered at some point. As I look at mine, even if they are not perfect, as long as they are better than good enough, I can live with that.
|
Better than Good Enough
|