I’ll be giving a talk on JavaFX this upcoming Tuesday, December 15th at the Chicago Java Users Group. The talk is titled “JavaFX for Java Developers”, and is meant to be a survey of JavaFX from the perspective of someone already familiar with Java.
Thanks to the generosity of Apress, there will also be an ebook raffle for Lucas Jordan’s new book: “JavaFX Special Effects“, which I had the privilege of tech reviewing.
So if you live in the Chicagoland area, come check us out.
Here’s a recent awkward interaction between a Starbucks Barista and me:
Me: I’ll take a Grande Coffee (note, I don’t actually order “just a coffee”, but I’m too embarrassed to write out the actual drink. Being forced to write “Grande” instead of “medium” is embarrassment enough — I already conceded “barista” over “employee”).
Barista: Will that be all for you today?
Me: Yep — and my name’s not “Todd”.
Barista: I’m sorry?
Me: Did you just call me Todd? My name’s not Todd.
Barista: No…I didn’t. I asked if you wanted anything else.
Me: …Ok, my mistake. (Note: a normal person would let the misunderstanding go at this point — but not me! More awkwardness to follow!)
Barista: That will be $3.50
Me: Today! You said “today”!
Barista: I don’t–
Me: You said “will that be all ‘today’”, and I heard it as “will that be all, Todd“!
Barista: Ok, well–
Me (visibly relieved): Oh man. I sure diffused that awkward situation. What a relief.
Swing and JavaFX currently find themselves locked in a perpetual cycle of awkward exchanges and misunderstandings.
We’ve been told from the beginning that JavaFX is targeted toward media-rich social internet applications and not meant to be a replacement for Swing. We then, however, have to then reconcile that viewpoint with news like SwingX’s funding drying up and the Swing Application Framework missing the JDK 7 train (or “boat” depending on how you feel these things travel).
Feelings of anger, disbelief, and dismissiveness seem to abound in the Swing community. “Why is Sun abandoning Swing? Why are they shoving another language at us?” I admit, as a Swing developer myself, the facts on the ground look bleak for Swing.
It does seem too bad that Swing and JavaFX are in a zero-sum relationship w/r/t allocated resources and active development. It’s hard to deny that many of the high-profile Swing developers are now actively pushing hard on JavaFX.
If we look beyond that, however, I think that there is plenty of room for both technologies in the client-side Java ecosphere.
The Java Platform has always been about choice — and lots of it. Today’s Java developer has a staggering amount of choice in the realm of web frameworks, persistence frameworks, logging, collections, aspects, and dependency injection frameworks. In fact, a Java developer has so much choice, they don’t even have to program in Java if they prefer a different JVM-friendly language.
But in the realm of client-side Java, the choice has been much more limited, mostly due, I imagine, to the fact that client-side Java has never exactly been an exploding marketplace of opportunity.
Web development has always eclipsed client-side work. It’s my hope that JavaFX can seek to change some of that; that it will be able to widen the reach of client-side Java and push development back onto the desktop and remind users that not every application needs to run inside of a web browser.
Sure, it’s possible that some day JavaFX will be the “Swing Killer”, but that would be a sad and unfortunate outcome. It’s my hope that JavaFX and Swing are playing a nonzero-sum game and that the world of client-side Java is big enough for both.
So as I mentioned last week, in my exploration of JavaFX I’ve written a music discovery tool called “Music Explorer FX” (or just MEFX for short).
It’s been available for about a week now in the Java Store, but since that’s only available within the U.S. and requires registration, I’ve provided a link here. Just click on the “launch” button and you’ll be on your way.
Hopefully the application is somewhat self-explanatory, but here’s a very brief rundown of how it works.
Given a initial seed artist, which is entered in the initial search screen here, MEFX will present you with up to six artists that are similar. Click on any of these recommended artists to promote it to the center and start the process over. As you browse through artist recommendations, your old artists will be remembered along the top in the “history” that you can always return to at any point.
Once you generate a few artists in your history, you can tweet your musical journey by clicking on the the twitter icon (the singing bird) in the upper right corner.
At any point the artist in the middle (the “current” artist) will have a bank of buttons below it which you can use to jump between different modes of the application. From left to right they are:
If audio is found for the current artist, audio controls will appear below the artist’s image.
The green and yellow gauges in the picture above are familiarity and hotness ratings respectively. Check out this post by Paul Lamere for a detailed explanation of these metrics.
You can run the application in full screen mode by clicking the icon in the lower right corner (full screen mode with dual monitors may cause unpredictable results). Click the icon again to return to windowed mode.
MEFX is largely powered by the Echo Nest’s public web services which provides the data for resolving the artist search, artist similarity, familiarity and hotness, any audio tracks, videos, blogs, news, links, and reviews.
Secondarily the artist profile images are courtesy of Last.fm’s web services, and the “image gallery” is feed by Flickr.
You can get more information about MEFX, including basic support information as well as more detailed instructions, at http://www.musicexplorerfx.com.
Special thanks to Paul Lamere, the Director of the Developer Community over at the Echo Nest, for help and support in getting this application off the ground. If, in using this app, you find yourself discovering new music — you have the Echo Nest to thank, not me.
Also thanks to my wife, Deb, for help with the artwork, and to my boss, Matt, for letting me run with this idea.
So anyway, if you do decide to try it, let me know what your experience is by leaving a comment or contacting me directly at sanderson att citytechinc dott com.
And if you discover a cool musical journey, hit that twitter button and share it with the world.
Enjoy!
And now, the thrilling conclusion to my untimely JavaOne coverage…
The New World: JavaFX Technology-Based UI Controls
Finally! This standout session on the new controls offered in JavaFX 1.2 is exactly what I was waiting for. Delivered by most of the same team as the previous day’s unfortunate Extreme GUI Makeover, they launched right into showing the new Look and Feel, Caspian, citing Nimbus as having a dated look.
The new Look is really sharp — you could easily mistake it for a Flex app (which is a compliment).
The list of controls includes such UI staples such as Button, Checkbox, ToggleButton, Textbox, Slider, Scrollbar, Hyperlink, List, Progress Indicator, and even Charts.
Yep, charts are part of the core API — something Swing always had to defer to JFreeChart. This isn’t just one token bar chart either. Available types of charts include: bar (2d/23d), line, plot, pie (2d/3d), scatter, bubble, and area.
The more banal controls seem to have received a good amount of love by the team as well. They have several, subtle bits of polish that help make them feel like professional controls. For example:
It’s true that there is no Table/Tree widget, or even a Combo box, but the team was quick to say that another release was on the way “in about six months”.
Eventually long time Swing veteran, Amy Fowler, took the stage and went into the details about the new layout managers, including: Tile, Flow, HBox, VBox, Stack, and Panel. Of special interest (to me) was an offhanded comment she made along the lines of “the 2D, and eventually 3D scene graph”. Exciting. I love me my 3D.
I got the impression that I was one of the only JavaFX fanboys in the room, as there were epithets flying around to the effect of “How do you expect us to work without a ComboBox!?”, and “I can’t feed my family without a table widget!”
I’m willing to grant the JavaFX team the benefit of the doubt here. It’s possible that my expectations were simply just lowered by the previous two days’ sessions, which perhaps was part of the plan all along in order to make this session shine. But JavaFX was released just over half a year ago, so considering this, they’ve made some pretty impressive strides. So color me excited.
But enough about technical sessions. Let’s go to the Pavilion.
The Java Store had a corner of “Java Utopia” this year, where various members of the Team JavaFX were milling about ready to assist in your first chaperoned experience with the store. As mentioned previously, a JavaFX app that I authored, Music Explorer FX, was one of the inaugural apps in the store, so naturally, I wanted to hang out a bit and hear about people’s experiences with it.
If you’d like to try Music Explorer FX out for yourself, you’re free to sign up for the Java Store’s beta program (free registration), and then the application itself is, of course, free. Eventually the Java Store will be open to the public without the need to register, but as this may be a while yet, I’ll provide an easier way to download the application real soon now.
JavaOne Postmortem
The JavaOne t-shirts this year had the equation “Java = Opportunity” written on the front. As I stand in line to board the plane waiting for my Xanax to kick in, I can’t help but wonder if the word “Missed” additionally belongs after the equal sign.
JavaFX (and JavaOne in general) faces an uncertain future with the Oracle acquisition. This should have been JavaFX’s year at JavaOne to come into its own. Every JavaFX session should have been as good as the one I attended today, but instead I found the sessions plagued with two year old demos, confusing pairings (two Ajax guys defending JavaFX?), and abysmal performance ($200 for a JavaFX mobile device that will bring back the nostalgia of the AWT circa 1998). Speaking as someone who has devoted some of his professional self to this new language, I really do hope it can succeed in spite of itself.
Actually that’s a bit too poetic. Really what I’m thinking while waiting to board the plane is if I get out of line right now and go rent a car, and just drive straight through on I-80, I’ll be back in Chicago on Saturday with enough time to still see my daughter’s ballet recital.
Here’s the next post in my series of increasingly untimely coverage of JavaOne.
Wednesday’s theme for me was all about user experience which started with…
Extreme GUI Makeover
Extreme GUI Makeover is a JavaOne favorite. I thoroughly enjoyed last year’s version, delivered by Ben Galbraith, which covered the case study of converting a Cobol application to a Swing Application (something I happened to be actually doing at the time).
This year’s iteration of the talk was delivered by a panel of speakers, I think (but I’m not positive) all members of the JavaFX team. This year the team scaled back the ambition and tackled the unimpressive task of converting some of the elements of a Swing Email Client to JavaFX.
The team outlined how they had to roll their own components in some cases to make up for JavaFX’s lack of maturity. For example, even though Swing has a perfectly fine JTree component (and SwingX has an even better one), they replaced it with a custom-made collection of nodes that behaved tree-like which bought them the ability to add fancy tree node transition animations.
The highlight of the talk (as judged by the amount of audience clapping and time spent explaining the feature) was the button that moved an email from the inbox to the junk mail folder. Instead of simply moving the message as most email clients do, this application would launch a missile sprite from under the button, which would follow a spline and culminate in incinerating the message on impact.
The feature was clearly meant to show JavaFX’s prowess with animation, path generation, and transitions to tie it all together. I had a hard time deciding, however, if every time a missile obliterated a message, the audience giddy with delight, if it was the message going up in flames, or my faith in JavaFX’s future.
I have a good deal of respect for the JavaFX team; they have accomplished much in a short about of time. Additionally they are good speakers capable of delivering quality sessions (as evidenced by a session on Day 3 which I’ll get to in the next post).
Having said that, I find trends like those present in this session very disturbing. JavaFX is trying to gain traction as an enterprise grade language, but as long as we’re blowing up messages in our inbox I imagine it will never be taken seriously.
And note that this is coming from the guy who wrote the Orangalzer.
Creating Compelling User Experiences
If Ben Galbraith woke up one day and decided to start a conference called BenOne in which all he did was talk about his day, I would be the first in line for registration. This guy knows how to give an interesting, thoughtful talk.
A lot of what makes Ben so effective as a speaker is in the subtleties of what he says. Rather than simply barrel through a list of bullet points, he takes the time to construct an argument, and support his points from multiple angles, all the while acknowledging differing points of view.
Last year’s “Compelling User Experiences” session was the most popular of the conference, and with good reason. This year’s talk, emphasizing craftsmanship this time, was once again easily my favorite.
Unlike other sessions, where I might walk out with several action items, or technical tidbits to try out, “Compelling Experiences” leaves me with nothing tangible, but rather a increased sense of awareness about how I approach my job. It encourages me to take a step back and helps me remember why I’m doing this stuff in the first place.
The gist of his talk is available on his blog. You owe it to yourself to check it out.
Pro JavaFX or Something Like That
(sigh) See “missiles” above.
Griffon BoF (Birds of a Feather)
The Griffon guys are making great strides in this much anticipated (by me anyway) “Grails-for-Swing” framework. One of the side notes of the BoF was the herculean effort put in by Geertjan Wielenga in creating a workable Griffon plug-in for Netbeans mere hours before the conference. Be sure to check out Scott Davis’ interview with Geertjan over at Thirstyhead.
Actually, Scott Davis, known for his infectiously charismatic love of Groovy which is impossible to resist, interviewed the “who’s who” of the Groovy world while at JavaOne, including Andres Almiray, Dave Klein, Graeme Rocher, Dierk Koenig, and Mr. Groovy himself, Guillaume Laforge.
Incidentally, I had a chance to speak with many of these guys informally myself, and I was (and continue to be) impressed by their approachability, genuineness, and sense of community. The Groovy community is indeed in good hands.
Whew, so almost done. Be sure to keep an eye out for the thrilling conclusion of my untimely JavaOne coverage…
Here’s a breakdown of some of the sessions that I attended on the first day of the JavaOne conference. I meant to get this out in a more timely manner but it turns out that I’m no good at spontaneous posting.
A conference like JavaOne has an overwhelming number of technical sessions, labs, panel discussions, and vendor booths. As a result, I often feel like I need to fight back the feeling of failure if I somehow don’t absorb it all.
To counter this anxiety I often remember the wise words of my good friend Linc (who is also the drummer of Hungry Fathers): “Instead of trying to be everything to everyone, try to be three things to seven people”.
So having said that, my “three things” generally are: Groovy, JavaFX, and Usability.
JVM Script Showdown (a.k.a. “Script Bowl”)
This session was intended to be a sort of “rapid fire” comparison of several JVM languages: Jython, Groovy, Clojure, Scala, and JRuby.
Of course the winner of the “showdown” really was predetermined by how much support for each language walked through the door (it was Groovy). In other words, it’s difficult to imagine any “blank slates” coming to the session and, after hearing 5 minutes about each language, forming a definite preference.
Although the sales pitch by the panelists did play a part, and to that point, Dick Wall (of Java Posse fame) deserves a special mention for his infectious love of Scala. He almost convinced me to step away from my predetermined vote for Groovy.
Almost.
Java Puzzlers
Listening to Neal Gafter and Josh Bloch is a good reminder that the most important part of a session is its speaker(s). This is evidenced by the fact that we were all riveted to what amounted to exploring corner cases of the java compiler. I think if Josh offered a session on what he had for lunch, I would still enthusiastically attend.
AJAX vs. JavaFX
Self-described as AJAX’s Hannity to JavaFX’s Colmes, Ben Galbraith and Dion Almaer, both AJAX advocates, debated the merits of the two development platforms. Having thoroughly enjoyed Ben’s two sessions from last year’s JavaOne, I wasn’t surprised to see him excel in his element: defending the web platform.
While Dion very aptly defended JavaFX, it was odd that they weren’t able to wrangle up someone who actually believed in the merits of JavaFX over AJAX (doubly so given that this is a conference about JavaFX).
Some memorable fighting words from Ben (somewhat paraphrased):
Toward a Renaissance VM
This was mostly an explanation of the new JVM byte code instruction “invokeDynamic” with enough background provided so that a non VM engineer such as myself could (mostly) follow along. Of particular interest was a concise explanation of where the line is between Java the language and Java the Platform. Unfortunately this session suffered from “last of the day” syndrome, so the notes that I took are incomprehensible to me as I try to read over them two days later.
That does it for day one. Be sure to stay tuned for untimely session coverage of Day Two of the JavaOne 2009 conference…
I’ve already mentioned in a previous post what I found most exciting, from a personal standpoint, about the JavaOne Keynote. Indeed, the announcement about the Java App Store itself is cause for celebration. A central point of distribution would be a potentially great injection of vitality into an aging Java community.
At several points the mantra, “labor of love”, was repeated by both James Gosling and Jonathan Schwartz as a central driver for the app store. Indeed, this idea, I think, really does resonate universally with programmers. Every programmer (myself included) seems to have that side project (or collection of same) that if only others could see, might somehow take off and have a life of its own.
This idea really taps into the primal urges of coders — to create, but also to share. It really should have been the central message, delivered with all the pomp and circumstance that a keynote demands.
But that’s not the keynote that I attended. The keynote, rather, had a muted, melancholy tone, and an awkward sense of finality.
The first part of the keynote was devoted to a collection of Sun partners taking the stage and delivering various degrees of prepared comments about how a partnership with Sun is good and (sometimes obliquely) how Java is a big part of that.
Some of the partners included representatives from Verizon, Intel, RIM (whose phone unironically went off while on stage), and Sony, who at the utterance of the phrase “at a reasonable price” in reference to blu-ray technology made me feel like I had been sitting through a sales pitch all along.
Toward the end, Sun Chairman Scott McNealy, came up on stage to “address the elephant in the room”: the Oracle acquisition.
After some ambiguous language, with multiple citations of not being able to legally comment on “the details”, I ended up feeling more confused and unsure about the acquisition than had he not said anything at all.
Scott’s way of talking at some point seemed to place the blame on us with accusatory phrases like, “this shouldn’t come as a surprise to anyone” adopting the same tone I use when my two year old brushes her teeth with water from the toilet bowl.
Scott was eventually rescued by Oracle CEO Larry Ellison (”our new boss”) who came up on stage to reinforce Oracle’s commitment to Java.
At some point in this awkward reassurance, Scott turned to Jonathan (Schwartz) and “thanked him for being a great steward of Java” and closed with “this is the last JavaOne…that I will be chairman of”. It was a bitter sweet, pseudo-emotional moment which culminated in a standing ovation. It felt like an oddly private moment despite the other 20,000 people in the room.
I have great respect for McNealy and Schwartz and their accomplishments, but the keynote could have (should have) been a celebration of Java’s new life, as evidenced through the emerging app store and almost comically parenthetical asides of new versions of Java SE, Java EE, and Java FX. Instead, it had the feeling of looking back on “the good years” and an awkward passing of the Java torch.
The culminating point in this morning’s JavaOne key note was the announcement of the Java App store, accessible at store.java.com. The intention of the Java App Store is to give Java developers a central, standardized way to distribute their Java applications to the potentially billions of users of Java devices around the world.
The app store, which is currently in private beta, has been seeded with a few early access applications…and apparently an application that I’ve been working on for the past few months is one of them…
Check out the following screen shot taken from the video of the key note (click for a larger version).
My application is represented by the dark icon with the letters “MEfx” on the bottom row, second one in from the right (incidentally, the one immediately to the right of James Gosling’s demo, which in this screen shot is the application currently highlighted).
The application was not actively demoed on stage, or even mentioned by name, but it was quite an experience to see a “labor of love” silently up on stage, while James Gosling and Jonathan Schwartz demonstrated the store’s interface with 20,000 Java developers looking on.
Incidentally, the application is called Music Explorer FX, and is a new kind of music discovery tool written in JavaFX and powered by the Echo Nest’s web services.
Stay tuned for more information on how to try out Music Explorer FX for yourself…
It’s that time of year again. Java nerds the world over are packing an extra inhaler and their well-worn copy of “Java Puzzlers”, preparing for the annual trek to California.
In a few short days, I myself will confront my fear of flying and leave the muggy Midwest for the cool, crisp ocean air and azure skies of San Francisco — home of JavaOne.
Every morning I’ll walk from the hotel, down Mission Street, past the impossibly chic Bay Area natives, to the Moscone Conference Center, where I’ll be among my flannel wearing, asthmatic, brethren, safely indoors, sheltered from the harsh northern California sun (or depending on your tolerance for puns: basking in Northern California Sun).
Browsing through the sessions it looks like there is some quality stuff this year. However, outside of a few talks and the odd BoF, there doesn’t seem to be much Groovy representation (which helps to explain why my proposed talk, “Wow, Guys! Look at all the Groovy Talks Here at JavaOne!” was rejected).
It’s nice to see more sessions on Scala this year, and even Clojure makes an appearance in the “Script Bowl” session.
Also, apparently there are a few sessions on a new language called “JavaFX”…I wonder what that’s all about.
Paul Lamere has posted a demo of a new 3D interface that he’s been working on for exploring and discoverying new music. Be sure to click through and watch the YouTube video to behold some very impressive animations. Paul also notes that recommendations from Project Aura are on the way.
Paul continues to win the award for “Software That He Writes in His Spare Time is Better Than the Stuff I Write Professionally”.
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « May | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||