Tapestry Training -- From The Source

Let me help you get your team up to speed in Tapestry ... fast. Visit howardlewisship.com for details on training, mentoring and support!

Monday, March 07, 2005

Back from TheServerSide Symposium

I can't even start to detail everything that's happened in the last few days. Basically, I started my trip by dumping a glass of water into my trusty laptop, which fried the motherboard. Fortunately, I had bought a backup laptop (primarily used by my wife Suzanne) and was able to borrow this for the trip ... the contents of my internal hard drive was eventually recovered by Tech Fusion. I was literally sitting down at my laptop to run my traditional pre-trip backups when this happened and my nearest backups were a couple of weeks out of date.

Viva open source -- most of my development environment was downloadable from the Internet, and my key files (the Presentation Examples) are online.

The actual sessions went quite well; my Tapestry session was a bit different from the rest of the conference, more hands on, as I develop the trusty old Login page. The audience was really into it, asking lots of great questions. JSF Spec Lead Ed Burns was in the front row.

The second session went a little short and we made up for it with more detailed Tapestry and HiveMind questions.

I also worked with Chris Nelson, the creator of Trails. I think Trails will be a very important technology for Tapestry for both practical and marketing reasons. Trails has some unusual use cases that we will extend the APIs to handle more cleanly (for example, Trails needs to "sniff" for pages, based on naming conventions, that may or may not exist).

I spent a good amount of time talking to Ed Burns; he was showing me the internals of the JSF RI and we were comparing notes. I also talked to Rob, Colin and others from the Spring team, particularily about Spring Web Flow. Just from ten minutes of conversation, I believe we spotted a couple of changes to Spring Web Flow that would make it easier to integrate with Tapestry. Ten minutes of face time can be worth a month of emails.

In fact, for me, that was the point of the conference: networking (and a little sales). I lost track of the number of people I talked to about Tapestry and Tapestry training. Now, the TSS attendees are not a representative sample of the J2EE market I think, but what I heard was how many people want to use Tapestry, or at least learn about it. Something about Tapestry does picque many people's interest, and inspire a kind of passion in those that already use it. But the JSF juggernaught is still looming in the background, and I'm continuing to look for ways to better differentiate Tapestry from JSF.

Dion and Ben's Ajax presentation was eye opening for me. Yes, it's technology that's been around for a while ... it's just that a bunch of small things have aligned to make it more practical to do significant client-side work. Tapestry is already well positioned to create "Ajaxian" components and applications because it has two key pieces: 1) sophisticated, dynamic JavaScript generations. 2) an abtraction (engine services) that will support rich communication between the client side and the server side ... without requiring any configuration inside web.xml.

Additionally, I found some time (really, stress relief) to work on code. Big accomplishment was improved line precise exception reporting, where the location is supplemented by the actual source listing (with the offending line highlighted). This is a good idea, but I created (of course) a wildly flexible implementation where adapters for objects can be registerred that are used to output or describe objects. I can see this being helpful when dealing with existing objects that don't implement a decent toString().

I'm busy using this technology to output the Servlet API and other stuff on the Exception page and working towards eliminating the RequestContext object ... everything you'd do with it in Tapestry 3.0 is either methods directly on the IRequestCycle, or has been moved to other services, or is an object (such as the WebRequest or HttpServletRequest) that can be injected into pages, components or services.

Meanwhile, I get to work in a somewhat crippled manner for the next week or so while my laptop is at Dell getting replaced or refurbished. I miss my big, high-resolution screen and my normal keyboard (the feel of the Inspiron 1000 keyboard is "cheap" by comparison with the 8200) and lots of other little things. I also miss about half a gig of RAM and a faster CPU. I'm kind of hoping that Dell replaces my computer with a newer Inspiron (with USB 2.0). But I can squeek by for a little longer like this.

No comments: