Apollo and the Desktop

Adobe's Apollo platform is, basically, Flex for the desktop.

Mike Chambers wrote an article answering the question "Why Apollo?" and it makes a pretty good case for why you'd want to use Apollo and where it fits in.

A key point is that Flex lets you write for the desktop and for the browser, using the same code base:

Ultimately though, because browser based and Apollo based applications are built using the same technologies, it is possible to deploy to both platforms, taking advantages of the strengths of each. Because of this, Apollo applications compliment web applications. They do not replace them.

I've agonized over platform choice for years, especially for my little fun projects where it doesn't really matter what platform I use.  They all have their advantages and disadvantages:

Java - Crossplatform, good tools, don't like the framework, and difficult to deploy.  Good for desktop apps, but no cheap hosting solution for web apps.

C# - Great tools, great framework. I like ASP.NET, but again no cheap hosting.  Windows only (mostly).

PHP - Browser only.  Cheap hosting, but really that's about all it's got going for it.

Rails - Not a great language for UI development.  Good for web apps and console apps.

C++ - You can do anything in C++, but it's hardly rapid or fun.

Flex and ActionScript 3 meet my various requirements pretty well:

  • The UI framework is rich, and it's binding model makes a lot of UI tasks very straightforward.  Moreso than any other environment I've used.
  • Desktop or browser?  Both.  Desktop version can work offline, browser-based version has that "use instantly from anywhere" appeal.
  • Cheap hosting:  Static hosting, with calls to services you can write in anything.
  • Rapid development.  Try it out if you haven't.
  • Cross platform.
  • Good tools. 

I'm concerned that there's been some hype recently around taking Rails apps and other web based apps offline, using various bits of hackery to run the server or portions of the server locally and synchronize remotely.  I don't like this direction because it means you're still writing browser-based apps, with the problems that come with them (like no desktop integration, hassles with the Back button, etc).

Consider an IM client.  You probably run one on your desktop, because you want it connected all the time and you want it to pop up when someone sends you a message.  A browser-based version is occasionally useful when you need it, but the desktop version is the one you've always got running. 

And instead of developing the client twice, once for each target, you only need to do it once.

I'm looking forward to the first good RSS client written using Apollo, because these are exactly the problems I want solved.  I love Google Reader, but I can't take it offline.