Archive for the 'Rich Internet Applications' Category

The GAE SWF Project

The GAE SWF Project: Knowledge and tools to help you build Flash and Flex apps on Google App Engine

Today I'm releasing The GAE SWF Project, a resource of Flash and Flex-related knowledge specifically aimed at getting you up and running quickly with Google App Engine. If you want to skip all the details and start playing with it, skip to the Getting Started section.

Everyone else, read on!

When Google announced Google App Engine last week, I couldn't believe what I was hearing. It was as if someone had said, "Hey, Aral, tell us what your perfect development environment is and we'll build it for you."

In recent weeks, I had started playing with Python and Django and experimenting to see whether I could use it to build the web application for the Singularity web conference that I'm organizing at the end of October. Turns out that I could not have picked a better time to invest in learning Django and brushing up my Python as Google App Engine is heavily influenced by (and supports) Django and is written in Python.

A framework for the Singularity Conference

Singularity is shaping up to be a really great conference. I'm honored to have a constantly-expanding stellar line-up of speakers and yet the sessions are just one very important aspect of the conference. I find that you get as much out of your social interactions with speakers and other attendees at conferences as you do from the sessions. And Singularity is no exception.

The Singularity conference application is not something you will login to on October 24th and never visit again beyond October 26th. On the contrary, I plan to launching the application as early as possible and add features as we go so that we can start building the community around the conference. This is essential for the organization of the local conference hubs, for building friendships months in advance of the conference, and so that you can influence what the conference ultimately becomes (you do not have to attend the conference to join the online community.)

When I initially announced the Singularity conference two months ago, I stated in the About page that Singularity would have a "focus on open source, the community, and on giving back."

Today, I'm taking the first step towards delivering on that promise by releasing the initial underpinnings of a framework that will eventually power the Singularity conference web application. I present to you The GAE SWF Project.

The GAE SWF Project

The GAE SWF Project (hey, Google chose the name, I only provide the juvenile attempts at humor) is a resource of Flash and Flex-related knowledge specifically aimed at getting you up and running quickly with Google App Engine. The initial release contains a proof-of-concept Flash 9 client showcasing a pre-alpha version of The GAE SWF Framework. The framework is a very light-weight combination of Python and ActionScript 3 that uses some of the best open source components available today on the Flash Platform and Python ecosystem. It is inspired at its core by best practices and a pragmatic approach to application development.

The proof of concept (and, indeed, the whole project) specifically targets Google App Engine. This is by design. The framework is not a generic one (although, by all means, feel free to get inspired and port it if you wish). The dedicated focus is part of the appeal. It means that we can make things simpler.

There will be no abstraction for the sake of abstraction and no premature abstraction; the framework will evolve by encountering real-world problems and solving them.

Finally, keep in mind that you are viewing the fruits of three days of work at the moment (this, in itself, should be testament enough to how easy -- and fun -- Google App Engine makes development). It is early days but I feel that we've made a good start. I hope to hear your thoughts and feedback in the comments.

The Proof of Concept

The proof of concept is built on Google App Engine using Google's webapp framework.

It showcases several fundamental architectural considerations, the most important of which I've outlined for you below.

HTML and Flash in a tree...

You use handlers in app.yaml to host a mix of Flash and HTML content, including the Flash Remoting gateway, in a single Google App Engine app.

Embed Flash content using SWFObject

SWFObject is the way to embed Flash and Flex applications in your HTML. Use it. 'Nuff said.

Deep links

You implement deep linking using a combination of server-side Python and SWFAddress so that both SWFAddress-style and regular URLs are supported. Regular URLs are translated to SWFAddress-style hash/anchor URLs on the server.

Thus, both of the following URLs are valid ways to reach your profile page on the proof of concept Flash 9 client:

Regular URL:

http://gaeswf.appspot.com/examples/initial/profile

SWFAddress-style URL:

http://gaeswf.appspot.com/examples/initial/#/profile

Flash content that obeys browser text-size changes

Users with poor eyesight or in environments with reduced-visibility (such as bright sunshine outdoors) may want to increase the size of the text displayed in the browser. By default, Flash and Flex content does not react to these text-size changes. However, it is possible to make Flash content obey browser text-size changes and the proof of concept implements one such method that does not involve any alterations to the Flash app.

(You can read more about similar issues -- and see some juicy Flash myths debunked -- in my review of the talk I gave at Highland Fling this month titled Bare-naked Flash: Dispelling myths and building bridges.)

PyAMF

PyAMF is a Flash Remoting implementation for Python. It has a dedicated and responsive group of passionate developers working on it, led by Thijs Triemstra, Nick Joyce, and Arnar Birgisson. On Tuesday, the team released PyAMF 0.3 with support for Google App Engine.

The GAE SWF Framework uses PyAMF as a core component to communicate with the server and the various Google App Engine APIs. It is currently running PyAMF 0.3.

The PyAMF gateway is setup as a regular mapping, and mapped to /gateway in app.yaml.

Users API

You use the Google App Engine Users API to login and out of the Flash application. The current Flash 9 proof of concept implements one of three possible ways of handling logins (see the note in my earlier blog post about the other two ways.)

Intelligent forwarding after login

When you hit a deep link in the application without logging in, you are automatically forwarded to the link after you login. This is a behavior that you are accustomed to seeing (and expect) in HTML-based applications but I have rarely seen it implemented in Flash and Flex applications.

DataStore API

The Google App Engine DataStore is a massively scalable database based on Google's Bigtable (the same distributed database that powers their search and services like Google Earth).

The proof of concept has a profile section where you can fill in your name and a URL (the Users API currently does not provide your GAE app with the user's name, just their email address). This data is saved via PyAMF and the DataStore API.

(All server-side services are in the /services package.)

Client-side and server-side validation

The Profile Screen shows you how to implement two different types of validation: simple client-side validation and server-side validation.

The Name field performs simple client-side validation that stops the user from submitting the form without entering a name.

The URL field, on the other hand, actually hits the server and asks the DataStore to verify that the URL is valid. When you think about it, it makes sense to use server-side validation code to validate more complex data types using the exact same code that the DataStore API uses.

The user experience is managed via visual cues that are carefully scripted using the excellent KitchenSync AS3 sequencing library by Mims Wright. (Mims just added me as a project member so I can contribute a small update I blogged about earlier.)

(I'm still working on tweaking the timing of the type wait duration for firing the server-side validation code to make it as seamless as possible.)

As the framework develops, I know that the KitchenSync library is going to be an essential, core element, and I look forward to contributing back as much as I can to the project.

Mail API

The proof of concept also makes use of the Google App Engine Mail API to send email confirmations to your Google Accounts email address after you update your profile.

When initially working with this, I was searching for a simple way to monitor the mail that was being sent from the app. Although the Development Web Server allows you to specify an SMTP server when you start it, I couldn't get it to work with either GMail or my web host's mail server. And setting up sendmail or postfix was a pile of worms I didn't want to sample.

Instead, I found a simple, open source SMTP server written in Python that's perfect when developing locally with the Development Web Server. It's in The GAE SWF Project app that you can download. To start it, simply change to your The GAE SWF Project folder and type:

./monitor_mail

You will see all email sent from your application in the Terminal window. (Note: I run on a Mac and all the commands in this article are meant to be run in Terminal on OS X. You may need to tweak them slightly for your operating system of choice.)

CSS, etc.

I may introduce myself as a Flash Developer but that doesn't mean that I don't care about the rest of the web. With good friends like Andy Budd, Richard Rutter, Paul Annette, and Jeremy Keith living almost a baseball-bat-wave away from me, I'd be scared silly implementing a new site with anything less than pristine markup. So that's what I've strived for here and I hope I've at least come close. (I did use one <br/> tag, for which I feel very dirty indeed!)

Nearly all of the credit for the CSS goes to the excellent YUI Grids CSS library that Rob Knight clued me into via Twitter last week when I was battling with altering the K2 theme on Singularity to make it into a cross-browser three-column fluid layout.

(The scale9-esque fluid download cell is courtesy of the even more rounded corners with CSS technique.)

The HTML content is structured using several Django templates, which are supported by Google's webapp framework.

Finally, the Flash client uses the TabBar component from the open source Yahoo Astra Flash components and Uza's AS3 Global Object to implement several global convenience properties (like the current SWF's URL).

Getting Started

Getting started with The GAE SWF Project couldn't be easier.

1. Download and unzip

First off, download the Google App Engine SDK (includes the local Development Web Server and webapp framework.)

Next, download the latest release of the The GAE SWF Project and unzip it.

(Or, you can check out the unstable, bleeding-edge version from The GAE SWF Project Subversion repository's trunk on OSFlash.)

2. Start the server

Open up Terminal and navigate to the folder you unzipped The GAE SWF Project to. To start the Development Web Server type:

./start

This is a convenience script that I made that starts the Development Web Server and sets the mail server as localhost:5000. You can change these in the script of just use dev_appserver.py . to start it up without mail support.

If you want to monitor the email that gets sent, open up a separate Terminal window and, in The GAE SWF Project folder, type:

./monitor_mail

3. View the app and start hacking!

Now that the app is running, view it in the browser by hitting http://localhost:8080.

You can now open up the source folder and start exploring!

Trace you, trace me, trace it for always...

Wow, did I just paraphrase Lionel Richie?

Anyway, I find it useful to tail the Flash trace log (especially to see trace results in the browser and online). Here's how you do it:

Before you start, you need to enable logging by creating a file called mm.cfg in /Library/Application Support/Macromedia.

In it, enter:

ErrorReportingEnable=1
TraceOutputFileEnable=1

You only need to do this once. After that, whenever you want to tail the log, open up a new Terminal window and type the following, replacing USER with your home folder:

tail -f /Users/USER/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt

Play, enjoy, share, have fun!

As I state on The GAE SWF Project site, I hope that this open source effort will help you to get started quickly with building Flash and Flex application on Google App Engine. In the past few days, I have had more fun developing this than I can remember in a long while. I love Python, I love Django, I love Google App Engine, and I love Flash and Flex. To have them all together... well, that's a dream toolset, right there!

And, there's something to be said about writing your app and then letting Google handle the rest. Personally, I can live with that.

(Oh yes, and I do desperately need to talk to someone at Google about hosting the Singularity conference web application on Google App Engine with regards to the quotas -- if you know whom I should contact, please either let me know directly at aral {at} aralbalkan(.)com or leave a comment below -- thanks!)

The GAE SWF Project is currently a proof-of-concept; it's a three-day old baby that I hope will blossom into a useful resource.

I hope you you enjoy it and I hope that it makes your life a little easier or at least gives you food for thought.

Play with it and let me know what you think in the comments.

Web ‘08 predictions: The rise of RIAs and the 3D web

Recently, I gave a talk titled Web '07 - Web '08 at the Christmas charity dinner (linking to the Google cache as the original site appears to be down at the moment) organized by Sussex Geek Dinners. It was a lighthearted tour through the highlights of Web '07 and a look ahead to Web '08* with predictions by myself and some of my friends.

In my predictions for 2008, I talked about how we will be seeing more RIAs in 2008 -- both from Adobe and third parties -- how Silverlight is not going to have a widespread impact (although is definitely something to keep an eye on for 2009/10 and the competition is going to give Adobe a welcome push in the right direction), how mobile Flash is going to move away from Flash Lite to full-scale Flash playback on devices and how we're going to see Flash on the iPhone, how sometimes-connected applications and web/desktop hybrid applications are going to gain importance with AIR, Google Gears, etc., and how real-time 3D in Flash is going to change the aesthetics of the web.

If you've been reading my blog for a while, you might remember that last phrase. It's the same thing I uttered back in 2005 before the release of Flash 8. Back then, .Net magazine pasted my prediction on its cover and I was talking about alpha-channel video, not 3D. I think we can agree that alpha channel video in Flash has altered the aesthetics of the web in the intervening period and I am convinced that 2008 is the year that Flash is going to do the same thing with 3D thanks to Papervision3D.

Specifically, the combination of alpha-channel video, bitmap effects and filters, and real-time 3D is going to create a new benchmark in production values for online experiences. We're already seeing trailblazers like Carlos Ulloa, Ralph Hauwert, and John Grden are pushing the boundaries in this area and, in 2008, we are going to see more mainstream adoption of these techniques.

(I just read a somewhat myopic article in 3D World magazine titled "The look of 3D in 2008" that didn't even touch upon web 3D in any of its predictions! Could it be that web 3D is going to blindsight the traditional 3D community?)

To these predictions, I add two new ones that are closer to my heart: Firstly, Flash developers are going to get a lovely toy-box of APIs to work with and, secondly, we're going to witness a conference that's also going to be a technological tour-de-force to very visibly and publicly define how far we've come in Web '08. The latter has me more excited than I've been in a _very_ long time. And that's all I'm going to say about that for the moment.

The web just keeps getting more and more exciting... here's to a most wonderful 2008!

* Just as an aside, can we please drop the version numbers? We know in software that the moment an application gets its version number it's out of date. So why do we want to apply the same paradigm to describing the web? It's far more accurate, imho, to analyze the characteristics that defined the web in a given year. Hence, Web '08, not Web 3.0).

Building trust in Flash-based RIAs: a security feature request

Writing about secure passwords in Buzzword got me thinking about the state of security and user trust in Flash (and Flex)-based Rich Internet Applications in general. After giving it some thought, I concluded that we have a little more work to do if users are to be expected to have the same sort of trust in Flash-based RIAs as they do for JavaScript and HTML-based applications and web sites.

The key security issue I see with Flash applications, especially those that deal with sensitive information, is that the user has no way of knowing whether or not the application is communicating their sensitive data over a secure connection.

In a traditional web application, on the other hand, serving the application over HTTPS makes the security lock icon display in the browser and thus alert the user that their data is being handled securely. If a traditional web application then tries to make an HTTP call, the user is alerted to this.

The security lock icon tells users that their data will be sent securely to the server.

In the comments to my previous post, for example, I asked whether Buzzword sends my usersame and password over HTTPS and David Colleta replied that it does. Now I trust David, of course, but what mechanism does Joe User have to trust Jane Developer when it comes to how RIAs handle data in general?

The problem I'm describing manifests itself differently based on whether you examine how it affects users or developers:

Users: A false sense of security

A Flash-based RIA is served over HTTPS. The user sees the security lock icon in their browser and thinks that any data they provide will be securely transfered to the server.

Problem: Unfortunately, the security lock only means that the application itself is being securely transmitted. Internally, the application can transfer the user's sensitive data in clear text for the world to see via HTTP and the user would be none the wiser.

Developers: How can I say "this application really is secure?"

A developer creates an application that handles sensitive data and makes sure that every data call in the application is over HTTPS. The application itself, however, is served over HTTP and so the user does not see the security lock icon in her browser and chooses not to trust the application.

Of course, the application can tell the user what it's doing but again, the user would have to trust that the application wasn't lying.

As you can see, the current state of affairs benefits neither the user nor the developer.

From the developer's perspective, there is no way, currently, of communicating to the user that the application transfers data securely short of loading the whole application over HTTPS. And, as far as the user is concerned, an application that is served over HTTPS can still make HTTP calls and compromise the user's data without the user being alerted to this fact.

One possible solution

One possible solution to this is to have Flash applications that are loaded over HTTPS display a dialog box before attempting to do an HTTP call and to give the user the option to cancel the call if they want to.

A similar feature exists in browsers already where a browser will warn you if you are about to leave an HTTPS session using a dialog box that looks like this:

JavaScript alert warning the user that they are about to leave a secure session.

What I'm proposing is a similar dialog to warn users if a SWF that is loaded over HTTPS attempts to make an HTTP call:

A proposed JavaScript alert to warn users that a Flash application served over HTTPS is about to make an unsecure HTTP call

This one enhancement should go a long way in giving developers a way of saying "this application handles your data securely" and help build trust in users.

I feel that this will become more of an issue as more RIAs start handling sensitive data like credit card details and I would love to see some proactive steps taken by Adobe to address it in upcoming versions of the Flash player.

Do prescribed secure passwords really result in better security?

buzzword password error

I was excited to hear that Buzzword is in public beta so I tried to sign up this morning only to be greeted with an error message: "A password must be at least 6 characters, with at least one alphabetic and one non-alphabetic character."

It's not as bad a policy as some applications have (my favorite is "Your password must be between 6 and 8 characters long and must contain at least one number and at least one non-number, non-alphabetical character). Or, even worse still, I've actually seen an application that generated a password for me and then didn't give me the option of changing it (thankfully, I've only run into that train-wreck once).

These policies are bad because, whether we like it or not, most people use the same password (or several different ones) for different services. Yes, it's not ideal for security but it is the reality we are faced with. Given this, you can either let people use their existing passwords or dictate that they create a new one for your application. Whenever an application forces me to do this, I guarantee that I will forget this password. And what do most people do when they know they'll forget a password? That's right: they write it down somewhere. And how are most successful hack attacks carried out? You guessed it: through social engineering and by rummaging through offices and/or garbage bags for little pieces of paper with passwords on them.

That little yellow post-it that you just wrote your new eight character super strong Buzzword password on and stuck to your monitor at work is more of a security risk than the six character password you usually use for stuff that you have locked away safely in your head.

Update: I also just noticed that the Buzzword login page is being served over HTTP. Of course, they may be making an HTTPS call in the application but, if they're not, it means that your lovely strong password is open to everyone else on the network to see as it travels in clear text over the Internet.

Not scaring away users with security

Nick Bradbury has a great blog post about how operating systems scare users from downloading and installing desktop applications with security alerts. There's a big difference between *being* secure and scaring users. It appears to me that the less secure an operating system is, the more it tends to resort to warnings as a way of limiting its liabilities (case in point: Windows and Internet Explorer).

Nick's post frames the issue as one of the reasons why people are moving to using web applications in favor of desktop applications but I want to bring this to the attention of the RIA crowd and Adobe. I know that Adobe (and Macromedia, previously) take security very seriously and I hope that they will continue to do so. However, while doing this, I hope that they remain very sensitive to not scaring users unnecessarily.

d.construct interview podcast

While I was busy meeting a deadline on my latest project, my friends at ClearLeft released the podcast of my interview for this year's d.construct web applications conference in Brighton, UK. In the podcast we talk about smashing myths about Flash usability and accessibility, touch on FlashAid, explore OSFlash and Flex 2, and discuss common issues and concerns shared by the web standards and Flash communities.

You can listen to interviews with d.construct speakers on the d.construct web site.

Are Flash’s Days Numbered? (or “Is Microsoft a threat to Adobe?”)

Mix '06I was recently at Mix '06 in Las Vegas, courtesy of Lynda.com, along with a group of fellow Flash developers as part of a Microsoft-sponsored initiative to both expose some of us in the Flash world to Microsoft's new Expression line of products and to get our feedback on them.

The Expression line includes the incorrectly-named Expression Graphic Designer and Expression Interactive Designer as well as the Dreamweaver-clone Expression Web Designer.

I say "incorrectly named" because Expression Graphic Designer is actually an Interaction Design tool. During one of the sessions, it was used to create a site mock up that was later imported into Expression Interactive Designer to be developed. Which brings me to the fallacy in the naming of the second product: Expression Interaction Designer is actually a development tool. Confused yet? I sure was.

Beyond demonstrating a lack of understanding of the workflow and specialized roles involved in team-based RIA development, the misnaming of the products (if it remains unchanged in the final release versions) will actually harm the industry by perpetuating a less-than-ideal prescribed workflow wherein "graphic designers" will carry out the interaction and usability design of an application, hand it to "interaction designers" who will carry out the user interface *development* function and pass it over to programmers/developers who will carry out the heavy-lifting and back-end integration work in Visual Studio.

The correct workflow, of course, would include *interaction/usability designers* carrying out the design function (based on an iterative process that involves usability testing throughout) and user interface *developers* carrying out the UI development function. As such, Expression Graphic Designer should really be called Expression Interface Designer and Expression Interaction Designer should be called Expression Interface Developer.

(Things are complicated by the fact that you can also use Expression Graphic Designer to carry out traditional graphic design tasks such as creating skins for components. This is why it is better not to prescribe user roles in the names of the products themselves.)

As Branden Hall mentioned in his overview of Mix '06, Microsoft is also making the same mistake Macromedia did when it named all things Flash under the "Shockwave" umbrella. There was confusion even at the conference about what someone was talking about when they talked about "Expression". The answer to this would be to drop the Expression name from the products themselves and perhaps have an Expression Suite that would include all the products (similar to the Adobe bundles.)

In addition to the Expression line, I also sat in on sessions on Atlas (Microsoft's Ajax/ASP .Net library), WPF (Windows Presentation Foundation) and WPF/E (Windows Presentation Foundation Everywhere.)

So, what are all these technologies and what do they mean for us as Flash developers? Are any of them a threat to Flash or to Adobe in the near future? Let me cover each in turn and tell you what I think of them, starting with the Expression suite.

Expression Graphic Designer (previously code-named "Acrylic")

Acrylic is a tool for creating vector and raster graphics. It is, in this sense, a mix between Photoshop and Illustrator. The common technology that ties all of the various Expression tools together is the XAML language that the various tools can output to.

XAML is an XML-based language for declarative user-interface design. Yes, you guessed it, it is very similar to Adobe's MXML, but with some important differences.

The biggest difference for me between XAML and MXML is that while MXML is high-level language that deals mostly with the layout of components, XAML can be much lower level, detailing the drawing of primitive shapes, fills, gradients, etc., in a manner similar to SVG. Although this allows tools like Acrylic to output their graphics in XAML, it suffers from the same readability problems as SVG. Of course, Microsoft doesn't expect you to hand edit complex graphics in XAML, that's what Acrylic and Expression Interaction Designer are for but, unless you're careful, it is possible to end up with single XAML files that are an unreadable hodge-podge mix of high-level UI layout and low-level graphics definitions. Finally, I'm not entirely sure about the bandwidth implications of having complex graphics in XML format. There's a reason (ok, quite a few) that SVG never caught on…

Acrylic as a graphics tool appears to be coming along nicely and will no doubt be more than adequate if you are going to be developing for the WPF platform. It is by no means an alternative to Photoshop or Illustrator, however, and it would be naïve to expect a version one tool to in any way match the capabilities of either of these mature products.

Expression Interaction Designer (previously code-named "Sparkle")

Sparkle, which has widely been reported as a "Flash-killer" is nothing of the sort. It is an uneasy cross between the Flash IDE and Flex Builder; a tool that appears aimed primarily at interface design but complicated by the ability to draw primitive shapes (lines, shapes, paths, etc.) and create timeline-based animations (or perhaps it's a vice-versa: a design/animation tool complicated by UI layout features.) Regardless, the key word here is "complicated."

As a Flash and After Effects veteran, I was confused by the non-standard timeline and use of keyframes during the demos. It looks like instead of taking a lean and mean approach (and perhaps even creating two different tools), Microsoft took a "everything but the kitchen sink" approach, using the Flash IDE and Flex (or the Flash IDE and perhaps parts of Visual Studio) as influences. I'm not sure if they realized at the time that the Flash IDE is the product of many years of iterations, resulting in a lot of excess baggage – some of which we will hopefully be able to shed as Flex becomes the primary tool for RIA development. Sparkle appears to be starting life with all that baggage and I don't see that as a good sign. Then again, Microsoft's never one to be accused of bloat in their applications! :)

Sparkle will no doubt be an important part of the workflow for developing WPF applications but it is by no means a Flash killer. For one thing, it is not a tool for creating Flash applications and thus doesn't compete directly with the Flash IDE. If anything, WPF as a platform will be competing with Flex on the enterprise front and choice of platform (WPF vs. Flash) will determine the tools used for any given enterprise in the future. (Note the word "future" as none of this stuff is shipping at the moment.)

Expression Web Designer (previously code-named "Quartz")

Quartz is, unabashedly, a Dreamweaver clone. Beyond being a clone, it actually improves upon Dreamweaver in certain aspects such as its handling of CSS, which is definitely far superior to what's in the current release version of Dreamweaver. While sitting through the presentation on Quartz, I actually found myself itching to install it when I got back. I had visions of it replacing Dreamweaver as my main HTML editor when, half-way through, I realized that there was a *big* showstopper: It only supports ASP .Net. Oops!

Bottom line: If you're already a Microsoft house and don't mind ASP. Net lock-in, Quartz is the tool for you. If, however, you like to work with other technologies like PHP, CF, etc., stick to Dreamweaver. (And I'm sure that the Dreamweaver team are not sitting on their butts and will be implementing CSS-handling features that match or exceed those in Quartz for the next release.)

Windows Presentation Foundation (WPF; previously code-named "Avalon")

Avalon is the framework for building applications using XAML alongside C#, VB, etc. It is Windows-only and thus not a direct competitor to Flash/Flex in the consumer market but a definite competitor in the enterprise market where a lot of firms are already Microsoft/.Net houses. Flash applications do not currently match the 3D capabilities found in WPF and the Expression line, coupled with Visual Studio, does provide a very competitive suite of tools/workflow. This is one area in which I hope that competition will be beneficial to Adobe.

For one thing, Adobe has to make the creation of data-rich applications much easier in Flex and support this complete workflow instead of focusing mainly on the client-side UI design/development.

In the Microsoft tools, for example, binding to a dataset is as easy as drag-and-drop. No need to install and configure a separate package with a complicated pricing structure that makes me think far too long (like Flex Enterprise Services). This is how simple Flex Builder should make it. I should be able to introspect my services from Flex Builder and drag and drop to create bindings *straight out of the box*. Until we reach this level of support for the complete app-development workflow in Flex, we will be lacking behind not only WPF/Visual Studio but also other full-stack frameworks like Ruby on Rails.

There is no doubt that Microsoft has a very mature product on their hands in Visual Studio and serious up-and-coming competitors in the Expression suite. Competition on this front should be a very positive factor in getting Adobe to improve both Flex and Flash. Furthermore, as Adobe is far more agile than Microsoft (ok, I know, practically *anyone* is far more agile than Microsoft – perhaps with the exception of Quark!) we will hopefully see Adobe pull an OS-X on Microsoft with incremental improvements to Flex that increase its competitiveness in certain key areas.

(I did have one technical issue with Avalon: The templates system for skinning applications appears to be a gross violation of encapsulation, exposing way too much detail about the internal structure of components in the name of allowing them to be skinned. Flex/MXML's use of item renderers – each of which is a black-box MXML component -- IMHO, offers a much more elegant workflow that doesn't violate encapsulation, resulting in applications that are much easier to maintain and scale.)

Windows Presentation Foundation Everywhere (WPF/E)

Ah, finally, we get to the only technology that is a direct competitor to Flash: WPF/E.

WPF/E is a cross-browser subset of WPF that lacks the cooler features of WPF like 3D and hardware acceleration.

WPF/E applications run in the WPF/E runtime (think Microsoft Flash player/plugin) and can interpret pure XAML as well as Intermediate Language (IL) from any .Net language (I don't believe this capability was in the plugin at the time of the demo.) For scripting, it relies on the browser's JavaScript – which makes me queasy: How are they going to *ensure* complete cross-platform compatibility as long as they're relying on browser JS?

Bottom line: I was not impressed by WPF/E at all. Apart from currently being mostly vaporware, I think that Microsoft is so far behind on this front that they might as well give up now. They mentioned that WPF/E will not be ready to ship until 2007. When I asked about how quickly they expected penetration of the plugin, they couldn't give me any sort of a reply. I'm assuming that the best-case scenario would be in at least one year. So we're looking at something that won't even be worth developing for until 2008, if then. Unless Microsoft manages to pull a ridiculously large rabbit from their sleeves, I see WPF/E going the way of the dodo.

Atlas

If anything had me worried about the future of Flash, it was Atlas, a free framework for building ASP.Net/AJAX applications. This may have something to do with my seeing Ajax as the main competition to Flash/Flex for consumer-facing rich web applications.

Atlas makes the creation of Ajax applications a piece of cake and it isn't purely limited to ASP.Net (although you get some nifty features if you do use ASP.Net.)

Microsoft appears to be covering all its bases with the inclusion of WPF/E and Atlas in its upcoming product matrix.

Vista

During the conference, I got to play with Vista a little and, again, I wasn't really impressed at all.

My Microsoft guide told me that the build they were running was the first feature-complete build and thus was buggier than previous ones but there were certain issues that ran deeper, the most obvious one being the glaring usability issue with the new Start menu.

The Vista start menu has been reorganized so that the initial view shows you your recently used applications. You then have to click on All Programs to get to a separate view that contains a list of all your programs. The problem is that there are no landmarks to let you know that you are now in "All Programs" view. In fact, this relationship is usually one that you would model using a tab control, with the first tab's label being "Recent Programs" and the second tab's label, "All Programs". Instead, Vista hides these landmarks from us, leading to a confusing experience. This is unforgivable in such a key, frequently-used feature.

Apart from my views on the various individual technologies, I came away from the conference with two general feelings. These were:

1. Microsoft does not get simplicity

If there's one overarching feeling I got from the event, it's this: Microsoft does not understand simplicity. Bloat appears to be the dish of the day, with simplicity taking a back seat to a philosophy of "features, features, features!" If there's one thing we have too much of in software today, it's features. We're suffering from feature overload and guess what? We don't use a great number of them! (Remember the 20/80 rule.)

Microsoft and Adobe are both targeting mainstream developers and designers for their tools and the unique selling point for this market is simplicity. I think Adobe gets this better than Microsoft but there's room for improvement on all fronts. Possibly the rarest commodity in our field currently is developer time (it definitely isn't development tools or competing technologies, which we're flooded in). Find a way make it easier for developers to do things ("don't make me think") and you'll get more developers. And I don't just mean in the applications themselves: You have to take a holistic approach to simplicity. Time spent navigating complex licenses and installation/configuration options is still time wasted. Remember, KISS, KISS often and KISS with a passion :)

2. Microsoft is playing catch-up

Most of the conference felt like a history lesson.

I repeatedly watched as Microsoft engineers excitedly told me about these amazing new features they had developed but there really wasn't anything that I hadn't seen before.

Hoss Gifford was telling me after the conference how the session by Microsoft's R&D department showcased a project that consisted of having a looping video as the Windows wallpaper. Apparently the R&D folks were very excited by the fact the video looped perfectly. Excuse me? Surely, the R&D department of the world's richest technology firm is not getting its kicks playing with looped video to create something that I threw together with Flash the day Active Desktop first came out? (I had to abandon my plans for world domination through my "Smart Wallpapers" after I realized they consumed a ridiculous amount of CPU!)

I don't think this is a matter that can be resolved merely by picking up the ball. It will probably require the organization of a state-wide manhunt because not only has the ball been dropped but it appears to have been kidnapped and is probably being held hostage in an underground bunker somewhere.

Basically, the feeling I got was that Microsoft was playing catch-up on multiple fronts. That's not to mean *all* fronts – I believe they've got a very serious competitor in the enterprise market with WPF, for example, and Expression Web Designer and Atlas are looking good. In general though, there was very little innovation and lots of imitation. But, hey, this was my first Microsoft conference so I can't comment as to whether or not this is the norm or not.

Summary

Expression suite: Naming issues on two of the products, otherwise coming along nicely. Interfaces/workflow could be simpler, especially in Interaction Designer which aims to do too much in one place. Web Designer would be a formidable alternative to Dreamweaver if it wasn't ASP.Net-only.

WPF: Powerful alternative to Flash for enterprise applications. Would be a hard-sell to pitch Flex over WPF to a Microsoft house (once it's ready, of course.)

WPF/E Vaporware. Can't see it threatening Flash in any real way in the next five years.

Atlas Ajax is the greatest competition Flash has at the moment and Atlas makes Ajax easy. 'Nuff said.

Vista Fix that darn start menu, people!

Technologies and products aside, I got to meet a lot of very cool people from Microsoft and really enjoyed talking with them and learning about this whole different world. The various teams appeared to be very open to suggestions and feedback and I hope that their various products will benefit from it.

At the end of the day, I am very excited that Microsoft is moving into this field because I am sure that it will spur Adobe on to create even greater tools in the future.

Balthaser Patent Prior Art Discovery

I just created a page on OSFlash (Balthaser Patent Prior Art Discovery) that we can use to compile a list of prior art to invalidate the ludicrous Balthaser patent. I've already added Mike and Dave's comments from the previous post to the page, along with an entry on K12.

If you have any information you believe might help, please feel free to add it to the page.

The Balthaser Greed?

I just read that Neil Balthaser has apparently patented Rich Internet Applications. The patent is question is 7,000,180 and, having read through it, I don't see how it supports Neil's reported claim in the above article: "The broader claim is one that basically says that if you got a rich Internet application, it is covered by this patent."

The patent appears to be specifically about the sort of service that the -- now aged and somewhat pitiable -- Balthaser.com provides. In other words, a web-based application for building web applications.

In my reading of it, the patent appears to very specifically target a certain type of application. In the abstract alone it states that the patent pertains to: "A host computer system, containing processes for creating rich-media applications, [that] is accessed from a remote user computer system via an Internet connection. User account information and rich-media component specifications are uploaded via the established Internet connection for a specific user account. Rich-media applications are created, deleted, or modified in a user account via the established Internet connection. Rich-media components are added to, modified in, or deleted from scenes of a rich-media application based on information contained in user requests. After creation, the rich-media application is viewed or saved on the host computer system, or downloaded to the user computer system via the established Internet connection."

So not all Rich Internet Applications, because not all web applications are created via other web applications/tools like Balthaser's so-called Pro:Fx.

Nevertheless it appears that Neil Balthaser at least wants to try to use his patent to bleed RIA developers dry -- some of whom have been building RIAs for longer than he has. What a wonderful man! I wonder if he has an Amazon wishlist somewhere?..

A short-term solution might include voting with our dollars to make sure that we don't finance Balthaser's efforts by using his service (is anyone using his services currently? I'd love to hear from you -- and whether or not you'll continue using them. Please feel free to use the comments to let me know.) A longer-term goal might be to start gathering prior art. Perhaps we can start doing this on the OSFlash wiki.

I know that Branden was building RIAs prior to/during 2001 (when this patent was filed) as he was the main Flash architect behind the K12 Virtual School that we built at that time. This was a huge RIA (and my first.) The content for it alone took a whole day to offline generate at the time (remember Generator? It was built using Flash 5 and has since been updated and upgraded by my dear friend Charlie Cordova, myself and others and, although I haven't been involved with it in the longest time, I hear that it is still going strong (and they *still* haven't fixed that hairline border issue around the app -- grrr!.. I was bitching about that more than five years ago guys!)

Software patents in general are a farce and I hope with all my heart that the EU will not bow to the tremendous pressure being put on it by the US at the moment to implement them over here. Regardless of what happens, and regardless of my understanding that this patent does *not* apply to all RIAs, I still believe that we, as a community, need to stand firm against this claim.

Oh yes, and funnily enough, Neil Balthaser apparently used to work for Macromedia as a "VP of Flash Strategy".

Not cool at all.

Does anyone else think that we're witnessing Neil Balthaser pull a Ray Horn?

Flex 2: How the Net Was Won

Flex 2 rocks!
Boy, what a night: Adobe announced three pieces of news that should make every web developer sit up and take notice.

Firstly, the Flex 2 framework and compiler are going to be available for free. Secondly, there is going to be a free version of Flex Enterprise Services (FES) that is not clusterable and limited by a certain number of concurrent connections (but apparently this is not a "developer version" -- you will be able to deploy applications with it.) Finally, the Flex Builder 2 tool will be priced under $1,000.

What do these three announcements add up to? One thing: Adobe gets it.

Flex... priceless!

This is a battle cry and I am so glad to see that Adobe are stepping up to the plate.

Making the framework and compiler available for free suddenly makes Flex a very sexy alternative to Ajax for web application developers. Flex is light years ahead of Ajax in terms of the types of interactivity that it makes possible and, most importantly, how easy it makes it to create such rich experiences. The free version of FES is going to allow these same developers to create data-rich RIAs with a workflow that is unsurpassed -- even in the current darling framework, Ruby on Rails. And, finally, having an affordable IDE like Flex Builder 2 is going to allow developers working in any size business to take advantage of rapid prototyping and visual development features.

Basically, Adobe appears to have addressed every one of the concerns I raised in my previous post. I can't be happier. It's about time Flex took over the Net and, with this aggresive new strategy, I can't see any reason why it shouldn't.

Here's to Flex 2! I can guarantee that you're going to be seeing a lot more it. And, if you haven't looked into Flex yet, I would wholeheartedly recommend that you do so if you don't want to miss the train on the next big thing in the world of RIAs. In fact, you can start right now by downloading the new Flex 2 beta release from Adobe Labs.