What Rhymes with AIR? I Don’t Care

I am not interested in developing for AIR, Adobe Integrated Runtime. While the features sound compelling, they do not offer me anything I need in my day to day development for clients. I do not believe the market, currently, has a supporting model for those types of applications in a compelling way. AIR additionally does not offer anything new beyond it being a Flash projector wrapper with Adobe’s name behind it. All of the features I’ve seen can be done, and have been capable of being done for over 5 years now. I believe the only reason there is a perceived vested interest by the community currently has to do in part with Adobe’s immense marketing initiatives, and part because all the new Flex blood has no idea of the history Flash already had doing this stuff.

I consider Flash and Flex really fun tools to make a living. I used to love doing desktop multimedia using Director, embedded Flash into Visual Basic & C, and even all of the 3rd party projectors (mProjector, Zinc, Screenweaver, etc.). The market, however, has been paying me since 2002 to build for the web. I know of 1 guy up in Detroit, Michigan who does nothing but desktop development doing Flash & Zinc. That’s pretty crazy when you look at all the wonderful things Flash can do being embedded into these various environments. They never got mainstream, even with all the cool things they can do. AIR is not fated to repeat this same history. Regardless, I fail to see how a big brand name with more cheddah’ than Macromedia, and newly christened Java-turned-Flex Developers can do what Director MX, Zinc, and mProjector couldn’t; get enterprise customers paying for Flash on the desktop.

All the main features of knowing when you are online or off, saving local data into either text files or mini-database engines, and running cross platform was capable of being done for years in Director, mProjector, and Zinc. Clients still didn’t pay for it. Yes, AIR DOES have transparency on an embedded browser, but that is not going to score me more work.

While I think Google Gears has potential because it actually positively affects my daily life as a consumer, I don’t yet see how AIR will. For example, if I could read my GMail and Google Docs while I’m on a plane with snakes travelling to client sites, that’d be wonderful! Until Delta gets wireless like other airlines, I’m offline when I’m at 30,000 ft. I’m no longer capable of using all the web apps I use up there. There is a real need to satisfy the occasional connectivity problem by having the ability for all of these web apps to work when offline. It’s hard to really gauge interest from the wider web development community when reading the echo chamber. Furthermore, Google Gears clearly shows Google is solving it themselves. Yeah, I know, Kevin Lynch being there might not be coincidence, but if you were Google, what would you do?

Bottom line, there are 2 sources of revenue that clients who hire me have. Either it comes from advertising, or they have an existing business model, and want me to build software to help them make more in that market. The former will use my content amidst other web content, aka adverts of some sort. The latter loves the deployment model of the web, and uses my applications on their intranets or internal websites to deploy to their customers.

So, the money fueling my Flash & Flex work right now is web based advertising models, and in using web based software applications to reduce overhead / increase customer retention & draw. People use web browsers to do both of the above, and so do consumers. They all have Flash Player 9 installed, or don’t mind installing it in the 12 seconds it takes on slow DSL . To this day, server admins still perceive Flash Player as a harmless animation toy and this works in my favor in getting them to install it corporation wide.

The only monkey wrench in the above is an un-substantiated (aka un-cited source because I don’t believe the info yet) report about click through rates. I’ve heard that click-through rates (meaning the percentage of people who see an ad AND click it) are EXTREMELY higher for widgets. While I don’t believe that strictly on the fact I’ve not been shown any official data, there is certainly evidence of it. For example, I’ve gotten 2 contract gig offers to do widget work, 1 from an agency, and 1 from a smaller software shop. The trend the past few years has been moving to bigger apps, not smaller ones, so this is odd… and using Flex, not Flash, to do them to boot. Third, the explosion of widget engines in the past 4 years. Kapsules, Konfabulator & Mac OSX’ built in stuff, Windows Vista’s sidebar, SpringWidgets, and Yourminis … and the 10 billion I’m not documenting here. It’s taking me 6 months to really try the ones that came with my Mac. Could I live without them? Sure, but do I want to? No, I’d prefer to keep them, and have access to them. Finally, the weird MySpace drama where they blocked a widget embedded on MySpaces user pages because it had it’s own ads, thus “stealing” MySpace’s ad revenue… and then subsequently buying them a week later since the company obviously knew how to make more money from MySpace’s users than they did. They wouldn’t do that if they weren’t concerned about losing money, enough to inconvenience users.

Either way, the only thing that could top the AIRBus travelling the country is if they did what Microsoft did and pay someone to build your existing, and proven to already work but let’s risk breaking it, in an unproven and new technology. Aka Yahoo building their Yahoo Messenger in WPF. On the flip-side, it seems that the Cerulean Studios peeps on their own accord checked AIR out when it was still Apollo, aka alpha, so I’m sure that saved some dough and garnered great feedback from viable developers. I use Adium on my Mac, and Trillian on my PC so does that mean I’d install AIR so I could use Astra on both? At least Yahoo knows that Vista has WPF pre-installed whereas, whereas the rest would have to install AIR even though WPF would be only Windows (they said WPF, not Silverlight, so…).

Don’t get me wrong, Meebo is cool and all, and I’ve used it from time to time, but there is a reason some of this stuff is out the browser. Those reasons are usually to use powerful code not included in enough browsers to depend on it. Waiting on AIR to implement said useful code means waiting years for it to come to fruition assuming AIR survives to version 2. I don’t know about you, but I like building stuff today, and in the next 6 months, and I fail to see incentives to do so. Yes, I’m aware of the various initiatives to allow talking to the OS via installed local socket programs to allow AIR apps more functionality, and while neat, it’s a hack, building something into AIR that is notnatively there.

Don’t get me started on how easy it is to write destructive viruses using AIR and how Adobe’s brand will be held accountable.

Same thing with ubiquity. Flash Player 9 is reported to be at 80% now. In a few months, we’ll have AIR v1 at 0%. What incentives do consumers have to download a large runtime to install your app? What does this to do to adoption rates which in turn affect development initiatives?

What about multiple computers? GMail works on any box with an internet connection. For AIR apps, however, the runtime has to be installed as does the app yet again on the target machine you wish to use. Furthermore, this assumes you have admin privaledges on the box. In all fairness, so does Flash Player. Finally, your data is probably saved locally unless the developer(s) of the AIR app made a way for it to be saved on a server. If not, your data is on that other machine as well.

People have spent a lot of money putting their brand online. Those people hire me to help that brand continue making money… online… and in a web browser. An unnamed company was quoted as saying, “…applications connected online that have the benefit of the desktop”. I can do that right now, and last year, and the year before that. It’s just that now, we have a bad ass runtime, and even more awesome tools that are still young, and have yet to be fully integrated. Combine that with a new breed of experienced programmers coming to the party. Just imagine a few years more when Adobe starts getting some competition (yes, I’ll keep praying for this dream, and just act delusional till then). Maybe that’s the tipping point?

It’s not so much that I wouldn’t enjoy doing development using AIR, but rather, I see it as an extreme niche, and one that there isn’t a lot of opportunity for people like me in. Can AIR do more than a browser? Sure. Will some consumers use AIR in tandem with their browser? Sure. Even so, I highly doubt the mid-size to Enterprise sphere will invest heavily in it. Getting “Flash Player 9” deployed on internal company networks is one thing, getting an app deployed, and then later updated potentially multiple times is another thing. While I love getting experience through hardship, after hearing the horror stories (DLL hell, etc.) I don’t really regret missing the desktop revolution.

As a Flex and Flash developer who drank the Central kool-aid to an Evangelist degree, I can clearly say I am not interested in developing for AIR.

USA Today Central

Pimp! A Central App made for USA Today – USA Today Central. Featuers:

  • Downloads and displays the latest news from USAT’s major sections
  • Displays news and sports photo galleries
  • Allows for “clipping” articles and galleries that you want to keep
  • Loads each section’s RSS feed by default, but can be customized to pull in lots more data
  • Get alerts when news contains keywords that you specify
  • Get weather forecasts in a continuously-updating pod
  • And of course it all works offline, perfect for in-flight reading

Nice way to read USA Today with quicker access to content than a web browser can and works offline. Also “feels” like more control merely because of the responsivness when I quickly change categories. There are still ads, and some USA Today branding so it seems a great compromise between getting a fatter client, but keeping true to the company’s brand and need for advertising. I think what I enjoy most is the ability to be alerted when keywords I enter come up in the news whether in an hour form now… or next week!

Go Josh Santangelo & Andreas Heim of Smashing Ideas!

Flex & Central: Single State Based App, 2 Different Designs

One technique I showed last night at my presentation on Flex for Flash Developers I didn’t explain the significance. When installing applications into Macromedia Central, if you add additional applications tags, it’ll install multiple applications, all from 1 product.xml file.

However, 1 of my applications merely operated in a different state. If you are a presenter, the components have additional controls to allow a presenter to do things that a viewer cannot. Each component follows the loose interface of “I’m a Presenter or not”. It’s merely a boolean. However, I was having a hard time making them look different. Since the functionality is significantly different depending on the user’s role, it has different branding.

Another problem is that Flex compiles the CSS file you use to style your app at compile time; there is no dynamic way to change CSS styles at runtime… but you can use setStyle to change the style properties after the fact.

And that’s just what I did. Observe the 2 following screenshots (click on them for larger view):

DM Version

Player Version

Each app is the same code base, just configured differently by the product.xml. The DM version is a presenter based tool, whilst the player one is not. The DM has a red background with a different logo and program icon; the player version has a blue background with a different logo and program icon.

The way I got this to work is to utilize the initialData tag in my product.xml file. When your application starts in Central, the onActivate method gets the data you put in your product.xml file as XML passed into it as a native ActionScript object. In my case, for the DM version, I made a “runmode” variable equal to a string value of “dm”. For the player application, it equals “player”.

The DM application XML:

<initialData runmode="dm" />

The Player Application XML:

<initialData runmode="player" />

When my application starts, the onActivate handler determines what mode the application is running in and styles accordingly. In this case, it sets the background color and the logo image. The Central installation process via the product.xml has already assigned the correct icon.swf files for use in Central itself.

The onActivate handler:

public function onActivate(shell:Shell,
                           appID:Number,
                           shellID:Number,
                           baseTabIndex:Number,
                           initialData:Object):Void
{
        this.shell = shell;
        
        onResize();
        
        if(initialData.runmode == "dm")
        {
                isPresenter = true;
                logo_img.contentPath = dm_logo_img;
                this.setStyle("backgroundColor", 0x530002);
                gameWizard_mxml = GameCreationWizard(PopUpManager.createPopUp(this,
                                                                                            GameCreationWizard,
                                                                                            true));
                gameWizard_mxml.addEventListener("gameCreated", Delegate.create(this, onGameCreated));
                gameWizard_mxml.centerPopUp();
        }
        else
        {
                isPresenter = false;
                logo_img.contentPath = player_logo_img;
                this.setStyle("backgroundColor", 0x002953);
                loginWizard_mxml = LoginWizard(PopUpManager.createPopUp(this,
                                                                                      LoginWizard,
                                                                                      true));
                loginWizard_mxml.addEventListener("gameSelected", Delegate.create(this, onGameSelected));
                loginWizard_mxml.centerPopUp();
        }
}

Obviously, not only is having the ability to install 3 seperate applications via 1 XML file cool, but having 1 of those applications operate as 2 seperate, independant applications in a different state merely from an installation configuration variable. Nice.

Notice I had previously set the backgroundColor of the application tag to black; as per Flex Chronicles #8, if you don’t set an initial value to the backgroundColor, you cannot later set it.

Flex, Flashcom, & Central: Tic Tac Toe

Let’s start this new year off with a bang.

Bloody hell, what a week. While the rest of you were probably spending quality family time with relatives & relaxing, I was doing the same, except I wasn’t relaxing. I made a Tic Tac Toe game with the all the free time/days off I could using Flex, Flashcom, and Central. I learned a lot, and have the classic “I hate how I did this, I must redo it knowing what I know now because I at the time, I didn’t know what I know now.” I coded myself into a corner on the Flashcom side, and couldn’t allow connection instances; meaning, all users share the same NetConnection instance; you all play the same game of tic tac toe, and have to share. You CAN chat, however, while waiting. She’s buggy and sort of works, but I fixed all of the horrible crashes… that I couldn’t find anyway. I plan on re-doing the core architecture in the future so you can play more than 1 game; I like how the UI fits, I like the Flex code, I like the Central code, I just don’t like the Flashcom code, both client and server.

I only have 10 connections, so if you can’t connect, try again later.

Have at thee!

Tic Tac Toe – Install | Source