The morning was partially taken up by the usual last-day denoument at the hotel. I will sometimes not leave until the day after just because this detracts so much from the experience of whereever I am.
I ended up at the Adobe offices with James (because of his continuing perfect storm of bad power supply experiences), where we were going to work on my Apollo app which will be the delivery system for the fourth edition of the Hands-On Java CD. Although we only ended up spending a few minutes working on the actual application, the Apollo tools themselves (which you can download at Flex.org) installed seamlessly; you end up with a new selection in "File|New" in Flexbuilder for creating an Apollo app, and everything else is pretty much the same except that now you have more functionality, such as access to local files. This looks very promising.
We went to lunch with about a dozen of the core Flex team, which was quite entertaining and informative. One of the compiler guys, Jono, gave me his favorite line of Actionscript:
var application:Application = Application(Application.application);
This apparently brings the application into scope so that FlexBuilder will then show you everything possible for that application object if you say application. (the '.' brings up intelligent completion).
I went to my only session of the week, Martin Odersky's on Scala. The session did nothing to damp my interest in the language, which in my mind continues to be the front-runner candidate for the next statically-compiled language after Java. In general it feels like it's much more powerful and significantly higher-level than Java. Martin feels to me like he is trying to serve the programmer by creating a cleaner, more powerful language that enables us rather than telling us what to do and how to think.
The collection of people we had in our local orbit for the talk was pretty interesting, and included Brian Goetz, Josh Bloch, Bill Venners and Elliotte Rusty Harold. Would have been fun to have had our own little open-spaces discussion.
Going to a session felt a little like lines at Disneyland. You swipe your pass over a reader and it knows who you are. Oddly, when you stick the same pass into a public Sunray terminal, it doesn't know who you are. This would be an opportunity to be really impressive and restore your desktop to what it was the last time you were there. In fact, wasn't there a big deal about doing this a few years ago, where you could just move around and carry everything on a card just like the ones we had at the conference? Someone observed that everyone is carrying computers with them anyway, so it would have been more useful to have had at least some power strips and space for notebooks.
In fact, power plugs were surprisingly spare at a conference about programming. In contrast, the Python conference (which is a user-organized conference and this probably has a lot to do with the focus being on users) has power strips all over the place. The contrast between Pycon and Java One is quite dramatic. Pycon feels like it's totally about the attendees. Java One feels like it's about someone other than the attendees. I spent something like 8 years as a senior advisory board member on the Software Development Conference, creating both the C++ and Java tracks for that conference, and I know how skewed the thinking can get. People can start to casually talk about delivering attendees to vendor booths, as if attendees were some commodity to be bought, sold, and manipulated. I have personally always felt like the attendee experience is the heart and soul of a conference, so this kind of thinking is short-term and self-defeating. I don't really fault the people who work on Java One, since the agenda is set from the top. But it really emphasizes how important it is to pay attention to all the subtle nuances and forces involved in designing a conference. If you have other agendas, they should be explicit so they can be managed; if they are hidden or you try to pretend they aren't there, then they come out as perversions and skew the experience -- they can easily end up being the eventual death of a conference. This is one reason I like open spaces conferences so much. I spend about 45 minutes at the beginning of a conference explaining how it works, then I get out of the way and hand the conference over to the attendees. Even if I do have a hidden agenda lurking in the depths of my subconscious, it doesn't matter because the conference goes where everyone wants it to go, and I become another attendee. This is not only much more relaxing because I don't have to "make things happen," but it provides a far better experience for everyone. But it's awfully hard to do if you are addicted to control, because open spaces are all about letting go; in my experience the more I let go the better it gets.
Other people have blogged about the amazing missed opportunity represented by the Java One scheduling system. This system is a constant reminder of how bad a user interface can be. It's both an assault and an insult that says "we care so little about your experience that we are going to force you to go through this time-wasting process." Even worse, it shouts out that creating good user experiences is actually much too hard using Swing, no matter how much effort Sun has put into arguing otherwise. If Swing was easy, why would this awful scheduling system have been inflicted on tens of thousands of the language's staunchest advocates -- subliminally telling them not to use Swing -- for the past few years?
For some reason I had the impression that all the sessions were being videotaped and turned into webcasts. Probably because it's the most obvious thing in the world to do. But this seems not to be the case. In fact, it doesn't even appear that the technical sessions are being turned into podcasts. Another missed opportunity, especially since the session podcasts from the Java Posse Roundup seem to be generating a lot of buzz about next year's conference.
Bruce, could you patch my name in the post? It's "Jono" (phonetically, you are right on!) :-)
That line of code is a real beast. Failing to justify correct usage of the word 'irony'... the dynamic nature of AS3 is very powerful, but as soon as you start using static typing in the presence of Object, you need to write obnoxiously verbose lines like above.
I mean, it works... and it's pretty funny that you can say something meaningful by typing the same word five times in a row. Working on framework code, I personally like to follow it with:
<code> // I'm just being obnoxious here... but !! turns off the coercion warning about Application to Boolean! assert(!!application); </code>
For those paying close attention, assert is not in ActionScript (yet?), but I like to write them in anyway, assuming they will exist one day.