Flex 3 / Adobe AIR
Last night, June 10, Adobe finally released the public beta of Flex 3 and Adobe Integrated Runtime (AIR) (Formerly called Apollo).
I have been playing with the Alpha versions of these releases, and it’s a real pleasure to be able to talk about some of the new features without being bound by a NDA.
There are three features that I feel really stand out:
1. Flex component caching. This will reduce the download size of many Flex applications by 200 to 500+ kilobytes!
2. Application profiling. An invaluable tool that has already helped me improve the performance of even simple applications.
3. Object value tooltips during debugging. Seeing the value of a variable at runtime is as easy as running your cursor over it. I never knew debugging could be so fun
These features, and others, are discussed in more detail in a variety of places including Ted Patrick’s Blog and Adobe Labs.
Soon after the announcement, I registered a few Adobe AIR related domains, including AdobeAIR.org and Adobe-AIR.com. I’ve been considering creating a site for AIR developers to share code and ideas. Let me know if you have any ideas of how I can put these domains to a great use!
Startup Company Ideas
As a young person who often discusses potential business opportunities with older entrepreneurs, I frequently find myself the center of attention. After all, I am directly in the middle of the target demographic for most impulse and entertainment products.
To be completely honest, sometimes modern teenage consumers confuse me as much as they confuse most older adults. Even though I feel fairly confident about my understanding about the factors that motivate most Californian teenagers to become active members of social networking sites, I find myself at an equal loss to understand why the international market sometimes takes such different paths. If you’ve wondered why Friendster has failed so much in the United States, yet had incredible and unexpected success in Asia, your guesses are as valid as mine.
I can, however, share some business ideas that have come to my mind recently. I am contributing these ideas into the public domain, but bear in mind that they may have already been taken or have associated patents that I have not investigated.
1. Online Weblog/Website translation service:
A service that users could integrate with their regularly updated website or weblog whereby real people would translate content shortly after it’s submission. For example, a popular blogger could ask for his entries to be translated to 10 languages and have them immediately accessible once the translation is complete. Translators could be employeed by the company providing the service, or the company could act as a middle man between multilingual people looking to make a few dollars and webmasters (Similar to Amazon’s Mechanical Turk).
2. A social network for mobile device users:
Soon, many phones will feature powerful and fully featured web browsers. The iPhone will have Safari, and other mobile devices will rapidly follow suit. However, no matter what mobile phone one has, browsing MySpace or Facebook on it’s low bandwidth internet and small screen would be a nightmare. Although Facebook and MySpace could rapidly make mobile phone versions of their websites, many of their fundamental features would surely function poorly. For example, the poor CSS that many MySpace users love to have on their profile pages stands little chance of functioning properly on a mobile device.The market is prime for a new player to create a huge social networking website that caters to mobile users and that can integrate well with text messaging, photo, and voice features.
Open Coffee Meetup
This morning I attended a small local gathering of entrepreneurs in Palo Alto, right across the street from Standford University, and merely a few miles away from the famed Sand Hill Road.
There were only 5 people including me in attendance, but each of them shared incredible ideas and experiences. One of the hosts, Keith Teare, has been the CEO of half a dozen companies, several of which were highly successful.
The event is held weekly, and it will definitely be one that I will continue to attend.
If anyone else is interested, you can rsvp at: http://newtech.meetup.com/48/
Google Developer Day 2007
On Friday June 1, I attended the very first Google Developer Day.
Initially, Google had planned to invite a couple hundred people to the Googleplex (Their Headquarters) to learn about and discuss Google’s many external APIs. Well, not quite unexpectedly, there was a lot more interest than they had planned for. So much interest, in fact, that they had to relocated to the San Jose Convention Center. Additionally, they also held the event in several other countries around the world and streamed live video from San Jose Convention Center to people in all parts of the globe. (They have taped and uploaded most of the sessions to YouTube here).
The event was a blast, and definitely showed just how much Google cares about developers (and how rich they are). We were served endless quantities of excellent food, provided with high speed wireless internet, and invited to lounge about in what must have been more than one hundred bean bags. In the afternoon, everyone was bussed to the GooglePlex and served even more food while being given the opportunity to have casual conversations with some of the many Google employees that were present.
There were a few highlights that I’d like to share. The biggest one was seeing Ryan Stewart and Kevin Hoyt. Both well known RIA developers and Adobe employees. It’s great to be able to chat with some of the very people who work to create and spread incredible tools like Flex and Apollo.
I was also given the opportunity to sit within 30 feet of Sergei Brin as he discussed how Google plans to work with developers. During one joke, the humor of which unfortunately seemed to be missed by much of the audience, he indicated that he expects engineers to start writing software at the age of 12. No, it wasn’t part of the joke.
Finally, I was among the very first people to learn some of the finer details about Google Gears, an unusual technology that could lead to significant improvements and features in many RIA applications.
It was definitely a day to be remembered. I can barely wait for Google Developer Day 2008.
Adobe Student Pricing
Most readers may not know this, but I am likely to be one of the youngest Flex developers in the world. I started working with Flex Builder when I was 18. I am now 19 and I write Flex 2 code for at least 75% of each work work day. The other 25% is usually spent fixing Javascript bugs or doing browser related R&D.
A few weeks ago I was accepted as a Junior level transfer student to UC Berkeley. I do not plan to work while going to school since it makes more sense for me to get a student loan and dedicate my time to studying. However, I most definitely do not want to let myself fall behind as a Flex developer.
One of my biggest concerns has been the cost of Flex builder. $800 may not be much for most companies, but it is a tremendous amount for a college student to pay each time a new version of Flex builder is released on Adobe’s yearly release cycle (Flex 3 will be here before we know it). Admittedly, I could just avoid using Flexbuilder, but writing code in an IDE without the incredible incremental compilation, code hinting, and debugging features that Flexbuilder offers would be torture.
This is why I’m having a hard time holding back my excitement from the discovery that Adobe charges students only $100 for Flex Builder with charting! I feel as if someone just handed me $700.
It looks like Fireworks CS3 is only $100 as well. Sweet!
Thanks Adobe!
Cairngorm
With the help of an experienced coworker, I have finally had the opportunity to begin learning how to use Cairngorm.
Cairngorm is perhaps one of the most complex MVC frameworks available for Flex applications, and is frequently revised to better meet the needs of it’s maintainers (Adobe consulting) and the many Flex developers that use it.
Unfortunately, Cairngorm is not infallible. One major point is that it does not define any simple way to structure an application that uses modules. Large dynamically loaded modules that may contain their own model, view, and controller have no simple way of integrating with Cairngorm yet are still often critical parts of large applications. If a module is designed to link to data already inside the model, developers may then need to think of clever solutions for situations where a module might be used twice in different parts of the application. No framework that I am aware of have come up with a solution to this problem.
Additionally, some of Cairngorms features are overkill even for larger projects. For example, if an application is structured to have dozens or even hundreds of simple views it seems completely impractical for each view to have its own ViewHelper class. (Cairngorm does not force developers to use viewhelpers, so this is definitely not a reason to avoid the framework).
Unfortunately my experience is far too low for me to add additional thoughts or solutions to these problems at this point. But I am looking forward to finally being able to discuss Cairngorm patterns with more experienced developers.
Debugging HTTP and HTTPS streams
Some of you may have once used a program such as HTTPWatch or LiveHTTP Headers to monitor requests sent by your browser and responses that were recieved.
These programs are incredibly useful when debugging RIA applications in Flash, Ajax, or WPF/e. In particular, LiveHTTP Headers will allow you to dynamically edit GET and POST parameters before they are sent to a service and then see the response. This is especially useful in situations where services need to be rapidly tested before use.
But at this point it’s likely you’ve run into a limitation. Sure you can edit get and post data, but you can’t stop a request from going through and edit it dynamically (With LiveHTTP headers you can merely replay the request with modified data). Futhermore, you can not edit the response to the request in any way before it reaches your application.
There is another kind of tool that can do all of this and more. This tool would be an HTTP Proxy. My personal favorite is called Fiddler. Fiddler is a scriptable tool that allows you to pause and edit HTTP Requests and Responses. This makes it an invaluble tool for debugging SOAP and other web services. I have gone as far as to use it to prototype Javascript code changes served from a server I did not have file access to.
The latest beta version of Fiddler even allows debugging of HTTPS data. This feat is achieved by creating a local ssl certificate and adding it to the browser certificate store. Fiddler itself will establish an HTTPS connection with the target server, decrypt the data to allow modification, then re-encrypt it before sending it to you with a different certificate.
If for whatever reason Fiddler is not the right tool for you, another similar tool exists called Burp Proxy. I have found myself using Burp Proxy instead of Fiddler on more than one occasion when I found that Fiddler failed to maintain a certain amount of concurrent SSL connections. Burp Proxy and the Burp Suite have several features that Fiddler lacks, including an HTTP spider, and cross platform support. Unfortunately, it’s performance is severely lacking, so I would discourage it’s use in situations where a large quantity of requests must be made.
If you’re working on RIA applications that connect to web services an HTTP proxy is a tool you won’t want to miss.
Flex 2 Automation Testing
It seems that almost all Flex 2 developers are completely unaware that Mercury Quicktest and the Flex Automation package are NOT the only ways to test Flex 2 Applications.
Another far less expensive tool exists that can be used to run regression tests on Flex applications without the need to buy Mercury Quicktest or Flex Data Services. This tool is TestComplete version 4 or version 5.
TestComplete can hook into Microsoft’s Acessability Interface (MSAA) in order to identify and interact with controls inside a flex application. MSAA allows each button, link, menu, and even image inside of a Flash movie to present several customizable attributes to MSAA aware applications. While MSAA was designed for tools like screen readers, TestComplete allows for it to be used to do regression testing of unlimited scope.
Although TestComplete can interact with Flex and Flash applications without any changes to the application code, you will probably find that your application will need to be slightly modified in order to be tested efficiently. By default, TestComplete has no method to differentiate between multiple controls of the same time that are both visible in an application. In order to better differentiate between each object in an application, developers can assign an arbitrary “AName” and a “Description” to the object. You can then use either of these attributes to identify objects within TestComplete.
A side effect of these changes is that your application will become accessible to disabled users!
I’ve never tried the Quicktest Automation Plugin myself, and I’m sure it has some nice features that this method doesn’t offer. But if you need to test regular Flash (Not Flex) applications, or you are short on money to spend on QTP and FDS, then this may certainly be a method to consider.
—
If you’re interested in what I’ve described above, you’re probably wondering about the details of how you can get this method to work. I’ll be happy to answer any questions you have via e-mail. Simply reply to this message with your e-mail, I will moderate the message such that your e-mail address will not be displayed publicly.
Cross-platform runtimes are not so cross-platform
A major selling point of Flex, Flash, WPF/E, and many other application runtime environments is that they are cross-platform.
I am a big fan of the idea of writing software once and not having to redesign or change it to have it work on other browsers or operating systems. Incompatibility between Windows, Mac, and Linux software has cost both consumers and the industry tremendous amounts of time and money. Perhaps one of the worst offenders have been CSS, HTML, and Javascript which have partial yet unclear compatibility issues across browsers.
However, even modern and well designed runtimes such as Flash can present tremendous issues to cross platform developers.
Take for example a bug that I encountered with flash recently and reported on the Mozilla bug tracker: https://bugzilla.mozilla.org/show_bug.cgi?id=374497
This bug is no simple matter. It is a break in a feature that is a critical part of our application that occurs in Firefox. One of you might say that I could resolve this issue by simply using absolute positioning and javascript, but that doesn’t work either due to: https://bugzilla.mozilla.org/show_bug.cgi?id=308529
Of course Mozilla is not the only problematic browser. IE7’s new zoom feature makes transparent flash movies completely unusable!
While I am in favor of multiple competing browsers and operating systems, computability problems are causing me tremendous trouble. Despite using a cross platform runtime, I have had to write hundreds of lines of platform specific code. Of course, this effort pales in comparison to the difficulty of building an entire new application for each browser, but it is still something that should be considered before one claims that any application is cross-platform.
Fun at ApolloCamp
Yesterday I went to ApolloCamp, a one night conference celebrating the release of an Alpha version of Apollo, as well as introducing people to its use. For those of you who don’t know, Apollo is a client side version of Flex. It allows developers to write sophisticated desktop applications that are inherently cross platform.
Before going, I wasn’t even sure if they would let developers get their hands on the Apollo SDK. There was no official release date, but I hoped I would get at least something to play with. As I walked in and got into a line, I was handing a small CD case with a red disk labeled “Apollo Alpha.” I don’t think I’ve ever seen so many people grinning at one time.
The line then went past a table where they were giving out what appeared to be the trial of Flex Builder. I was about to walk right past it, but then they said “This is not the trial version by the way.” and handed me a box. Holy cow! They literally just handed me an $800 piece of software. Score!
The conference itself was incredible. The application that stood out the most was one being developed by EBay to allow users to create and bid on auctions using an application instead of their website. There were too many features for me to begin to describe here, but I’m sure you’ll all hear a lot about it when it’s released.
I also had the pleasure of meeting some really cool people including Kevin Rose (Yep, the Kevin Rose from digg.com). Apparently ApolloCamp will be featured on the next DiggNation. I also talked with many of the people who develop Flex, Apollo, and FlexBuilder.
This morning I’m going to start getting my hands dirty with Apollo. I’m hoping to see if I can find out some things about the internals of Apollo that have not been revealed and may be of use to developers.