Enterprise Apps in the Cloud Just Got Better: Salseforce/Adobe Partnership

Today we announced an interesting partnership between Salesforce.com and Adobe. As Tim Anderson noted, there has always been a surface integration because Flash Builder could consume WSDL’s and Salesforce.com has always exposed them. But this goes quite a bit deeper. One, we’re working with the Salesforce.com team to make sure their IDE is completely integrated into ours. You’ll be able to get a combined Force.com and Flash Builder tool so you never have to switch environments to create Flex applications on top of the Force.com platform. The new tool exposes a new project type, the Force.com stratus type, and lets you automatically connect to the Force.com platform using a WSDL file. Then you can use the data features of Flash Builder to connect your data in the cloud with Flex components. It also has support out of the box for creating AIR applications that support online/offline synchronization.

The new tool and the partnership really simplify the process to connect to the Force.com platform so that you can focus more time on building a really great user interface that exposes those services. A “consumer-link” user experience is becoming more and more prevalent in the enterprise and is seeing a lot more demand. As ReadWriteWeb notes this is going to do a lot to help merge the consumer world of Flash with the enterprise back end of Force.com as well as some of our enterprise functionality in the form of LiveCycle Data Services. I think there are also some cool use cases here for integrating LiveCycle Collaboration Services. And of course the Force.com platform now gets access to over a million Flash developers who can target the cloud.

You can check out the video below for some getting started information. There is also a fantastic Force.com quickstart on Adobe’s Developer Connection and a lot of other information on the Force.com section of Devnet. Finally there will be a live webinar on November 3rd with James Ward and Markus Spohn where you can get a demo and then ask questions about how it all fits together.

Mini-Microsoft Interested in Adobe AIR

Kevin Goldsmith pointed this out and I thought it was awesome. For those not familiar with Mini-Microsoft, he’s (she?) is a highish level Microsoft employee who blogs anonymously about what’s happening at the company. He has a ton of insight about what’s going on over in Redmond and quite a bit of opinion about how things should be. My Microsoft employee friends love him. On Tuesday he did a breakdown of Microsoft’s quarterly numbers and what the status of various parts of the company are. The gem came when he talked about Dev Div (which I think stands for Developer Division), the part of the company with the developer tools and technology. Here’s the quote:

Dev Div: If I had to sit down tomorrow and write a casual application for the PC, my mind would fork itself in about five different directions. Native with ATL? WPF? Silverlight? An HTA? And what’s up with XNA? If I want to write an app for the Zune (which Zune?) what do I do? And can it run on some future mobile device? And the PC? And Xbox?

And how do I share it? How do I sell it? And, ah, crap, you mean you just released a whole new version of C# / Silverlight / XNA that I have to go and relearn? Maybe those free Starbucks coffee dispensers wasn’t a good idea…

If anything, I’d probably be pretty damn tempted to invest time learning Adobe AIR. And I’m thinking that while smack dab in the middle of the Microsoft bubble. There are a lot of Partners in Dev Div, and I’m not seeing any benefit from their concentration. The Windows client should be the premiere development platform. It’s not. What am I missing?

Mini, if you want to learn AIR, you can drop me an email. I’ll drive over to Redmond or even meet you secretly at the Adobe offices here in Fremont and show you the ropes. Anytime :)

ColdFusion versus PHP – Uploading a File

I spent part of my vacation digging into PHP. I’d like to be much savvier with PHP because we’ve seen a big chunk of Flex adoption from the PHP community and I’d like to be able to talk to those developers more intelligently. Unfortunately my server-side programming chops are very, very rusty. I started out as a ColdFusion developer and I’ve been able to play with some of the new stuff in ColdFusion 9 but I haven’t built a real CF app in a long time. So I thought I’d do a bit of a comparison and I’ve started doing simple things in PHP and then replicating them in ColdFusion. The first one is file uploading.

Disclaimer: I’m assuming there are things I’m doing wrong. File uploading is fairly basic, but part of the reason I want to blog the basic stuff is so people can let me know where I’m messing up and what I could do better. So flame on in the comments.

The Code Comparison

PHP – file_upload.php

<body>
<?php
     ini_set('display_errors',1);
     error_reporting(E_ALL | E_STRICT);
 
     if(isset($_POST['submitted']))
     {
          if( move_uploaded_file($_FILES['myfile']['tmp_name'], "{$_FILES['myfile']['name']}") )
          {
               print '<p>It verked!</p>';    
          } else {
               print '<p>Problemo!</p>';
          }         
          print_r($_FILES);
     }
?>
     <form action="upload_file.php" enctype="multipart/form-data" method="POST">
          <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
        <p><input type="file" name="myfile" /></p>
        <p><input type="submit" name="submit" value="Upload" /></p>
        <input type="hidden" name="submitted" value="true" />
    </form>
</body>

ColdFusion – file_upload.cfm

<cfifisDefined("form.submitted">
     <cfset currentPath = getCurrentTemplatePath()>
     <cfset currentDirectory = getDirectoryFromPath(currentPath)>
     <cffile action="upload" nameconflict="overwrite" filefield="form.myfile" destination="#currentDirectory#/coldfusion.gpx"/>
     <cfif cffile.filewassaved eq true>
          <p>It verked!</p>
          <cfdump var="#cffile#"/>
     <cfelse>
          <p>Problemo!</p>
     </cfif>
</cfif>
<body>
     <formaction="upload_file.cfm" enctype="multipart/form-data" method="POST">
        <p><inputtype="file" name="myfile" /></p>
        <p><inputtype="submit" name="submit" value="Upload" /></p>
        <inputtype="hidden" name="submitted" value="true" />
    </form>
</body>

Thoughts

I thought it was interesting how PHP and ColdFusion differ in the actual upload mechanism. Both of them just upload the file to a temporary location but then how the programmer deals with it is different. With PHP, you “move” the file to a location of your choice with the move_uploaded_file method. With ColdFusion you use cffile but call the upload attribute instead of the move attribute. That's why you don't put # signs around the form.myfile attribute because the upload function in cffile uses the POST info and that filefield attribute to do the moving/copying behind the scenes. Not sure which one I like better.

A few other bits. One, ColdFusion seems to give way, way more information about the file you've uploaded. I don't know if there is a way to get that kind of detail from PHP, but with ColdFusion I get a bunch of attributes like filewassaved, fileexisted, filewasappended, serverfileext, serverfilename etc. Some of that I can parse from the PHP information, like the file name and file extension, but other information, like if it was overwritten, or if the file already existed, doesn't seem possible to get with PHP. Two, it is really, really annoying to use a relative file path with ColdFusion. The move_uploaded_file function uses a relative path so it's easy to upload it to the same directory. With ColdFusion it's a pain, which is why I had to set a couple of extra variables. Also, PHP seems to love to check that you're below the max file size. You have to set one in your php.ini file and then send it again as a hidden form field. That seems completely redundant and I can't figure out why they do that.

Like I said above, this is supposed to be a pretty basic example because I want to know if I'm doing something stupid. If so, or if you have any additional info on my thoughts above, let me know.

Introducing “Contextual Applications”

We did a soft launch with some information of a concept that Adrian Ludwig and some of the other brain-trust folks at Adobe came up with recently called Contextual Applications. I have absolutely fallen in love with this term (and I had nothing to do with thinking of it). In a lot of ways I think this is RIA 2.0. One of the problems with RIA was that it had a grossly vague definition. It was kind of a Frankenstein combination of a desktop-like user experience, better design, real-time communication, rich media, and Web 2.0 ideals. In the end, RIA encompassed almost everything; Ajax, Flash, Silverlight, Adobe AIR, WPF, etc. That’s not a bad thing but it became hard to distinguish the value of RIAs because everyone could claim they were doing “RIA stuff”. The important thing is that we made a lot of progress with RIA and changed how people thought about software development.

Defining Contextual Applications

Contextual applications are a lot more concrete and have a better value proposition for both end-user and developer. It isn’t defined by a particular technology but instead a particular type of experience. So what is it? The idea is fairly simple. You’ve got a core set of data and a core experience that you have to deliver. But in today’s web there are multiple “touch points” out there. What about mobile? The desktop? A browser experience? A widget? An experience specific for social networking? Maybe a television? Users expect to have their content everywhere, on demand, regardless of how they’re connecting to it. The user experience and design challenge is creating a unified brand and experience that leverages the same content and is tailored to the specific technology limitations of a particular “touch point”. Solving that challenge will give you a contextual application. An application that moves with the user across a number of screens/devices while maintaining content and a user experience that is consistent but unique to each device.

Finetune: The Ultimate Contextual Application

The Contextual applications site has a number of examples but my favorite is definitely Finetune. They are a great example of one of the earliest contextual applications. They started out with a web-based application. Then, with the benefits of the desktop they created an AIR application that had native windows and used the file-system capabilities of AIR to tie into the iTunes library and pull artists that were interesting to the user; using the technological features of the underlying touch point to customize the experience. Then they were interested in deploying a version on the Wii so they created a Wii-specific browser application that ran on Flash Player in the Wii and maintained the Finetune branding. Then of course mobile was a big demand. So they built two mobile applications; a Flash Lite app that reused a lot of code and still maintained the Finetune experience but customized for the small screen. They also built an iPhone app with touch support that captured the experience of the iPhone while maintaining that core Finetune interface.

To me, the Flash Platform stands alone at being able to let developers and designers easily deploy contextual applications. With so many different operating systems and screens supported, it becomes easy to reuse the tools and workflows to create applications that are tailored for those screens while maintaining a sense of continuity. And think about the server infrastructure. Are you using FMS to stream Flash Video content? That content will be supported everywhere the Flash Player is so you can quickly jump between screens and be sure that your base content, the most important thing, is completely intact. It lets you design around your content and maintain that emotional branded connection with your users.

Ultimately it is about productivity. The number of touch points is only increasing and to be able to deploy on as many of them as possible you need to be able to reuse code, design assets, and workflows as quickly as possible. The Flash Platform gives you the broadest reach with a large community of designers and developers who are skilled with the tools. Ultimately that means you’ll be able to create contextual applications quickly and reach your users wherever they are. That’s why I’m so excited about this concept: ultimately it gives the user more control.

iPhone versus Android (HTC Hero edition)

htc_heroAfter MAX I went backpacking and fell in a river with my iPhone in my pocket. The iPhone is not a fan of water so it was totally dead. I have to get a new one through the Adobe system but this week everyone at Adobe has been on vacation so I wasn’t going to be able to pick up a replacement. That left me with the HTC Hero that I’ve got for demoing Flash mobile content. I swapped the sim card and I’ve been using it all vacation. I hadn’t used any phone but the iPhone for a prolonged period of time in a while so I figured I’d write up my thoughts on the iPhone versus Android now that I’ve actually had to learn the Android quirks.

Overall User Experience

I really, really want Android to succeed. But the iPhone is still the king when it comes to user experience. I find the HTC Hero with Android to be much, much less snappy than the iPhone. When I click something on the iPhone, I get an immediate reaction. On the HTC Hero, there’s a noticeable delay which becomes very annoying. However I like the UI for the Hero a lot better. Android has a nice, polished UI that is mostly intuitive and a bit more interesting than the iPhone’s boring button UI. The responsiveness is what got me though. On a faster phone, I could see Android being king here, but right now: Winner: iPhone

Battery Life

I found the battery life between the iPhone and the HTC Hero to be pretty equal, they both last me less than a day with heavy use. But one thing that I found extremely annoying is that the HTC Hero takes forever to charge via USB while the charging the iPhone over USB works really well. As a result: Winner: iPhone

Software

I love the Android software. I know Apple has the “There’s an App for That” crap, but out of the box, Android rules. Being able to install applications with a barcode scan is also really slick. I found the Android software to be more full featured, have many more hooks into the social networking services I’m a junkie for, and generally just more fun to use. If it wasn’t for the sluggishness, it would be perfect. The exception to this is the mapping. It’s abysmal. No gesture support for zooming, you can’t click on markers and interact with them in the same way you do on the iPhone. It’s just terrible to use. But in general, even with that and all of Apple’s apps, Winner: Android/HTC Hero

Typing

I type a lot on my mobile devices because I use them pretty heavily for email. I found it took a while to get used to the Hero’s keyboard. I like the fact that Android offers you a set of words based on what you’ve typed so you can auto-correct. That feature also makes it easy to add things to the dictionary because you can just click the word you typed and it will be added (no more ‘shot’ and ‘duck’). But even with that enhancement the iPhone’s keyboard is just better at detecting which letter I want to type next. Maybe I just need to spend more time with the Hero, but Winner: iPhone

Annoying Things About Android/HTC Hero

No sensor that detects when the phone isn’t near your face any more. This is just a limitation of the phone but it is annoying as hell. I also think the phone is too “buttony”. While I like the rollerball, it seems like any time I want to do something I have to click a button. With the iPhone they did a great job of making it as gesture-based as possible. The browser is a good example. On the iPhone, to type a URL, just move to the top of the page, and type it. With Android, you have to push the “menu” button. Takes some getting used to and the iPhone feels more natural.

Annoying Things About the iPhone

No Flash Player for one :) . But I also loved the GPS indicators on the Android. The little status icon at the top tells you whether you actually have GPS signal, and the camera lets you know when you’re locked on so it can geotag your photos accordingly. I really wish the iPhone had that.

Summary

In the end, the iPhone is just too damn good. I have high hopes for the Droid, but I’m on AT&T so I won’t be seeing it any time soon. But if the new processor is as good as people say it is, then hopefully we’ll get a snappy Android phone on AT&T soon. When that happens, I’ll ditch the iPhone in a heartbeat.

Really Slick Chess App in Flex/AIR

Greg Wilson has been busy working on a pet project with some friends that shows off nearly the full range of the Flash Platform. I got to see some early prototypes and screenshots so it’s really cool to see it in action. They spent a lot of time on the user interface and it’s an incredibly polished application. It’s also making use of the new AIR marketplace try/buy features so if you’re interested in monetizing your AIR applications you can download this to get a sense of how it works.

You may have to wait a little while currently to start a game, but once you do, it’s worth it. The graphics for the app are awesome. The UI is a really important part but as I said, they are making full use of the Flash Platform stack including using ColdFusion and LCDS. Greg’s next blog post is going to cover that part of it.

The only downside is that Greg is making the rest of us look like slackers. Adobe is supposed to be shut down this week but he’s cranking out software releases.

What’s New In Flash Catalyst Beta 2 Screencast

I did a screencast that tried to cover all of the feature changes between the beta 1 of Flash Catalyst and the just-released beta 2. The team has been very hard at work and they’ve done a really good job. It feels more polished and has a lot of great stuff in it.

The quality of the screencast (and the audio) ended up being bad, so I apologize for that. I’ll be better next time.

What’s New in Flash Catalyst Beta 2 from Ryan Stewart on Vimeo.

Rundown of the MAX News

The press releases just crossed the wire and we have a ton of news coming out of MAX. Plus more surprises in store for tomorrow. For those of you not here you can still check the keynotes out. I’m hosting the online side of the MAX keynotes and we’re doing some fun stuff before and after the keynotes to give you a sense of what’s going on at MAX. As you can tell from the rundown, there’s some fun stuff today.

Flash Platform Runtimes

We’ve been saying all year that Flash on mobile devices is a push this year and we’ve made a lot of progress. Today at the keynotes we’re going to be showing off Flash Player 10.1 for smartphones. This is the version of the Flash Player that we’ve been working on so hard this year. We’ve been working with some great partners including Nvidia and ARM to optimize the player for those devices and create a quality mobile experience.

Possibly more important is that the number of companies committed to the Open Screen Project continues to grow. Today we announced that RIM is joining the Open Screen Project, which means that Blackberry will be supporting Flash Player 10.1. Google is also on board. We’ll have public versions of Flash Player 10.1 for Palm, and Windows Mobile later this year with Google Android and Symbian following shortly. Developers will have mobile bits in their hands soon.

We also announced AIR 2.0, which is going to give Flash developers a lot more native hooks into the operating system. A lot of the developers I talked to wanted it and so that’s what the team did. Mike Chambers talked about some of these features at Flash on the Beach. Another cool feature of AIR 2.0 is the ability to record from the microphone without going to a server. getMicrophone can now be a reality

.

Tools

We also have public betas of both Flash Builder and Flash Catalyst that are available today. I’ve been really impressed with how far Flash Catalyst in particular has come from Beta 1 to Beta 2. It’s a lot more polished, has more functionality (including video) and feels a lot more fun to use. If you checked out Beta 1 and found it lacking, you should check out Beta 2. We’ve also made big progress on Flash Builder and I’ve been a very happy camper using the tool full-time.

Servers

Some very cool stuff is also happening on the server side. We’ve released ColdFusion 9, a spectacular release with some great features including the ability for you to consume ColdFusion as a service from inside of your Flex application without writing ColdFusion code. I’ve also been playing with the LiveCycle Data Services release and its modeler plug-in for Flash Builder. The team has focused on model-driven development making it easy to generate and create a model, and then link that model directly to your Flex application. It helps by generating all of the assemblers and you can directly modify the user interface just by changing the model.

Finally we’ve got some Flash Media Server news. We’re adding support for HTTP streaming, which will include support for content protection. We also have released the Collaboration side of Flash Platform Services and announced pricing so you can jump in and start adding collaboration to your application.

If you guys have any questions (sorry I don’t have more fleshed out info, it’s a lot of news), feel free to drop me an email – ryan@adobe.com and I’ll try and answer what I know.

2010 RIA Conferences List

Adrian Parr has a really great list of the 2010 RIA-themed conferences that have been announced. I’m hoping (and assuming) that he’ll be adding to this list as more conferences get added. There are a few on that list that I know I’ll be attending (and a couple I need to check on) and I’m looking forward to connecting with everyone. Hopefully Adrian will add MAX 2010 to this list when we announce the dates (hopefully) after this year.

Thanks for the list Adrian!