Steve On Java

Hacking Java, JavaFX, and Flash with Agility
  • rss
  • Home
  • About
  • Contact
    • E-mail Steve
    • SC2 Challenge
  • SvJugFX
  • JFXtras
    • JFXtras Individual CLA
    • JFXtras Corporate CLA
  • Freedom From XML
  • Travel Map
    • Let’s Meetup!

OSCON Java, The Java Open Source Conference

steveonjava | March 24, 2011

It is pretty easy to get lost in the media hype around the Java events of the past year.  If you follow the headlines, you might believe that all the Java talent left Oracle in a mass exodus, Larry hates open source, or Java is turning into the next COBOL.  Regardless of the factual correctness of these headlines, the Java ecosystem is about more than a single company or set of individuals.  Java has the largest open-source community of any language in existence!

So how big is Java and open-source?  Here is an informal search poll of some of the most popular open-source project hosting providers:

The data for this chart comes from the top six open-source hosting providers using Google Search as a metric for gauging activity level for each of the platforms.  As you can see, Java is still the most active open-source platform in the world, followed closely by PHP and Python.  While not an indicator of language popularity, Bill Gates has gone on record speaking out against open source, so the poor representation from the C# community is not surprising.

This takes us to OSCON Java, which is a new conference I am helping to kick off as conference co-chair together with Laurel Ruma.  It is colocated with OSCON in Portland, Oregon, but is exclusively focused on Java and open source.  O’Reilly is the conference organizer, but they are very neutral when it comes to corporations and technologies.  This allows us to reach out to a wide variety of Java technology players including Apache, Google, Adobe, Oracle, the JCP, and many others.

We have big plans for the OSCON Java keynotes, technical content, and exhibitors.  Also, we are working on making this a model conference from the get-go based on my experience attending and speaking at premier conference venues across the world.  Expect a huge focus on community outreach, a lot of interaction between speakers and attendees, and a particular focus on the JVM languages of tomorrow.

If you are interested in participating as a speaker, it is still not too late to submit a talk.  The CFP ends on March 28th (4 days!), so you still have time to submit a last minute talk:

http://www.oscon.com/oscon2011/public/cfp/159

If you have a great idea, but can’t get your talk together in time or miss the deadline by a few days, shoot me an e-mail via the contact form on my blog.

I look forward to seeing you at OSCON Java, uniting the Java open-source community towards a brighter future!

 
Comments
2 Comments »
Categories
Announcements, Events, Flash, JavaFX, OSCON Java
Tags
c++, java, open source, OSCON Java, php, python, ruby
Comments rss Comments rss
Trackback Trackback

JavaFX 2.0 at the Chennai JUG

steveonjava | February 21, 2011

I was fortunate enough to be invited to speak at the Chennai Java User Group during my trip to India.  I was expecting a small group of very devoted Java fans; however, I was surprised to walk into a room of over 200 developers eager to learn about JavaFX 2.0.  The venue was very impressive with rows of workstations that we later used for a lab, as well as plenty of seating.

Chennai User Group Venue at Tenth Planet

Also, Raj was a great host, and both he and the folks at Tenth Planet went completely over the top with this event.  This included:

  • A life-size poster with the event details
  • An ornamental flower arrangement with the event details
  • Two gifts presented at the conclusion of the talk

Life-Size Event Poster

The session ran from 10AM through 4:30PM with a break for lunch in the middle.  When half the hands went up for returning after lunch, I didn’t believe most of them would be back, but we easily had 60% of the folks back in their seats by the time we were ready to start.

If you are interested to see the slides from the talk, you can find them on Slideshare here:

Thanks again to the folks in the Chennai JUG for being great hosts!

 
Comments
1 Comment »
Categories
Events, JavaFX, Presentation
Tags
chennai, india, JavaFX, jug, Presentation, Visage
Comments rss Comments rss
Trackback Trackback

Visage Android – Cleaner APIs, Cleaner UIs

steveonjava | January 13, 2011

I have been busily working away at getting Visage ready for developing Android applications. It is a great fit, because Android converts regular Java class files into its special class format, and the Visage compiler happens to generate Java class files. Also, Android is desperately in need of some TLC on their APIs (more on this in a future blog).

So why use Visage for coding Android applications? We do a yearly Hack-a-Thon event at my company (this year called the GXS Xathon). The winning application was written by Tim McNamara, one of my coworkers, and happened to be an Android application.  I decided to do a small port of his code to see if I could improve the maintainability using Visage.  Here is a screenshot of the application:

A base settings page for an application.  It uses a couple edit text fields, several lists, and takes advantage of the summary line to display the current values.  The original version included:

  • A Java PreferenceActivity class file
  • An XML UI layout descriptor
  • Another XML file for array resources

Believe it or not, this is the minimum necessary set of files to create the above screen.  In converting this to Visage, my goal was to get rid of a lot of the redundancy and glue code needed to work across 3 different files.

The end results of the conversion were as follows:

FilesLinesCharacters
Raw Android1 Java, 2 XML2087413
Visage Android1 Visage903640

While the numbers are impressive, what really matters is the code.

Here is the final Visage code for the settings page:

public class Settings extends PreferenceActivity {
    var senderPref:ListPreference;
    var receiverPref:ListPreference;
    var statusPref:ListPreference;
    var pollingPref:ListPreference;
    var passwordPref:EditTextPreference;
    var usernamePref:EditTextPreference;

    override var screen = PreferenceScreen { // 1
        preferences: [
            PreferenceCategory { // 1
                "Preferences" // 2
                preferences: [
                    usernamePref = EditTextPreference { // 1...
                        "Username" // 2
                        key: "usernamePref"
                        summary: bind if (usernamePref.text == "") "Currently undefined" else "Current value: {usernamePref.text}" // 3
                    }
                    passwordPref = EditTextPreference {
                        "Password"
                        key: "passwordPref"
                        summary: bind passwordPref.text.replaceAll(".", "*"); // 3
                    }
                    pollingPref = ListPreference {
                        "Polling Interval"
                        key: "pollingPref"
                        defaultValue: "60000"
                        entries: ["30 seconds", "1 minute", "5 minutes", "10 minutes", "15 minutes", "30 minutes", "1 hour"] // 4
                        entryValues: ["30000", "60000", "300000", "600000", "900000", "1800000", "3600000"] // 4
                        summary: bind pollingPref.entry
                    }
                ]
            }
            PreferenceCategory {
                "Filter"
                def CLEAR = "\{Clear Filter\}"; // 5
                preferences: [
                    statusPref = ListPreference {
                        def status = [CLEAR, "HEALTHY", "WARNING", "DOWN"]; // 5
                        "Filter By Status"
                        key: "statusPref"
                        defaultValue: CLEAR
                        entries: status
                        entryValues: status
                        summary: bind if (statusPref.value == CLEAR) "Select a status to filter on." else "Current value: {statusPref.value}"
                    }
                    senderPref = ListPreference {
                        def senders = [CLEAR, for (s in ConnectionService.getSenderNameList()) s];
                        "Filter By Sender"
                        key: "senderPref"
                        defaultValue: CLEAR
                        entries: senders
                        entryValues: senders
                        summary: bind if (senderPref.value == CLEAR) "Select a sender to filter on." else "Current value: {senderPref.value}"
                    }
                    receiverPref = ListPreference {
                        def receivers = [CLEAR, for (r in ConnectionService.getReceiverNameList()) r];
                        "Filter By Receiver"
                        key: "receiverPref"
                        defaultValue: CLEAR
                        entries: receivers
                        entryValues: receivers
                        summary: bind if (receiverPref.value == CLEAR) "Select a receiver to filter on." else "Current value: {receiverPref.value}"
                    }
                ]
            }
        ]
    }
}

While I am not going to include the full original Android code (200 lines is a lot of code!), here are some of the changes that made the Visage version much more succinct (the below bullets match the numbers in the comments above):

  1. The Visage object literal syntax is more concise than XML and just as readable!
  2. Default properties make the object literal syntax even more concise
  3. One bind call can replace dozens of lines of code to setup and instantiate event listeners
  4. No need to declare arrays in a separate file (yes, we have real data types)
  5. This is a real programming language, so you can use constants and variables to repeat arguments (try doing that in XML!)

All of the technology here is real, but getting a completed set of APIs that covers all of the things you can accomplish in Android is still a work in progress.

If you are interested in helping out with this, please join the Visage Developers mailing list.  I will be posting instructions there soon on how to access the bleeding edge Android Visage repository, and contribute to the growing set of Android APIs.

 
Comments
19 Comments »
Categories
Android, JavaFX, Visage
Tags
Android, api, ui, Visage
Comments rss Comments rss
Trackback Trackback

Alternative Languages at Devoxx and Soon JavaOne Brazil

steveonjava | November 24, 2010

I did my JavaFX Alternative Languages talk at Devoxx and will soon be presenting it at JavaOne Brazil (December 7-9th).

During the Devoxx talk I was honored to have Martin Odersky in the audience (for those of you who don’t know him, Martin is the man behind Generic Java and now Scala).  There were several great questions at the end of the talk, one posed by Martin himself.

The question was around this Scala code fragment:

def timeline = new Timeline {
  repeatCount = INDEFINITE
  autoReverse = true
  keyFrames = List(
    new KeyFrame(50) {
      values = List(
        new KeyValue(rect1.x() -> 300),
        new KeyValue(rect2.y() -> 500),
        new KeyValue(rect2.width() -> 150)
      )
    }
  )
}

He was wondering why I had the extra parenthesis after the variables (x, y, and width).  In Scala using parenthesis is optional for methods and allowed for variables, so it appears to be a style issue.  However, there is a good reason for this.

The current JavaFX property model has 4 helper methods for each variable:

  • int getX() – Standard JavaBeans getter function for the property x.
  • setX(int x) – Standard JavaBeans setter function for the property x.
  • static PropertyReference X() – A static function that returns a property reference for x that can be used to refer to this field.
  • ValueBinding x() – A member function that returns a mutable reference to x that can be used to get or set the value dynamically.

So the extra parenthesis were to differentiate between a normal method call (“x”) and a ValueBinding (“x()”).

By popular demand at the earlier SvJugFx Event, I also added in some new content demonstrating usage of the Fantom language for coding JavaFX. Besides being extremely easy to create DSLs in, it also has a built-in Duration operator, making the end result extremely similar to the equivalent JavaFX Script:

Here is the full talk on alternative languages with all the updates for the latest conceptual JavaFX 2.0 APIs:

If you are going to be at JavaOne Brazil, please drop me a line and I will be happy to meet up and chat about JavaFX futures.

 
Comments
1 Comment »
Categories
Events, JavaFX, Presentation, SvJugFx, Visage
Tags
clojure, Fantom, groovy, javafx 2.0, jruby, scala, Visage
Comments rss Comments rss
Trackback Trackback

New Blog Categories… JavaFX, Agile, and Flash

steveonjava | November 8, 2010

For those of you following my blog, I have setup some top level categories and matching subdomains to make easier to get just the information you need.

All of my blog posts will fall in one of the following three categories:

JavaFX

What I will be posting: Information on the latest JavaFX developments, such as JavaFX 2.0 and alternative languages for coding JavaFX. I will also include information on the Visage project including any preview releases.


URL: http://javafx.steveonjava.com/
RSS: http://javafx.steveonjava.com/feed/

Agile

What I will be posting: Agile development practices with a focus on scaling Agile to large enterprises. This includes updates on Apropos/Stratus and new presentations on Agile Portfolio Management that I give.


URL: http://agile.steveonjava.com/
RSS: http://agile.steveonjava.com/feed/

Flash

What I will be posting: Flash and Flex development for mobile and consumer devices. This topic will get a lot of activity over the next couple months as I launch the new Flash On… user group and work on some Pro Android Flash titles for Apress.

URL: http://flash.steveonjava.com/
RSS: http://flash.steveonjava.com/feed/

Or Everything…

Of course, if you want to see all of my posts you can continue coming to http://steveonjava.com/ and keep your existing RSS feed.

I hope this makes it easier to follow the information you are interested in.  Feel free to give me feedback on the site changes in the comments.

 
Comments
No Comments »
Categories
Agile, Flash, JavaFX
Tags
categories
Comments rss Comments rss
Trackback Trackback

JavaFX 2.0 With Alternative Languages at the SvJugFx

steveonjava | October 14, 2010

It is kind of ironic, but after a year running I have never spoken at my own user group.  In November I am going to break the trend and present an updated version of the JavaFX Alternative Language talk that I gave at JavaOne. You can sign-up for the event here:

http://www.svjugfx.org/calendar/14264038/

Note: Even if you plan on attending online, please make sure to sign-up above so you get reminders for the broadcast.

Since Jonathan Giles and I originally gave the talk, the JavaFX 2.0 APIs have gotten closer to completion, interest in the JVM Language Communities has grown, and I have launched the Visage project to carry forward JavaFX Script.

   LEONARDO da Vinci's "La Scapigliata"

Digression {
  var link = Hyperlink {
    name: "Jim Weaver's blog"
    url: "http://learnjavafx.typepad.com/"
  }
  description: "Speaking of Visage, I am looking for"
  "a logo for the project.  I would have gone with"
  "Matisse's \"Visage - Mask\" from {link} but it was"
  "created in 1951 and has an active copyright.  The"
  "current front runner is LEONARDO da Vinci's \"La"
  "Scapigliata\", which is simple and has nice emphasis"
  "of the figure's 'Visage'."
}

Invite your language-guru geek friends too.  I want as much feedback as possible on the suggested APIs so they can be used to improve the underlying JavaFX 2.0 APIs prior to release.  As usual, we will be taking questions online via Google Moderator.

As always, I will have the very latest and greatest content to share (at great demo peril to myself).

I hope to see you there!

 
Comments
4 Comments »
Categories
Events, JavaFX, Presentation, Visage
Tags
clojure, groovy, JavaFX, jruby, scala, Visage
Comments rss Comments rss
Trackback Trackback

Apropos Launches into the Stratus

steveonjava | October 8, 2010

Followers of my blog have probably heard about the Apropos project that I built in JavaFX and released as open-source.  It is an Agile Project Portfolio Planning tool that I developed for work to help manage our large Agile rollout. Apropos is a perfect application of rich client technology, because it sits on top of the web services exposed by Rally, and provides a higher level of visibility and planning.

The folks at Rally Software took notice and have been contributing back to the project to get it customer ready.  They have branded the commercial version of the tool Stratus and are now in the process of a customer beta.

Some of the features that the Rally folks have added to Stratus include:

  • Customization of fields and settings
  • Performance improvements in the web service communication
  • Styling and usability improvements throughout
  • A fully hosted environment for customers to use Stratus without any setup

I had the opportunity to present with Ryan Martens, Rally CTO, at the JavaOne Keynote to demonstrate the very latest version:

It was a cool experience to be on the big stage.  I have heard that a lot of presenters get scripted to death in preparation for Keynotes (or at least it always looks that way), but I had a lot of freedom to ad-lib and blend in my demo with Ryan’s talk.

If you or your company are interested in piloting Stratus, send email to stratus@rallydev.com and Rally can engage with your program managers.

 
Comments
No Comments »
Categories
Agile, JavaFX
Tags
Agile, apropos, JavaFX, portfolio planning, rally, stratus
Comments rss Comments rss
Trackback Trackback

Announcing Visage – The DSL for Writing UIs

steveonjava | September 27, 2010

I am pleased to announce the Visage Language, a domain specific language (DSL) for writing user interfaces.

http://visage-lang.org/

User interface developers have long been neglected and forced to deal with languages and tooling that are a poor fit for their craft.  At times they are asked to write user interfaces in languages originally meant for server-side applications such as C and Java.  In other instances they are required to use a markup language originally meant for representing documents or structured data such as HTML and XML.  These are fine technologies for the applications in which they were originally intended, but a weak substitute for declaring and representing user interfaces.

The goal of Visage is to provide a common language for user interface developers that provides the following benefits:

  1. Model the UI – The code should look like the user interface with a similar structure to how the resulting application will appear.
  2. Data Binding – All user interfaces have a backend model, so it should be easy and painless to hook this up to the UI with bidirectional integration.
  3. Resilient Behavior – The last thing you want to see during a customer demo of your new application is a NullPointerException.  Language constructs should have deterministic, but fault tolerant behavior in all cases.
  4. Rapid Development – Application development should allow rapid, iterative cycles with early feedback starting right at the compilation phase.

The way in which Visage satisfies these requirements is summarized in the following table:

Model the UI Data Binding Resilient Behavior Rapid Development
Object Literals X X
Closures X X X
Data Binding X X X
Bijective Binding X X X
Null-Safe Semantics X X
Strong Type Checking X
Compiled Language X

So what does a Visage application look like?  Here is Hello World in the Visage language:

Stage {
  title: "Hello World"
  Scene {
    Text {
      "Hello World"
    }
  }
}

This code should look familiar to readers of my blog.  It is based on the JavaFX Script language with a few (proposed) syntactic additions.

For those of you who don’t know the history of JavaFX Script, it was originally designed by Christopher Oliver and called F3 for Form Follows Function.  With the acquisition of SeeBeyond by Sun, this technology became the cornerstone of JavaFX and was open sourced in 2007 at JavaOne.  Oracle purchased Sun and just this past week at JavaOne 2010 announced that they are going to continue with the JavaFX Platform, but replace the JavaFX Script language with Java APIs.  We are adopting the JavaFX Compiler for use in the Visage project, and plan to continue evolving it.

Here are some of the goals of the Visage project:

  • Provide a JavaFX Java API Binding – One of the most innovative parts of the JavaFX platform was the language, and it is what all JavaFX applications are written in today.  Our number 1 project goal is to make sure that developers can continue to write declarative code and easily port over their existing applications.
  • Enhance the Visage Language – The language syntax remains largely unchanged since the 1.0 release of JavaFX.  We plan on making numerous improvements that will be beneficial to UI programmers and make common patterns easier to code.
  • Support for Other Platforms – For the Visage language to thrive, it has to be a general purpose UI programming language.  Some other platforms that are in great need of a UI DSL include HTML5, Flex, and Android.
  • Language Standardization – We would like to see the Visage language be made an official standard with possibly multiple implementations.

If you are interested in following the project or helping out, please join the Google Groups:

http://groups.google.com/group/visage-users

http://groups.google.com/group/visage-dev


 
Comments
17 Comments »
Categories
Announcements, JavaFX, Visage
Tags
dsl, JavaFX, language, Visage
Comments rss Comments rss
Trackback Trackback

JavaOne Enterprise JavaFX and JFXtras Presentations

steveonjava | September 26, 2010

Speaking at JavaOne was challenging, but fun this year. With the surprise announcements about JavaFX 2.0 there wasn’t a lot of time to respond, but I managed to refocus all my talks in a very short amount of time.

Pro JavaFX Platform – Building Enterprise Applications with JavaFX

My second talk on Tuesday with Jim Weaver was packed to the brim with folks eager to ask questions about the new direction.  We managed to both hit our original presentation topic about enterprise JavaFX development as well as distill the new JavaFX 2.0 market pitch down to something that makes sense to developers.  As an added bonus we threw in some examples of what the new JavaFX APIs could look like from Scala code.

Download Pro JavaFX Platform Presentation as a PDF

JFXtras – JavaFX Controls, Layout, Services, and More

The JFXtras BOF was standing room only with a lot of very prestigious folks from the desktop community filling the chairs.  We covered the latest JFXtras 0.7 features and updated everyone on the plan for the future of JFXtras in light of the JavaFX 2.0 announcement.  At the end of the presentation we announced a new language project called Visage to fill the gap left by JavaFX Script (more on this in a future post).

Download JFXtras Presentation as a PDF

Even if you couldn’t attend, hopefully you can get a flavor for how the talks went by skimming the above presentations.

See you at JavaOne next year!

 
Comments
6 Comments »
Categories
JavaFX, JFXtras, Presentation, Pro JavaFX, Visage
Tags
JavaFX, javafx 2.0, javaone, JFXtras, Visage
Comments rss Comments rss
Trackback Trackback

JavaFX 2.0 (a.k.a. What Just Happened to JavaFX Script?)

steveonjava | September 21, 2010

There were some huge announcements at JavaOne today for the JavaFX platform.  Overall I think the announcements show some very positive momentum for the future of JavaFX and rich client Java, but there were some casualties…

In this blog I will cover the salient bits, but if you would like an opportunity to hear it directly from the JavaFX leadership team in a free event, we will be hosting a JavaFX 2.0 event with Richard Bair and Jai Suri at our next SvJugFX meeting.  As usual, the event will be streamed live, and questions can be asked remotely via Google Moderator.

.

The Good Parts:

Java and Alternative JVM Languages

JavaFX has a new API face.  All the JavaFX 2.0 APIs will be exposed via Java classes that will make it much easier to integrate Java server and client code.  This also opens up some huge possibilities for JVM language integration with JavaFX that Jonathan Giles and I explored in our JavaOne talk today.  We did a whirlwind tour through four different JVM languages (Ruby, Clojure, Groovy, and Scala) showing what JavaFX 2.0 code may look like when ported to these different languages.

Here is the full presentation deck:

JavaFX Your Way: Building JavaFX Applications with Alternative Languages

Which can also be downloaded as a PDF.

Open Source Controls

Read the rest of this entry »

 
Comments
18 Comments »
Categories
Announcements, JavaFX, JavaFX Mobile, Presentation, SvJugFx
Tags
clojure, groovy, java, JavaFX, javafx 2.0, javaone, ruby, scala
Comments rss Comments rss
Trackback Trackback

« Previous Entries Next Entries »

  • Travel Map - Let's Meetup

Publications

   

Upcoming Talks

QCon NY

Steve On…

  • Everything
  • Agile
  • Flash
  • JavaFX

Archives

Affiliations

Awards

2009 JavaOne Rock Star!

Disclaimer

Views and opinions expressed here are all my fault... complain to me, not my employer. :)
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox