First session of the last day was, of course, DWR & Spring by Bram Smeets from Interface21, the Spring guys. Unfortunately it took him 40 minutes to rehash pretty much what Joe Walker talked about yesterday. He then spent another 10 minutes (no, scratch that, 15 minutes) describing Spring, POJOs, etc. Very disappointing! When he finally started talking about the DWR/Spring integration, then he rushed over the slides so fast it was really hard to grasp how things worked. I did see, though, that they use the built in Script.aculo.us auto-completer for their own auto-completion.
Second session for me was Simplified Ajax Development in Java with ICEFaces by Ted Goddard. Very few people listening, about 20. Looks pretty interesting, and the presentation was very good. Built on top of JSF. Does both Ajax and Comet/Reverse Ajax. If you have massive numers of users hooked on Comet updates from the server, then you need to have one server thread serving several end users. The way ICEFaces does this is through a commercial server you have to pay for. In that respect they do the same thing as Trapets from Sweden. The problem, according to Ted, is that this Comet functionality isn't possible to implement with standard compliant Servlets. Or, rather, it can't scale unless you break compatibility. So, does this mean DWR Reverse Ajax doesn't scale?
He showed drag-and-drop demos using Sun Java Studio Creator, so it seems like the ICEFaces JSF components works well with it.
The after lunch keynote was by Brendan Eich, the creator of JavaScript. He mainly talked about what is coming in JavaScript 2.0:
- A sound type system
- Namespaces and packages
- Block scope, block statements and expressions
- Destructuring assignment (what is that?)
- Iterators, generators, array comprehensions (Pythonic, which means, I think, how it is done in Python)
- No more primitive types, i.e. true, false, 42 etc will be real objects
- Type annotations: var x : String = y; // Converts y to a String
- Parametric types !! Array[[T]] ((Quote: ASCII doesn't have enough bracket characters...))
- Classes and Interfaces
- let instead of var for declaring real local variables
- ...... (too much for me to type fast enough)
Last session for me was Designing for Ajax by Bill Scott at Yahoo. Went through the patterns library they have released at Yahoo. Very impressing, really. They aren't software patterns, but interaction patterns.
I think it is fair to say that studying this patterns library from Yahoo is the best way to get up to speed as an Ajax designer.
Various notes:
- Use direct editing on page content
- Provide in-context tools
- Use drag and drop where appropriate
- Design for immediacy
- Make sure the Ajax feedback isn't distracting
- Use feedback to boost confidence
- Let the user iterate where possible
- Keep the user engaged
- Use live-previews
- Keep feedback focused
- Don't make the user afraid to explore
- Rediscover the hover
- Endless scrolling
- Every page jump is a mental speed bump
- Show state change
- Concentrate on what the user's mental model is
- ...
Fridays Expert Panel Discussion didn't instill much enthusiasm. Random questions, random answers.
Finally, after dinner, we had Jesse James Garrett's keynote. He coined the acronym Ajax, as most of you probably know. He didn't mention Wittgenstein once, which was a bummer. Anyway, to him, you're using Ajax if
- You use an asynchronous interaction model, and
- You use browser-native technologies
Various trivia at the end of the conference:
- Picked up from comments to a blog; Stay away from Dojo, since the documentation is abysmal.
- We're about 475 people at the conference, not 300 as I stated before.
- Hey, I won an IDEA IntelliJ personal license for version 5.1, worth $149! I was just about to buy one, so that was great.
- Generating JavaScript on the server and sending it to the server to be executed. Think about that for a moment! The possibilities that it opens up, and think of all the new things we need to learn...
- Comet, i.e. keeping HTTP sessions open so that you get what is almost the same as real server push. In practice it means our servers can totally drive our web browser clients!