Flash Player 9 Update 3 Sim-Ships on Windows, Mac, and Linux

Yesterday was a monumental day for Flash Player. For the first time ever, a major release of Flash Player was simultaneously shipped for all three of the major operating systems - Windows, Mac, and Linux! This illustrates Adobe’s commitment to being truly cross-platform. There isn’t a ubiquitous platform in existence that is as committed to cross-platform compatibility as Adobe is with Flash Player. This is one of the things I love about Flash Player. Sun promised us “Write Once, Run Anywhere” with Java and yet they have never been able to really deliver it. Theoretically maybe, but in reality how many Java apps / applets do you see with the breadth of use that Flash Player has? Despite Java’s disappointing failure of true ubiquitous cross-platform compatibility I am hopeful that the OpenJDK will fix this. The OpenJDK does seem to be fixing the recent problem of Java 6 not being available on OS X.

Congrats to the Flash Player team! This is a significant milestone that everyone benefits from!

For those of you building Flex applications you can download the debug versions of this new release here. Also there is more information about all the great new features and bug fixes in this release on Tinic’s blog, Mike’s blog, and Emmy’s blog.

Can Sun Monetize Java with Transactional Memory?

Admittedly I know very little about concurrent computing. But the consensus seems to be that it’s the future. We can’t keep building faster CPUs so we are just going with more of them. This presents a problem for software that can’t easily be split into pieces. If some CPU intensive piece of code can’t be chopped up to run in parallel then it is constrained by the speed of a single CPU. So what is the solution? Some think that the programming models need to change to better accommodate parallel computing. The problem is that no matter how smart the programming model is at splitting stuff up you are always going to be blocked by IO operations - memory, ram, network, etc. Others think that one solution may be Transactional Memory. This can potentially alleviate the problem of threads waiting for locks.

Allegedly Sun is working on implementing Transactional Memory in their next generation of processors. Now what if the Sun Java Virtual Machine were tuned to run unbelievably fast on these new processors? One missing piece to this theory is the programming model. I haven’t done a lot of concurrent programming but I hear it’s quite difficult to get right in Java. Allegedly the concept of Agents in Scala (which runs on the JVM) makes concurrent programming much easier. Combine Agents with Transaction Memory and a JVM tuned to take advantage of it and maybe we could see a significant performance boost associated with the multi-core/cpu machines.

I’ve always liked Sun hardware but with the low cost of Intel and AMD hardware the additional cost may not seem worth it. However if Sun hardware ran my Java 10x faster I’d be totally sold. Now that is an interesting way for Sun to monetize Java… At least for a while.

Online Videos: Jive Software Talking About Flex

Jive Software has always stood out to me as being a company that really cares about the user experience. I remember way back nearly 10 years ago when Jive Forums was one of the only (or at least most popular) commercial products built on the Java stack. Recently I was able to meet some of the Jive folks when I presented at the Portland Java User Group. You can tell that they are passionate about creating great software. So it’s great to see that Jive Software is embracing Flex!

To see some of the Jive folks talking about Flex check out these videos:
David Smith talks about Actionscript, Javascript, and the Future of Webapps

Using Flex for Real Time Collaboration with Derek DeMoro

Jive, keep up the great work! I can’t wait to see how you build amazing user experiences with Flex and Adobe AIR!

What is a Rich Internet Application?

The more software experiences become like the natural world the more users are pleased with those experiences. One of the most powerful, understandable, and universal concepts in computing is the idea of a desktop containing files and folders. Users embraced this metaphor in their software because it modeled their natural world experience.

There is a paradigm shift underway. In this shift, developers are creating user interfaces which more closely model the natural world. Since 2002, the term used to describe these types of software applications is “Rich Internet Applications”, or RIAs. Technologies like Ajax, Flex, Silverlight, Adobe AIR, and JavaFX are growing in popularity as this shift to RIAs gains momentum.

But what is an RIA? Answering that question is like trying to answer “What is a tree?” You may be able to identify an RIA or a tree with certainty when you see one, but coming up with an exact definition can be very difficult. In cases like this, the best one can do is to identify some of the fundamental characteristics that the term encompasses.

When you break down the phrase “Rich Internet Applications”, you find that “Internet” and “Applications” are well understood. It’s the “Rich” aspect that makes RIAs interesting, and it’s the “Rich” aspect that requires a fuller explanation. Essentially, a Rich Internet Application is capable of delivering a rich experience to the user. It is the richness of the experience that is often enhanced by making software that is more natural – more connected, more alive, more interactive, and more responsive.

Connected

We are all connected. On this relatively small planet we all have many things in common. We communicate with one another via many different methods, in many different languages, sometimes easily and sometimes with difficulty. Likewise RIAs are built on a network that connects us all - the Internet. RIAs use this network of billions of connected pieces to help us communicate - between each other and between systems, sometimes easily and sometimes with difficulty. And like each of us, in some scenarios RIAs need to be able to work when disconnected from the Internet.

Alive

Movement and the passing of time are critical to our experience of beauty and the emotional reaction we have to it. Watching waves continuously crash on a beach is an experience which fills us with life. Similarly, we would not sit and watch a beautiful sunset for very long if it never changed. In RIAs, we create rich experiences by modeling the movement and beauty we find in the natural world. Smooth sliding transitions, zoom effects, soft blurs, drop shadows, and rounded corners are elements of RIAs which help make software feel more like the natural world. Beauty is often simple and never overdone. Software that feels more alive evokes an emotional response from us. That emotional response can help to improve our overall satisfaction with the software. RIAs should feel alive.

Interactive

When people communicate they interact — sometimes physically, sometimes audibly, and sometimes visually. Interaction is how we transmit and receive information. The richness of an experience is heavily dependent on this interaction made possible by our senses. RIAs facilitate physical, audible, and visual interaction. Many new devices are allowing for more natural methods of physical interaction. Multi-touch interfaces like tablet PCs and media players are becoming more common because users want to interact with software like they interact with objects in the natural world. Many more software applications are also adding video and audio capabilities, and some of these applications support bi-directional multimedia interaction. This allows users to interact visually and audibly in the context of an application. Imagine filling out a form online and, if needed, being able to interact via webcams with someone who can help you complete the form. Applications which embrace interactivity to that level are helping to bring natural world interactivity to software experiences.

Responsive

In the real world when people interact with each other or with objects like rocks and trees, those things typically respond quickly. If I kick a rock it immediately moves, unless it’s a big rock in which case my foot immediately hurts. If someone speaks to another person they expect a timely response. At a baseball game, you can see scores whenever you want, just by looking in the right place. Too often in the world of software people are forced to wait for their computers to respond. Whether due to network connectivity issues, processing limitations, or other problems, software too often makes us wait. Most web applications leave users waiting for at least four seconds every time the user clicks on something. With many applications the wait times can be significantly longer, even on a broadband connection. Imagine what an everyday conversation would be like with that latency. Real-time streaming, high performance client side virtual machines, and local caching mechanisms are becoming in integral part of RIAs because these technologies reduce latency, increase responsiveness, and make software feel more like the natural world.

Natural Software Experiences

All kinds of software applications — from ERP business applications to word processing applications — are embracing the characteristics of what we now call Rich Internet Applications. This move is happening because users intuitively want to experience software like they experience the natural world.

Rich Internet Applications are proliferating because they are more connected, alive, interactive, and responsive than yesterday’s software. In ten years nearly all software will be what today is called a Rich Internet Application. But in ten years it will be only natural to just call it “software”.

New Article about Flex and Java

My friend Jon Rose has written a great article on using Flex and Java together. Jon is a long time Java programmer. We were coding Java web apps together back in the days before Struts. It’s great to see Jon making statements like “Flex is the most obvious and elegant solution currently available to Java developers.” The article also references some of my code from the Census App to show how easy it is to integrate Java & Flex. If you are a Java programmer you should definitely read this article.

Flex & Flash as Competitors to Java?

As previously discussed, my friend Joshua from Sun recently blogged about how the consumer JRE will take market share from Flash in 2008. Today Sameer Tyagi , also from Sun, blogged about problems with using Flex to front-end JAX-WS. Both posts seem to insinuate Flash and Flex as competitors to Java. Yet for me Java and Flex have always been a perfect match.

The continued success of Flash and Flex only helps to better position Java in the enterprise. Adobe is not a threat to Java’s continued dominance on the server. In fact many Adobe enterprise products are built on the Java platform including Flex Data Services. If you must have an enemy then I suggest targeting those who actually have something to gain by Java losing market share in the enterprise. That is definitely not Adobe.

As I’ve said elsewhere, Java and Flex developers should be working more closely together to make building RIAs easier for developers and to make experiencing those applications better for end users. Both technologies have similar values when it comes to openness, free tools and runtimes, and cross platform support. And the areas in which Java and Flex overlap are really very minimal. Developers and end users have much more to benefit by our harmony than by our discord. I continue to meet many people who are embracing this vision of a harmonious union of these two great technologies. I encourage others to consider doing the same.

Now to respond to Sameer’s disappointment “with the Web Services support, or lack thereof, in Adobe’s recent Flex 3.0 beta release” I built a quick Flex app which calls the non-trivial Web Service from the JAX-WS samples that Sameer referenced. Here is the code for what I came up with:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

  <mx:Script>
  <![CDATA[
  import mx.rpc.events.ResultEvent;
  import mx.rpc.events.FaultEvent;
  import mx.controls.Alert;

  private function handleFault(event:FaultEvent):void
  {
    Alert.show(event.fault.faultDetail, event.fault.faultString);
  }

  private function handleResult(event:ResultEvent):void
  {
    Alert.show("Your shipment number is: " + event.result.shipmentNumber, "Purchase Order Accepted");
  }

  private function submitPO():void
  {
    var po:Object = new Object();
    po.customerNumber = "1";
    po.orderNumber = "1";

    var item1:Object = new Object();
    item1.itemID = 1;
    item1.name = "a";
    item1.price = 1;
    item1.quantity = 1;

    var item2:Object = new Object();
    item2.itemID = 2;
    item2.name = "b";
    item2.price = 1;
    item2.quantity = 1;

    po.itemList = [item1,item2];

    srv.submitPO.send(po);
  }
  ]]>
  </mx:Script>

  <mx:WebService id="srv" wsdl="http://localhost:8080/jaxws-supplychain/submitpo?wsdl" fault="handleFault(event)" result="handleResult(event)">
    <mx:operation name="submitPO"/>
  </mx:WebService>

  <mx:Button label="Submit PO" click="submitPO()"/>

</mx:Application>

This is a very simple example and doesn’t have the UI necessary to actually assemble a PO based on user input. That piece would also be trivial so I’ve left it out of this example. The key thing is that it correctly talks to the JAX-WS based Web Service. This is just one example which uses Java and Flex together. There are many more. And there are plenty of enterprises happily using Java and Flex together. Pitting these technologies against each other does nothing to benefit developers or end users.

2008 - The Year of Client Java?

My friend Joshua from Sun has predicted that “2008 will be the year that client Java starts taking market share from Flash”. This is a pretty bold prediction reminding me of when I used to hear this same sort of statement about Desktop Linux… “1999 will be the year of Desktop Linux”.

Don’t get me wrong… I love Desktop Linux. Been using it since about 1993. And I love Java. Been using it since 1996. But lets be honest about the reality of client Java, desktop Linux, anything that touches the mass consumer space. It has to just work. I’m thankful that Ubuntu and the Consumer JRE are headed this direction. But Flex and Flash are there today! Flash just works. So much so that in the first nine months, Flash Player 9 reached 84% adoption in the US and is likely well beyond 90% currently. That is a platform you can rely on. One you can build on today. Tons of consumer Flex applications have already been deployed. And tons more are not visible because they are still being built or behind the corporate firewall.

So to my friend Joshua and his pals at Sun: Keep up the good work. Seriously! I’m excited about where you are going!

And to the people building Rich Internet Applications: As JD says, “You can ship with Flash.” Not in 2008, but today.

Summer of Flex and AIR

There is a ton of great Flex and AIR events going on over the next few months. Here’s the run down of events I’ll be at:

The FREE Flex Camp is July 27th in San Francisco. This is going to be a great way to learn more about Flex. Spots are going fast so go register today! I’ll be at this event so hopefully I will get to meet some of you in person.

The onAIR Bus Tour starts July 10th and will hit 18 cities in North America. These events are going to be off-the-hook. I’m hoping to spend some time on the bus, but not sure when yet.

My favorite events of the summer will be the two being hosted by Bruce Eckel in Crested Butte, Colorado. I’ve always loved CB no matter what the season. But honestly, these events will change your life. :) The first Bruce Eckel hosted event I ever went to was one of those defining moments. It was like the light bulb went on and I realized that this is how all conferences should be run. Ya see… Bruce does Open Space style events. These events are absolutely the best way to learn because you learn through interaction, trial & error, and conversation. In other words, you make connections, not just in reality, but also in the gray matter of your head. Have I convinced you yet? I hope so. You won’t be let down by these events. Anyways, here they are:

Flex & AIR Jam (August 13-14) Two days of hands-on coding with peers and experts. No matter what your level of experience with Flex & AIR you will leave this event knowing a ton more. Besides what could be better than two days in CB with Bruce and I? ;)

RIA Summit (August 15-17) Three days of discussion around RIA and the future of web & desktop software with some of the folks who are behind the movement. You don’t want to miss this event. Pair this with the Flex & AIR Jam and you get five fabulous days in CB with Bruce & I! ;) Seriously though… This event will unforgettable.


If that wasn’t enough summer madness for you there is more…

I’m speaking at the Kansas City JUG on July 11th.

Then out to Raleigh/Durham, North Carolina to present at the Triangle JUG on July 16th.

The next day, July 17th, Andy Oliver and I will be hosting a Flex Sprint at the buni.org offices.

On July 19th I’ll be in Phoenix presenting at the Phoenix Flex User Group for their inaugural meeting.

And on July 22 I have two sessions at Ubuntu Live.

Wow! There is a ton going on this summer! Tons of great opportunities for you to engage with others, learn more about Flex and AIR, and let me take you out for a beer! Hope to see you at one (or all) of those events!

If you can’t make it to any of those events I’ll be really bummed, but you could join us over the web.


Oh and don’t forget… MAX 2007 is coming Sept 30 - Oct 3!

TriJUG Presentation and Flex Sprint in North Carolina

On July 16th I will be presenting at the TriJUG in North Carolina beginning at 6:30pm. There will be some great give-aways including a copy of Flex Builder 2. Then on Tuesday July 17th, buni.org and I will be hosting a half day Flex Sprint in Durham. This will be a great opportunity to get some hands-on Flex training, FOR FREE! Andy Oliver and I will be helping as many people who show up, learn Flex. You just need to bring a laptop (with power adapter & wireless). Festivities begin at 8:30 and end at noon. We will meet on the lower floor of Bean Traders Coffee.

If you are going to come to the Flex Sprint please register:
http://upcoming.yahoo.com/event/215190/?ps=5

Also, please pre-install Flex Builder 2 or Flex Builder 3 beta 1.

Hope to see you there!