00 SDN Staff Writers & Guests

Friday at the 2009 JavaOne conference capped an intense week of technical sessions and socializing.  I thought I'd have some fun and find out what Javophiles are doing in the world of the arts -- in particular, making music.  Frank D. Greco, familiar to the Java community (he is active in NYJavaSIG) and a long-time musician, led a panel discussion on making music with Java, PAN-5388.

Timing is an important factor in music -- perhaps the most important factor. Prgramming for real-time execution is always a challenge, more so when a virtual machine lies between your code and the hardware that produces sound. And then there's the little issue of garbage collection. It was impressive to learn about the libraries, APIs, and applications that the panel members helped create for composing and performing music both traditional and experimental.

Music From Down Under

Andrew R. Brown of Queensland University of Technology went first, demonstrating Jmusic (http://jmusic.ci.qut.edu.au/) and SoundCipher (http://soundcipher.org/).  

Before he got started, Brown gave us an historical tidbit about the 1950's era computer SCIRAC, which made a clicking sound on an attached speaker when it encountered programming errors.  Programmers discovered that by changing the pace of the error messages they generated, they could use SCIRAC to produce musical pitches. And so computational electronic music was born. In Australia, no less. Who knew?

jMusic is a music composition library, written in Java.  The use of Java was motivated by the fact that much of the programming was to be done by music students, not computer science majors.  Java, even in its 1.0 version, was safer and in many ways easier to use than alternatives.  Java Sound libraries, which made programming for music much easier, were not introduced until Java 1.3.  The jMusic project went public in 1998.

The intent with jMusic was to do things with music that couldn't be done with acoustic instruments.  Brown showed one program written with the library, Melodic Extension, that analyzes a musical phrase and generates an extension, using compositional rules to develop a theme from the phrase. It is designed to provide support and inspiration to those learning the art of melody writing.

Brown wrote another library, SoundCipher (http://soundcipher.org/), that provides an easy way to create music in the Processing development environment.  Processing is an open-source programming language and environment for people who want to program images, animation, and interactions.  He demonstrated SoundCipher with a program that combined generated music with sounds synchronized with objects moving on the screen.

Brown's most impressive demo was a music generator that uses Hindemith-inspired harmonic theory.  Synching to video is accomplished by laying out a timeline of contol envelopes that dynamically determine parameters of the compositional and performance elements of the music.

Bouyed Up By Water Music

Next, Nick Didkovsky, of Columbia University, demonstrated JMSL (http://www.algomusic.com/jmsl/).  JMSL is a Java API for music composition, interactive performance, and intelligent instrument design. With JMSL, the composer-programmer can create standalone musical applications or deploy applets on the web.

Didkovsky demonstrated the JMSL API with an electronic instrument he called the Liminophone.  The Liminophone syncs with coastal data from the buoys around urban waterfronts, generating algorithmic real-time compositions. Each buoy becomes a polyphonic instrument, with a character that changes with very subtle fluctuations every six minutes.  He demonstrated the program with real-time data logged by bouys around the New York City harbor.

Java Meets Jazz

Robert M. Keller, of Harvey Mudd College, then described his Java Meets Jazz academic program.  The centerpiece was Impro-Visor (http://www.cs.hmc.edu/~keller/jazz/improvisor/), a music notation program designed to help jazz musicians compose and hear solos similar to those that might be improvised.  The objective is to improve understanding of solo construction and chord changes in the jazz idiom.  Keller and his collaborators make use of the jMusic library in their work.

Learning To Be a Hero on Guitar

Before the panel took questions, Mat Warman demonstrated JFrets (https://jfrets.dev.java.net/), an interactive guitar teaching and tabbing tool that he uses with his guitar students.  It replaces paper for looking up fingering positions for the chords and lets students do their fingering exercises more easily.

It was great to hear from Java programmers who are using Java to help give free reign to their imaginations -- and to help free up the imaginations of the rest of us!

Related Posting

Listening to Your App <http://blogs.sun.com/javaone2009/entry/listening_to_your_app>

Doug Tidwell is a funny guy. Tidwell, a Senior Software Engineer at IBM and an evangelist for web services and cloud computing technologies, was the presenter for a 2009 JavaOne Conference technical session titled "Using REST and WS* Services in the Cloud". Referring to the rock band responsible for the background music that ended just before he began the session, Tidwell joked "I think it's great that the last thing you hear before I start talking is Garbage." It was funny, unpredictable quotes like this from Tidwell that turned this session from something moderately enlightening to actually entertaining.

As you might have noted from its title, Tidwell's session was about using RESTful or SOAP-based web services in cloud computing. I had hoped that this was going to be an in-depth examination of coding techniques for cloud computing, perhaps one that stepped through one or more coding examples that use the API(s) for cloud computing. It wasn't. It was more of a simple introduction to REST and JAX-RS, the Java API for RESTful Web Services, with some demonstrations of when to use the REST approach versus the SOAP approach to access web services in the cloud.

That's not to say that the session was devoid of content or not worthwhile. Far from it. Here are some of the interesting things I picked up from this session:

  • The cloud is a handy "whipping boy." Tidwell said at the beginning of the session "Throughout this session I will attempt to run code. Of course, if anything goes wrong, I'll blame it on the cloud."
  • Twitter is as useless as I had suspected. Tidwell said that "A friend of mine says that Twitter is great because she can tell you what she had for breakfast without you having to wait for her to blog about it."
  • Although there are probably as many definitions of cloud computing as there are people using or just thinking about it -- Tidwell pointed out that the definition of cloud computing in Wikipedia has been edited over 350 times -- there is a simple definition that makes a lot of sense (at least to me). Tidwell said "To me cloud computing represents less stuff that I have to know." He went on to say that "With the cloud, I can use all sorts of magical infrastructure and architecture without having to know anything about it, without having any expertise with it, and without having any control over it." The bottom line here is that with cloud computing, a developer needs to invest less effort to get the same amount done. Tidwell warned that this aspect of cloud computing needs to be well hidden from management because it let's developers do less while execting to be paid the same amount of money.
  • The utility computing, pay as you go, aspect of the cloud are also important parts of what the cloud means. Tidwell added that "The idea is that I may have 5 servers today. If tomorrow I need 50, it would be nice if magically an extra 45 servers were brought online. If the day after that I only need 7, it would be nice if 43 of those magically go away. So the idea of the cloud is that machines -- virtual machines -- are there when we need it, but when we don't need it, we don't pay for it."
  • Representational State Transfer (REST) is well defined -- it was precisely defined in Chapter 5 of a PHD dissertaton by computer scientist Roy Fielding, but no two people in the world agree on what REST actually is. In a backhand reference to the esoterica in Fielding's highly technical dissertation, Tidwell quipped "Personally, when my daughter was a toddler, I read Chapter 5 to her every night."
  • Zealous proponents of the REST style are called RESTafarians. They mock the SOAP style as being big and bloated. I don't know what SOAP zealots are called -- SOAPheads? Perhaps they mock REST as dangerously simple and unsecure.

But perhaps the most important thing I learned in this session is the answer to the following question: Which style is better to use for web services in cloud computing, REST or SOAP? The answer according to Tidwell is, it depends. Tidwell says that you need to look at your application and figure out which of the two approaches makes better sense. Tidwell proceeded to show the audience a number of applications where one or the other approach makes sense.

A web service that returns a small amount of data is much better suited for the REST approach. The overhead imposed in conforming to the SOAP approach isn't justified if the result is small. On the other hand, if the web service needs to meet some rigorous requirements such as security standards, the SOAP approach is the way to go.

Tidwell demonstrated a number of web services that underscored these points. A service that returns Twitter entries based on a specific hash code -- this is a good candidate for REST because the ratio of input to output using REST for this service is small. A calculator service running in the cloud that divides two numbers -- again, this a good candidate for the REST approach because of the low ratio of input to output. By comparison, an application that requires authorization or encryption of input merits the SOAP approach and the WS* standards that handle things such as authorization and encryption for web services.

All in all, this was a interesting session -- one that underscored some things I already knew, educated me about a number of other things, and made me laugh more than a few times.

Wednesday's Java TV technology panel was moderated by Bill Sheppard, Chief Digital Media Officer, Java Software Group at Sun. The agenda included a Tru2way market update, Blu-ray Disc market update, and a listing of Java TV community resources.

Panelists and topics included

  • Frank Sandoval, principal architect, CableLabs (Tru2way technology),  with an update on cable operators
  • Bill Foote, televangelist, Sun Microsystems
  • Ivar Chan, Blu-ray Software Development manager, Trailer Park
  • Ole Lutjens, Creative Director and Co-founder, MX Entertainment (Blu-ray creative and programming)

Sandoval called Tru2way the consumer-facing brandname for the OpenCable platform defined by CableLabs. OCAP supports both bound and unbound applications, with bound being more appropriate for TV operators (e.g., American Idol voting) and unbound being more for cable operators, installed independently of tv programs.

OCAP application guidelines include user-experience guidelines, application development guidelines, and operational guidelines. An OCAP Reference Implementation, Linux-based, will be released in mid-June. (Like other projects, the release didn't quite make it in time for the JavaOne conference, but will follow closely.)

Sheppard noted that ESPN is planning this year to provide an interactive  sports-picker of some sort, where you can choose which game to follow.

Ivar Chan then discussed the online comic-book generator for a Hellboy 2 comic book. The online generator's menu options let users choose, create, write, and publish a Hellboy comic book.

Bill Foote noted that his advice to developers is to team up with a graphics designer still in college. Get ready for a paradigm change into highly media-centric UI apps, he recommended.

Neil Young's 10-blu-ray disc set retrospective at the highest fidelity available, noted Sheppard, was unveiled at the 2008 JavaOne conference. This by way of introducing the next panelist, Ole Lutjens, which did the implementation.

Lutjens said MX Entertainment was able to do the Neil Young Archives because he retained the copyrights to his work/assets. There was a warehouse full of data (photographs, napkin notes, postcards, etc.) that had to find its way to a digital interface, so people could look at video clips while listening to his songs. Lutjens said they started with 2,400 individual pages of content.

There was discussion around the ability to play assets worldwide. The Neil Young Archives are a region-free boxset, which is fairly unique. Sheppard noted these encoding formats: DVDs have 7 regions, Blu-ray Discs have 3 (America + Japan, European, Asian).

An audience member asked why JavaFX was mentioned only once. Sheppard responded that while JavaFX is very visually rich, it is beyond the implementation requirements of GEM profiles (and therefore Blu-ray). In essence, the JavaFX common profile is incompatible with GEM. (There is one model of Playstation that is visually rich, but most players aren't.)

How will the remote control evolve to be able to take advantage of some of these applications?, another audience member asked. Sandoval said there will probably be onscreen representation. The expectation is that controls will evolve to gestural devices, Wii-style remotes.

Trailer Park has an app, which is available for the Apple iPhone, Blackberry and T-Mobile’s Android devices for a fee, that turns the smartphone into remote controls for Blu-ray players, among other features.

Foote said another company is working on a Bluetooth device that talks to the app on your Blu-ray Disc via a smartphone like an iPhone.

In closing, Sheppard reiterated that viewership hours are up, all around, so this market continues to grow. He recommended that developers check out the Java ME SDK 3.0 as the best resource.

Making music is a hobby of mine, so when I saw the session "Programming Music for Fun and Productivity: JFugue and Log4JFugue" in the JavaOne 2009 program, I signed up.

Unfortunately, I arrived about 10 minutes late and discovered presenter David Koelle already pumping out midi files with JFugue.  JFugue is an open-source Java API for programming music.  Its interface, while text based, is much easier to understand and program with than is MIDI (musical instrument digital interface).

Koelle showed how easy it was to load quality sound samples into JFugue, and created a pleasing version of Vivaldi's "Spring." He then demonstrated some expressions that JFugue used to make music. This simple example, from
the from "The Complete Guide to JFugue" (http://www.jfugue.org/book.html) plays a C scale.

import org.jfugue.*;
public class MyMusicApp
{
    public static void main(String[] args)
    {
        Player player = new Player();
        Pattern pattern = new Pattern("C D E F G A B");
        player.play(pattern);
        System.exit(0); // If using Java 1.4 or lower
    }
}


All this is well and good, but computers have been playing music for a long time now, and I was ready to see -- hear, rather -- what presenter Brian Tarbox had to say about Log4JFugue.

Log4JFugue is built on the open-source project Log4J. With Log4J, you can place log statements in shipped code without paying a large performance price.  Logging is controlled through a configuration file, not the application binary itself.

For a complex system, tracking down a failure in log files can be a real challenge.  Tarbox helps maintain a program that writes 100,000 lines of code an hour.  He told of spreading a log printout across the floor and mapping cause and effect statements for hours to get to the root of a memory link.  He decided to bring hearing as well as vision to bear on log files by combining Log4J and JFugue, and Log4JFugue was born.

Tarbox "played" a log file for the audience in which log messages were represented by percussion instruments: successful events were represented by drum sounds, failures were represented by cymbal crashes, and so on. The result sounded like an elaborate mechanism ticking along, and it was easy to tell when the system was getting into trouble by
the sound of the cymbals. Tarbox likened it to the way a good mechanic can tell the condition of a car by the sound of its engine. The timing of repeated rhythmic motifs indicated the frequency of certain function calls, and in this way he got an intuitive sense of how the system was performing.

So far, Log4JFugue has been limited to the sounds of percussion instruments.  Although producing pitched instrument sounds could conceivably transmit more information, experiments with them have produced too much cacophony.  Tarbox is considering limiting pitched instruments to the pentatonic scale in order to reduce disharmony.

Because the Log4JFugue player is a Spring injection point, you could write a player to play a wav file or take other action for a particular log file entry.  A fatal error, for example, could trigger the sound of an explosion.

Overall, the presentation stimulated some new ways of thinking about engaging senses other than the visual in the software development process.

--Rick Palkovic

References
Log4JFugue: http://log4jfugue.org/
JFugue: http://jfugue.org/
Log4J: http://logging.apache.org/log4j/

Related Posting

More Java, More Music <http://blogs.sun.com/javaone2009/entry/more_java_more_music>

Flying saucers, bouncing cannon balls, and impenetrable mazes--welcome to the interactive world of Java3D game development! In his technical session "Java Technology for Gaming", James Robertson from the Computer Science department at the University of Maryland introduced JavaOne attendees to typical challenges and solutions for collision detection. He showed several collision detection approaches, talked about the implementation of game physics, and finally presented the jMonkeyEngine gaming framework.

Well implemented game physics and collision detection are essential for adding realism to any game. Badly executed physics severely break the immersion and disrupt gameplay--common complaints are that player avatars fall through floors or get stuck in walls or doorframes.

Detecting when two objects collide seems a trivial mathematical task at first. But the more objects you introduce, and the faster they move, the more complex and costly calculations become. Java does provide a Vector3D class, but apart from that you must implement many 3D formulas yourself.

Several approaches to solve the challenge of detecting collisions exist: Overlap testing relies on trivial vector math and can answer the question whether two objects (such as spheres or cubes) intersect at this moment. Intersection testing additionally predicts at what point in time the collision will occur, given a certain trajectory. The third method reduces complexly shaped objects to bounding volumes, either cuboids or spheroids; you can choose between algorithms with axis-aligned bounding boxes (faster, but less precise), and oriented bounded boxes (fits the object's shape better, but is more costly).

And don't underestimate the impact of an object's speed on the precision of collision detection: If the game does not test for collisions often enough, it may miss a high-speed object and allow it to pass through an obstacle. On the other hand there is a upper limit to the detection sampling rate, because the calculations slow down the game. Especially network games suffer from glitches in collision detection when packet latency occurs.

As soon as you venture beyond Pong and Tetris, your game requires more real-world behavior than mere collision detection can offer--we are entering the realms of game physics. Projectiles are affected by gravity. Rolling or colliding objects are slowed down by friction depending on their texture. An impulse should change accordingly after collision. An object's coefficient of restitution determines whether it hits the ground like a rock or bounces off like a ball.

All these changes in a motion's direction and intensity can be described by formulas. If you implement it well, nothing stops you from fiddling with values to add interesting effects to your game, such as low-gravity environments or slippery ground.

Since physics add a lot of overhead to your game, it's time to consider optimization strategies. Dividing up your world into grid partitions allows you to reduce the number of collision checks to objects that are actually adjacent. Another solution is the plane sweep algorithm that looks for changes, frame to frame, for each axis.

Instead of implementing and optimizing this all by yourself, Robertson recommends using the free jMonkeyEngine (jME). jME is a Java 3D game engine that is ready to handle not only collisions and physics, but also particle systems, shaders, terrains, skyboxes, fog, and much more.

The www.jmonkeyengine.com homepage contains documentation and tutorials to get you started with the basics. When you extend the "SimpleGame" and "SimplePhysicsGame" classes, you get a default set-up that lets you get familiar with all features quickly--it even equips your first simple game with a default properties dialog for storing user settings.

Every jME game has an init and an update method. The init method initializes the game: This is were you load sounds, images, objects, and define bounds and controllers. The update method is the game's main event loop. Here you define the game's reaction to user input and collisions, you test for events and trigger state changes. When you have understood how jME works, It's time to start your game project by deriving your own custom game class.

At this point it was time for Robertson to show us the games that his students had created as class assignments: The first was a 3-dimensional asteroid-like space shooter with sound effects. The second was an arcade-style game where you shoot bugs flying past, but spare the bees. In the third you assumed a first person perspective and walked over a 3-dimensional terrain to shoot rolling balloons. Thanks to jME they completed these assignments in only a few weeks. jME handles collision detection for objects as well as terrains, and it even allows you to show the assumed bounding volumes for debugging purposes.

Using an integrated development environment simplifies maintaining the complex project structure and library collections that you will encounter as your game grows. Robertson himself prefers the Netbeans IDE, but other IDEs are valid options, too. In the Q&A section, one of the attendees added a recommendation to use the NetBeans IDE's Web Start feature in the Project Properties for easy game deployment. Which ever deployment method you choose, the package has to include your class files, the jME JARs, and a few native 3-D libraries bundled with jME.

The session gave a great overview of the importance and complexity of collision detection and game physics, and how common challenges have been solved. The most popular and comprehensive solution proposed is the freely available Java3D game framework jMonkeyEngine in combination with a modern IDE. Have fun coding, and don't forget to upload your game to store.java.com soon!

What's the first thing that pops into your head when you see Java + You = Powerful... or Java = Innovation...? Coming right out of the Java Puzzler session, my first thoughts were: Is this an assignment or a comparison? Does it have a side effect? And will the data types clash? This is the mind set that Joshua Bloch and Neal Gafter put you in when they tell you about the pitfalls of the Java language.

To give you a picture how they work: One of the code samples they showed contained an inconspicuous call to Boolean.getBoolean("true") to parse user input. But this method is not what it seems: getBoolean() tells you a system property named by the argument exists and is true! If you expected it to convert the string to a boolean, you want to use Boolean.parseBoolean(). The take-away message for developers? Read the Javadoc! And for API designers? Use the priciple of least astonishment when naming your APIs, please.

In another example, they extended a collection class, but the outcome wasn't as expected. Java inheritance is one of the key language features, and you can trust it--But make certain to never extend a class that was not explicitly designed for extension. Assume you had extended a collection class's addAll() and add() methods to have a side effect: increasing a counter. Now, what if addAll() was internally implemented to rely on add()? Then the counter is increased twice for every call of addAll(), which is not what you intended. The point is, you can't always know how certain methods are implemented. If you must override these classes, Bloch and Gafter suggest a reusable forwarding class wrapper.

Yet another seemingly obvious, but tricky code sample included a custom comparator. The goal was to find "the (number) one" in a list of Integers. The code looked fine, but many failed to spot the implicit autoboxing: The items to be compared were Integer objects, not ints. A custom comparator that uses == for objects is broken, because this operator compares the identity of objects, and not their numerical values. What did you learn? When employing the == and != operators, make certain Java's autoboxing doesn't hand you objects instead of primitives.

The take-away message for every developer out there: If you're not sure what it does, it doesn't do what you think it does! The Puzzler session teaches even the most seasoned Java developers something shockingly new about the language that they believe to know inside out. So don't pass up tools such as Findbugs or a good IDE that offers quick fixes, editor hints, and javadoc integration--it will save you time and nerves, and prevent the most common mistakes.

Curious to learn more? Crack code snippets, read sample chapters, and order the book from javapuzzlers.com. You can also buy your copy directly at the JavaOne store.

Sun's Bob Vandette and Carlos Lucasius did a show-and-tell at this session. After going through a brief history of ARM processors, Vandette described how the new generation of fast ARM CPUs is showing up in a broad range of devices.

The newer CPUs support the full Java SE platform stack, including Swing and the Java HotSpot JIT client compiler. However, customization beyond simple porting is the only way to truly see the benefits of the processors.

Lucasius showed a small US$99 device, whose dimensions were about 1-inch by 2-inches, as an example of a very small CPU with endless application possibilities.

 On the other hand, Lucasius couldn't bring in a parking meter, but he did have the CPU board from within a parking meter. These are the type of smart devices you find at airports and the like, which allow you to use a credit or other smart card to commit transactions.

 For more information about Java SE in Embedded use, check out its home page.

You can also go directly to the Embedded Downloads page to read more about the various flavors of this value-add technology.



Ted Leung, a Principal Engineer at Sun, and Ashwin Rao, a Sun Product Line Manager for developer tools, led this low-key session. As Leung put it, the attraction of the Cloud to developers is the promise of "no fuss, no muss" and easy expansion and contraction, as requirements change.

Why the Cloud?

Leung went through the reasons behind the rise of Cloud services. All Cloud offerings are "Something as a Service" (SaaS), for example, Infrastructure as a Service (IaaS), or platform, stack, and software. Leung then went through each service in detail, summarizing each service's Cloud offerings:

  • Infrastructure as a Service - virtualized hardware, storage services, compute services
  • Stack as a Service - Virtual Machine images (stripped-down Linux all the way to infrastructure support software)
  • Platform as a Service - AppEngine, for example, or Heroku, or Zembly (which addresses the problem domain of social networking)
  • Software as a Service - SalesForce.com is the prime example

Problems of the Cloud

The obvious one is latency to the storage, for example, or within the cloud for calculated services. These require that  development and deployment become more deeply entwined.

Other problems include security (constrained by vendor so needs more thought), audit/regulatory issues, and the risk of essentially being with a single-source provider.

Leung then dealt with problems per area (for example, in IaaS, one must handle app-level scaling).

Finally, Leung noted that developers need to look at messaging around what's used to connect to services (for example, controlling priorities) and  improving availability.

Today's Tool Landscape

Ashwin Rao then went over the developer tools available today. He noted that we can look at developing with the cloud, for the cloud, and in the cloud.

For developing with the cloud, Rao said good examples include the Amazon Web Services Toolkit with Eclipse (which extends the Web Tools platform, to deploy, run debug against), G-Eclipse, and Project Speedway.

For developing for the cloud, Rao's examples included Google App Engineerng SDK, Windows Azure Tools for Microsoft Visual Studio, and the Force.com IDE (part of SalesForce.com).

For developing in the cloud, Rao called this development as a service. Examples are Force.com Builder, Bungee Connect, Project Speedway, and Zembly.

Sun's Cloud Tools

Rao summarized Sun's "Connected Developer" tool complements as Kenai.com, Zembly.com, Project Speedway, and O'Malley. The NetBeans IDE is tightly integrated with the tools.

  • Kenai - Cloud-centric software project management tool, provides a core set of app-building services
  • Zembly - Cloud-based tools for social networking apps (Development as a Service)
  • O'Malley - a catalog of discoverable applications
  • Speedway - universal access to OpenSolaris on SPARC-processor-based Sun systems

Demo Time

Unfortunately, Internet latency made this part of the presentation difficult. Leung and Rao were unable to demonstrate Kenai even on a web browser interface because of poor Internet connection. (And the Netbeans IDE plugin was not yet ready.) The Zembly demo used the Google Translation service -- again, working within the NetBeans IDE. Finally, the duo showed a preview of Hudson, Sun's compiler for the cloud's continuous integration environment.

View the presentation slides for full details of the talk.

I’ve almost lost count as to how many JavaOne conferences I’ve covered in the last 11 years. I remain confident of Java technology's future and count myself fortunate to have been a part of it to date and to be able to attend the event of events, the JavaOne conference. To quote James Gosling, "The rocket-that-is-JavaOne is lit!"

I’ve got my usual full plate. Rock Star interviews with Cliff Click, Chief JVM Architect and Distinguished Engineer at Azul Systems; Joshua Slack, Senior Developer and President at Ardor Labs, Inc.; Neal Ford, Software Architect and Meme Wrangler at ThoughtWorks; Simon Ritter, technology evangelist for Sun; Mik Kersten, Chief Executive Officer and Co-Founder of Tasktop Technologies; and Matt Warman, Java trainer, presenter, and consultant, are on the way. As always, they’re an interesting bunch and one of the highlights of my JavaOne coverage.

I’ll be writing about three sessions, with topics ranging from Zembly to Ruby to Hudson. I’ll put in time at the Pavilion checking out the exhibits, and doing a podcast with Java Champion and benchmarking and Java EE expert Kirk Pepperdine. Finally, I’ll cover the James Gosling toy show on the last day of the Conference.

Hope to see YOU there! :)

This blog provides coverage of the 2009 JavaOne conference from Sun Developer Network (SDN) staff writers and their guests. You can find additional information about writers Christine Dorffi, Robert Eckstein, Janice J. Heiss, Ed Ort, and Rick Palkovic on the authors' page.

For a complete list of their most recent articles, see the feature articles page at developers.sun.com and java.sun.com.