After Day One
and Day Two
, Day Three was yet another day packed with interesting and varying activities.
- First, I attended Tim and Jarda's session on modular software development on the NetBeans Platform. It was great. All the principles of modeling in the NetBeans world, explained by two of the absolute experts. The finale, where Tim showed his image editor, really wrapped things up well. The specific main insight I got out of the story was that lots of small modules (assuming each covers a functional piece) is better than one large one, in the context of a rich-client application. Not a big surprise there, of course, but it was well illustrated. Each part of Tim's application came from a variety of modules, making it extremely flexible and also making it possible to replace one part with another. I reckon I'll need to rearchitect my music application along these lines. It also allows others to take one module out of your collection and add it to their own, picking and choosing as they please, in the same way one does when assembling an application by taking the IDE's Favorites window and Update Center wizard and so on, but leaving the main parts of the IDE out of one's own application. Really cool how the NetBeans module system allows this.
- Then it was our book signing! I was outside the book store with Jens for about 10 minutes, signing books. Pretty fun. Then Jarda and Tim arrived from their session, and I had to leave to go to my own. But the few brief minutes of book signing were pretty cool. I actually met one or two people, Greg Wonderley was one of them, who I had been in touch with over the years. Vadiraj and Toni also came to have their book signed, so it was a general feel-good situation all round.
- Next was the JFugue session. Since I didn't speak for most of the presentation, and was merely there to testify to the JFugue API's usability, I can say, without heaping praise on myself, that it was up there with the best presentations I have ever attended. Dave Koelle was awesome. He presented the story clearly, coherently, with a touch of humor, and a lot of enthusiasm. The room, containing 136 people, as I later found out, was clearly totally engrossed in his story. I saw many nodding heads when Dave talked about the frustrations of MIDI programming. He had some great slides that showed long code listings of how things are done traditionally and how they are done with the JFugue API. And he played bits of music to illustrate his point, showing how the music was constructed. Then it was my turn and I walked through the application, showing it both on 5.5 and 6.0, mentioning the debt owed to Pierre Matthijs for all his excellent work on the project, while trying to mention NetBeans as little as possible. I didn't want anyone to feel I was pushing NetBeans in any way, which I wasn't trying to do in any way, I simply wanted to push the music application, hoping to get as many people to join the project as possible. One thing I did show was how the application is improved by porting it from 5.5 to 6.0, where one has undocking functionality, as an illustration of the usefulness of framework-based development. I didn't open NetBeans IDE at all, just talked about the applications after launching them from their NetBeans-generated launchers.
And, sitting front and center in the audience was... my hero Elliotte Rusty Harold. That was about as cool as it gets. There were many questions afterwards, even one or two about the application. I later bumped into Inder, who is from the Glassfish team, who said that he'd downloaded the application, during the session, while I was talking about it! On his Mac! And it worked without a hitch! It was funny when he said: "But I couldn't find the Save button... so I couldn't save the music string." Well, guess why? Because I had created that button the night before the presentation and haven't yet committed that change to CVS... :-)
- Then Martin Adamek and I had the long awaited meeting with Graeme Rocher. Creating support for Grails will mostly be pretty simple, I think. Project template for the source structure and hyperlinks for navigation between artifacts with a multiview editor for related pieces, and then a few file templates and bundled samples. That would be a good start and would already cover a lot. Cherry on the cake would be debugging, but we have Martin Krauskopf, who created the NetBeans debugger for Ruby, on our team, so that shouldn't be a problem. The only question is finding the time to work on it. I had bought Graeme's book and got him to sign it. It was cool to see that the book contained a brochure announcing the upcoming Grails conference (in October) with my name quite prominently displayed. We better have a strong story by then, otherwise I'll not have much to present at the conference.
- After that I went to the speaker's room, where I bumped into Ludo, who introduced me to Ken Russell, who is currently working on the NASA World Wind project. He demoed something to me and showed the code. He showed the palette item added to NetBeans IDE which allows everything to happen. I immediately wanted to start writing a tutorial for his scenario. A bit later, he sent me his code and instructions for building it. I got quite far, but the sample was slightly broken due to recent changes made to the JAR by NASA. Then NASA removed the JAR from the site, but it should come back on-line soon, though. I also created a TopComponent, which will open the World Wind demo as a new window in the IDE, or any other NetBeans application, such as the JFugue Music NotePad. It will be awesome. Looks really really cool. Ken Russell talks more about it all in his blog here. Once the JAR is back up, and the code works correctly, the tutorial will explain how to create an application (and a NetBeans TopComponent) with this result:
Just imagine being able to open the above as a window in NetBeans IDE! Making the move from the simple Java application to the NetBeans window is really extremely trivial. And you can zoom into the image, right down to a specific location. The code, from what I've seen, is not extremely dense, the tutorial will be accompanied by a lot of code explanations, which I'm hoping to get from Ken. So watch this space for an announcement within the next day or two.
- Received an e-mail from Michael Nascimento, with the link to the YouTube movie his colleague had created yesterday (refer to my blog entry yesterday for details). It seems part of the story is on YouTube, not all of it, but it looks quite fun. Go http://www.youtube.com/watch?v=TPIAoLdQR5w
to see it! Thanks Michael!
- Then I sat with Tim Boudreau for a bit in the speakers room. He showed me a new refactoring he's working on. He's planning to write a tutorial, to show how to create refactorings with the new API for 6.0. Really looking forward to that. We also talked about other scenarios where refactoring might be useful. I mentioned the layer file, which should be included in refactoring when a class name is changed. Later Jan Lahoda, the main editor engineer for NetBeans, came to the speakers room, and he said that the layer refactoring should have been possible in 5.5 already. I told him it was broken, in that case, and he said that Milos is working on implementing it in 6.0. That means, I assume, that it will be tested and, if it is still broken, it should be fixed as part of the 6.0 enhancements. That would be excellent, since (from everything I've read) the lack of refactoring of the layer file is one of the biggest frustrations with NetBeans module development. Another hole in refactoring land is in the blue blocks in Matisse-generated code. Wonder if anything can be done about that, once we have a tutorial on refactoring to play with.
After all that, and a brief demo of the music application to Jarda, who was very interested, I went back to the hotel for a little break. It felt really strange to not have a presentation to prepare for anymore. I've done four in the last few days, two at NetBeans Day, one at the java.net mini talks, and then the technical session with Dave Koelle. All my presentations were quite small (in fact, the java.net mini talk was my longest presentation!), but a lot of energy and thinking goes into them (although few might suspect it in some cases, when they don't turn out so well). So I was pretty tired and, in fact, didn't wake up until way past midnight, thus missing the last sessions of the day (one of which compared plugin development in NetBeans IDE to Eclipse and to IntelliJ, which I really wanted to see) as well as the closing party. Damn jetlag.