Tech entrepreneur, executive, and investor; father of eight children; Googler.

Posts from the Desktop Matters Category

I’ll be posting miscellaneous notes related to Desktop Matters on here from time-to-time. This time:

I take away a number of great memories from Desktop Matters 2007. Among them:

  • Seeing many attendees work directly with members of the Swing team to show off their stuff and get help.
  • Watching Richard Bair of SwingLabs and Mike Swingler of Apple’s Swing team sitting together to work on some OS X / Swing related project during the show.
  • Hearing a number of people say, “Wow, nice to finally meet you” or, “Hey, there is a real person at the end of that blog after all…”
  • The looks on so many faces when they saw what WPF and Flex/Apollo are capable of. The community faces a number of challenges moving into the future…

Best of all has been the universally positive feedback from the event, like:

Thank you for putting on the best conference I have been to in a long time!


Wow! Great Conference! We’ve been talking about the stuff we saw with our team. It also gave us some ideas for some things that we are considering making open source (validation framework for example).

I’m grateful that so many members of Sun’s Swing team and Mike Swingler from Apple’s Swing team made it out to the event, sat amongst the attendees, mingled, presented, gathered feedback, and helped make the event such a success.

And to the speakers, thanks for preparing and delivering a great set of talks and lending your charisma to the group, and big thanks to Jay Zimmerman of No Fluff Just Stuff for his excellent services in handling the conference logistics.

Finally, thank you to all who attended and made the event possible. Based on the positive reaction of the attendees, I’ll be seriously considering putting on a Desktop Matters 2008.

I only summarized until around 11:30 am on Friday in my last blog entry on DM, and we kept on going until around 9:30 pm. As one attendee put it, “This is the most intense conference I have ever been to.” That was not entirely a compliment; perhaps I packed things in a little too densely.

Unfortunately, I was too distracted with running the show to have taken good notes for most of the rest of the day, but here are some of the other interesting tidbits I do remember:

  • JSR-295 (Binding for Swing) will open up the code to the public around the end of this month. While there are a number of binding systems out there, the distinct feature of the JSR is the Expression Language, permitting very flexible binding.
  • The Glazed Lists presentation was awesome. Kudos to Jesse and James for putting on a great show and demonstrating their powerful system of chaining observable lists together.
  • I got distracted during Wolf’s presentation on SwiXML, but managed to learn that it now supports injection of components into private members (used to require them to be public). Sorry Wolf for this pitiful summary of what I’ve heard was a great talk. (SwiXML is of course the best way to represent Swing UIs as XML that I know of).
  • Tim Boudreau of NetBeans showed off a Photoshop clone (minus many features, of course) built on the NetBeans platform. He also announced an initiative to create a standard around a docking framework, making the point that it ought to be easy to change window management in applications. I’ve known Tim for a while now and was very happy he could be part of the show. His presentation was top notch.
  • Etienne Studer showed off IDEA’s new GUI builder, but unfortunately, I missed most of this talk. I heard quite a few folks comment on how good he was with IDEA; I’d like to compete head-to-head sometime! 😉
  • I got a chance to step in for Karl Tauber of FormDev Software and show off JFormDesigner. I demo’d my favorite features: excellent FormLayout support and the ability to change layout managers and morph components. JFormDesigner 3.1’s new animated transitions got a lot of “oohs” and “aahs”. 🙂
  • Chet impressed everyone with his timing framework and a demo of many effects put together on top of the framework. I gave Chet a hard time the rest of the conference by comparing his framework to Microsoft WPF and Adobe Flex’s built-in effects, but in all seriousness, his work is enabling a new generation of rich Swing.
  • Kirill Grouchnikov compared the advantages of implementing “paint-over” effects using the glass pane (or layered pane) versus using UI delegates. He demonstrated a “spring-loaded” UI effect (where clicking / mousing over an image causes it to spring towards the user) not by using the glass pane but by getting the UI delegate of the component containing the image and all surrounding component delegates to render a portion of the effect. The big win, he explained, was that you don’t have to worry about whether the user has already installed their own glass pane and you can encapsulate the effect inside the look-and-feel. Plus, the contents beneath the effect can be rendered on top of the effect, ensuring, for example, that the text accompanying the image that is springing will always be clear. There was some controversy about whether the advantages outweighed the disadvantages, but controversy is a good thing.
  • Alex Ruiz and Yvonne Wong demonstrated how to test Swing UIs using TestNG and Abbot together. Part of their talk involved a custom framework they created that, in addition to making it easy to use Abbot from TestNG, includes some general purpose mechanisms like a new way to do assertions using the invocation chaining idiom (e.g., assertThat(object).isEqualTo(object2).isLessThan(10) etc). Very neat.
  • Scott Delap and Kai Toedter talked about Eclipse RCP. As modular architectures become more popular, its very interesting to see how RCP makes that possible.
  • Eitan Suez delivered a powerful presentation on his jMatter framework. I haven’t seen a better talk than Eitan’s for a long time. He mixed humor, philosphy, live coding, and compelling examples along with handing out jMatter books (he actually has documented his open-source project very well) and walking throughout the audience. And of course, the technical content of the talk was just great: a framework that makes it possible for simple domain objects to automatically be decorated into sophisticated business user interfaces (i.e., a naked object framework).
  • We wrapped up the evening with talks from Microsoft and Adobe updating us on their latest tech. Was eye-opening for a lot of people to see what WPF and Flex/Apollo are capable of, and I think provided a great challenge for both Sun and the community.

One of my favorite parts of the evening was having the Sun Swing team spend nearly 45 minutes asking the audience for feedback on specific features they were considering for Java 7. I haven’t been to a show where attendees have been as interactive back to the speakers as they were here.

Its been a busy — an informative — day so far at Desktop Matters. Jasper Potts started out the day with a demo of the state of Nimbus so far; he’s got quite a bit of it implemented, but a ton of work remains. We chatting a bit about the state of frameworks in Swing, and Hans picked up on that discussion with an update on the Application Framework JSR.

Jim Moore talked about the Spring RCP project. This was particularly interesting because Spring RCP is used by “over a hundred large companies” but there are no official releases and the documentation is sorely lacking, so it hasn’t gotten as much attention as it might. Jim showed off a lot of the features Spring RCP developers get for free, like binding, validation, Acegi integration, Maven2 project management, and so forth. He talked about their Spring integration for injection, modularity, and so forth. However, he didn’t specify any kind of roadmap towards a 1.0 release and was ambiguous about Interface21’s plans to back Spring RCP in any official way. So, for me it remains an interesting project with a lot of depth but a touch radioactive.

Etienne Studer representing Canoo talked a lot their UltraLightClient solution which is primarily about a way to distribute very small but fully rich Swing clients because a large amount of the processing occurs on the server. So, great way to have very small Java Web Start or Applets — and a great way to have distribution problems handled automatically.

The most exciting news of the morning was that JIDE is open-sourcing about a 1/3 of their code, or 100k loc of Swing utilities and helper components. Very cool news. I’ve used JIDE’s stuff and they add a ton of very useful stuff to the Swing core classes. They also announced a new “container-management” application framework whose most useful feature was a “DesktopLookAndFeel” — a look-and-feel that encapsulates a large number of the individual platform look-and-feel guidelines. However, they leave layout-specific adherence to UI designers.

More to come…

NOTE: Check out this newer blog entry for more details on Nimbus and for easier-to-see screenshots.

At least a year ago, perhaps longer, some of my friends at Sun showed me the designs for a custom look Sun had designed for the Java Desktop System called Nimbus. At the time I was advocating that Sun create a “frickin’ cool amazing cross-platform look-and-feel” and I was impressed at how well Nimbus could fit that bill — or at least how much better it was than Metal / Ocean.

Back then, Sun had no plans to create a Swing look-and-feel around Nimbus. I’m pleased to say that work is now under way to do just that. The Swing Team and I have partnered to create an open-source project around an effort to take the detailed specifications of Nimbus (along with an existing implemention of Nimbus as a GTK theme as a guide) and implement it as a Swing look-and-feel (actually, a Synth skin).

Experienced Swing UI wizards like Jasper Potts (of Xerto fame) and Romain Guy (who needs no introduction), and popular independent software vendors FormDev Software and JIDE Software have already begun work to support Nimbus. Jasper has by far made the most significant contribution to the coding effort, having implementing the majority of the components in the spec already.

I’ll be posting a bit more info on Nimbus, but for now, here are a few screen shots of Nimbus application mock-ups and some of the specs.

StarOffice Mockup of Nimbus
Normal Size Widgets

Smaller Widgets

In addition to Richard’s talk, Chet Haase and Hans Muller gave a great talk summarizing the state of Swing and its near future. Big take-aways for me from their talk was that Sun is really energized about solving a lot of the problems we’ve started to take for granted as being part of Java desktop (big JRE, slow start-up time, poor support for audio and media, etc.). Very exciting to see Java 1.6 give so much to desktop Java and see an ambitious plan for 1.7.

We also had a great Q&A session with Chet, Shannon Hickey, Brian Beck (Swing Team Manager), Richard Bair, Chris Campbell, Dmitri Trembovetski (Java2D engineer), and Andrey Pikalev (manager of Russia AWT team) — and special guest Mike Swingler from Apple’s Java Desktop team. Mike was at the show as an attendee and contributed a great deal to the panel answering OS X specific questions and giving input during the sessions as well.

The big highlights of day one was seeing a great vision for Mustang from Chet and Hans in addition to finally seeing the light at the end of the tunnel for usable stuff from SwingLabs, after years of knowing there was good stuff in there but not knowing where to begin, etc. I have high hopes for the forthcoming Dev Packs. I was a little disappointed that Richard was advocating that other folks can pick and choose from SwingLabs and create their own “Pack Distributions” — because I want FEWER unnecessary choices in my life, not more — but still, very cool stuff.

The party at the end of the day was a great chance to chat up a lot of folks I hadn’t seen for a while as the event organizer it may be a bit self-serving to say there was a positive buzz in the air, I am pleasantly surprised to see all the energy and excitement in this space. I’m very much looking forward to Day Two. And I’m so happy Nimbus is finally out of the bag.

Richard Bair, the SwingLabs Lead, updated us on the state of SwingLabs.

Dev Packs
Richard announced a SwingLabs Dev Pack concept. The idea is that includes all of the stable good stuff from SwingLabs in a way that can be used for production.

They are planning that the packs will work for 1.5, 1.6, and of course future releases. The packs will use JDK stuff when its available; will bundle back-ports as necessary so that the packs work seamlessly across versions.

A Dev Pack M1 and M2 releases were announced and a future roadmap proposed for packs beyond that. I’ll come back and fill in what M1 and M2 will include, but for future releases, they are considering:
– client-side cache management
– XHTML and PDF renderers
– Binding and App Frameworks (JSR-295 and JSR-296)
– Nimbus
A more formal announcement of the Dev Pack stuff will come soon.

SwingX tour
– Painters: an easy way to paint effects on a component
– Abstract Bean: an easy way to add observability to Swing
– JXErrorPane: a nice, word-wrapping error dialog with a “more details” option and an option to send the error message someplace. Also integrates with logging systems and includes a “fatal” error that forces the user to quit the application.
– JXHeader: Nice looking headers a la Eclipse and Romain’s demos
– JXStatusBar: This is important because status bars often have a particular look on the native platforms and so SwingX can provide the customizations by default.
– JXFrame: Makes common JFrame tasks easier, such as adding tool bars, menu bars, status bars, a wait pane, and an interceptor that receives previews of all key events. The wait pane lets you install an effect that blocks the user interface while a background job processes. It doesn’t use the glass pane, it uses the top layer of a JLayeredPane.
– JXGraph: Don’t get excited, its a mathematical grid that almost no one cares about. But it does look pretty.
– JXHyperlink: Hyperlink label that comes with renderers that work in trees and tables, etc.
– JXLoginPane: Application login screen. Looks pretty nice, nothing too fancy. Includes an API for a login service and handles threading automatically.
– JXMultiSplitPane: Hans’ new splitter thing.
– JXTable: Tons of new table features. My favorite is the column control widget that lets users manipulate the columns at run-time. Includes filtering, sorting, highlighting, etc.
– JXTaskPane: Collapsible task panes with “awesome” visual effects.
– JXTitledPanel: A cool customizable sort of internal titled border thingy that’s similar to the old JGoodies thing but with painter extensions and ability to add components to the titlebar, etc.

Graphics Utilities from Aerith
– Morphing2D: Morphs one Java2D shape into another (a la Flash “tweening”)
– Compositing with blending modes, color utilities, graphics utilities, and much more — couldn’t keep up. But basically all the cool stuff from the Aerith demo have been generalized into toolkit features. This looks really exciting.

SwingX-WS: “APIs for writing web-aware rich clients”
– SimpleDocument extends JAXP DOM document class and adds convenience features for XPath, creating a new Document, parsing an in-memory string as an HTML document easily, enhanced For Loop support for NodeLists. Its a usability layer on top of JAXP, which is very cool and funny to see coming from the Desktop team.
– HTTP wrappers in the org.jdesktop.http package. Using the new JDK6 enhancements that include a moderately powerful HTTP client out of the box (cookie tracking, etc.). Adds a bunch of other cool things, like ignoring cert errors in development mode when you want to, and so forth. “Tuned for common use cases.” The API does look very simple, especially for doing post requests and so forth.
– XmlHttpRequest and JsonHttpRequest. Goal here is to provide an API that web developers will find familiar in the Swing world — so the API is exactly the same as the browsers. Convenience subclasses return more than just XHR’s familiar DOM or String objects (in addition to Json, there’s HtmlHttpRequest and SoapHttpRequest).
– Convenience classes for dealing with HTML forms: org.jdesktop.html.form.
Q: “What’s the state of integration with an embedded browser component?”
A: Right now, you can send JavaScript to the embedded browser, but you can’t read values from it. An audience member mentioned that third-party components let you communicate with an embedded browser (like JNIWrapper).

We’re building Dev Packs, but this is just my subset of SwingLabs that I find interesting: there’s a ton of other stuff in there, and if you want a different pack, build your own “distro”. We’ll link to it and promote it. We can take all kinds of code contributions and do all kinds of weird stuff.