I dig Dunstan Orchard's blog theme. I especially like his comment alert system and right-nav tabs (main, b-marks, b-roll). There some inspiring stuff here - adding a similar comment alert system and theme are on my Roller wishlist. Now if I could just find time to do them...
Later: Some more cool designs.
The last time I got Raible Designs' business cards was when I first started the company - way back in 1998. I still have a couple boxes left, but with all the networking opportunities in my future - it's about time I got some new ones. So I'm looking for recommendations of good business card designers/printers. Maybe I should host a contest and give away an iPod to the winner? ;-)
As a sidenote, what do you think about putting the cert icons (i.e. MSCE and SCJP) on business cards? I think it was cool when I first got certified, but now it seems pointless. It just takes up space and would probably take away from a nicely designed card.
Adding support for JSTL's Expression Language was fairly easy to do in the Display Tag. It was as simple as adding an ExpressionEvaluator and subclassing the ColumnTag and the TableTag. From there, all that was needed was needed a new TLD to reference these new classes.
So the question is - would it be just as easy to support the OGNL Expression Language? Does it have an ExpressionEvaluator I can write with the same simplicity as the JSTL version? If I could figure that out, I think creating OGNL-aware versions of the displaytag and struts-menu would be a piece of cake. All you'd need to do would be to change you're TLD's URI and you'd be off to the races!
Adrian Lanning sent me an interesting e-mail yesterday. He's looking for a better way to extend Struts. I thought I'd post his message here and see if anyone has ideas.
I am a big struts fan and use it for my projects but I think there is something fundamentally wrong with the design. The real crux of the matter may be that Java is a single-inheritance model and Struts is designed more for multiple-inheritance.
Example 1.
Complexity when trying to use "extensions" to struts that have their own RequestProcessors. Such as my extension for roles (mentioned below) used together with Asqdotcom's ActionPlugin which is a plugin but still uses its own RequestProcessor, plus another hypothetical extension which has it's own RequestProcessor. Basically the only way to use them all is to modify the source of one or two to extend the others which doesn't seem like a good design.
Example 2.
Extending LookupDispatchAction to include per-method validation (set in struts-config.xml). Basically same problem. Need to combine functionality of ValidatorAction and LookupDispatchAction but can't extend from both. Have to modify source. Actually Brandon Goodin wrote this already (I find it very useful). It's called ValidatorLookupDispatchAction.
I know this is a common issue with single-inheritence models/languages. It would be really easy to extend Struts in a multiple-inheritance model.
* THE POINT *
I was just wondering if you knew of a better way to design when dealing with single-inheritance models to avoid problems such as these.
Personally, I don't find the need to extend Struts that much, so this is not much of an issue for me. I think Struts 2.0 will solve many of Struts single-inheritance design by declaring interfaces for all core components. I wonder when 2.0 is roadmapped to ship - sometime in 2006? ;-)
Later: The article, Security in Struts: User Delegation Made Possible, by Werner Ramaeker provides a good example of a Struts extension strategy.