« October 2008 | Main | December 2008 »
November 20, 2008
Day 3 at MAX
Here are my notes from the third and final day at MAX. It includes info on searchable SWFs, Google working on external media in SWFs, Cairngorm tips, new Cairngorm directions, the Marshall Plan, and Salesforce services.
Flex Framework Features to Support Large Applications
The Marshall Plan in Flex 3.2 allows an app to utilize sub applications built with different versions of Flex.
Limitations- needs full sub applications, styles aren't marshalled, resource bundless aren't marshalled, drag and drop requires extra work, mouse and key events need to be listened to differently, sub applications must load their own RSLs, need to create a different domain to use AMF, doesn't prevent different sub applications from reach into each other, and can sort of create subdomain security with a lot more limitations.
My take-away from this session was that I won't be using the Marshall Plan for any applications anytime soon. But it was still very interesting to hear more about ApplicationDomain and SecurityDomain. I thought that ApplicationDomains were very similar to Java ClassLoaders, but I now see the distinctions.
The Searchable SWF File
Previous solutions for a searchable SWF were workarounds using swf2html or attaching xml to a page. Adobe and Google have worked together to make SWFs show up in Google results.
A special version of the Flash Search Player (Ichabod) steps through visual states and gets the text. It only finds text fields that would actually be shown in the display list. Ichabod must be fast, so it executes faster than real time and doesn't render. Since it must be deterministic, there's no network access, sockets, or threads (sound). Thinking about providing a version of Icabod that's available to everyone to allow you to search SWFs yourself.
If you use SWFObject or Adobe detection kit to embed, your SWF will be found. Other Javascript embeds may not be found, but they are looking into improving this.
If you load in any external media, this currently won't be used within the SWF. But Adobe has fixed their side of this issue, and it just needs some work from Google to work correctly. It's expected that when Loader.load() is used, Google will fetch or get a cached version of the call. An example of this from the Adobe side was used with the Flex store.
What's next, in no particular order:
1. Dealing with external media, as mentioned above.
2. Deep linking. It doesn't currently deal with unique URLs for different states in a SWF, but they're trying hard to get this done.
3. Partner with Yahoo and other search engines.
4. Getting accessibility text.
5. Thinking about getting metadata from progressive download videos, especially with the work at Adobe for getting text from video.
It's possible to use Ichabod for unit tests if this player gets released. It could be extremely helpful for this, since the tests would run much quicker.
The questions at the end turned into a session on how to try to thwart the system. I'm not going to post the suggestions that came out of it, but it was pretty creative.
Building Business Applications in the Cloud with Force.com and Adobe
He listed about 40 things that you need to have to be a platform as a service- data center, disaster recovery, sharing, integration, authentication, API, workflow, monitoring, updgrades, backup, etc, etc. A good list to show all the things that you may not think about when you do a service yourself. "It's more than just imaging a server and putting it up in the cloud"
Some interesting numbers: 150M+ transactions daily with an average speed of 210ms. ~37% global deployments. Allow people to create any schema they want: 8,700,000+ schema edits. 160,000 SQL statements per second. 1.75 billion API calls per month. 28+ billion total API calls.
Created an ActionScript library for using salesforce services. They have a SWC which can be used to query salesforce.
The web services have 1 noun and 19 core verbs (and 4 verbs constitute 90% of usage). Batch based API. Architected for high volume and high velocity. They create revisions of their API and are now at the 14th generation. He says that people have integrations that have been running for 8-10 years which have barely changed at all.
Unrelated to the above, but which I heard after the Salesforce session, it that the Flex framework RSL is cached by over 50% of users in the US. I'm not sure how this was calculated, if it refers to a specific RSL, etc. But that's surprisingly high to me.
RIA Development with Cairngorm: Tips from the Experts
This started out with a general explanation of Cairngorm, which I didn't take notes on. Lots of great info like this is available on cairngormdocs.org
They showed off a refactored version of the Cairngorm Store. As part of this and in the middle of the talk, a lot of excellent suggestions were given for working with Cairngorm. Here's some of them:
1. The presentation model works well for large applications.
2. Can use the model for functions which are called from the view and dispatch events. This function can send a result handler through the event and handle the result itself (instead of setting the model directly in the command).
3. Models should be passed down to components (instead of calling ModelLocators directly). Call ModelLocator.getInstance() in the view only once! Do everything else with data binding.
4. Responders should be used used to handle service requests. It can be helpful to have a base class to implement a common fault method.
5. Anti-pattern: the fat controller. Group controllers in functions or create sub-controllers.
6. Anti-pattern: model locator landfill. The model locator should not store properties. Group properties into clases, ie presentation models.
They also informally announced the Cairngorm Committee, which will guide the future of Cairngorm. I'm happy to say that I'm on this committee.
It's "all about the timing" for when to use Cairngorm, different project structures, different patterns. It's not about doing everything up front, which can mean that business value can't be shown quickly. But it's also not good to wait too long and cause even more pain, either.
They're thinking about using inversion of control instead of ModelLocator- something for the community to think about.
They demo'd the Cairngorm Plugin which creates commands and events easily.
November 19, 2008
Day 2 at MAX
Here are my notes from the second day at MAX. It includes info on the keynote, development best practices with Flex, Flash security, RTMFP, and speech to text.
General Notes
A lot of people were interested in the basics of Brightcove but didn't know a lot about the technology. I've been meaning to write more about certain areas for awhile- advertising, BEML, a few other things- and this reminds me to do this.
I got a lot of comments on the compiler update I've released, and I appreciate all the comments on it. But I want to make clear again that I didn't make the compiler changes myself! I've merged the changes from the Flex compiler team- thank Paul Reilly and the rest of that group for doing the real work.
Keynote
Besides making me go slightly deaf with the sound system, they showed off a lot of new features in CS4 and other products. They showed off a literal copy and paste from CS4 applications to Catalyst which was then turned into components. This round tripping is done through FXG support in CS4 applications and Catalyst.
I saw Alchemy again as they showed the following demos in Flash: open SSL encryption, decoding of Ogg Vorbis, decoding of RAW images, showing PDFs in Flash, Doom, and Mario. The showing PDFs is particularly interesting for the future of the Flash player and the Adobe Reader. I wonder if some of PDF viewing will switch over to the Flash player?
On the .NET front in Flex, they have a partner plugin to Visual Studio and a possible C# version of BlazeDS.
In addition to multi-bitrate and RTMFP, they showed off an interesting live feature in FMS. You can now record a stream and stream it live at the same time to have a DVR-like experience.
Developer Best Practices With Flex
This session was about developer best practices with Flex with a particular focus on using Catalyst. There was quite a bit a talk about general engineering practices that should be used in Flex as they should be used elsewhere: use coding standards, comment code, and use design patterns. Nothing too surprising in this part of the talk other than advocating code behind, which I don't think works very well for Flex.
They talked about various things that developers should do to prepare their projects for Catalyst development, such as applying metadata to files and laying things out properly. There will be a lot more code-level interaction with designers when Catalyst is used.
One more interesting note, something which I didn't know yet, is that Catalyst is built on Eclipse.
Flash Security: Why and How
This was an explanation of content restrictions with the Flash Player. Deneb had a few overriding rules for Flash security: use least privilege, validate input, deploy HTTPS consistently, prototype early, and keep track of security changes.
You need to call Security.allowDomain() if a SWF loads from another domain. This allows the SWF you are loading to call things within the parent SWF. The wrong way to do this is to call Security.allowDomain("*"). "There are rare times when you might want to do this."
You need to specify allowScriptAccess or allowNetworking in the HTML to allow your SWF to script the HTML from a different domain. allowScriptAccess set to never isn't used anymore because there really isn't a way in Flash to stop same domain communication between the SWF and a browser.
Data loading requires permission because it's data that the user can access but not necessarily data that's publically available. So a cross-domain policy file is required so that the server gives permission for the data to go elsewhere. Flash is also the first client to allow direct cross-domain data loading, although browsers are looking into similar abilities in HTML5.
You must use a socket policy file with any socket connection (including the same domain).
You need to specify allowInsecureDomain() to allow HTTP connection when HTTPS is being used in the main SWF. This can cause a man in the middle attack. Allowing HTTP content in HTTPS is even worse.
Sneak Peeks
I saw RTMFP yesterday, but there was a live demo of the many-to-many feature in progress today. RTMFP application-level multicast allows for many-to-many broadcasting, live streaming from one client to many clients without using a server.
Nitro is a platform to create Flash widgets which can be distributed to desktop, Web, TV, and mobile.
Content Intelligence Toolkit can find different scenes in a video and give information about each scene in metadata: lighting, activity, etc. Includes tracking of faces, and most impressively, speech to text of the video.
November 18, 2008
Day 1 at MAX
Here are my notes from my first day at MAX. It includes info on the keynote, using C/C++ libraries in Flash, Python in Flash, Thermo (aka Catalyst), RTMFP, and peer-to-peer communications.
Keynote
The keynote presentation had a major focus on "The Flash Platform", which includes the Flash Player, Flex, etc. It's was the main thing talked about by Shantanu Narayen. Nearly everything that CTO Kevin Lynch talked about were in Flex, Flash player, AIR. He also talked about "Mobile first", thinking of mobile design before thinking of desktop view.
There was an amusing mention of MLB.com and a NY Times AIR app. Both of these are conversions from Silverlight, two of the largest reference applications that I've heard about for Silverlight.
My favorite part of the presentation was the Salesforce VP talking about "platform as a service". A quote that got a big reaction: "For 20 years, enterprise software has been where innovation has gone to die." The speaker thinks that Salesforce is changing this with cloud computing, Flex frontends, and their development platform. They have a massive development platform- 87,000 custom applications on force.com, tons of apps on appexchange.com
Lazy Innovation: Strategy for the Design of Innovation User Experiences
This was a presentation by Adobe Consulting. I didn't take any notes from this presentation. I heard that at a different presentation at this time Ely Greensfield was going to mention me for my porting of compiler SDK work. But I was cut out of the talk, in the interest of time. My 15 minutes of fame has been thwarted.
Using C/C++ Libraries in Flash Player and Adobe AIR
There was so many people just grinning with excitement at this talk, before and afterwards. This is research project at Adobe, now known as Alchemy and released on labs.
It's based on LLVM, has partial POSIX emulation later, full port of the BSD standard C library (which is about 140 KB), and partial autoconf support. There's a C/AS3 bridge API athat llows access from one language to the other. There's also experimental support for debugging the C code from Eclipse while the code is running in the Flash player.
Surprisingly enough, and I'd like to learn a lot more about this, is that they see it run up to 25x faster than hand-written AS3. This is due to the AS3 API added and code optimization from LLVM.
They showed examples of using C++ libraries, using libpng library to encode a PNG, tracking an item through a web cam, and a voice synthesizer.
They have converted Perl, Python and Ruby interpreters, and they do run. So you can have these languages hosted within a Flash player. There's some work that still needs to be done to make this easier to use, but Python can now be interpreted at runtime within the Flash player? Wow.
Introduction to Thermo (aka Catalyst)
Thermo, now knows as Catalyst, was the hot topic of the day. This was a sold-out session, and they added a second session which sold out as well. Two quotes which sum things up to me: "Let designers design the entire interface, not just component skins." "Allow designers and developers to work in parallel."
An important note from the middle of the presentation: at least a year away from releasing the product.
Flex is spreading out from just being code-centric tool. Extending out to designers through Flash Catalyst, Flash Pro CS4 support, and FXG.
Create graphics in MXML (in FXG) format using Photoshop, Illustrator, and Fireworks. Support for this is available today. Skins can be visually designed through FXG. Merge tool for conflict resolution within Flex Builder for dealing with Catalyst changes. Obviously trying hard to deal with round-trip development, which is essential.
They also went over Flex Builder improvements for Gumbo, a huge list of interesting things: network monitor, improved compiler speed, reduced memory consumption, move refactoring, ASDoc tooltips in code hints, file templates for new classes, event handler generation, debugger expression evaluator. FlexUnit support, and more.
Future of Communication with RTMFP
RTMFP is Secure Real-Time Media Flow Protocol. It's a new alternative RTMP in the player.
RTMFP is based on UDP, which allows it to do a number of things that RTMP can't, since it's based on TCP/IP. It has a sophisticated protocol based on top of UDP: multiple parallel media flows of messages, variable congestion response, allows for peer-to-peer applications, fast recovery from brief outages, and IP address mobility.
Developers just need to change the protocol in their URL to use RTMFP. It requires port 1935 and multiple high UDP ports. There's no tunneled counterpart as there is in RTMP.
Peer to peer connections are a new use in RTMFP, which allows media to bypass FMS and travel directly between Flash players. FMS still used to introduce the peers and server still available if firewall blocks or RTMFP connection can't be made. In order to use this feature, need to add one parameter in NetStream code to get and identify the publishing id.
Stratus, available on labs, makes RTMFP available for use today.
Future possibility in RTMFP includes "groups", self-organizing overlay networks of peers. This may work with a "Groupspect" instead of a publishing id.
November 4, 2008
Brightcove Ends Free Network Service
There has been a lot of interesting Brightcove news lately that I haven't blogged about. There were two big publishers that Brighcove announced signing: AOL and The New York Times.
The big news today is that Brightcove ends the free Network service. I'm not sure at all what to expect from the blogs and news sites on this, but it'll be interesting again to see the comments throughout the day.


