-
Get a monthly update on best practices for delivering successful software.
“I’m sick of users,” announced Josh Bernoff in
a recent blog entry, leading one to initially believe that he has joined the
ranks of indifferent (or outright hostile) developers, clients, and other uninterested
parties reluctantly associated with producing applications and websites. However,
Bernoff’s distaste is semantic, not social. He argues that the term “user”
emphasizes technology over relationships and encourages a flattened and skewed
view of the people interacting with the products. He challenges the readers to “try,
just for a day, to stop using this word. You’ll be amazed at how differently
you think about the world.”
I'm getting a bit more selective in which Ajax frameworks and libraries I give more than a passing thought. There are just too many of them out there, like weeds after the desert rain. For a framework to be worth attention, it has to have at least one of the following going for it:
I'm sure we're all familiar with the FURPS acronym (Functionality, Usability, Reliability, Performance, Supportability). The last one, "supportability," is an important one that often gets overlooked. Essentially, how difficult or expensive will the system be to support over time? So perhaps there is a fifth reason, supportability. That may be hard to gauge in a marketplace of libraries and frameworks that is changing so quickly; a framework that is hot today may be supplanted or abandoned tomorrow. So how about a proxy: a framework that developers are absolutely gaga over?
One of the soup to nuts frameworks I haven't mentioned previously is Ext JS. What is Ext JS? From the FAQ:
Ext is a client-side, JavaScript framework for building web applications. In early 2006, Jack Slocum began working on a set of extension utilities for the Yahoo! User Interface (YUI) library. These extensions were quickly organized into an independent library of code and distributed under the name "yui-ext." In the fall of 2006, Jack released version .33 of yui-ext, which turned out to be the final version of the code under that name (and under the open source BSD license). By the end of the year, the library had gained so much in popularity that the name was changed simply to Ext, a reflection of its maturity and independence as a framework. A company was formed in early 2007, and Ext is now dual-licensed under the LGPL and a commercial license. The library officially hit version 1.0 on April 1, 2007.
So, an extension of YUI, but now it's own thing. Even better, Ext JS runs on top of other Ajax libraries and you can pick your favorite one, Prototype, YUI or JQuery.
Touching back to the supportability discussion above, there are some things to like here:
And then there is the enthusiasm factor. All of the developers I've talked to are absolutely gaga about Ext JS. Gaga. That, to me, is a higher recommendation than any feature list. However you feel about Ruby on Rails, the framework has had a salutary effect on development frameworks in general. With it's transformation into a product and services company, few people remember that 37signals started out as a user experience design (UXD) company. They used to be our competition in Chicago.
It took a UXD company to focus on providing good user experiences to developers, not just end users. So, if you're an aspiring framework designer, keep user experience in mind for your developers. What will make their life easier. Maybe then developers will love your framework as much as they love Ext JS.
Now a little sample of Ext JS. Just a simple data grid. The data and layout are handled through different pluggable behaviors. Nice.
I'll have a few more things to say about Ext JS, along with it's use with DWR and AIR.
Topics: Ajax Frameworks, Javascript Libraries
Second
Story Interactive Studios, in its own words, “creates informative and
entertaining interactive experiences in the form of media-rich storytelling
presentations, online collections, interpretive installations, and
database-driven applications.” The company comprises a diverse team of creative artists,
writers, producers, animators and programmers who enjoy a work environment that
boasts both a screening room and a technology lab for experimentation,
prototyping and testing of their projects.
So, a short while ago I wondered what the future of Ajax would be if Javascript ran great in Firefox, but like crap in IE. Well, the Mozilla guys are at it again. Check out this report on the Ajax Experience West keynote over at Ajaxian.com.
Mozilla is taking IronPython and IronRuby produced from Microsoft and mapping it to to Tamarin. This will by in the guise of bytecode translation a la IKVM as they want to avoid forking C# source using Mono C# compiler.
Direct to bytecode, baby! The fact that I predicted this is proof that you don't have to be a genius to predict these things.
Even more exciting is the Screaming Monkey project, which aims to have Tamarin running in other browsers as a <script> tag handler, including IE. Yes! Fast Javascript everywhere. Still, I hear the voice of Bill Gates whispering in my ear, "DOS ain't done til Lotus won't run." (Is it a myth? Se here.)
Technorati Tags: ajax, tamarin, ie, firefox
In reverse engineering the Scriptaculous into GWTaculous, I've done a bit of spelunking and produced a few artifacts to explain Scriptaculous to myself. I thought I'd share one of them -- a sequence diagram for Effects -- in the hopes that someone else will find it useful. The diagram below isn't complete -- it doesn't contain the event calls -- and it doesn't cover the Parallel effects, but it does give a decent overview for anyone trying to understand the Event lifecycle or someone trying to write their own effect.

Technorati Tags: ajax, scriptaculous, gwtaculous
After reading a comment at Ajaxian on my GWT in Action review, I thought I'd mosey on over to the JavaRanch to read their, presumably, harsh review and see why I had totally missed the boat on this book. Well, not so harsh, as it turns out:
I felt that the book was trying to reach too broad an audience. For beginners without an understanding of JavaScript/HTML/DOM, I think it is overwhelming. The book provides "what's new in GWT 1.4", but the book is overkill for someone already using GWT. Most of the time the book treats what happens under the hood of GWT as magic and other times it becomes important. This switching of focus is a bit confusing.
Fair enough. Would this book be on point for a beginner? Maybe not. It's hard for me to say, since I'm not really a beginner in all of these domains. The book is trying to hit a broad audience, and from the preface (since I've started reviewing books, I always read the preface) they say they are targeting everyone from JavaScript developers, to Java server-side developers, to web designers. They add that the reader should have a good understanding of Java classes and packages. That seems to narrow it down to Java developers again. Unlike the authors, I don't think that Java and the use of Eclipse is something you can just sort of pick up as you read along.
Still, I do think the book is a good one. This is not just another Java package or framework; this is a whole new way of writing apps in the browser and the subject is expansive and complex. The book just reflects that -- it isn't just 600 pages of pictures, white space and padding. Could the examples have been more useful and relevant to typical webapp developers? Sure. I point that out in my review, but even with that flaw, I found the book very useful. And in all fairness, focusing on implementing a full-on Spring/Hibernate backend to the GWT app would have easily doubled the size of the book, larded in lots of unnecessary technologies, and given the critics (many of whom are disgruntled JavaScript programmers) even more ammunition.
Some readers will have noted that publish generally positive reviews. That's not because I'm a shill for the publishers, but rather that I put really awful books down pretty early in the process. Generally, books for which I end up publishing reviews are interesting and worth reading. For bad books, I could summarize my review in one sentence: don't waste your time. I guess maybe I should publish a list of the tech books that suck; that could be a long list.
Technorati Tags: ajax, book review, gwt
Any time a hot technology comes along -- and GWT is certainly white-hot -- publishers compete in a mad scramble to get the first books out the door. Often quality suffers. I am happy to report that GWT in Action is a strong effort that doesn't seem to suffer from this quality problem. (That isn't to say there aren't any errors and omissions in the book, just no obvious ones that I've found in my reading of it.) Instead, the book offers a solid, learn-by-example approach to understanding the Google Web Toolkit.
This learn-by-example approach, tied together through the development of a dashboard application over the course of several chapters, strikes, I think, the right balance for a broad audience. This is not the reference "bible" for GWT, though it does contain more reference material in one place than any other source so far, so you'll have to wait for that sort of reference work. But for anyone wanting to get a jump start on GWT, start developing applications, and understand what all the fuss is about, I heartily recommend this book.
The book is organized into 17 chapters, split into four parts: Getting started; Building user interfaces; Advanced techniques; Completing the understanding. So, on to what's in the book, chapter by chapter:
The book does cover many of the new features in GWT 1.4, such as Image Bundling, the new loading mechanism, and the Serializable vs IsSerializable changes. Some of the new widgets, such as the Rich Text Editor, are not covered, however.
As I've said, overall a fine effort. I do have three issues with the book, however. First, there is no mention of the incompatibility between GWT and IE7. Since much of the world's population still uses IE7, that's a major oversight. It would have been nice to at least mention the hack to UserAgent.gwt.xml to make it work for IE7. The other issue is that the rich UI sample Dashboard application really deserved a transactional companion, i.e. some sort of app that illustrates how GWT would function with a more substantial server-side app. That may be a little too much to ask of one book that tries to introduce so many new concepts and ideas already, and there are some online tutorials that provide just that sort of example.
the Finally, testing with JUnit is relegated to the penultimate chapter of the book. Software development is momentum and habit. If you start off developing without unit tests, you will have a hard time incorporating it into your process later on. Testing should have been presented in the first chapter and used throughout in each subsequent chapter, so as to givereader a good grounding in JUnit and GWT.
Still, the three issues certainly don't detract enough from the book to change my overall opinion: definitely read this book.
Technorati Tags: ajax, gwt in action, book review
The iPhone has finally arrived, and I’ve been playing around with it here and there. What can I say; it’s another example of the degree to which Apple’s fanaticism with user experience pays off. As soon as I held it in my hands, I knew that it was going to be fun, just plain fun, to use this thing. How many mobile devices can you say that about. The only ones that come to mind are the gaming devices, Sony PSP, Game Boy, Nintendo DS. I don’t know of any other mobile phones that are actually fun to use.
Two things struck me as key differentiators between the iPhone and the dozens of equivalent products – Smart Phones, PDA’s, etc..--on the market:
First, Apple’s obsession with simplicity is abundantly clear in this device, like none of it’s previous products. This is a culmination, or at least a progression. In a sea of complexity, it seems like they understand modern humanity’s longing for the simple better than anyone, and by a wide margin. The company is quickly becoming the definition of simple technology. Their latest product has only one physical button. Everything else is software. And the software is so simple and inviting, that I’d feel completely confident giving it to my grandmother to use to make a call, or even watch some video, without any instructions.
Also, it’s the little things—the details that would somehow get overlooked in most software—where the iPhone really shines. Things like, the way the screen moves naturally with your finger and comes to a smooth stop—unless your at the end of the scrollable region, in which case it ‘bounces’ up against the edge of the display. Or the way one screen pleasantly fades into the next. Or the way you never seem to need to do any thinking when going from step to step in any process, like sending an email, or sorting you music list. They’ve taken a huge advance in touch screen technology, and, through obsession with user experience, created a true revolution. In anyone else’s hands the iPhone would just be cool, in Apples hands it becomes a paradigm shift.
Just stumbled across this not quite ready Google Maps component for Echo2 over at Sourceforge. Hacim Bengalis over at his blog has taken this work and presents the code changes necessary to getting it to work with Echo2. Basically, he registers his own service (i.e. the stuff that gets run at start time for an Echo2 session, as I recall) that injects the Google Maps Javascript include into the page.
/* add google maps api */ baseDoc.addJavaScriptInclude("js/googleload.js");
If you read French, then this fellow claims to have done it without having to register his own services, i.e. with a stock Echo2.
The solution use the component HttpPaneEx from EchoPointNG (I guess this is standard library for most Echo2 users). This component creates an HTML Iframe in which you can display any HTML pages : even one using GoogleMaps. Next, you need to interact with it. The trick is to use method enqueueCommand and JavaScriptInclude and JavaScriptEval object from Echo2 to trigger javascript from Echo2.
I recall that when I tried this with Echo2 2.0.x, I had issues with the Echo2 client engine capturing events and making the Google maps component do weird things. His tutorial looks extensive; anybody feel up to translating some French?
Technorati Tags: ajax, echo2, google maps
Will Gilbert has contributed a handful of validating form field components. Take RegExTextField, for instance. It will take a regex and, surprise, validate the input against it. Maybe not earth shattering, but handy nonetheless.

Technorati Tags: ajax, echo2, components
Topics: Ajax Components, Echo2
Kenneth Riggio has put together an Echo2 sample app -- a single player Blackjack game.
He was kind enough to put up his source code and even gave a hat tip to my getting started tutorial.
Technorati Tags: ajax, echo2, games, examples
Topics: Ajax Frameworks, Echo2
GWTaculous keeps plodding along a little more. I've got the Parallel effects base class done and am working my way through the simple effects. Highlight and Move are done and Scale is up next.
I've got the original effects on the left hand side for comparison. I'm finding that I have to pull some of the style effects out of Prototype.js. I'm stuffing them in a DOMX class (with the whole browser specific DOMXImpl tree) for possible reusability. I'm not sure of all of the choices I've made there, but that's what refactoring is for.
I've also discovered that the GWT parseDouble() and parseFloat() are not like the Javascript parseFloat(). The Javascript one will slurp up any old crap and try to spit out a number. The Java/GWT variety will barf on invalid strings. One look will tell you why:
public static double parseDouble(String s) throws NumberFormatException { return FloatingDecimal.readJavaFormatString(s).doubleValue();}
The GWT version isn't simply a wrapper around the Javascript version. Yes, this sort of precision in language and library can cost time, but it also avoids errors. Anyhow, lesson learned. Now my Move doesn't go back to the starting point with each click.
Technorati Tags: ajax, gwt, scriptaculous, gwtaculous
Topics: Ajax Frameworks, GWT
Use Cases, User Stories, Functional Specification, Functional Decomposition, ad nauseum
These are all requirements developers, managers, QA and Technical Writers use at various points in the software development life cycle. Whatever you're writing, for whatever purpose, you need to keep it clear, it needs to be concise and it needs to be understandable to more than one audience.
This blog is a show by a couple of examples and comments rather than pithy items you can use immediately.
Here we go with the third Technical Requirements Writing Commandment:
III. Care for Use Cases and Make Them Fruitful to
Multiply
Let's use Use Cases as the example- they can be used in Waterfall and disciplined Agile. You write them like an in-depth User Story and Functional Specifications often include the really high level Use Cases.
Here's an okay example from Alastair Cockburn:
Scope: ATM
Level: User Goal
1. The card gets inserted.
2. The card information gets validated
3. The transaction information gets collected and validated
4. The cash is issued, card returned, cash removed, account debited and screen reset.
The Good:
So what are Scot's beefs with this one?
An okay Example, but improvable.
Here's a really bad one from Cockburn:
(Withdraw Cash) (WEUC)
1. Customer runs ATM card through card reader
2. ATM reads the bank ID and account Number
3. ATM Asks customer whether to proceed in English or Spanish
4. Customer selects language
5. ATM asks for PIN Number and to press ENTER
6. Customer enters PON number and presses ENTER
7. AT presents a list of activities for the Customer to perform
8. Customer selects "withdraw cash"
9. ATM asks customer to say how much to withdraw, in multiples of $5 and to press Enter
(it just continues like this)
The Good:
The Bad:
Our second example raise more questions than it answers. If I were the BA in a traditional shop, I would expect to be answering questions for a week on this. If I were working on an Agile Team, I'd split this into several User Stories for Customer review.
This use case also demands a long series of business rules.
While writing use cases, specifications and the like, consider organizing them, numbering systems and the like. Your readers need to be able to find stuff quickly and your PM needs to track your progress.
In future blogs, I have some thoughts on wikifying the process.
Stay tuned.
Next Up: Commandment IV. Business Rules Made Simple.
This is the second rule of writing. If you do not
completely understand the subject matter, your reader will know you don;t know it within a sentence or two. Here's how to avoid this trap:
-Recognize and ask the questions you need to ask so you understand.
-Make a VISIO diagram- shows gumption and you have something physical to change
-Do the research- the internet and existing documentation can help frame and provide background
-Well, if you're a consultant it might sound stupid to the customer.
* Phrase it to get their buy in- "Help me out here...<insert Question>"
* Look like you're struggling- "I'm having a lot of trouble with <insert Question>
* If you don't understand the answer, rephrase it,
re-address the issue by relating it to something you already know
Consider what process you're starting with your requirements:
Now think about what your reader brings to the table:
Anyone can hide behind long words, buzzwords, jargon and some irrelevant graphics. But the folks who need the material you're providing have extremely limited time and patience.
If you can't explain your topic in simple, easy to digest words, you don't understand it.
Next Up: Use Cases
Business Analysts seem to come from two areas:
Coming from the second group myself, I've often been asked to help neophyte writers improve their skills. Trading writing tips for tech points is a good thing for me since I can abstract and write from today until tomorrow- but unless I understand what I'm writing about, it's more than obvious. Hence my 'quickie writer's course, the Ten Commandments to Writing Technical Requirements.
Here's the First Commandment:
You have three major audiences for and Requirements
Documentation:
Each audience has a different educational and experiential background and their own jargon.
To address each audience's needs, follow these guidelines:
1. Eliminate
jargon. You may know what SQL means,
but the VP of Order Management may not and you do not want to make that person feel inadequate nor do you really want to explain what SQL is- I usually say 'queries the database' and leave it at that.
2. Clearly
and effectively organize and label the elements of your document. We'll get into this very important area in a future blog, suffice it to say here you can get a big head start by:
- Splitting your material into logical groups your reader can easily understand
- Properly labeling each group so your reader can scan the doc to find what s/he wants.
- Use an outline- revise the outline when needed, but use it.
3. Use
consistent terms and phrases throughout the document. Don't call it 'The Application' in one are and 'The System' in another. pick one and stick with it.
4. Eliminate
buzzwords. Don't use 'initiate' when you mean 'start.' Don't use 'terminate' when you mean 'end.' And, one of my pet peeves- 'entitle' is not a fancy word for 'title.' If you are entitled to something- it means you deserve or earned it.
5. Avoid
clauses. If you need to use one, put it at the beginning, but not in the middle since the reader can't parse it that well, or end of a sentence, if you use one clause in a sentence you can put it at the end, but that should be your second choice. See what I mean?
6. Avoid
passive voice- see Commandment V. For now, just remember "Boy paints the fence" is ACTIVE voice and "The fence was painted by the boy" is PASSIVE. Note both sentences mean exactly the same thing. It has nothing to do with verb tense, it has to do with who's doing what in the sentence.
7. When
using the command form, use "must," not "shall."
"Shall" is regal and antiquated. Better yet- ignore all those 'The System must....' statements entirely and just start writing after the word 'must.'
Writing is organized thought. If you can design it, you can
write it. Write it as though you were explaining it in a conversation with your
non-technical parent. Except my mother. Ain't no way that'll happen. In such a case, you do not talk down to them,
but try to make them understand.
This is the first rule of any writing.
Next Up: Knowledge.
Topics: Web/Tech